cf26061399
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
5.2 KiB
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.go—ProgressReporterque envia/edita un mensaje Matrix con cada evento de streaming. Rate-limited a 1 edit/segundo.devagents/handler.go:388—isStreamingEnabled()verificaprovider == "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-jsony parsea eventosStreamToolUse,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: trueyshow_tool_progress: trueen la seccionclaude_codedel 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/Writesobreagents/→ "✏️ Personalizando: " -Readsobreagents/→ "📖 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.mddel 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
- Un solo mensaje editado: el ProgressReporter ya usa send+edit. Mantener ese patron para no spammear el room.
- Deteccion por patrones: los nombres de scripts del pipeline son estables. Usar string matching en los inputs de tool para detectar el paso actual.
- 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.
- 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.