elsabro 2.0.1 → 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.
Files changed (46) hide show
  1. package/commands/elsabro/add-phase.md +17 -0
  2. package/commands/elsabro/add-todo.md +111 -53
  3. package/commands/elsabro/audit-milestone.md +19 -0
  4. package/commands/elsabro/check-todos.md +210 -31
  5. package/commands/elsabro/complete-milestone.md +20 -1
  6. package/commands/elsabro/debug.md +19 -0
  7. package/commands/elsabro/discuss-phase.md +18 -1
  8. package/commands/elsabro/execute.md +496 -52
  9. package/commands/elsabro/insert-phase.md +18 -1
  10. package/commands/elsabro/list-phase-assumptions.md +17 -0
  11. package/commands/elsabro/new-milestone.md +19 -0
  12. package/commands/elsabro/new.md +19 -0
  13. package/commands/elsabro/pause-work.md +75 -0
  14. package/commands/elsabro/plan-milestone-gaps.md +20 -1
  15. package/commands/elsabro/plan.md +264 -36
  16. package/commands/elsabro/progress.md +203 -79
  17. package/commands/elsabro/quick.md +19 -0
  18. package/commands/elsabro/remove-phase.md +17 -0
  19. package/commands/elsabro/research-phase.md +18 -1
  20. package/commands/elsabro/resume-work.md +130 -2
  21. package/commands/elsabro/start.md +365 -98
  22. package/commands/elsabro/verify-work.md +271 -12
  23. package/package.json +1 -1
  24. package/references/SYSTEM_INDEX.md +241 -0
  25. package/references/command-flow.md +352 -0
  26. package/references/enforcement-rules.md +331 -0
  27. package/references/error-handling-instructions.md +26 -12
  28. package/references/state-sync.md +381 -0
  29. package/references/task-dispatcher.md +388 -0
  30. package/references/tasks-integration.md +380 -0
  31. package/skills/api-microservice.md +765 -0
  32. package/skills/api-setup.md +76 -3
  33. package/skills/auth-setup.md +46 -6
  34. package/skills/chrome-extension.md +584 -0
  35. package/skills/cicd-setup.md +1206 -0
  36. package/skills/cli-tool.md +884 -0
  37. package/skills/database-setup.md +41 -5
  38. package/skills/desktop-app.md +1351 -0
  39. package/skills/expo-app.md +35 -2
  40. package/skills/full-stack-app.md +543 -0
  41. package/skills/mobile-app.md +813 -0
  42. package/skills/nextjs-app.md +33 -2
  43. package/skills/payments-setup.md +76 -1
  44. package/skills/saas-starter.md +639 -0
  45. package/skills/sentry-setup.md +41 -7
  46. package/skills/testing-setup.md +1218 -0
