@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,73 +1,73 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Subcomando `swl-ses ciclo-autonomo [on|off|status]` — motor determinista de
|
|
5
|
-
* aprendizaje (Fase A del ciclo autónomo, ADR-0041).
|
|
6
|
-
*
|
|
7
|
-
* Sin positional: ejecuta la Fase A (writer de instintos → puente de
|
|
8
|
-
* degradación → drenador de feedback). Opt-out estricto (nace encendido):
|
|
9
|
-
* con `habilitado:false` en el config o `SWL_CICLO_AUTONOMO=0` retorna sin
|
|
10
|
-
* efecto ni escritura — el off es sagrado.
|
|
11
|
-
*
|
|
12
|
-
* on → habilita el motor (escribe evolution/ciclo-config.json)
|
|
13
|
-
* off → lo deshabilita
|
|
14
|
-
* status → reporta last_run y conteos de la última corrida
|
|
15
|
-
*
|
|
16
|
-
* Uso: swl-ses ciclo-autonomo [on|off|status] [--forzar]
|
|
17
|
-
*/
|
|
18
|
-
|
|
19
|
-
const { correrFaseA } = require('../lib/ciclo-autonomo');
|
|
20
|
-
const { leerConfig, escribirConfig, estaHabilitado } = require('../lib/ciclo-autonomo/config');
|
|
21
|
-
|
|
22
|
-
function cicloAutonomo(opciones = {}) {
|
|
23
|
-
const accion = (opciones._args || [])[0];
|
|
24
|
-
const baseDir = opciones.dir || process.cwd();
|
|
25
|
-
|
|
26
|
-
if (accion === 'on' || accion === 'off') {
|
|
27
|
-
const habilitado = accion === 'on';
|
|
28
|
-
escribirConfig(baseDir, { habilitado });
|
|
29
|
-
console.log(`[ciclo-autonomo] motor ${habilitado ? 'HABILITADO' : 'deshabilitado'} (${baseDir})`);
|
|
30
|
-
if (habilitado) {
|
|
31
|
-
console.log('[ciclo-autonomo] la Fase A correrá vía cron/briefing; corrida manual: swl-ses ciclo-autonomo');
|
|
32
|
-
}
|
|
33
|
-
return leerConfig(baseDir);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (accion === 'status') {
|
|
37
|
-
const config = leerConfig(baseDir);
|
|
38
|
-
const estado = {
|
|
39
|
-
habilitado: estaHabilitado(baseDir),
|
|
40
|
-
credencial: config.credencial,
|
|
41
|
-
last_run: config.last_run,
|
|
42
|
-
ultima_corrida: config.ultima_corrida,
|
|
43
|
-
};
|
|
44
|
-
console.log(`[ciclo-autonomo] habilitado: ${estado.habilitado} · credencial: ${estado.credencial}`);
|
|
45
|
-
console.log(`[ciclo-autonomo] last_run: ${estado.last_run || 'nunca'}`);
|
|
46
|
-
if (estado.ultima_corrida) {
|
|
47
|
-
const u = estado.ultima_corrida;
|
|
48
|
-
console.log(`[ciclo-autonomo] última corrida — promovidos: ${u.promovidos}, degradados: ${u.degradados}, drenados: ${u.drenados}, archivados: ${u.archivados}, bajados: ${u.bajados}`);
|
|
49
|
-
}
|
|
50
|
-
return estado;
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (accion !== undefined) {
|
|
54
|
-
console.error(`[ciclo-autonomo] acción desconocida: "${accion}". Uso: swl-ses ciclo-autonomo [on|off|status] [--forzar]`);
|
|
55
|
-
process.exitCode = 1;
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const resultado = correrFaseA(baseDir, { forzar: opciones.forzar === true });
|
|
60
|
-
if (!resultado.ejecutado) {
|
|
61
|
-
console.log(`[ciclo-autonomo] sin corrida: ${resultado.razon}`);
|
|
62
|
-
} else if (resultado.acciones === 0) {
|
|
63
|
-
console.log('[ciclo-autonomo] corrida no-op: sin señales que crucen umbral');
|
|
64
|
-
} else {
|
|
65
|
-
console.log(`[ciclo-autonomo] corrida completada — acciones: ${resultado.acciones}`);
|
|
66
|
-
if (resultado.errores && resultado.errores.length > 0) {
|
|
67
|
-
console.error(`[ciclo-autonomo] sub-fases con error: ${resultado.errores.join(', ')}`);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
return resultado;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
module.exports = cicloAutonomo;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Subcomando `swl-ses ciclo-autonomo [on|off|status]` — motor determinista de
|
|
5
|
+
* aprendizaje (Fase A del ciclo autónomo, ADR-0041).
|
|
6
|
+
*
|
|
7
|
+
* Sin positional: ejecuta la Fase A (writer de instintos → puente de
|
|
8
|
+
* degradación → drenador de feedback). Opt-out estricto (nace encendido):
|
|
9
|
+
* con `habilitado:false` en el config o `SWL_CICLO_AUTONOMO=0` retorna sin
|
|
10
|
+
* efecto ni escritura — el off es sagrado.
|
|
11
|
+
*
|
|
12
|
+
* on → habilita el motor (escribe evolution/ciclo-config.json)
|
|
13
|
+
* off → lo deshabilita
|
|
14
|
+
* status → reporta last_run y conteos de la última corrida
|
|
15
|
+
*
|
|
16
|
+
* Uso: swl-ses ciclo-autonomo [on|off|status] [--forzar]
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
const { correrFaseA } = require('../lib/ciclo-autonomo');
|
|
20
|
+
const { leerConfig, escribirConfig, estaHabilitado } = require('../lib/ciclo-autonomo/config');
|
|
21
|
+
|
|
22
|
+
function cicloAutonomo(opciones = {}) {
|
|
23
|
+
const accion = (opciones._args || [])[0];
|
|
24
|
+
const baseDir = opciones.dir || process.cwd();
|
|
25
|
+
|
|
26
|
+
if (accion === 'on' || accion === 'off') {
|
|
27
|
+
const habilitado = accion === 'on';
|
|
28
|
+
escribirConfig(baseDir, { habilitado });
|
|
29
|
+
console.log(`[ciclo-autonomo] motor ${habilitado ? 'HABILITADO' : 'deshabilitado'} (${baseDir})`);
|
|
30
|
+
if (habilitado) {
|
|
31
|
+
console.log('[ciclo-autonomo] la Fase A correrá vía cron/briefing; corrida manual: swl-ses ciclo-autonomo');
|
|
32
|
+
}
|
|
33
|
+
return leerConfig(baseDir);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (accion === 'status') {
|
|
37
|
+
const config = leerConfig(baseDir);
|
|
38
|
+
const estado = {
|
|
39
|
+
habilitado: estaHabilitado(baseDir),
|
|
40
|
+
credencial: config.credencial,
|
|
41
|
+
last_run: config.last_run,
|
|
42
|
+
ultima_corrida: config.ultima_corrida,
|
|
43
|
+
};
|
|
44
|
+
console.log(`[ciclo-autonomo] habilitado: ${estado.habilitado} · credencial: ${estado.credencial}`);
|
|
45
|
+
console.log(`[ciclo-autonomo] last_run: ${estado.last_run || 'nunca'}`);
|
|
46
|
+
if (estado.ultima_corrida) {
|
|
47
|
+
const u = estado.ultima_corrida;
|
|
48
|
+
console.log(`[ciclo-autonomo] última corrida — promovidos: ${u.promovidos}, degradados: ${u.degradados}, drenados: ${u.drenados}, archivados: ${u.archivados}, bajados: ${u.bajados}`);
|
|
49
|
+
}
|
|
50
|
+
return estado;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (accion !== undefined) {
|
|
54
|
+
console.error(`[ciclo-autonomo] acción desconocida: "${accion}". Uso: swl-ses ciclo-autonomo [on|off|status] [--forzar]`);
|
|
55
|
+
process.exitCode = 1;
|
|
56
|
+
return null;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const resultado = correrFaseA(baseDir, { forzar: opciones.forzar === true });
|
|
60
|
+
if (!resultado.ejecutado) {
|
|
61
|
+
console.log(`[ciclo-autonomo] sin corrida: ${resultado.razon}`);
|
|
62
|
+
} else if (resultado.acciones === 0) {
|
|
63
|
+
console.log('[ciclo-autonomo] corrida no-op: sin señales que crucen umbral');
|
|
64
|
+
} else {
|
|
65
|
+
console.log(`[ciclo-autonomo] corrida completada — acciones: ${resultado.acciones}`);
|
|
66
|
+
if (resultado.errores && resultado.errores.length > 0) {
|
|
67
|
+
console.error(`[ciclo-autonomo] sub-fases con error: ${resultado.errores.join(', ')}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return resultado;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
module.exports = cicloAutonomo;
|
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Wrapper CLI `swl-ses ciclo-evolucion` — regenera las métricas de evolución
|
|
5
|
-
* (.planning/evolution/metricas.json) ejecutando la sub-etapa Stop del ciclo.
|
|
6
|
-
* Reemplaza `echo '{}' | node hooks/ciclo-evolucion.js` relativo al proyecto
|
|
7
|
-
* (roto downstream; ver docs/invocacion-cli-cross-scope.md).
|
|
8
|
-
*
|
|
9
|
-
* Uso: swl-ses ciclo-evolucion
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
|
-
const cicloEvolucion = require('../../hooks/lib/ciclo-evolucion');
|
|
13
|
-
|
|
14
|
-
function cicloEvolucionCli() {
|
|
15
|
-
try {
|
|
16
|
-
cicloEvolucion.ejecutarStop('{}');
|
|
17
|
-
console.log('[ciclo-evolucion] métricas de evolución regeneradas');
|
|
18
|
-
} catch (e) {
|
|
19
|
-
// A diferencia del hook (que nunca bloquea el harness), el CLI sí debe
|
|
20
|
-
// distinguir fallo de éxito para el caller: stderr + exit code != 0.
|
|
21
|
-
console.error('[ciclo-evolucion] no se pudo regenerar: ' + e.message);
|
|
22
|
-
process.exitCode = 1;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
module.exports = cicloEvolucionCli;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper CLI `swl-ses ciclo-evolucion` — regenera las métricas de evolución
|
|
5
|
+
* (.planning/evolution/metricas.json) ejecutando la sub-etapa Stop del ciclo.
|
|
6
|
+
* Reemplaza `echo '{}' | node hooks/ciclo-evolucion.js` relativo al proyecto
|
|
7
|
+
* (roto downstream; ver docs/invocacion-cli-cross-scope.md).
|
|
8
|
+
*
|
|
9
|
+
* Uso: swl-ses ciclo-evolucion
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
const cicloEvolucion = require('../../hooks/lib/ciclo-evolucion');
|
|
13
|
+
|
|
14
|
+
function cicloEvolucionCli() {
|
|
15
|
+
try {
|
|
16
|
+
cicloEvolucion.ejecutarStop('{}');
|
|
17
|
+
console.log('[ciclo-evolucion] métricas de evolución regeneradas');
|
|
18
|
+
} catch (e) {
|
|
19
|
+
// A diferencia del hook (que nunca bloquea el harness), el CLI sí debe
|
|
20
|
+
// distinguir fallo de éxito para el caller: stderr + exit code != 0.
|
|
21
|
+
console.error('[ciclo-evolucion] no se pudo regenerar: ' + e.message);
|
|
22
|
+
process.exitCode = 1;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
module.exports = cicloEvolucionCli;
|
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Subcomando `swl-ses ciclo-fase-b [status] [--dry-run]` — CLI headless de la
|
|
5
|
-
* Fase B del ciclo autónomo (Fase 22, T-07, ADR-0042 gate G-B, REQ-22-07).
|
|
6
|
-
*
|
|
7
|
-
* Espeja el patrón de `scripts/cli/ciclo-autonomo.js` (contrato del bin: cada
|
|
8
|
-
* subcomando exporta UNA función(opciones) sin efectos al require).
|
|
9
|
-
*
|
|
10
|
-
* (nada) | --dry-run → corre `runner-fase-b.correrFaseB` con `dryRun:true`
|
|
11
|
-
* SIEMPRE, se pase o no el flag. En Fase 22 el runner NUNCA invoca LLM ni
|
|
12
|
-
* gasta bajo ninguna combinación de argumentos — el modo real
|
|
13
|
-
* (`dryRun:false` + `invocador` cableado) llega en Fase 24; hasta
|
|
14
|
-
* entonces `--dry-run` es un no-op explícito frente al default.
|
|
15
|
-
* status → reporta `fase_b_habilitada`, `last_run_fase_b`, candidatos
|
|
16
|
-
* pendientes (conteo tolerante de `evolution/candidatos-fase-b.jsonl` —
|
|
17
|
-
* NUNCA `candidatos.detectar`, que tiene efecto de escritura; `status`
|
|
18
|
-
* jamás muta disco) y el estado de presupuesto (`gasto_mes`,
|
|
19
|
-
* `presupuesto_usd_mes`, `pausado_por_presupuesto`) vía
|
|
20
|
-
* `presupuesto.estado`.
|
|
21
|
-
*
|
|
22
|
-
* Uso: swl-ses ciclo-fase-b [status] [--dry-run]
|
|
23
|
-
*/
|
|
24
|
-
|
|
25
|
-
const fs = require('fs');
|
|
26
|
-
const path = require('path');
|
|
27
|
-
|
|
28
|
-
const { correrFaseB } = require('../lib/ciclo-autonomo/runner-fase-b');
|
|
29
|
-
const config = require('../lib/ciclo-autonomo/config');
|
|
30
|
-
const presupuesto = require('../lib/ciclo-autonomo/presupuesto');
|
|
31
|
-
|
|
32
|
-
const RUTA_CANDIDATOS_RELATIVA = path.join('.planning', 'evolution', 'candidatos-fase-b.jsonl');
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Conteo tolerante de líneas JSON válidas en `candidatos-fase-b.jsonl`.
|
|
36
|
-
* `status` es de solo lectura: nunca invoca `candidatos.detectar` (que
|
|
37
|
-
* persiste candidatos nuevos) — solo cuenta lo que YA quedó registrado por
|
|
38
|
-
* una corrida previa de la Fase A o del runner.
|
|
39
|
-
*
|
|
40
|
-
* @param {string} baseDir - Directorio raíz del proyecto.
|
|
41
|
-
* @returns {number}
|
|
42
|
-
*/
|
|
43
|
-
function contarCandidatosPendientes(baseDir) {
|
|
44
|
-
let crudo;
|
|
45
|
-
try {
|
|
46
|
-
crudo = fs.readFileSync(path.join(baseDir, RUTA_CANDIDATOS_RELATIVA), 'utf8');
|
|
47
|
-
} catch (_) {
|
|
48
|
-
return 0;
|
|
49
|
-
}
|
|
50
|
-
return crudo.split(/\r\n|\n/)
|
|
51
|
-
.filter((linea) => linea.trim() !== '')
|
|
52
|
-
.filter((linea) => {
|
|
53
|
-
try {
|
|
54
|
-
JSON.parse(linea);
|
|
55
|
-
return true;
|
|
56
|
-
} catch (_) {
|
|
57
|
-
return false;
|
|
58
|
-
}
|
|
59
|
-
}).length;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
function cicloFaseB(opciones = {}) {
|
|
63
|
-
const accion = (opciones._args || [])[0];
|
|
64
|
-
const baseDir = opciones.dir || process.cwd();
|
|
65
|
-
|
|
66
|
-
if (accion === 'status') {
|
|
67
|
-
const cfg = config.leerConfig(baseDir);
|
|
68
|
-
const presu = presupuesto.estado(baseDir);
|
|
69
|
-
const estado = {
|
|
70
|
-
fase_b_habilitada: config.estaFaseBHabilitada(baseDir),
|
|
71
|
-
last_run_fase_b: cfg.last_run_fase_b,
|
|
72
|
-
candidatos_pendientes: contarCandidatosPendientes(baseDir),
|
|
73
|
-
gasto_mes: presu.gasto_mes,
|
|
74
|
-
presupuesto_usd_mes: presu.tope,
|
|
75
|
-
pausado_por_presupuesto: presu.pausado_por_presupuesto,
|
|
76
|
-
};
|
|
77
|
-
console.log(`[ciclo-fase-b] fase_b_habilitada: ${estado.fase_b_habilitada}`);
|
|
78
|
-
console.log(`[ciclo-fase-b] last_run_fase_b: ${estado.last_run_fase_b || 'nunca'}`);
|
|
79
|
-
console.log(`[ciclo-fase-b] candidatos_pendientes: ${estado.candidatos_pendientes}`);
|
|
80
|
-
console.log(`[ciclo-fase-b] gasto_mes: $${estado.gasto_mes} / $${estado.presupuesto_usd_mes} · pausado_por_presupuesto: ${estado.pausado_por_presupuesto}`);
|
|
81
|
-
return estado;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if (accion !== undefined && accion !== '--dry-run') {
|
|
85
|
-
console.error(`[ciclo-fase-b] acción desconocida: "${accion}". Uso: swl-ses ciclo-fase-b [status] [--dry-run]`);
|
|
86
|
-
process.exitCode = 1;
|
|
87
|
-
return null;
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
// Fase 22: dryRun forzado a true sin importar el flag — el runner valida
|
|
91
|
-
// toda la tubería (lock, catch-up, guard, credencial, presupuesto) y
|
|
92
|
-
// registra la corrida SIN invocar LLM. El modo real llega en Fase 24.
|
|
93
|
-
const resultado = correrFaseB(baseDir, { dryRun: true });
|
|
94
|
-
if (!resultado.ejecutado) {
|
|
95
|
-
console.log(`[ciclo-fase-b] sin corrida: ${resultado.razon}`);
|
|
96
|
-
} else {
|
|
97
|
-
console.log(`[ciclo-fase-b] corrida dry-run completada — candidatos: ${resultado.candidatos}`);
|
|
98
|
-
}
|
|
99
|
-
return resultado;
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
module.exports = cicloFaseB;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Subcomando `swl-ses ciclo-fase-b [status] [--dry-run]` — CLI headless de la
|
|
5
|
+
* Fase B del ciclo autónomo (Fase 22, T-07, ADR-0042 gate G-B, REQ-22-07).
|
|
6
|
+
*
|
|
7
|
+
* Espeja el patrón de `scripts/cli/ciclo-autonomo.js` (contrato del bin: cada
|
|
8
|
+
* subcomando exporta UNA función(opciones) sin efectos al require).
|
|
9
|
+
*
|
|
10
|
+
* (nada) | --dry-run → corre `runner-fase-b.correrFaseB` con `dryRun:true`
|
|
11
|
+
* SIEMPRE, se pase o no el flag. En Fase 22 el runner NUNCA invoca LLM ni
|
|
12
|
+
* gasta bajo ninguna combinación de argumentos — el modo real
|
|
13
|
+
* (`dryRun:false` + `invocador` cableado) llega en Fase 24; hasta
|
|
14
|
+
* entonces `--dry-run` es un no-op explícito frente al default.
|
|
15
|
+
* status → reporta `fase_b_habilitada`, `last_run_fase_b`, candidatos
|
|
16
|
+
* pendientes (conteo tolerante de `evolution/candidatos-fase-b.jsonl` —
|
|
17
|
+
* NUNCA `candidatos.detectar`, que tiene efecto de escritura; `status`
|
|
18
|
+
* jamás muta disco) y el estado de presupuesto (`gasto_mes`,
|
|
19
|
+
* `presupuesto_usd_mes`, `pausado_por_presupuesto`) vía
|
|
20
|
+
* `presupuesto.estado`.
|
|
21
|
+
*
|
|
22
|
+
* Uso: swl-ses ciclo-fase-b [status] [--dry-run]
|
|
23
|
+
*/
|
|
24
|
+
|
|
25
|
+
const fs = require('fs');
|
|
26
|
+
const path = require('path');
|
|
27
|
+
|
|
28
|
+
const { correrFaseB } = require('../lib/ciclo-autonomo/runner-fase-b');
|
|
29
|
+
const config = require('../lib/ciclo-autonomo/config');
|
|
30
|
+
const presupuesto = require('../lib/ciclo-autonomo/presupuesto');
|
|
31
|
+
|
|
32
|
+
const RUTA_CANDIDATOS_RELATIVA = path.join('.planning', 'evolution', 'candidatos-fase-b.jsonl');
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Conteo tolerante de líneas JSON válidas en `candidatos-fase-b.jsonl`.
|
|
36
|
+
* `status` es de solo lectura: nunca invoca `candidatos.detectar` (que
|
|
37
|
+
* persiste candidatos nuevos) — solo cuenta lo que YA quedó registrado por
|
|
38
|
+
* una corrida previa de la Fase A o del runner.
|
|
39
|
+
*
|
|
40
|
+
* @param {string} baseDir - Directorio raíz del proyecto.
|
|
41
|
+
* @returns {number}
|
|
42
|
+
*/
|
|
43
|
+
function contarCandidatosPendientes(baseDir) {
|
|
44
|
+
let crudo;
|
|
45
|
+
try {
|
|
46
|
+
crudo = fs.readFileSync(path.join(baseDir, RUTA_CANDIDATOS_RELATIVA), 'utf8');
|
|
47
|
+
} catch (_) {
|
|
48
|
+
return 0;
|
|
49
|
+
}
|
|
50
|
+
return crudo.split(/\r\n|\n/)
|
|
51
|
+
.filter((linea) => linea.trim() !== '')
|
|
52
|
+
.filter((linea) => {
|
|
53
|
+
try {
|
|
54
|
+
JSON.parse(linea);
|
|
55
|
+
return true;
|
|
56
|
+
} catch (_) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}).length;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function cicloFaseB(opciones = {}) {
|
|
63
|
+
const accion = (opciones._args || [])[0];
|
|
64
|
+
const baseDir = opciones.dir || process.cwd();
|
|
65
|
+
|
|
66
|
+
if (accion === 'status') {
|
|
67
|
+
const cfg = config.leerConfig(baseDir);
|
|
68
|
+
const presu = presupuesto.estado(baseDir);
|
|
69
|
+
const estado = {
|
|
70
|
+
fase_b_habilitada: config.estaFaseBHabilitada(baseDir),
|
|
71
|
+
last_run_fase_b: cfg.last_run_fase_b,
|
|
72
|
+
candidatos_pendientes: contarCandidatosPendientes(baseDir),
|
|
73
|
+
gasto_mes: presu.gasto_mes,
|
|
74
|
+
presupuesto_usd_mes: presu.tope,
|
|
75
|
+
pausado_por_presupuesto: presu.pausado_por_presupuesto,
|
|
76
|
+
};
|
|
77
|
+
console.log(`[ciclo-fase-b] fase_b_habilitada: ${estado.fase_b_habilitada}`);
|
|
78
|
+
console.log(`[ciclo-fase-b] last_run_fase_b: ${estado.last_run_fase_b || 'nunca'}`);
|
|
79
|
+
console.log(`[ciclo-fase-b] candidatos_pendientes: ${estado.candidatos_pendientes}`);
|
|
80
|
+
console.log(`[ciclo-fase-b] gasto_mes: $${estado.gasto_mes} / $${estado.presupuesto_usd_mes} · pausado_por_presupuesto: ${estado.pausado_por_presupuesto}`);
|
|
81
|
+
return estado;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (accion !== undefined && accion !== '--dry-run') {
|
|
85
|
+
console.error(`[ciclo-fase-b] acción desconocida: "${accion}". Uso: swl-ses ciclo-fase-b [status] [--dry-run]`);
|
|
86
|
+
process.exitCode = 1;
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Fase 22: dryRun forzado a true sin importar el flag — el runner valida
|
|
91
|
+
// toda la tubería (lock, catch-up, guard, credencial, presupuesto) y
|
|
92
|
+
// registra la corrida SIN invocar LLM. El modo real llega en Fase 24.
|
|
93
|
+
const resultado = correrFaseB(baseDir, { dryRun: true });
|
|
94
|
+
if (!resultado.ejecutado) {
|
|
95
|
+
console.log(`[ciclo-fase-b] sin corrida: ${resultado.razon}`);
|
|
96
|
+
} else {
|
|
97
|
+
console.log(`[ciclo-fase-b] corrida dry-run completada — candidatos: ${resultado.candidatos}`);
|
|
98
|
+
}
|
|
99
|
+
return resultado;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
module.exports = cicloFaseB;
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Wrapper CLI `swl-ses derivar-feature-list` — genera .planning/feature-list.json
|
|
5
|
-
* desde HOJA-RUTA.md. Reemplaza `node scripts/derivar-feature-list.js` relativo
|
|
6
|
-
* al proyecto (roto downstream; ver docs/invocacion-cli-cross-scope.md).
|
|
7
|
-
*
|
|
8
|
-
* Uso: swl-ses derivar-feature-list [--check] (--check: exit 2 si hay drift)
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
const { main } = require('../derivar-feature-list.js');
|
|
12
|
-
|
|
13
|
-
function derivarFeatureList(opciones = {}) {
|
|
14
|
-
const args = ['node', 'derivar-feature-list'];
|
|
15
|
-
if (opciones && opciones.check) args.push('--check');
|
|
16
|
-
const argvOriginal = process.argv;
|
|
17
|
-
process.argv = args;
|
|
18
|
-
try {
|
|
19
|
-
return main();
|
|
20
|
-
} finally {
|
|
21
|
-
process.argv = argvOriginal;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
module.exports = derivarFeatureList;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper CLI `swl-ses derivar-feature-list` — genera .planning/feature-list.json
|
|
5
|
+
* desde HOJA-RUTA.md. Reemplaza `node scripts/derivar-feature-list.js` relativo
|
|
6
|
+
* al proyecto (roto downstream; ver docs/invocacion-cli-cross-scope.md).
|
|
7
|
+
*
|
|
8
|
+
* Uso: swl-ses derivar-feature-list [--check] (--check: exit 2 si hay drift)
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const { main } = require('../derivar-feature-list.js');
|
|
12
|
+
|
|
13
|
+
function derivarFeatureList(opciones = {}) {
|
|
14
|
+
const args = ['node', 'derivar-feature-list'];
|
|
15
|
+
if (opciones && opciones.check) args.push('--check');
|
|
16
|
+
const argvOriginal = process.argv;
|
|
17
|
+
process.argv = args;
|
|
18
|
+
try {
|
|
19
|
+
return main();
|
|
20
|
+
} finally {
|
|
21
|
+
process.argv = argvOriginal;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
module.exports = derivarFeatureList;
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Wrapper CLI `swl-ses detectar-host` — determina si el CWD es el repo host de
|
|
5
|
-
* SWL o un proyecto consumidor. Reemplaza `node scripts/lib/detectar-host-swl.js`
|
|
6
|
-
* relativo al proyecto (roto downstream; ver docs/invocacion-cli-cross-scope.md).
|
|
7
|
-
*
|
|
8
|
-
* Uso: swl-ses detectar-host [--json]
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
const { detectarHostSwl } = require('../lib/detectar-host-swl');
|
|
12
|
-
|
|
13
|
-
function detectarHost(opciones = {}) {
|
|
14
|
-
const r = detectarHostSwl(process.cwd());
|
|
15
|
-
if (opciones && opciones.json) {
|
|
16
|
-
console.log(JSON.stringify(r, null, 2));
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
if (r.esHost) {
|
|
20
|
-
console.log(`[host] ${r.razon}`);
|
|
21
|
-
} else {
|
|
22
|
-
console.log(`[consumidor] ${r.razon}`);
|
|
23
|
-
for (const s of r.sugerencias) console.log(` - ${s}`);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
module.exports = detectarHost;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper CLI `swl-ses detectar-host` — determina si el CWD es el repo host de
|
|
5
|
+
* SWL o un proyecto consumidor. Reemplaza `node scripts/lib/detectar-host-swl.js`
|
|
6
|
+
* relativo al proyecto (roto downstream; ver docs/invocacion-cli-cross-scope.md).
|
|
7
|
+
*
|
|
8
|
+
* Uso: swl-ses detectar-host [--json]
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
const { detectarHostSwl } = require('../lib/detectar-host-swl');
|
|
12
|
+
|
|
13
|
+
function detectarHost(opciones = {}) {
|
|
14
|
+
const r = detectarHostSwl(process.cwd());
|
|
15
|
+
if (opciones && opciones.json) {
|
|
16
|
+
console.log(JSON.stringify(r, null, 2));
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (r.esHost) {
|
|
20
|
+
console.log(`[host] ${r.razon}`);
|
|
21
|
+
} else {
|
|
22
|
+
console.log(`[consumidor] ${r.razon}`);
|
|
23
|
+
for (const s of r.sugerencias) console.log(` - ${s}`);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
module.exports = detectarHost;
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Wrapper CLI `swl-ses diary-entry` — construye y persiste una entrada de diario
|
|
5
|
-
* de sesión en .planning/sessions/diary/<id>.json. Reemplaza el inline
|
|
6
|
-
* `require('./scripts/lib/diary-entry')` relativo al proyecto (roto downstream;
|
|
7
|
-
* ver docs/invocacion-cli-cross-scope.md).
|
|
8
|
-
*
|
|
9
|
-
* Entrada: objeto JSON por stdin (o --json='{...}') con la forma:
|
|
10
|
-
* {
|
|
11
|
-
* "sessionId": "...", "agent": "orquestador-swl",
|
|
12
|
-
* "accomplishments": ["..."], "decisions": ["..."],
|
|
13
|
-
* "learnings": ["..."], "challenges": ["..."],
|
|
14
|
-
* "sourceAgents": ["implementador-swl"], "tags": ["..."]
|
|
15
|
-
* }
|
|
16
|
-
*
|
|
17
|
-
* Imprime la ruta del archivo escrito. Uso:
|
|
18
|
-
* echo '{"sessionId":"s1","agent":"orquestador-swl"}' | swl-ses diary-entry
|
|
19
|
-
*/
|
|
20
|
-
|
|
21
|
-
const fs = require('node:fs');
|
|
22
|
-
const path = require('node:path');
|
|
23
|
-
const diary = require('../lib/diary-entry');
|
|
24
|
-
const { atomicWriteSync } = require('../../hooks/lib/atomic-write');
|
|
25
|
-
|
|
26
|
-
function diaryEntry(opciones = {}) {
|
|
27
|
-
let raw = opciones.json;
|
|
28
|
-
if (!raw && !process.stdin.isTTY) {
|
|
29
|
-
try {
|
|
30
|
-
raw = fs.readFileSync(0, 'utf8');
|
|
31
|
-
} catch (e) {
|
|
32
|
-
// No degradar en silencio: avisar que stdin fue ilegible antes del fallback.
|
|
33
|
-
console.error('[diary-entry] aviso: stdin ilegible (' + e.code + ')');
|
|
34
|
-
raw = '';
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
let input;
|
|
38
|
-
try {
|
|
39
|
-
input = JSON.parse(raw || '{}');
|
|
40
|
-
} catch (e) {
|
|
41
|
-
console.error('Error: JSON inválido: ' + e.message);
|
|
42
|
-
process.exitCode = 1;
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
let entry = diary.createDiary({ sessionId: input.sessionId, agent: input.agent });
|
|
47
|
-
for (const a of input.accomplishments || []) entry = diary.addAccomplishment(entry, a);
|
|
48
|
-
for (const d of input.decisions || []) entry = diary.addDecision(entry, d);
|
|
49
|
-
for (const c of input.challenges || []) entry = diary.addChallenge(entry, c);
|
|
50
|
-
for (const l of input.learnings || []) entry = diary.addLearning(entry, l);
|
|
51
|
-
for (const tg of input.tags || []) entry = diary.addTag(entry, tg);
|
|
52
|
-
for (const sa of input.sourceAgents || []) entry = diary.addSourceAgent(entry, sa);
|
|
53
|
-
entry = diary.closeDiary(entry);
|
|
54
|
-
|
|
55
|
-
const val = diary.validateDiary(entry);
|
|
56
|
-
if (!val.valid) {
|
|
57
|
-
console.error('Error de validación: ' + val.errors.join('; '));
|
|
58
|
-
process.exitCode = 1;
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
const dir = path.join(process.cwd(), '.planning', 'sessions', 'diary');
|
|
63
|
-
fs.mkdirSync(dir, { recursive: true });
|
|
64
|
-
const dest = path.join(dir, entry.id + '.json');
|
|
65
|
-
atomicWriteSync(dest, diary.serializeDiary(entry));
|
|
66
|
-
console.log(dest);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
module.exports = diaryEntry;
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Wrapper CLI `swl-ses diary-entry` — construye y persiste una entrada de diario
|
|
5
|
+
* de sesión en .planning/sessions/diary/<id>.json. Reemplaza el inline
|
|
6
|
+
* `require('./scripts/lib/diary-entry')` relativo al proyecto (roto downstream;
|
|
7
|
+
* ver docs/invocacion-cli-cross-scope.md).
|
|
8
|
+
*
|
|
9
|
+
* Entrada: objeto JSON por stdin (o --json='{...}') con la forma:
|
|
10
|
+
* {
|
|
11
|
+
* "sessionId": "...", "agent": "orquestador-swl",
|
|
12
|
+
* "accomplishments": ["..."], "decisions": ["..."],
|
|
13
|
+
* "learnings": ["..."], "challenges": ["..."],
|
|
14
|
+
* "sourceAgents": ["implementador-swl"], "tags": ["..."]
|
|
15
|
+
* }
|
|
16
|
+
*
|
|
17
|
+
* Imprime la ruta del archivo escrito. Uso:
|
|
18
|
+
* echo '{"sessionId":"s1","agent":"orquestador-swl"}' | swl-ses diary-entry
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
const fs = require('node:fs');
|
|
22
|
+
const path = require('node:path');
|
|
23
|
+
const diary = require('../lib/diary-entry');
|
|
24
|
+
const { atomicWriteSync } = require('../../hooks/lib/atomic-write');
|
|
25
|
+
|
|
26
|
+
function diaryEntry(opciones = {}) {
|
|
27
|
+
let raw = opciones.json;
|
|
28
|
+
if (!raw && !process.stdin.isTTY) {
|
|
29
|
+
try {
|
|
30
|
+
raw = fs.readFileSync(0, 'utf8');
|
|
31
|
+
} catch (e) {
|
|
32
|
+
// No degradar en silencio: avisar que stdin fue ilegible antes del fallback.
|
|
33
|
+
console.error('[diary-entry] aviso: stdin ilegible (' + e.code + ')');
|
|
34
|
+
raw = '';
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
let input;
|
|
38
|
+
try {
|
|
39
|
+
input = JSON.parse(raw || '{}');
|
|
40
|
+
} catch (e) {
|
|
41
|
+
console.error('Error: JSON inválido: ' + e.message);
|
|
42
|
+
process.exitCode = 1;
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
let entry = diary.createDiary({ sessionId: input.sessionId, agent: input.agent });
|
|
47
|
+
for (const a of input.accomplishments || []) entry = diary.addAccomplishment(entry, a);
|
|
48
|
+
for (const d of input.decisions || []) entry = diary.addDecision(entry, d);
|
|
49
|
+
for (const c of input.challenges || []) entry = diary.addChallenge(entry, c);
|
|
50
|
+
for (const l of input.learnings || []) entry = diary.addLearning(entry, l);
|
|
51
|
+
for (const tg of input.tags || []) entry = diary.addTag(entry, tg);
|
|
52
|
+
for (const sa of input.sourceAgents || []) entry = diary.addSourceAgent(entry, sa);
|
|
53
|
+
entry = diary.closeDiary(entry);
|
|
54
|
+
|
|
55
|
+
const val = diary.validateDiary(entry);
|
|
56
|
+
if (!val.valid) {
|
|
57
|
+
console.error('Error de validación: ' + val.errors.join('; '));
|
|
58
|
+
process.exitCode = 1;
|
|
59
|
+
return;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
const dir = path.join(process.cwd(), '.planning', 'sessions', 'diary');
|
|
63
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
64
|
+
const dest = path.join(dir, entry.id + '.json');
|
|
65
|
+
atomicWriteSync(dest, diary.serializeDiary(entry));
|
|
66
|
+
console.log(dest);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
module.exports = diaryEntry;
|