#!/usr/bin/env bash # Arranca Agencia dentro del contenedor. # # Existe para dos cosas que no se pueden hacer con un CMD: mostrar los tokens la # primera vez (si no, hay que ir a buscarlos al volumen para poder entrar a la web) y # avisar cuando el despacho está prendido sin agente autenticado, que es el fallo que # de otro modo aparece recién media hora después, como un turno que no contesta. # # Las variables se llaman AGENCIA_*. Las PROJECTS_* de antes del cambio de nombre se # siguen aceptando, para que un compose o un .env viejo no se quede sin despacho callado. set -euo pipefail DATA="${AGENCIA_DATA:-${PROJECTS_DATA:-/data}}" ADDR="${AGENCIA_ADDR:-${PROJECTS_ADDR:-0.0.0.0:7777}}" DISPATCH="${AGENCIA_DISPATCH:-${PROJECTS_DISPATCH:-0}}" LOG_FILE="${AGENCIA_LOG_FILE:-${PROJECTS_LOG_FILE:-}}" CONFIG="$DATA/config.json" mkdir -p "$DATA" first_run=0 [ -f "$CONFIG" ] || first_run=1 args=(--data="$DATA" --addr="$ADDR" --post-cmd=/opt/agencia/bin/agencia-post) # El despacho sigue arrancando apagado salvo que se pida. Que un contenedor recién # levantado empiece a gastar turnos del modelo solo no debería ser el default. if [ "$DISPATCH" = "1" ]; then args+=(--dispatch) if [ "${AGENCIA_AGENT_BIN:-claude}" = "claude" ]; then if ! command -v claude >/dev/null 2>&1; then echo "AVISO: el despacho está prendido pero no hay CLI del agente instalado." >&2 echo " La imagen se armó con --build-arg AGENT_CLI=none, o hay que apuntar" >&2 echo " AGENCIA_AGENT_BIN a otro binario." >&2 elif [ -z "${ANTHROPIC_API_KEY:-}" ] && [ -z "${CLAUDE_CODE_OAUTH_TOKEN:-}" ] \ && [ ! -d "$HOME/.claude" ]; then echo "AVISO: el despacho está prendido pero el agente no tiene con qué autenticarse." >&2 echo " Pasá ANTHROPIC_API_KEY o CLAUDE_CODE_OAUTH_TOKEN (sale de \`claude setup-token\`)," >&2 echo " o montá tu ~/.claude en /home/agent/.claude." >&2 echo " Sin eso el agente se despierta, falla el login y la Task parece colgada." >&2 fi fi fi [ -n "$LOG_FILE" ] && args+=(--log-file="$LOG_FILE") if [ "$first_run" = "1" ]; then echo "── primer arranque: estos son los tokens ──────────────────────────" agencia --data="$DATA" --tokens echo "── el de usuario va en la web; el de agente NUNCA ─────────────────" fi exec agencia "${args[@]}"