elsabro 4.0.0 → 4.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.
Files changed (44) hide show
  1. package/README.md +61 -7
  2. package/agents/elsabro-orchestrator.md +70 -20
  3. package/agents/elsabro-ux-designer.md +70 -0
  4. package/commands/elsabro/add-phase.md +20 -0
  5. package/commands/elsabro/add-todo.md +30 -0
  6. package/commands/elsabro/audit-milestone.md +20 -0
  7. package/commands/elsabro/check-todos.md +29 -0
  8. package/commands/elsabro/complete-milestone.md +20 -0
  9. package/commands/elsabro/debug.md +76 -1
  10. package/commands/elsabro/design-ui.md +407 -0
  11. package/commands/elsabro/discuss-phase.md +20 -0
  12. package/commands/elsabro/execute.md +166 -30
  13. package/commands/elsabro/exit.md +97 -0
  14. package/commands/elsabro/help.md +7 -1
  15. package/commands/elsabro/insert-phase.md +20 -0
  16. package/commands/elsabro/list-phase-assumptions.md +20 -0
  17. package/commands/elsabro/map-codebase.md +30 -0
  18. package/commands/elsabro/new-milestone.md +23 -0
  19. package/commands/elsabro/new.md +64 -0
  20. package/commands/elsabro/pause-work.md +28 -5
  21. package/commands/elsabro/plan-milestone-gaps.md +20 -0
  22. package/commands/elsabro/plan.md +20 -0
  23. package/commands/elsabro/progress.md +8 -0
  24. package/commands/elsabro/quick.md +58 -3
  25. package/commands/elsabro/remove-phase.md +20 -0
  26. package/commands/elsabro/research-phase.md +20 -0
  27. package/commands/elsabro/resume-work.md +21 -0
  28. package/commands/elsabro/set-profile.md +38 -0
  29. package/commands/elsabro/settings.md +38 -0
  30. package/commands/elsabro/start.md +31 -1
  31. package/commands/elsabro/update.md +28 -0
  32. package/commands/elsabro/verify-work.md +94 -7
  33. package/commands/elsabro/verify.md +30 -0
  34. package/hooks/elsabro-mode.sh +102 -0
  35. package/hooks/hooks-config-updated.json +43 -7
  36. package/hooks/skill-discovery.sh +38 -8
  37. package/package.json +5 -5
  38. package/references/SYSTEM_INDEX.md +9 -0
  39. package/references/agent-teams-integration.md +99 -36
  40. package/references/enforcement-rules.md +177 -62
  41. package/references/flow-orchestration.md +127 -32
  42. package/references/next-step-engine.md +134 -0
  43. package/skills/stitch-ui-design.md +242 -0
  44. package/templates/session-state.json +3 -1
