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.
Files changed (101) hide show
  1. package/.claude/settings.json +51 -0
  2. package/.claude-plugin/marketplace.json +31 -0
  3. package/.claude-plugin/plugin.json +97 -0
  4. package/README.md +332 -0
  5. package/agents/arquitecto.md +148 -0
  6. package/agents/asesor-datos.md +163 -0
  7. package/agents/critico.md +142 -0
  8. package/agents/desarrollador-backend.md +242 -0
  9. package/agents/desarrollador-frontend.md +120 -0
  10. package/agents/disenador-api.md +108 -0
  11. package/agents/documentador.md +177 -0
  12. package/agents/investigador.md +174 -0
  13. package/agents/operaciones.md +105 -0
  14. package/agents/revisor.md +153 -0
  15. package/agents/seguridad.md +216 -0
  16. package/agents/tester.md +286 -0
  17. package/claude-hooks/post-write-conventions.js +412 -0
  18. package/claude-hooks/pre-tool-guard.js +159 -0
  19. package/cli/index.js +401 -0
  20. package/commands/sdd.aclarar.md +200 -0
  21. package/commands/sdd.analizar.md +241 -0
  22. package/commands/sdd.ayuda.md +227 -0
  23. package/commands/sdd.canary.md +60 -0
  24. package/commands/sdd.checklist.md +174 -0
  25. package/commands/sdd.comprimir.md +166 -0
  26. package/commands/sdd.configurar.md +195 -0
  27. package/commands/sdd.constitucion.md +343 -0
  28. package/commands/sdd.crear-app.md +168 -0
  29. package/commands/sdd.crear-mcp.md +174 -0
  30. package/commands/sdd.descubrir.md +269 -0
  31. package/commands/sdd.desplegar.md +155 -0
  32. package/commands/sdd.especificar.md +302 -0
  33. package/commands/sdd.estado.md +124 -0
  34. package/commands/sdd.glosario.md +108 -0
  35. package/commands/sdd.implementar.md +377 -0
  36. package/commands/sdd.importar.md +91 -0
  37. package/commands/sdd.mapear.md +120 -0
  38. package/commands/sdd.md +119 -0
  39. package/commands/sdd.planificar.md +372 -0
  40. package/commands/sdd.qa.md +108 -0
  41. package/commands/sdd.release.md +253 -0
  42. package/commands/sdd.retro.md +82 -0
  43. package/commands/sdd.snapshot.md +122 -0
  44. package/commands/sdd.tareas.md +300 -0
  45. package/commands/sdd.verificar.md +239 -0
  46. package/configuracion-ejemplo/hooks-ejemplo/antes_cada_tarea.sh +18 -0
  47. package/configuracion-ejemplo/hooks-ejemplo/antes_implementar.sh +45 -0
  48. package/configuracion-ejemplo/hooks-ejemplo/despues_especificar.sh +14 -0
  49. package/configuracion-ejemplo/hooks-ejemplo/despues_implementar.sh +36 -0
  50. package/configuracion-ejemplo/hooks-ejemplo/despues_planificar.sh +19 -0
  51. package/configuracion-ejemplo/hooks-ejemplo/guardia-seguridad.sh +367 -0
  52. package/configuracion-ejemplo/sdd.config.yaml +310 -0
  53. package/docs/AGENTES.md +74 -0
  54. package/docs/COMPRESION.md +155 -0
  55. package/docs/EJEMPLO-PRACTICA.md +383 -0
  56. package/docs/EJEMPLOS.md +212 -0
  57. package/docs/FABRICA.md +185 -0
  58. package/docs/FILOSOFIA.md +61 -0
  59. package/docs/FLUJO.md +149 -0
  60. package/docs/INICIO-RAPIDO.md +116 -0
  61. package/docs/MAPAS.md +113 -0
  62. package/docs/MODELOS.md +103 -0
  63. package/docs/PERSONALIZACION.md +152 -0
  64. package/instalar.ps1 +39 -0
  65. package/instalar.sh +22 -0
  66. package/mcp-figma/README.md +158 -0
  67. package/mcp-figma/package.json +7 -0
  68. package/mcp-figma/src/component-generator.js +162 -0
  69. package/mcp-figma/src/design-system-analyzer.js +247 -0
  70. package/mcp-figma/src/figma-client.js +75 -0
  71. package/mcp-figma/src/index.js +114 -0
  72. package/mcp-figma/src/mcp.js +97 -0
  73. package/mcp-figma/src/style-mapper.js +85 -0
  74. package/package.json +50 -0
  75. package/plantillas/analisis.md +57 -0
  76. package/plantillas/checklist-especificacion.md +66 -0
  77. package/plantillas/constitucion.md +104 -0
  78. package/plantillas/decision-arquitectura.md +39 -0
  79. package/plantillas/dependencias-mapa.md +89 -0
  80. package/plantillas/especificacion.md +108 -0
  81. package/plantillas/estructura-mapa.md +40 -0
  82. package/plantillas/glosario.md +22 -0
  83. package/plantillas/index-especificaciones.md +15 -0
  84. package/plantillas/mcp-server.md +147 -0
  85. package/plantillas/plan.md +152 -0
  86. package/plantillas/simbolos-mapa.md +57 -0
  87. package/plantillas/snapshot.md +54 -0
  88. package/plantillas/tareas.md +72 -0
  89. package/presets/enterprise.yaml +69 -0
  90. package/presets/lean.yaml +63 -0
  91. package/presets/startup.yaml +67 -0
  92. package/skills/compresion-tokens.md +264 -0
  93. package/skills/constitucion-constraint.md +78 -0
  94. package/skills/deteccion-stack.md +175 -0
  95. package/skills/enrutador-agentes.md +69 -0
  96. package/skills/gestion-estado.md +114 -0
  97. package/skills/indexador.md +199 -0
  98. package/skills/modo-guiado/SKILL.md +78 -0
  99. package/skills/orquestacion-ptc/SKILL.md +96 -0
  100. package/skills/validacion-spec.md +52 -0
  101. 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"