#!/bin/sh # Instalador do Agent Team Chat. # # curl -fsSL https://atc.melhor.dev/install.sh | sh # # O que ele faz, e só isto: confere o Node, baixa o pacote, confere o SHA-256, # extrai em ~/.atc/app e cria o comando `atc` em ~/.local/bin. Não pede senha, # não instala nada no sistema, não sobe serviço. Para remover: apague as duas # pastas. Leia antes de rodar — é curto de propósito. set -eu BASE="${ATC_BASE_URL:-https://atc.melhor.dev}" APP="${ATC_APP_DIR:-$HOME/.atc/app}" BIN="${ATC_BIN_DIR:-$HOME/.local/bin}" diz() { printf '%s\n' "$*"; } falha() { printf 'erro: %s\n' "$*" >&2; exit 1; } command -v node >/dev/null 2>&1 || falha "não achei o Node. Instale o Node 22.5 ou mais novo (https://nodejs.org) e rode de novo." maior=$(node -p 'process.versions.node.split(".")[0]') menor=$(node -p 'process.versions.node.split(".")[1]') if [ "$maior" -lt 22 ] || { [ "$maior" -eq 22 ] && [ "$menor" -lt 5 ]; }; then falha "o Node $(node -v) é antigo demais — precisa do 22.5 ou mais novo." fi command -v curl >/dev/null 2>&1 || falha "não achei o curl." command -v tar >/dev/null 2>&1 || falha "não achei o tar." tmp=$(mktemp -d) trap 'rm -rf "$tmp"' EXIT diz "baixando o Agent Team Chat de $BASE …" curl -fsSL "$BASE/dl/atc-latest.tar.gz" -o "$tmp/atc.tar.gz" || falha "não consegui baixar o pacote." curl -fsSL "$BASE/dl/SHA256SUMS" -o "$tmp/SHA256SUMS" || falha "não consegui baixar a lista de verificação." esperado=$(awk '$2 == "atc-latest.tar.gz" { print $1 }' "$tmp/SHA256SUMS") [ -n "$esperado" ] || falha "a lista de verificação não tem o pacote." if command -v shasum >/dev/null 2>&1; then obtido=$(shasum -a 256 "$tmp/atc.tar.gz" | awk '{print $1}') elif command -v sha256sum >/dev/null 2>&1; then obtido=$(sha256sum "$tmp/atc.tar.gz" | awk '{print $1}') else falha "não achei shasum nem sha256sum para conferir o download."; fi [ "$esperado" = "$obtido" ] || falha "o SHA-256 do download não confere — não instalei nada." tar -xzf "$tmp/atc.tar.gz" -C "$tmp" [ -f "$tmp/atc/src/cli.js" ] || falha "o pacote veio incompleto." # Atualização: o código é trocado inteiro; seus dados ficam em ~/.atc/atc.db e # nos repositórios dos seus projetos, fora desta pasta. rm -rf "$APP.novo" mkdir -p "$(dirname "$APP")" mv "$tmp/atc" "$APP.novo" [ -d "$APP/node_modules" ] && mv "$APP/node_modules" "$APP.novo/node_modules" rm -rf "$APP" mv "$APP.novo" "$APP" sh "$APP/install.sh" "$BIN" >/dev/null diz "" diz "instalado: $(cat "$APP/REVISION" 2>/dev/null | cut -c1-7) em $APP" case ":$PATH:" in *":$BIN:"*) ;; *) diz "" diz "$BIN não está no seu PATH. Acrescente ao seu perfil (~/.zshrc ou ~/.bashrc):" diz " export PATH=\"\$PATH:$BIN\"" ;; esac diz "" diz "próximo passo, dentro da pasta do seu projeto (um repositório git):" diz " atc onboard monta o time: você e os agentes" diz " atc serve abre o chat em http://127.0.0.1:4319"