@@ -0,0 +1,407 @@
1
+ ---
2
+ name: design-ui
3
+ description: Diseñar interfaces visuales con Stitch AI - genera screens y mockups desde texto
4
+ allowed-tools:
5
+ - Read
6
+ - Write
7
+ - Task
8
+ - TaskCreate
9
+ - TaskUpdate
10
+ - TaskList
11
+ - AskUserQuestion
12
+ - Glob
13
+ - mcp__stitch__create_project
14
+ - mcp__stitch__get_project
15
+ - mcp__stitch__list_projects
16
+ - mcp__stitch__list_screens
17
+ - mcp__stitch__get_screen
18
+ - mcp__stitch__generate_screen_from_text
19
+ argument-hint: "[descripción de la interfaz o número de fase]"
20
+ sync:
21
+ reads: [".elsabro/state.json", ".planning/*-PLAN.md"]
22
+ writes: [".elsabro/state.json", ".elsabro/context.md", ".planning/ui-designs/"]
23
+ phases: ["initializing", "designing", "generating", "documenting", "done"]
24
+ passes_context_to: ["execute"]
25
+ ---
26
+
27
+ # ELSABRO: Design UI
28
+
29
+ <state_sync>
30
+ ## SINCRONIZACIÓN DE ESTADO (OBLIGATORIO)
31
+
32
+ **IMPORTAR**: Este comando DEBE seguir `/references/state-sync.md` y `/references/enforcement-rules.md`.
33
+
34
+ ### Al Iniciar (ANTES de cualquier operación)
35
+
36
+ ```javascript
37
+ // 1. Crear task de inicialización
38
+ TaskCreate({
39
+ subject: "Initialize design-ui command",
40
+ description: "Leer estado y preparar diseño de UI",
41
+ activeForm: "Inicializando..."
42
+ })
43
+ TaskUpdate(id, status: "in_progress")
44
+
45
+ // 2. Leer estado existente
46
+ const state = Read(".elsabro/state.json") || createInitialState();
47
+
48
+ // 3. Actualizar estado
49
+ state.current_flow = { command: "design-ui", phase: "initializing", started_at: new Date().toISOString() };
50
+ state.elsabro_mode = true;
51
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
52
+
53
+ // 4. Completar task de inicialización
54
+ TaskUpdate(id, status: "completed")
55
+ ```
56
+
57
+ ### Al Cambiar de Fase
58
+
59
+ ```javascript
60
+ // Antes de diseño
61
+ state.current_flow.phase = "designing";
62
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
63
+
64
+ // Antes de generación
65
+ state.current_flow.phase = "generating";
66
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
67
+
68
+ // Antes de documentación
69
+ state.current_flow.phase = "documenting";
70
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
71
+ ```
72
+
73
+ ### Al Completar
74
+
75
+ ```javascript
76
+ // Registrar en historial
77
+ state.history.push({
78
+ command: "design-ui",
79
+ completed_at: new Date().toISOString(),
80
+ result: "screens_generated",
81
+ artifact: ".planning/ui-designs/"
82
+ });
83
+
84
+ // Pasar contexto a execute
85
+ state.context = state.context || {};
86
+ state.context.stitch_project_id = projectId;
87
+ state.context.screens_generated = screenNames;
88
+ state.context.ui_designs_path = ".planning/ui-designs/";
89
+
90
+ // Limpiar flujo y sugerir siguiente
91
+ state.current_flow = null;
92
+ state.suggested_next = "execute";
93
+
94
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
95
+
96
+ // Actualizar context.md legible
97
+ Write(".elsabro/context.md", generateHumanReadableContext(state));
98
+ ```
99
+ </state_sync>
100
+
101
+ <objective>
102
+ Diseñar interfaces visuales usando **Stitch AI** como motor de generación. Convierte descripciones de texto o requerimientos de fase en screens visuales profesionales.
103
+
104
+ **El usuario puede no saber nada de diseño.** Guiarlo con opciones claras y generar screens automáticamente.
105
+ </objective>
106
+
107
+ <process>
108
+ ## Paso 1: Entender el Requerimiento
109
+
110
+ ### Si el argumento es un número de fase:
111
+ ```javascript
112
+ // Leer plan de la fase
113
+ const planFile = Glob(".planning/*-PLAN.md").find(f => f.includes(`0${phaseNumber}`));
114
+ const plan = Read(planFile);
115
+ // Extraer features que necesitan UI
116
+ ```
117
+
118
+ ### Si el argumento es texto descriptivo:
119
+ ```
120
+ Usar directamente como input para Stitch.
121
+ ```
122
+
123
+ ### Si no hay argumento:
124
+ ```javascript
125
+ AskUserQuestion({
126
+ questions: [{
127
+ question: "¿Qué interfaz necesitas diseñar?",
128
+ header: "Diseño UI",
129
+ options: [
130
+ { label: "Desde fase del plan", description: "Generar UI basada en una fase planificada" },
131
+ { label: "Pantalla específica", description: "Describir la pantalla que necesitas" },
132
+ { label: "Flujo completo", description: "Diseñar varias pantallas conectadas" }
133
+ ],
134
+ multiSelect: false
135
+ }]
136
+ });
137
+ ```
138
+
139
+ ## Paso 2: Verificar/Crear Proyecto Stitch
140
+
141
+ ### 2.1 Buscar proyecto existente
142
+ ```javascript
143
+ // Listar proyectos existentes
144
+ const projects = mcp__stitch__list_projects();
145
+
146
+ // Buscar proyecto del proyecto actual
147
+ const existingProject = projects.find(p => p.name.includes(projectName));
148
+ ```
149
+
150
+ ### 2.2 Crear proyecto si no existe
151
+ ```javascript
152
+ if (!existingProject) {
153
+ const project = mcp__stitch__create_project({
154
+ name: state.context.current_feature || "ELSABRO Design",
155
+ description: "UI designs for " + (state.context.current_feature || "project")
156
+ });
157
+ projectId = project.id;
158
+ } else {
159
+ projectId = existingProject.id;
160
+ }
161
+ ```
162
+
163
+ ## Paso 3: Generar Screens
164
+
165
+ ### 3.1 Preparar descripción para Stitch
166
+ ```javascript
167
+ // Construir prompt rico para Stitch
168
+ const screenDescription = buildScreenDescription({
169
+ requirement: userInput,
170
+ techStack: state.context.tech_stack,
171
+ existingPatterns: existingDesignPatterns,
172
+ accessibility: true
173
+ });
174
+ ```
175
+
176
+ ### 3.2 Generar screen
177
+ ```javascript
178
+ TaskCreate({
179
+ subject: "Generate UI screen: " + screenName,
180
+ activeForm: "Generando diseño...",
181
+ metadata: { type: "design", tool: "stitch" }
182
+ })
183
+
184
+ const screen = mcp__stitch__generate_screen_from_text({
185
+ project_id: projectId,
186
+ text: screenDescription
187
+ });
188
+
189
+ TaskUpdate(id, status: "completed")
190
+ ```
191
+
192
+ ### 3.3 Para flujos multi-pantalla
193
+ ```javascript
194
+ // Generar múltiples screens en secuencia
195
+ const screens = [
196
+ "Login page with email/password and social auth",
197
+ "Dashboard with sidebar navigation and cards",
198
+ "Settings page with form sections"
199
+ ];
200
+
201
+ for (const screen of screens) {
202
+ mcp__stitch__generate_screen_from_text({
203
+ project_id: projectId,
204
+ text: screen
205
+ });
206
+ }
207
+ ```
208
+
209
+ ## Paso 4: Revisar y Refinar
210
+
211
+ ### 4.1 Listar screens generados
212
+ ```javascript
213
+ const allScreens = mcp__stitch__list_screens({ project_id: projectId });
214
+ ```
215
+
216
+ ### 4.2 Mostrar al usuario
217
+ ```
218
+ ╔══════════════════════════════════════════════════╗
219
+ ║ SCREENS GENERADOS ║
220
+ ╠══════════════════════════════════════════════════╣
221
+ ║ ║
222
+ ║ 1. Login Page ║
223
+ ║ └─ Email/password + social auth ║
224
+ ║ ║
225
+ ║ 2. Dashboard ║
226
+ ║ └─ Sidebar + cards + stats ║
227
+ ║ ║
228
+ ║ 3. Settings ║
229
+ ║ └─ Form sections + profile ║
230
+ ║ ║
231
+ ╠══════════════════════════════════════════════════╣
232
+ ║ ¿Modificar alguna? (número o "ok" para aceptar)║
233
+ ╚══════════════════════════════════════════════════╝
234
+ ```
235
+
236
+ ### 4.3 Refinamiento
237
+ ```javascript
238
+ if (userWantsChanges) {
239
+ // Obtener screen actual
240
+ const screen = mcp__stitch__get_screen({
241
+ project_id: projectId,
242
+ screen_id: screenId
243
+ });
244
+
245
+ // Regenerar con feedback
246
+ mcp__stitch__generate_screen_from_text({
247
+ project_id: projectId,
248
+ text: originalDescription + "\n\nRefinement: " + userFeedback
249
+ });
250
+ }
251
+ ```
252
+
253
+ ## Paso 5: Documentar Diseños
254
+
255
+ ### 5.1 Crear directorio
256
+ ```bash
257
+ mkdir -p .planning/ui-designs
258
+ ```
259
+
260
+ ### 5.2 Guardar referencia de diseños
261
+ ```javascript
262
+ Write(".planning/ui-designs/UI-DESIGNS.md", `
263
+ # UI Designs
264
+
265
+ ## Project: ${projectName}
266
+ ## Stitch Project ID: ${projectId}
267
+ ## Generated: ${new Date().toISOString()}
268
+
269
+ ## Screens
270
+
271
+ ${screens.map((s, i) => `
272
+ ### ${i + 1}. ${s.name}
273
+ - **ID:** ${s.id}
274
+ - **Descripción:** ${s.description}
275
+ - **Estado:** Generated
276
+ `).join("\n")}
277
+
278
+ ## Design Decisions
279
+ - [Decisiones tomadas durante el diseño]
280
+
281
+ ## Next Steps
282
+ - Implement screens in code: /elsabro:execute
283
+ - Refine designs: /elsabro:design-ui
284
+ `);
285
+ ```
286
+
287
+ ## Paso 6: Reportar
288
+
289
+ ```
290
+ ╔══════════════════════════════════════════════════╗
291
+ ║ DISEÑO UI COMPLETADO ║
292
+ ╠══════════════════════════════════════════════════╣
293
+ ║ ║
294
+ ║ Proyecto Stitch: ${projectName} ║
295
+ ║ Screens generados: ${screens.length} ║
296
+ ║ ║
297
+ ║ Documentación: .planning/ui-designs/ ║
298
+ ║ ║
299
+ ╚══════════════════════════════════════════════════╝
300
+ ```
301
+ </process>
302
+
303
+ <siguiente_paso>
304
+ ## Siguiente Paso
305
+
306
+ Al completar el diseño, establecer en state.json:
307
+ ```javascript
308
+ state.suggested_next = "execute";
309
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
310
+ ```
311
+
312
+ Mostrar al usuario:
313
+ ```
314
+ ## Siguiente Paso
315
+
316
+ → /elsabro:execute — implementar los diseños en código
317
+ → /elsabro:design-ui — refinar o agregar más pantallas
318
+ ```
319
+ </siguiente_paso>
320
+
321
+ <error_handling>
322
+ ## Manejo de Errores
323
+
324
+ ### Si Stitch no responde
325
+ ```
326
+ ⚠ Stitch AI no está disponible en este momento.
327
+
328
+ Opciones:
329
+ 1. Reintentar la conexión
330
+ 2. Crear wireframes en ASCII (manual)
331
+ 3. Continuar sin diseño visual
332
+
333
+ ¿Qué prefieres?
334
+ ```
335
+
336
+ ### Si el proyecto Stitch ya tiene screens
337
+ ```
338
+ Este proyecto ya tiene ${existingScreens.length} screens.
339
+
340
+ Opciones:
341
+ 1. Ver screens existentes
342
+ 2. Agregar nuevos screens
343
+ 3. Reemplazar todos
344
+ 4. Empezar proyecto nuevo
345
+ ```
346
+ </error_handling>
347
+
348
+ <integration>
349
+ ## Integración con ELSABRO
350
+
351
+ ### Con /elsabro:plan
352
+ - Lee planes de fase para extraer requerimientos de UI
353
+ - Genera screens basados en features planificadas
354
+
355
+ ### Con /elsabro:execute
356
+ - Pasa `context.stitch_project_id` para referencia durante implementación
357
+ - Los screens sirven como guía visual para el código
358
+
359
+ ### Con elsabro-ux-designer (Sally)
360
+ - Sally puede usar este comando internamente
361
+ - Combina con 21st.dev para componentes de código
362
+
363
+ ### Con /elsabro:verify-work
364
+ - Los screens generados sirven como referencia visual para verificación
365
+ </integration>
366
+
367
+ <for_beginners>
368
+ ## Para Usuarios Sin Experiencia
369
+
370
+ ### ¿Qué es un diseño de UI?
371
+ ```
372
+ UI = User Interface = La parte visual de tu app
373
+
374
+ Es cómo se VE tu app:
375
+ - Dónde van los botones
376
+ - Cómo se organizan las secciones
377
+ - Qué ve el usuario en cada pantalla
378
+
379
+ Stitch AI genera estos diseños automáticamente
380
+ a partir de tu descripción en texto.
381
+ ```
382
+
383
+ ### Ejemplo
384
+ ```
385
+ Tú dices: "Necesito una página de login con email y contraseña"
386
+
387
+ Stitch genera: Un diseño profesional de login con:
388
+ - Campo de email
389
+ - Campo de contraseña
390
+ - Botón de iniciar sesión
391
+ - Opciones de login social
392
+ - Link de "olvidé mi contraseña"
393
+ ```
394
+ </for_beginners>
395
+
396
+ <checklist>
397
+ ## Checklist de Auto-Verificación
398
+
399
+ - [ ] TaskCreate ejecutado al inicio
400
+ - [ ] state.json leído y actualizado
401
+ - [ ] Proyecto Stitch verificado/creado
402
+ - [ ] Screens generados exitosamente
403
+ - [ ] Diseños documentados en .planning/ui-designs/
404
+ - [ ] state.json actualizado con stitch_project_id
405
+ - [ ] suggested_next establecido como "execute"
406
+ - [ ] TaskUpdate(completed) ejecutado
407
+ </checklist>
@@ -16,10 +16,12 @@ sync:
16
16
  ### Al Iniciar
