sdd-es 2.0.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 +51 -0
- package/.claude-plugin/marketplace.json +31 -0
- package/.claude-plugin/plugin.json +97 -0
- package/README.md +332 -0
- package/agents/arquitecto.md +148 -0
- package/agents/asesor-datos.md +163 -0
- package/agents/critico.md +142 -0
- package/agents/desarrollador-backend.md +242 -0
- package/agents/desarrollador-frontend.md +120 -0
- package/agents/disenador-api.md +108 -0
- package/agents/documentador.md +177 -0
- package/agents/investigador.md +174 -0
- package/agents/operaciones.md +105 -0
- package/agents/revisor.md +153 -0
- package/agents/seguridad.md +216 -0
- package/agents/tester.md +286 -0
- package/claude-hooks/post-write-conventions.js +412 -0
- package/claude-hooks/pre-tool-guard.js +159 -0
- package/cli/index.js +401 -0
- package/commands/sdd.aclarar.md +200 -0
- package/commands/sdd.analizar.md +241 -0
- package/commands/sdd.ayuda.md +227 -0
- package/commands/sdd.canary.md +60 -0
- package/commands/sdd.checklist.md +174 -0
- package/commands/sdd.comprimir.md +166 -0
- package/commands/sdd.configurar.md +195 -0
- package/commands/sdd.constitucion.md +343 -0
- package/commands/sdd.crear-app.md +168 -0
- package/commands/sdd.crear-mcp.md +174 -0
- package/commands/sdd.descubrir.md +269 -0
- package/commands/sdd.desplegar.md +155 -0
- package/commands/sdd.especificar.md +302 -0
- package/commands/sdd.estado.md +124 -0
- package/commands/sdd.glosario.md +108 -0
- package/commands/sdd.implementar.md +377 -0
- package/commands/sdd.importar.md +91 -0
- package/commands/sdd.mapear.md +120 -0
- package/commands/sdd.md +119 -0
- package/commands/sdd.planificar.md +372 -0
- package/commands/sdd.qa.md +108 -0
- package/commands/sdd.release.md +253 -0
- package/commands/sdd.retro.md +82 -0
- package/commands/sdd.snapshot.md +122 -0
- package/commands/sdd.tareas.md +300 -0
- package/commands/sdd.verificar.md +239 -0
- package/configuracion-ejemplo/hooks-ejemplo/antes_cada_tarea.sh +18 -0
- package/configuracion-ejemplo/hooks-ejemplo/antes_implementar.sh +45 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_especificar.sh +14 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_implementar.sh +36 -0
- package/configuracion-ejemplo/hooks-ejemplo/despues_planificar.sh +19 -0
- package/configuracion-ejemplo/hooks-ejemplo/guardia-seguridad.sh +367 -0
- package/configuracion-ejemplo/sdd.config.yaml +310 -0
- package/docs/AGENTES.md +74 -0
- package/docs/COMPRESION.md +155 -0
- package/docs/EJEMPLO-PRACTICA.md +383 -0
- package/docs/EJEMPLOS.md +212 -0
- package/docs/FABRICA.md +185 -0
- package/docs/FILOSOFIA.md +61 -0
- package/docs/FLUJO.md +149 -0
- package/docs/INICIO-RAPIDO.md +116 -0
- package/docs/MAPAS.md +113 -0
- package/docs/MODELOS.md +103 -0
- package/docs/PERSONALIZACION.md +152 -0
- package/instalar.ps1 +39 -0
- package/instalar.sh +22 -0
- package/mcp-figma/README.md +158 -0
- package/mcp-figma/package.json +7 -0
- package/mcp-figma/src/component-generator.js +162 -0
- package/mcp-figma/src/design-system-analyzer.js +247 -0
- package/mcp-figma/src/figma-client.js +75 -0
- package/mcp-figma/src/index.js +114 -0
- package/mcp-figma/src/mcp.js +97 -0
- package/mcp-figma/src/style-mapper.js +85 -0
- package/package.json +50 -0
- package/plantillas/analisis.md +57 -0
- package/plantillas/checklist-especificacion.md +66 -0
- package/plantillas/constitucion.md +104 -0
- package/plantillas/decision-arquitectura.md +39 -0
- package/plantillas/dependencias-mapa.md +89 -0
- package/plantillas/especificacion.md +108 -0
- package/plantillas/estructura-mapa.md +40 -0
- package/plantillas/glosario.md +22 -0
- package/plantillas/index-especificaciones.md +15 -0
- package/plantillas/mcp-server.md +147 -0
- package/plantillas/plan.md +152 -0
- package/plantillas/simbolos-mapa.md +57 -0
- package/plantillas/snapshot.md +54 -0
- package/plantillas/tareas.md +72 -0
- package/presets/enterprise.yaml +69 -0
- package/presets/lean.yaml +63 -0
- package/presets/startup.yaml +67 -0
- package/skills/compresion-tokens.md +264 -0
- package/skills/constitucion-constraint.md +78 -0
- package/skills/deteccion-stack.md +175 -0
- package/skills/enrutador-agentes.md +69 -0
- package/skills/gestion-estado.md +114 -0
- package/skills/indexador.md +199 -0
- package/skills/modo-guiado/SKILL.md +78 -0
- package/skills/orquestacion-ptc/SKILL.md +96 -0
- package/skills/validacion-spec.md +52 -0
- package/skills/verificador-implementacion.md +71 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# ============================================================
|
|
2
|
+
# PRESET: startup
|
|
3
|
+
# Para: equipos pequeños (2-8 personas), velocidad + calidad
|
|
4
|
+
# básica, producto en crecimiento.
|
|
5
|
+
# Filosofía: calidad suficiente para escalar, sin burocracia.
|
|
6
|
+
# ============================================================
|
|
7
|
+
|
|
8
|
+
preset:
|
|
9
|
+
nombre: startup
|
|
10
|
+
descripcion: "Equipo pequeño. Velocidad con calidad básica para escalar."
|
|
11
|
+
casos_de_uso:
|
|
12
|
+
- "Startup en etapa seed o serie A"
|
|
13
|
+
- "Equipo de 2-8 desarrolladores"
|
|
14
|
+
- "Producto con usuarios reales pero sin compliance formal"
|
|
15
|
+
- "SaaS en crecimiento"
|
|
16
|
+
|
|
17
|
+
agentes:
|
|
18
|
+
arquitecto:
|
|
19
|
+
activo: true
|
|
20
|
+
modelo: opus # decisiones técnicas que escalarán — usar opus
|
|
21
|
+
disenador-api:
|
|
22
|
+
activo: true
|
|
23
|
+
modelo: sonnet
|
|
24
|
+
asesor-datos:
|
|
25
|
+
activo: true
|
|
26
|
+
modelo: opus # errores de BD en producción son caros
|
|
27
|
+
desarrollador-backend:
|
|
28
|
+
activo: true
|
|
29
|
+
modelo: sonnet
|
|
30
|
+
desarrollador-frontend:
|
|
31
|
+
activo: true
|
|
32
|
+
modelo: sonnet
|
|
33
|
+
operaciones:
|
|
34
|
+
activo: true
|
|
35
|
+
modelo: sonnet
|
|
36
|
+
tester:
|
|
37
|
+
activo: true
|
|
38
|
+
modelo: sonnet
|
|
39
|
+
revisor:
|
|
40
|
+
activo: true
|
|
41
|
+
modelo: sonnet # opus disponible para cambios críticos
|
|
42
|
+
critico:
|
|
43
|
+
activo: true
|
|
44
|
+
modelo: sonnet # análisis de riesgos en features importantes
|
|
45
|
+
seguridad:
|
|
46
|
+
activo: true
|
|
47
|
+
modelo: opus # no escatimes en seguridad — actívalo siempre
|
|
48
|
+
documentador:
|
|
49
|
+
activo: false # actívalo cuando tengas equipo que crece
|
|
50
|
+
investigador:
|
|
51
|
+
activo: true
|
|
52
|
+
modelo: sonnet
|
|
53
|
+
|
|
54
|
+
comportamiento:
|
|
55
|
+
deteccion_tamano_automatica: true
|
|
56
|
+
ruta_rapida_micro: true
|
|
57
|
+
numeracion_especificaciones: "fecha"
|
|
58
|
+
requerir_aprobacion_plan: true # el equipo revisa antes de implementar
|
|
59
|
+
requerir_aprobacion_tareas: false
|
|
60
|
+
flujo_minimo: false
|
|
61
|
+
|
|
62
|
+
calidad:
|
|
63
|
+
cobertura_tests_minima: 75
|
|
64
|
+
permitir_warnings_lint: false
|
|
65
|
+
permitir_codigo_comentado: false
|
|
66
|
+
longitud_funcion_maxima: 50
|
|
67
|
+
longitud_archivo_maxima: 400
|
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Define reglas de compresión tipo caveman adaptadas al español. Genera diccionario de reemplazos y valida que no toque código. Se invoca por /sdd.comprimir.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill: Compresión de Tokens
|
|
6
|
+
|
|
7
|
+
Aplica transformaciones seguras al español para reducir input tokens sin perder sustancia técnica.
|
|
8
|
+
|
|
9
|
+
## Diccionario de reemplazos (80+ pares)
|
|
10
|
+
|
|
11
|
+
### Artículos (quitar)
|
|
12
|
+
```
|
|
13
|
+
el → [quitar]
|
|
14
|
+
la → [quitar]
|
|
15
|
+
los → [quitar]
|
|
16
|
+
las → [quitar]
|
|
17
|
+
un → [quitar]
|
|
18
|
+
una → [quitar]
|
|
19
|
+
unos → [quitar]
|
|
20
|
+
unas → [quitar]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### Conectores (simplificar)
|
|
24
|
+
```
|
|
25
|
+
sin embargo → pero
|
|
26
|
+
por lo tanto → por eso
|
|
27
|
+
además → y
|
|
28
|
+
en conclusión → conclusión:
|
|
29
|
+
es importante notar que → nota:
|
|
30
|
+
cabe mencionar que → nota:
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Hedging (quitar si no es crítico)
|
|
34
|
+
```
|
|
35
|
+
creo que → [quitar]
|
|
36
|
+
podría ser que → [quitar]
|
|
37
|
+
tal vez → [quitar]
|
|
38
|
+
probablemente → [quitar]
|
|
39
|
+
parece que → [quitar]
|
|
40
|
+
podría → [quitar si es sugerencia débil]
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Frases de cortesía (quitar)
|
|
44
|
+
```
|
|
45
|
+
por favor → [quitar]
|
|
46
|
+
feliz de ayudar → [quitar]
|
|
47
|
+
claro que sí → [quitar]
|
|
48
|
+
sin problema → [quitar]
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Compresión de frases comunes
|
|
52
|
+
```
|
|
53
|
+
para que → para
|
|
54
|
+
es necesario que → debe
|
|
55
|
+
es importante que → debe
|
|
56
|
+
de acuerdo con → según
|
|
57
|
+
a partir de → desde
|
|
58
|
+
con el fin de → para
|
|
59
|
+
en el caso de que → si
|
|
60
|
+
a fin de cuentas → total
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Términos técnicos (abreviatura segura)
|
|
64
|
+
```
|
|
65
|
+
base de datos → BD
|
|
66
|
+
autenticación → auth
|
|
67
|
+
autorización → authz
|
|
68
|
+
usuario → user
|
|
69
|
+
contraseña → pwd
|
|
70
|
+
token → token (ya corto)
|
|
71
|
+
función → fn
|
|
72
|
+
variable → var
|
|
73
|
+
objeto → obj
|
|
74
|
+
arreglo → arr
|
|
75
|
+
lista → list
|
|
76
|
+
diccionario → dict
|
|
77
|
+
base de datos relacional → RDBMS
|
|
78
|
+
programación orientada a objetos → POO
|
|
79
|
+
interfaz de programación → API
|
|
80
|
+
máquina virtual → VM
|
|
81
|
+
computadora → PC
|
|
82
|
+
servidor → srv
|
|
83
|
+
cliente → cli
|
|
84
|
+
solicitud → req
|
|
85
|
+
respuesta → res
|
|
86
|
+
error → err
|
|
87
|
+
identificador → ID
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
## Patrones que NUNCA se comprimen
|
|
91
|
+
|
|
92
|
+
Estos patrones se detienen completamente:
|
|
93
|
+
|
|
94
|
+
```regex
|
|
95
|
+
# Seguridad
|
|
96
|
+
PELIGRO|DANGER|NO USAR EN PRODUCCIÓN
|
|
97
|
+
NO hacer|NUNCA hacer|CUIDADO
|
|
98
|
+
Security warning|Advertencia de seguridad
|
|
99
|
+
|
|
100
|
+
# Acciones irreversibles
|
|
101
|
+
ELIMINAR|BORRAR|DELETE|DROP|RESET|borrar permanently
|
|
102
|
+
Esto no se puede deshacer|This cannot be undone
|
|
103
|
+
|
|
104
|
+
# Código
|
|
105
|
+
```[a-z]+ (dentro de bloques de código)
|
|
106
|
+
^---$ (frontmatter YAML)
|
|
107
|
+
^\| .* \|$ (tablas)
|
|
108
|
+
^ [0-9]+\. (listas numeradas)
|
|
109
|
+
^https?:// (URLs)
|
|
110
|
+
^/[a-z] (comandos/paths)
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## Lógica de compresión
|
|
114
|
+
|
|
115
|
+
### Paso 1: Validar archivo
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# ¿Es código?
|
|
119
|
+
file archivo.ts | grep -q "ASCII text" # si no, SKIP
|
|
120
|
+
|
|
121
|
+
# ¿Tiene extensión prohibida?
|
|
122
|
+
[[ "archivo" =~ \.(py|js|ts|go|rs|java|cs|rb|php|json|yaml|yml|toml|env|lock)$ ]]
|
|
123
|
+
→ NUNCA comprimir código
|
|
124
|
+
|
|
125
|
+
# ¿Tiene bloques de código?
|
|
126
|
+
grep -q '^```' archivo.md
|
|
127
|
+
→ Comprime SOLO fuera de bloques ```...```
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
### Paso 2: Protección de patrones críticos
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# Líneas que mencionan peligro
|
|
134
|
+
grep -n "PELIGRO\|CUIDADO\|NO USAR" archivo.md
|
|
135
|
+
→ Marca esas líneas como "NO TOCAR"
|
|
136
|
+
|
|
137
|
+
# Bloques de código
|
|
138
|
+
sed -n '/^```/,/^```/p' archivo.md
|
|
139
|
+
→ Excluye de compresión
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### Paso 3: Aplicar reemplazos seguros
|
|
143
|
+
|
|
144
|
+
Para cada pareja (antes → después):
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# Buscar palabra completa, no parcial
|
|
148
|
+
sed -i 's/\bpara que\b/para/g' archivo.md
|
|
149
|
+
sed -i 's/\bsin embargo\b/pero/g' archivo.md
|
|
150
|
+
# ... (80+ reemplazos)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Paso 4: Backup
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
cp archivo.md archivo.md.original
|
|
157
|
+
# Edita archivo.md comprimido
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## Niveles de compresión
|
|
161
|
+
|
|
162
|
+
### Lite (baja agresividad)
|
|
163
|
+
- Quita solo: artículos + conectores obvios + cortesía
|
|
164
|
+
- Mantiene: hedging, estructura, conectores complejos
|
|
165
|
+
- Tokens ahorrados: ~20-30%
|
|
166
|
+
|
|
167
|
+
### Full (media, default)
|
|
168
|
+
- Quita: artículos + conectores + hedging simple + cortesía
|
|
169
|
+
- Mantiene: explicaciones técnicas, estructura
|
|
170
|
+
- Tokens ahorrados: ~40-50%
|
|
171
|
+
|
|
172
|
+
### Ultra (alta agresividad)
|
|
173
|
+
- Quita: TODO lo anterior + TAMBIÉN comprime términos técnicos
|
|
174
|
+
- Fragmentos OK
|
|
175
|
+
- Abreviaciones agresivas
|
|
176
|
+
- Tokens ahorrados: ~60-75%
|
|
177
|
+
- ⚠️ Riesgo: puede quedar ilegible para humanos que lean el `.original.md`
|
|
178
|
+
|
|
179
|
+
## Validación pre-guardar
|
|
180
|
+
|
|
181
|
+
Antes de sobrescribir archivo:
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Cuenta tokens aproximados
|
|
185
|
+
wc -w archivo.md.original # palabras
|
|
186
|
+
wc -w archivo.md.comprimido
|
|
187
|
+
# Ratio: palabras_nuevas / palabras_viejas
|
|
188
|
+
|
|
189
|
+
if (( ratio > 0.80 )); then
|
|
190
|
+
echo "⚠️ Compresión baja (solo 20% ahorro). ¿Continuar?"
|
|
191
|
+
fi
|
|
192
|
+
|
|
193
|
+
if (( ratio < 0.30 )); then
|
|
194
|
+
echo "⚠️ Compresión agresiva (70% ahorro). Revisar legibilidad antes de comitear."
|
|
195
|
+
fi
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
## Ejemplo paso a paso
|
|
199
|
+
|
|
200
|
+
**Archivo original** (358 palabras):
|
|
201
|
+
|
|
202
|
+
```markdown
|
|
203
|
+
# Tareas pendientes para el proyecto
|
|
204
|
+
|
|
205
|
+
Estas son las tareas que debemos completar en el proyecto actual.
|
|
206
|
+
Es absolutamente necesario que se realicen en el orden de prioridad
|
|
207
|
+
que se especifica a continuación.
|
|
208
|
+
|
|
209
|
+
Además, es importante que tengas en cuenta lo siguiente:
|
|
210
|
+
|
|
211
|
+
- La tarea de autenticación requiere que el usuario sea validado
|
|
212
|
+
en la base de datos antes de que se genere un token JWT.
|
|
213
|
+
Sin embargo, esto puede hacerse de forma asincrónica.
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
**Con compresión Full** (148 palabras, 59% ahorro):
|
|
217
|
+
|
|
218
|
+
```markdown
|
|
219
|
+
# Tareas pendientes
|
|
220
|
+
|
|
221
|
+
Tareas a completar. Orden por prioridad.
|
|
222
|
+
|
|
223
|
+
Importante:
|
|
224
|
+
|
|
225
|
+
- Auth: validar usuario BD → generar JWT. (Puede ser asincrónico)
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Seguridad: auto-claridad
|
|
229
|
+
|
|
230
|
+
Si el archivo tiene:
|
|
231
|
+
- `PELIGRO` o `CUIDADO` → NO comprimir esa línea
|
|
232
|
+
- `DELETE` o `BORRAR` → NO comprimir ese párrafo
|
|
233
|
+
- Instrucciones multi-paso ambiguas → NO comprimir
|
|
234
|
+
|
|
235
|
+
Ejemplo:
|
|
236
|
+
|
|
237
|
+
```markdown
|
|
238
|
+
# ⚠️ PELIGRO: Esta operación no se puede deshacer
|
|
239
|
+
# [Esta línea NO se comprime]
|
|
240
|
+
|
|
241
|
+
Para eliminar la base de datos:
|
|
242
|
+
1. Ejecuta el comando X
|
|
243
|
+
2. Confirma escribiendo "SÍ" en mayúscula
|
|
244
|
+
3. La BD se borrará PERMANENTEMENTE
|
|
245
|
+
|
|
246
|
+
# [Estas líneas NO se comprimen — son pasos críticos]
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Limitaciones
|
|
250
|
+
|
|
251
|
+
- ❌ No entiende contexto profundo (un "talvez" crítico podría comprimirse erróneamente)
|
|
252
|
+
- ⚠️ Manual review recomendado para documentos importantes
|
|
253
|
+
- ⚠️ Algunos reemplazos pueden alterar tono (formal → casual)
|
|
254
|
+
|
|
255
|
+
## Output
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
/sdd.comprimir aplicar archivo.md full
|
|
259
|
+
|
|
260
|
+
# Resultado:
|
|
261
|
+
archivo.md ← comprimido
|
|
262
|
+
archivo.md.original ← backup automático
|
|
263
|
+
.sdd/.comprimir.log ← registro: antes/después, ratio, patrones preservados
|
|
264
|
+
```
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Verifica que cualquier artefacto generado (spec, plan, código) cumple los principios de la constitución activa. Actúa como constraint explícito, no como sugerencia. Úsalo antes de entregar cualquier salida relevante.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill: Constitución como Constraint
|
|
6
|
+
|
|
7
|
+
## Propósito
|
|
8
|
+
|
|
9
|
+
Los agentes deben actuar **desde la constitución**, no como sugerencia de fondo sino como restricción dura. Este skill provee el mecanismo de verificación explícita: carga solo las restricciones relevantes para la tarea en curso y verifica el artefacto generado contra ellas antes de entregarlo.
|
|
10
|
+
|
|
11
|
+
## Cuándo usar este skill
|
|
12
|
+
|
|
13
|
+
- Antes de presentar un plan técnico al usuario
|
|
14
|
+
- Antes de marcar una tarea de implementación como completada
|
|
15
|
+
- Cuando un agente está a punto de tomar una decisión arquitectónica
|
|
16
|
+
- Siempre que el orquestador detecte: cambio de stack, nueva dependencia, modificación de patrones arquitectónicos, desviación de estándares
|
|
17
|
+
|
|
18
|
+
## Carga eficiente de restricciones (por capa)
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
# PASO 1 — Extraer solo las restricciones aplicables (~100-200 tokens)
|
|
22
|
+
# No cargar la constitución completa — extraer lo relevante al tipo de artefacto
|
|
23
|
+
|
|
24
|
+
# Para decisiones de stack/arquitectura:
|
|
25
|
+
cat .sdd/memoria/constitucion.md 2>/dev/null | grep -A3 -i "stack\|framework\|arquitectura\|prohibido\|DEBE\|NO DEBE\|NUNCA"
|
|
26
|
+
|
|
27
|
+
# Para código/implementación:
|
|
28
|
+
cat .sdd/memoria/constitucion.md 2>/dev/null | grep -A3 -i "calidad\|cobertura\|lint\|funcion\|longitud\|patron\|test"
|
|
29
|
+
|
|
30
|
+
# Para seguridad:
|
|
31
|
+
cat .sdd/memoria/constitucion.md 2>/dev/null | grep -A3 -i "seguridad\|auth\|pii\|secreto\|token\|gdpr"
|
|
32
|
+
|
|
33
|
+
# Para estilo de API:
|
|
34
|
+
cat .sdd/memoria/constitucion.md 2>/dev/null | grep -A3 -i "api\|endpoint\|rest\|graphql\|contrato\|version"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## Verificación del artefacto
|
|
38
|
+
|
|
39
|
+
Para cada principio de la constitución que aplique al artefacto generado, evalúa:
|
|
40
|
+
|
|
41
|
+
| Principio | Cumple | Evidencia | Acción requerida |
|
|
42
|
+
|-----------|--------|-----------|------------------|
|
|
43
|
+
| [Principio extraído] | ✅/❌/⚠️ | [línea/sección del artefacto] | — / [qué corregir] |
|
|
44
|
+
|
|
45
|
+
## Reglas de bloqueo
|
|
46
|
+
|
|
47
|
+
**Bloquea** (el artefacto NO se entrega hasta corregir):
|
|
48
|
+
- ❌ Cualquier principio marcado como `DEBE` o `NUNCA` en la constitución
|
|
49
|
+
- ❌ Uso de stack, framework o librería prohibidos explícitamente
|
|
50
|
+
- ❌ Código que viola restricciones de seguridad declaradas
|
|
51
|
+
|
|
52
|
+
**Advierte** (el artefacto se entrega con advertencia visible):
|
|
53
|
+
- ⚠️ Principio `DEBERÍA` no cumplido con justificación técnica
|
|
54
|
+
- ⚠️ Desviación documentada en sección "Complejidad Justificada"
|
|
55
|
+
|
|
56
|
+
**Permite**:
|
|
57
|
+
- ✅ Principios cumplidos
|
|
58
|
+
- ✅ Desviaciones explícitamente aprobadas por el usuario en este ciclo
|
|
59
|
+
|
|
60
|
+
## Formato de reporte del constraint check
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
── Constitutional AI Check ─────────────────────────────
|
|
64
|
+
✅ Stack: [stack] — alineado con constitución
|
|
65
|
+
✅ Patrones: sigue [patrón] definido en constitución
|
|
66
|
+
⚠️ Longitud función: 3 funciones superan límite de [N] líneas
|
|
67
|
+
→ Documentado en "Complejidad Justificada": [razón]
|
|
68
|
+
❌ Dependencia nueva: [paquete] no está aprobada en constitución
|
|
69
|
+
→ Requiere aprobación explícita antes de continuar
|
|
70
|
+
─────────────────────────────────────────────────────────
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
## Lo que este skill NO hace
|
|
74
|
+
|
|
75
|
+
- ❌ Cargar la constitución completa en cada check (ineficiente)
|
|
76
|
+
- ❌ Bloquear por principios que no aplican al tipo de artefacto
|
|
77
|
+
- ❌ Reemplazar el juicio del agente — provee datos, el agente decide
|
|
78
|
+
- ❌ Rechazar desviaciones ya documentadas y aprobadas
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Detecta automáticamente el stack del proyecto (lenguaje, framework, BD, tests, build) analizando archivos de configuración. Se invoca internamente por /sdd.constitucion y otros comandos.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill: Detección de Stack
|
|
6
|
+
|
|
7
|
+
Detecta el stack sin preguntar al usuario lo que se puede inferir.
|
|
8
|
+
|
|
9
|
+
## Proceso
|
|
10
|
+
|
|
11
|
+
### 1. Lenguaje principal
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Archivos de manifest
|
|
15
|
+
ls package.json pyproject.toml setup.py Cargo.toml go.mod \
|
|
16
|
+
pom.xml build.gradle build.gradle.kts composer.json \
|
|
17
|
+
mix.exs Gemfile *.csproj *.fsproj *.gemspec \
|
|
18
|
+
pubspec.yaml deno.json bun.lockb 2>/dev/null
|
|
19
|
+
|
|
20
|
+
# Frecuencia por extensión
|
|
21
|
+
find . -type f -not -path '*/.git/*' -not -path '*/node_modules/*' \
|
|
22
|
+
-not -path '*/target/*' -not -path '*/__pycache__/*' -not -path '*/.sdd/*' \
|
|
23
|
+
-not -path '*/dist/*' -not -path '*/build/*' \
|
|
24
|
+
| sed 's/.*\.//' | sort | uniq -c | sort -rn | head -10
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 2. Framework
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
# JS/TS
|
|
31
|
+
[ -f package.json ] && grep -oE '"(react|vue|angular|svelte|next|nuxt|express|fastify|nestjs|hono|koa|remix|astro|solid)":' package.json
|
|
32
|
+
|
|
33
|
+
# Python
|
|
34
|
+
[ -f pyproject.toml ] && grep -iE 'django|flask|fastapi|starlette|tornado|sanic' pyproject.toml
|
|
35
|
+
[ -f requirements.txt ] && grep -iE 'django|flask|fastapi|starlette' requirements.txt
|
|
36
|
+
|
|
37
|
+
# Rust
|
|
38
|
+
[ -f Cargo.toml ] && grep -iE 'axum|actix|rocket|warp|tide|tower' Cargo.toml
|
|
39
|
+
|
|
40
|
+
# Go
|
|
41
|
+
[ -f go.mod ] && grep -iE 'gin-gonic|echo|fiber|chi|gorilla' go.mod
|
|
42
|
+
|
|
43
|
+
# Java/Kotlin
|
|
44
|
+
[ -f pom.xml ] && grep -iE 'spring-boot|quarkus|micronaut' pom.xml
|
|
45
|
+
[ -f build.gradle* ] && grep -iE 'spring-boot|quarkus|ktor' build.gradle*
|
|
46
|
+
|
|
47
|
+
# .NET
|
|
48
|
+
ls *.csproj 2>/dev/null | head -3
|
|
49
|
+
grep -l 'Microsoft.AspNetCore' *.csproj 2>/dev/null
|
|
50
|
+
|
|
51
|
+
# Ruby
|
|
52
|
+
[ -f Gemfile ] && grep -iE 'rails|sinatra|hanami|roda' Gemfile
|
|
53
|
+
|
|
54
|
+
# PHP
|
|
55
|
+
[ -f composer.json ] && grep -iE 'laravel|symfony|slim|phalcon' composer.json
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 3. Base de datos / Almacenamiento
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# ORM/Driver
|
|
62
|
+
cat package.json pyproject.toml Cargo.toml go.mod composer.json Gemfile 2>/dev/null | \
|
|
63
|
+
grep -iE 'postgres|psycopg|mysql|sqlite|mongodb|redis|prisma|drizzle|sequelize|typeorm|sqlalchemy|django.db|diesel|sqlx|gorm|sqlc|activerecord|hibernate|ef|entityframework|doctrine|eloquent'
|
|
64
|
+
|
|
65
|
+
# Docker
|
|
66
|
+
[ -f docker-compose.yml ] && grep -iE 'image: (postgres|mysql|mongo|redis|elasticsearch|cassandra|clickhouse)' docker-compose.yml
|
|
67
|
+
|
|
68
|
+
# Schema files
|
|
69
|
+
ls schema.sql migrations/ db/ prisma/ alembic/ 2>/dev/null
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### 4. Testing
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
[ -f package.json ] && grep -oE '"(jest|vitest|mocha|jasmine|playwright|cypress)":' package.json
|
|
76
|
+
[ -f pyproject.toml ] && grep -iE 'pytest|unittest' pyproject.toml
|
|
77
|
+
[ -f Cargo.toml ] && grep -iE 'criterion|proptest' Cargo.toml
|
|
78
|
+
ls pytest.ini setup.cfg phpunit.xml karma.conf* 2>/dev/null
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 5. Linting/Formato
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
ls .eslintrc* biome.json prettier.config* .prettierrc* \
|
|
85
|
+
ruff.toml .ruff.toml mypy.ini .mypy.ini pyright.json \
|
|
86
|
+
.rubocop.yml rubocop.yml \
|
|
87
|
+
clippy.toml rustfmt.toml \
|
|
88
|
+
.editorconfig \
|
|
89
|
+
golangci.yml golangci-lint.yml \
|
|
90
|
+
2>/dev/null
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### 6. Build/Bundler
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
ls webpack.config* vite.config* rollup.config* tsconfig.json \
|
|
97
|
+
esbuild.config* turbo.json nx.json lerna.json pnpm-workspace.yaml \
|
|
98
|
+
Cargo.lock pdm.lock poetry.lock uv.lock 2>/dev/null
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
### 7. CI/CD
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
ls .github/workflows/ .gitlab-ci.yml .circleci/ Jenkinsfile \
|
|
105
|
+
.buildkite/ bitbucket-pipelines.yml azure-pipelines.yml \
|
|
106
|
+
2>/dev/null
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 8. Plataforma de despliegue (deploy)
|
|
110
|
+
|
|
111
|
+
Detecta a dónde se publica el proyecto. Lo usa `/sdd.desplegar`.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Manifiestos de plataforma (señal fuerte)
|
|
115
|
+
ls vercel.json .vercel/ 2>/dev/null && echo "PLATAFORMA: Vercel"
|
|
116
|
+
ls netlify.toml 2>/dev/null && echo "PLATAFORMA: Netlify"
|
|
117
|
+
ls railway.json railway.toml 2>/dev/null && echo "PLATAFORMA: Railway"
|
|
118
|
+
ls fly.toml 2>/dev/null && echo "PLATAFORMA: Fly.io"
|
|
119
|
+
ls render.yaml 2>/dev/null && echo "PLATAFORMA: Render"
|
|
120
|
+
ls app.yaml 2>/dev/null && echo "PLATAFORMA: Google App Engine"
|
|
121
|
+
ls Procfile 2>/dev/null && echo "PLATAFORMA: Heroku/Procfile"
|
|
122
|
+
|
|
123
|
+
# Contenedores (señal media — destino genérico)
|
|
124
|
+
ls Dockerfile docker-compose.yml compose.yaml 2>/dev/null && echo "CONTENEDOR: Docker"
|
|
125
|
+
ls k8s/ kubernetes/ *.k8s.yaml chart/ 2>/dev/null && echo "ORQUESTADOR: Kubernetes"
|
|
126
|
+
|
|
127
|
+
# Infra como código
|
|
128
|
+
ls *.tf terraform/ 2>/dev/null && echo "IAC: Terraform"
|
|
129
|
+
ls serverless.yml serverless.yaml 2>/dev/null && echo "IAC: Serverless Framework"
|
|
130
|
+
|
|
131
|
+
# CLI de plataforma disponible en PATH (qué se puede ejecutar)
|
|
132
|
+
for cli in vercel netlify railway flyctl gcloud aws heroku; do
|
|
133
|
+
command -v "$cli" >/dev/null 2>&1 && echo "CLI_DISPONIBLE: $cli"
|
|
134
|
+
done
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Si **no hay ninguna señal**, la plataforma queda como `"por definir"`: en ese caso `/sdd.desplegar` debe preguntar (o, en perfil guiado, recomendar la más simple según el stack — p. ej. Vercel para web Node, contenedor Docker para API).
|
|
138
|
+
|
|
139
|
+
## Output
|
|
140
|
+
|
|
141
|
+
Devuelve objeto estructurado:
|
|
142
|
+
|
|
143
|
+
```json
|
|
144
|
+
{
|
|
145
|
+
"lenguaje": "TypeScript",
|
|
146
|
+
"runtime": "Node.js",
|
|
147
|
+
"framework": "Next.js 14",
|
|
148
|
+
"base_datos": "PostgreSQL (via Prisma)",
|
|
149
|
+
"testing": "Vitest + Playwright",
|
|
150
|
+
"linting": "ESLint + Prettier",
|
|
151
|
+
"build": "Turbopack",
|
|
152
|
+
"ci": "GitHub Actions",
|
|
153
|
+
"plataforma_deploy": "Vercel",
|
|
154
|
+
"deploy_cli_disponible": "vercel",
|
|
155
|
+
"confianza": "alta",
|
|
156
|
+
"señales_detectadas": [
|
|
157
|
+
"package.json con next: 14.x",
|
|
158
|
+
"prisma/schema.prisma con provider postgres",
|
|
159
|
+
"vitest.config.ts presente",
|
|
160
|
+
".github/workflows/ci.yml presente",
|
|
161
|
+
"vercel.json presente + CLI 'vercel' en PATH"
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
## Cuándo SÍ preguntar al usuario
|
|
167
|
+
|
|
168
|
+
- Confianza baja en aspectos críticos (lenguaje, BD)
|
|
169
|
+
- Múltiples lenguajes con similar peso (monorepo poliglota)
|
|
170
|
+
- Frameworks que coexisten sin uno dominante
|
|
171
|
+
|
|
172
|
+
## Cuándo NO preguntar
|
|
173
|
+
|
|
174
|
+
- Si los archivos manifest son claros
|
|
175
|
+
- Si la decisión es deducible sin riesgo
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Decide qué agente especializado activar para cada tarea según su tipo, fase y la configuración del proyecto.
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Skill: Enrutador de Agentes
|
|
6
|
+
|
|
7
|
+
Decide a qué agente delegar cada tarea, leyendo la config y las características de la tarea.
|
|
8
|
+
|
|
9
|
+
## Tabla de enrutamiento por defecto
|
|
10
|
+
|
|
11
|
+
| Tipo / Fase de tarea | Agente principal | Agente secundario |
|
|
12
|
+
|----------------------|------------------|-------------------|
|
|
13
|
+
| Migración de BD | asesor-datos | — |
|
|
14
|
+
| Tipos / interfaces / contratos | arquitecto | disenador-api |
|
|
15
|
+
| Schemas de API (OpenAPI/GraphQL/proto) | disenador-api | arquitecto |
|
|
16
|
+
| Repositorios / acceso a datos | desarrollador-backend | asesor-datos |
|
|
17
|
+
| Servicios / casos de uso | desarrollador-backend | — |
|
|
18
|
+
| Controladores / handlers / endpoints | desarrollador-backend | disenador-api |
|
|
19
|
+
| Validaciones de input | desarrollador-backend | seguridad |
|
|
20
|
+
| Componentes UI | desarrollador-frontend | — |
|
|
21
|
+
| Estado del cliente | desarrollador-frontend | — |
|
|
22
|
+
| Estilos / accesibilidad | desarrollador-frontend | — |
|
|
23
|
+
| Tests unitarios | tester | el agente que escribió la lógica |
|
|
24
|
+
| Tests de integración | tester | — |
|
|
25
|
+
| Tests E2E | tester | — |
|
|
26
|
+
| CI/CD pipelines | operaciones | — |
|
|
27
|
+
| Dockerfiles / IaC | operaciones | — |
|
|
28
|
+
| Configuración de entorno | operaciones | seguridad |
|
|
29
|
+
| Documentación | documentador | — |
|
|
30
|
+
| Revisión cruzada final | revisor | — |
|
|
31
|
+
| Auditoría de seguridad | seguridad | — |
|
|
32
|
+
|
|
33
|
+
## Reglas de fallback
|
|
34
|
+
|
|
35
|
+
1. Si el agente principal está **desactivado** en config:
|
|
36
|
+
- Usa el secundario si existe
|
|
37
|
+
- Si no, advierte al usuario:
|
|
38
|
+
> ⚠️ Esta tarea requiere `[agente]` pero está desactivado.
|
|
39
|
+
> Opciones: a) activarlo solo para esta tarea, b) elegir alternativa, c) saltar tarea
|
|
40
|
+
|
|
41
|
+
2. Si la tarea toca **área sensible** (auth, datos personales, pagos), añade automáticamente `seguridad` como revisor secundario.
|
|
42
|
+
|
|
43
|
+
3. Si la tarea es **crítica** (BD producción, breaking change, infraestructura), añade `revisor` como revisor secundario.
|
|
44
|
+
|
|
45
|
+
## Detección de área sensible
|
|
46
|
+
|
|
47
|
+
```python
|
|
48
|
+
PALABRAS_SENSIBLES = [
|
|
49
|
+
'auth', 'autentic', 'autoriz', 'login', 'session', 'sesion',
|
|
50
|
+
'password', 'contraseña', 'token', 'jwt', 'oauth',
|
|
51
|
+
'pago', 'payment', 'card', 'tarjeta', 'stripe', 'billing',
|
|
52
|
+
'pii', 'gdpr', 'lopd', 'personal data',
|
|
53
|
+
'admin', 'permission', 'permiso', 'role', 'rol',
|
|
54
|
+
'upload', 'download', 'file', 'archivo',
|
|
55
|
+
'crypto', 'cifrar', 'encrypt', 'hash',
|
|
56
|
+
'api key', 'secret', 'credential'
|
|
57
|
+
]
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Si la descripción de la tarea contiene alguna → área sensible.
|
|
61
|
+
|
|
62
|
+
## Modelo recomendado por agente
|
|
63
|
+
|
|
64
|
+
Lee de `.sdd/sdd.config.yaml` la sección `agentes.[nombre].modelo`. Esta skill respeta esa elección.
|
|
65
|
+
|
|
66
|
+
Si el modelo configurado parece inadecuado:
|
|
67
|
+
- `arquitecto` con `haiku` → advertir: "modelo demasiado pequeño para decisiones de arquitectura"
|
|
68
|
+
- `seguridad` con `haiku` o `sonnet` → advertir: "auditoría de seguridad recomienda opus"
|
|
69
|
+
- `tester` con `opus` → advertir: "modelo más grande de lo necesario, considera sonnet"
|