sdd-es 2.0.0 → 2.6.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/.claude/settings.json +29 -29
- package/.claude/settings.local.json +10 -0
- package/.claude-plugin/marketplace.json +10 -7
- package/.claude-plugin/plugin.json +59 -37
- package/.gitignore +20 -0
- package/.mcp.json +8 -0
- package/LICENSE +21 -0
- package/README.md +77 -40
- package/agents/architecture-designer.md +211 -0
- package/agents/arquitecto.md +16 -1
- package/agents/asesor-datos.md +15 -1
- package/agents/critico.md +37 -1
- package/agents/desarrollador-backend.md +3 -1
- package/agents/desarrollador-frontend.md +11 -16
- package/agents/disenador-api.md +13 -1
- package/agents/documentador.md +3 -1
- package/agents/investigador.md +3 -1
- package/agents/operaciones.md +3 -1
- package/agents/product-designer.md +268 -0
- package/agents/revisor.md +25 -1
- package/agents/seguridad.md +5 -1
- package/agents/tester.md +3 -1
- package/claude-hooks/agent-memory.js +288 -0
- package/claude-hooks/pre-tool-guard.js +61 -9
- package/cli/index.js +1 -2
- package/commands/sdd.adr.md +196 -0
- package/commands/sdd.analizar.md +23 -2
- package/commands/sdd.ayuda.md +13 -0
- package/commands/sdd.compliance.md +521 -0
- package/commands/sdd.configurar.md +34 -1
- package/commands/sdd.constitucion.md +198 -23
- package/commands/sdd.construir.md +210 -0
- package/commands/sdd.crear-mcp.md +2 -0
- package/commands/sdd.defect-report.md +134 -0
- package/commands/sdd.descubrir.md +19 -0
- package/commands/sdd.dise/303/261ar.md +188 -0
- package/commands/sdd.estado.md +120 -3
- package/commands/sdd.exportar.md +344 -0
- package/commands/sdd.implementar.md +272 -52
- package/commands/sdd.interpretar.md +239 -0
- package/commands/sdd.md +93 -4
- package/commands/sdd.optimizar-memoria.md +47 -0
- package/commands/sdd.optimizar.md +164 -0
- package/commands/sdd.planificar.md +64 -0
- package/commands/sdd.retro.md +74 -0
- package/commands/sdd.verificar.md +81 -0
- package/configuracion-ejemplo/.claude/CLAUDE.md +106 -0
- package/configuracion-ejemplo/sdd.config.yaml +10 -0
- package/craft/accessibility-baseline.md +216 -0
- package/craft/anti-ai-slop.md +158 -0
- package/craft/color.md +160 -0
- package/craft/typography.md +121 -0
- package/design-systems/bold-brutalist/DESIGN.md +239 -0
- package/design-systems/editorial-minimal/DESIGN.md +205 -0
- package/design-systems/neutral-modern/DESIGN.md +227 -0
- package/design-systems/vibrant-consumer/DESIGN.md +257 -0
- package/design-systems/warm-editorial/DESIGN.md +221 -0
- package/docs/AGENTES.md +4 -1
- package/docs/CASO-COMPLETO.md +206 -0
- package/docs/EJEMPLOS.md +61 -185
- package/docs/FABRICA.md +163 -115
- package/docs/INICIO-RAPIDO.md +27 -79
- package/docs/MEMORIA-Y-OBSERVABILIDAD.md +239 -0
- package/docs/MODELOS.md +3 -0
- package/docs/QUE-PASA-SI-FALLA.md +404 -0
- package/docs/README.md +43 -0
- package/docs/RELACION-CON-CLAUDE-CODE.md +38 -0
- package/docs/SEGURIDAD-PARA-NOTECNICOS.md +280 -0
- package/package.json +15 -10
- package/plantillas/job-story-mejorar-prompt.md +107 -0
- package/presets/enterprise.yaml +6 -0
- package/presets/lean.yaml +4 -0
- package/presets/startup.yaml +6 -0
- package/skills/adr-indexer/SKILL.md +181 -0
- package/skills/cache-audit/SKILL.md +163 -0
- package/skills/critica-diseno/SKILL.md +193 -0
- package/skills/descubrir-idea/SKILL.md +133 -0
- package/skills/effort-router/SKILL.md +128 -0
- package/skills/elegir-direccion/SKILL.md +184 -0
- package/skills/github-connect/IMPLEMENTATION-CHECKLIST.md +297 -0
- package/skills/github-connect/INDEX.md +223 -0
- package/skills/github-connect/INTEGRATION.md +361 -0
- package/skills/github-connect/QUICK-START.md +168 -0
- package/skills/github-connect/README.md +414 -0
- package/skills/github-connect/RESUMEN_IMPLEMENTACION.txt +374 -0
- package/skills/github-connect/SKILL.md +343 -0
- package/skills/github-connect/STRUCTURE.txt +252 -0
- package/skills/github-connect/example-config.yaml +41 -0
- package/skills/github-connect/github-connect.sh +419 -0
- package/skills/interpretar-idea/SKILL.md +254 -0
- package/skills/mejorar-prompt/SKILL.md +237 -0
- package/skills/memory-compactor/SKILL.md +68 -0
- package/skills/modo-guiado/SKILL.md +12 -2
- package/skills/mutation-detector/SKILL.md +134 -0
- package/skills/observabilidad-consumo/SKILL.md +164 -0
- package/skills/token-budget/SKILL.md +177 -0
- package/skills/vercel-deploy/00-START-HERE.txt +364 -0
- package/skills/vercel-deploy/CHECKLIST.md +205 -0
- package/skills/vercel-deploy/EXEC-SUMMARY.txt +322 -0
- package/skills/vercel-deploy/FLOW.txt +334 -0
- package/skills/vercel-deploy/INDEX.md +276 -0
- package/skills/vercel-deploy/INTEGRATION.md +328 -0
- package/skills/vercel-deploy/MANIFEST.md +310 -0
- package/skills/vercel-deploy/README.md +65 -0
- package/skills/vercel-deploy/SKILL.md +356 -0
- package/skills/vercel-deploy/deploy.sh +298 -0
- package/skills/vercel-deploy/estado.json.example +205 -0
- package/skills/vercel-deploy/skill.yaml +323 -0
- package/skills/vercel-deploy/vercel-deploy.sh +216 -0
- package/skills/wireframe-mvp/SKILL.md +157 -0
- package/docs/EJEMPLO-PRACTICA.md +0 -383
- package/mcp-figma/README.md +0 -158
- package/mcp-figma/package.json +0 -7
- package/mcp-figma/src/component-generator.js +0 -162
- package/mcp-figma/src/design-system-analyzer.js +0 -247
- package/mcp-figma/src/figma-client.js +0 -75
- package/mcp-figma/src/index.js +0 -114
- package/mcp-figma/src/mcp.js +0 -97
- package/mcp-figma/src/style-mapper.js +0 -85
- /package/skills/{compresion-tokens.md → compresion-tokens/SKILL.md} +0 -0
- /package/skills/{constitucion-constraint.md → constitucion-constraint/SKILL.md} +0 -0
- /package/skills/{deteccion-stack.md → deteccion-stack/SKILL.md} +0 -0
- /package/skills/{enrutador-agentes.md → enrutador-agentes/SKILL.md} +0 -0
- /package/skills/{gestion-estado.md → gestion-estado/SKILL.md} +0 -0
- /package/skills/{indexador.md → indexador/SKILL.md} +0 -0
- /package/skills/{validacion-spec.md → validacion-spec/SKILL.md} +0 -0
- /package/skills/{verificador-implementacion.md → verificador-implementacion/SKILL.md} +0 -0
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Convierte una idea en texto libre a un IR (Interpreted Requirement) JSON validado. Trabaja en 2 fases - razonamiento libre + extracción JSON. Lee .sdd/descubrimiento.md si existe.
|
|
3
|
+
model: opus
|
|
4
|
+
allowed-tools: Read, Write
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Skill: Interpretar Idea → IR
|
|
8
|
+
|
|
9
|
+
## Propósito
|
|
10
|
+
|
|
11
|
+
Tomar la idea del usuario (más el contexto de discovery si existe) y convertirla en un **IR JSON válido** que alimente el pipeline FORGE. Sin que el usuario tenga que pensar en estructura, campos, o intención.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Contexto que debes leer primero
|
|
16
|
+
|
|
17
|
+
Antes de empezar, lee:
|
|
18
|
+
|
|
19
|
+
```bash
|
|
20
|
+
cat .sdd/descubrimiento.md 2>/dev/null || echo "SIN_DISCOVERY"
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Si existe `descubrimiento.md`, úsalo como contexto adicional para enriquecer el IR.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Flujo en 2 fases
|
|
28
|
+
|
|
29
|
+
### FASE A — Razonamiento libre (sin JSON)
|
|
30
|
+
|
|
31
|
+
Analiza la idea en prosa libre. **No generes JSON todavía.** Solo piensa:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Analizando: "[idea del usuario]"
|
|
35
|
+
Contexto de discovery: [resumen de descubrimiento.md si existe]
|
|
36
|
+
|
|
37
|
+
ANÁLISIS:
|
|
38
|
+
- Tipo de producto: [web app / mobile / api / cli / saas / other]
|
|
39
|
+
- Usuarios principales: [quién lo usa]
|
|
40
|
+
- Problema que resuelve: [qué dolor alivia]
|
|
41
|
+
- Features core (los más críticos para V1): [lista priorizada]
|
|
42
|
+
- Features secundarios (futuro): [lista]
|
|
43
|
+
- Restricciones evidentes: [técnicas, de negocio, de tiempo]
|
|
44
|
+
- Ambigüedades detectadas: [qué no está claro]
|
|
45
|
+
- Asunciones que haré: [cómo resuelvo las ambigüedades]
|
|
46
|
+
- Confianza estimada: [0.0–1.0] por qué
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Sé honesto con la confianza. Una idea vaga tiene confidence 0.5–0.65. Una idea clara tiene 0.8–0.9. Nunca 1.0.
|
|
50
|
+
|
|
51
|
+
### FASE B — Extracción a IR JSON
|
|
52
|
+
|
|
53
|
+
Solo después del análisis, extrae el IR JSON:
|
|
54
|
+
|
|
55
|
+
```json
|
|
56
|
+
{
|
|
57
|
+
"id": "ir-[slug-del-producto]-001",
|
|
58
|
+
"created_at": "[ISO timestamp]",
|
|
59
|
+
"raw_input": "[idea literal del usuario]",
|
|
60
|
+
"confidence": [0.0–1.0],
|
|
61
|
+
|
|
62
|
+
"product": {
|
|
63
|
+
"name": "[Nombre descriptivo del producto]",
|
|
64
|
+
"type": "[saas|mobile|web|api|cli|other]",
|
|
65
|
+
"tagline": "[Una línea que describe el valor en <10 palabras]",
|
|
66
|
+
"value_proposition": "[Por qué existe este producto, en 1 oración]",
|
|
67
|
+
"target_users": "[Quién lo usa, en lenguaje natural]"
|
|
68
|
+
},
|
|
69
|
+
|
|
70
|
+
"features": {
|
|
71
|
+
"core": [
|
|
72
|
+
"[Feature 1 — lo más esencial del MVP]",
|
|
73
|
+
"[Feature 2]",
|
|
74
|
+
"[Feature 3]",
|
|
75
|
+
"[Feature 4 si aplica]",
|
|
76
|
+
"[Feature 5 si aplica — máximo 5]"
|
|
77
|
+
],
|
|
78
|
+
"nice_to_have": [
|
|
79
|
+
"[Feature futuro 1]",
|
|
80
|
+
"[Feature futuro 2]"
|
|
81
|
+
]
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
"constraints": {
|
|
85
|
+
"budget": "[bajo|medio|alto|ilimitado|null]",
|
|
86
|
+
"timeline": "[ASAP|semanas|meses|flexible|null]",
|
|
87
|
+
"team_size": "[1 persona|equipo pequeño|equipo grande|null]",
|
|
88
|
+
"tech_preference": "[React|Python|Node|null — null si no mencionó]"
|
|
89
|
+
},
|
|
90
|
+
|
|
91
|
+
"assumptions": [
|
|
92
|
+
"[Asunción 1 — lo que decidiste sin que el usuario lo dijera]",
|
|
93
|
+
"[Asunción 2]"
|
|
94
|
+
],
|
|
95
|
+
|
|
96
|
+
"ambiguities": [
|
|
97
|
+
{
|
|
98
|
+
"field": "[campo afectado]",
|
|
99
|
+
"issue": "[qué no estaba claro]",
|
|
100
|
+
"resolution": "[cómo lo resolviste]"
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
|
|
104
|
+
"requires_clarification": [true|false],
|
|
105
|
+
"questions_for_user": [
|
|
106
|
+
"[Pregunta 1 si confidence < 0.7 — máximo 1 pregunta]"
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## Reglas de validación del IR
|
|
114
|
+
|
|
115
|
+
El IR es válido si:
|
|
116
|
+
|
|
117
|
+
- ✅ `product.type` es uno de: `saas`, `mobile`, `web`, `api`, `cli`, `other`
|
|
118
|
+
- ✅ `features.core` tiene **2–5 items** (no 0, no 6+)
|
|
119
|
+
- ✅ `confidence` está entre `0.0` y `1.0`
|
|
120
|
+
- ✅ `assumptions[]` es un array (puede estar vacío)
|
|
121
|
+
- ✅ `ambiguities[]` es un array (puede estar vacío)
|
|
122
|
+
- ✅ Si `confidence < 0.7` → `requires_clarification: true` y `questions_for_user` tiene **máximo 1 pregunta**
|
|
123
|
+
|
|
124
|
+
Si el IR no cumple alguna regla, corrígelo antes de guardarlo.
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## Cuándo preguntar vs. asumir
|
|
129
|
+
|
|
130
|
+
**Asumir siempre** cuando:
|
|
131
|
+
- El usuario no mencionó tecnología → asumir `tech_preference: null`
|
|
132
|
+
- El usuario no mencionó presupuesto → asumir `budget: null`
|
|
133
|
+
- Es obvio por el contexto (ej: "app de citas para peluquería" → `type: web`)
|
|
134
|
+
|
|
135
|
+
**Preguntar solo cuando**:
|
|
136
|
+
- `confidence < 0.7` (la idea es genuinamente ambigua)
|
|
137
|
+
- Y solo **1 pregunta**, la más crítica para desambiguar
|
|
138
|
+
|
|
139
|
+
**Ejemplos de preguntas válidas**:
|
|
140
|
+
- "¿Es para tú negocio personal o para múltiples negocios?"
|
|
141
|
+
- "¿Los usuarios pagan por el servicio o es gratuito?"
|
|
142
|
+
|
|
143
|
+
**Ejemplos de preguntas inválidas** (nunca hacer):
|
|
144
|
+
- "¿Qué tecnología prefieres?" (técnico, no relevante para el IR)
|
|
145
|
+
- "¿Cuántas funcionalidades quieres?" (abierto, sin respuesta útil)
|
|
146
|
+
- "¿Tienes algún prototipo?" (fuera de scope)
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
## Output final
|
|
151
|
+
|
|
152
|
+
### Si `confidence ≥ 0.7`:
|
|
153
|
+
|
|
154
|
+
1. Muestra el IR en formato legible:
|
|
155
|
+
|
|
156
|
+
```
|
|
157
|
+
═══════════════════════════════════════════
|
|
158
|
+
🎯 TU IDEA INTERPRETADA
|
|
159
|
+
═══════════════════════════════════════════
|
|
160
|
+
|
|
161
|
+
Producto: [product.name]
|
|
162
|
+
Tipo: [product.type en español: "aplicación web" / "app móvil" / etc.]
|
|
163
|
+
Para: [target_users]
|
|
164
|
+
|
|
165
|
+
Qué hace: [value_proposition]
|
|
166
|
+
|
|
167
|
+
Features del MVP:
|
|
168
|
+
✦ [core[0]]
|
|
169
|
+
✦ [core[1]]
|
|
170
|
+
✦ [core[2]]
|
|
171
|
+
[... hasta 5]
|
|
172
|
+
|
|
173
|
+
Para más adelante:
|
|
174
|
+
· [nice_to_have[0] si existe]
|
|
175
|
+
|
|
176
|
+
Confianza: [██████████░░] [confidence*100]%
|
|
177
|
+
|
|
178
|
+
Asunciones que hice:
|
|
179
|
+
→ [assumption[0]]
|
|
180
|
+
→ [assumption[1] si existe]
|
|
181
|
+
|
|
182
|
+
[Si hay ambiguities:]
|
|
183
|
+
Preguntas resueltas:
|
|
184
|
+
✓ [ambiguity[0].issue] → [ambiguity[0].resolution]
|
|
185
|
+
|
|
186
|
+
═══════════════════════════════════════════
|
|
187
|
+
¿Es esto lo que querías?
|
|
188
|
+
Escribe "sí" para continuar al diseño
|
|
189
|
+
Escribe "no, cambia [qué]" para corregir
|
|
190
|
+
═══════════════════════════════════════════
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
2. Guarda en `.sdd/ir.json` (solo tras confirmación del usuario)
|
|
194
|
+
3. Guarda el análisis de Fase A en `.sdd/ir-analysis.md`
|
|
195
|
+
|
|
196
|
+
### Si `confidence < 0.7`:
|
|
197
|
+
|
|
198
|
+
1. Muestra la pregunta de clarificación antes de continuar:
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
Antes de continuar, necesito una aclaración:
|
|
202
|
+
|
|
203
|
+
[questions_for_user[0]]
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
2. Espera la respuesta
|
|
207
|
+
3. Incorpora la respuesta al análisis
|
|
208
|
+
4. Re-genera el IR con la nueva información
|
|
209
|
+
5. Ahora confidence debería ser ≥ 0.7 → muestra el IR y pide confirmación
|
|
210
|
+
|
|
211
|
+
---
|
|
212
|
+
|
|
213
|
+
## Guardar archivos
|
|
214
|
+
|
|
215
|
+
### `.sdd/ir.json`
|
|
216
|
+
El IR JSON completo. Se guarda solo después de que el usuario confirme.
|
|
217
|
+
|
|
218
|
+
### `.sdd/ir-analysis.md`
|
|
219
|
+
El análisis de Fase A. Se guarda siempre (útil para auditoría).
|
|
220
|
+
|
|
221
|
+
```markdown
|
|
222
|
+
# IR Analysis — [product.name]
|
|
223
|
+
|
|
224
|
+
**Fecha**: [timestamp]
|
|
225
|
+
**Idea original**: [raw_input]
|
|
226
|
+
|
|
227
|
+
## Análisis libre (Fase A)
|
|
228
|
+
|
|
229
|
+
[Texto completo del análisis en prosa]
|
|
230
|
+
|
|
231
|
+
## IR generado (Fase B)
|
|
232
|
+
|
|
233
|
+
```json
|
|
234
|
+
[IR JSON completo]
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
## Validación
|
|
238
|
+
|
|
239
|
+
- confidence: [valor]
|
|
240
|
+
- requires_clarification: [true/false]
|
|
241
|
+
- errores de validación: [lista o "ninguno"]
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## Casos de prueba esperados
|
|
247
|
+
|
|
248
|
+
| Idea | Confidence esperado | requires_clarification |
|
|
249
|
+
|------|---------------------|----------------------|
|
|
250
|
+
| "App para dentistas que gestionen citas" | 0.82–0.88 | false |
|
|
251
|
+
| "Quiero algo para mis pedidos" | 0.55–0.65 | true |
|
|
252
|
+
| "Plataforma de e-commerce con pagos, inventario y envíos" | 0.80–0.88 | false |
|
|
253
|
+
| "No sé bien, algo para organizar cosas" | 0.40–0.55 | true |
|
|
254
|
+
| "API REST para un sistema de autenticación con JWT y refresh tokens" | 0.88–0.95 | false |
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Transforma un prompt vago en versión profesional siguiendo los 7 patrones
|
|
3
|
+
de Claude Code (Contexto · Tarea · Restricciones · Formato · Verificación). Detecta
|
|
4
|
+
si el prompt solicita algo fuera de la spec activa y advierte antes de continuar.
|
|
5
|
+
model: sonnet
|
|
6
|
+
allowed-tools: Read, Bash
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Skill: Mejorar Prompt
|
|
10
|
+
|
|
11
|
+
## Propósito
|
|
12
|
+
|
|
13
|
+
Un prompt vago produce resultados impredecibles. Claude Code toma decisiones discrecionales
|
|
14
|
+
sobre alcance, enfoque y dependencias cuando las instrucciones son ambiguas. Esta skill
|
|
15
|
+
cierra esa brecha: toma la intención del usuario y la convierte en un prompt profesional
|
|
16
|
+
con los componentes necesarios para obtener resultados predecibles y dentro de la spec activa.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## Lo que lees primero
|
|
21
|
+
|
|
22
|
+
Antes de reescribir el prompt, lee el estado del proyecto:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
# Fase y feature activa
|
|
26
|
+
cat .sdd/estado.json 2>/dev/null || echo "SIN_ESTADO"
|
|
27
|
+
|
|
28
|
+
# Spec activa (si existe estado)
|
|
29
|
+
SPEC_ID=$(cat .sdd/estado.json 2>/dev/null | grep -o '"spec_activa":"[^"]*"' | cut -d'"' -f4)
|
|
30
|
+
[ -n "$SPEC_ID" ] && cat ".sdd/especificaciones/${SPEC_ID}/spec.md" 2>/dev/null | head -40
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Si no existe `.sdd/estado.json`: continúa sin validación de scope. No inventes un estado.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Los 7 patrones
|
|
38
|
+
|
|
39
|
+
Identifica cuál de estos patrones aplica al prompt del usuario antes de reescribirlo:
|
|
40
|
+
|
|
41
|
+
| # | Patrón | Cuándo aplica |
|
|
42
|
+
|---|--------|---------------|
|
|
43
|
+
| 1 | **Implementar feature** | "añade X", "crea Y", "implementa Z" |
|
|
44
|
+
| 2 | **Depurar problema** | "no funciona", "hay un error", "falla cuando" |
|
|
45
|
+
| 3 | **Refactorizar** | "reorganiza", "limpia", "extrae", "mejora la estructura" |
|
|
46
|
+
| 4 | **Explorar proyecto** | "explícame", "cómo funciona", "qué hace", "analiza" |
|
|
47
|
+
| 5 | **Escribir tests** | "testea", "añade pruebas", "cobertura" |
|
|
48
|
+
| 6 | **Documentar** | "documenta", "escribe el README", "añade JSDoc" |
|
|
49
|
+
| 7 | **Pedir justificación** | "por qué hiciste", "qué alternativas", "justifica" |
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## Flujo de mejora
|
|
54
|
+
|
|
55
|
+
### PASO 1 — Clasifica el prompt
|
|
56
|
+
|
|
57
|
+
Lee el prompt del usuario. Identifica:
|
|
58
|
+
- El **patrón** de los 7 que mejor aplica
|
|
59
|
+
- La **intención concreta** (qué quiere lograr, no cómo lo dice)
|
|
60
|
+
- Las **entidades** mencionadas (qué módulos, archivos, funciones afecta)
|
|
61
|
+
|
|
62
|
+
### PASO 2 — Verifica el scope
|
|
63
|
+
|
|
64
|
+
Si existe `.sdd/estado.json`:
|
|
65
|
+
- Extrae la feature activa y la fase actual
|
|
66
|
+
- Compara con lo que el prompt pide
|
|
67
|
+
|
|
68
|
+
**Si el prompt está FUERA del scope:**
|
|
69
|
+
```
|
|
70
|
+
⚠️ Alerta de scope: "{lo que pide}" parece estar fuera de la spec activa ("{feature}").
|
|
71
|
+
|
|
72
|
+
Opciones antes de continuar:
|
|
73
|
+
1. Escribe /sdd.especificar para abrir una spec nueva
|
|
74
|
+
2. Confirma explícitamente que esto forma parte de la feature actual
|
|
75
|
+
|
|
76
|
+
No continuaré hasta recibir confirmación.
|
|
77
|
+
```
|
|
78
|
+
Detente aquí. No reescribas el prompt.
|
|
79
|
+
|
|
80
|
+
**Si el prompt está DENTRO del scope o no hay spec activa:** continúa al PASO 3.
|
|
81
|
+
|
|
82
|
+
### PASO 3 — Evalúa el prompt actual
|
|
83
|
+
|
|
84
|
+
Cuenta cuántos de los 5 componentes ya están presentes:
|
|
85
|
+
|
|
86
|
+
| Componente | ¿Presente? |
|
|
87
|
+
|---|---|
|
|
88
|
+
| Contexto (qué proyecto/stack/estado existe ya) | sí / no |
|
|
89
|
+
| Tarea (qué hay que hacer exactamente, acotado) | sí / no |
|
|
90
|
+
| Restricciones (qué no tocar, qué no instalar) | sí / no |
|
|
91
|
+
| Formato (cómo quiere el resultado) | sí / no |
|
|
92
|
+
| Verificación (cómo confirmar que funcionó) | sí / no |
|
|
93
|
+
|
|
94
|
+
Si el prompt tiene **≥ 4 componentes**: responde "Este prompt ya está bien estructurado
|
|
95
|
+
(X/5 componentes). Solo falta: [el que falta]." y detente.
|
|
96
|
+
|
|
97
|
+
### PASO 4 — Construye la versión profesional
|
|
98
|
+
|
|
99
|
+
Para los componentes faltantes, infiere el contenido a partir de:
|
|
100
|
+
- El estado del proyecto (`.sdd/estado.json`, `package.json`, estructura de carpetas)
|
|
101
|
+
- Las convenciones del proyecto (naming, testing framework, estructura de módulos)
|
|
102
|
+
- El patrón detectado en PASO 1
|
|
103
|
+
|
|
104
|
+
Aplica el esquema del patrón correspondiente:
|
|
105
|
+
|
|
106
|
+
**Patrón 1 — Implementar feature:**
|
|
107
|
+
```
|
|
108
|
+
Contexto: [proyecto, stack, qué existe ya relevante para esta feature]
|
|
109
|
+
|
|
110
|
+
Tarea: Implementa [feature] con estos requisitos:
|
|
111
|
+
- [requisito concreto 1]
|
|
112
|
+
- [requisito concreto 2]
|
|
113
|
+
|
|
114
|
+
Restricciones:
|
|
115
|
+
- [qué no cambiar]
|
|
116
|
+
- [dependencias que no instalar]
|
|
117
|
+
- [patrones del proyecto a respetar]
|
|
118
|
+
|
|
119
|
+
Verificación: [tests a crear y ejecutar, o comando para comprobar]
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
**Patrón 2 — Depurar problema:**
|
|
123
|
+
```
|
|
124
|
+
Contexto: [qué estaba haciendo cuando ocurrió]
|
|
125
|
+
|
|
126
|
+
Tarea: Tengo este error:
|
|
127
|
+
[pegar el error completo con stack trace]
|
|
128
|
+
Archivo: [archivo y línea si lo sabes]
|
|
129
|
+
|
|
130
|
+
Formato: Antes de corregir nada:
|
|
131
|
+
1. Identifica la causa raíz, no el síntoma
|
|
132
|
+
2. Explica por qué ocurre
|
|
133
|
+
3. Propón el fix y justifícalo
|
|
134
|
+
4. ¿Qué más podría verse afectado?
|
|
135
|
+
|
|
136
|
+
Verificación: Añade un test que reproduzca el bug antes del fix y pase después.
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
**Patrón 3 — Refactorizar:**
|
|
140
|
+
```
|
|
141
|
+
Contexto: [qué módulo y por qué refactorizarlo]
|
|
142
|
+
|
|
143
|
+
Tarea: Refactoriza [archivo/módulo] para [objetivo concreto].
|
|
144
|
+
|
|
145
|
+
Restricciones:
|
|
146
|
+
- La API pública NO debe cambiar
|
|
147
|
+
- Los tests existentes deben seguir pasando sin modificarlos
|
|
148
|
+
- Sigue el patrón [patrón del proyecto]
|
|
149
|
+
|
|
150
|
+
Formato: Antes de tocar código, muéstrame qué cambiarías y por qué.
|
|
151
|
+
|
|
152
|
+
Verificación: Ejecuta todos los tests sin cambiarlos. Si alguno falla, el refactoring rompió algo.
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Patrón 4 — Explorar proyecto:**
|
|
156
|
+
```
|
|
157
|
+
Tarea: Analiza [proyecto/módulo] y responde:
|
|
158
|
+
- [pregunta sobre estructura]
|
|
159
|
+
- [pregunta sobre patrones]
|
|
160
|
+
|
|
161
|
+
Formato: [resumen breve por pregunta + diagrama ASCII si aplica]
|
|
162
|
+
|
|
163
|
+
Restricciones: No modifiques nada. Solo lectura.
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**Patrón 5 — Escribir tests:**
|
|
167
|
+
```
|
|
168
|
+
Contexto: [qué módulo/servicio y qué hace]
|
|
169
|
+
|
|
170
|
+
Tarea: Genera tests para [archivo]. Para cada función pública:
|
|
171
|
+
- Un test del caso normal (happy path)
|
|
172
|
+
- Un test de caso edge [ejemplos]
|
|
173
|
+
- Un test de error [ejemplos]
|
|
174
|
+
|
|
175
|
+
Restricciones: [framework de testing del proyecto]
|
|
176
|
+
|
|
177
|
+
Verificación: Ejecuta los tests. Muéstrame la cobertura del archivo.
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
**Patrón 6 — Documentar:**
|
|
181
|
+
```
|
|
182
|
+
Contexto: [quién va a leer esta doc y para qué]
|
|
183
|
+
|
|
184
|
+
Tarea: Genera documentación para [archivo/módulo/API] incluyendo:
|
|
185
|
+
- [secciones necesarias]
|
|
186
|
+
|
|
187
|
+
Formato: [Markdown, JSDoc, README, etc.]
|
|
188
|
+
|
|
189
|
+
Verificación: Compara el resultado con el código real. Si falta algo, añádelo.
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
**Patrón 7 — Pedir justificación:**
|
|
193
|
+
```
|
|
194
|
+
Sobre [la implementación que acabas de hacer]:
|
|
195
|
+
1. ¿Qué alternativas consideraste y por qué elegiste esta?
|
|
196
|
+
2. ¿Qué trade-offs tiene tu decisión?
|
|
197
|
+
3. ¿Qué podría fallar con este enfoque?
|
|
198
|
+
4. ¿Qué harías diferente con más tiempo o a mayor escala?
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### PASO 5 — Presenta el resultado
|
|
202
|
+
|
|
203
|
+
Muestra la respuesta completa con esta estructura:
|
|
204
|
+
|
|
205
|
+
```
|
|
206
|
+
## Prompt original
|
|
207
|
+
[lo que escribió el usuario, sin cambios]
|
|
208
|
+
|
|
209
|
+
## Patrón detectado
|
|
210
|
+
[nombre del patrón] — [una frase de por qué aplica este patrón]
|
|
211
|
+
|
|
212
|
+
## Prompt profesional
|
|
213
|
+
|
|
214
|
+
[versión mejorada completa, lista para copiar y pegar]
|
|
215
|
+
|
|
216
|
+
## Por qué funciona
|
|
217
|
+
- **Contexto:** [qué se añadió y por qué]
|
|
218
|
+
- **Tarea:** [cómo se acotó y por qué]
|
|
219
|
+
- **Restricciones:** [qué se protegió y por qué]
|
|
220
|
+
- **Verificación:** [cómo cierra el ciclo]
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## Notas
|
|
226
|
+
|
|
227
|
+
**Prompt ya profesional:** Si el usuario envía un prompt con ≥4 componentes, confírmalo
|
|
228
|
+
y ofrece solo el componente que falta, sin reescribir lo demás.
|
|
229
|
+
|
|
230
|
+
**Prompt ambiguo:** Si la intención no está clara (ej. "arregla el código"), pregunta
|
|
231
|
+
una sola cosa antes de continuar: "¿Qué parte específica no funciona como esperabas?"
|
|
232
|
+
|
|
233
|
+
**Sin proyecto SDD:** Si no existe `.sdd/`, omite la validación de scope y el componente
|
|
234
|
+
de restricciones relacionado con la spec. Aún aplica los 4 componentes restantes.
|
|
235
|
+
|
|
236
|
+
**Cadena de patrones:** Cuando la tarea implica varias etapas, sugiere la cadena natural:
|
|
237
|
+
Explorar → Implementar → Tests → Justificar → Documentar. Un prompt por etapa.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: memory-compactor
|
|
3
|
+
model: claude-haiku-4-5
|
|
4
|
+
description: Comprime archivos de memoria de agentes cuando superan umbral (>50KB)
|
|
5
|
+
allowed-tools: Read, Write, Bash
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Skill: Memory Compactor
|
|
9
|
+
|
|
10
|
+
**Propósito:** Comprimir automáticamente archivos de memoria de agentes (`.sdd/memoria/agente-*.md`) cuando superan 50KB, eliminando entradas duplicadas y aplicando técnicas de reducción de contexto.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Cuándo Usar
|
|
15
|
+
|
|
16
|
+
1. **Automático:** Hook `agent-memory.js` la dispara cuando memoria > 50KB
|
|
17
|
+
2. **Manual:** Usuario ejecuta `/sdd.optimizar memoria` en proyectos largos
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## Qué Hace
|
|
22
|
+
|
|
23
|
+
### Deduplicación
|
|
24
|
+
Elimina entradas duplicadas del mismo archivo.
|
|
25
|
+
|
|
26
|
+
### Compresión por Caveman (Nivel Full)
|
|
27
|
+
Aplica diccionario de reemplazos: `CREATE TABLE` → `CT`, `SELECT * FROM` → `SF`, etc.
|
|
28
|
+
|
|
29
|
+
### Backup Automático
|
|
30
|
+
Crea `.original.md` antes de comprimir.
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## Output
|
|
35
|
+
|
|
36
|
+
**Antes:** `.sdd/memoria/agente-arquitecto.md = 150KB (80 entradas)`
|
|
37
|
+
|
|
38
|
+
**Después:** `.sdd/memoria/agente-arquitecto.md = 15KB (8 entradas únicas)`
|
|
39
|
+
|
|
40
|
+
Mensaje: `✨ [auto-compress] arquitecto: 150KB → 15KB (10%)`
|
|
41
|
+
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
## Detalles Técnicos
|
|
45
|
+
|
|
46
|
+
- Deduplicación por `## YYYY-MM-DD — filepath`
|
|
47
|
+
- Reutiliza diccionario de `skills/compresion-tokens/SKILL.md`
|
|
48
|
+
- Backup `.original.md` siempre
|
|
49
|
+
- Performance: <100ms
|
|
50
|
+
- Trigger automático >50KB en `agent-memory.js`
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## API (Internal)
|
|
55
|
+
|
|
56
|
+
```javascript
|
|
57
|
+
triggerAutoCompresion(cwd, agente, memoriaFile)
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Ejecuta compresión automáticamente cuando se excede umbral.
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Notas
|
|
65
|
+
|
|
66
|
+
- Idempotente (ejecutar 2 veces = mismo resultado)
|
|
67
|
+
- Nunca pierdes datos (backup existe siempre)
|
|
68
|
+
- No interrumpe flujos (solo stderr messages)
|
|
@@ -20,7 +20,7 @@ grep -q '"perfil": *"guiado"' .sdd/estado.json 2>/dev/null && echo GUIADO
|
|
|
20
20
|
grep -q '^perfil: *guiado' .sdd/sdd.config.yaml 2>/dev/null && echo GUIADO
|
|
21
21
|
```
|
|
22
22
|
|
|
23
|
-
## Reglas de comunicación (las
|
|
23
|
+
## Reglas de comunicación (las 8 reglas)
|
|
24
24
|
|
|
25
25
|
1. **Sin jerga.** Nunca digas "endpoint", "schema", "ORM", "deploy", "lint", "CI". Di "dirección donde vive el dato", "estructura de la información", "guardar en disco", "publicar en internet", "revisión automática de calidad". Si un término técnico es inevitable, defínelo en la misma frase con una analogía.
|
|
26
26
|
|
|
@@ -34,6 +34,15 @@ grep -q '^perfil: *guiado' .sdd/sdd.config.yaml 2>/dev/null && echo GUIADO
|
|
|
34
34
|
|
|
35
35
|
6. **Explica el resultado en términos de lo que el usuario puede hacer ahora.** Al terminar un paso: *"Ya puedes crear tareas y marcarlas como hechas. ¿Quieres que lo publiquemos en internet para usarlo desde el móvil?"* — no *"implementé el CRUD con 14 tests, cobertura 87%"*.
|
|
36
36
|
|
|
37
|
+
7. **Pausar y explicar cuando hay confusión.** Si el usuario dice "no entiendo", "explícame", o "no sé qué significa eso", **pausa inmediatamente** y explica con una analogía del mundo real ANTES de continuar. No hagas jerga. Ejemplo:
|
|
38
|
+
- Usuario: "¿Qué es una base de datos?"
|
|
39
|
+
- Tú (❌ MAL): "Es un SGBD relacional que persiste datos en forma normalizada."
|
|
40
|
+
- Tú (✅ BIEN): "Piensa en una base de datos como una hoja de cálculo (como Excel). Guarda toda la información de tu proyecto — usuarios, productos, mensajes, etc. El sistema la usa para encontrar información rápidamente cuando la necesita."
|
|
41
|
+
|
|
42
|
+
8. **Cierre explícito de cada fase.** Al final de cada FASE (especificar, planificar, implementar, verificar), explica exactamente qué puede hacer el usuario AHORA con lo que se construyó. Ejemplo:
|
|
43
|
+
- ❌ "Implementé el módulo de autenticación con JWT y bcrypt."
|
|
44
|
+
- ✅ "✅ Tu código está listo. Ahora puedes: (1) verlo en GitHub, (2) probarlo en internet, (3) cambiar algo si no te gusta, (4) invitar a otros a trabajar contigo."
|
|
45
|
+
|
|
37
46
|
## Cómo traducir los pasos del flujo
|
|
38
47
|
|
|
39
48
|
| Paso técnico interno | Cómo lo nombras al usuario |
|
|
@@ -72,7 +81,8 @@ Si una verificación falla, NO digas "el test X falló con assertion error". Di:
|
|
|
72
81
|
|
|
73
82
|
## Cierre de cada interacción
|
|
74
83
|
|
|
75
|
-
Termina siempre ofreciendo el siguiente paso como una acción en lenguaje natural, no como un comando:
|
|
84
|
+
Termina siempre ofreciendo el siguiente paso como una acción en lenguaje natural, no como un comando. Usa la Regla 8 para enumerar explícitamente qué puede hacer el usuario ahora:
|
|
76
85
|
|
|
77
86
|
> ✅ Ya está. Tu lista de tareas funciona.
|
|
87
|
+
> Ahora puedes: (1) usarla ahora mismo, (2) invitar a otros a colaborar, (3) cambiar cómo se ve.
|
|
78
88
|
> ¿Quieres que **la publique en internet** para usarla desde cualquier lado? (responde *sí*)
|