@saulwade/swl-ses 2.6.0 → 2.8.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.md +209 -197
- package/README.md +647 -600
- package/agentes/accesibilidad-wcag-swl.md +690 -690
- package/agentes/arquitecto-swl.md +267 -267
- package/agentes/auto-evolucion-swl.md +932 -932
- 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-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/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/investigador-swl.md +432 -432
- package/agentes/investigador-ux-swl.md +505 -505
- 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/observabilidad-swl.md +438 -438
- 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 +218 -218
- package/agentes/release-manager-swl.md +590 -590
- package/agentes/rendimiento-swl.md +713 -713
- package/agentes/revisor-angular-swl.md +278 -278
- 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/tdd-qa-swl.md +393 -393
- package/bin/swl-ses.js +10 -0
- package/comandos/swl/actualizar.md +174 -174
- package/comandos/swl/adoptar-proyecto.md +265 -265
- package/comandos/swl/aprender.md +836 -836
- package/comandos/swl/aprobar-plan.md +146 -146
- package/comandos/swl/auditar-deps.md +134 -134
- package/comandos/swl/autoresearch.md +264 -264
- package/comandos/swl/ayuda.md +224 -224
- package/comandos/swl/brainstorm.md +52 -51
- package/comandos/swl/checkpoint.md +325 -325
- package/comandos/swl/claudemd.md +234 -234
- package/comandos/swl/compactar.md +310 -310
- package/comandos/swl/configurar-ci.md +235 -235
- package/comandos/swl/contexto.md +110 -110
- package/comandos/swl/crear-skill.md +292 -292
- package/comandos/swl/cron.md +194 -194
- package/comandos/swl/deuda-codigo.md +97 -97
- package/comandos/swl/discutir-fase.md +169 -169
- package/comandos/swl/ejecutar-fase.md +233 -233
- package/comandos/swl/evaluar-skill.md +520 -520
- package/comandos/swl/evolucion-continua.md +73 -73
- package/comandos/swl/evolucionar.md +267 -267
- package/comandos/swl/exportar-vault.md +583 -583
- package/comandos/swl/fix.md +118 -118
- package/comandos/swl/gateway.md +158 -158
- package/comandos/swl/inbox.md +116 -116
- package/comandos/swl/instalar.md +220 -220
- package/comandos/swl/instintos.md +86 -86
- package/comandos/swl/mapear-codebase.md +312 -312
- package/comandos/swl/mcp-status.md +176 -175
- package/comandos/swl/modelo.md +100 -100
- package/comandos/swl/nemesis.md +433 -433
- package/comandos/swl/notificaciones.md +299 -299
- package/comandos/swl/nuevo-proyecto.md +251 -251
- package/comandos/swl/planear-fase.md +263 -263
- package/comandos/swl/plugins.md +256 -256
- package/comandos/swl/predecir.md +169 -169
- package/comandos/swl/reflect-skills.md +125 -125
- package/comandos/swl/release.md +450 -450
- package/comandos/swl/revisar-impacto.md +201 -201
- package/comandos/swl/revisar.md +330 -330
- package/comandos/swl/seguridad.md +189 -189
- package/comandos/swl/sesiones.md +200 -200
- package/comandos/swl/skill-search.md +113 -113
- package/comandos/swl/status.md +345 -345
- package/comandos/swl/verificar.md +817 -817
- package/comandos/swl/wiki.md +620 -620
- package/gateway/cron/jobs.example.json +12 -12
- package/gateway/lib/event-channel.js +191 -191
- package/habilidades/agent-deep-links/SKILL.md +148 -148
- package/habilidades/auto-evolucion-protocolo/SKILL.md +294 -294
- package/habilidades/backend-async-postgres-testing/SKILL.md +216 -215
- package/habilidades/backend-error-design/SKILL.md +221 -221
- package/habilidades/backend-production-resilience/SKILL.md +288 -288
- package/habilidades/calidad-anti-patrones-universales/SKILL.md +105 -1
- package/habilidades/calidad-contract-testing/SKILL.md +165 -165
- package/habilidades/calidad-mutation-testing/SKILL.md +25 -1
- package/habilidades/changelog-generator/SKILL.md +174 -174
- package/habilidades/checklist-seguridad/recursos/stride-cobertura.md +60 -60
- package/habilidades/ci-cd-pipelines/SKILL.md +5 -1
- package/habilidades/compactacion-contexto/SKILL.md +2 -1
- package/habilidades/contenedores-docker/SKILL.md +4 -2
- package/habilidades/css-moderno/SKILL.md +7 -1
- package/habilidades/diagrama-arquitectura/assets/template.html +276 -276
- package/habilidades/doubt-driven-review/SKILL.md +207 -207
- package/habilidades/doubt-driven-review/recursos/EXAMPLES.md +130 -130
- package/habilidades/drift-detection/SKILL.md +1 -1
- package/habilidades/ejecutar-task-iterativo/SKILL.md +278 -278
- package/habilidades/estructura-proyecto-claude/recursos/mcp-json-template.json +57 -57
- package/habilidades/extractor-de-aprendizajes/SKILL.md +12 -2
- package/habilidades/feynman-auditor-swl/recursos/preguntas-language-agnostic.md +108 -108
- package/habilidades/git-worktrees-paralelo/SKILL.md +19 -1
- package/habilidades/harness-claude-code/SKILL.md +315 -314
- package/habilidades/instalar-sistema/SKILL.md +227 -227
- 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 +358 -358
- package/habilidades/prevencion-sobreingenieria/recursos/EXAMPLES.md +580 -580
- package/habilidades/proceso-ddia-streaming/SKILL.md +231 -231
- package/habilidades/proceso-discovery-machote/SKILL.md +157 -157
- package/habilidades/proceso-dynamic-workflows/SKILL.md +60 -0
- 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-ingenieria-requerimientos/SKILL.md +147 -147
- package/habilidades/proceso-intent-engineering/SKILL.md +269 -269
- package/habilidades/proceso-modular-split/SKILL.md +256 -256
- package/habilidades/release-semver/SKILL.md +2 -2
- package/habilidades/state-inconsistency-auditor-swl/recursos/coupled-state-patterns.md +147 -147
- 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/tdd-workflow/SKILL.md +749 -749
- package/habilidades/tdd-workflow/recursos/gherkin-bdd.md +111 -111
- package/hooks/agente-lifecycle.js +1 -1
- package/hooks/audit-trail.js +1 -1
- package/hooks/auto-consolidacion.js +1 -1
- package/hooks/calidad-pre-commit.js +159 -10
- package/hooks/captura-acciones-post.js +1 -1
- package/hooks/captura-acciones-session.js +1 -1
- package/hooks/captura-feedback-usuario.js +1 -1
- package/hooks/ciclo-evolucion-subagente.js +26 -26
- package/hooks/ciclo-evolucion.js +26 -26
- package/hooks/contexto-iteracion.js +1 -1
- package/hooks/degradacion-instintos.js +1 -1
- package/hooks/grafo-contexto.js +1 -1
- package/hooks/guardrail-modelo.js +1 -1
- package/hooks/inbox-aviso.js +1 -1
- package/hooks/inyeccion-contexto.js +1 -1
- package/hooks/lib/agent-matcher.js +1 -1
- package/hooks/lib/agent-routing.js +1 -1
- package/hooks/lib/auto-consolidator.js +335 -335
- package/hooks/lib/captura-acciones.js +1 -1
- 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-metricas.js +1 -1
- package/hooks/lib/evolution-tracker.js +1 -1
- package/hooks/lib/gateway-notify.js +193 -193
- package/hooks/lib/mcp-health.js +1 -1
- package/hooks/lib/notificacion-formato.js +92 -0
- package/hooks/lib/nudge-tracker.js +1 -1
- package/hooks/lib/otlp-exporter.js +1 -1
- package/hooks/lib/propose-step.js +1 -1
- package/hooks/lib/provenance-tracker.js +191 -191
- package/hooks/lib/raiz-proyecto.js +158 -102
- package/hooks/lib/resource-quota.js +122 -122
- package/hooks/lib/retry-jitter.js +165 -165
- package/hooks/lib/run-log.js +1 -1
- package/hooks/lib/security-net.js +201 -201
- package/hooks/lib/singleton-guard.js +20 -13
- 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/telegram-cliente.js +11 -3
- package/hooks/lib/text-similarity.js +241 -241
- package/hooks/lib/toon-compressor.js +245 -245
- package/hooks/notificacion-telegram.js +17 -13
- package/hooks/preservar-estado-pre-compact.js +1 -1
- package/hooks/registro-turnos.js +1 -1
- package/hooks/resumen-sesion.js +1 -1
- package/hooks/risk-scoring.js +1 -1
- package/hooks/session-briefing.js +13 -5
- package/hooks/spec-gate.js +1 -1
- package/hooks/sugerir-regenerar-inventario.js +1 -1
- package/hooks/tdd-gate.js +1 -1
- package/hooks/telemetria-agentes.js +1 -1
- package/hooks/telemetria-skill-routing.js +1 -1
- package/hooks/tracking-costos.js +1 -1
- package/hooks/validar-formato-post-subagente.js +1 -1
- package/hooks/validar-intent-spec.js +1 -1
- package/hooks/validar-planning-paths.js +1 -1
- package/instintos/autonomia.yaml +27 -27
- package/instintos/prompt-appendices.yaml +57 -57
- package/llms.txt +29 -29
- package/manifiestos/agent-output-schemas.json +57 -57
- package/manifiestos/canonical-hashes.json +6250 -5257
- package/manifiestos/harness-ir.json +47536 -0
- package/manifiestos/modulos.json +1429 -1428
- package/manifiestos/policy-bundle.json +2065 -0
- package/manifiestos/policy-corpus-w2.json +3926 -0
- package/manifiestos/runtime-adapters-core3.json +208 -0
- package/manifiestos/runtime-conformance.json +139 -0
- package/manifiestos/skills-lock.json +1275 -1275
- package/package.json +94 -94
- package/plantillas/auditor-veto-template.md +105 -105
- 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 +369 -369
- package/reglas/accesibilidad.md +10 -10
- 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/git-workflow.md +1 -0
- package/reglas/hooks.md +6 -6
- package/reglas/intent-engineering.md +218 -218
- package/reglas/markitdown.md +8 -8
- package/reglas/monitor-ci.md +12 -0
- package/reglas/patrones.md +6 -6
- package/reglas/testing.md +7 -7
- package/reglas/tests-cleanup.md +224 -224
- 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/gate-state.schema.json +76 -0
- package/schemas/harness-ir.schema.json +369 -0
- package/schemas/hook-profiles.schema.json +54 -54
- package/schemas/hooks-config.schema.json +89 -89
- package/schemas/legacy-gates.schema.json +45 -0
- package/schemas/modulos.schema.json +38 -38
- package/schemas/perfiles.schema.json +36 -36
- package/schemas/plugin.schema.json +77 -77
- package/schemas/policy-bundle.schema.json +140 -0
- package/schemas/policy-enforcement.schema.json +117 -0
- package/schemas/policy-operation.schema.json +261 -0
- package/schemas/runtime-adapter.schema.json +176 -0
- package/schemas/runtime-build-attestation.schema.json +100 -0
- package/schemas/runtime-conformance.schema.json +239 -0
- package/schemas/runtime-diagnostic.schema.json +395 -0
- package/schemas/skill-evals.schema.json +119 -119
- package/schemas/skill-frontmatter.schema.json +245 -245
- package/schemas/w4-certification-request.schema.json +72 -0
- package/schemas/w4-certification-verdict.schema.json +224 -0
- package/schemas/w4-corpus.schema.json +172 -0
- package/schemas/w4-mutation-report.schema.json +116 -0
- package/schemas/w4-replay-result.schema.json +164 -0
- package/schemas/w4-scoring-report.schema.json +89 -0
- 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/auditar-clases-conocidas.js +134 -134
- package/scripts/bootstrap-instintos.js +88 -14
- package/scripts/canario-hooks.js +166 -166
- package/scripts/cli/aprobar-plan.js +73 -73
- package/scripts/cli/autonomia.js +23 -23
- package/scripts/cli/benchmark-memoria.js +37 -37
- package/scripts/cli/briefing.js +23 -23
- package/scripts/cli/ciclo-autonomo.js +73 -73
- package/scripts/cli/ciclo-evolucion.js +26 -26
- package/scripts/cli/ciclo-fase-b.js +102 -102
- 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/guardrail-metrics.js +39 -39
- package/scripts/cli/liberar-fase.js +42 -42
- package/scripts/cli/mark-evolved.js +56 -56
- package/scripts/cli/memoria-search.js +69 -69
- 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/nudge-accionar.js +39 -39
- package/scripts/cli/propose-step.js +29 -29
- package/scripts/cli/run-eval.js +38 -38
- 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/comandos/install-asistido.js +8 -7
- package/scripts/configurar-branch-protection.js +418 -418
- package/scripts/detectar-aprendizajes-duplicados.js +151 -151
- package/scripts/doctor.js +61 -13
- package/scripts/evidencia-valor.js +101 -101
- package/scripts/field-report.js +16 -16
- package/scripts/generar-checklists-consolidados.js +273 -273
- package/scripts/generar-claims-runtime.js +1342 -0
- package/scripts/generar-harness-ir.js +257 -0
- package/scripts/generar-inventario.js +52 -54
- package/scripts/generar-policy-bundle.js +202 -0
- package/scripts/instalador.js +39 -7
- package/scripts/lib/activar-hooks-proyecto.js +116 -116
- package/scripts/lib/approval-receipts.js +190 -0
- package/scripts/lib/artefactos-python.js +43 -43
- package/scripts/lib/benchmark-metrics.js +160 -160
- package/scripts/lib/budget-enforcer.js +252 -252
- package/scripts/lib/certificacion-loop-state.js +421 -0
- package/scripts/lib/ci-reader.js +193 -193
- package/scripts/lib/ciclo-autonomo/candidatos.js +174 -174
- package/scripts/lib/ciclo-autonomo/config.js +165 -165
- package/scripts/lib/ciclo-autonomo/drenador-feedback.js +174 -174
- package/scripts/lib/ciclo-autonomo/fallback.js +77 -77
- package/scripts/lib/ciclo-autonomo/guard-convivencia.js +139 -139
- package/scripts/lib/ciclo-autonomo/higiene-nudges.js +112 -112
- package/scripts/lib/ciclo-autonomo/index.js +301 -301
- package/scripts/lib/ciclo-autonomo/lock.js +124 -124
- package/scripts/lib/ciclo-autonomo/presupuesto.js +122 -122
- package/scripts/lib/ciclo-autonomo/puente-degradacion.js +240 -240
- package/scripts/lib/ciclo-autonomo/runner-fase-b.js +248 -248
- package/scripts/lib/ciclo-autonomo/writer-instintos.js +190 -190
- package/scripts/lib/ciclo-autonomo/yaml-instintos.js +591 -535
- package/scripts/lib/clasificar-directorio.js +92 -0
- package/scripts/lib/contadores-inventario.js +217 -217
- package/scripts/lib/detectar-host-swl.js +175 -175
- package/scripts/lib/detectar-runtime.js +29 -20
- 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/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/evidence-verifier.js +192 -0
- package/scripts/lib/evidencia-release.js +322 -322
- package/scripts/lib/evidencia-valor.js +228 -228
- package/scripts/lib/expandir-targets.js +71 -71
- package/scripts/lib/frontmatter-canonico.js +509 -0
- package/scripts/lib/gate-engine.js +871 -0
- package/scripts/lib/gate-hooks-requires.js +249 -249
- package/scripts/lib/gate-licencias.js +212 -212
- package/scripts/lib/git-config-preflight.js +48 -0
- package/scripts/lib/git-metricas.js +257 -257
- package/scripts/lib/harness-ir.js +778 -0
- package/scripts/lib/harness-source-snapshot.js +309 -0
- package/scripts/lib/integrity-ledger.js +1147 -0
- package/scripts/lib/jaccard-similarity.js +98 -98
- package/scripts/lib/legacy-gate-migration.js +324 -0
- package/scripts/lib/limpiar-basura-global.js +204 -0
- package/scripts/lib/longmemeval-runner.js +125 -125
- package/scripts/lib/metricas-dora.js +204 -204
- package/scripts/lib/notificaciones-telegram.js +1 -0
- package/scripts/lib/npm-version.js +1 -0
- package/scripts/lib/paquetes-conocidos.js +50 -50
- package/scripts/lib/plan-lock.js +61 -13
- package/scripts/lib/policy-broker.js +338 -0
- package/scripts/lib/policy-bundle.js +342 -0
- package/scripts/lib/policy-context-provider.js +310 -0
- package/scripts/lib/policy-contract.js +479 -0
- package/scripts/lib/policy-verifier-utils.js +65 -0
- package/scripts/lib/pr-analyzer.js +399 -399
- package/scripts/lib/principal-verifier.js +178 -0
- package/scripts/lib/prompt-builder.js +264 -264
- package/scripts/lib/resolver-plan-fase.js +37 -37
- package/scripts/lib/rrf-fusion.js +175 -175
- package/scripts/lib/runtime-adapter-contract.js +267 -0
- package/scripts/lib/runtime-artifact-verifier.js +426 -0
- package/scripts/lib/runtime-build-attestation.js +127 -0
- package/scripts/lib/runtime-bundle-installer.js +586 -0
- package/scripts/lib/runtime-compiler.js +327 -0
- package/scripts/lib/runtime-conformance.js +202 -0
- package/scripts/lib/runtime-doctor-core3.js +567 -0
- package/scripts/lib/runtime-doctor-input.js +59 -0
- package/scripts/lib/runtime-operation-adapter.js +267 -0
- package/scripts/lib/schema-version.js +164 -164
- package/scripts/lib/semantic-search.js +252 -252
- package/scripts/lib/signed-envelope.js +545 -0
- package/scripts/lib/single-use-store.js +359 -0
- package/scripts/lib/skills-externas.js +31 -0
- package/scripts/lib/toml-merge.js +204 -204
- package/scripts/lib/transformadores/codex.js +15 -8
- package/scripts/lib/transformadores/gemini.js +79 -5
- package/scripts/lib/w4-attestation-adapter.js +158 -0
- package/scripts/lib/w4-canario.js +337 -0
- package/scripts/lib/w4-claims.js +182 -0
- package/scripts/lib/w4-corpus-generador.js +542 -0
- package/scripts/lib/w4-gate-c5.js +115 -0
- package/scripts/lib/w4-harness-bajo-prueba.js +155 -0
- package/scripts/lib/w4-matriz-combos.js +55 -0
- package/scripts/lib/w4-motor-mutacion.js +1348 -0
- package/scripts/lib/w4-motor-replay.js +735 -0
- package/scripts/lib/w4-pin-origen.js +54 -0
- package/scripts/lib/w4-publicar-request.js +132 -0
- package/scripts/lib/w4-revocacion.js +62 -0
- package/scripts/lib/w4-runtimes-core3.js +38 -0
- package/scripts/lib/w4-scorer-certificacion.js +692 -0
- package/scripts/lib/w4-superficie-candidato.js +49 -0
- package/scripts/lib/w4-veredicto.js +452 -0
- package/scripts/lib/w4-verificar-veredicto.js +302 -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/migrar-gates-legacy.js +108 -0
- package/scripts/publicar-certification-request.js +115 -0
- package/scripts/runtime-doctor.js +107 -0
- 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/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/install-wizard.js +408 -403
- 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/validar-userland-vacio.js +110 -110
- package/scripts/verificar-aislamiento-swl-eval.js +87 -0
- package/scripts/verificar-empaquetado-downstream.js +375 -0
- package/scripts/verificar-loop-constructor.js +215 -0
- package/scripts/verificar-trazabilidad.js +13 -6
- package/scripts/verificar-veredicto-real.js +84 -0
- package/instintos/.backups/perfil-usuario.yaml.2026-07-10-165128.bak +0 -53
- package/instintos/.backups/proyecto.yaml.2026-07-10-165128.bak +0 -372
|
@@ -1,175 +1,175 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* detectar-host-swl.js
|
|
5
|
-
*
|
|
6
|
-
* Determina si un directorio es el REPO HOST del sistema SWL (donde viven los
|
|
7
|
-
* componentes: agentes/, habilidades/, comandos/swl/, reglas/, hooks/) o un
|
|
8
|
-
* PROYECTO CONSUMIDOR que solo usa las convenciones SWL vía `~/.claude/`.
|
|
9
|
-
*
|
|
10
|
-
* Motivación: `/swl:status salud` audita los componentes del sistema SWL con un
|
|
11
|
-
* score ponderado (agentes×0.30 + skills×0.25 + comandos×0.20 + reglas×0.15 +
|
|
12
|
-
* hooks×0.10). En un proyecto consumidor esos directorios no existen → el score
|
|
13
|
-
* sería 0/100, señal falsa. Antes esta distinción dependía del juicio del agente
|
|
14
|
-
* de turno; este módulo la vuelve determinista (regla: salud usa verificaciones
|
|
15
|
-
* deterministas, no juicio subjetivo).
|
|
16
|
-
*
|
|
17
|
-
* Función pura zero-deps. Entrypoint CLI con `--json` para consumo desde el
|
|
18
|
-
* comando /swl:status salud.
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
const fs = require('node:fs');
|
|
22
|
-
const path = require('node:path');
|
|
23
|
-
|
|
24
|
-
// Marca canónica del paquete en plugin.json (acepta forma con y sin scope npm).
|
|
25
|
-
const NOMBRES_HOST = new Set(['swl-ses', '@saulwade/swl-ses']);
|
|
26
|
-
|
|
27
|
-
// Subcomandos de /swl:status que SÍ aplican a un proyecto consumidor.
|
|
28
|
-
const SUGERENCIAS_CONSUMIDOR = [
|
|
29
|
-
'/swl:status metricas — tokens/costo de la sesión actual',
|
|
30
|
-
'/swl:status metricas fases — progreso de fases (si usa .planning/HOJA-RUTA.md)',
|
|
31
|
-
'/swl:status loops — telemetría de loops iterativos',
|
|
32
|
-
'/swl:status evolucion — ciclo de auto-evolución (si corre en este proyecto)',
|
|
33
|
-
'/swl:status dashboard — consumo multi-sesión',
|
|
34
|
-
];
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Cuenta archivos de un componente sin recursión profunda innecesaria.
|
|
38
|
-
* @returns {number}
|
|
39
|
-
*/
|
|
40
|
-
function contarComponente(baseDir, rel, filtro) {
|
|
41
|
-
const dir = path.join(baseDir, rel);
|
|
42
|
-
let entradas;
|
|
43
|
-
try {
|
|
44
|
-
entradas = fs.readdirSync(dir, { withFileTypes: true });
|
|
45
|
-
} catch {
|
|
46
|
-
return 0;
|
|
47
|
-
}
|
|
48
|
-
return entradas.filter((e) => filtro(e)).length;
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Cuenta los 5 componentes del sistema SWL en baseDir.
|
|
53
|
-
* @returns {{agentes:number, habilidades:number, comandos:number, reglas:number, hooks:number}}
|
|
54
|
-
*/
|
|
55
|
-
function contarComponentes(baseDir) {
|
|
56
|
-
return {
|
|
57
|
-
// Agentes: agentes/*.md excluyendo fragmentos compartidos (_*.md).
|
|
58
|
-
agentes: contarComponente(
|
|
59
|
-
baseDir,
|
|
60
|
-
'agentes',
|
|
61
|
-
(e) => e.isFile() && e.name.endsWith('.md') && !e.name.startsWith('_')
|
|
62
|
-
),
|
|
63
|
-
// Skills: habilidades/<nombre>/ (cada subdirectorio es un skill).
|
|
64
|
-
habilidades: contarComponente(baseDir, 'habilidades', (e) => e.isDirectory()),
|
|
65
|
-
// Comandos: comandos/swl/*.md.
|
|
66
|
-
comandos: contarComponente(
|
|
67
|
-
baseDir,
|
|
68
|
-
path.join('comandos', 'swl'),
|
|
69
|
-
(e) => e.isFile() && e.name.endsWith('.md')
|
|
70
|
-
),
|
|
71
|
-
// Reglas: reglas/*.md (base; las por-lenguaje viven en subdirectorios).
|
|
72
|
-
reglas: contarComponente(
|
|
73
|
-
baseDir,
|
|
74
|
-
'reglas',
|
|
75
|
-
(e) => e.isFile() && e.name.endsWith('.md')
|
|
76
|
-
),
|
|
77
|
-
// Hooks: hooks/*.js.
|
|
78
|
-
hooks: contarComponente(
|
|
79
|
-
baseDir,
|
|
80
|
-
'hooks',
|
|
81
|
-
(e) => e.isFile() && e.name.endsWith('.js')
|
|
82
|
-
),
|
|
83
|
-
};
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Lee el nombre declarado en plugin.json si existe y es legible.
|
|
88
|
-
* @returns {string|null}
|
|
89
|
-
*/
|
|
90
|
-
function leerNombrePlugin(baseDir) {
|
|
91
|
-
try {
|
|
92
|
-
const raw = fs.readFileSync(path.join(baseDir, 'plugin.json'), 'utf-8');
|
|
93
|
-
const json = JSON.parse(raw);
|
|
94
|
-
return typeof json.name === 'string' ? json.name : null;
|
|
95
|
-
} catch {
|
|
96
|
-
return null;
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* Detecta si baseDir es el repo host del sistema SWL.
|
|
102
|
-
*
|
|
103
|
-
* Criterio (cualquiera de los dos basta):
|
|
104
|
-
* 1. plugin.json con name ∈ {swl-ses, @saulwade/swl-ses}.
|
|
105
|
-
* 2. Presencia de los 3 directorios nucleares de componentes con contenido
|
|
106
|
-
* (agentes/, habilidades/, comandos/swl/) — cubre forks renombrados.
|
|
107
|
-
*
|
|
108
|
-
* @param {string} [baseDir=process.cwd()]
|
|
109
|
-
* @returns {{esHost:boolean, razon:string, nombrePlugin:(string|null),
|
|
110
|
-
* componentes:object, sugerencias:string[]}}
|
|
111
|
-
*/
|
|
112
|
-
function detectarHostSwl(baseDir = process.cwd()) {
|
|
113
|
-
const nombrePlugin = leerNombrePlugin(baseDir);
|
|
114
|
-
const componentes = contarComponentes(baseDir);
|
|
115
|
-
|
|
116
|
-
const tienePluginHost = nombrePlugin !== null && NOMBRES_HOST.has(nombrePlugin);
|
|
117
|
-
const tieneNucleo =
|
|
118
|
-
componentes.agentes > 0 &&
|
|
119
|
-
componentes.habilidades > 0 &&
|
|
120
|
-
componentes.comandos > 0;
|
|
121
|
-
|
|
122
|
-
const esHost = tienePluginHost || tieneNucleo;
|
|
123
|
-
|
|
124
|
-
let razon;
|
|
125
|
-
if (tienePluginHost) {
|
|
126
|
-
razon = `plugin.json declara name="${nombrePlugin}" (repo host del sistema SWL).`;
|
|
127
|
-
} else if (tieneNucleo) {
|
|
128
|
-
razon =
|
|
129
|
-
'Presencia de componentes nucleares (agentes/, habilidades/, comandos/swl/) ' +
|
|
130
|
-
'sin plugin.json canónico — posible fork del sistema SWL.';
|
|
131
|
-
} else {
|
|
132
|
-
razon =
|
|
133
|
-
'Sin plugin.json del sistema y sin directorios de componentes ' +
|
|
134
|
-
'(agentes/, habilidades/, comandos/swl/): proyecto consumidor de SWL, ' +
|
|
135
|
-
'no host. El subcomando `salud` audita componentes que aquí no existen ' +
|
|
136
|
-
'por diseño — un score 0/100 sería engañoso.';
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
return {
|
|
140
|
-
esHost,
|
|
141
|
-
razon,
|
|
142
|
-
nombrePlugin,
|
|
143
|
-
componentes,
|
|
144
|
-
sugerencias: esHost ? [] : SUGERENCIAS_CONSUMIDOR.slice(),
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
|
|
148
|
-
module.exports = {
|
|
149
|
-
detectarHostSwl,
|
|
150
|
-
contarComponentes,
|
|
151
|
-
NOMBRES_HOST,
|
|
152
|
-
SUGERENCIAS_CONSUMIDOR,
|
|
153
|
-
};
|
|
154
|
-
|
|
155
|
-
// Entrypoint CLI: `node scripts/lib/detectar-host-swl.js [--json] [baseDir]`
|
|
156
|
-
if (!require.main || require.main === module) {
|
|
157
|
-
const args = process.argv.slice(2);
|
|
158
|
-
const json = args.includes('--json');
|
|
159
|
-
const dirArg = args.find((a) => !a.startsWith('--'));
|
|
160
|
-
const resultado = detectarHostSwl(dirArg || process.cwd());
|
|
161
|
-
|
|
162
|
-
if (json) {
|
|
163
|
-
process.stdout.write(JSON.stringify(resultado, null, 2) + '\n');
|
|
164
|
-
} else if (resultado.esHost) {
|
|
165
|
-
process.stdout.write(`[host] ${resultado.razon}\n`);
|
|
166
|
-
} else {
|
|
167
|
-
process.stdout.write(`[consumidor] ${resultado.razon}\n`);
|
|
168
|
-
process.stdout.write('Subcomandos de /swl:status aplicables aquí:\n');
|
|
169
|
-
for (const s of resultado.sugerencias) {
|
|
170
|
-
process.stdout.write(` - ${s}\n`);
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
// Exit 0 siempre: es diagnóstico, no gate bloqueante.
|
|
174
|
-
process.exit(0);
|
|
175
|
-
}
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* detectar-host-swl.js
|
|
5
|
+
*
|
|
6
|
+
* Determina si un directorio es el REPO HOST del sistema SWL (donde viven los
|
|
7
|
+
* componentes: agentes/, habilidades/, comandos/swl/, reglas/, hooks/) o un
|
|
8
|
+
* PROYECTO CONSUMIDOR que solo usa las convenciones SWL vía `~/.claude/`.
|
|
9
|
+
*
|
|
10
|
+
* Motivación: `/swl:status salud` audita los componentes del sistema SWL con un
|
|
11
|
+
* score ponderado (agentes×0.30 + skills×0.25 + comandos×0.20 + reglas×0.15 +
|
|
12
|
+
* hooks×0.10). En un proyecto consumidor esos directorios no existen → el score
|
|
13
|
+
* sería 0/100, señal falsa. Antes esta distinción dependía del juicio del agente
|
|
14
|
+
* de turno; este módulo la vuelve determinista (regla: salud usa verificaciones
|
|
15
|
+
* deterministas, no juicio subjetivo).
|
|
16
|
+
*
|
|
17
|
+
* Función pura zero-deps. Entrypoint CLI con `--json` para consumo desde el
|
|
18
|
+
* comando /swl:status salud.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const fs = require('node:fs');
|
|
22
|
+
const path = require('node:path');
|
|
23
|
+
|
|
24
|
+
// Marca canónica del paquete en plugin.json (acepta forma con y sin scope npm).
|
|
25
|
+
const NOMBRES_HOST = new Set(['swl-ses', '@saulwade/swl-ses']);
|
|
26
|
+
|
|
27
|
+
// Subcomandos de /swl:status que SÍ aplican a un proyecto consumidor.
|
|
28
|
+
const SUGERENCIAS_CONSUMIDOR = [
|
|
29
|
+
'/swl:status metricas — tokens/costo de la sesión actual',
|
|
30
|
+
'/swl:status metricas fases — progreso de fases (si usa .planning/HOJA-RUTA.md)',
|
|
31
|
+
'/swl:status loops — telemetría de loops iterativos',
|
|
32
|
+
'/swl:status evolucion — ciclo de auto-evolución (si corre en este proyecto)',
|
|
33
|
+
'/swl:status dashboard — consumo multi-sesión',
|
|
34
|
+
];
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Cuenta archivos de un componente sin recursión profunda innecesaria.
|
|
38
|
+
* @returns {number}
|
|
39
|
+
*/
|
|
40
|
+
function contarComponente(baseDir, rel, filtro) {
|
|
41
|
+
const dir = path.join(baseDir, rel);
|
|
42
|
+
let entradas;
|
|
43
|
+
try {
|
|
44
|
+
entradas = fs.readdirSync(dir, { withFileTypes: true });
|
|
45
|
+
} catch {
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
return entradas.filter((e) => filtro(e)).length;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Cuenta los 5 componentes del sistema SWL en baseDir.
|
|
53
|
+
* @returns {{agentes:number, habilidades:number, comandos:number, reglas:number, hooks:number}}
|
|
54
|
+
*/
|
|
55
|
+
function contarComponentes(baseDir) {
|
|
56
|
+
return {
|
|
57
|
+
// Agentes: agentes/*.md excluyendo fragmentos compartidos (_*.md).
|
|
58
|
+
agentes: contarComponente(
|
|
59
|
+
baseDir,
|
|
60
|
+
'agentes',
|
|
61
|
+
(e) => e.isFile() && e.name.endsWith('.md') && !e.name.startsWith('_')
|
|
62
|
+
),
|
|
63
|
+
// Skills: habilidades/<nombre>/ (cada subdirectorio es un skill).
|
|
64
|
+
habilidades: contarComponente(baseDir, 'habilidades', (e) => e.isDirectory()),
|
|
65
|
+
// Comandos: comandos/swl/*.md.
|
|
66
|
+
comandos: contarComponente(
|
|
67
|
+
baseDir,
|
|
68
|
+
path.join('comandos', 'swl'),
|
|
69
|
+
(e) => e.isFile() && e.name.endsWith('.md')
|
|
70
|
+
),
|
|
71
|
+
// Reglas: reglas/*.md (base; las por-lenguaje viven en subdirectorios).
|
|
72
|
+
reglas: contarComponente(
|
|
73
|
+
baseDir,
|
|
74
|
+
'reglas',
|
|
75
|
+
(e) => e.isFile() && e.name.endsWith('.md')
|
|
76
|
+
),
|
|
77
|
+
// Hooks: hooks/*.js.
|
|
78
|
+
hooks: contarComponente(
|
|
79
|
+
baseDir,
|
|
80
|
+
'hooks',
|
|
81
|
+
(e) => e.isFile() && e.name.endsWith('.js')
|
|
82
|
+
),
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Lee el nombre declarado en plugin.json si existe y es legible.
|
|
88
|
+
* @returns {string|null}
|
|
89
|
+
*/
|
|
90
|
+
function leerNombrePlugin(baseDir) {
|
|
91
|
+
try {
|
|
92
|
+
const raw = fs.readFileSync(path.join(baseDir, 'plugin.json'), 'utf-8');
|
|
93
|
+
const json = JSON.parse(raw);
|
|
94
|
+
return typeof json.name === 'string' ? json.name : null;
|
|
95
|
+
} catch {
|
|
96
|
+
return null;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Detecta si baseDir es el repo host del sistema SWL.
|
|
102
|
+
*
|
|
103
|
+
* Criterio (cualquiera de los dos basta):
|
|
104
|
+
* 1. plugin.json con name ∈ {swl-ses, @saulwade/swl-ses}.
|
|
105
|
+
* 2. Presencia de los 3 directorios nucleares de componentes con contenido
|
|
106
|
+
* (agentes/, habilidades/, comandos/swl/) — cubre forks renombrados.
|
|
107
|
+
*
|
|
108
|
+
* @param {string} [baseDir=process.cwd()]
|
|
109
|
+
* @returns {{esHost:boolean, razon:string, nombrePlugin:(string|null),
|
|
110
|
+
* componentes:object, sugerencias:string[]}}
|
|
111
|
+
*/
|
|
112
|
+
function detectarHostSwl(baseDir = process.cwd()) {
|
|
113
|
+
const nombrePlugin = leerNombrePlugin(baseDir);
|
|
114
|
+
const componentes = contarComponentes(baseDir);
|
|
115
|
+
|
|
116
|
+
const tienePluginHost = nombrePlugin !== null && NOMBRES_HOST.has(nombrePlugin);
|
|
117
|
+
const tieneNucleo =
|
|
118
|
+
componentes.agentes > 0 &&
|
|
119
|
+
componentes.habilidades > 0 &&
|
|
120
|
+
componentes.comandos > 0;
|
|
121
|
+
|
|
122
|
+
const esHost = tienePluginHost || tieneNucleo;
|
|
123
|
+
|
|
124
|
+
let razon;
|
|
125
|
+
if (tienePluginHost) {
|
|
126
|
+
razon = `plugin.json declara name="${nombrePlugin}" (repo host del sistema SWL).`;
|
|
127
|
+
} else if (tieneNucleo) {
|
|
128
|
+
razon =
|
|
129
|
+
'Presencia de componentes nucleares (agentes/, habilidades/, comandos/swl/) ' +
|
|
130
|
+
'sin plugin.json canónico — posible fork del sistema SWL.';
|
|
131
|
+
} else {
|
|
132
|
+
razon =
|
|
133
|
+
'Sin plugin.json del sistema y sin directorios de componentes ' +
|
|
134
|
+
'(agentes/, habilidades/, comandos/swl/): proyecto consumidor de SWL, ' +
|
|
135
|
+
'no host. El subcomando `salud` audita componentes que aquí no existen ' +
|
|
136
|
+
'por diseño — un score 0/100 sería engañoso.';
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
return {
|
|
140
|
+
esHost,
|
|
141
|
+
razon,
|
|
142
|
+
nombrePlugin,
|
|
143
|
+
componentes,
|
|
144
|
+
sugerencias: esHost ? [] : SUGERENCIAS_CONSUMIDOR.slice(),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
module.exports = {
|
|
149
|
+
detectarHostSwl,
|
|
150
|
+
contarComponentes,
|
|
151
|
+
NOMBRES_HOST,
|
|
152
|
+
SUGERENCIAS_CONSUMIDOR,
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
// Entrypoint CLI: `node scripts/lib/detectar-host-swl.js [--json] [baseDir]`
|
|
156
|
+
if (!require.main || require.main === module) {
|
|
157
|
+
const args = process.argv.slice(2);
|
|
158
|
+
const json = args.includes('--json');
|
|
159
|
+
const dirArg = args.find((a) => !a.startsWith('--'));
|
|
160
|
+
const resultado = detectarHostSwl(dirArg || process.cwd());
|
|
161
|
+
|
|
162
|
+
if (json) {
|
|
163
|
+
process.stdout.write(JSON.stringify(resultado, null, 2) + '\n');
|
|
164
|
+
} else if (resultado.esHost) {
|
|
165
|
+
process.stdout.write(`[host] ${resultado.razon}\n`);
|
|
166
|
+
} else {
|
|
167
|
+
process.stdout.write(`[consumidor] ${resultado.razon}\n`);
|
|
168
|
+
process.stdout.write('Subcomandos de /swl:status aplicables aquí:\n');
|
|
169
|
+
for (const s of resultado.sugerencias) {
|
|
170
|
+
process.stdout.write(` - ${s}\n`);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
// Exit 0 siempre: es diagnóstico, no gate bloqueante.
|
|
174
|
+
process.exit(0);
|
|
175
|
+
}
|
|
@@ -2,12 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* Detecta el runtime de IA disponible en el sistema.
|
|
5
|
-
*
|
|
5
|
+
* Reconoce: Claude Code, OpenClaude, Copilot, OpenCode, Codex, Gemini CLI y Cursor.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
const fs = require('fs');
|
|
9
9
|
const path = require('path');
|
|
10
10
|
const os = require('os');
|
|
11
|
+
const {
|
|
12
|
+
cargarConformance,
|
|
13
|
+
derivarSupportLabel,
|
|
14
|
+
} = require('./runtime-conformance');
|
|
15
|
+
|
|
16
|
+
const CONFORMANCE = cargarConformance();
|
|
11
17
|
|
|
12
18
|
const RUNTIMES = {
|
|
13
19
|
claude: {
|
|
@@ -44,7 +50,6 @@ const RUNTIMES = {
|
|
|
44
50
|
formatoAgente: 'markdown-frontmatter',
|
|
45
51
|
soportaHooks: true,
|
|
46
52
|
hookConfig: 'settings.json', // mismo formato que Claude Code
|
|
47
|
-
soporte: 'completo',
|
|
48
53
|
archivoPrincipal: null, // Lee CLAUDE.md igual que Claude Code
|
|
49
54
|
tiposSoportados: ['agentes', 'habilidades', 'comandos', 'reglas', 'hooks'],
|
|
50
55
|
notas: 'Comparte .claude/ con Claude Code. Instalar en uno aplica al otro si usan el mismo proyecto.',
|
|
@@ -60,7 +65,6 @@ const RUNTIMES = {
|
|
|
60
65
|
dirReglas: null,
|
|
61
66
|
formatoAgente: 'markdown-frontmatter',
|
|
62
67
|
soportaHooks: false,
|
|
63
|
-
soporte: 'parcial', // Solo agentes y reglas consolidadas (limitacion de plataforma)
|
|
64
68
|
archivoPrincipal: 'copilot-instructions.md',
|
|
65
69
|
tiposSoportados: ['agentes', 'reglas'],
|
|
66
70
|
},
|
|
@@ -76,7 +80,6 @@ const RUNTIMES = {
|
|
|
76
80
|
formatoAgente: 'markdown-frontmatter',
|
|
77
81
|
soportaHooks: true,
|
|
78
82
|
hookConfig: 'config.json',
|
|
79
|
-
soporte: 'completo',
|
|
80
83
|
archivoPrincipal: 'AGENTS.md',
|
|
81
84
|
tiposSoportados: ['agentes', 'habilidades', 'comandos', 'reglas', 'hooks'],
|
|
82
85
|
},
|
|
@@ -100,7 +103,6 @@ const RUNTIMES = {
|
|
|
100
103
|
formatoAgente: 'toml', // Sub-fase 11: cada agente es un .toml individual
|
|
101
104
|
soportaHooks: true, // Sub-fase 10: ~/.codex/hooks.json (6 eventos)
|
|
102
105
|
hookConfig: 'hooks.json',
|
|
103
|
-
soporte: 'completo',
|
|
104
106
|
archivoPrincipal: 'AGENTS.md',
|
|
105
107
|
tiposSoportados: ['agentes', 'habilidades', 'reglas', 'hooks'],
|
|
106
108
|
notas: 'Agentes en ~/.codex/agents/<name>.toml (formato TOML — Sub-fase 11). Skills en ~/.agents/skills/ (path oficial OpenAI — Sub-fase 10). Hooks en ~/.codex/hooks.json. MCP server en ~/.codex/config.toml. AGENTS.md sigue conteniendo tabla referencial como índice.',
|
|
@@ -117,7 +119,6 @@ const RUNTIMES = {
|
|
|
117
119
|
formatoAgente: 'markdown-frontmatter',
|
|
118
120
|
soportaHooks: true,
|
|
119
121
|
hookConfig: 'settings.json',
|
|
120
|
-
soporte: 'completo',
|
|
121
122
|
archivoPrincipal: 'GEMINI.md',
|
|
122
123
|
tiposSoportados: ['agentes', 'habilidades', 'comandos', 'reglas', 'hooks'],
|
|
123
124
|
},
|
|
@@ -144,7 +145,6 @@ const RUNTIMES = {
|
|
|
144
145
|
formatoAgente: 'markdown-frontmatter',
|
|
145
146
|
soportaHooks: true, // Sub-fase 10: .cursor/hooks.json (17 eventos)
|
|
146
147
|
hookConfig: 'hooks.json',
|
|
147
|
-
soporte: 'completo',
|
|
148
148
|
archivoPrincipal: null,
|
|
149
149
|
tiposSoportados: ['agentes', 'habilidades', 'reglas', 'hooks'],
|
|
150
150
|
notas: 'Subagents en .cursor/agents/, skills en .cursor/skills/<name>/SKILL.md, reglas en .cursor/rules/*.mdc, hooks en .cursor/hooks.json (17 eventos camelCase), MCP en .cursor/mcp.json. Slash commands custom: usar skills (se invocan con /<name>).',
|
|
@@ -290,6 +290,16 @@ function calcularRutas(runtimeId, opciones = {}) {
|
|
|
290
290
|
return rutas;
|
|
291
291
|
}
|
|
292
292
|
|
|
293
|
+
/**
|
|
294
|
+
* Deriva la etiqueta pública desde el manifiesto sin alterar la configuración
|
|
295
|
+
* operativa ni usar disponibilidad local como evidencia de conformidad.
|
|
296
|
+
*/
|
|
297
|
+
function obtenerEtiquetaConformidad(target) {
|
|
298
|
+
const claim = CONFORMANCE.runtimes.find((runtime) => runtime.installerTarget === target);
|
|
299
|
+
if (!claim) throw new TypeError(`target sin claim de conformidad: ${target}`);
|
|
300
|
+
return `${derivarSupportLabel(claim)}/${claim.certificationStatus}`;
|
|
301
|
+
}
|
|
302
|
+
|
|
293
303
|
/**
|
|
294
304
|
* Resumen de detección para mostrar al usuario
|
|
295
305
|
*/
|
|
@@ -300,18 +310,17 @@ function resumenDeteccion() {
|
|
|
300
310
|
if (detectados.length === 0) {
|
|
301
311
|
lineas.push(' (ninguno encontrado)');
|
|
302
312
|
lineas.push('');
|
|
303
|
-
lineas.push('
|
|
313
|
+
lineas.push('Targets reconocidos:');
|
|
304
314
|
for (const [id, config] of Object.entries(RUNTIMES)) {
|
|
305
|
-
|
|
306
|
-
lineas.push(` - ${id}: ${config.nombre}${marca}`);
|
|
315
|
+
lineas.push(` - ${id}: ${config.nombre} [${obtenerEtiquetaConformidad(id)}]`);
|
|
307
316
|
}
|
|
308
317
|
} else {
|
|
309
318
|
for (const r of detectados) {
|
|
310
319
|
const ubicacion = [];
|
|
311
320
|
if (r.globalExiste) ubicacion.push('global');
|
|
312
321
|
if (r.localExiste) ubicacion.push('local');
|
|
313
|
-
const
|
|
314
|
-
lineas.push(` + ${r.id}: ${r.nombre} (${ubicacion.join(', ')})${
|
|
322
|
+
const etiqueta = obtenerEtiquetaConformidad(r.id);
|
|
323
|
+
lineas.push(` + ${r.id}: ${r.nombre} (${ubicacion.join(', ')}) [${etiqueta}]`);
|
|
315
324
|
}
|
|
316
325
|
}
|
|
317
326
|
|
|
@@ -364,8 +373,7 @@ function detectarInstalacionesDuales(runtimeId, opciones = {}) {
|
|
|
364
373
|
}
|
|
365
374
|
|
|
366
375
|
/**
|
|
367
|
-
* Lista los IDs de
|
|
368
|
-
* transformador disponible y soporte declarado (completo o parcial).
|
|
376
|
+
* Lista los IDs de targets instalables con transformador disponible.
|
|
369
377
|
*
|
|
370
378
|
* Se usa para expandir `--all-runtimes` en multi-target install (ADR-0019 Sub-fase 2.5).
|
|
371
379
|
*
|
|
@@ -381,12 +389,12 @@ function detectarInstalacionesDuales(runtimeId, opciones = {}) {
|
|
|
381
389
|
function listarRuntimesInstalables(opciones = {}) {
|
|
382
390
|
const existeDir = opciones.existeDir || fs.existsSync;
|
|
383
391
|
const base = [
|
|
384
|
-
'claude',
|
|
385
|
-
'cursor',
|
|
386
|
-
'codex',
|
|
387
|
-
'opencode',
|
|
388
|
-
'gemini',
|
|
389
|
-
'copilot',
|
|
392
|
+
'claude',
|
|
393
|
+
'cursor',
|
|
394
|
+
'codex',
|
|
395
|
+
'opencode',
|
|
396
|
+
'gemini',
|
|
397
|
+
'copilot',
|
|
390
398
|
];
|
|
391
399
|
// OpenClaude comparte el dir de PROYECTO (.claude/) con Claude Code, así
|
|
392
400
|
// que NO se bootstrapea por default (evita duplicados para quien no lo
|
|
@@ -407,6 +415,7 @@ module.exports = {
|
|
|
407
415
|
detectarInstalacionesDuales,
|
|
408
416
|
obtenerRuntime,
|
|
409
417
|
calcularRutas,
|
|
418
|
+
obtenerEtiquetaConformidad,
|
|
410
419
|
resumenDeteccion,
|
|
411
420
|
listarRuntimesInstalables,
|
|
412
421
|
};
|