@@ -0,0 +1,380 @@
1
+ # ELSABRO Tasks Integration
2
+
3
+ ## Propósito
4
+
5
+ Integración del sistema ELSABRO con Claude Code Tasks API. Este documento define cómo ELSABRO usa Tasks API como backend único para tracking de trabajo, reemplazando sistemas duplicados.
6
+
7
+ ---
8
+
9
+ ## Arquitectura Unificada
10
+
11
+ ```
12
+ ┌─────────────────────────────────────────────────────────────────────────────┐
13
+ │ ELSABRO + TASKS API INTEGRATION │
14
+ ├─────────────────────────────────────────────────────────────────────────────┤
15
+ │ │
16
+ │ ┌─────────────────────┐ ┌──────────────────────────────────────────┐ │
17
+ │ │ ELSABRO COMMANDS │ │ CLAUDE CODE TASKS API │ │
18
+ │ │ (User Interface) │────▶│ (Backend Storage) │ │
19
+ │ └─────────────────────┘ └──────────────────────────────────────────┘ │
20
+ │ │ │ │
21
+ │ │ │ │
22
+ │ ┌────────┴─────────┐ ┌──────────┴─────────────────────────────┐ │
23
+ │ │ High-Level UX │ │ Native Capabilities │ │
24
+ │ │ - /add-todo │ │ - TaskCreate(subject, description) │ │
25
+ │ │ - /check-todos │ │ - TaskUpdate(status, metadata) │ │
26
+ │ │ - /progress │ │ - TaskList() with filters │ │
27
+ │ │ - /pause-work │ │ - TaskGet(id) for details │ │
28
+ │ │ - /resume-work │ │ - blocks/blockedBy dependencies │ │
29
+ │ └──────────────────┘ │ - owner assignment │ │
30
+ │ │ - metadata (flexible key-value) │ │
31
+ │ └──────────────────────────────────────────┘ │
32
+ │ │
33
+ │ ┌────────────────────────────────────────────────────────────────────────┐ │
34
+ │ │ METADATA SCHEMA │ │
35
+ │ │ │ │
36
+ │ │ { │ │
37
+ │ │ "type": "todo|phase|milestone|work", │ │
38
+ │ │ "priority": "critical|high|medium|low", │ │
39
+ │ │ "category": "bug|tech-debt|docs|chore|idea|feature", │ │
40
+ │ │ "due_date": "ISO-8601 | null", │ │
41
+ │ │ "milestone_id": "M001 | null", │ │
42
+ │ │ "phase_id": "P001 | null", │ │
43
+ │ │ "created_by": "user|system", │ │
44
+ │ │ "source_command": "add-todo|plan|execute|etc" │ │
45
+ │ │ } │ │
46
+ │ └────────────────────────────────────────────────────────────────────────┘ │
47
+ │ │
48
+ └─────────────────────────────────────────────────────────────────────────────┘
49
+ ```
50
+
51
+ ---
52
+
53
+ ## Migración de TODOs a Tasks
54
+
55
+ ### Antes (Sistema Duplicado)
56
+
57
+ ```markdown
58
+ # .planning/TODOS.md
59
+
60
+ ## Critical
61
+ - [ ] Fix auth token refresh (#123)
62
+
63
+ ## High Priority
64
+ - [ ] Update React to v18.3 (tech-debt)
65
+ ```
66
+
67
+ ### Después (Tasks API)
68
+
69
+ ```javascript
70
+ // Crear TODO como Task
71
+ TaskCreate({
72
+ subject: "Fix auth token refresh",
73
+ description: "Authentication tokens not refreshing correctly. Issue #123",
74
+ activeForm: "Fixing auth token refresh",
75
+ metadata: {
76
+ type: "todo",
77
+ priority: "critical",
78
+ category: "bug",
79
+ issue_ref: "#123",
80
+ source_command: "add-todo"
81
+ }
82
+ });
83
+
84
+ // Crear TODO tech-debt
85
+ TaskCreate({
86
+ subject: "Update React to v18.3",
87
+ description: "Upgrade React version for performance improvements",
88
+ activeForm: "Updating React",
89
+ metadata: {
90
+ type: "todo",
91
+ priority: "high",
92
+ category: "tech-debt",
93
+ source_command: "add-todo"
94
+ }
95
+ });
96
+ ```
97
+
98
+ ---
99
+
100
+ ## Comando: /elsabro:add-todo (Actualizado)
101
+
102
+ ### Implementación con Tasks API
103
+
104
+ ```javascript
105
+ // Usuario ejecuta: /elsabro:add-todo "Fix typo in README" --priority=high --category=docs
106
+
107
+ // 1. Crear Task
108
+ TaskCreate({
109
+ subject: "Fix typo in README",
110
+ description: "User-created TODO item",
111
+ activeForm: "Fixing typo in README",
112
+ metadata: {
113
+ type: "todo",
114
+ priority: "high", // Del argumento --priority
115
+ category: "docs", // Del argumento --category
116
+ due_date: null, // Del argumento --due
117
+ milestone_id: null, // Del argumento --milestone
118
+ created_by: "user",
119
+ source_command: "add-todo",
120
+ created_at: new Date().toISOString()
121
+ }
122
+ });
123
+
124
+ // 2. Output
125
+ console.log(`
126
+ ✓ TODO added (Task #${task.id})
127
+
128
+ Subject: Fix typo in README
129
+ Priority: high
130
+ Category: docs
131
+
132
+ View all: /elsabro:check-todos
133
+ `);
134
+ ```
135
+
136
+ ---
137
+
138
+ ## Comando: /elsabro:check-todos (Actualizado)
139
+
140
+ ### Implementación con Tasks API
141
+
142
+ ```javascript
143
+ // Usuario ejecuta: /elsabro:check-todos --priority=high
144
+
145
+ // 1. Obtener todas las Tasks tipo "todo"
146
+ const tasks = TaskList();
147
+
148
+ // 2. Filtrar por metadata.type === "todo"
149
+ const todos = tasks.filter(t => t.metadata?.type === "todo");
150
+
151
+ // 3. Filtrar por prioridad si se especificó
152
+ const filtered = todos.filter(t =>
153
+ !priority || t.metadata?.priority === priority
154
+ );
155
+
156
+ // 4. Agrupar por prioridad
157
+ const grouped = {
158
+ critical: filtered.filter(t => t.metadata?.priority === "critical"),
159
+ high: filtered.filter(t => t.metadata?.priority === "high"),
160
+ medium: filtered.filter(t => t.metadata?.priority === "medium"),
161
+ low: filtered.filter(t => t.metadata?.priority === "low")
162
+ };
163
+
164
+ // 5. Mostrar vista formateada
165
+ console.log(`
166
+ ╔══════════════════════════════════════════════════╗
167
+ ║ PROJECT TODOs ║
168
+ ╠══════════════════════════════════════════════════╣
169
+
170
+ 🔴 CRITICAL (${grouped.critical.length})
171
+ ${grouped.critical.map(t => `#${t.id} ${t.subject} [${t.metadata.category}]`).join('\n')}
172
+
173
+ 🟠 HIGH (${grouped.high.length})
174
+ ${grouped.high.map(t => `#${t.id} ${t.subject} [${t.metadata.category}]`).join('\n')}
175
+
176
+ 🟡 MEDIUM (${grouped.medium.length})
177
+ ${grouped.medium.map(t => `#${t.id} ${t.subject} [${t.metadata.category}]`).join('\n')}
178
+
179
+ ⬜ LOW (${grouped.low.length})
180
+ ${grouped.low.map(t => `#${t.id} ${t.subject} [${t.metadata.category}]`).join('\n')}
181
+
182
+ ╠══════════════════════════════════════════════════╣
183
+ ║ Total: ${filtered.length} | Completed: ${completed.length}
184
+ ╚══════════════════════════════════════════════════╝
185
+ `);
186
+ ```
187
+
188
+ ### Acciones con TaskUpdate
189
+
190
+ ```javascript
191
+ // Marcar como completado
192
+ // /elsabro:check-todos --complete=5
193
+ TaskUpdate({ taskId: "5", status: "completed" });
194
+
195
+ // Cambiar prioridad
196
+ // /elsabro:check-todos --prioritize=6 --to=high
197
+ TaskUpdate({
198
+ taskId: "6",
199
+ metadata: { priority: "high" }
200
+ });
201
+
202
+ // Eliminar (usando status especial)
203
+ // /elsabro:check-todos --delete=9
204
+ TaskUpdate({ taskId: "9", status: "deleted" });
205
+ ```
206
+
207
+ ---
208
+
209
+ ## State Sync Simplificado
210
+
211
+ ### Antes (state-sync.md complejo)
212
+
213
+ ```javascript
214
+ // 20+ líneas de código para sincronizar estado
215
+ function initializeState() {
216
+ const stateFile = '.elsabro/state.json';
217
+ let state = { version: "1.0.0", ... };
218
+ // ... mucho código
219
+ }
220
+ ```
221
+
222
+ ### Después (Tasks API como fuente de verdad)
223
+
224
+ ```javascript
225
+ // Sincronización automática via Tasks API
226
+ function getCommandContext() {
227
+ const tasks = TaskList();
228
+
229
+ return {
230
+ currentCommand: tasks.find(t =>
231
+ t.status === "in_progress" &&
232
+ t.metadata?.type === "command"
233
+ ),
234
+ pendingWork: tasks.filter(t => t.status === "pending"),
235
+ blockedWork: tasks.filter(t => t.blockedBy?.length > 0),
236
+ lastCompleted: tasks
237
+ .filter(t => t.status === "completed")
238
+ .sort((a, b) => b.metadata?.completed_at - a.metadata?.completed_at)[0]
239
+ };
240
+ }
241
+ ```
242
+
243
+ ---
244
+
245
+ ## Tipos de Tasks por Comando
246
+
247
+ ### Comando: /elsabro:execute
248
+
249
+ ```javascript
250
+ // Fase exploración
251
+ TaskCreate({
252
+ subject: "Explore codebase for feature X",
253
+ metadata: { type: "work", phase: "exploration", model: "haiku" }
254
+ });
255
+
256
+ // Fase implementación
257
+ TaskCreate({
258
+ subject: "Implement feature X",
259
+ metadata: { type: "work", phase: "implementation", model: "opus" }
260
+ });
261
+
262
+ // Fase verificación
263
+ TaskCreate({
264
+ subject: "Verify feature X",
265
+ metadata: { type: "work", phase: "verification", model: "opus" }
266
+ });
267
+ ```
268
+
269
+ ### Comando: /elsabro:plan
270
+
271
+ ```javascript
272
+ TaskCreate({
273
+ subject: "Create plan for feature Y",
274
+ metadata: {
275
+ type: "work",
276
+ phase: "planning",
277
+ output_file: ".elsabro/plans/feature-y.md"
278
+ }
279
+ });
280
+ ```
281
+
282
+ ### Comando: /elsabro:new-milestone
283
+
284
+ ```javascript
285
+ TaskCreate({
286
+ subject: "Milestone: MVP Launch",
287
+ description: "Complete all MVP features for launch",
288
+ metadata: {
289
+ type: "milestone",
290
+ milestone_id: "M001",
291
+ target_date: "2024-02-15",
292
+ phases: ["P001", "P002", "P003"]
293
+ }
294
+ });
295
+ ```
296
+
297
+ ---
298
+
299
+ ## Dependencias Automáticas
300
+
301
+ ```javascript
302
+ // Crear tareas con dependencias
303
+ const phase1 = TaskCreate({
304
+ subject: "Phase 1: Database setup",
305
+ metadata: { type: "phase", phase_id: "P001" }
306
+ });
307
+
308
+ const phase2 = TaskCreate({
309
+ subject: "Phase 2: API endpoints",
310
+ metadata: { type: "phase", phase_id: "P002" }
311
+ });
312
+
313
+ // Phase 2 depende de Phase 1
314
+ TaskUpdate({
315
+ taskId: phase2.id,
316
+ addBlockedBy: [phase1.id]
317
+ });
318
+
319
+ // Resultado: Phase 2 no puede empezar hasta que Phase 1 complete
320
+ ```
321
+
322
+ ---
323
+
324
+ ## Migración Gradual
325
+
326
+ ### Paso 1: Dual-Write (Compatibilidad)
327
+
328
+ ```javascript
329
+ // Escribir a ambos sistemas durante transición
330
+ function addTodo(todo) {
331
+ // Nuevo: Tasks API
332
+ TaskCreate({ subject: todo.description, metadata: {...} });
333
+
334
+ // Legacy: .planning/TODOS.md (temporal)
335
+ appendToFile('.planning/TODOS.md', `- [ ] ${todo.description}`);
336
+ }
337
+ ```
338
+
339
+ ### Paso 2: Read from Tasks API
340
+
341
+ ```javascript
342
+ // Leer solo de Tasks API
343
+ function getTodos() {
344
+ return TaskList().filter(t => t.metadata?.type === "todo");
345
+ }
346
+ ```
347
+
348
+ ### Paso 3: Remove Legacy
349
+
350
+ ```javascript
351
+ // Eliminar archivo legacy
352
+ // rm .planning/TODOS.md
353
+ // Actualizar comandos para usar solo Tasks API
354
+ ```
355
+
356
+ ---
357
+
358
+ ## Beneficios de la Integración
359
+
360
+ | Aspecto | Antes | Después |
361
+ |---------|-------|---------|
362
+ | Storage | `.planning/TODOS.md` + `.elsabro/state.json` | Tasks API (único) |
363
+ | Dependencias | Manual | `blocks/blockedBy` nativo |
364
+ | Persistencia | Por sesión | Entre sesiones |
365
+ | Filtros | Código custom | TaskList nativo |
366
+ | Estado | Sincronización manual | Automático |
367
+ | Visualización | Parsing de markdown | Structured data |
368
+
369
+ ---
370
+
371
+ ## Checklist de Implementación
372
+
373
+ - [ ] Actualizar `/elsabro:add-todo` para usar TaskCreate
374
+ - [ ] Actualizar `/elsabro:check-todos` para usar TaskList/TaskUpdate
375
+ - [ ] Actualizar `/elsabro:progress` para leer de Tasks API
376
+ - [ ] Actualizar `/elsabro:pause-work` para usar TaskUpdate
377
+ - [ ] Actualizar `/elsabro:resume-work` para usar TaskGet
378
+ - [ ] Deprecar `.planning/TODOS.md`
379
+ - [ ] Migrar state-sync a usar Tasks API metadata
380
+ - [ ] Actualizar enforcement-rules.md con nuevos patrones