@saulwade/swl-ses 2.2.4 → 2.3.1
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.md +48 -7
- package/README.md +3 -3
- package/agentes/accesibilidad-wcag-swl.md +690 -690
- package/agentes/arquitecto-swl.md +267 -267
- package/agentes/auto-evolucion-swl.md +908 -908
- package/agentes/backend-api-swl.md +472 -472
- package/agentes/backend-csharp-swl.md +420 -420
- package/agentes/backend-go-swl.md +390 -390
- package/agentes/backend-java-swl.md +281 -281
- package/agentes/backend-node-swl.md +479 -479
- package/agentes/backend-python-swl.md +605 -605
- package/agentes/backend-rust-swl.md +364 -364
- package/agentes/backend-workers-swl.md +482 -482
- package/agentes/cloud-infra-swl.md +509 -509
- package/agentes/consolidador-swl.md +541 -541
- package/agentes/datos-swl.md +605 -605
- package/agentes/depurador-swl.md +352 -352
- package/agentes/devops-ci-swl.md +400 -400
- package/agentes/disenador-ui-swl.md +569 -569
- package/agentes/documentador-swl.md +345 -345
- package/agentes/frontend-angular-swl.md +621 -621
- package/agentes/frontend-css-swl.md +716 -716
- package/agentes/frontend-react-swl.md +692 -692
- package/agentes/frontend-swl.md +496 -496
- package/agentes/frontend-tailwind-swl.md +826 -826
- package/agentes/gh-fix-ci-swl.md +2 -2
- package/agentes/implementador-swl.md +328 -328
- package/agentes/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- package/agentes/llm-apps-swl.md +278 -278
- package/agentes/migrador-swl.md +442 -442
- package/agentes/mobile-android-swl.md +511 -511
- package/agentes/mobile-cross-swl.md +541 -541
- package/agentes/mobile-ios-swl.md +502 -502
- package/agentes/mobile-testing-swl.md +302 -302
- package/agentes/nemesis-auditor-swl.md +285 -285
- package/agentes/notificador-swl.md +918 -918
- package/agentes/observabilidad-swl.md +438 -438
- package/agentes/orquestador-swl.md +1026 -1026
- package/agentes/pagos-swl.md +310 -310
- package/agentes/perfilador-usuario-swl.md +321 -321
- package/agentes/planificador-swl.md +399 -399
- package/agentes/producto-prd-swl.md +589 -589
- package/agentes/red-team-swl.md +1 -1
- package/agentes/release-manager-swl.md +590 -590
- package/agentes/rendimiento-swl.md +713 -713
- package/agentes/resolutor-build-swl.md +245 -245
- package/agentes/revisor-angular-swl.md +278 -278
- package/agentes/revisor-codigo-swl.md +505 -505
- package/agentes/revisor-csharp-swl.md +264 -264
- package/agentes/revisor-go-swl.md +259 -259
- package/agentes/revisor-java-swl.md +257 -257
- package/agentes/revisor-kotlin-swl.md +273 -273
- package/agentes/revisor-nextjs-swl.md +281 -281
- package/agentes/revisor-php-swl.md +271 -271
- package/agentes/revisor-react-swl.md +278 -278
- package/agentes/revisor-rust-swl.md +346 -346
- package/agentes/revisor-seguridad-swl.md +399 -399
- package/agentes/revisor-swift-swl.md +268 -268
- package/agentes/revisor-typescript-swl.md +346 -346
- package/agentes/sre-swl.md +291 -291
- package/agentes/tdd-qa-swl.md +393 -393
- package/comandos/swl/aprobar-plan.md +146 -141
- package/comandos/swl/briefing.md +119 -119
- package/comandos/swl/contribuir.md +233 -233
- package/comandos/swl/predecir.md +139 -139
- package/comandos/swl/release.md +30 -8
- package/comandos/swl/sesiones.md +1 -1
- package/comandos/swl/status.md +343 -333
- package/gateway/agent-executor.js +1 -1
- package/gateway/lib/event-channel.js +191 -191
- package/habilidades/agent-deep-links/SKILL.md +148 -148
- package/habilidades/agentes-como-servicio/SKILL.md +2 -2
- package/habilidades/angular-moderno/SKILL.md +20 -1
- package/habilidades/auto-evolucion-protocolo/SKILL.md +276 -276
- package/habilidades/backend-async-postgres-testing/SKILL.md +215 -215
- package/habilidades/backend-error-design/SKILL.md +221 -221
- package/habilidades/backend-production-resilience/SKILL.md +288 -288
- package/habilidades/benchmark-memoria/SKILL.md +186 -186
- package/habilidades/calidad-anti-patrones-universales/SKILL.md +368 -368
- package/habilidades/calidad-contract-testing/SKILL.md +165 -165
- package/habilidades/calidad-mutation-testing/SKILL.md +170 -170
- package/habilidades/changelog-generator/scripts/parse-commits.js +367 -367
- package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
- package/habilidades/contenedores-docker/SKILL.md +3 -1
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
- package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
- package/habilidades/drift-detection/SKILL.md +179 -179
- package/habilidades/ejecutar-fase/SKILL.md +564 -541
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/estructura-proyecto-claude/recursos/frontmatter-y-hooks-referencia.md +1 -1
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
- package/habilidades/eval-framework/SKILL.md +212 -212
- package/habilidades/extractor-de-aprendizajes/SKILL.md +3 -3
- package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
- package/habilidades/harness-claude-code/recursos/disciplina-harness-regla.md +252 -252
- package/habilidades/legacy-code-rescue/SKILL.md +267 -267
- package/habilidades/meta-skills-estandar/recursos/convencion-examples.md +93 -93
- package/habilidades/patrones-python/recursos/patrones-avanzados.md +469 -469
- package/habilidades/perfil-usuario/SKILL.md +200 -200
- package/habilidades/planear-fase/SKILL.md +15 -1
- package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
- package/habilidades/proceso-ddia-fundamentos/SKILL.md +255 -255
- package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
- package/habilidades/proceso-debate-adversarial/SKILL.md +191 -164
- package/habilidades/proceso-debate-adversarial/recursos/personas.md +105 -105
- package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
- package/habilidades/proceso-dynamic-workflows/SKILL.md +138 -138
- package/habilidades/proceso-dynamic-workflows/recursos/template-adversarial-verify.js +65 -65
- package/habilidades/proceso-dynamic-workflows/recursos/template-triage.js +65 -65
- package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
- package/habilidades/proceso-modular-split/SKILL.md +256 -256
- package/habilidades/prompt-engineering/recursos/patrones-avanzados.md +2 -2
- package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
- package/habilidades/structured-outputs/SKILL.md +2 -2
- package/habilidades/swl-claudemd/recursos/contrato-aprender.md +83 -83
- package/habilidades/swl-claudemd/recursos/duplicacion-reglas-globales.md +85 -85
- package/habilidades/swl-claudemd/recursos/plantillas-init.md +94 -94
- package/habilidades/swl-dashboard/SKILL.md +2 -2
- package/habilidades/tdd-workflow/SKILL.md +33 -1
- package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
- package/habilidades/validacion-ci-sistema/recursos/validadores-completos.md +1 -1
- package/habilidades/validacion-ci-sistema/scripts/validar-sistema.sh +1 -1
- package/hooks/captura-acciones-post.js +151 -0
- package/hooks/captura-acciones-session.js +155 -0
- package/hooks/ciclo-evolucion-subagente.js +26 -26
- package/hooks/ciclo-evolucion.js +26 -26
- package/hooks/claudemd-bloat-detector.js +161 -161
- package/hooks/claudemd-duplicacion-detector.js +170 -170
- package/hooks/contexto-iteracion.js +144 -144
- package/hooks/guardrail-modelo.js +1 -1
- package/hooks/lib/agent-routing.js +107 -107
- package/hooks/lib/auto-consolidator.js +335 -335
- package/hooks/lib/autonomia.js +208 -208
- package/hooks/lib/briefing.js +512 -474
- package/hooks/lib/captura-acciones.js +392 -0
- package/hooks/lib/ciclo-evolucion.js +47 -47
- package/hooks/lib/deep-links.js +185 -185
- package/hooks/lib/error-classifier.js +308 -308
- package/hooks/lib/etapa-auto-evolucion.js +701 -701
- package/hooks/lib/etapa-metricas.js +388 -388
- package/hooks/lib/etapa-perfil-usuario.js +376 -376
- package/hooks/lib/loop-telemetry.js +321 -321
- package/hooks/lib/merkle-audit.js +96 -96
- package/hooks/lib/model-router.js +2 -2
- package/hooks/lib/propose-step.js +358 -358
- package/hooks/lib/provenance-tracker.js +191 -191
- package/hooks/lib/rate-limit-tracker.js +253 -253
- package/hooks/lib/resource-quota.js +122 -122
- package/hooks/lib/retry-jitter.js +165 -165
- package/hooks/lib/security-net.js +201 -201
- package/hooks/lib/skill-auditor.js +588 -588
- package/hooks/lib/sync-status.js +228 -228
- package/hooks/lib/taint-tracker.js +107 -107
- package/hooks/lib/text-similarity.js +241 -241
- package/hooks/lib/token-estimator.js +1 -0
- package/hooks/lib/toon-compressor.js +245 -245
- package/hooks/lib/usage-model.js +1 -1
- package/hooks/linea-estado.js +2 -0
- package/hooks/registro-turnos.js +209 -209
- package/hooks/session-briefing.js +98 -98
- package/hooks/spec-gate.js +211 -211
- package/hooks/sugerir-regenerar-inventario.js +170 -170
- package/hooks/tdd-gate.js +241 -241
- package/hooks/telemetria-skill-routing.js +100 -100
- package/hooks/validar-formato-post-subagente.js +140 -140
- package/hooks/validar-intent-spec.js +242 -242
- package/hooks/validar-memoria-hook.js +218 -218
- package/hooks/validar-planning-paths.js +134 -134
- package/instintos/autonomia.yaml +27 -27
- package/instintos/prompt-appendices.yaml +57 -57
- package/llms.txt +2 -2
- package/manifiestos/agent-output-schemas.json +57 -57
- package/manifiestos/canonical-hashes.json +2291 -1637
- package/manifiestos/hooks-config.json +18 -0
- package/manifiestos/modulos.json +4 -0
- package/manifiestos/planning-paths.json +44 -44
- package/manifiestos/skills-lock.json +1282 -1282
- package/package.json +2 -2
- package/plantillas/auditor-veto-template.md +105 -105
- package/plantillas/github-workflows/README.md +47 -47
- package/plantillas/github-workflows/release-please.yml +44 -44
- package/plantillas/github-workflows/swl-ci.yml +107 -107
- package/plantillas/github-workflows/swl-security.yml +51 -51
- package/plugin.json +2 -2
- package/reglas/accesibilidad.md +10 -10
- package/reglas/analisis-previo-tareas-grandes.md +172 -172
- package/reglas/api-diseno.md +9 -9
- package/reglas/arreglar-al-detectar.md +240 -240
- package/reglas/auditorias-documentales-estructurales.md +7 -7
- package/reglas/cloud-infra.md +8 -8
- package/reglas/consultar-vault-primero.md +195 -195
- package/reglas/debatir-antes-de-aceptar.md +158 -158
- package/reglas/fragmentos-compartidos.md +183 -183
- package/reglas/hooks.md +6 -6
- package/reglas/intent-engineering.md +218 -218
- package/reglas/markitdown.md +8 -8
- package/reglas/memoria-consolidada.md +41 -0
- package/reglas/monitor-ci.md +309 -309
- package/reglas/patrones.md +6 -6
- package/reglas/seguridad-agentes.md +66 -0
- package/reglas/sesiones-paralelas.md +180 -180
- package/reglas/sin-duplicacion-reglas-globales.md +182 -182
- package/reglas/skills-estandar.md +6 -6
- package/reglas/testing.md +7 -7
- package/reglas/tests-cleanup.md +224 -224
- package/reglas/usar-code-review-graph.md +155 -155
- package/reglas/usar-context7.md +226 -226
- package/reglas/verificar-citas-normativas.md +548 -548
- package/schemas/agent-frontmatter.schema.json +3 -3
- package/schemas/agent-message.schema.json +73 -73
- package/schemas/agent-output-implementacion.schema.json +114 -114
- package/schemas/agent-output-planificacion.schema.json +150 -150
- package/schemas/agent-output-review.schema.json +98 -98
- package/schemas/diary-entry.schema.json +112 -112
- package/schemas/hook-profiles.schema.json +54 -54
- package/schemas/hooks-config.schema.json +89 -89
- package/schemas/instinct.schema.json +161 -152
- package/schemas/modulos.schema.json +38 -38
- package/schemas/perfiles.schema.json +36 -36
- package/schemas/plugin.schema.json +77 -77
- package/schemas/skill-evals.schema.json +119 -119
- package/schemas/skill-frontmatter.schema.json +245 -245
- package/scripts/audit-tools/audit-history.js +330 -330
- package/scripts/audit-tools/bundle-tracker.js +290 -290
- package/scripts/audit-tools/canary-monitor.js +352 -352
- package/scripts/audit-tools/code-profiler.js +605 -605
- package/scripts/audit-tools/dep-doctor.js +320 -320
- package/scripts/audit-tools/env-validator.js +206 -206
- package/scripts/audit-tools/lib/fs-walk.js +48 -48
- package/scripts/audit-tools/lib/output.js +23 -23
- package/scripts/audit-tools/migration-checker.js +392 -392
- package/scripts/audit-tools/pentest-scanner.js +1436 -1436
- package/scripts/benchmark-memoria.js +167 -167
- package/scripts/bootstrap-instintos.js +25 -7
- package/scripts/cli/aprobar-plan.js +73 -73
- package/scripts/cli/briefing.js +23 -23
- package/scripts/cli/ciclo-evolucion.js +26 -26
- package/scripts/cli/configurar-ci.js +40 -40
- package/scripts/cli/derivar-feature-list.js +25 -25
- package/scripts/cli/detectar-host.js +27 -27
- package/scripts/cli/diary-entry.js +69 -69
- package/scripts/cli/execution-state.js +18 -18
- package/scripts/cli/gateway-notify.js +41 -41
- package/scripts/cli/liberar-fase.js +42 -42
- package/scripts/cli/loop-telemetry.js +125 -125
- package/scripts/cli/mark-evolved.js +56 -56
- package/scripts/cli/metricas-dora.js +26 -26
- package/scripts/cli/near-duplicate.js +55 -55
- package/scripts/cli/notificaciones.js +123 -123
- package/scripts/cli/propose-step.js +29 -29
- package/scripts/cli/schedule-parse.js +19 -19
- package/scripts/cli/sugerir-modelo.js +20 -20
- package/scripts/cli/verificar-plan.js +36 -36
- package/scripts/cli/verificar-trazabilidad.js +35 -35
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/field-report.js +199 -199
- package/scripts/generar-checklists-consolidados.js +273 -273
- package/scripts/generar-matriz-lenguajes.js +271 -271
- package/scripts/lib/artefactos-python.js +43 -43
- package/scripts/lib/auditar-invocaciones-comandos.js +104 -104
- package/scripts/lib/benchmark-metrics.js +160 -160
- package/scripts/lib/budget-enforcer.js +252 -252
- package/scripts/lib/ci-reader.js +193 -193
- package/scripts/lib/claude-sessions.js +1 -0
- package/scripts/lib/configurar-ci.js +380 -380
- package/scripts/lib/contadores-inventario.js +217 -217
- package/scripts/lib/detectar-host-swl.js +175 -175
- package/scripts/lib/detectar-stack-detallado.js +307 -307
- package/scripts/lib/detector-autoduplicacion-intra-archivo.js +234 -234
- package/scripts/lib/detector-reglas-duplicadas.js +220 -220
- package/scripts/lib/diary-entry.js +234 -234
- package/scripts/lib/eval-metrics-store.js +218 -218
- package/scripts/lib/eval-quality.js +171 -171
- package/scripts/lib/eval-schemas.js +144 -144
- package/scripts/lib/eval-self-correct.js +106 -106
- package/scripts/lib/eval-validator.js +185 -185
- package/scripts/lib/evidencia-release.js +322 -322
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/gate-hooks-requires.js +249 -249
- package/scripts/lib/gate-licencias.js +212 -212
- package/scripts/lib/git-metricas.js +257 -257
- package/scripts/lib/gitignore-manifest.js +44 -11
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/metricas-dora.js +204 -204
- package/scripts/lib/npm-version.js +261 -261
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/plan-lock.js +275 -275
- package/scripts/lib/pr-analyzer.js +399 -399
- package/scripts/lib/prompt-builder.js +264 -264
- package/scripts/lib/reglas-globales-conocidas.json +180 -180
- package/scripts/lib/resolver-plan-fase.js +37 -37
- package/scripts/lib/rrf-fusion.js +175 -175
- package/scripts/lib/schema-version.js +164 -164
- package/scripts/lib/scoring-instintos.js +277 -277
- package/scripts/lib/semantic-search.js +252 -252
- package/scripts/lib/skill-metrics.js +41 -1
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/lib/tool-cost-analyzer.js +1 -0
- package/scripts/limpiar-artefactos-python.js +131 -131
- package/scripts/mcp-server/auth.js +105 -105
- package/scripts/mcp-server/cache.js +106 -106
- package/scripts/migrar-csv-a-array.js +168 -168
- package/scripts/migrar-fase-dominio.js +200 -200
- package/scripts/publicar.js +497 -497
- package/scripts/run-eval.js +141 -141
- package/scripts/tui/componentes/selector-multi.js +189 -189
- package/scripts/tui/componentes/selector-unico.js +158 -158
- package/scripts/tui/ejecutores.js +375 -375
- package/scripts/tui/index.js +162 -162
- package/scripts/tui/lib/colores.js +129 -129
- package/scripts/tui/lib/render.js +264 -264
- package/scripts/tui/lib/teclas.js +113 -113
- package/scripts/tui/pantallas/inspect.js +173 -173
- package/scripts/tui/pantallas/install-wizard.js +334 -334
- package/scripts/tui/pantallas/menu-principal.js +52 -52
- package/scripts/tui/pantallas/progreso.js +274 -274
- package/scripts/tui/pantallas/resumen.js +132 -132
- package/scripts/tui/pantallas/uninstall-wizard.js +208 -208
- package/scripts/tui/pantallas/update-wizard.js +232 -232
- package/scripts/tui/pantallas/welcome.js +187 -187
- package/scripts/validar-userland-vacio.js +110 -110
- package/scripts/verificar-trazabilidad.js +329 -298
|
@@ -1,134 +1,134 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
'use strict';
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Hook: validar-planning-paths.js
|
|
6
|
-
* Tipo: PostToolUse (aplica a: Write, Edit, MultiEdit)
|
|
7
|
-
*
|
|
8
|
-
* Advierte cuando una sesion crea un directorio top-level NUEVO en .planning/
|
|
9
|
-
* que NO esta en la allowlist canonica (manifiestos/planning-paths.json).
|
|
10
|
-
* Atrapa divergencias es/en (auditoria/ vs audit/, ux/ vs design/) ANTES de
|
|
11
|
-
* que proliferen.
|
|
12
|
-
*
|
|
13
|
-
* Aplica reglas/analizar-directorios-antes-de-escribir.md y cierra
|
|
14
|
-
* DT-PLANNING-OUTPUT-PATHS. No bloquea (modo warn-only). ADR-0031.
|
|
15
|
-
*
|
|
16
|
-
* Opt-out: SWL_PLANNING_PATHS=0 desactiva el hook.
|
|
17
|
-
*
|
|
18
|
-
* Formato del nudge: kind "planning-path-divergente" -> documentador-swl.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
const fs = require('fs');
|
|
22
|
-
const path = require('path');
|
|
23
|
-
const crypto = require('crypto');
|
|
24
|
-
|
|
25
|
-
if (process.env.SWL_PLANNING_PATHS === '0') process.exit(0);
|
|
26
|
-
|
|
27
|
-
let evento;
|
|
28
|
-
try {
|
|
29
|
-
evento = JSON.parse(fs.readFileSync(0, 'utf-8'));
|
|
30
|
-
} catch (_) {
|
|
31
|
-
process.exit(0);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const toolName = evento?.tool_name;
|
|
35
|
-
const toolInput = evento?.tool_input;
|
|
36
|
-
if (!toolName || !['Write', 'Edit', 'MultiEdit'].includes(toolName)) process.exit(0);
|
|
37
|
-
|
|
38
|
-
const filePath = toolInput?.file_path;
|
|
39
|
-
if (!filePath) process.exit(0);
|
|
40
|
-
|
|
41
|
-
const norm = filePath.replace(/\\/g, '/');
|
|
42
|
-
|
|
43
|
-
// Solo nos interesa lo que cae dentro de .planning/. Soporta path absoluto
|
|
44
|
-
// (con '/.planning/' embebido, lo que Claude Code envia en produccion) y path
|
|
45
|
-
// relativo ('.planning/...'). `resto` es todo lo que sigue a '.planning/'.
|
|
46
|
-
const marcador = '/.planning/';
|
|
47
|
-
let resto;
|
|
48
|
-
const idx = norm.indexOf(marcador);
|
|
49
|
-
if (idx >= 0) {
|
|
50
|
-
resto = norm.slice(idx + marcador.length); // path absoluto / embebido
|
|
51
|
-
} else if (norm.startsWith('.planning/')) {
|
|
52
|
-
resto = norm.slice('.planning/'.length); // path relativo
|
|
53
|
-
} else {
|
|
54
|
-
process.exit(0); // fuera de .planning/
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
// resto = "<segmento>/..." o "<archivo>"
|
|
58
|
-
const partes = resto.split('/').filter(Boolean);
|
|
59
|
-
if (partes.length === 0) process.exit(0);
|
|
60
|
-
|
|
61
|
-
// Si es un archivo directo en .planning/ (sin subdirectorio), es archivo
|
|
62
|
-
// top-level: lo permitimos (ESTADO.md, nudges.jsonl, etc.).
|
|
63
|
-
if (partes.length === 1) process.exit(0);
|
|
64
|
-
|
|
65
|
-
const topDir = partes[0];
|
|
66
|
-
|
|
67
|
-
// ─── Allowlist embebida (fallback portable) ────────────────────────────────
|
|
68
|
-
// manifiestos/ NO se propaga a proyectos consumidores; el hook debe ser
|
|
69
|
-
// autosuficiente. En el repo swl-ses se prefiere el manifest (fuente de
|
|
70
|
-
// verdad); en consumidores se usa esta lista. Mantener ambas en sync.
|
|
71
|
-
const DIRS_CANONICOS = [
|
|
72
|
-
'adrs', 'analysis', 'archive', 'audit', 'auto-evolution', 'backups',
|
|
73
|
-
'benchmark', 'comms', 'cron', 'design', 'evolution', 'fases', 'gateway',
|
|
74
|
-
'inbox', 'knowledge', 'locks', 'red-team', 'research', 'runs', 'sessions',
|
|
75
|
-
'traces', 'user-profile', 'wiki',
|
|
76
|
-
];
|
|
77
|
-
|
|
78
|
-
// ─── Cargar allowlist (manifest si existe, embebida si no) ──────────────────
|
|
79
|
-
const CWD = process.cwd();
|
|
80
|
-
const allowlistPath = path.join(CWD, 'manifiestos', 'planning-paths.json');
|
|
81
|
-
let permitidos;
|
|
82
|
-
try {
|
|
83
|
-
const allow = JSON.parse(fs.readFileSync(allowlistPath, 'utf-8'));
|
|
84
|
-
permitidos = new Set((allow.directorios || []).map((d) => d.nombre));
|
|
85
|
-
} catch (_) {
|
|
86
|
-
permitidos = new Set(DIRS_CANONICOS);
|
|
87
|
-
}
|
|
88
|
-
if (permitidos.has(topDir)) process.exit(0);
|
|
89
|
-
|
|
90
|
-
// Directorio top-level NO canonico -> divergencia potencial.
|
|
91
|
-
// Detectar variante es/en conocida para sugerir el canonico correcto.
|
|
92
|
-
const VARIANTES = {
|
|
93
|
-
auditoria: 'audit', auditorias: 'audit',
|
|
94
|
-
ux: 'design', ui: 'design', diseno: 'design', 'diseno-visual': 'design',
|
|
95
|
-
investigacion: 'research', conocimiento: 'knowledge',
|
|
96
|
-
evolucion: 'evolution', 'auto-evolucion': 'auto-evolution',
|
|
97
|
-
'perfil-usuario': 'user-profile', archivo: 'archive',
|
|
98
|
-
sesiones: 'sessions', decisiones: 'adrs',
|
|
99
|
-
};
|
|
100
|
-
const sugerido = VARIANTES[topDir] || null;
|
|
101
|
-
|
|
102
|
-
// Ruta de display relativa a .planning/, independiente de si el path era
|
|
103
|
-
// absoluto o relativo (resto ya es todo lo que sigue a '.planning/').
|
|
104
|
-
const rutaRelativa = '.planning/' + resto;
|
|
105
|
-
const nudge = {
|
|
106
|
-
id: crypto.randomBytes(8).toString('hex'),
|
|
107
|
-
kind: 'planning-path-divergente',
|
|
108
|
-
target: 'documentador-swl',
|
|
109
|
-
source: 'hooks/validar-planning-paths.js',
|
|
110
|
-
message:
|
|
111
|
-
`[planning-path] Se escribio en \`.planning/${topDir}/\`, un directorio top-level ` +
|
|
112
|
-
`NO canonico (${rutaRelativa}).\n` +
|
|
113
|
-
(sugerido
|
|
114
|
-
? ` Probable divergencia es/en: usa el canonico \`.planning/${sugerido}/\` en su lugar.\n`
|
|
115
|
-
: ` Si es un dominio nuevo legitimo, agregalo a \`manifiestos/planning-paths.json\`.\n`) +
|
|
116
|
-
` Ver \`reglas/analizar-directorios-antes-de-escribir.md\` y la allowlist canonica.`,
|
|
117
|
-
data: {
|
|
118
|
-
dir_detectado: topDir,
|
|
119
|
-
canonico_sugerido: sugerido,
|
|
120
|
-
archivo: rutaRelativa,
|
|
121
|
-
},
|
|
122
|
-
ts: new Date().toISOString(),
|
|
123
|
-
accionado: false,
|
|
124
|
-
accionado_ts: null,
|
|
125
|
-
accionado_por: null,
|
|
126
|
-
};
|
|
127
|
-
|
|
128
|
-
try {
|
|
129
|
-
const nudgesPath = path.join(CWD, '.planning', 'evolution', 'nudges.jsonl');
|
|
130
|
-
fs.mkdirSync(path.dirname(nudgesPath), { recursive: true });
|
|
131
|
-
fs.appendFileSync(nudgesPath, JSON.stringify(nudge) + '\n', 'utf-8');
|
|
132
|
-
} catch (_) { /* no fallar el hook */ }
|
|
133
|
-
|
|
134
|
-
process.exit(0);
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Hook: validar-planning-paths.js
|
|
6
|
+
* Tipo: PostToolUse (aplica a: Write, Edit, MultiEdit)
|
|
7
|
+
*
|
|
8
|
+
* Advierte cuando una sesion crea un directorio top-level NUEVO en .planning/
|
|
9
|
+
* que NO esta en la allowlist canonica (manifiestos/planning-paths.json).
|
|
10
|
+
* Atrapa divergencias es/en (auditoria/ vs audit/, ux/ vs design/) ANTES de
|
|
11
|
+
* que proliferen.
|
|
12
|
+
*
|
|
13
|
+
* Aplica reglas/analizar-directorios-antes-de-escribir.md y cierra
|
|
14
|
+
* DT-PLANNING-OUTPUT-PATHS. No bloquea (modo warn-only). ADR-0031.
|
|
15
|
+
*
|
|
16
|
+
* Opt-out: SWL_PLANNING_PATHS=0 desactiva el hook.
|
|
17
|
+
*
|
|
18
|
+
* Formato del nudge: kind "planning-path-divergente" -> documentador-swl.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const fs = require('fs');
|
|
22
|
+
const path = require('path');
|
|
23
|
+
const crypto = require('crypto');
|
|
24
|
+
|
|
25
|
+
if (process.env.SWL_PLANNING_PATHS === '0') process.exit(0);
|
|
26
|
+
|
|
27
|
+
let evento;
|
|
28
|
+
try {
|
|
29
|
+
evento = JSON.parse(fs.readFileSync(0, 'utf-8'));
|
|
30
|
+
} catch (_) {
|
|
31
|
+
process.exit(0);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const toolName = evento?.tool_name;
|
|
35
|
+
const toolInput = evento?.tool_input;
|
|
36
|
+
if (!toolName || !['Write', 'Edit', 'MultiEdit'].includes(toolName)) process.exit(0);
|
|
37
|
+
|
|
38
|
+
const filePath = toolInput?.file_path;
|
|
39
|
+
if (!filePath) process.exit(0);
|
|
40
|
+
|
|
41
|
+
const norm = filePath.replace(/\\/g, '/');
|
|
42
|
+
|
|
43
|
+
// Solo nos interesa lo que cae dentro de .planning/. Soporta path absoluto
|
|
44
|
+
// (con '/.planning/' embebido, lo que Claude Code envia en produccion) y path
|
|
45
|
+
// relativo ('.planning/...'). `resto` es todo lo que sigue a '.planning/'.
|
|
46
|
+
const marcador = '/.planning/';
|
|
47
|
+
let resto;
|
|
48
|
+
const idx = norm.indexOf(marcador);
|
|
49
|
+
if (idx >= 0) {
|
|
50
|
+
resto = norm.slice(idx + marcador.length); // path absoluto / embebido
|
|
51
|
+
} else if (norm.startsWith('.planning/')) {
|
|
52
|
+
resto = norm.slice('.planning/'.length); // path relativo
|
|
53
|
+
} else {
|
|
54
|
+
process.exit(0); // fuera de .planning/
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// resto = "<segmento>/..." o "<archivo>"
|
|
58
|
+
const partes = resto.split('/').filter(Boolean);
|
|
59
|
+
if (partes.length === 0) process.exit(0);
|
|
60
|
+
|
|
61
|
+
// Si es un archivo directo en .planning/ (sin subdirectorio), es archivo
|
|
62
|
+
// top-level: lo permitimos (ESTADO.md, nudges.jsonl, etc.).
|
|
63
|
+
if (partes.length === 1) process.exit(0);
|
|
64
|
+
|
|
65
|
+
const topDir = partes[0];
|
|
66
|
+
|
|
67
|
+
// ─── Allowlist embebida (fallback portable) ────────────────────────────────
|
|
68
|
+
// manifiestos/ NO se propaga a proyectos consumidores; el hook debe ser
|
|
69
|
+
// autosuficiente. En el repo swl-ses se prefiere el manifest (fuente de
|
|
70
|
+
// verdad); en consumidores se usa esta lista. Mantener ambas en sync.
|
|
71
|
+
const DIRS_CANONICOS = [
|
|
72
|
+
'adrs', 'analysis', 'archive', 'audit', 'auto-evolution', 'backups',
|
|
73
|
+
'benchmark', 'comms', 'cron', 'design', 'evolution', 'fases', 'gateway',
|
|
74
|
+
'inbox', 'knowledge', 'locks', 'red-team', 'research', 'runs', 'sessions',
|
|
75
|
+
'traces', 'user-profile', 'wiki',
|
|
76
|
+
];
|
|
77
|
+
|
|
78
|
+
// ─── Cargar allowlist (manifest si existe, embebida si no) ──────────────────
|
|
79
|
+
const CWD = process.cwd();
|
|
80
|
+
const allowlistPath = path.join(CWD, 'manifiestos', 'planning-paths.json');
|
|
81
|
+
let permitidos;
|
|
82
|
+
try {
|
|
83
|
+
const allow = JSON.parse(fs.readFileSync(allowlistPath, 'utf-8'));
|
|
84
|
+
permitidos = new Set((allow.directorios || []).map((d) => d.nombre));
|
|
85
|
+
} catch (_) {
|
|
86
|
+
permitidos = new Set(DIRS_CANONICOS);
|
|
87
|
+
}
|
|
88
|
+
if (permitidos.has(topDir)) process.exit(0);
|
|
89
|
+
|
|
90
|
+
// Directorio top-level NO canonico -> divergencia potencial.
|
|
91
|
+
// Detectar variante es/en conocida para sugerir el canonico correcto.
|
|
92
|
+
const VARIANTES = {
|
|
93
|
+
auditoria: 'audit', auditorias: 'audit',
|
|
94
|
+
ux: 'design', ui: 'design', diseno: 'design', 'diseno-visual': 'design',
|
|
95
|
+
investigacion: 'research', conocimiento: 'knowledge',
|
|
96
|
+
evolucion: 'evolution', 'auto-evolucion': 'auto-evolution',
|
|
97
|
+
'perfil-usuario': 'user-profile', archivo: 'archive',
|
|
98
|
+
sesiones: 'sessions', decisiones: 'adrs',
|
|
99
|
+
};
|
|
100
|
+
const sugerido = VARIANTES[topDir] || null;
|
|
101
|
+
|
|
102
|
+
// Ruta de display relativa a .planning/, independiente de si el path era
|
|
103
|
+
// absoluto o relativo (resto ya es todo lo que sigue a '.planning/').
|
|
104
|
+
const rutaRelativa = '.planning/' + resto;
|
|
105
|
+
const nudge = {
|
|
106
|
+
id: crypto.randomBytes(8).toString('hex'),
|
|
107
|
+
kind: 'planning-path-divergente',
|
|
108
|
+
target: 'documentador-swl',
|
|
109
|
+
source: 'hooks/validar-planning-paths.js',
|
|
110
|
+
message:
|
|
111
|
+
`[planning-path] Se escribio en \`.planning/${topDir}/\`, un directorio top-level ` +
|
|
112
|
+
`NO canonico (${rutaRelativa}).\n` +
|
|
113
|
+
(sugerido
|
|
114
|
+
? ` Probable divergencia es/en: usa el canonico \`.planning/${sugerido}/\` en su lugar.\n`
|
|
115
|
+
: ` Si es un dominio nuevo legitimo, agregalo a \`manifiestos/planning-paths.json\`.\n`) +
|
|
116
|
+
` Ver \`reglas/analizar-directorios-antes-de-escribir.md\` y la allowlist canonica.`,
|
|
117
|
+
data: {
|
|
118
|
+
dir_detectado: topDir,
|
|
119
|
+
canonico_sugerido: sugerido,
|
|
120
|
+
archivo: rutaRelativa,
|
|
121
|
+
},
|
|
122
|
+
ts: new Date().toISOString(),
|
|
123
|
+
accionado: false,
|
|
124
|
+
accionado_ts: null,
|
|
125
|
+
accionado_por: null,
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
try {
|
|
129
|
+
const nudgesPath = path.join(CWD, '.planning', 'evolution', 'nudges.jsonl');
|
|
130
|
+
fs.mkdirSync(path.dirname(nudgesPath), { recursive: true });
|
|
131
|
+
fs.appendFileSync(nudgesPath, JSON.stringify(nudge) + '\n', 'utf-8');
|
|
132
|
+
} catch (_) { /* no fallar el hook */ }
|
|
133
|
+
|
|
134
|
+
process.exit(0);
|
package/instintos/autonomia.yaml
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
# Dial de autonomía — SWL-SES (Fase 13, ADR-0037)
|
|
2
|
-
#
|
|
3
|
-
# Presupuesto de autonomía por clase de riesgo. Consumido por hooks/lib/autonomia.js
|
|
4
|
-
# (orquestador y agentes ALTO leen el dial como GUÍA; no es un gate bloqueante en v1).
|
|
5
|
-
#
|
|
6
|
-
# Defaults = los controles vigentes de reglas/seguridad-agentes.md. Este archivo
|
|
7
|
-
# NO relaja ningún control: lo hace visible y ajustable. El dial sube SOLO por
|
|
8
|
-
# decisión explícita del usuario, nunca por conveniencia del agente.
|
|
9
|
-
#
|
|
10
|
-
# Niveles válidos por clase:
|
|
11
|
-
# total -> acción autónoma sin checkpoint (lectura/análisis).
|
|
12
|
-
# con_auto_checkpoint -> autónoma, pero registra un auto-checkpoint antes de actuar.
|
|
13
|
-
# hitl -> requiere confirmación humana siempre.
|
|
14
|
-
# Cualquier valor desconocido se degrada a 'hitl' (nunca relaja).
|
|
15
|
-
#
|
|
16
|
-
# Estructura PLANA obligatoria (1 nivel bajo `clases:`) — ver 13-PLAN.md.
|
|
17
|
-
|
|
18
|
-
version: "1.0"
|
|
19
|
-
generado: "2026-06-11"
|
|
20
|
-
defaults: seguridad-agentes.md
|
|
21
|
-
clases:
|
|
22
|
-
lectura_analisis: total
|
|
23
|
-
# Subido a `total` por decisión explícita del usuario (2026-06-11, cierre Fase 13):
|
|
24
|
-
# cambios reversibles autónomos sin auto-checkpoint. Los commits atómicos siguen
|
|
25
|
-
# siendo el mecanismo de rollback. Default de seguridad-agentes.md era con_auto_checkpoint.
|
|
26
|
-
cambio_reversible: total
|
|
27
|
-
migracion_auth_push_publish: hitl
|
|
1
|
+
# Dial de autonomía — SWL-SES (Fase 13, ADR-0037)
|
|
2
|
+
#
|
|
3
|
+
# Presupuesto de autonomía por clase de riesgo. Consumido por hooks/lib/autonomia.js
|
|
4
|
+
# (orquestador y agentes ALTO leen el dial como GUÍA; no es un gate bloqueante en v1).
|
|
5
|
+
#
|
|
6
|
+
# Defaults = los controles vigentes de reglas/seguridad-agentes.md. Este archivo
|
|
7
|
+
# NO relaja ningún control: lo hace visible y ajustable. El dial sube SOLO por
|
|
8
|
+
# decisión explícita del usuario, nunca por conveniencia del agente.
|
|
9
|
+
#
|
|
10
|
+
# Niveles válidos por clase:
|
|
11
|
+
# total -> acción autónoma sin checkpoint (lectura/análisis).
|
|
12
|
+
# con_auto_checkpoint -> autónoma, pero registra un auto-checkpoint antes de actuar.
|
|
13
|
+
# hitl -> requiere confirmación humana siempre.
|
|
14
|
+
# Cualquier valor desconocido se degrada a 'hitl' (nunca relaja).
|
|
15
|
+
#
|
|
16
|
+
# Estructura PLANA obligatoria (1 nivel bajo `clases:`) — ver 13-PLAN.md.
|
|
17
|
+
|
|
18
|
+
version: "1.0"
|
|
19
|
+
generado: "2026-06-11"
|
|
20
|
+
defaults: seguridad-agentes.md
|
|
21
|
+
clases:
|
|
22
|
+
lectura_analisis: total
|
|
23
|
+
# Subido a `total` por decisión explícita del usuario (2026-06-11, cierre Fase 13):
|
|
24
|
+
# cambios reversibles autónomos sin auto-checkpoint. Los commits atómicos siguen
|
|
25
|
+
# siendo el mecanismo de rollback. Default de seguridad-agentes.md era con_auto_checkpoint.
|
|
26
|
+
cambio_reversible: total
|
|
27
|
+
migracion_auth_push_publish: hitl
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
# instintos/prompt-appendices.yaml
|
|
2
|
-
#
|
|
3
|
-
# Catálogo de apéndices reusables para construcción dinámica de prompts/
|
|
4
|
-
# instrucciones via `scripts/lib/prompt-builder.js`. Comandos `/swl:*` y
|
|
5
|
-
# agentes pueden referenciar estos apéndices por nombre al construir mensajes
|
|
6
|
-
# para subagentes o para output al usuario.
|
|
7
|
-
#
|
|
8
|
-
# Patrón adaptado de claudian (Yishen Tu, MIT) — buildSystemPrompt() con
|
|
9
|
-
# apéndices declarativos.
|
|
10
|
-
#
|
|
11
|
-
# Schema:
|
|
12
|
-
# <nombre_apendice>: |
|
|
13
|
-
# Texto del apéndice. Puede contener placeholders {clave} que se
|
|
14
|
-
# interpolan con el contexto al construir el prompt.
|
|
15
|
-
#
|
|
16
|
-
# Soporta operadores YAML `>` (folded — colapsa newlines a espacios) y
|
|
17
|
-
# `|` (literal — preserva newlines). Sin anidamiento profundo.
|
|
18
|
-
#
|
|
19
|
-
# Uso desde código:
|
|
20
|
-
# const pb = require('./scripts/lib/prompt-builder');
|
|
21
|
-
# const ap = pb.cargarApendices();
|
|
22
|
-
# const msg = pb.construirPrompt({
|
|
23
|
-
# base: 'Implementa la fase {fase}.',
|
|
24
|
-
# contexto: { fase: '03-validacion' },
|
|
25
|
-
# appendices: ['estilo_respuesta_breve', 'restricciones_dominio'],
|
|
26
|
-
# apendicesDisponibles: ap,
|
|
27
|
-
# });
|
|
28
|
-
|
|
29
|
-
estilo_respuesta_breve: >
|
|
30
|
-
Responde directo y conciso. Sin preámbulos de cortesía
|
|
31
|
-
("Por supuesto", "Claro"), sin cierres genéricos
|
|
32
|
-
("Espero que ayude"). Resultado primero, contexto solo
|
|
33
|
-
si es no-obvio. Máximo 100 palabras salvo que la tarea
|
|
34
|
-
requiera más detalle.
|
|
35
|
-
|
|
36
|
-
estilo_respuesta_detallado: >
|
|
37
|
-
Responde con detalle técnico. Incluye contexto, ejemplos
|
|
38
|
-
cuando ayuden a clarificar, y trade-offs si hay decisiones
|
|
39
|
-
no obvias. Estructura con encabezados o tablas si el
|
|
40
|
-
contenido lo justifica.
|
|
41
|
-
|
|
42
|
-
restricciones_dominio: |
|
|
43
|
-
Restricciones de dominio del proyecto SWL-SES:
|
|
44
|
-
- Stack: Node.js zero-dependencies en hooks/lib/ y scripts/lib/
|
|
45
|
-
- Idioma: 100% español de México
|
|
46
|
-
- Filosofía: integración ligera y reutilización, no reescritura
|
|
47
|
-
- Antes de invocar herramientas externas opt-in, verificar disponibilidad
|
|
48
|
-
con `command -v` (Bash) o `execSync('<bin> --version', { stdio: 'ignore' })`
|
|
49
|
-
(Node) y caer al flujo nativo si no están
|
|
50
|
-
|
|
51
|
-
contexto_proyecto: >
|
|
52
|
-
Proyecto: {proyecto}. Fase: {fase}. Working directory: {cwd}.
|
|
53
|
-
|
|
54
|
-
referencia_planning: >
|
|
55
|
-
Antes de modificar archivos, lee `.planning/CONTEXTO.md`,
|
|
56
|
-
`.planning/ESTADO.md` y `CLAUDE.md` del proyecto. No editar
|
|
57
|
-
código que no se ha leído primero.
|
|
1
|
+
# instintos/prompt-appendices.yaml
|
|
2
|
+
#
|
|
3
|
+
# Catálogo de apéndices reusables para construcción dinámica de prompts/
|
|
4
|
+
# instrucciones via `scripts/lib/prompt-builder.js`. Comandos `/swl:*` y
|
|
5
|
+
# agentes pueden referenciar estos apéndices por nombre al construir mensajes
|
|
6
|
+
# para subagentes o para output al usuario.
|
|
7
|
+
#
|
|
8
|
+
# Patrón adaptado de claudian (Yishen Tu, MIT) — buildSystemPrompt() con
|
|
9
|
+
# apéndices declarativos.
|
|
10
|
+
#
|
|
11
|
+
# Schema:
|
|
12
|
+
# <nombre_apendice>: |
|
|
13
|
+
# Texto del apéndice. Puede contener placeholders {clave} que se
|
|
14
|
+
# interpolan con el contexto al construir el prompt.
|
|
15
|
+
#
|
|
16
|
+
# Soporta operadores YAML `>` (folded — colapsa newlines a espacios) y
|
|
17
|
+
# `|` (literal — preserva newlines). Sin anidamiento profundo.
|
|
18
|
+
#
|
|
19
|
+
# Uso desde código:
|
|
20
|
+
# const pb = require('./scripts/lib/prompt-builder');
|
|
21
|
+
# const ap = pb.cargarApendices();
|
|
22
|
+
# const msg = pb.construirPrompt({
|
|
23
|
+
# base: 'Implementa la fase {fase}.',
|
|
24
|
+
# contexto: { fase: '03-validacion' },
|
|
25
|
+
# appendices: ['estilo_respuesta_breve', 'restricciones_dominio'],
|
|
26
|
+
# apendicesDisponibles: ap,
|
|
27
|
+
# });
|
|
28
|
+
|
|
29
|
+
estilo_respuesta_breve: >
|
|
30
|
+
Responde directo y conciso. Sin preámbulos de cortesía
|
|
31
|
+
("Por supuesto", "Claro"), sin cierres genéricos
|
|
32
|
+
("Espero que ayude"). Resultado primero, contexto solo
|
|
33
|
+
si es no-obvio. Máximo 100 palabras salvo que la tarea
|
|
34
|
+
requiera más detalle.
|
|
35
|
+
|
|
36
|
+
estilo_respuesta_detallado: >
|
|
37
|
+
Responde con detalle técnico. Incluye contexto, ejemplos
|
|
38
|
+
cuando ayuden a clarificar, y trade-offs si hay decisiones
|
|
39
|
+
no obvias. Estructura con encabezados o tablas si el
|
|
40
|
+
contenido lo justifica.
|
|
41
|
+
|
|
42
|
+
restricciones_dominio: |
|
|
43
|
+
Restricciones de dominio del proyecto SWL-SES:
|
|
44
|
+
- Stack: Node.js zero-dependencies en hooks/lib/ y scripts/lib/
|
|
45
|
+
- Idioma: 100% español de México
|
|
46
|
+
- Filosofía: integración ligera y reutilización, no reescritura
|
|
47
|
+
- Antes de invocar herramientas externas opt-in, verificar disponibilidad
|
|
48
|
+
con `command -v` (Bash) o `execSync('<bin> --version', { stdio: 'ignore' })`
|
|
49
|
+
(Node) y caer al flujo nativo si no están
|
|
50
|
+
|
|
51
|
+
contexto_proyecto: >
|
|
52
|
+
Proyecto: {proyecto}. Fase: {fase}. Working directory: {cwd}.
|
|
53
|
+
|
|
54
|
+
referencia_planning: >
|
|
55
|
+
Antes de modificar archivos, lee `.planning/CONTEXTO.md`,
|
|
56
|
+
`.planning/ESTADO.md` y `CLAUDE.md` del proyecto. No editar
|
|
57
|
+
código que no se ha leído primero.
|
package/llms.txt
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# swl-ses (@saulwade/swl-ses)
|
|
2
2
|
|
|
3
|
-
> Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo), distribuido como paquete npm y plugin de Claude Code. 60 agentes, 182 habilidades, 44 comandos, 37 reglas base y
|
|
3
|
+
> Sistema de ingeniería de software auto-evolutivo multi-runtime polyglot (SDLC completo), distribuido como paquete npm y plugin de Claude Code. 60 agentes, 182 habilidades, 44 comandos, 37 reglas base y 50 hooks. Soporta 11 lenguajes y 7 runtimes (Claude Code, OpenClaude, OpenCode, Gemini, Cursor, Codex, Copilot). Versión 2.3.1.
|
|
4
4
|
|
|
5
5
|
Archivo generado por `node scripts/generar-inventario.js` — no editar a mano. Las cifras se sincronizan con INVENTARIO.md en cada regeneración.
|
|
6
6
|
|
|
@@ -20,7 +20,7 @@ Archivo generado por `node scripts/generar-inventario.js` — no editar a mano.
|
|
|
20
20
|
- 182 habilidades cargables bajo demanda en `habilidades/` (conocimiento operacional con divulgación progresiva)
|
|
21
21
|
- 44 comandos `/swl:*` en `comandos/swl/` (ciclo GSD, calidad, release, diagnóstico)
|
|
22
22
|
- 37 reglas base + 40 reglas por lenguaje en `reglas/` (políticas obligatorias por matcher)
|
|
23
|
-
-
|
|
23
|
+
- 50 hooks en `hooks/` (telemetría, validación, seguridad; zero-deps, escrituras atómicas)
|
|
24
24
|
|
|
25
25
|
## Opcional
|
|
26
26
|
|
|
@@ -1,57 +1,57 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"descripcion": "Schemas de output esperado por agente — formato compacto declarado en reglas/brevedad-output.md. El hook validar-formato-post-subagente.js usa estos patrones para detectar cuándo un agente devuelve output fuera de contrato.",
|
|
4
|
-
"version": "1.0.0",
|
|
5
|
-
"schemas": {
|
|
6
|
-
"revisor-codigo-swl": {
|
|
7
|
-
"descripcion": "Revisión de calidad — formato compacto",
|
|
8
|
-
"patronesRequeridos": [
|
|
9
|
-
"(?im)VEREDICTO\\s*:\\s*(APROBADO|APROBADO_CON_OBSERVACIONES|RECHAZADO|REQUIERE_CORRECCIONES|CUMPLE|PARCIAL|NO\\s+CUMPLE)",
|
|
10
|
-
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
11
|
-
"(?im)MAYORES\\s*:\\s*\\d+",
|
|
12
|
-
"(?im)MENORES\\s*:\\s*\\d+",
|
|
13
|
-
"(?im)HALLAZGOS\\s*:"
|
|
14
|
-
]
|
|
15
|
-
},
|
|
16
|
-
"revisor-seguridad-swl": {
|
|
17
|
-
"descripcion": "Revisión de seguridad OWASP — formato compacto",
|
|
18
|
-
"patronesRequeridos": [
|
|
19
|
-
"(?im)VEREDICTO\\s*:\\s*(APROBADO|APROBADO_CON_OBSERVACIONES|RECHAZADO|REQUIERE_CORRECCIONES)",
|
|
20
|
-
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
21
|
-
"(?im)MAYORES\\s*:\\s*\\d+",
|
|
22
|
-
"(?im)HALLAZGOS\\s*:"
|
|
23
|
-
]
|
|
24
|
-
},
|
|
25
|
-
"revisor-typescript-swl": {
|
|
26
|
-
"descripcion": "Revisión TypeScript — formato compacto",
|
|
27
|
-
"patronesRequeridos": [
|
|
28
|
-
"(?im)VEREDICTO\\s*:\\s*\\w+",
|
|
29
|
-
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
30
|
-
"(?im)HALLAZGOS\\s*:"
|
|
31
|
-
]
|
|
32
|
-
},
|
|
33
|
-
"revisor-react-swl": {
|
|
34
|
-
"descripcion": "Revisión React — formato compacto",
|
|
35
|
-
"patronesRequeridos": [
|
|
36
|
-
"(?im)VEREDICTO\\s*:\\s*\\w+",
|
|
37
|
-
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
38
|
-
"(?im)HALLAZGOS\\s*:"
|
|
39
|
-
]
|
|
40
|
-
},
|
|
41
|
-
"revisor-angular-swl": {
|
|
42
|
-
"descripcion": "Revisión Angular — formato compacto",
|
|
43
|
-
"patronesRequeridos": [
|
|
44
|
-
"(?im)VEREDICTO\\s*:\\s*\\w+",
|
|
45
|
-
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
46
|
-
"(?im)HALLAZGOS\\s*:"
|
|
47
|
-
]
|
|
48
|
-
},
|
|
49
|
-
"tdd-qa-swl": {
|
|
50
|
-
"descripcion": "QA con TDD — reporte de implementación",
|
|
51
|
-
"patronesRequeridos": [
|
|
52
|
-
"(?im)ESTADO\\s*:\\s*(COMPLETADO|PARCIAL|BLOQUEADO)",
|
|
53
|
-
"(?im)(SLICES|TESTS)\\s*:"
|
|
54
|
-
]
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"descripcion": "Schemas de output esperado por agente — formato compacto declarado en reglas/brevedad-output.md. El hook validar-formato-post-subagente.js usa estos patrones para detectar cuándo un agente devuelve output fuera de contrato.",
|
|
4
|
+
"version": "1.0.0",
|
|
5
|
+
"schemas": {
|
|
6
|
+
"revisor-codigo-swl": {
|
|
7
|
+
"descripcion": "Revisión de calidad — formato compacto",
|
|
8
|
+
"patronesRequeridos": [
|
|
9
|
+
"(?im)VEREDICTO\\s*:\\s*(APROBADO|APROBADO_CON_OBSERVACIONES|RECHAZADO|REQUIERE_CORRECCIONES|CUMPLE|PARCIAL|NO\\s+CUMPLE)",
|
|
10
|
+
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
11
|
+
"(?im)MAYORES\\s*:\\s*\\d+",
|
|
12
|
+
"(?im)MENORES\\s*:\\s*\\d+",
|
|
13
|
+
"(?im)HALLAZGOS\\s*:"
|
|
14
|
+
]
|
|
15
|
+
},
|
|
16
|
+
"revisor-seguridad-swl": {
|
|
17
|
+
"descripcion": "Revisión de seguridad OWASP — formato compacto",
|
|
18
|
+
"patronesRequeridos": [
|
|
19
|
+
"(?im)VEREDICTO\\s*:\\s*(APROBADO|APROBADO_CON_OBSERVACIONES|RECHAZADO|REQUIERE_CORRECCIONES)",
|
|
20
|
+
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
21
|
+
"(?im)MAYORES\\s*:\\s*\\d+",
|
|
22
|
+
"(?im)HALLAZGOS\\s*:"
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"revisor-typescript-swl": {
|
|
26
|
+
"descripcion": "Revisión TypeScript — formato compacto",
|
|
27
|
+
"patronesRequeridos": [
|
|
28
|
+
"(?im)VEREDICTO\\s*:\\s*\\w+",
|
|
29
|
+
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
30
|
+
"(?im)HALLAZGOS\\s*:"
|
|
31
|
+
]
|
|
32
|
+
},
|
|
33
|
+
"revisor-react-swl": {
|
|
34
|
+
"descripcion": "Revisión React — formato compacto",
|
|
35
|
+
"patronesRequeridos": [
|
|
36
|
+
"(?im)VEREDICTO\\s*:\\s*\\w+",
|
|
37
|
+
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
38
|
+
"(?im)HALLAZGOS\\s*:"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
"revisor-angular-swl": {
|
|
42
|
+
"descripcion": "Revisión Angular — formato compacto",
|
|
43
|
+
"patronesRequeridos": [
|
|
44
|
+
"(?im)VEREDICTO\\s*:\\s*\\w+",
|
|
45
|
+
"(?im)CR[IÍ]TICOS\\s*:\\s*\\d+",
|
|
46
|
+
"(?im)HALLAZGOS\\s*:"
|
|
47
|
+
]
|
|
48
|
+
},
|
|
49
|
+
"tdd-qa-swl": {
|
|
50
|
+
"descripcion": "QA con TDD — reporte de implementación",
|
|
51
|
+
"patronesRequeridos": [
|
|
52
|
+
"(?im)ESTADO\\s*:\\s*(COMPLETADO|PARCIAL|BLOQUEADO)",
|
|
53
|
+
"(?im)(SLICES|TESTS)\\s*:"
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|