# 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.
