cf26061399
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
127 lines
5.2 KiB
Markdown
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.
|