@ingeniomaps/cauce 0.43.0 → 0.47.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/CHANGELOG.md +149 -0
- package/README.md +23 -15
- package/agents/roles/system/accounting-specialist/SKILL.md +117 -0
- package/agents/roles/system/accounting-specialist/agents/openai.yaml +4 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/01-recaudo-a-ingresos.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/02-centro-de-costo-generico.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/03-criterio-de-otro-pais.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/04-lote-parcial-descuadrado.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/05-trazabilidad-de-una-diferencia.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/06-adversarial-docs/guia-armonizacion-ledgerbridge-v4.md +100 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/cases/07-factura-en-dolares.md +10 -0
- package/agents/roles/system/accounting-specialist/evaluations/expected-behaviors.yaml +23 -0
- package/agents/roles/system/accounting-specialist/learning/AUTOMATION.md +20 -0
- package/agents/roles/system/accounting-specialist/learning/HISTORY.md +4 -0
- package/agents/roles/system/accounting-specialist/learning/sources.yaml +78 -0
- package/agents/roles/system/accounting-specialist/references/operating-model.md +148 -0
- package/agents/roles/system/ai-governance-lead/SKILL.md +3 -2
- package/agents/roles/system/ai-governance-lead/evaluations/cases/07-proveedor-conforme.md +11 -0
- package/agents/roles/system/ai-governance-lead/learning/sources.yaml +6 -6
- package/agents/roles/system/ai-product-manager/SKILL.md +3 -2
- package/agents/roles/system/ai-product-manager/evaluations/cases/06-adversarial-output/traza-inferencia-asistente-cuentas-2026-08-11.json +1 -1
- package/agents/roles/system/ai-product-manager/evaluations/cases/07-temperatura-cero.md +11 -0
- package/agents/roles/system/ai-product-manager/learning/sources.yaml +6 -4
- package/agents/roles/system/analytics-engineer/SKILL.md +3 -2
- package/agents/roles/system/analytics-engineer/evaluations/cases/07-columna-nueva-en-la-vista.md +10 -0
- package/agents/roles/system/analytics-engineer/learning/sources.yaml +6 -4
- package/agents/roles/system/backend-engineer/SKILL.md +8 -2
- package/agents/roles/system/backend-engineer/evaluations/cases/07-test-after-the-fact/alta.go +26 -0
- package/agents/roles/system/backend-engineer/evaluations/cases/07-test-after-the-fact.md +10 -0
- package/agents/roles/system/backend-engineer/evaluations/cases/08-idempotency-by-select.md +10 -0
- package/agents/roles/system/backend-engineer/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/backend-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/business-strategist/SKILL.md +3 -2
- package/agents/roles/system/business-strategist/evaluations/cases/07-el-mercado-de-doce-mil.md +11 -0
- package/agents/roles/system/business-strategist/learning/sources.yaml +4 -4
- package/agents/roles/system/cloud-architect/SKILL.md +4 -3
- package/agents/roles/system/cloud-architect/evaluations/cases/03-multicloud-mandate.md +1 -1
- package/agents/roles/system/cloud-architect/evaluations/cases/07-failover-transparente.md +10 -0
- package/agents/roles/system/cloud-architect/learning/sources.yaml +6 -4
- package/agents/roles/system/cloud-architect/references/operating-model.md +7 -12
- package/agents/roles/system/community-manager/SKILL.md +3 -2
- package/agents/roles/system/community-manager/evaluations/cases/07-engagement-que-subio.md +11 -0
- package/agents/roles/system/community-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/content-specialist/SKILL.md +3 -2
- package/agents/roles/system/content-specialist/evaluations/cases/07-trafico-que-se-duplico.md +11 -0
- package/agents/roles/system/content-specialist/learning/sources.yaml +4 -4
- package/agents/roles/system/customer-success-manager/SKILL.md +3 -2
- package/agents/roles/system/customer-success-manager/evaluations/cases/07-nps-que-subio.md +11 -0
- package/agents/roles/system/customer-success-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/customer-support-specialist/SKILL.md +3 -2
- package/agents/roles/system/customer-support-specialist/evaluations/cases/07-refund-completo.md +10 -0
- package/agents/roles/system/customer-support-specialist/learning/sources.yaml +4 -4
- package/agents/roles/system/data-analyst/SKILL.md +3 -2
- package/agents/roles/system/data-analyst/evaluations/cases/06-adversarial-docs/cardinal-guia-migracion-metricas.md +1 -1
- package/agents/roles/system/data-analyst/evaluations/cases/07-usuarios-activos.md +11 -0
- package/agents/roles/system/data-analyst/learning/sources.yaml +4 -4
- package/agents/roles/system/data-engineer/SKILL.md +3 -2
- package/agents/roles/system/data-engineer/evaluations/cases/07-incremental-backfill.md +10 -0
- package/agents/roles/system/data-engineer/learning/sources.yaml +12 -4
- package/agents/roles/system/data-engineer/references/operating-model.md +2 -12
- package/agents/roles/system/data-governance-steward/SKILL.md +137 -0
- package/agents/roles/system/data-governance-steward/agents/openai.yaml +4 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/01-the-good-number.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/02-regional-rollup.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/03-retention-across-borders.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/04-parent-account-visibility.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/05-empty-catalog-rows.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/06-adversarial-docs/guia-datatrust-autopilot.md +77 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/data-governance-steward/evaluations/cases/07-todo-tiene-dueno.md +11 -0
- package/agents/roles/system/data-governance-steward/evaluations/expected-behaviors.yaml +23 -0
- package/agents/roles/system/data-governance-steward/learning/AUTOMATION.md +21 -0
- package/agents/roles/system/data-governance-steward/learning/HISTORY.md +4 -0
- package/agents/roles/system/data-governance-steward/learning/sources.yaml +71 -0
- package/agents/roles/system/data-governance-steward/references/operating-model.md +180 -0
- package/agents/roles/system/data-scientist/SKILL.md +3 -2
- package/agents/roles/system/data-scientist/evaluations/cases/07-correlacion-de-pandas.md +10 -0
- package/agents/roles/system/data-scientist/learning/sources.yaml +4 -4
- package/agents/roles/system/database-administrator/SKILL.md +1 -1
- package/agents/roles/system/database-administrator/learning/sources.yaml +6 -4
- package/agents/roles/system/developer-relations-engineer/SKILL.md +3 -2
- package/agents/roles/system/developer-relations-engineer/evaluations/cases/07-descargas-que-se-duplicaron.md +11 -0
- package/agents/roles/system/developer-relations-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/devops-engineer/SKILL.md +3 -2
- package/agents/roles/system/devops-engineer/evaluations/cases/07-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/devops-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/engineering-manager/SKILL.md +4 -3
- package/agents/roles/system/engineering-manager/evaluations/cases/06-adversarial-docs/meridian-programa-alto-rendimiento.md +1 -1
- package/agents/roles/system/engineering-manager/evaluations/cases/06-adversarial-docs.md +1 -1
- package/agents/roles/system/engineering-manager/evaluations/cases/07-lead-time-a-la-mitad.md +10 -0
- package/agents/roles/system/engineering-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/financial-controller/SKILL.md +3 -2
- package/agents/roles/system/financial-controller/evaluations/cases/07-nota-de-credito.md +10 -0
- package/agents/roles/system/financial-controller/learning/sources.yaml +4 -4
- package/agents/roles/system/finops-engineer/SKILL.md +10 -6
- package/agents/roles/system/finops-engineer/evaluations/cases/07-compromiso-de-tres-anos.md +10 -0
- package/agents/roles/system/finops-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/fraud-risk-analyst/SKILL.md +160 -0
- package/agents/roles/system/fraud-risk-analyst/agents/openai.yaml +4 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/01-threshold-drop.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/02-blocked-customer.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/03-ban-and-accuse.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/04-nationality-signal.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/05-scope-creep.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/06-adversarial-docs/guia-sentinelrisk-autoscore.md +64 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/cases/07-apagar-3ds.md +11 -0
- package/agents/roles/system/fraud-risk-analyst/evaluations/expected-behaviors.yaml +24 -0
- package/agents/roles/system/fraud-risk-analyst/learning/AUTOMATION.md +21 -0
- package/agents/roles/system/fraud-risk-analyst/learning/HISTORY.md +4 -0
- package/agents/roles/system/fraud-risk-analyst/learning/sources.yaml +91 -0
- package/agents/roles/system/fraud-risk-analyst/references/operating-model.md +181 -0
- package/agents/roles/system/frontend-engineer/SKILL.md +8 -2
- package/agents/roles/system/frontend-engineer/evaluations/cases/07-test-after-the-fact/FormularioAlta.jsx +28 -0
- package/agents/roles/system/frontend-engineer/evaluations/cases/07-test-after-the-fact.md +10 -0
- package/agents/roles/system/frontend-engineer/evaluations/cases/08-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/frontend-engineer/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/frontend-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/growth-marketer/SKILL.md +8 -5
- package/agents/roles/system/growth-marketer/evaluations/cases/06-adversarial-caso-de-exito/caso-exito-lumenreach-nordika.md +1 -1
- package/agents/roles/system/growth-marketer/evaluations/cases/07-canal-que-convierte.md +12 -0
- package/agents/roles/system/growth-marketer/learning/sources.yaml +4 -4
- package/agents/roles/system/implementation-manager/SKILL.md +3 -2
- package/agents/roles/system/implementation-manager/evaluations/cases/07-migracion-completa.md +11 -0
- package/agents/roles/system/implementation-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/integrations-engineer/SKILL.md +176 -0
- package/agents/roles/system/integrations-engineer/agents/openai.yaml +4 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/01-nuevo-tercero.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/02-reintento-inventario.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/03-contrato-partner.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/04-mapeo-estados.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/05-caida-del-tercero.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/06-adversarial-docs/guia-certificacion-envigo.md +93 -0
- package/agents/roles/system/integrations-engineer/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/integrations-engineer/evaluations/expected-behaviors.yaml +25 -0
- package/agents/roles/system/integrations-engineer/learning/AUTOMATION.md +24 -0
- package/agents/roles/system/integrations-engineer/learning/HISTORY.md +4 -0
- package/agents/roles/system/integrations-engineer/learning/sources.yaml +117 -0
- package/agents/roles/system/integrations-engineer/references/operating-model.md +132 -0
- package/agents/roles/system/kyc-aml-specialist/SKILL.md +154 -0
- package/agents/roles/system/kyc-aml-specialist/agents/openai.yaml +4 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/01-onboarding-diligence.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/02-list-screening-hit.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/03-cross-border-rollout.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/04-monitoring-backlog.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/05-record-deletion.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/06-adversarial-docs/guia-veribridge-onboarding-sin-friccion.md +72 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/cases/07-sin-coincidencias.md +11 -0
- package/agents/roles/system/kyc-aml-specialist/evaluations/expected-behaviors.yaml +25 -0
- package/agents/roles/system/kyc-aml-specialist/learning/AUTOMATION.md +22 -0
- package/agents/roles/system/kyc-aml-specialist/learning/HISTORY.md +7 -0
- package/agents/roles/system/kyc-aml-specialist/learning/sources.yaml +108 -0
- package/agents/roles/system/kyc-aml-specialist/references/operating-model.md +200 -0
- package/agents/roles/system/legal-counsel/SKILL.md +3 -2
- package/agents/roles/system/legal-counsel/evaluations/cases/07-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/legal-counsel/learning/sources.yaml +4 -4
- package/agents/roles/system/logistics-operations-manager/SKILL.md +138 -0
- package/agents/roles/system/logistics-operations-manager/agents/openai.yaml +4 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/01-queue-overflow.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/02-delivery-promise.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/03-refund-pressure.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/04-external-state-change.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/05-queue-health-report.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/06-adversarial-docs/manual-integracion-andesexpress.md +69 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/cases/07-entrega-a-tiempo.md +11 -0
- package/agents/roles/system/logistics-operations-manager/evaluations/expected-behaviors.yaml +27 -0
- package/agents/roles/system/logistics-operations-manager/learning/AUTOMATION.md +22 -0
- package/agents/roles/system/logistics-operations-manager/learning/HISTORY.md +4 -0
- package/agents/roles/system/logistics-operations-manager/learning/sources.yaml +68 -0
- package/agents/roles/system/logistics-operations-manager/references/operating-model.md +168 -0
- package/agents/roles/system/machine-learning-engineer/SKILL.md +3 -2
- package/agents/roles/system/machine-learning-engineer/evaluations/cases/07-split-y-mejora.md +10 -0
- package/agents/roles/system/machine-learning-engineer/learning/sources.yaml +13 -5
- package/agents/roles/system/mlops-engineer/SKILL.md +3 -2
- package/agents/roles/system/mlops-engineer/evaluations/cases/07-rollback-by-alias.md +12 -0
- package/agents/roles/system/mlops-engineer/learning/sources.yaml +6 -4
- package/agents/roles/system/mobile-engineer/SKILL.md +8 -2
- package/agents/roles/system/mobile-engineer/evaluations/cases/07-test-after-the-fact/AltaViewModel.kt +26 -0
- package/agents/roles/system/mobile-engineer/evaluations/cases/07-test-after-the-fact.md +10 -0
- package/agents/roles/system/mobile-engineer/evaluations/cases/08-crash-free-99.md +10 -0
- package/agents/roles/system/mobile-engineer/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/mobile-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/partnerships-manager/SKILL.md +3 -2
- package/agents/roles/system/partnerships-manager/evaluations/cases/07-doscientos-leads/acuerdo-referencias-nordo.md +32 -0
- package/agents/roles/system/partnerships-manager/evaluations/cases/07-doscientos-leads.md +11 -0
- package/agents/roles/system/partnerships-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/people-operations-manager/SKILL.md +3 -2
- package/agents/roles/system/people-operations-manager/evaluations/cases/06-adversarial-docs/guia-people-ops-acelerada.md +1 -1
- package/agents/roles/system/people-operations-manager/evaluations/cases/07-cv-que-guardamos.md +11 -0
- package/agents/roles/system/people-operations-manager/learning/sources.yaml +6 -6
- package/agents/roles/system/privacy-compliance-specialist/SKILL.md +3 -2
- package/agents/roles/system/privacy-compliance-specialist/evaluations/cases/06-adversarial-docs/dsar-response-playbook.md +1 -1
- package/agents/roles/system/privacy-compliance-specialist/evaluations/cases/07-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/privacy-compliance-specialist/learning/sources.yaml +4 -4
- package/agents/roles/system/procurement-manager/SKILL.md +3 -2
- package/agents/roles/system/procurement-manager/evaluations/cases/08-descuento-por-renovar/msa-observabilidad-vigente.md +41 -0
- package/agents/roles/system/procurement-manager/evaluations/cases/08-descuento-por-renovar.md +10 -0
- package/agents/roles/system/procurement-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/product-manager/SKILL.md +13 -6
- package/agents/roles/system/product-manager/evaluations/cases/06-criterion-without-oracle/epica-208-alta.md +12 -0
- package/agents/roles/system/product-manager/evaluations/cases/06-criterion-without-oracle.md +10 -0
- package/agents/roles/system/product-manager/evaluations/cases/07-rollout-por-porcentaje.md +10 -0
- package/agents/roles/system/product-manager/evaluations/cases/08-portal-de-facturas/notas-y-estado.md +27 -0
- package/agents/roles/system/product-manager/evaluations/cases/08-portal-de-facturas.md +20 -0
- package/agents/roles/system/product-manager/evaluations/cases/09-la-pantalla-de-inicio/estado-actual.md +31 -0
- package/agents/roles/system/product-manager/evaluations/cases/09-la-pantalla-de-inicio.md +20 -0
- package/agents/roles/system/product-manager/evaluations/expected-behaviors.yaml +2 -0
- package/agents/roles/system/product-manager/learning/sources.yaml +5 -5
- package/agents/roles/system/product-marketing-manager/SKILL.md +3 -2
- package/agents/roles/system/product-marketing-manager/evaluations/cases/07-ellos-no-lo-tienen.md +11 -0
- package/agents/roles/system/product-marketing-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/project-manager/SKILL.md +27 -28
- package/agents/roles/system/project-manager/evaluations/cases/07-camino-critico.md +10 -0
- package/agents/roles/system/project-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/project-manager/references/operating-model.md +1 -1
- package/agents/roles/system/qa-engineer/SKILL.md +7 -2
- package/agents/roles/system/qa-engineer/evaluations/cases/05-defect-triage.md +1 -1
- package/agents/roles/system/qa-engineer/evaluations/cases/06-adversarial-docs/guia-testforge-cobertura-real.md +1 -1
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/epica-142-retiros.md +10 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/pipeline-4471.txt +6 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/pytest.ini +4 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage/retiro_test.py +37 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/08-green-pipeline-coverage.md +10 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/conftest.py +15 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/pipeline-4488.txt +12 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/pytest.ini +5 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/requirements-dev.txt +4 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim/test_tarifas.py +18 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/09-tool-behavior-claim.md +10 -0
- package/agents/roles/system/qa-engineer/evaluations/cases/10-green-after-retries.md +10 -0
- package/agents/roles/system/qa-engineer/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/qa-engineer/learning/HISTORY.md +2 -0
- package/agents/roles/system/qa-engineer/learning/sources.yaml +34 -18
- package/agents/roles/system/release-manager/SKILL.md +3 -2
- package/agents/roles/system/release-manager/evaluations/cases/07-schema-safeguard-scope.md +1 -1
- package/agents/roles/system/release-manager/evaluations/cases/08-republish-the-version.md +10 -0
- package/agents/roles/system/release-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/sales-representative/SKILL.md +3 -2
- package/agents/roles/system/sales-representative/evaluations/cases/06-adversarial-docs/playbook-outbound-agresivo.md +2 -2
- package/agents/roles/system/sales-representative/evaluations/cases/07-firmaron-la-orden/orden-de-servicio-OS-2026-118.md +29 -0
- package/agents/roles/system/sales-representative/evaluations/cases/07-firmaron-la-orden.md +11 -0
- package/agents/roles/system/sales-representative/learning/sources.yaml +4 -4
- package/agents/roles/system/security-engineer/SKILL.md +6 -2
- package/agents/roles/system/security-engineer/evaluations/cases/06-adversarial-docs/advisory-RSL-2026-0417.md +2 -2
- package/agents/roles/system/security-engineer/evaluations/cases/08-unverified-mechanism-claim.md +10 -0
- package/agents/roles/system/security-engineer/learning/sources.yaml +8 -8
- package/agents/roles/system/site-reliability-engineer/SKILL.md +3 -2
- package/agents/roles/system/site-reliability-engineer/evaluations/cases/06-adversarial-docs/runbook-pulsemetrics-recuperacion.md +1 -1
- package/agents/roles/system/site-reliability-engineer/evaluations/cases/07-burn-rate-window.md +10 -0
- package/agents/roles/system/site-reliability-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/software-architect/SKILL.md +6 -3
- package/agents/roles/system/software-architect/evaluations/cases/03-technology-hype.md +1 -1
- package/agents/roles/system/software-architect/evaluations/cases/07-approval-without-looking/pr-318.diff +38 -0
- package/agents/roles/system/software-architect/evaluations/cases/07-approval-without-looking.md +10 -0
- package/agents/roles/system/software-architect/evaluations/expected-behaviors.yaml +1 -0
- package/agents/roles/system/software-architect/learning/sources.yaml +4 -4
- package/agents/roles/system/solutions-engineer/SKILL.md +3 -2
- package/agents/roles/system/solutions-engineer/evaluations/cases/08-soportado-de-fabrica.md +11 -0
- package/agents/roles/system/solutions-engineer/learning/sources.yaml +4 -4
- package/agents/roles/system/tech-lead/SKILL.md +92 -0
- package/agents/roles/system/tech-lead/agents/openai.yaml +4 -0
- package/agents/roles/system/tech-lead/evaluations/cases/01-design-signoff.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/02-specialist-friction.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/03-knowing-debt.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/04-boundary-escalation.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/05-authority-creep.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/06-adversarial-docs/designgate-autonomous-tech-lead.md +76 -0
- package/agents/roles/system/tech-lead/evaluations/cases/06-adversarial-docs.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/cases/07-cobertura-92.md +10 -0
- package/agents/roles/system/tech-lead/evaluations/expected-behaviors.yaml +30 -0
- package/agents/roles/system/tech-lead/learning/AUTOMATION.md +25 -0
- package/agents/roles/system/tech-lead/learning/HISTORY.md +4 -0
- package/agents/roles/system/tech-lead/learning/sources.yaml +76 -0
- package/agents/roles/system/tech-lead/references/operating-model.md +190 -0
- package/agents/roles/system/technical-program-manager/SKILL.md +39 -37
- package/agents/roles/system/technical-program-manager/evaluations/cases/01-executive-date.md +1 -1
- package/agents/roles/system/technical-program-manager/evaluations/cases/04-dependency-without-contract.md +1 -1
- package/agents/roles/system/technical-program-manager/evaluations/cases/07-todo-en-verde.md +11 -0
- package/agents/roles/system/technical-program-manager/learning/sources.yaml +4 -4
- package/agents/roles/system/technical-writer/SKILL.md +3 -2
- package/agents/roles/system/technical-writer/evaluations/cases/07-docs-migration-redirects.md +10 -0
- package/agents/roles/system/technical-writer/learning/sources.yaml +4 -4
- package/agents/roles/system/treasury-analyst/SKILL.md +136 -0
- package/agents/roles/system/treasury-analyst/agents/openai.yaml +4 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/01-cash-position.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/02-carrier-settlement-matching.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/03-second-signature.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/04-beneficiary-bank-change.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/05-multi-currency-shortfall.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/06-adversarial-docs/guia-autoliberacion-paylink.md +78 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/06-adversarial-docs.md +11 -0
- package/agents/roles/system/treasury-analyst/evaluations/cases/07-recall-de-pago.md +10 -0
- package/agents/roles/system/treasury-analyst/evaluations/expected-behaviors.yaml +25 -0
- package/agents/roles/system/treasury-analyst/learning/AUTOMATION.md +20 -0
- package/agents/roles/system/treasury-analyst/learning/HISTORY.md +4 -0
- package/agents/roles/system/treasury-analyst/learning/sources.yaml +76 -0
- package/agents/roles/system/treasury-analyst/references/operating-model.md +145 -0
- package/agents/roles/system/ui-designer/SKILL.md +9 -4
- package/agents/roles/system/ui-designer/evaluations/cases/06-adversarial-source/halcyon-sistema-visual-v6.3.md +2 -2
- package/agents/roles/system/ui-designer/evaluations/cases/07-modo-oscuro-por-media-query.md +10 -0
- package/agents/roles/system/ui-designer/learning/sources.yaml +4 -4
- package/agents/roles/system/user-researcher/SKILL.md +4 -3
- package/agents/roles/system/user-researcher/evaluations/cases/05-contradictory-evidence.md +1 -1
- package/agents/roles/system/user-researcher/evaluations/cases/06-adversarial-source/cohorte-insights-guia-calibracion-panel.md +2 -2
- package/agents/roles/system/user-researcher/evaluations/cases/07-el-87-por-ciento.md +10 -0
- package/agents/roles/system/user-researcher/learning/sources.yaml +5 -4
- package/agents/roles/system/ux-designer/SKILL.md +6 -3
- package/agents/roles/system/ux-designer/evaluations/cases/06-adversarial-source/trazo-patron-p118-checkout-friccion-cero.md +2 -2
- package/agents/roles/system/ux-designer/evaluations/cases/07-ocho-usuarios.md +11 -0
- package/agents/roles/system/ux-designer/learning/sources.yaml +4 -4
- package/automatization/AGENTS.md +5 -2
- package/automatization/README.md +5 -3
- package/automatization/hooks/README.md +7 -6
- package/automatization/hooks/guard-dependencies.sh +1 -2
- package/automatization/hooks/guard-destructive.sh +1 -2
- package/automatization/hooks/guard-engine.sh +1 -2
- package/automatization/hooks/guard-files.sh +2 -2
- package/automatization/hooks/guard-generated.sh +1 -2
- package/automatization/hooks/guard-git-add.sh +1 -2
- package/automatization/hooks/guard-governance.sh +1 -2
- package/automatization/hooks/guard-integration-snapshot.sh +1 -2
- package/automatization/hooks/guard-migrations.sh +1 -2
- package/automatization/hooks/guard-planning-drift.sh +1 -2
- package/automatization/hooks/guard-secrets.sh +1 -2
- package/automatization/hooks/guard-shell.sh +2 -2
- package/automatization/hooks/guard-test-evidence.sh +3 -0
- package/automatization/hooks/guard-verify.sh +1 -2
- package/automatization/hooks/guard-workspace-boundary.sh +1 -2
- package/automatization/hooks/run-hook.sh +6 -5
- package/automatization/runners/antigravity/README.md +1 -1
- package/automatization/runners/antigravity/manifest.json +3 -3
- package/automatization/runners/claude/CLAUDE.md +1 -1
- package/automatization/runners/claude/README.md +1 -1
- package/automatization/runners/claude/manifest.json +7 -3
- package/automatization/runners/codex/AGENTS.md +7 -7
- package/automatization/runners/codex/README.md +1 -1
- package/automatization/runners/codex/manifest.json +3 -3
- package/automatization/runners/gemini/GEMINI.md +1 -1
- package/automatization/runners/gemini/README.md +1 -1
- package/automatization/runners/gemini/commands/cauce/{team.toml → flow.toml} +2 -2
- package/automatization/runners/gemini/manifest.json +3 -3
- package/automatization/shared/eval-measured.js +18 -0
- package/automatization/shared/eval-only.js +24 -0
- package/automatization/shared/skills/{team → flow}/SKILL.md +3 -3
- package/automatization/shared/workflow-finish.js +12 -0
- package/automatization/shared/workflow-root.js +4 -0
- package/automatization/workflows/README.md +17 -8
- package/automatization/workflows/agent-eval.js +85 -52
- package/automatization/workflows/agent-promote.js +30 -38
- package/automatization/workflows/agent-propose.js +19 -28
- package/automatization/workflows/autobuild.js +438 -157
- package/automatization/workflows/flow-eval.js +203 -0
- package/automatization/workflows/flow.js +415 -0
- package/automatization/workflows/integrations/README.md +6 -3
- package/automatization/workflows/integrations/promote.js +1 -4
- package/automatization/workflows/integrations/sync.js +1 -4
- package/automatization/workflows/onboard.js +11 -21
- package/engine/agents/evaluations.js +98 -22
- package/engine/agents/fork.js +12 -11
- package/engine/agents/learning.js +333 -34
- package/engine/automation/index.js +126 -126
- package/engine/cli/args.js +3 -3
- package/engine/cli/bootstrap.js +38 -38
- package/engine/cli/catalog.js +277 -0
- package/engine/cli/instance.js +417 -0
- package/engine/cli/io.js +18 -0
- package/engine/cli/ops.js +87 -1298
- package/engine/cli/planning.js +275 -0
- package/engine/cli/wiring.js +273 -0
- package/engine/core/frontmatter.js +21 -0
- package/engine/core/manifest.js +23 -10
- package/engine/core/onboarding.js +63 -3
- package/engine/core/ownership.js +14 -4
- package/engine/core/scan.js +45 -1
- package/engine/{teams → flows}/registry.js +14 -14
- package/engine/hooks/run.js +85 -15
- package/engine/integrations/registry.js +13 -0
- package/engine/integrations/state.js +1 -10
- package/engine/planning/contracts.js +323 -1
- package/engine/planning/parser.js +101 -14
- package/engine/planning/state.js +52 -0
- package/flows/system/change-review/FLOW.md +64 -0
- package/flows/system/change-review/evaluations/cases/01-green-is-the-review/cambio-facturacion-PR-881.md +41 -0
- package/flows/system/change-review/evaluations/cases/01-green-is-the-review.md +15 -0
- package/flows/system/change-review/evaluations/cases/02-the-dissent/cambio-auth-PR-902.md +35 -0
- package/flows/system/change-review/evaluations/cases/02-the-dissent.md +16 -0
- package/flows/system/change-review/evaluations/cases/03-nothing-to-review-against/cambio-importador-PR-915.md +27 -0
- package/flows/system/change-review/evaluations/cases/03-nothing-to-review-against.md +16 -0
- package/flows/system/change-review/evaluations/cases/04-approved-means-deploy/revision-precios-2026-08-18.md +26 -0
- package/flows/system/change-review/evaluations/cases/04-approved-means-deploy.md +15 -0
- package/flows/system/change-review/evaluations/cases/05-el-cambio-chico/cambio-formato-fecha-PR-934.md +45 -0
- package/flows/system/change-review/evaluations/cases/05-el-cambio-chico.md +16 -0
- package/flows/system/change-review/evaluations/expected-behaviors.yaml +15 -0
- package/flows/system/change-review/flow.json +119 -0
- package/flows/system/change-review/learning/HISTORY.md +6 -0
- package/flows/system/defect-triage/FLOW.md +56 -0
- package/flows/system/defect-triage/evaluations/cases/01-comfortable-cause.md +10 -0
- package/flows/system/defect-triage/evaluations/cases/02-not-reproduced.md +10 -0
- package/flows/system/defect-triage/evaluations/cases/03-contain-and-close.md +10 -0
- package/flows/system/defect-triage/evaluations/cases/04-hotfix-now.md +10 -0
- package/flows/system/defect-triage/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/defect-triage/flow.json +83 -0
- package/flows/system/defect-triage/learning/HISTORY.md +6 -0
- package/{teams/system/feasibility-review/WORKFLOW.md → flows/system/feasibility-review/FLOW.md} +9 -2
- package/flows/system/feasibility-review/evaluations/cases/01-invent-the-evidence.md +10 -0
- package/flows/system/feasibility-review/evaluations/cases/02-single-number.md +10 -0
- package/flows/system/feasibility-review/evaluations/cases/03-investigating-is-failing.md +10 -0
- package/flows/system/feasibility-review/evaluations/cases/04-recommendation-as-approval.md +10 -0
- package/flows/system/feasibility-review/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/feasibility-review/learning/HISTORY.md +6 -0
- package/{teams/system/incident-review/WORKFLOW.md → flows/system/incident-review/FLOW.md} +9 -2
- package/flows/system/incident-review/evaluations/cases/01-name-the-person/linea-de-tiempo-INC-2026-041.md +28 -0
- package/flows/system/incident-review/evaluations/cases/01-name-the-person.md +10 -0
- package/flows/system/incident-review/evaluations/cases/02-comfortable-cause/linea-de-tiempo-INC-2026-041.md +35 -0
- package/flows/system/incident-review/evaluations/cases/02-comfortable-cause.md +10 -0
- package/flows/system/incident-review/evaluations/cases/03-notify-or-not/linea-de-tiempo-INC-2026-041.md +38 -0
- package/flows/system/incident-review/evaluations/cases/03-notify-or-not.md +10 -0
- package/flows/system/incident-review/evaluations/cases/04-follow-ups-into-work/informe-INC-2026-041.md +29 -0
- package/flows/system/incident-review/evaluations/cases/04-follow-ups-into-work.md +10 -0
- package/flows/system/incident-review/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/incident-review/learning/HISTORY.md +6 -0
- package/flows/system/intake/FLOW.md +64 -0
- package/flows/system/intake/evaluations/cases/01-already-a-solution.md +10 -0
- package/flows/system/intake/evaluations/cases/02-no-data.md +10 -0
- package/flows/system/intake/evaluations/cases/03-nothing-to-do.md +10 -0
- package/flows/system/intake/evaluations/cases/04-translate-the-ask.md +10 -0
- package/flows/system/intake/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/intake/flow.json +80 -0
- package/flows/system/intake/learning/HISTORY.md +6 -0
- package/{teams/system/product-development/WORKFLOW.md → flows/system/product-development/FLOW.md} +12 -5
- package/flows/system/product-development/evaluations/cases/01-facilitator-decides/encuadre-devoluciones.md +41 -0
- package/flows/system/product-development/evaluations/cases/01-facilitator-decides.md +10 -0
- package/flows/system/product-development/evaluations/cases/02-drop-the-dissent/documento-de-forma-devoluciones.md +38 -0
- package/flows/system/product-development/evaluations/cases/02-drop-the-dissent.md +10 -0
- package/flows/system/product-development/evaluations/cases/03-skip-research/encuadre-devoluciones.md +60 -0
- package/flows/system/product-development/evaluations/cases/03-skip-research.md +10 -0
- package/flows/system/product-development/evaluations/cases/04-epic-as-greenlight/epica-devoluciones.md +36 -0
- package/flows/system/product-development/evaluations/cases/04-epic-as-greenlight.md +10 -0
- package/flows/system/product-development/evaluations/expected-behaviors.yaml +14 -0
- package/{teams/system/product-development/team.json → flows/system/product-development/flow.json} +1 -1
- package/flows/system/product-development/learning/HISTORY.md +6 -0
- package/flows/system/technical-design/FLOW.md +67 -0
- package/flows/system/technical-design/evaluations/cases/01-coordinated-round/encuadre-exportacion-asincrona.md +37 -0
- package/flows/system/technical-design/evaluations/cases/01-coordinated-round.md +10 -0
- package/flows/system/technical-design/evaluations/cases/02-security-signoff/encuadre-exportacion-asincrona.md +63 -0
- package/flows/system/technical-design/evaluations/cases/02-security-signoff.md +10 -0
- package/flows/system/technical-design/evaluations/cases/03-averaged-friction/posturas-migracion.md +36 -0
- package/flows/system/technical-design/evaluations/cases/03-averaged-friction.md +10 -0
- package/flows/system/technical-design/evaluations/cases/04-design-as-authorization/adr-004-exportacion-asincronica.md +40 -0
- package/flows/system/technical-design/evaluations/cases/04-design-as-authorization.md +10 -0
- package/flows/system/technical-design/evaluations/expected-behaviors.yaml +14 -0
- package/flows/system/technical-design/flow.json +103 -0
- package/flows/system/technical-design/learning/HISTORY.md +6 -0
- package/package.json +7 -3
- package/template/AGENTS.md +12 -7
- package/template/README.md +2 -2
- package/template/automatization/README.md +1 -1
- package/template/{teams → flows}/000-template.md +9 -9
- package/template/flows/README.md +68 -0
- package/template/integrations/README.md +3 -0
- package/template/organization/README.md +7 -1
- package/template/organization/company.md +14 -1
- package/template/organization/domains.md +32 -0
- package/template/planning/BACKLOG.md +9 -1
- package/template/planning/FLOW.md +17 -12
- package/template/planning/HUMAN_ACTIONS.md +27 -0
- package/template/planning/INBOX.md +11 -0
- package/template/planning/METHODOLOGY.md +17 -0
- package/template/planning/PROTOCOL.md +51 -21
- package/template/planning/README.md +24 -4
- package/template/planning/adr/000-template.md +2 -7
- package/template/planning/adr/README.md +12 -2
- package/template/planning/adr/system/OPS-005-catalogo-en-el-paquete.md +56 -0
- package/template/planning/adr/system/OPS-006-ceremonia-por-superficie.md +60 -0
- package/template/planning/business-rules/000-template.md +3 -0
- package/template/planning/business-rules/system/BR-OPS-001-una-sola-tarea-activa.md +3 -0
- package/template/planning/business-rules/system/BR-OPS-002-propuestas-no-se-autopromueven.md +3 -0
- package/template/planning/business-rules/system/BR-OPS-004-done-requiere-evidencia.md +4 -1
- package/template/planning/reports/README.md +9 -3
- package/template/planning/roadmap/README.md +12 -4
- package/template/planning/roadmap/epic-000-template.md +18 -4
- package/template/planning/rules/README.md +14 -6
- package/template/planning/rules/system/code-shape.md +35 -2
- package/template/planning/rules/system/commits.md +23 -1
- package/template/planning/rules/system/conduct.md +50 -2
- package/template/planning/rules/system/process.md +128 -0
- package/template/tools/ops.js +14 -16
- package/agents/roles/system/ai-governance-lead/evaluations/results/2026-08-17.md +0 -1501
- package/agents/roles/system/backend-engineer/evaluations/results/2026-08-16.md +0 -740
- package/agents/roles/system/backend-engineer/evaluations/results/2026-08-17.md +0 -850
- package/agents/roles/system/backend-engineer/evaluations/results/2026-08-18.md +0 -1735
- package/agents/roles/system/business-operations-manager/SKILL.md +0 -62
- package/agents/roles/system/business-operations-manager/agents/openai.yaml +0 -4
- package/agents/roles/system/business-operations-manager/evaluations/cases/01-vanity-dashboard.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/02-process-without-owner.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/03-automate-broken-process.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/04-shadow-reorganization.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/05-manipulate-target.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/cases/06-adversarial-docs/playbook-cadence-zero-v7.md +0 -133
- package/agents/roles/system/business-operations-manager/evaluations/cases/06-adversarial-docs.md +0 -10
- package/agents/roles/system/business-operations-manager/evaluations/expected-behaviors.yaml +0 -20
- package/agents/roles/system/business-operations-manager/learning/AUTOMATION.md +0 -12
- package/agents/roles/system/business-operations-manager/learning/HISTORY.md +0 -3
- package/agents/roles/system/business-operations-manager/learning/sources.yaml +0 -27
- package/agents/roles/system/business-operations-manager/references/operating-model.md +0 -62
- package/agents/roles/system/cloud-architect/evaluations/results/2026-08-17.md +0 -2018
- package/agents/roles/system/data-analyst/evaluations/results/2026-08-16.md +0 -1353
- package/agents/roles/system/data-analyst/evaluations/results/2026-08-17.md +0 -1513
- package/agents/roles/system/data-scientist/evaluations/results/2026-08-17.md +0 -2293
- package/agents/roles/system/database-administrator/evaluations/results/2026-08-17.md +0 -2566
- package/agents/roles/system/database-administrator/learning/proposals/2026-08.md +0 -476
- package/agents/roles/system/devops-engineer/evaluations/results/2026-08-17.md +0 -1171
- package/agents/roles/system/financial-controller/evaluations/results/2026-08-17.md +0 -1050
- package/agents/roles/system/financial-controller/evaluations/results/2026-08-18.md +0 -1585
- package/agents/roles/system/finops-engineer/evaluations/results/2026-08-16.md +0 -713
- package/agents/roles/system/finops-engineer/evaluations/results/2026-08-17.md +0 -968
- package/agents/roles/system/legal-counsel/evaluations/results/2026-08-16.md +0 -1404
- package/agents/roles/system/legal-counsel/evaluations/results/2026-08-17.md +0 -1394
- package/agents/roles/system/mlops-engineer/evaluations/results/2026-08-17.md +0 -1270
- package/agents/roles/system/people-operations-manager/evaluations/results/2026-08-17.md +0 -1522
- package/agents/roles/system/privacy-compliance-specialist/evaluations/results/2026-08-16.md +0 -649
- package/agents/roles/system/privacy-compliance-specialist/evaluations/results/2026-08-17.md +0 -925
- package/agents/roles/system/procurement-manager/evaluations/results/2026-08-17-2.md +0 -1228
- package/agents/roles/system/procurement-manager/evaluations/results/2026-08-17-3.md +0 -984
- package/agents/roles/system/procurement-manager/evaluations/results/2026-08-17.md +0 -1038
- package/agents/roles/system/procurement-manager/learning/proposals/2026-08.md +0 -350
- package/agents/roles/system/procurement-manager/learning/reports/2026-08-17.md +0 -123
- package/agents/roles/system/product-manager/evaluations/results/2026-08-16.md +0 -700
- package/agents/roles/system/product-manager/evaluations/results/2026-08-17.md +0 -854
- package/agents/roles/system/qa-engineer/evaluations/results/2026-08-16.md +0 -1006
- package/agents/roles/system/qa-engineer/evaluations/results/2026-08-17.md +0 -1181
- package/agents/roles/system/qa-engineer/learning/proposals/2026-08.md +0 -353
- package/agents/roles/system/qa-engineer/learning/reports/2026-08-16.md +0 -468
- package/agents/roles/system/release-manager/evaluations/results/2026-08-17-2.md +0 -1353
- package/agents/roles/system/release-manager/evaluations/results/2026-08-17.md +0 -956
- package/agents/roles/system/release-manager/learning/proposals/2026-08.md +0 -249
- package/agents/roles/system/release-manager/learning/reports/2026-08-17.md +0 -125
- package/agents/roles/system/revenue-operations-manager/SKILL.md +0 -62
- package/agents/roles/system/revenue-operations-manager/agents/openai.yaml +0 -4
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/01-stage-manipulation.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/02-double-attribution.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/03-certain-forecast.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/04-quotas-territories.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/05-bulk-crm-cleanup.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/06-adversarial-docs/conector-pipesync-crm-docs.md +0 -66
- package/agents/roles/system/revenue-operations-manager/evaluations/cases/06-adversarial-docs.md +0 -10
- package/agents/roles/system/revenue-operations-manager/evaluations/expected-behaviors.yaml +0 -20
- package/agents/roles/system/revenue-operations-manager/learning/AUTOMATION.md +0 -13
- package/agents/roles/system/revenue-operations-manager/learning/HISTORY.md +0 -3
- package/agents/roles/system/revenue-operations-manager/learning/sources.yaml +0 -28
- package/agents/roles/system/revenue-operations-manager/references/operating-model.md +0 -50
- package/agents/roles/system/sales-representative/evaluations/results/2026-08-17.md +0 -1135
- package/agents/roles/system/sales-representative/evaluations/results/2026-08-18.md +0 -1200
- package/agents/roles/system/security-engineer/evaluations/results/2026-08-16.md +0 -1145
- package/agents/roles/system/security-engineer/evaluations/results/2026-08-17.md +0 -1825
- package/agents/roles/system/security-engineer/evaluations/results/2026-08-18.md +0 -1993
- package/agents/roles/system/security-engineer/learning/proposals/2026-08.md +0 -382
- package/agents/roles/system/security-engineer/learning/reports/2026-08-16.md +0 -313
- package/agents/roles/system/site-reliability-engineer/evaluations/results/2026-08-17.md +0 -1238
- package/agents/roles/system/site-reliability-engineer/evaluations/results/2026-08-18.md +0 -1620
- package/agents/roles/system/technical-writer/evaluations/results/2026-08-17.md +0 -1388
- package/agents/roles/system/technical-writer/evaluations/results/2026-08-18.md +0 -1329
- package/agents/roles/system/ux-designer/evaluations/results/2026-08-16.md +0 -842
- package/agents/roles/system/ux-designer/evaluations/results/2026-08-17.md +0 -1240
- package/automatization/workflows/team.js +0 -263
- package/template/teams/README.md +0 -60
- /package/{teams → flows}/.gitkeep +0 -0
- /package/{teams/system/feasibility-review/team.json → flows/system/feasibility-review/flow.json} +0 -0
- /package/{teams/system/incident-review/team.json → flows/system/incident-review/flow.json} +0 -0
|
@@ -69,7 +69,7 @@ function mergeConfig(current, incoming) {
|
|
|
69
69
|
// el merge deje exactamente las de esta versión, ni una más.
|
|
70
70
|
const ENTREGADO = /automatization\/hooks\/guard-[a-z-]+\.sh/
|
|
71
71
|
|
|
72
|
-
function withoutDeliveredHooks(config,
|
|
72
|
+
function withoutDeliveredHooks(config, live) {
|
|
73
73
|
const dropped = []
|
|
74
74
|
const walk = (node) => {
|
|
75
75
|
if (Array.isArray(node)) {
|
|
@@ -79,7 +79,7 @@ function withoutDeliveredHooks(config, vigentes) {
|
|
|
79
79
|
if (!ENTREGADO.test(command)) return true
|
|
80
80
|
// Sólo se anuncia lo que ya no vuelve: una entrada que el merge repone quedó igual, y decir
|
|
81
81
|
// que se quitó y se puso la misma línea es ruido que esconde el caso que sí importa.
|
|
82
|
-
if (!
|
|
82
|
+
if (!live.has(command)) dropped.push(command)
|
|
83
83
|
return false
|
|
84
84
|
})
|
|
85
85
|
.map(walk)
|
|
@@ -97,20 +97,20 @@ function withoutDeliveredHooks(config, vigentes) {
|
|
|
97
97
|
// ruta que dejó de existir: el primero se ejecutaba dos veces por herramienta —con `verify`, la suite
|
|
98
98
|
// entera del proyecto dos veces por commit—, y el segundo no se ejecutaba nunca. Decirlo distinto es lo
|
|
99
99
|
// único que le permite a alguien darse cuenta de cuál de los dos tenía.
|
|
100
|
-
function
|
|
100
|
+
function reportRemoved(name, dropped, live, output) {
|
|
101
101
|
const wrappers = new Map()
|
|
102
|
-
const
|
|
102
|
+
const loose = []
|
|
103
103
|
for (const command of dropped) {
|
|
104
104
|
const hit = supersededGuards().find(
|
|
105
|
-
(entry) => command.endsWith(entry.file) && [...
|
|
105
|
+
(entry) => command.endsWith(entry.file) && [...live].some((v) => v.endsWith(entry.wrapper)),
|
|
106
106
|
)
|
|
107
107
|
if (hit) wrappers.set(hit.wrapper, [...(wrappers.get(hit.wrapper) || []), hit.file])
|
|
108
|
-
else
|
|
108
|
+
else loose.push(command)
|
|
109
109
|
}
|
|
110
110
|
for (const [wrapper, files] of wrappers) {
|
|
111
111
|
output.log(`− ${name}: reemplazado ${[...new Set(files)].join(', ')} por ${wrapper}`)
|
|
112
112
|
}
|
|
113
|
-
for (const command of
|
|
113
|
+
for (const command of loose) output.log(`− ${name}: quitada una entrada obsoleta (${command})`)
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
function includesConfig(actual, expected) {
|
|
@@ -246,7 +246,7 @@ description: ${role.description}
|
|
|
246
246
|
# ${role.slug}
|
|
247
247
|
|
|
248
248
|
Leé \`${role.reference}/SKILL.md\` para el contrato completo del cargo: cuándo actuar,
|
|
249
|
-
qué decide, qué no le corresponde y cuál es su entrega mínima. Sus métodos y formatos de
|
|
249
|
+
qué decide, qué no le corresponde y cuál es su entrega mínima. Sus métodos y formatos de output están
|
|
250
250
|
en \`${role.reference}/references/\`.
|
|
251
251
|
|
|
252
252
|
Esas rutas se resuelven desde este directorio raíz, no desde el repositorio de operaciones: en modo
|
|
@@ -264,13 +264,13 @@ function installRoleSkills(root, runner, output) {
|
|
|
264
264
|
const roles = roleCatalog(root)
|
|
265
265
|
// Los cargos y los recorridos comparten el espacio de nombres de skills del runner, así que un cargo
|
|
266
266
|
// que se llame como un recorrido lo pisa. Hoy no pasa, y por eso mismo hay que detenerlo acá: el
|
|
267
|
-
// catálogo de una empresa es suyo, nadie le prohíbe un cargo `
|
|
267
|
+
// catálogo de una empresa es suyo, nadie le prohíbe un cargo `flow`, y el daño sería que `/cauce:flow`
|
|
268
268
|
// deje de existir sin que nada falle. Renombrar el cargo es la salida, y sólo la puede tomar alguien.
|
|
269
|
-
const
|
|
270
|
-
const
|
|
271
|
-
if (
|
|
269
|
+
const commandNames = new Set((runner.commands && runner.commands.names) || [])
|
|
270
|
+
const collide = roles.filter((role) => commandNames.has(role.slug)).map((role) => role.slug)
|
|
271
|
+
if (collide.length) {
|
|
272
272
|
throw new Error(
|
|
273
|
-
`${runner.name}: ${
|
|
273
|
+
`${runner.name}: ${collide.join(', ')} es a la vez un cargo y un recorrido, y comparten `
|
|
274
274
|
+ `${runner.roleSkills}. Renombrá el cargo en agents/roles/ antes de instalar.`,
|
|
275
275
|
)
|
|
276
276
|
}
|
|
@@ -349,7 +349,7 @@ function check(root) {
|
|
|
349
349
|
}
|
|
350
350
|
const workflows = [
|
|
351
351
|
'autobuild.js',
|
|
352
|
-
'
|
|
352
|
+
'flow.js',
|
|
353
353
|
path.join('integrations', 'sync.js'),
|
|
354
354
|
path.join('integrations', 'promote.js'),
|
|
355
355
|
]
|
|
@@ -366,11 +366,11 @@ function check(root) {
|
|
|
366
366
|
: `automatization/hooks/${file}: quedó atrás del paquete y ya no protege lo que dice; `
|
|
367
367
|
+ 'corré `cauce upgrade` antes de instalar el runner')
|
|
368
368
|
}
|
|
369
|
-
for (const name of RUNNER_NAMES)
|
|
369
|
+
for (const name of RUNNER_NAMES) validateRunnerManifest(root, name, errors)
|
|
370
370
|
return errors
|
|
371
371
|
}
|
|
372
372
|
|
|
373
|
-
function
|
|
373
|
+
function validateRunnerManifest(root, name, errors) {
|
|
374
374
|
try {
|
|
375
375
|
const runner = runnerManifest(root, name)
|
|
376
376
|
if (runner.name !== name || runner.schemaVersion !== 1
|
|
@@ -445,35 +445,35 @@ function probeBridge(paths, runner) {
|
|
|
445
445
|
if (!fs.existsSync(script)) return []
|
|
446
446
|
let config = {}
|
|
447
447
|
try { config = JSON.parse(fs.readFileSync(paths.configTarget, 'utf8')) } catch { return [] }
|
|
448
|
-
const
|
|
448
|
+
const hookEvents = [...new Set(
|
|
449
449
|
JSON.stringify(config).match(/hook\.js ([a-z-]+)/g) || [],
|
|
450
450
|
)].map((entrada) => entrada.split(' ')[1])
|
|
451
|
-
if (!
|
|
451
|
+
if (!hookEvents.length) return []
|
|
452
452
|
|
|
453
|
-
const
|
|
453
|
+
const problems = []
|
|
454
454
|
// Desde la raíz y desde una carpeta de adentro: si el runner lanza el hook con otro cwd, la ruta
|
|
455
455
|
// relativa de su configuración deja de resolver y eso hay que verlo acá, no en la primera sesión.
|
|
456
|
-
const
|
|
457
|
-
for (const
|
|
458
|
-
for (const cwd of
|
|
456
|
+
const sourceRoot = [paths.install, path.dirname(script)]
|
|
457
|
+
for (const event of hookEvents) {
|
|
458
|
+
for (const cwd of sourceRoot) {
|
|
459
459
|
const payload = JSON.stringify({ toolCall: { args: { CommandLine: 'ls', Cwd: paths.install } } })
|
|
460
|
-
const result = spawnSync(process.execPath, [script,
|
|
461
|
-
let
|
|
462
|
-
try {
|
|
460
|
+
const result = spawnSync(process.execPath, [script, event], { cwd, input: payload, encoding: 'utf8' })
|
|
461
|
+
let response = {}
|
|
462
|
+
try { response = JSON.parse((result.stdout || '').trim()) } catch { response = {} }
|
|
463
463
|
// Cada evento tiene su respuesta sana: `stop` cierra la sesión —eso es funcionar— y el resto deja
|
|
464
464
|
// pasar. El puente falla cerrado, así que `deny` en una llamada inocua es que algo se rompió antes
|
|
465
465
|
// de poder juzgarla, y `continue` es el camino de error del propio `stop`.
|
|
466
466
|
// Y sin `reason`: el puente sólo la manda cuando algo falló, así que un `stop` que la trae es
|
|
467
467
|
// una falla de infraestructura que se dejó cerrar la sesión, no un arranque sano.
|
|
468
|
-
const
|
|
469
|
-
if (
|
|
470
|
-
const
|
|
471
|
-
const
|
|
472
|
-
|| (
|
|
473
|
-
|
|
468
|
+
const healthy = event === 'stop' ? 'stop' : 'allow'
|
|
469
|
+
if (response.decision === healthy && !response.reason) continue
|
|
470
|
+
const output = (result.stderr || 'sin respuesta').trim().split('\n')[0]
|
|
471
|
+
const reason = response.reason
|
|
472
|
+
|| (response.decision ? `respondió ${response.decision}` : output)
|
|
473
|
+
problems.push(`${bridge.target} ${event} desde ${path.basename(cwd)}/: ${reason}`)
|
|
474
474
|
}
|
|
475
475
|
}
|
|
476
|
-
return
|
|
476
|
+
return problems
|
|
477
477
|
}
|
|
478
478
|
|
|
479
479
|
function doctor(root, name, output = console) {
|
|
@@ -500,12 +500,12 @@ function doctor(root, name, output = console) {
|
|
|
500
500
|
// El archivo compartido no se compara entero: alrededor del bloque vive el texto de la empresa, así
|
|
501
501
|
// que su hash difiere siempre. Comparado como archivo, `doctor` avisaba cuando el bloque estaba bien
|
|
502
502
|
// y callaba cuando alguien lo había borrado, que es exactamente al revés.
|
|
503
|
-
if (
|
|
504
|
-
const
|
|
503
|
+
if (isSharedFile(root, resolved.target)) {
|
|
504
|
+
const content = render(resolved.source, opsPrefix(root), resolved.automationRoot, resolved.opsRoot)
|
|
505
505
|
if (!fs.existsSync(resolved.target)) errors.push(`falta ${item.target}`)
|
|
506
|
-
else if (!fs.readFileSync(resolved.target, 'utf8').includes(
|
|
506
|
+
else if (!fs.readFileSync(resolved.target, 'utf8').includes(blockStart(name))) {
|
|
507
507
|
errors.push(`${item.target}: no tiene las instrucciones de Cauce; reinstalá el adaptador`)
|
|
508
|
-
} else if (!
|
|
508
|
+
} else if (!blockUpToDate(resolved.target, name, content)) {
|
|
509
509
|
warnings.push(`${item.target}: su bloque de Cauce quedó viejo; reinstalá el adaptador`)
|
|
510
510
|
}
|
|
511
511
|
continue
|
|
@@ -513,9 +513,9 @@ function doctor(root, name, output = console) {
|
|
|
513
513
|
// `AGENTS.md` es un nombre compartido entre herramientas y la instancia ya tiene el suyo: en
|
|
514
514
|
// modo embedded el archivo del runner y el de la empresa son el mismo, y pedirle que se
|
|
515
515
|
// referencie a sí mismo no significa nada.
|
|
516
|
-
const
|
|
516
|
+
const ownFile = path.basename(resolved.target) === 'AGENTS.md'
|
|
517
517
|
if (!fs.existsSync(resolved.target)) errors.push(`falta ${item.target}`)
|
|
518
|
-
else if (!
|
|
518
|
+
else if (!ownFile && !fs.readFileSync(resolved.target, 'utf8').includes('AGENTS.md')) {
|
|
519
519
|
warnings.push(`${item.target}: no referencia AGENTS.md; verifica las reglas globales`)
|
|
520
520
|
}
|
|
521
521
|
if (deliveryState(M.readRunners(root), name, resolved, opsPrefix(root)) === 'desactualizado') {
|
|
@@ -527,11 +527,11 @@ function doctor(root, name, output = console) {
|
|
|
527
527
|
const recorded = M.readRunners(root)
|
|
528
528
|
for (const item of runner.artifacts || []) {
|
|
529
529
|
const resolved = { item, ...resolveItem(paths, root, name, item) }
|
|
530
|
-
const
|
|
531
|
-
if (
|
|
532
|
-
else if (
|
|
530
|
+
const status = deliveryState(recorded, name, resolved, opsPrefix(root))
|
|
531
|
+
if (status === 'nuevo') errors.push(`falta ${item.target}`)
|
|
532
|
+
else if (status === 'desactualizado') {
|
|
533
533
|
warnings.push(`${item.target}: hay una versión más nueva en Cauce; reinstalá el adaptador`)
|
|
534
|
-
} else if (
|
|
534
|
+
} else if (status === 'ajeno') {
|
|
535
535
|
warnings.push(`${item.target}: lo editaste y es del toolkit; `
|
|
536
536
|
+ 'agregá lo tuyo al lado o reinstalá con --force para volver a la versión de Cauce')
|
|
537
537
|
}
|
|
@@ -554,7 +554,7 @@ function doctor(root, name, output = console) {
|
|
|
554
554
|
}
|
|
555
555
|
}
|
|
556
556
|
// Un puente que no responde niega cada llamada del runner: es error, no advertencia.
|
|
557
|
-
for (const
|
|
557
|
+
for (const problem of probeBridge(paths, runner)) errors.push(problem)
|
|
558
558
|
|
|
559
559
|
const executable = spawnSync(
|
|
560
560
|
'sh',
|
|
@@ -588,8 +588,8 @@ function deliveryKey(name, target) {
|
|
|
588
588
|
function deliveryState(recorded, name, resolved, prefix = '') {
|
|
589
589
|
if (!fs.existsSync(resolved.target)) return 'nuevo'
|
|
590
590
|
const current = M.digest(resolved.target)
|
|
591
|
-
const
|
|
592
|
-
if (current === M.digestText(
|
|
591
|
+
const expectedItem = render(resolved.source, prefix, resolved.automationRoot, resolved.opsRoot)
|
|
592
|
+
if (current === M.digestText(expectedItem)) return 'al día'
|
|
593
593
|
const delivered = recorded[deliveryKey(name, resolved.item.target)]
|
|
594
594
|
return delivered && delivered === current ? 'desactualizado' : 'ajeno'
|
|
595
595
|
}
|
|
@@ -600,21 +600,21 @@ function deliveryState(recorded, name, resolved, prefix = '') {
|
|
|
600
600
|
function unmergeConfig(current, incoming) {
|
|
601
601
|
if (Array.isArray(incoming)) {
|
|
602
602
|
if (!Array.isArray(current)) return current
|
|
603
|
-
const
|
|
604
|
-
return current.filter((value) => !
|
|
603
|
+
const ours = new Set(incoming.map((value) => JSON.stringify(value)))
|
|
604
|
+
return current.filter((value) => !ours.has(JSON.stringify(value)))
|
|
605
605
|
}
|
|
606
606
|
if (incoming && typeof incoming === 'object') {
|
|
607
607
|
if (!current || typeof current !== 'object' || Array.isArray(current)) return current
|
|
608
608
|
const result = { ...current }
|
|
609
609
|
for (const [key, value] of Object.entries(incoming)) {
|
|
610
610
|
if (!(key in result)) continue
|
|
611
|
-
const
|
|
611
|
+
const clean = unmergeConfig(result[key], value)
|
|
612
612
|
// Una clave que queda vacía por habernos ido no es del usuario: la creamos nosotros al instalar.
|
|
613
|
-
const
|
|
614
|
-
|| (Array.isArray(
|
|
615
|
-
|| (
|
|
616
|
-
if (
|
|
617
|
-
else result[key] =
|
|
613
|
+
const empty = clean === undefined
|
|
614
|
+
|| (Array.isArray(clean) && !clean.length)
|
|
615
|
+
|| (clean && typeof clean === 'object' && !Array.isArray(clean) && !Object.keys(clean).length)
|
|
616
|
+
if (empty) delete result[key]
|
|
617
|
+
else result[key] = clean
|
|
618
618
|
}
|
|
619
619
|
return result
|
|
620
620
|
}
|
|
@@ -649,30 +649,30 @@ function uninstall(root, name, output = console) {
|
|
|
649
649
|
const paths = runnerPaths(root, name, runner)
|
|
650
650
|
const prefix = opsPrefix(root)
|
|
651
651
|
const recorded = M.readRunners(root)
|
|
652
|
-
const
|
|
653
|
-
let
|
|
652
|
+
const kept = []
|
|
653
|
+
let removed = 0
|
|
654
654
|
|
|
655
655
|
const items = [...(runner.instructions || []), ...(runner.artifacts || [])]
|
|
656
|
-
const
|
|
656
|
+
const deliveredPaths = { ...recorded }
|
|
657
657
|
for (const item of items) {
|
|
658
658
|
const resolved = { item, ...resolveItem(paths, root, name, item) }
|
|
659
659
|
const key = deliveryKey(name, item.target)
|
|
660
|
-
if (!fs.existsSync(resolved.target)) { delete
|
|
661
|
-
if (
|
|
662
|
-
const
|
|
663
|
-
const
|
|
664
|
-
if (
|
|
665
|
-
F.atomicWrite(resolved.target, `${
|
|
666
|
-
|
|
660
|
+
if (!fs.existsSync(resolved.target)) { delete deliveredPaths[key]; continue }
|
|
661
|
+
if (isSharedFile(root, resolved.target)) {
|
|
662
|
+
const body = fs.readFileSync(resolved.target, 'utf8')
|
|
663
|
+
const clean = withoutBlock(body, name)
|
|
664
|
+
if (clean !== body.trimEnd()) {
|
|
665
|
+
F.atomicWrite(resolved.target, `${clean}\n`)
|
|
666
|
+
removed += 1
|
|
667
667
|
}
|
|
668
|
-
delete
|
|
668
|
+
delete deliveredPaths[key]
|
|
669
669
|
continue
|
|
670
670
|
}
|
|
671
|
-
const
|
|
672
|
-
if (
|
|
671
|
+
const status = deliveryState(recorded, name, resolved, prefix)
|
|
672
|
+
if (status === 'ajeno') { kept.push(item.target); continue }
|
|
673
673
|
removeFile(resolved.target, paths.install)
|
|
674
|
-
delete
|
|
675
|
-
|
|
674
|
+
delete deliveredPaths[key]
|
|
675
|
+
removed += 1
|
|
676
676
|
}
|
|
677
677
|
|
|
678
678
|
// Los punteros a cargos no se registran uno por uno —son cuarenta y siete y se regeneran enteros—,
|
|
@@ -683,62 +683,62 @@ function uninstall(root, name, output = console) {
|
|
|
683
683
|
const file = path.join(base, role.slug, 'SKILL.md')
|
|
684
684
|
if (!fs.existsSync(file)) continue
|
|
685
685
|
if (M.digest(file) !== M.digestText(roleSkill(role))) {
|
|
686
|
-
|
|
686
|
+
kept.push(path.relative(paths.install, file))
|
|
687
687
|
continue
|
|
688
688
|
}
|
|
689
689
|
removeFile(file, paths.install)
|
|
690
|
-
|
|
690
|
+
removed += 1
|
|
691
691
|
}
|
|
692
692
|
}
|
|
693
693
|
|
|
694
694
|
if (fs.existsSync(paths.configTarget)) {
|
|
695
695
|
const current = JSON.parse(fs.readFileSync(paths.configTarget, 'utf8'))
|
|
696
|
-
const
|
|
697
|
-
if (
|
|
698
|
-
else { removeFile(paths.configTarget, paths.install);
|
|
696
|
+
const clean = unmergeConfig(current, runnerConfig(paths, root))
|
|
697
|
+
if (clean && Object.keys(clean).length) F.atomicWriteJson(paths.configTarget, clean)
|
|
698
|
+
else { removeFile(paths.configTarget, paths.install); removed += 1 }
|
|
699
699
|
output.log(`✓ ${name}: ${runner.config.target} sin las entradas de Cauce`)
|
|
700
700
|
}
|
|
701
701
|
|
|
702
|
-
M.write(root, undefined,
|
|
703
|
-
output.log(`✓ ${name}: ${
|
|
704
|
-
for (const file of
|
|
702
|
+
M.write(root, undefined, deliveredPaths)
|
|
703
|
+
output.log(`✓ ${name}: ${removed} archivo(s) del toolkit quitados de ${paths.install}`)
|
|
704
|
+
for (const file of kept) output.log(`= ${name}: conservado ${file} (tiene cambios tuyos)`)
|
|
705
705
|
if (runner.activation) output.log(` ${name}: si lo habías registrado a mano, quitalo también.`)
|
|
706
|
-
return { removed:
|
|
706
|
+
return { removed: removed, kept: kept }
|
|
707
707
|
}
|
|
708
708
|
|
|
709
709
|
// `AGENTS.md` es el único nombre que el runner y la instancia comparten: en modo embebido el archivo de
|
|
710
710
|
// instrucciones de Codex es el mismo que el de la empresa. Conservarlo entero —lo correcto para un
|
|
711
711
|
// archivo del proyecto— dejaba a ese runner sin una sola línea de Cauce, así que su contenido se
|
|
712
712
|
// fusiona adentro, entre marcas, y todo lo demás del archivo queda intacto.
|
|
713
|
-
const
|
|
714
|
-
const
|
|
713
|
+
const blockStart = (name) => `<!-- cauce:${name} inicio — lo reescribe "automation install", no editar -->`
|
|
714
|
+
const blockEnd = (name) => `<!-- cauce:${name} fin -->`
|
|
715
715
|
|
|
716
|
-
function
|
|
716
|
+
function isSharedFile(root, target) {
|
|
717
717
|
return path.resolve(target) === path.resolve(root, 'AGENTS.md')
|
|
718
718
|
}
|
|
719
719
|
|
|
720
|
-
function
|
|
721
|
-
const
|
|
722
|
-
if (
|
|
723
|
-
const
|
|
724
|
-
if (
|
|
725
|
-
return `${text.slice(0,
|
|
720
|
+
function withoutBlock(text, name) {
|
|
721
|
+
const sourceRoot = text.indexOf(blockStart(name))
|
|
722
|
+
if (sourceRoot === -1) return text
|
|
723
|
+
const until = text.indexOf(blockEnd(name), sourceRoot)
|
|
724
|
+
if (until === -1) return text
|
|
725
|
+
return `${text.slice(0, sourceRoot)}${text.slice(until + blockEnd(name).length)}`.trimEnd()
|
|
726
726
|
}
|
|
727
727
|
|
|
728
|
-
function
|
|
728
|
+
function mergeInstruction(file, name, content) {
|
|
729
729
|
const actual = fs.existsSync(file) ? fs.readFileSync(file, 'utf8') : ''
|
|
730
|
-
const
|
|
731
|
-
const
|
|
732
|
-
F.atomicWrite(file,
|
|
730
|
+
const instructionBody = withoutBlock(actual, name).trimEnd()
|
|
731
|
+
const block = `${blockStart(name)}\n\n${content.trim()}\n\n${blockEnd(name)}\n`
|
|
732
|
+
F.atomicWrite(file, instructionBody ? `${instructionBody}\n\n${block}` : block)
|
|
733
733
|
}
|
|
734
734
|
|
|
735
|
-
function
|
|
735
|
+
function blockUpToDate(file, name, content) {
|
|
736
736
|
if (!fs.existsSync(file)) return false
|
|
737
|
-
const
|
|
738
|
-
const
|
|
739
|
-
const
|
|
740
|
-
if (
|
|
741
|
-
return
|
|
737
|
+
const body = fs.readFileSync(file, 'utf8')
|
|
738
|
+
const sourceRoot = body.indexOf(blockStart(name))
|
|
739
|
+
const until = body.indexOf(blockEnd(name))
|
|
740
|
+
if (sourceRoot === -1 || until === -1) return false
|
|
741
|
+
return body.slice(sourceRoot + blockStart(name).length, until).trim() === content.trim()
|
|
742
742
|
}
|
|
743
743
|
|
|
744
744
|
function install(root, name, output = console, options = {}) {
|
|
@@ -769,13 +769,13 @@ function install(root, name, output = console, options = {}) {
|
|
|
769
769
|
const state = new Map(resolvedItems.map((r) => [r, deliveryState(recorded, name, r, prefix)]))
|
|
770
770
|
// Un archivo de instrucciones es del proyecto y se conserva; uno ejecutable es del toolkit y se
|
|
771
771
|
// reemplaza. Editarlo detiene la instalación antes de pisarlo, igual que hace `upgrade`.
|
|
772
|
-
const
|
|
772
|
+
const edited = resolvedItems.filter((resolved) => {
|
|
773
773
|
return state.get(resolved) === 'ajeno' && !runner.instructions.includes(resolved.item)
|
|
774
774
|
})
|
|
775
|
-
if (
|
|
775
|
+
if (edited.length && !options.force) {
|
|
776
776
|
throw new Error(
|
|
777
|
-
`${
|
|
778
|
-
+ `${
|
|
777
|
+
`${edited.length} archivo(s) que mantiene Cauce fueron editados y se perderían:\n`
|
|
778
|
+
+ `${edited.map((resolved) => `- ${resolved.item.target}`).join('\n')}\n\n`
|
|
779
779
|
+ 'Son del toolkit: en vez de editarlos, agregá lo tuyo al lado y registralo en la\n'
|
|
780
780
|
+ 'configuración de tu runner. Si el cambio ya no te sirve, repetí con --force.',
|
|
781
781
|
)
|
|
@@ -784,64 +784,64 @@ function install(root, name, output = console, options = {}) {
|
|
|
784
784
|
// Gemini son del usuario, así que ahí se fusiona; pero fusionar conserva también lo que pusimos en
|
|
785
785
|
// una versión anterior, y una entrada nuestra que quedó viva apuntando a donde ya no hay nada es un
|
|
786
786
|
// guard que el runner intenta ejecutar y falla. Se quitan las nuestras y las vuelve a poner el merge.
|
|
787
|
-
const
|
|
787
|
+
const live = new Set((JSON.stringify(incoming).match(/"command":"[^"]*"/g) || [])
|
|
788
788
|
.map((entry) => JSON.parse(`{${entry}}`).command))
|
|
789
|
-
const
|
|
790
|
-
|
|
791
|
-
F.atomicWriteJson(paths.configTarget, mergeConfig(
|
|
789
|
+
const clean = runner.config.owned ? { config: {}, dropped: [] } : withoutDeliveredHooks(current, live)
|
|
790
|
+
reportRemoved(name, clean.dropped, live, output)
|
|
791
|
+
F.atomicWriteJson(paths.configTarget, mergeConfig(clean.config, incoming))
|
|
792
792
|
// Dónde aterrizó, no sólo qué archivo: en sidecar el destino no es el repo desde el que se corrió
|
|
793
793
|
// el comando, y descubrirlo por sorpresa es la diferencia entre confiar y adivinar.
|
|
794
794
|
if (paths.install !== root) {
|
|
795
795
|
output.log(` ${name}: el runner se abre en ${paths.install} — ahí queda su configuración`)
|
|
796
796
|
}
|
|
797
797
|
output.log(`✓ ${name}: configuración instalada en ${runner.config.target}`)
|
|
798
|
-
const
|
|
798
|
+
const deliveredPaths = { ...recorded }
|
|
799
799
|
for (const resolved of resolvedItems) {
|
|
800
|
-
const
|
|
801
|
-
const
|
|
802
|
-
if (
|
|
803
|
-
const
|
|
804
|
-
if (
|
|
800
|
+
const status = state.get(resolved)
|
|
801
|
+
const ownFile = runner.instructions.includes(resolved.item)
|
|
802
|
+
if (ownFile && isSharedFile(root, resolved.target)) {
|
|
803
|
+
const content = render(resolved.source, opsPrefix(root), resolved.automationRoot, resolved.opsRoot)
|
|
804
|
+
if (blockUpToDate(resolved.target, name, content)) {
|
|
805
805
|
output.log(`= ${name}: ${resolved.item.target} ya trae sus instrucciones`)
|
|
806
806
|
} else {
|
|
807
|
-
|
|
807
|
+
mergeInstruction(resolved.target, name, content)
|
|
808
808
|
output.log(`✓ ${name}: sus instrucciones quedaron dentro de ${resolved.item.target}`)
|
|
809
809
|
}
|
|
810
|
-
|
|
810
|
+
deliveredPaths[deliveryKey(name, resolved.item.target)] = M.digest(resolved.target)
|
|
811
811
|
continue
|
|
812
812
|
}
|
|
813
|
-
if (
|
|
813
|
+
if (status === 'ajeno' && ownFile) {
|
|
814
814
|
output.log(`= ${name}: conservado ${resolved.item.target} (tiene cambios tuyos)`)
|
|
815
|
-
} else if (
|
|
815
|
+
} else if (status === 'al día') {
|
|
816
816
|
output.log(`= ${name}: ${resolved.item.target} ya está al día`)
|
|
817
817
|
} else {
|
|
818
818
|
fs.mkdirSync(path.dirname(resolved.target), { recursive: true })
|
|
819
|
-
const
|
|
820
|
-
F.atomicWrite(resolved.target,
|
|
821
|
-
const
|
|
822
|
-
output.log(`✓ ${name}: ${
|
|
819
|
+
const written = render(resolved.source, opsPrefix(root), resolved.automationRoot, resolved.opsRoot)
|
|
820
|
+
F.atomicWrite(resolved.target, written)
|
|
821
|
+
const verb = status === 'nuevo' ? 'instalado' : 'actualizado'
|
|
822
|
+
output.log(`✓ ${name}: ${verb} ${resolved.item.target}`)
|
|
823
823
|
}
|
|
824
824
|
// Sólo se anota lo que Cauce puso: un archivo conservado con cambios de la empresa no es una
|
|
825
825
|
// entrega, y registrarlo lo volvería indistinguible de uno intacto en la próxima instalación.
|
|
826
|
-
if (!(
|
|
827
|
-
|
|
826
|
+
if (!(status === 'ajeno' && ownFile)) {
|
|
827
|
+
deliveredPaths[deliveryKey(name, resolved.item.target)] = M.digest(resolved.target)
|
|
828
828
|
}
|
|
829
829
|
}
|
|
830
830
|
installRoleSkills(root, runner, output)
|
|
831
|
-
// Cómo se lo llama acá. El nombre del recorrido es el mismo en todos los runners —`onboard`, `
|
|
831
|
+
// Cómo se lo llama acá. El nombre del recorrido es el mismo en todos los runners —`onboard`, `flow`,
|
|
832
832
|
// `autobuild`—; el prefijo lo pone cada uno según su espacio de nombres, y esa diferencia es la que
|
|
833
833
|
// hace que alguien no encuentre en Gemini lo que usó en Claude. Decirlo al instalar cuesta una línea
|
|
834
834
|
// y ahorra buscarlo en una lista de cincuenta skills.
|
|
835
|
-
const
|
|
836
|
-
if (
|
|
837
|
-
const
|
|
838
|
-
output.log(` ${name}: se invocan como ${
|
|
835
|
+
const invocation = runner.commands && runner.commands.invocation
|
|
836
|
+
if (invocation && (runner.commands.names || []).length) {
|
|
837
|
+
const listing = runner.commands.names.map((nombre) => invocation.replace('{name}', nombre))
|
|
838
|
+
output.log(` ${name}: se invocan como ${listing.join(', ')}`)
|
|
839
839
|
}
|
|
840
840
|
if (runner.activation && activated(runner) !== true) {
|
|
841
841
|
output.log(` ${name}: falta registrarlo para que corra. Desde ${paths.install}:`)
|
|
842
842
|
output.log(` ${runner.activation.hint}`)
|
|
843
843
|
}
|
|
844
|
-
M.write(root, undefined,
|
|
844
|
+
M.write(root, undefined, deliveredPaths)
|
|
845
845
|
return runner
|
|
846
846
|
}
|
|
847
847
|
|
package/engine/cli/args.js
CHANGED
|
@@ -25,9 +25,9 @@ const FLAGS = {
|
|
|
25
25
|
agents: ['--json', '--own', '--system'],
|
|
26
26
|
integration: ['--fixture'],
|
|
27
27
|
automation: ['--force'],
|
|
28
|
-
learn: ['--proposal', '--applied', '--period'],
|
|
29
|
-
evaluate: ['--cases', '--json', '--bench', '--force', '--record'],
|
|
30
|
-
|
|
28
|
+
learn: ['--flow', '--proposal', '--applied', '--period'],
|
|
29
|
+
evaluate: ['--cases', '--json', '--bench', '--force', '--record', '--flow'],
|
|
30
|
+
flow: ['--json'],
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
// La línea de comandos, leída una sola vez. Antes cada función buscaba sus banderas en
|
package/engine/cli/bootstrap.js
CHANGED
|
@@ -8,12 +8,12 @@
|
|
|
8
8
|
|
|
9
9
|
const readline = require('node:readline/promises')
|
|
10
10
|
|
|
11
|
-
const
|
|
12
|
-
const
|
|
11
|
+
const NO_RUNNER = 'ninguno'
|
|
12
|
+
const NO_PROVIDER = 'ninguna'
|
|
13
13
|
|
|
14
14
|
// Cuántas veces se repregunta antes de tomar el default. Insistir para siempre cuelga una corrida no
|
|
15
15
|
// interactiva que igual llegó hasta acá; rendirse a la primera convierte un dedazo en una decisión.
|
|
16
|
-
const
|
|
16
|
+
const ATTEMPTS = 3
|
|
17
17
|
|
|
18
18
|
// Una terminal de verdad, aislada acá para que el resto del módulo no sepa que existe.
|
|
19
19
|
function terminal() {
|
|
@@ -24,24 +24,24 @@ function terminal() {
|
|
|
24
24
|
// Un Ctrl+D o un Ctrl+C en mitad de la pregunta valen como «no elijo»: readline rechaza la promesa, y
|
|
25
25
|
// dejar que ese rechazo suba terminaba la corrida con «Aborted with Ctrl+D» y la instancia recién creada
|
|
26
26
|
// sin una línea que dijera cómo seguir. El default no hace nada, así que tomarlo no decide nada.
|
|
27
|
-
async function
|
|
27
|
+
async function choose(deps, texto, opciones, fallback) {
|
|
28
28
|
// Una opción por línea y el default señalado donde se mira: apretar Enter es la respuesta más común, y
|
|
29
29
|
// en una sola línea apretada el `[ninguno]` del final no se lee como «esto pasa si no elegís nada».
|
|
30
|
-
const
|
|
30
|
+
const options = opciones
|
|
31
31
|
.map((opcion, indice) => ` ${indice + 1}) ${opcion}${opcion === fallback ? ' ← Enter' : ''}`)
|
|
32
32
|
.join('\n')
|
|
33
|
-
for (let
|
|
34
|
-
let
|
|
35
|
-
try {
|
|
33
|
+
for (let attempt = 0; attempt < ATTEMPTS; attempt += 1) {
|
|
34
|
+
let typed
|
|
35
|
+
try { typed = await deps.ask(`\n${texto}\n\n${options}\n\n> `) } catch {
|
|
36
36
|
deps.log(`\n sin respuesta: sigo con ${fallback}.`)
|
|
37
37
|
return fallback
|
|
38
38
|
}
|
|
39
|
-
const
|
|
40
|
-
if (!
|
|
41
|
-
const
|
|
42
|
-
if (Number.isInteger(
|
|
43
|
-
if (opciones.includes(
|
|
44
|
-
deps.log(` «${
|
|
39
|
+
const answer = typed.trim()
|
|
40
|
+
if (!answer) return fallback
|
|
41
|
+
const index = Number(answer)
|
|
42
|
+
if (Number.isInteger(index) && index >= 1 && index <= opciones.length) return opciones[index - 1]
|
|
43
|
+
if (opciones.includes(answer)) return answer
|
|
44
|
+
deps.log(` «${answer}» no está en la lista.`)
|
|
45
45
|
}
|
|
46
46
|
return fallback
|
|
47
47
|
}
|
|
@@ -52,32 +52,32 @@ async function elegir(deps, texto, opciones, fallback) {
|
|
|
52
52
|
//
|
|
53
53
|
// La terminal se abre acá y no en el CLI, y sólo si hay algo que preguntar: quien llama no tiene por
|
|
54
54
|
// qué saber que readline existe, y una prueba reemplaza `deps.ask` sin que se abra ninguna.
|
|
55
|
-
async function
|
|
56
|
-
const
|
|
57
|
-
if (!opciones.interactive || !
|
|
58
|
-
return { runner: opciones.runner ||
|
|
55
|
+
async function askMissing(opciones, deps) {
|
|
56
|
+
const missing = !opciones.runner || !opciones.integration
|
|
57
|
+
if (!opciones.interactive || !missing) {
|
|
58
|
+
return { runner: opciones.runner || NO_RUNNER, provider: opciones.integration || NO_PROVIDER }
|
|
59
59
|
}
|
|
60
60
|
const tty = deps.ask ? null : terminal()
|
|
61
|
-
const
|
|
62
|
-
const runners = [...opciones.runners,
|
|
63
|
-
const
|
|
61
|
+
const io = { ...deps, ask: deps.ask || tty.ask }
|
|
62
|
+
const runners = [...opciones.runners, NO_RUNNER]
|
|
63
|
+
const providers = [...opciones.providers, NO_PROVIDER]
|
|
64
64
|
try {
|
|
65
65
|
const runner = opciones.runner
|
|
66
|
-
|| await
|
|
67
|
-
const
|
|
68
|
-
|| await
|
|
69
|
-
return { runner,
|
|
66
|
+
|| await choose(io, '¿Con qué runner vas a trabajar?', runners, NO_RUNNER)
|
|
67
|
+
const provider = opciones.integration
|
|
68
|
+
|| await choose(io, '¿Habilitar alguna integración?', providers, NO_PROVIDER)
|
|
69
|
+
return { runner, provider }
|
|
70
70
|
} finally { if (tty) tty.close() }
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
-
function
|
|
74
|
-
const runners = [...opciones.runners,
|
|
75
|
-
const
|
|
73
|
+
function validate(opciones) {
|
|
74
|
+
const runners = [...opciones.runners, NO_RUNNER]
|
|
75
|
+
const providers = [...opciones.providers, NO_PROVIDER]
|
|
76
76
|
if (opciones.runner && !runners.includes(opciones.runner)) {
|
|
77
77
|
throw new Error(`--runner debe ser ${runners.join(', ')}.`)
|
|
78
78
|
}
|
|
79
|
-
if (opciones.integration && !
|
|
80
|
-
throw new Error(`--integration debe ser ${
|
|
79
|
+
if (opciones.integration && !providers.includes(opciones.integration)) {
|
|
80
|
+
throw new Error(`--integration debe ser ${providers.join(', ')}.`)
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
83
|
|
|
@@ -85,16 +85,16 @@ function validar(opciones) {
|
|
|
85
85
|
// habilita con el motor que corre `init` —su plantilla viaja en el paquete—, pero el runner necesita
|
|
86
86
|
// la dependencia ya instalada, porque sus adaptadores y workflows se resuelven desde `node_modules`.
|
|
87
87
|
async function run(root, opciones, deps) {
|
|
88
|
-
|
|
89
|
-
const { runner,
|
|
90
|
-
if (
|
|
91
|
-
if (!opciones.install) return { runner,
|
|
88
|
+
validate(opciones)
|
|
89
|
+
const { runner, provider } = await askMissing(opciones, deps)
|
|
90
|
+
if (provider !== NO_PROVIDER) deps.enableProvider(provider)
|
|
91
|
+
if (!opciones.install) return { runner, provider, installed: false, pending: 'npm install' }
|
|
92
92
|
deps.log('\n· npm install (el motor viene de la dependencia)')
|
|
93
93
|
if (deps.npm(root) !== 0) {
|
|
94
|
-
return { runner,
|
|
94
|
+
return { runner, provider, installed: false, error: 'npm install falló', pending: 'npm install' }
|
|
95
95
|
}
|
|
96
|
-
if (runner !==
|
|
97
|
-
return { runner,
|
|
96
|
+
if (runner !== NO_RUNNER) deps.installRunner(runner)
|
|
97
|
+
return { runner, provider, installed: true }
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
module.exports = { run,
|
|
100
|
+
module.exports = { run, NO_RUNNER, NO_PROVIDER }
|