diff --git a/agents/_specials/father-bot/config.yaml b/agents/_specials/father-bot/config.yaml index cbb8177..f2ba0e5 100644 --- a/agents/_specials/father-bot/config.yaml +++ b/agents/_specials/father-bot/config.yaml @@ -82,6 +82,8 @@ llm: model: "sonnet" fallback_model: "haiku" session_id: "" + streaming: true + show_tool_progress: true add_dirs: - ".claude/rules" - "agents/_template" diff --git a/dev/issues/0046-father-bot-progress.md b/dev/issues/0046-father-bot-progress.md new file mode 100644 index 0000000..3f716c2 --- /dev/null +++ b/dev/issues/0046-father-bot-progress.md @@ -0,0 +1,126 @@ +# 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. diff --git a/dev/issues/README.md b/dev/issues/README.md index e92d542..ede9f0a 100644 --- a/dev/issues/README.md +++ b/dev/issues/README.md @@ -56,3 +56,4 @@ afectados y notas de implementacion. | 43 | Guardrails de seguridad para Father Bot | [0043-father-bot-security-guardrails.md](completed/0043-father-bot-security-guardrails.md) | completado | | 44 | Formalizar pipeline de creacion de agentes | [0044-formalize-agent-creation-pipeline.md](completed/0044-formalize-agent-creation-pipeline.md) | completado | | 45 | DM rooms sin E2EE en notify-developer.sh | [0045-notify-encrypted-rooms.md](completed/0045-notify-encrypted-rooms.md) | completado | +| 46 | Progreso en tiempo real para Father Bot | [0046-father-bot-progress.md](0046-father-bot-progress.md) | pendiente |