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

127 lines
5.2 KiB
Markdown

# 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: <archivo>"
- `Read` sobre `agents/` → "📖 Leyendo: <archivo>"
- Tool generico → formato actual (🔧 *tool*: `input`)
- [ ] 2.2 Agregar contador de pasos visibles ("Paso N — <descripcion>")
### 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.