elsabro 2.1.0 → 2.3.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 +113 -0
- 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 +511 -58
- 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 +399 -98
- package/commands/elsabro/verify-work.md +138 -5
- package/hooks/confirm-destructive.sh +145 -0
- package/hooks/hooks-config.json +81 -0
- package/hooks/lint-check.sh +238 -0
- package/hooks/post-edit-test.sh +189 -0
- package/package.json +3 -2
- package/references/SYSTEM_INDEX.md +241 -0
- package/references/command-flow.md +352 -0
- package/references/enforcement-rules.md +331 -0
- package/references/error-contracts-tests.md +1171 -0
- package/references/error-contracts.md +3102 -0
- package/references/error-handling-instructions.md +26 -12
- package/references/parallel-worktrees.md +293 -0
- package/references/state-sync.md +381 -0
- package/references/task-dispatcher.md +388 -0
- package/references/tasks-integration.md +380 -0
- package/scripts/setup-parallel-worktrees.sh +319 -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/memory-update.md +207 -0
- package/skills/mobile-app.md +813 -0
- package/skills/nextjs-app.md +33 -2
- package/skills/payments-setup.md +76 -1
- package/skills/review.md +331 -0
- package/skills/saas-starter.md +639 -0
- package/skills/sentry-setup.md +41 -7
- package/skills/techdebt.md +289 -0
- package/skills/testing-setup.md +1218 -0
- package/skills/tutor.md +219 -0
- package/templates/.planning/notes/.gitkeep +0 -0
- package/templates/CLAUDE.md.template +48 -0
- package/templates/error-handling-config.json +79 -2
- package/templates/mistakes.md.template +52 -0
- package/templates/patterns.md.template +114 -0
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: check-todos
|
|
3
3
|
description: Ver y gestionar el todo list del proyecto
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- TaskList
|
|
6
|
+
- TaskGet
|
|
7
|
+
- TaskUpdate
|
|
8
|
+
- Read
|
|
9
|
+
- AskUserQuestion
|
|
4
10
|
---
|
|
5
11
|
|
|
6
12
|
# /elsabro:check-todos
|
|
@@ -9,7 +15,7 @@ description: Ver y gestionar el todo list del proyecto
|
|
|
9
15
|
|
|
10
16
|
## Propósito
|
|
11
17
|
|
|
12
|
-
Revisar, filtrar y gestionar los TODOs del proyecto
|
|
18
|
+
Revisar, filtrar y gestionar los TODOs del proyecto usando **Claude Code Tasks API**. Vista completa de tareas pendientes con capacidad de gestión directa.
|
|
13
19
|
|
|
14
20
|
## Cuándo Usar
|
|
15
21
|
|
|
@@ -45,7 +51,69 @@ Revisar, filtrar y gestionar los TODOs del proyecto. Vista completa de tareas pe
|
|
|
45
51
|
/elsabro:check-todos --completed
|
|
46
52
|
```
|
|
47
53
|
|
|
48
|
-
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Implementación (Tasks API)
|
|
57
|
+
|
|
58
|
+
<implementation>
|
|
59
|
+
Cuando el usuario ejecuta `/elsabro:check-todos`:
|
|
60
|
+
|
|
61
|
+
### 1. Obtener TODOs
|
|
62
|
+
|
|
63
|
+
```javascript
|
|
64
|
+
// Listar todas las Tasks
|
|
65
|
+
const allTasks = TaskList();
|
|
66
|
+
|
|
67
|
+
// Filtrar por tipo "todo"
|
|
68
|
+
const todos = allTasks.filter(t => t.metadata?.type === "todo");
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### 2. Aplicar Filtros
|
|
72
|
+
|
|
73
|
+
```javascript
|
|
74
|
+
// Si --priority especificado
|
|
75
|
+
if (args.priority) {
|
|
76
|
+
todos = todos.filter(t => t.metadata?.priority === args.priority);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Si --category especificado
|
|
80
|
+
if (args.category) {
|
|
81
|
+
todos = todos.filter(t => t.metadata?.category === args.category);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
// Si --pending (default)
|
|
85
|
+
if (args.pending || !args.completed) {
|
|
86
|
+
todos = todos.filter(t => t.status !== "completed");
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Si --completed
|
|
90
|
+
if (args.completed) {
|
|
91
|
+
todos = todos.filter(t => t.status === "completed");
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Si --overdue
|
|
95
|
+
if (args.overdue) {
|
|
96
|
+
const now = new Date();
|
|
97
|
+
todos = todos.filter(t =>
|
|
98
|
+
t.metadata?.due_date &&
|
|
99
|
+
new Date(t.metadata.due_date) < now &&
|
|
100
|
+
t.status !== "completed"
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### 3. Agrupar por Prioridad
|
|
106
|
+
|
|
107
|
+
```javascript
|
|
108
|
+
const grouped = {
|
|
109
|
+
critical: todos.filter(t => t.metadata?.priority === "critical"),
|
|
110
|
+
high: todos.filter(t => t.metadata?.priority === "high"),
|
|
111
|
+
medium: todos.filter(t => t.metadata?.priority === "medium"),
|
|
112
|
+
low: todos.filter(t => t.metadata?.priority === "low")
|
|
113
|
+
};
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 4. Mostrar Vista
|
|
49
117
|
|
|
50
118
|
```
|
|
51
119
|
╔══════════════════════════════════════════════════╗
|
|
@@ -53,75 +121,144 @@ Revisar, filtrar y gestionar los TODOs del proyecto. Vista completa de tareas pe
|
|
|
53
121
|
╠══════════════════════════════════════════════════╣
|
|
54
122
|
║ ║
|
|
55
123
|
║ 🔴 CRITICAL (1) ║
|
|
56
|
-
║
|
|
124
|
+
║ #<ID> Fix auth token refresh [bug] ║
|
|
57
125
|
║ ║
|
|
58
126
|
║ 🟠 HIGH (3) ║
|
|
59
|
-
║
|
|
60
|
-
║
|
|
61
|
-
║
|
|
127
|
+
║ #<ID> Update React to v18.3 [tech-debt] ║
|
|
128
|
+
║ #<ID> Add loading states [ux] ║
|
|
129
|
+
║ #<ID> Update error messages [ux] ║
|
|
62
130
|
║ ║
|
|
63
131
|
║ 🟡 MEDIUM (4) ║
|
|
64
|
-
║
|
|
65
|
-
║
|
|
66
|
-
║
|
|
67
|
-
║
|
|
132
|
+
║ #<ID> Fix typo in README [docs] ║
|
|
133
|
+
║ #<ID> Add error boundary [tech-debt] ║
|
|
134
|
+
║ #<ID> Document API endpoints [docs] ║
|
|
135
|
+
║ #<ID> Add unit tests for utils [test] ║
|
|
68
136
|
║ ║
|
|
69
137
|
║ ⬜ LOW (2) ║
|
|
70
|
-
║
|
|
71
|
-
║
|
|
138
|
+
║ #<ID> Investigate dark mode [idea] ║
|
|
139
|
+
║ #<ID> Consider PWA support [idea] ║
|
|
72
140
|
║ ║
|
|
73
141
|
╠══════════════════════════════════════════════════╣
|
|
74
142
|
║ Total: 10 | Completed today: 2 ║
|
|
75
143
|
╚══════════════════════════════════════════════════╝
|
|
76
144
|
```
|
|
145
|
+
</implementation>
|
|
146
|
+
|
|
147
|
+
---
|
|
77
148
|
|
|
78
149
|
## Gestión de TODOs
|
|
79
150
|
|
|
80
|
-
### Marcar como
|
|
151
|
+
### Marcar como Completado
|
|
81
152
|
|
|
82
153
|
```bash
|
|
83
|
-
/elsabro:check-todos --complete
|
|
154
|
+
/elsabro:check-todos --complete=<task-id>
|
|
84
155
|
```
|
|
85
156
|
|
|
157
|
+
```javascript
|
|
158
|
+
TaskUpdate({
|
|
159
|
+
taskId: "<task-id>",
|
|
160
|
+
status: "completed",
|
|
161
|
+
metadata: {
|
|
162
|
+
completed_at: new Date().toISOString()
|
|
163
|
+
}
|
|
164
|
+
});
|
|
86
165
|
```
|
|
87
|
-
|
|
166
|
+
|
|
167
|
+
Output:
|
|
168
|
+
```
|
|
169
|
+
✓ Completed: #<ID> "Fix typo in README"
|
|
88
170
|
```
|
|
89
171
|
|
|
90
|
-
### Cambiar
|
|
172
|
+
### Cambiar Prioridad
|
|
91
173
|
|
|
92
174
|
```bash
|
|
93
|
-
/elsabro:check-todos --prioritize
|
|
175
|
+
/elsabro:check-todos --prioritize=<task-id> --to=high
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
```javascript
|
|
179
|
+
// Obtener task actual
|
|
180
|
+
const task = TaskGet({ taskId: "<task-id>" });
|
|
181
|
+
|
|
182
|
+
// Actualizar prioridad en metadata
|
|
183
|
+
TaskUpdate({
|
|
184
|
+
taskId: "<task-id>",
|
|
185
|
+
metadata: {
|
|
186
|
+
...task.metadata,
|
|
187
|
+
priority: "high",
|
|
188
|
+
updated_at: new Date().toISOString()
|
|
189
|
+
}
|
|
190
|
+
});
|
|
94
191
|
```
|
|
95
192
|
|
|
193
|
+
Output:
|
|
96
194
|
```
|
|
97
|
-
✓
|
|
195
|
+
✓ #<ID> "Add error boundary" priority: medium → high
|
|
98
196
|
```
|
|
99
197
|
|
|
100
198
|
### Eliminar TODO
|
|
101
199
|
|
|
102
200
|
```bash
|
|
103
|
-
/elsabro:check-todos --delete
|
|
201
|
+
/elsabro:check-todos --delete=<task-id>
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
```javascript
|
|
205
|
+
// Confirmar con usuario
|
|
206
|
+
AskUserQuestion({
|
|
207
|
+
questions: [{
|
|
208
|
+
question: `Delete #<ID> "${task.subject}"?`,
|
|
209
|
+
header: "Confirm",
|
|
210
|
+
options: [
|
|
211
|
+
{ label: "Yes, delete", description: "Permanently remove this TODO" },
|
|
212
|
+
{ label: "No, keep it", description: "Cancel deletion" }
|
|
213
|
+
],
|
|
214
|
+
multiSelect: false
|
|
215
|
+
}]
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
// Si confirmado
|
|
219
|
+
TaskUpdate({ taskId: "<task-id>", status: "deleted" });
|
|
104
220
|
```
|
|
105
221
|
|
|
222
|
+
Output:
|
|
106
223
|
```
|
|
107
|
-
|
|
108
|
-
> y
|
|
109
|
-
✓ Deleted
|
|
224
|
+
✓ Deleted: #<ID> "Investigate dark mode"
|
|
110
225
|
```
|
|
111
226
|
|
|
112
227
|
### Editar TODO
|
|
113
228
|
|
|
114
229
|
```bash
|
|
115
|
-
/elsabro:check-todos --edit
|
|
230
|
+
/elsabro:check-todos --edit=<task-id>
|
|
116
231
|
```
|
|
117
232
|
|
|
233
|
+
```javascript
|
|
234
|
+
// Obtener task actual
|
|
235
|
+
const task = TaskGet({ taskId: "<task-id>" });
|
|
236
|
+
|
|
237
|
+
// Solicitar nueva descripción
|
|
238
|
+
AskUserQuestion({
|
|
239
|
+
questions: [{
|
|
240
|
+
question: `Current: "${task.subject}"\nNew description?`,
|
|
241
|
+
header: "Edit",
|
|
242
|
+
options: [
|
|
243
|
+
{ label: "Keep current", description: "No changes" },
|
|
244
|
+
{ label: "Modify", description: "Enter new description" }
|
|
245
|
+
],
|
|
246
|
+
multiSelect: false
|
|
247
|
+
}]
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
// Si modifica
|
|
251
|
+
TaskUpdate({
|
|
252
|
+
taskId: "<task-id>",
|
|
253
|
+
subject: newSubject,
|
|
254
|
+
metadata: {
|
|
255
|
+
...task.metadata,
|
|
256
|
+
updated_at: new Date().toISOString()
|
|
257
|
+
}
|
|
258
|
+
});
|
|
118
259
|
```
|
|
119
|
-
Current: "Add loading states"
|
|
120
|
-
New description (or Enter to keep):
|
|
121
|
-
> Add loading states to all API calls
|
|
122
260
|
|
|
123
|
-
|
|
124
|
-
```
|
|
261
|
+
---
|
|
125
262
|
|
|
126
263
|
## Filtros
|
|
127
264
|
|
|
@@ -133,7 +270,7 @@ New description (or Enter to keep):
|
|
|
133
270
|
--category=bug|tech-debt|docs|chore|idea|question
|
|
134
271
|
|
|
135
272
|
# Por estado
|
|
136
|
-
--pending # Solo pendientes
|
|
273
|
+
--pending # Solo pendientes (default)
|
|
137
274
|
--completed # Solo completados
|
|
138
275
|
--overdue # Con fecha vencida
|
|
139
276
|
|
|
@@ -145,12 +282,47 @@ New description (or Enter to keep):
|
|
|
145
282
|
--milestone=M001
|
|
146
283
|
```
|
|
147
284
|
|
|
285
|
+
---
|
|
286
|
+
|
|
148
287
|
## Estadísticas
|
|
149
288
|
|
|
150
289
|
```bash
|
|
151
290
|
/elsabro:check-todos --stats
|
|
152
291
|
```
|
|
153
292
|
|
|
293
|
+
<stats_implementation>
|
|
294
|
+
```javascript
|
|
295
|
+
const todos = TaskList().filter(t => t.metadata?.type === "todo");
|
|
296
|
+
const pending = todos.filter(t => t.status !== "completed");
|
|
297
|
+
const completed = todos.filter(t => t.status === "completed");
|
|
298
|
+
|
|
299
|
+
// Por prioridad
|
|
300
|
+
const byPriority = {
|
|
301
|
+
critical: pending.filter(t => t.metadata?.priority === "critical").length,
|
|
302
|
+
high: pending.filter(t => t.metadata?.priority === "high").length,
|
|
303
|
+
medium: pending.filter(t => t.metadata?.priority === "medium").length,
|
|
304
|
+
low: pending.filter(t => t.metadata?.priority === "low").length
|
|
305
|
+
};
|
|
306
|
+
|
|
307
|
+
// Por categoría
|
|
308
|
+
const byCategory = pending.reduce((acc, t) => {
|
|
309
|
+
const cat = t.metadata?.category || "uncategorized";
|
|
310
|
+
acc[cat] = (acc[cat] || 0) + 1;
|
|
311
|
+
return acc;
|
|
312
|
+
}, {});
|
|
313
|
+
|
|
314
|
+
// Completion rate (últimos 7 días)
|
|
315
|
+
const sevenDaysAgo = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000);
|
|
316
|
+
const recentlyCompleted = completed.filter(t =>
|
|
317
|
+
new Date(t.metadata?.completed_at) > sevenDaysAgo
|
|
318
|
+
);
|
|
319
|
+
const completionRate = Math.round(
|
|
320
|
+
(recentlyCompleted.length / (recentlyCompleted.length + pending.length)) * 100
|
|
321
|
+
);
|
|
322
|
+
```
|
|
323
|
+
</stats_implementation>
|
|
324
|
+
|
|
325
|
+
Output:
|
|
154
326
|
```
|
|
155
327
|
╔══════════════════════════════════════════════════╗
|
|
156
328
|
║ TODO STATISTICS ║
|
|
@@ -172,6 +344,8 @@ New description (or Enter to keep):
|
|
|
172
344
|
╚══════════════════════════════════════════════════╝
|
|
173
345
|
```
|
|
174
346
|
|
|
347
|
+
---
|
|
348
|
+
|
|
175
349
|
## Output Formatos
|
|
176
350
|
|
|
177
351
|
```bash
|
|
@@ -185,8 +359,13 @@ New description (or Enter to keep):
|
|
|
185
359
|
/elsabro:check-todos --format=minimal
|
|
186
360
|
```
|
|
187
361
|
|
|
362
|
+
---
|
|
363
|
+
|
|
188
364
|
## Integración
|
|
189
365
|
|
|
190
366
|
- Add with `/elsabro:add-todo`
|
|
191
|
-
-
|
|
192
|
-
-
|
|
367
|
+
- Backend: Claude Code Tasks API
|
|
368
|
+
- Persiste entre sesiones
|
|
369
|
+
- Soporta dependencias (`blocks/blockedBy`)
|
|
370
|
+
- Visible en `/elsabro:progress`
|
|
371
|
+
- Promovible a fase con `/elsabro:add-phase`
|
|
@@ -1,10 +1,29 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: complete-milestone
|
|
3
|
-
description: Cerrar un milestone completado con retrospectiva y
|
|
3
|
+
description: Cerrar un milestone completado con retrospectiva y documentacion de logros
|
|
4
|
+
sync:
|
|
5
|
+
reads: [".elsabro/state.json"]
|
|
6
|
+
writes: [".elsabro/state.json", ".elsabro/context.md"]
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# /elsabro:complete-milestone
|
|
7
10
|
|
|
11
|
+
<state_sync>
|
|
12
|
+
## SINCRONIZACION DE ESTADO
|
|
13
|
+
|
|
14
|
+
**IMPORTAR**: Ver `/references/state-sync.md` para protocolo completo.
|
|
15
|
+
|
|
16
|
+
### Al Iniciar
|
|
17
|
+
- Leer `.elsabro/state.json`
|
|
18
|
+
- Verificar si hay flujo en progreso
|
|
19
|
+
- Actualizar `current_flow.command` con este comando
|
|
20
|
+
|
|
21
|
+
### Al Completar
|
|
22
|
+
- Registrar en `history`
|
|
23
|
+
- Actualizar `context` con informacion del milestone
|
|
24
|
+
- Limpiar `current_flow`
|
|
25
|
+
</state_sync>
|
|
26
|
+
|
|
8
27
|
<command-name>complete-milestone</command-name>
|
|
9
28
|
|
|
10
29
|
## Propósito
|
|
@@ -13,10 +13,29 @@ allowed-tools:
|
|
|
13
13
|
- AskUserQuestion
|
|
14
14
|
- mcp__plugin_context7_context7__*
|
|
15
15
|
argument-hint: "[descripción del problema]"
|
|
16
|
+
sync:
|
|
17
|
+
reads: [".elsabro/state.json"]
|
|
18
|
+
writes: [".elsabro/state.json", ".elsabro/context.md"]
|
|
16
19
|
---
|
|
17
20
|
|
|
18
21
|
# ELSABRO: Debug
|
|
19
22
|
|
|
23
|
+
<state_sync>
|
|
24
|
+
## SINCRONIZACION DE ESTADO
|
|
25
|
+
|
|
26
|
+
**IMPORTAR**: Ver `/references/state-sync.md` para protocolo completo.
|
|
27
|
+
|
|
28
|
+
### Al Iniciar
|
|
29
|
+
- Leer `.elsabro/state.json`
|
|
30
|
+
- Verificar si hay flujo en progreso
|
|
31
|
+
- Actualizar `current_flow.command` con este comando
|
|
32
|
+
|
|
33
|
+
### Al Completar
|
|
34
|
+
- Registrar en `history`
|
|
35
|
+
- Actualizar `context` con informacion relevante
|
|
36
|
+
- Limpiar `current_flow`
|
|
37
|
+
</state_sync>
|
|
38
|
+
|
|
20
39
|
<objective>
|
|
21
40
|
Investigar y resolver bugs usando el método científico, no adivinando.
|
|
22
41
|
|
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: discuss-phase
|
|
3
|
-
description:
|
|
3
|
+
description: Discusion colaborativa sobre una fase - clarificar scope, identificar riesgos, refinar approach
|
|
4
|
+
sync:
|
|
5
|
+
reads: [".elsabro/state.json"]
|
|
6
|
+
writes: [".elsabro/state.json"]
|
|
4
7
|
---
|
|
5
8
|
|
|
6
9
|
# /elsabro:discuss-phase
|
|
7
10
|
|
|
11
|
+
<state_sync>
|
|
12
|
+
## SINCRONIZACION DE ESTADO
|
|
13
|
+
|
|
14
|
+
**IMPORTAR**: Ver `/references/state-sync.md` para protocolo completo.
|
|
15
|
+
|
|
16
|
+
### Al Iniciar
|
|
17
|
+
- Leer `.elsabro/state.json`
|
|
18
|
+
- Verificar contexto actual del milestone/phase
|
|
19
|
+
|
|
20
|
+
### Al Completar
|
|
21
|
+
- Registrar cambio en `history`
|
|
22
|
+
- Actualizar `context` si corresponde
|
|
23
|
+
</state_sync>
|
|
24
|
+
|
|
8
25
|
<command-name>discuss-phase</command-name>
|
|
9
26
|
|
|
10
27
|
## Propósito
|