elsabro 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/commands/elsabro/add-phase.md +17 -0
- package/commands/elsabro/add-todo.md +111 -53
- package/commands/elsabro/audit-milestone.md +19 -0
- package/commands/elsabro/check-todos.md +210 -31
- package/commands/elsabro/complete-milestone.md +20 -1
- package/commands/elsabro/debug.md +19 -0
- package/commands/elsabro/discuss-phase.md +18 -1
- package/commands/elsabro/execute.md +288 -12
- package/commands/elsabro/insert-phase.md +18 -1
- package/commands/elsabro/list-phase-assumptions.md +17 -0
- package/commands/elsabro/new-milestone.md +19 -0
- package/commands/elsabro/new.md +19 -0
- package/commands/elsabro/pause-work.md +19 -0
- package/commands/elsabro/plan-milestone-gaps.md +20 -1
- package/commands/elsabro/plan.md +264 -36
- package/commands/elsabro/progress.md +203 -79
- package/commands/elsabro/quick.md +19 -0
- package/commands/elsabro/remove-phase.md +17 -0
- package/commands/elsabro/research-phase.md +18 -1
- package/commands/elsabro/resume-work.md +19 -0
- package/commands/elsabro/start.md +365 -98
- package/commands/elsabro/verify-work.md +109 -5
- package/package.json +1 -1
- package/references/SYSTEM_INDEX.md +241 -0
- package/references/command-flow.md +352 -0
- package/references/enforcement-rules.md +331 -0
- package/references/error-handling-instructions.md +26 -12
- package/references/state-sync.md +381 -0
- package/references/task-dispatcher.md +388 -0
- package/references/tasks-integration.md +380 -0
- package/skills/api-microservice.md +765 -0
- package/skills/api-setup.md +76 -3
- package/skills/auth-setup.md +46 -6
- package/skills/chrome-extension.md +584 -0
- package/skills/cicd-setup.md +1206 -0
- package/skills/cli-tool.md +884 -0
- package/skills/database-setup.md +41 -5
- package/skills/desktop-app.md +1351 -0
- package/skills/expo-app.md +35 -2
- package/skills/full-stack-app.md +543 -0
- package/skills/mobile-app.md +813 -0
- package/skills/nextjs-app.md +33 -2
- package/skills/payments-setup.md +76 -1
- package/skills/saas-starter.md +639 -0
- package/skills/sentry-setup.md +41 -7
- package/skills/testing-setup.md +1218 -0
|
@@ -8,139 +8,313 @@ allowed-tools:
|
|
|
8
8
|
- Glob
|
|
9
9
|
- Grep
|
|
10
10
|
- Task
|
|
11
|
+
- TaskCreate
|
|
12
|
+
- TaskUpdate
|
|
13
|
+
- TaskList
|
|
11
14
|
- AskUserQuestion
|
|
12
15
|
- WebSearch
|
|
13
16
|
- mcp__plugin_context7_context7__*
|
|
14
17
|
---
|
|
15
18
|
|
|
16
|
-
# ELSABRO: Wizard de Inicio
|
|
19
|
+
# ELSABRO: Wizard de Inicio (Orquestador)
|
|
20
|
+
|
|
21
|
+
<enforcement>
|
|
22
|
+
## REGLAS DE ENFORCEMENT - LEER PRIMERO
|
|
23
|
+
|
|
24
|
+
**IMPORTAR**: Este comando DEBE seguir `/references/enforcement-rules.md` y `/references/command-flow.md`.
|
|
25
|
+
|
|
26
|
+
### Secuencia OBLIGATORIA para start:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
1. TaskCreate("Inicializar wizard ELSABRO")
|
|
30
|
+
2. TaskUpdate(status: "in_progress")
|
|
31
|
+
3. Leer/crear .elsabro/state.json
|
|
32
|
+
4. Task(haiku) x2 [paralelo] - Detectar contexto
|
|
33
|
+
5. TaskUpdate(status: "completed")
|
|
34
|
+
6. Interactuar con usuario
|
|
35
|
+
7. TaskCreate("Transición a comando X")
|
|
36
|
+
8. TaskUpdate(status: "in_progress")
|
|
37
|
+
9. Actualizar state.json con siguiente comando
|
|
38
|
+
10. Invocar siguiente comando con Skill tool
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Mínimos:
|
|
42
|
+
- **Agentes**: 2 HAIKU en paralelo para detección de contexto
|
|
43
|
+
- **Tasks**: OBLIGATORIO antes de cualquier operación
|
|
44
|
+
- **State**: OBLIGATORIO leer/escribir .elsabro/state.json
|
|
45
|
+
|
|
46
|
+
### Violaciones:
|
|
47
|
+
- Ejecutar sin TaskCreate = **ABORTAR**
|
|
48
|
+
- No leer state.json = **ABORTAR**
|
|
49
|
+
- Menos de 2 agentes para detección = **ABORTAR**
|
|
50
|
+
</enforcement>
|
|
17
51
|
|
|
18
52
|
<objective>
|
|
19
|
-
Eres el
|
|
53
|
+
Eres el **orquestador principal** de ELSABRO. Tu trabajo es:
|
|
54
|
+
|
|
55
|
+
1. **Detectar contexto** del proyecto (greenfield/brownfield/continuation)
|
|
56
|
+
2. **Entender** qué quiere hacer el usuario
|
|
57
|
+
3. **Sincronizar** con estado existente si hay
|
|
58
|
+
4. **Guiar** al comando correcto con contexto completo
|
|
20
59
|
|
|
21
60
|
**Principio fundamental:** El usuario puede no saber nada de código. Usa lenguaje simple, ofrece opciones claras, y explica solo cuando te lo pidan.
|
|
22
61
|
</objective>
|
|
23
62
|
|
|
24
|
-
<
|
|
25
|
-
##
|
|
63
|
+
<initialization>
|
|
64
|
+
## PASO 0: Inicialización (OBLIGATORIO)
|
|
65
|
+
|
|
66
|
+
### 0.1 Crear Task de inicialización
|
|
26
67
|
|
|
27
|
-
|
|
68
|
+
```
|
|
69
|
+
TaskCreate({
|
|
70
|
+
subject: "Inicializar wizard ELSABRO",
|
|
71
|
+
description: "Detectar contexto del proyecto y estado existente",
|
|
72
|
+
activeForm: "Inicializando wizard"
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
TaskUpdate(id, status: "in_progress")
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### 0.2 Verificar estado existente
|
|
28
79
|
|
|
29
80
|
```bash
|
|
30
|
-
# Verificar si
|
|
31
|
-
ls -la
|
|
81
|
+
# Verificar si existe .elsabro/state.json
|
|
82
|
+
ls -la .elsabro/state.json 2>/dev/null
|
|
32
83
|
```
|
|
33
84
|
|
|
34
|
-
|
|
85
|
+
Si existe, leerlo:
|
|
86
|
+
```
|
|
87
|
+
Read(".elsabro/state.json")
|
|
88
|
+
```
|
|
35
89
|
|
|
36
|
-
|
|
37
|
-
|------------|-----------|-------|
|
|
38
|
-
| package.json | Proyecto Node.js existente | → Brownfield |
|
|
39
|
-
| .git | Proyecto con control de versiones | → Brownfield |
|
|
40
|
-
| Carpeta vacía o solo README | Proyecto nuevo | → Greenfield |
|
|
41
|
-
| .planning/ | Proyecto ELSABRO existente | → Continuar |
|
|
42
|
-
| Nada | Directorio vacío | → Greenfield |
|
|
43
|
-
</detection>
|
|
90
|
+
### 0.3 Detectar contexto con agentes paralelos
|
|
44
91
|
|
|
45
|
-
|
|
46
|
-
## Paso 2: Saludo y Opciones
|
|
92
|
+
**OBLIGATORIO**: Lanzar 2 agentes HAIKU en paralelo:
|
|
47
93
|
|
|
48
|
-
|
|
94
|
+
```
|
|
95
|
+
[EN PARALELO]
|
|
96
|
+
Task(haiku, "Detectar tipo de proyecto: ¿hay package.json, .git, código existente? Clasificar como greenfield/brownfield/continuation")
|
|
49
97
|
|
|
98
|
+
Task(haiku, "Buscar archivos de planificación: .planning/, .elsabro/, README.md. Identificar estado del proyecto")
|
|
50
99
|
```
|
|
51
|
-
¡Hola! Soy ELSABRO, tu asistente para crear apps.
|
|
52
100
|
|
|
53
|
-
|
|
101
|
+
### 0.4 Procesar resultados
|
|
54
102
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
103
|
+
Combinar información de ambos agentes para determinar:
|
|
104
|
+
- `project_type`: greenfield | brownfield | continuation
|
|
105
|
+
- `tech_stack`: lista de tecnologías detectadas
|
|
106
|
+
- `existing_plans`: planes existentes en .planning/
|
|
107
|
+
- `current_flow`: flujo en progreso (de state.json)
|
|
108
|
+
|
|
109
|
+
### 0.5 Completar Task de inicialización
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
TaskUpdate(id, status: "completed", result: {
|
|
113
|
+
project_type: "...",
|
|
114
|
+
tech_stack: [...],
|
|
115
|
+
has_pending_flow: true/false
|
|
116
|
+
})
|
|
60
117
|
```
|
|
118
|
+
</initialization>
|
|
61
119
|
|
|
62
|
-
|
|
63
|
-
|
|
120
|
+
<flow_detection>
|
|
121
|
+
## PASO 1: Detectar Flujo en Progreso
|
|
64
122
|
|
|
65
|
-
|
|
66
|
-
## Paso 3: Guiar al Flujo Correcto
|
|
123
|
+
Si `state.json` existe y tiene `current_flow`:
|
|
67
124
|
|
|
68
|
-
|
|
125
|
+
```
|
|
126
|
+
TaskCreate({
|
|
127
|
+
subject: "Verificar flujo en progreso",
|
|
128
|
+
description: "Determinar si el usuario quiere continuar o empezar nuevo"
|
|
129
|
+
})
|
|
130
|
+
```
|
|
69
131
|
|
|
70
|
-
|
|
132
|
+
Mostrar al usuario:
|
|
71
133
|
|
|
72
134
|
```
|
|
73
|
-
|
|
135
|
+
Veo que estabas trabajando en: [current_flow.command] - fase [current_flow.phase]
|
|
136
|
+
|
|
137
|
+
¿Qué quieres hacer?
|
|
74
138
|
|
|
75
|
-
1)
|
|
76
|
-
2)
|
|
77
|
-
3)
|
|
78
|
-
4) 🤖 Otra cosa (cuéntame)
|
|
139
|
+
1) 🔄 Continuar donde lo dejaste
|
|
140
|
+
2) 🆕 Empezar algo nuevo (esto pausará el anterior)
|
|
141
|
+
3) 📋 Ver resumen del progreso actual
|
|
79
142
|
```
|
|
80
143
|
|
|
81
|
-
|
|
144
|
+
Usar `AskUserQuestion` con estas opciones.
|
|
145
|
+
|
|
146
|
+
- **Si elige continuar**: Invocar el comando en `current_flow.command` con Skill tool
|
|
147
|
+
- **Si elige nuevo**: Continuar al Paso 2
|
|
148
|
+
- **Si elige resumen**: Mostrar `history` de state.json y preguntar de nuevo
|
|
149
|
+
</flow_detection>
|
|
150
|
+
|
|
151
|
+
<context_detection>
|
|
152
|
+
## PASO 2: Análisis de Entorno (desde agentes)
|
|
153
|
+
|
|
154
|
+
Basado en los resultados de los agentes HAIKU:
|
|
82
155
|
|
|
83
|
-
|
|
|
84
|
-
|
|
85
|
-
|
|
|
86
|
-
|
|
|
87
|
-
|
|
|
88
|
-
|
|
|
156
|
+
| Encontrado | project_type | Flujo Sugerido |
|
|
157
|
+
|------------|--------------|----------------|
|
|
158
|
+
| Nada o solo README | greenfield | → new |
|
|
159
|
+
| package.json sin .elsabro | brownfield | → plan |
|
|
160
|
+
| .elsabro/state.json | continuation | → verificar flow |
|
|
161
|
+
| .planning/*.md sin ejecutar | continuation | → execute |
|
|
162
|
+
| Errores reportados | any | → debug |
|
|
163
|
+
</context_detection>
|
|
89
164
|
|
|
90
|
-
|
|
165
|
+
<greeting>
|
|
166
|
+
## PASO 3: Saludo y Opciones
|
|
167
|
+
|
|
168
|
+
**OBLIGATORIO**: Personalizar saludo según `project_type`:
|
|
91
169
|
|
|
170
|
+
### Para Greenfield (proyecto nuevo):
|
|
92
171
|
```
|
|
93
|
-
|
|
172
|
+
¡Hola! Soy ELSABRO, tu asistente para crear apps.
|
|
94
173
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
174
|
+
Veo que estás en una carpeta vacía. ¿Qué te gustaría crear?
|
|
175
|
+
|
|
176
|
+
1) 🌐 Una aplicación web completa (Next.js)
|
|
177
|
+
2) 📱 Una app móvil (Expo/React Native)
|
|
178
|
+
3) 🔌 Una API o microservicio
|
|
179
|
+
4) 🧩 Una extensión de Chrome
|
|
180
|
+
5) 💡 Tengo otra idea (cuéntame)
|
|
101
181
|
```
|
|
102
182
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
| Payments | @skills/payments-setup.md |
|
|
107
|
-
| Monitoring | @skills/sentry-setup.md |
|
|
108
|
-
| Database | @skills/database-setup.md |
|
|
109
|
-
| Design | Usar 21st Magic MCP |
|
|
110
|
-
| Otro | Planificar con /elsabro:plan |
|
|
183
|
+
### Para Brownfield (código existente):
|
|
184
|
+
```
|
|
185
|
+
¡Hola! Veo que ya tienes un proyecto con [tech_stack].
|
|
111
186
|
|
|
112
|
-
|
|
187
|
+
¿Qué te gustaría hacer?
|
|
113
188
|
|
|
114
|
-
|
|
189
|
+
1) ➕ Agregar una nueva funcionalidad
|
|
190
|
+
2) 🐛 Arreglar algo que no funciona
|
|
191
|
+
3) 📖 Entender cómo funciona el código
|
|
192
|
+
4) 🔄 Refactorizar o mejorar algo
|
|
193
|
+
5) ❓ Otra cosa (cuéntame)
|
|
194
|
+
```
|
|
115
195
|
|
|
196
|
+
### Para Continuation (proyecto ELSABRO existente):
|
|
116
197
|
```
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
198
|
+
¡Bienvenido de vuelta!
|
|
199
|
+
|
|
200
|
+
Tu proyecto: [context.project_type]
|
|
201
|
+
Última actividad: [history[-1].command] - [history[-1].result]
|
|
202
|
+
|
|
203
|
+
¿Qué sigue?
|
|
204
|
+
|
|
205
|
+
1) ▶️ Continuar con la siguiente fase
|
|
206
|
+
2) ✅ Verificar el trabajo anterior
|
|
207
|
+
3) 📋 Ver el plan completo
|
|
208
|
+
4) 🆕 Empezar algo diferente
|
|
121
209
|
```
|
|
122
210
|
|
|
123
|
-
|
|
211
|
+
Usar `AskUserQuestion` con las opciones correspondientes.
|
|
212
|
+
</greeting>
|
|
124
213
|
|
|
125
|
-
|
|
214
|
+
<transition>
|
|
215
|
+
## PASO 4: Transición al Comando Correcto
|
|
126
216
|
|
|
127
|
-
|
|
217
|
+
### 4.1 Crear Task de transición
|
|
128
218
|
|
|
129
219
|
```
|
|
130
|
-
|
|
131
|
-
|
|
220
|
+
TaskCreate({
|
|
221
|
+
subject: "Transición a [comando]",
|
|
222
|
+
description: "Preparar contexto y redirigir al comando apropiado",
|
|
223
|
+
activeForm: "Preparando siguiente paso"
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
TaskUpdate(id, status: "in_progress")
|
|
132
227
|
```
|
|
133
228
|
|
|
134
|
-
|
|
229
|
+
### 4.2 Actualizar state.json
|
|
230
|
+
|
|
231
|
+
```json
|
|
232
|
+
{
|
|
233
|
+
"current_flow": {
|
|
234
|
+
"command": "[siguiente_comando]",
|
|
235
|
+
"phase": "initializing",
|
|
236
|
+
"started_at": "[timestamp]",
|
|
237
|
+
"from_start": true
|
|
238
|
+
},
|
|
239
|
+
"context": {
|
|
240
|
+
"project_type": "[detectado]",
|
|
241
|
+
"tech_stack": "[detectado]",
|
|
242
|
+
"user_intent": "[opcion elegida]"
|
|
243
|
+
},
|
|
244
|
+
"history": [
|
|
245
|
+
...existing,
|
|
246
|
+
{
|
|
247
|
+
"command": "start",
|
|
248
|
+
"completed_at": "[timestamp]",
|
|
249
|
+
"result": "redirected_to_[comando]"
|
|
250
|
+
}
|
|
251
|
+
]
|
|
252
|
+
}
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
### 4.3 Mapeo de opciones a comandos
|
|
256
|
+
|
|
257
|
+
#### Greenfield:
|
|
258
|
+
| Opción Usuario | Comando | Skill a Invocar |
|
|
259
|
+
|----------------|---------|-----------------|
|
|
260
|
+
| Web completa | new + plan | `Skill("full-stack-app")` luego `Skill("elsabro:plan")` |
|
|
261
|
+
| App móvil | new + plan | `Skill("mobile-app")` luego `Skill("elsabro:plan")` |
|
|
262
|
+
| API | new + plan | `Skill("api-microservice")` luego `Skill("elsabro:plan")` |
|
|
263
|
+
| Chrome extension | new + plan | `Skill("chrome-extension")` luego `Skill("elsabro:plan")` |
|
|
264
|
+
| Otra idea | plan | `Skill("elsabro:plan")` con contexto |
|
|
265
|
+
|
|
266
|
+
#### Brownfield:
|
|
267
|
+
| Opción Usuario | Comando | Skill a Invocar |
|
|
268
|
+
|----------------|---------|-----------------|
|
|
269
|
+
| Nueva funcionalidad | plan | `Skill("elsabro:plan")` |
|
|
270
|
+
| Arreglar bug | debug | `Skill("elsabro:debug")` |
|
|
271
|
+
| Entender código | map-codebase | `Skill("elsabro:map-codebase")` |
|
|
272
|
+
| Refactorizar | plan | `Skill("elsabro:plan")` con intent="refactor" |
|
|
273
|
+
|
|
274
|
+
#### Continuation:
|
|
275
|
+
| Opción Usuario | Comando | Skill a Invocar |
|
|
276
|
+
|----------------|---------|-----------------|
|
|
277
|
+
| Continuar siguiente | execute/plan | Según `pending_tasks` |
|
|
278
|
+
| Verificar anterior | verify-work | `Skill("elsabro:verify-work")` |
|
|
279
|
+
| Ver plan | read | Mostrar `.planning/*.md` |
|
|
280
|
+
| Algo diferente | → Paso 3 | Mostrar opciones de brownfield |
|
|
281
|
+
|
|
282
|
+
### 4.4 Invocar comando con contexto
|
|
283
|
+
|
|
284
|
+
```
|
|
285
|
+
Skill("[comando]", "[contexto relevante]")
|
|
286
|
+
```
|
|
135
287
|
|
|
136
|
-
###
|
|
288
|
+
### 4.5 Completar Task
|
|
137
289
|
|
|
138
290
|
```
|
|
139
|
-
|
|
291
|
+
TaskUpdate(id, status: "completed", result: "transitioned_to_[comando]")
|
|
140
292
|
```
|
|
293
|
+
</transition>
|
|
294
|
+
|
|
295
|
+
<skills_integration>
|
|
296
|
+
## Integración con Skills Profesionales
|
|
297
|
+
|
|
298
|
+
Cuando el usuario elige crear algo específico, usar los skills correspondientes:
|
|
299
|
+
|
|
300
|
+
| Tipo de App | Skill | Descripción |
|
|
301
|
+
|-------------|-------|-------------|
|
|
302
|
+
| Web fullstack | `full-stack-app` | Next.js 15 + React 19 + Prisma + Auth |
|
|
303
|
+
| SaaS | `saas-starter` | Fullstack + Stripe + Subscriptions |
|
|
304
|
+
| Mobile | `mobile-app` | Expo SDK 52 + React Navigation + NativeWind |
|
|
305
|
+
| API | `api-microservice` | Fastify + OpenAPI + Docker |
|
|
306
|
+
| Chrome ext | `chrome-extension` | Manifest V3 + TypeScript + Vite |
|
|
141
307
|
|
|
142
|
-
|
|
143
|
-
|
|
308
|
+
### Flujo de Skills:
|
|
309
|
+
|
|
310
|
+
```
|
|
311
|
+
1. Usuario elige tipo de app
|
|
312
|
+
2. Invocar skill correspondiente (setup inicial)
|
|
313
|
+
3. Actualizar state.json con tech_stack
|
|
314
|
+
4. Preguntar qué feature quiere primero
|
|
315
|
+
5. Invocar /elsabro:plan con contexto
|
|
316
|
+
```
|
|
317
|
+
</skills_integration>
|
|
144
318
|
|
|
145
319
|
<ux_rules>
|
|
146
320
|
## Reglas de UX para Usuarios Sin Experiencia
|
|
@@ -172,33 +346,126 @@ Al final de cada respuesta, agregar:
|
|
|
172
346
|
```
|
|
173
347
|
</ux_rules>
|
|
174
348
|
|
|
175
|
-
<
|
|
176
|
-
##
|
|
349
|
+
<state_management>
|
|
350
|
+
## Gestión de Estado
|
|
351
|
+
|
|
352
|
+
### Crear .elsabro/ si no existe
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
mkdir -p .elsabro
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### Estructura de .elsabro/
|
|
359
|
+
|
|
360
|
+
```
|
|
361
|
+
.elsabro/
|
|
362
|
+
├── state.json # Estado actual del flujo
|
|
363
|
+
├── context.md # Contexto legible por humanos
|
|
364
|
+
└── history/ # Historial de comandos
|
|
365
|
+
└── 2024-01-15.json
|
|
366
|
+
```
|
|
367
|
+
|
|
368
|
+
### Formato de state.json
|
|
369
|
+
|
|
370
|
+
```json
|
|
371
|
+
{
|
|
372
|
+
"version": "1.0.0",
|
|
373
|
+
"created_at": "ISO timestamp",
|
|
374
|
+
"updated_at": "ISO timestamp",
|
|
375
|
+
|
|
376
|
+
"current_flow": {
|
|
377
|
+
"command": "string",
|
|
378
|
+
"phase": "string",
|
|
379
|
+
"started_at": "ISO timestamp"
|
|
380
|
+
},
|
|
381
|
+
|
|
382
|
+
"context": {
|
|
383
|
+
"project_type": "greenfield | brownfield | continuation",
|
|
384
|
+
"tech_stack": ["array", "of", "techs"],
|
|
385
|
+
"current_feature": "string | null"
|
|
386
|
+
},
|
|
387
|
+
|
|
388
|
+
"history": [
|
|
389
|
+
{
|
|
390
|
+
"command": "string",
|
|
391
|
+
"completed_at": "ISO timestamp",
|
|
392
|
+
"result": "string",
|
|
393
|
+
"artifact": "path | null"
|
|
394
|
+
}
|
|
395
|
+
],
|
|
396
|
+
|
|
397
|
+
"pending_tasks": [],
|
|
398
|
+
"blocked_on": null
|
|
399
|
+
}
|
|
400
|
+
```
|
|
401
|
+
|
|
402
|
+
### Actualizar contexto legible
|
|
403
|
+
|
|
404
|
+
Después de cada transición, actualizar `.elsabro/context.md`:
|
|
405
|
+
|
|
406
|
+
```markdown
|
|
407
|
+
# Estado Actual del Proyecto
|
|
408
|
+
|
|
409
|
+
**Tipo**: [project_type]
|
|
410
|
+
**Stack**: [tech_stack]
|
|
411
|
+
**Última acción**: [history[-1]]
|
|
412
|
+
|
|
413
|
+
## Siguiente paso sugerido
|
|
414
|
+
[basado en current_flow o pending_tasks]
|
|
415
|
+
|
|
416
|
+
## Para continuar
|
|
417
|
+
Ejecuta `/elsabro:start` o el comando específico.
|
|
418
|
+
```
|
|
419
|
+
</state_management>
|
|
420
|
+
|
|
421
|
+
<error_handling>
|
|
422
|
+
## Manejo de Errores
|
|
423
|
+
|
|
424
|
+
### Si no hay permisos para crear .elsabro/
|
|
425
|
+
|
|
426
|
+
```
|
|
427
|
+
No puedo crear la carpeta de estado. ¿Puedes verificar los permisos?
|
|
428
|
+
|
|
429
|
+
Mientras tanto, puedo ayudarte sin guardar estado, pero no podré
|
|
430
|
+
recordar el progreso entre sesiones.
|
|
177
431
|
|
|
178
|
-
|
|
432
|
+
¿Continuar de todas formas?
|
|
433
|
+
```
|
|
434
|
+
|
|
435
|
+
### Si state.json está corrupto
|
|
179
436
|
|
|
180
437
|
```
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
438
|
+
El archivo de estado parece dañado.
|
|
439
|
+
|
|
440
|
+
Opciones:
|
|
441
|
+
1) Empezar fresh (se pierde el historial)
|
|
442
|
+
2) Intentar recuperar lo que se pueda
|
|
443
|
+
3) Mostrarme el error para investigar
|
|
185
444
|
```
|
|
186
445
|
|
|
187
|
-
|
|
188
|
-
- Comparar opciones
|
|
189
|
-
- Verificar mejores prácticas actuales
|
|
190
|
-
- Encontrar soluciones a problemas comunes
|
|
191
|
-
</research>
|
|
446
|
+
### Si el usuario se pierde
|
|
192
447
|
|
|
193
|
-
|
|
194
|
-
|
|
448
|
+
```
|
|
449
|
+
Parece que estás confundido. No hay problema.
|
|
195
450
|
|
|
196
|
-
|
|
451
|
+
Cuéntame con tus propias palabras: ¿qué estás tratando de lograr?
|
|
197
452
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
453
|
+
No te preocupes por términos técnicos, yo me encargo de eso.
|
|
454
|
+
```
|
|
455
|
+
</error_handling>
|
|
456
|
+
|
|
457
|
+
<checklist>
|
|
458
|
+
## Checklist de Auto-Verificación
|
|
459
|
+
|
|
460
|
+
Antes de terminar, verificar:
|
|
461
|
+
|
|
462
|
+
- [ ] TaskCreate ejecutado al inicio
|
|
463
|
+
- [ ] 2+ agentes HAIKU lanzados en paralelo para detección
|
|
464
|
+
- [ ] state.json leído (si existe) o creado (si no)
|
|
465
|
+
- [ ] Contexto detectado correctamente
|
|
466
|
+
- [ ] Usuario ha elegido siguiente paso
|
|
467
|
+
- [ ] state.json actualizado con current_flow
|
|
468
|
+
- [ ] TaskCreate para transición ejecutado
|
|
469
|
+
- [ ] Skill invocado con contexto relevante
|
|
470
|
+
- [ ] TaskUpdate(completed) ejecutado
|
|
471
|
+
</checklist>
|
|
@@ -3,6 +3,7 @@ name: verify-work
|
|
|
3
3
|
description: Verificación completa del trabajo realizado usando agentes paralelos con Tasks
|
|
4
4
|
allowed-tools:
|
|
5
5
|
- Read
|
|
6
|
+
- Write
|
|
6
7
|
- Bash
|
|
7
8
|
- Glob
|
|
8
9
|
- Grep
|
|
@@ -11,12 +12,98 @@ allowed-tools:
|
|
|
11
12
|
- TaskUpdate
|
|
12
13
|
- TaskList
|
|
13
14
|
- TaskGet
|
|
15
|
+
- AskUserQuestion
|
|
16
|
+
sync:
|
|
17
|
+
reads: [".elsabro/state.json"]
|
|
18
|
+
writes: [".elsabro/state.json", ".elsabro/context.md", ".planning/VERIFICATION-REPORT.md"]
|
|
19
|
+
phases: ["initializing", "verifying", "aggregating", "done"]
|
|
20
|
+
passes_context_to: ["execute (si gaps)", "done"]
|
|
21
|
+
dispatcher:
|
|
22
|
+
verification:
|
|
23
|
+
agents: [pr-review-toolkit:code-reviewer, pr-review-toolkit:silent-failure-hunter, pr-review-toolkit:pr-test-analyzer]
|
|
24
|
+
model: opus
|
|
25
|
+
parallel: true
|
|
26
|
+
min_agents: 3
|
|
14
27
|
---
|
|
15
28
|
|
|
16
29
|
# /elsabro:verify-work
|
|
17
30
|
|
|
18
31
|
<command-name>verify-work</command-name>
|
|
19
32
|
|
|
33
|
+
<state_sync>
|
|
34
|
+
## SINCRONIZACIÓN DE ESTADO (OBLIGATORIO)
|
|
35
|
+
|
|
36
|
+
**IMPORTAR**: Este comando DEBE seguir `/references/state-sync.md` y `/references/enforcement-rules.md`.
|
|
37
|
+
|
|
38
|
+
### Al Iniciar (ANTES de cualquier operación)
|
|
39
|
+
|
|
40
|
+
```javascript
|
|
41
|
+
// 1. Crear task de inicialización
|
|
42
|
+
TaskCreate({
|
|
43
|
+
subject: "Initialize verify-work command",
|
|
44
|
+
description: "Leer estado y preparar verificación",
|
|
45
|
+
activeForm: "Inicializando..."
|
|
46
|
+
})
|
|
47
|
+
TaskUpdate(id, status: "in_progress")
|
|
48
|
+
|
|
49
|
+
// 2. Leer estado existente
|
|
50
|
+
const state = Read(".elsabro/state.json") || createInitialState();
|
|
51
|
+
|
|
52
|
+
// 3. Verificar contexto de execute (archivos a verificar)
|
|
53
|
+
if (state.context.changed_files && state.context.changed_files.length > 0) {
|
|
54
|
+
console.log("Archivos a verificar:", state.context.changed_files);
|
|
55
|
+
console.log("Commits a revisar:", state.context.commits);
|
|
56
|
+
} else {
|
|
57
|
+
// No hay contexto de execute - verificar todo
|
|
58
|
+
console.log("Sin contexto de execute - verificación completa");
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// 4. Actualizar estado
|
|
62
|
+
state.current_flow = { command: "verify-work", phase: "initializing", started_at: new Date().toISOString() };
|
|
63
|
+
Write(".elsabro/state.json", JSON.stringify(state, null, 2));
|
|
64
|
+
|
|
65
|
+
// 5. Completar task de inicialización
|
|
66
|
+
TaskUpdate(id, status: "completed")
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Al Cambiar de Fase
|
|
70
|
+
|
|
71
|
+
```javascript
|
|
72
|
+
// Antes de verificación
|
|
73
|
+
state.current_flow.phase = "verifying";
|
|
74
|
+
Write(".elsabro/state.json", JSON.stringify(state, null, 2));
|
|
75
|
+
|
|
76
|
+
// Antes de agregación
|
|
77
|
+
state.current_flow.phase = "aggregating";
|
|
78
|
+
Write(".elsabro/state.json", JSON.stringify(state, null, 2));
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Al Completar
|
|
82
|
+
|
|
83
|
+
```javascript
|
|
84
|
+
// Registrar en historial
|
|
85
|
+
state.history.push({
|
|
86
|
+
command: "verify-work",
|
|
87
|
+
completed_at: new Date().toISOString(),
|
|
88
|
+
result: verificationResult, // "PASS" | "FAIL" | "PARTIAL"
|
|
89
|
+
artifact: ".planning/VERIFICATION-REPORT.md"
|
|
90
|
+
});
|
|
91
|
+
|
|
92
|
+
// Actualizar contexto
|
|
93
|
+
state.context.verification_result = verificationResult;
|
|
94
|
+
state.context.ready_for_merge = verificationResult === "PASS";
|
|
95
|
+
|
|
96
|
+
// Limpiar flujo y sugerir siguiente
|
|
97
|
+
state.current_flow = null;
|
|
98
|
+
state.suggested_next = verificationResult === "PASS" ? null : "execute"; // null = done
|
|
99
|
+
|
|
100
|
+
Write(".elsabro/state.json", JSON.stringify(state, null, 2));
|
|
101
|
+
|
|
102
|
+
// Actualizar context.md legible
|
|
103
|
+
Write(".elsabro/context.md", generateHumanReadableContext(state));
|
|
104
|
+
```
|
|
105
|
+
</state_sync>
|
|
106
|
+
|
|
20
107
|
## Propósito
|
|
21
108
|
|
|
22
109
|
Verificar que el trabajo completado cumple con los requirements, pasa todos los tests, y está listo para merge/deploy.
|
|
@@ -196,7 +283,9 @@ Para verificación, usamos `policy: fail_fast` porque todos los checks son crít
|
|
|
196
283
|
└────────────────────────────────────────────────┘
|
|
197
284
|
```
|
|
198
285
|
|
|
199
|
-
### Lanzamiento de Agentes con Tasks
|
|
286
|
+
### Lanzamiento de Agentes OPUS x3 con Tasks
|
|
287
|
+
|
|
288
|
+
**OBLIGATORIO:** Usar 3 agentes OPUS especializados para verificación profunda.
|
|
200
289
|
|
|
201
290
|
```javascript
|
|
202
291
|
// 1. Marcar todos como in_progress
|
|
@@ -204,10 +293,25 @@ TaskUpdate({ taskId: "functional-id", status: "in_progress" })
|
|
|
204
293
|
TaskUpdate({ taskId: "quality-id", status: "in_progress" })
|
|
205
294
|
TaskUpdate({ taskId: "security-id", status: "in_progress" })
|
|
206
295
|
|
|
207
|
-
// 2. Lanzar agentes EN UN SOLO MENSAJE (paralelo real)
|
|
208
|
-
Task(
|
|
209
|
-
|
|
210
|
-
|
|
296
|
+
// 2. Lanzar 3 agentes OPUS EN UN SOLO MENSAJE (paralelo real)
|
|
297
|
+
Task({
|
|
298
|
+
subagent_type: "pr-review-toolkit:code-reviewer",
|
|
299
|
+
model: "opus", // ← OPUS para análisis profundo
|
|
300
|
+
description: "Code review completo",
|
|
301
|
+
prompt: "Revisa los cambios buscando bugs, code smells, mejores prácticas, seguridad..."
|
|
302
|
+
}) |
|
|
303
|
+
Task({
|
|
304
|
+
subagent_type: "pr-review-toolkit:silent-failure-hunter",
|
|
305
|
+
model: "opus", // ← OPUS para edge cases
|
|
306
|
+
description: "Buscar errores ocultos",
|
|
307
|
+
prompt: "Busca errores silenciosos, try/catch que ocultan errores, fallbacks problemáticos..."
|
|
308
|
+
}) |
|
|
309
|
+
Task({
|
|
310
|
+
subagent_type: "pr-review-toolkit:pr-test-analyzer",
|
|
311
|
+
model: "opus", // ← OPUS para análisis de tests
|
|
312
|
+
description: "Analizar cobertura de tests",
|
|
313
|
+
prompt: "Verifica que los tests cubren los cambios, busca casos críticos sin test..."
|
|
314
|
+
})
|
|
211
315
|
|
|
212
316
|
// 3. Al completar cada uno, marcar completed
|
|
213
317
|
TaskUpdate({
|