# 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` β€” `ProgressReporter` que envia/edita un mensaje Matrix con cada evento de streaming. Rate-limited a 1 edit/segundo. - `devagents/handler.go:388` β€” `isStreamingEnabled()` 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.