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
|
@@ -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
|