Files
agents_and_robots/dev/issues/completed/0046-father-bot-progress.md
T
2026-04-10 23:17:31 +00:00

5.2 KiB

0046 — Progreso en tiempo real para Father Bot

Objetivo

Cuando Father Bot crea un agente o robot, el usuario no recibe ningun feedback visual durante 2-3 minutos (a veces mas). El ProgressReporter ya existe y funciona para agentes con claude-code streaming, pero esta deshabilitado en el config de Father Bot. Ademas, los mensajes de progreso actuales son crípticos ("🔧 Bash: ./dev-scripts/...").

Queremos que el usuario vea en tiempo real en que paso del pipeline se encuentra Father Bot, con mensajes legibles como "📦 Scaffold + Build + Register..." en vez de comandos raw.

Contexto

Lo que ya existe

  • shell/effects/progress.goProgressReporter que envia/edita un mensaje Matrix con cada evento de streaming. Rate-limited a 1 edit/segundo.
  • devagents/handler.go:388isStreamingEnabled() verifica provider == "claude-code" + Streaming + ShowToolProgress. Actualmente ambos flags estan ausentes en el config de Father Bot → streaming deshabilitado.
  • shell/llm/claudecode.go — el provider ya soporta --output-format stream-json y parsea eventos StreamToolUse, StreamInit, StreamText, StreamResult.

Evidencia en logs

  • logs/father-bot/2026-04-09.jsonl: respuesta de 160.7s, 25 turns, $0.50 — silencio total para el usuario durante todo ese tiempo.
  • logs/father-bot/2026-04-10.jsonl: proceso claude-code killed por timeout (SIGKILL), el usuario no supo que paso hasta recibir un error generico.

Arquitectura

shell/effects/progress.go        — MODIFICAR: mejorar formateo de tool events
agents/_specials/father-bot/
  config.yaml                    — MODIFICAR: habilitar streaming + show_tool_progress
  prompts/system.md              — MODIFICAR: mencionar que progreso es visible

No hay cambios en pkg/ (puro). Todo es shell/config.

Tareas

Fase 1: Habilitar streaming (quick win)

  • 1.1 Agregar streaming: true y show_tool_progress: true en la seccion claude_code del config de Father Bot

Fase 2: Mejorar formateo del ProgressReporter

  • 2.1 Agregar logica en ProgressReporter.handleEvent() para detectar patrones conocidos en tool inputs y mostrar nombres legibles: - create-full.sh → "📦 Creando agente: scaffold, build, register, E2EE, avatar..." - health-check.sh → "🏥 Verificando health check..." - restart.sh / start.sh → "🔄 Reiniciando launcher..." - notify-developer.sh → "📨 Enviando bienvenida a developers..." - go build → "🔨 Compilando..." - Edit / Write sobre agents/ → "✏️ Personalizando: " - Read sobre agents/ → "📖 Leyendo: " - Tool generico → formato actual (🔧 tool: input)
  • 2.2 Agregar contador de pasos visibles ("Paso N — ")

Fase 3: System prompt

  • 3.1 Actualizar prompts/system.md del Father Bot para mencionar que el progreso es visible en tiempo real y que no necesita enviar mensajes intermedios manuales

Fase 4: Tests

  • 4.1 Tests unitarios para la logica de deteccion de patrones en ProgressReporter
  • 4.2 go build -tags goolm ./... compila sin errores

Fase 5: Docs

  • 5.1 Cerrar issue, mover a completed

Ejemplo de uso

Antes (sin progreso):

Usuario: "Crea un bot llamado hora-bot que diga la hora"
Father Bot: [silencio durante 2-3 minutos]
Father Bot: "He creado hora-bot exitosamente..."

Despues (con progreso):

Usuario: "Crea un bot llamado hora-bot que diga la hora"
Father Bot: ⚙️ Procesando...
Father Bot: 📦 Paso 1 — Creando agente: scaffold, build, register, E2EE, avatar...
Father Bot: ✏️ Paso 2 — Personalizando: config.yaml
Father Bot: ✏️ Paso 3 — Personalizando: agent.go
Father Bot: ✏️ Paso 4 — Personalizando: prompts/system.md
Father Bot: 🔨 Paso 5 — Compilando...
Father Bot: 🔄 Paso 6 — Reiniciando launcher...
Father Bot: 🏥 Paso 7 — Verificando health check...
Father Bot: 📨 Paso 8 — Enviando bienvenida a developers...
Father Bot: ✅ Completado
Father Bot: "He creado hora-bot exitosamente..."

(Todo en un unico mensaje que se edita, no mensajes separados.)

Decisiones de diseno

  1. Un solo mensaje editado: el ProgressReporter ya usa send+edit. Mantener ese patron para no spammear el room.
  2. Deteccion por patrones: los nombres de scripts del pipeline son estables. Usar string matching en los inputs de tool para detectar el paso actual.
  3. Generico pero con hints: la logica de patrones vive en el ProgressReporter (generico), pero los patrones que detecta son especificos del pipeline de creacion. Esto es aceptable porque el ProgressReporter ya es especifico de claude-code.
  4. No requiere cambios en pkg/: todo es shell/config, respeta pure core / impure shell.

Prerequisitos

  • Issue 0036 (streaming) — completado
  • Issue 0037 (father-bot) — completado

Riesgos

  • Rate limiting de Matrix: el homeserver podria limitar edits frecuentes. Mitigado por el rate limit de 1 edit/segundo ya existente en ProgressReporter.
  • Patrones fragiles: si se renombran los scripts del pipeline, los patrones se rompen. Mitigado porque los scripts son estables y el fallback es el formato generico actual.