17
17
  - Leer `.elsabro/state.json`
18
18
  - Verificar contexto actual del milestone/phase
19
+ - Activar persistent mode: `state.elsabro_mode = true`
19
20
 
20
21
  ### Al Completar
21
22
  - Registrar cambio en `history`
22
23
  - Actualizar `context` si corresponde
24
+ - Establecer `state.suggested_next = "plan"`
23
25
  </state_sync>
24
26
 
25
27
  <command-name>discuss-phase</command-name>
@@ -175,3 +177,21 @@ Genera/actualiza `.planning/milestones/M001/P3-DISCUSSION.md`:
175
177
 
176
178
  Next: /elsabro:execute to start implementation
177
179
  ```
180
+
181
+ <siguiente_paso>
182
+ ## Siguiente Paso
183
+
184
+ Al completar la discusión, establecer en state.json:
185
+ ```javascript
186
+ state.suggested_next = "plan";
187
+ Write(".elsabro/state.json", JSON.stringify(state, null, 2));
188
+ ```
189
+
190
+ Mostrar al usuario:
191
+ ```
192
+ ## Siguiente Paso
193
+
194
+ → /elsabro:plan — planificar la fase discutida
195
+ → /elsabro:execute — ejecutar directamente si ya está claro
196
+ ```
197
+ </siguiente_paso>