elsabro 6.0.0 → 7.0.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/agents/elsabro-orchestrator.md +39 -0
- package/bin/install.js +8 -4
- package/commands/elsabro/add-phase.md +20 -0
- package/commands/elsabro/complete-milestone.md +20 -0
- package/commands/elsabro/design-ui.md +21 -0
- package/commands/elsabro/execute.md +132 -12
- package/commands/elsabro/new-milestone.md +23 -0
- package/commands/elsabro/party.md +80 -23
- package/commands/elsabro/quick.md +19 -2
- package/flow-engine/src/agent-cards.json +74 -0
- package/flow-engine/src/callbacks.js +268 -0
- package/flow-engine/src/cli.js +597 -0
- package/flow-engine/src/executors.js +14 -1
- package/flow-engine/src/index.js +4 -2
- package/flow-engine/src/party.js +414 -0
- package/flow-engine/src/runner.js +5 -5
- package/flow-engine/tests/callbacks.test.js +274 -0
- package/flow-engine/tests/cli.test.js +208 -0
- package/flow-engine/tests/executors-complex.test.js +61 -1
- package/flow-engine/tests/integration.test.js +667 -38
- package/flow-engine/tests/party.test.js +724 -0
- package/flows/development-flow.json +104 -120
- package/package.json +5 -3
- package/references/next-step-engine.md +19 -0
- package/references/state-sync.md +15 -0
|
@@ -16,12 +16,13 @@
|
|
|
16
16
|
"last_audit": "2026-02-07",
|
|
17
17
|
"audit_result": {
|
|
18
18
|
"total_nodes": 42,
|
|
19
|
-
"implemented":
|
|
20
|
-
"partial":
|
|
21
|
-
"not_implemented":
|
|
22
|
-
"
|
|
19
|
+
"implemented": 40,
|
|
20
|
+
"partial": 0,
|
|
21
|
+
"not_implemented": 0,
|
|
22
|
+
"deprecated": 2,
|
|
23
|
+
"implementation_rate": "95%"
|
|
23
24
|
},
|
|
24
|
-
"note": "
|
|
25
|
+
"note": "P5 (M4): All 42 nodes handled. 40 implemented, 2 deprecated (teams_spawn, interrupt_teams_failed). post_mortem implemented with agent step. Zero not_implemented nodes remain."
|
|
25
26
|
},
|
|
26
27
|
|
|
27
28
|
"inputs": {
|
|
@@ -104,9 +105,9 @@
|
|
|
104
105
|
"id": "profile_router",
|
|
105
106
|
"type": "router",
|
|
106
107
|
"description": "Enrutar según perfil seleccionado",
|
|
107
|
-
"runtime_status": "
|
|
108
|
-
"implemented_in": "
|
|
109
|
-
"gaps": [
|
|
108
|
+
"runtime_status": "implemented",
|
|
109
|
+
"implemented_in": "flow-engine router executor (routes on inputs.profile)",
|
|
110
|
+
"gaps": [],
|
|
110
111
|
"condition": "{{inputs.profile}}",
|
|
111
112
|
"routes": {
|
|
112
113
|
"yolo": "interview_yolo",
|
|
@@ -122,9 +123,9 @@
|
|
|
122
123
|
"id": "interview_yolo",
|
|
123
124
|
"type": "agent",
|
|
124
125
|
"description": "Quick Interview: 3 preguntas rápidas antes de ejecutar en modo yolo",
|
|
125
|
-
"runtime_status": "
|
|
126
|
-
"implemented_in":
|
|
127
|
-
"gaps": [
|
|
126
|
+
"runtime_status": "implemented",
|
|
127
|
+
"implemented_in": "agents/elsabro-analyst.md#[INTERVIEW]",
|
|
128
|
+
"gaps": [],
|
|
128
129
|
"agent": "elsabro-analyst",
|
|
129
130
|
"config": { "model": "haiku", "timeout": 300000 },
|
|
130
131
|
"inputs": {
|
|
@@ -133,9 +134,6 @@
|
|
|
133
134
|
"task": "{{inputs.task}}",
|
|
134
135
|
"topics": "resultado esperado concreto, restricciones que no puedo romper, prioridad (velocidad vs calidad)"
|
|
135
136
|
},
|
|
136
|
-
"outputs": {
|
|
137
|
-
"interview_summary": "{{output}}"
|
|
138
|
-
},
|
|
139
137
|
"next": "yolo_execute"
|
|
140
138
|
},
|
|
141
139
|
|
|
@@ -143,15 +141,15 @@
|
|
|
143
141
|
"id": "yolo_execute",
|
|
144
142
|
"type": "agent",
|
|
145
143
|
"description": "Ejecución rápida sin ceremony",
|
|
146
|
-
"runtime_status": "
|
|
147
|
-
"implemented_in":
|
|
148
|
-
"gaps": [
|
|
144
|
+
"runtime_status": "implemented",
|
|
145
|
+
"implemented_in": "agents/elsabro-yolo-dev (delegated via onAgent callback)",
|
|
146
|
+
"gaps": [],
|
|
149
147
|
"agent": "elsabro-yolo-dev",
|
|
150
148
|
"config": { "model": "opus", "timeout": 600000 },
|
|
151
149
|
"inputs": {
|
|
152
150
|
"task": "{{inputs.task}}",
|
|
153
151
|
"context": "{{state.loadedContext}}",
|
|
154
|
-
"interview_context": "{{nodes.interview_yolo.outputs.
|
|
152
|
+
"interview_context": "{{nodes.interview_yolo.outputs.output}}"
|
|
155
153
|
},
|
|
156
154
|
"next": "quick_verify"
|
|
157
155
|
},
|
|
@@ -160,9 +158,9 @@
|
|
|
160
158
|
"id": "quick_verify",
|
|
161
159
|
"type": "agent",
|
|
162
160
|
"description": "Verificación rápida post-yolo",
|
|
163
|
-
"runtime_status": "
|
|
164
|
-
"implemented_in":
|
|
165
|
-
"gaps": [
|
|
161
|
+
"runtime_status": "implemented",
|
|
162
|
+
"implemented_in": "agents/elsabro-verifier (delegated via onAgent callback)",
|
|
163
|
+
"gaps": [],
|
|
166
164
|
"agent": "elsabro-verifier",
|
|
167
165
|
"config": { "model": "haiku", "timeout": 120000 },
|
|
168
166
|
"next": "verify_check"
|
|
@@ -172,9 +170,9 @@
|
|
|
172
170
|
"id": "interview_careful",
|
|
173
171
|
"type": "agent",
|
|
174
172
|
"description": "Deep Interview: 3+ preguntas exhaustivas sobre requisitos, riesgos y constraints",
|
|
175
|
-
"runtime_status": "
|
|
176
|
-
"implemented_in":
|
|
177
|
-
"gaps": [
|
|
173
|
+
"runtime_status": "implemented",
|
|
174
|
+
"implemented_in": "agents/elsabro-analyst.md#[INTERVIEW]",
|
|
175
|
+
"gaps": [],
|
|
178
176
|
"agent": "elsabro-analyst",
|
|
179
177
|
"config": { "model": "opus", "timeout": 600000 },
|
|
180
178
|
"inputs": {
|
|
@@ -183,9 +181,6 @@
|
|
|
183
181
|
"task": "{{inputs.task}}",
|
|
184
182
|
"topics": "requisitos funcionales exactos y edge cases, riesgos técnicos y de negocio, constraints de seguridad y compliance, acceptance criteria detallados, dependencias externas y puntos de fallo"
|
|
185
183
|
},
|
|
186
|
-
"outputs": {
|
|
187
|
-
"interview_summary": "{{output}}"
|
|
188
|
-
},
|
|
189
184
|
"next": "careful_analyze"
|
|
190
185
|
},
|
|
191
186
|
|
|
@@ -193,14 +188,19 @@
|
|
|
193
188
|
"id": "careful_analyze",
|
|
194
189
|
"type": "sequence",
|
|
195
190
|
"description": "Análisis exhaustivo para modo careful",
|
|
196
|
-
"runtime_status": "
|
|
197
|
-
"implemented_in":
|
|
198
|
-
"gaps": [
|
|
191
|
+
"runtime_status": "implemented",
|
|
192
|
+
"implemented_in": "agents/elsabro-analyst + agents/elsabro-planner (3-step sequence via onAgent callback)",
|
|
193
|
+
"gaps": [],
|
|
199
194
|
"steps": [
|
|
200
|
-
{ "agent": "elsabro-analyst", "as": "requirements", "model": "opus", "inputs": { "interview_context": "{{nodes.interview_careful.outputs.
|
|
201
|
-
{ "agent": "elsabro-analyst", "as": "risks", "model": "opus" },
|
|
202
|
-
{ "agent": "elsabro-planner", "as": "detailed_plan", "model": "opus" }
|
|
195
|
+
{ "action": "agent", "agent": "elsabro-analyst", "as": "requirements", "model": "opus", "inputs": { "interview_context": "{{nodes.interview_careful.outputs.output}}" } },
|
|
196
|
+
{ "action": "agent", "agent": "elsabro-analyst", "as": "risks", "model": "opus" },
|
|
197
|
+
{ "action": "agent", "agent": "elsabro-planner", "as": "detailed_plan", "model": "opus" }
|
|
203
198
|
],
|
|
199
|
+
"outputs": {
|
|
200
|
+
"requirements": "{{steps.requirements.output}}",
|
|
201
|
+
"risks": "{{steps.risks.output}}",
|
|
202
|
+
"detailed_plan": "{{steps.detailed_plan.output}}"
|
|
203
|
+
},
|
|
204
204
|
"next": "interrupt_plan_approval"
|
|
205
205
|
},
|
|
206
206
|
|
|
@@ -208,9 +208,9 @@
|
|
|
208
208
|
"id": "interrupt_plan_approval",
|
|
209
209
|
"type": "interrupt",
|
|
210
210
|
"description": "Plan requires approval in careful mode",
|
|
211
|
-
"runtime_status": "
|
|
212
|
-
"implemented_in":
|
|
213
|
-
"gaps": [
|
|
211
|
+
"runtime_status": "implemented",
|
|
212
|
+
"implemented_in": "flow-engine interrupt executor (onInterrupt callback with AskUserQuestion)",
|
|
213
|
+
"gaps": [],
|
|
214
214
|
"reason": "Plan requires approval in careful mode",
|
|
215
215
|
"display": {
|
|
216
216
|
"title": "📋 Plan de Implementación",
|
|
@@ -233,9 +233,9 @@
|
|
|
233
233
|
"id": "interview_teams",
|
|
234
234
|
"type": "agent",
|
|
235
235
|
"description": "Team Interview: 3 preguntas sobre prioridades, coordinación y deadline",
|
|
236
|
-
"runtime_status": "
|
|
237
|
-
"implemented_in":
|
|
238
|
-
"gaps": [
|
|
236
|
+
"runtime_status": "implemented",
|
|
237
|
+
"implemented_in": "agents/elsabro-analyst.md#[INTERVIEW]",
|
|
238
|
+
"gaps": [],
|
|
239
239
|
"agent": "elsabro-analyst",
|
|
240
240
|
"config": { "model": "opus", "timeout": 600000 },
|
|
241
241
|
"inputs": {
|
|
@@ -244,9 +244,6 @@
|
|
|
244
244
|
"task": "{{inputs.task}}",
|
|
245
245
|
"topics": "prioridades del equipo y qué entregar primero, deadline y nivel de calidad esperado, áreas que necesitan más atención (frontend/backend/testing), integraciones críticas que no pueden fallar"
|
|
246
246
|
},
|
|
247
|
-
"outputs": {
|
|
248
|
-
"interview_summary": "{{output}}"
|
|
249
|
-
},
|
|
250
247
|
"next": "teams_spawn"
|
|
251
248
|
},
|
|
252
249
|
|
|
@@ -254,12 +251,13 @@
|
|
|
254
251
|
"id": "teams_spawn",
|
|
255
252
|
"type": "team",
|
|
256
253
|
"description": "Crear Agent Team para coordinación peer-to-peer",
|
|
257
|
-
"runtime_status": "
|
|
258
|
-
"
|
|
259
|
-
"
|
|
254
|
+
"runtime_status": "deprecated",
|
|
255
|
+
"deprecated_reason": "Agent Teams now handled inline via IMPERATIVO_AGENT_TEAMS in execute.md (M2.5). Use profile 'teams' with inline enforcement instead.",
|
|
256
|
+
"implemented_in": "flows/development-flow.json#teams_spawn",
|
|
257
|
+
"gaps": [],
|
|
260
258
|
"config": {
|
|
261
259
|
"team_name": "elsabro-{{inputs.task | slugify}}",
|
|
262
|
-
"description": "Agent Teams para: {{inputs.task}}. Contexto de entrevista: {{nodes.interview_teams.outputs.
|
|
260
|
+
"description": "Agent Teams para: {{inputs.task}}. Contexto de entrevista: {{nodes.interview_teams.outputs.output}}"
|
|
263
261
|
},
|
|
264
262
|
"members": [
|
|
265
263
|
{
|
|
@@ -322,9 +320,10 @@
|
|
|
322
320
|
"id": "interrupt_teams_failed",
|
|
323
321
|
"type": "interrupt",
|
|
324
322
|
"description": "Agent Team creation or execution failed",
|
|
325
|
-
"runtime_status": "
|
|
326
|
-
"
|
|
327
|
-
"
|
|
323
|
+
"runtime_status": "deprecated",
|
|
324
|
+
"deprecated_reason": "Depends on teams_spawn which is deprecated. Error handling for Agent Teams now in execute.md#error_handling.",
|
|
325
|
+
"implemented_in": "flows/development-flow.json#interrupt_teams_failed",
|
|
326
|
+
"gaps": [],
|
|
328
327
|
"reason": "Agent Team creation or execution failed",
|
|
329
328
|
"display": {
|
|
330
329
|
"title": "⚠️ Agent Team Falló",
|
|
@@ -347,9 +346,9 @@
|
|
|
347
346
|
"id": "bmad_interview_analysis",
|
|
348
347
|
"type": "agent",
|
|
349
348
|
"description": "BMAD Interview 1: Entrevistar al usuario antes de generar PRD - mínimo 3 preguntas sobre usuarios, problema y funcionalidades",
|
|
350
|
-
"runtime_status": "
|
|
351
|
-
"implemented_in":
|
|
352
|
-
"gaps": [
|
|
349
|
+
"runtime_status": "implemented",
|
|
350
|
+
"implemented_in": "agents/elsabro-analyst.md#[INTERVIEW]",
|
|
351
|
+
"gaps": [],
|
|
353
352
|
"agent": "elsabro-analyst",
|
|
354
353
|
"config": { "model": "opus", "timeout": 600000 },
|
|
355
354
|
"inputs": {
|
|
@@ -358,9 +357,6 @@
|
|
|
358
357
|
"task": "{{inputs.task}}",
|
|
359
358
|
"topics": "usuarios objetivo y sus dolores, problema core que resuelve, funcionalidades prioritarias (must-have), limitaciones conocidas (técnicas/presupuesto/tiempo), métricas de éxito"
|
|
360
359
|
},
|
|
361
|
-
"outputs": {
|
|
362
|
-
"interview_summary": "{{output}}"
|
|
363
|
-
},
|
|
364
360
|
"next": "bmad_analyze"
|
|
365
361
|
},
|
|
366
362
|
|
|
@@ -368,22 +364,24 @@
|
|
|
368
364
|
"id": "bmad_analyze",
|
|
369
365
|
"type": "sequence",
|
|
370
366
|
"description": "BMAD Phase 1: Analysis - Generate PRD and Architecture overview",
|
|
371
|
-
"runtime_status": "
|
|
372
|
-
"implemented_in":
|
|
373
|
-
"gaps": [
|
|
367
|
+
"runtime_status": "implemented",
|
|
368
|
+
"implemented_in": "flows/development-flow.json#bmad_analyze",
|
|
369
|
+
"gaps": [],
|
|
374
370
|
"steps": [
|
|
375
371
|
{
|
|
372
|
+
"action": "agent",
|
|
376
373
|
"agent": "elsabro-analyst",
|
|
377
374
|
"as": "prd",
|
|
378
375
|
"model": "opus",
|
|
379
376
|
"inputs": {
|
|
380
377
|
"command": "[PRD]",
|
|
381
378
|
"task": "{{inputs.task}}",
|
|
382
|
-
"brief": "{{nodes.bmad_interview_analysis.outputs.
|
|
379
|
+
"brief": "{{nodes.bmad_interview_analysis.outputs.output || state.briefContent || ''}}",
|
|
383
380
|
"template": "templates/PRD.md.template"
|
|
384
381
|
}
|
|
385
382
|
},
|
|
386
383
|
{
|
|
384
|
+
"action": "agent",
|
|
387
385
|
"agent": "elsabro-planner",
|
|
388
386
|
"as": "architecture",
|
|
389
387
|
"model": "opus",
|
|
@@ -404,9 +402,9 @@
|
|
|
404
402
|
"id": "interrupt_prd_approval",
|
|
405
403
|
"type": "interrupt",
|
|
406
404
|
"description": "PRD and Architecture require human approval before planning",
|
|
407
|
-
"runtime_status": "
|
|
408
|
-
"implemented_in":
|
|
409
|
-
"gaps": [
|
|
405
|
+
"runtime_status": "implemented",
|
|
406
|
+
"implemented_in": "flows/development-flow.json#interrupt_prd_approval",
|
|
407
|
+
"gaps": [],
|
|
410
408
|
"reason": "PRD and Architecture require human approval before planning",
|
|
411
409
|
"display": {
|
|
412
410
|
"title": "PRD Review (BMAD)",
|
|
@@ -429,9 +427,9 @@
|
|
|
429
427
|
"id": "bmad_interview_planning",
|
|
430
428
|
"type": "agent",
|
|
431
429
|
"description": "BMAD Interview 2: Entrevistar al usuario antes de planificar stories - mínimo 3 preguntas sobre arquitectura, prioridades e integraciones",
|
|
432
|
-
"runtime_status": "
|
|
433
|
-
"implemented_in":
|
|
434
|
-
"gaps": [
|
|
430
|
+
"runtime_status": "implemented",
|
|
431
|
+
"implemented_in": "flows/development-flow.json#bmad_interview_planning",
|
|
432
|
+
"gaps": [],
|
|
435
433
|
"agent": "elsabro-analyst",
|
|
436
434
|
"config": { "model": "opus", "timeout": 600000 },
|
|
437
435
|
"inputs": {
|
|
@@ -441,9 +439,6 @@
|
|
|
441
439
|
"prd_summary": "{{nodes.bmad_analyze.outputs.prd}}",
|
|
442
440
|
"topics": "preferencias de arquitectura o tecnologías, priorización de stories para primera versión, integraciones externas o APIs de terceros, criterios de aceptación adicionales, dependencias entre features"
|
|
443
441
|
},
|
|
444
|
-
"outputs": {
|
|
445
|
-
"interview_summary": "{{output}}"
|
|
446
|
-
},
|
|
447
442
|
"next": "bmad_plan"
|
|
448
443
|
},
|
|
449
444
|
|
|
@@ -451,18 +446,19 @@
|
|
|
451
446
|
"id": "bmad_plan",
|
|
452
447
|
"type": "sequence",
|
|
453
448
|
"description": "BMAD Phase 2: Planning - Break PRD into stories + human Control Manifest",
|
|
454
|
-
"runtime_status": "
|
|
455
|
-
"implemented_in":
|
|
456
|
-
"gaps": [
|
|
449
|
+
"runtime_status": "implemented",
|
|
450
|
+
"implemented_in": "flows/development-flow.json#bmad_plan",
|
|
451
|
+
"gaps": [],
|
|
457
452
|
"steps": [
|
|
458
453
|
{
|
|
454
|
+
"action": "agent",
|
|
459
455
|
"agent": "elsabro-analyst",
|
|
460
456
|
"as": "stories",
|
|
461
457
|
"model": "opus",
|
|
462
458
|
"inputs": {
|
|
463
459
|
"task": "Break approved PRD into prioritized epics and stories with acceptance criteria",
|
|
464
460
|
"prd": "{{nodes.bmad_analyze.outputs.prd}}",
|
|
465
|
-
"interview_context": "{{nodes.bmad_interview_planning.outputs.
|
|
461
|
+
"interview_context": "{{nodes.bmad_interview_planning.outputs.output}}"
|
|
466
462
|
}
|
|
467
463
|
}
|
|
468
464
|
],
|
|
@@ -476,9 +472,9 @@
|
|
|
476
472
|
"id": "interrupt_manifest",
|
|
477
473
|
"type": "interrupt",
|
|
478
474
|
"description": "Control Manifest needed - human defines constraints before code generation",
|
|
479
|
-
"runtime_status": "
|
|
480
|
-
"implemented_in":
|
|
481
|
-
"gaps": [
|
|
475
|
+
"runtime_status": "implemented",
|
|
476
|
+
"implemented_in": "flows/development-flow.json#interrupt_manifest",
|
|
477
|
+
"gaps": [],
|
|
482
478
|
"reason": "Control Manifest needed - human defines constraints before code generation",
|
|
483
479
|
"display": {
|
|
484
480
|
"title": "Control Manifest (BMAD)",
|
|
@@ -499,9 +495,9 @@
|
|
|
499
495
|
"id": "bmad_interview_solution",
|
|
500
496
|
"type": "agent",
|
|
501
497
|
"description": "BMAD Interview 3: Entrevistar al usuario antes de diseñar solución - mínimo 3 preguntas sobre implementación, testing y performance",
|
|
502
|
-
"runtime_status": "
|
|
503
|
-
"implemented_in":
|
|
504
|
-
"gaps": [
|
|
498
|
+
"runtime_status": "implemented",
|
|
499
|
+
"implemented_in": "flows/development-flow.json#bmad_interview_solution",
|
|
500
|
+
"gaps": [],
|
|
505
501
|
"agent": "elsabro-planner",
|
|
506
502
|
"config": { "model": "opus", "timeout": 600000 },
|
|
507
503
|
"inputs": {
|
|
@@ -511,9 +507,6 @@
|
|
|
511
507
|
"stories_summary": "{{nodes.bmad_plan.outputs.stories}}",
|
|
512
508
|
"topics": "estructura del código (monolito vs módulos vs microservicios), nivel de testing requerido (unit/integration/e2e), requisitos de performance (tiempos de respuesta, usuarios concurrentes), estrategia de deployment, manejo de errores y edge cases"
|
|
513
509
|
},
|
|
514
|
-
"outputs": {
|
|
515
|
-
"interview_summary": "{{output}}"
|
|
516
|
-
},
|
|
517
510
|
"next": "bmad_solution"
|
|
518
511
|
},
|
|
519
512
|
|
|
@@ -521,9 +514,9 @@
|
|
|
521
514
|
"id": "bmad_solution",
|
|
522
515
|
"type": "agent",
|
|
523
516
|
"description": "BMAD Phase 3: Solutioning - Technical design per story with ADRs",
|
|
524
|
-
"runtime_status": "
|
|
525
|
-
"implemented_in":
|
|
526
|
-
"gaps": [
|
|
517
|
+
"runtime_status": "implemented",
|
|
518
|
+
"implemented_in": "flows/development-flow.json#bmad_solution",
|
|
519
|
+
"gaps": [],
|
|
527
520
|
"agent": "elsabro-planner",
|
|
528
521
|
"config": { "model": "opus", "timeout": 600000 },
|
|
529
522
|
"inputs": {
|
|
@@ -532,10 +525,7 @@
|
|
|
532
525
|
"stories": "{{nodes.bmad_plan.outputs.stories}}",
|
|
533
526
|
"architecture": "{{nodes.bmad_analyze.outputs.architecture}}",
|
|
534
527
|
"task": "{{inputs.task}}",
|
|
535
|
-
"interview_context": "{{nodes.bmad_interview_solution.outputs.
|
|
536
|
-
},
|
|
537
|
-
"outputs": {
|
|
538
|
-
"solution": "{{output}}"
|
|
528
|
+
"interview_context": "{{nodes.bmad_interview_solution.outputs.output}}"
|
|
539
529
|
},
|
|
540
530
|
"next": "interrupt_solution_approval"
|
|
541
531
|
},
|
|
@@ -544,9 +534,9 @@
|
|
|
544
534
|
"id": "interrupt_solution_approval",
|
|
545
535
|
"type": "interrupt",
|
|
546
536
|
"description": "Solution design requires approval before implementation starts",
|
|
547
|
-
"runtime_status": "
|
|
548
|
-
"implemented_in":
|
|
549
|
-
"gaps": [
|
|
537
|
+
"runtime_status": "implemented",
|
|
538
|
+
"implemented_in": "flows/development-flow.json#interrupt_solution_approval",
|
|
539
|
+
"gaps": [],
|
|
550
540
|
"reason": "Solution design requires approval before implementation starts",
|
|
551
541
|
"display": {
|
|
552
542
|
"title": "Solution Review (BMAD)",
|
|
@@ -569,9 +559,9 @@
|
|
|
569
559
|
"id": "interview_default",
|
|
570
560
|
"type": "agent",
|
|
571
561
|
"description": "Standard Interview: 3 preguntas balanceadas sobre scope, stack y expectativas",
|
|
572
|
-
"runtime_status": "
|
|
573
|
-
"implemented_in":
|
|
574
|
-
"gaps": [
|
|
562
|
+
"runtime_status": "implemented",
|
|
563
|
+
"implemented_in": "agents/elsabro-analyst.md#[INTERVIEW]",
|
|
564
|
+
"gaps": [],
|
|
575
565
|
"agent": "elsabro-analyst",
|
|
576
566
|
"config": { "model": "opus", "timeout": 600000 },
|
|
577
567
|
"inputs": {
|
|
@@ -580,9 +570,6 @@
|
|
|
580
570
|
"task": "{{inputs.task}}",
|
|
581
571
|
"topics": "scope exacto y qué NO incluir, stack técnico preferido o existente, resultado esperado y cómo verificar que funciona"
|
|
582
572
|
},
|
|
583
|
-
"outputs": {
|
|
584
|
-
"interview_summary": "{{output}}"
|
|
585
|
-
},
|
|
586
573
|
"next": "standard_analyze"
|
|
587
574
|
},
|
|
588
575
|
|
|
@@ -637,7 +624,7 @@
|
|
|
637
624
|
"plan": "{{nodes.standard_analyze.outputs.branches.plan}}",
|
|
638
625
|
"techDebt": "{{nodes.standard_analyze.outputs.branches.tech_debt}}",
|
|
639
626
|
"task": "Consolidar estos análisis en un plan unificado",
|
|
640
|
-
"interview_context": "{{nodes.interview_default.outputs.
|
|
627
|
+
"interview_context": "{{nodes.interview_default.outputs.output}}"
|
|
641
628
|
},
|
|
642
629
|
"next": "parallel_implementation"
|
|
643
630
|
},
|
|
@@ -655,7 +642,7 @@
|
|
|
655
642
|
"config": { "model": "opus", "timeout": 900000 },
|
|
656
643
|
"inputs": {
|
|
657
644
|
"task": "{{inputs.task}}",
|
|
658
|
-
"plan": "{{nodes.merge_analysis.outputs.plan || nodes.careful_analyze.outputs.detailed_plan || nodes.bmad_solution.outputs.
|
|
645
|
+
"plan": "{{nodes.merge_analysis.outputs.plan || nodes.careful_analyze.outputs.detailed_plan || nodes.bmad_solution.outputs.output}}",
|
|
659
646
|
"patterns": "{{state.patterns}}",
|
|
660
647
|
"mistakes": "{{state.mistakes}}"
|
|
661
648
|
}
|
|
@@ -666,7 +653,7 @@
|
|
|
666
653
|
"config": { "model": "opus", "timeout": 600000 },
|
|
667
654
|
"inputs": {
|
|
668
655
|
"task": "Crear tests para: {{inputs.task}}",
|
|
669
|
-
"plan": "{{nodes.merge_analysis.outputs.plan || nodes.careful_analyze.outputs.detailed_plan || nodes.bmad_solution.outputs.
|
|
656
|
+
"plan": "{{nodes.merge_analysis.outputs.plan || nodes.careful_analyze.outputs.detailed_plan || nodes.bmad_solution.outputs.output}}"
|
|
670
657
|
}
|
|
671
658
|
}
|
|
672
659
|
],
|
|
@@ -755,9 +742,9 @@
|
|
|
755
742
|
"id": "interrupt_manual_fix",
|
|
756
743
|
"type": "interrupt",
|
|
757
744
|
"description": "Auto-fix failed after 3 attempts",
|
|
758
|
-
"runtime_status": "
|
|
759
|
-
"implemented_in": "commands/elsabro/execute.md#error_handling",
|
|
760
|
-
"gaps": [
|
|
745
|
+
"runtime_status": "implemented",
|
|
746
|
+
"implemented_in": "commands/elsabro/execute.md#error_handling + flow-engine interrupt executor",
|
|
747
|
+
"gaps": [],
|
|
761
748
|
"reason": "Auto-fix failed after 3 attempts",
|
|
762
749
|
"display": {
|
|
763
750
|
"title": "⚠️ Corrección Manual Requerida",
|
|
@@ -778,9 +765,9 @@
|
|
|
778
765
|
"id": "wait_manual_fix",
|
|
779
766
|
"type": "interrupt",
|
|
780
767
|
"description": "Waiting for manual fix",
|
|
781
|
-
"runtime_status": "
|
|
782
|
-
"implemented_in": "commands/elsabro/execute.md#error_handling",
|
|
783
|
-
"gaps": [
|
|
768
|
+
"runtime_status": "implemented",
|
|
769
|
+
"implemented_in": "commands/elsabro/execute.md#error_handling + flow-engine interrupt executor",
|
|
770
|
+
"gaps": [],
|
|
784
771
|
"reason": "Waiting for manual fix",
|
|
785
772
|
"display": {
|
|
786
773
|
"title": "Esperando corrección manual",
|
|
@@ -926,7 +913,7 @@
|
|
|
926
913
|
"description": "Gate check on verification result",
|
|
927
914
|
"runtime_status": "implemented",
|
|
928
915
|
"implemented_in": "commands/elsabro/execute.md#siguiente_paso",
|
|
929
|
-
"condition": "{{nodes.verify_final.outputs.passed || nodes.quick_verify.outputs.passed}}",
|
|
916
|
+
"condition": "{{nodes.verify_final.outputs.output.passed || nodes.quick_verify.outputs.output.passed}}",
|
|
930
917
|
"true": "post_mortem",
|
|
931
918
|
"false": "interrupt_verification_failed"
|
|
932
919
|
},
|
|
@@ -958,21 +945,18 @@
|
|
|
958
945
|
"id": "post_mortem",
|
|
959
946
|
"type": "sequence",
|
|
960
947
|
"description": "Post-mortem: guardar aprendizajes",
|
|
961
|
-
"runtime_status": "
|
|
962
|
-
"implemented_in":
|
|
963
|
-
"gaps": [
|
|
948
|
+
"runtime_status": "implemented",
|
|
949
|
+
"implemented_in": "flows/development-flow.json#post_mortem",
|
|
950
|
+
"gaps": [],
|
|
964
951
|
"steps": [
|
|
965
952
|
{
|
|
966
|
-
"action": "
|
|
967
|
-
"
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
{
|
|
974
|
-
"action": "update_entity_memory",
|
|
975
|
-
"files": "{{collectOutputs('filesModified')}}"
|
|
953
|
+
"action": "agent",
|
|
954
|
+
"agent": "elsabro-tech-writer",
|
|
955
|
+
"as": "learnings",
|
|
956
|
+
"inputs": {
|
|
957
|
+
"task": "Analiza la ejecución completada y documenta: 1) Patrones útiles encontrados, 2) Errores y cómo se resolvieron, 3) Archivos clave modificados. Formato: lista concisa de bullet points.",
|
|
958
|
+
"execution_context": "{{nodes}}"
|
|
959
|
+
}
|
|
976
960
|
}
|
|
977
961
|
],
|
|
978
962
|
"next": "end_success"
|
package/package.json
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "elsabro",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.0",
|
|
4
4
|
"description": "Sistema de desarrollo AI-powered para Claude Code - BMAD Method Integration, Spec-Driven Development, Party Mode, Next Step Suggestions, Stitch UI Design, Agent Teams, blocking code review, orquestación avanzada con flows declarativos",
|
|
5
5
|
"bin": {
|
|
6
|
-
"elsabro": "bin/install.js"
|
|
6
|
+
"elsabro": "bin/install.js",
|
|
7
|
+
"elsabro-flow": "flow-engine/src/cli.js"
|
|
7
8
|
},
|
|
8
9
|
"files": [
|
|
9
10
|
"bin",
|
|
@@ -43,6 +44,7 @@
|
|
|
43
44
|
"node": ">=18.0.0"
|
|
44
45
|
},
|
|
45
46
|
"scripts": {
|
|
46
|
-
"test": "node --test flow-engine/tests/*.test.js"
|
|
47
|
+
"test": "node --test flow-engine/tests/*.test.js",
|
|
48
|
+
"flow": "node flow-engine/src/cli.js"
|
|
47
49
|
}
|
|
48
50
|
}
|
|
@@ -69,6 +69,25 @@ Al final de cada `<process>`, mostrar:
|
|
|
69
69
|
| bmad_solution | "execute" | → Aprobar Solution y ejecutar implementación | → Revisar Solution Design |
|
|
70
70
|
| party | "discuss-phase" | → /elsabro:discuss-phase — discutir hallazgos | → /elsabro:plan — planificar basado en discusión |
|
|
71
71
|
|
|
72
|
+
## Party Mode Triggers
|
|
73
|
+
|
|
74
|
+
Commands that can suggest `/elsabro:party` as an alternative:
|
|
75
|
+
|
|
76
|
+
| From Command | Trigger Condition | Why Party? |
|
|
77
|
+
|-------------|-------------------|------------|
|
|
78
|
+
| discuss-phase | Topic has unresolved trade-offs | Multi-perspective debate resolves trade-offs |
|
|
79
|
+
| plan | Tech decisions are pending | Agents debate architecture/approach choices |
|
|
80
|
+
| new | Scope is ambiguous | Analyst + Planner + UX can clarify requirements |
|
|
81
|
+
| research-phase | Multiple viable approaches found | Agents evaluate pros/cons from their expertise |
|
|
82
|
+
|
|
83
|
+
```javascript
|
|
84
|
+
// In commands that detect ambiguity:
|
|
85
|
+
if (hasUnresolvedTradeoffs || isAmbiguousScope) {
|
|
86
|
+
alternativeSuggestion = "party";
|
|
87
|
+
alternativeReason = "debate the trade-offs with multiple agent perspectives";
|
|
88
|
+
}
|
|
89
|
+
```
|
|
90
|
+
|
|
72
91
|
## Contextual Overrides
|
|
73
92
|
|
|
74
93
|
The suggested_next can be overridden based on context:
|
package/references/state-sync.md
CHANGED
|
@@ -134,6 +134,11 @@ Fases: initializing → diagnosing → fixing → verifying → done
|
|
|
134
134
|
Fases: initializing → executing → done
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
+
### /elsabro:party
|
|
138
|
+
```
|
|
139
|
+
Fases: initializing → selecting_agents → deliberating_round_N → synthesizing → documenting → done
|
|
140
|
+
```
|
|
141
|
+
|
|
137
142
|
### BMAD Flow (profile=bmad)
|
|
138
143
|
```
|
|
139
144
|
Fases: bmad_analyze → prd_approval → bmad_plan → manifest_approval → bmad_solution → solution_approval → implementation → done
|
|
@@ -199,6 +204,16 @@ Fases: bmad_analyze → prd_approval → bmad_plan → manifest_approval → bma
|
|
|
199
204
|
}
|
|
200
205
|
```
|
|
201
206
|
|
|
207
|
+
### party → discuss-phase / plan
|
|
208
|
+
```json
|
|
209
|
+
{
|
|
210
|
+
"party_summary": ".planning/PARTY-{topic-slug}-SUMMARY.md",
|
|
211
|
+
"party_consensus": ["consensus point 1", "consensus point 2"],
|
|
212
|
+
"party_debates": ["open debate 1", "open debate 2"],
|
|
213
|
+
"party_agents": ["agent-id-1", "agent-id-2", "agent-id-3"]
|
|
214
|
+
}
|
|
215
|
+
```
|
|
216
|
+
|
|
202
217
|
### BMAD Flow Context Fields
|
|
203
218
|
|
|
204
219
|
#### bmad_analyze → bmad_plan
|