@harness-engineering/cli 1.12.0 → 1.13.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/skills/claude-code/add-harness-component/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/align-documentation/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/check-mechanical-constraints/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/cleanup-dead-code/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/detect-doc-drift/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/enforce-architecture/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-accessibility/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-api-design/SKILL.md +304 -0
- package/dist/agents/skills/claude-code/harness-api-design/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/harness-architecture-advisor/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-auth/SKILL.md +279 -0
- package/dist/agents/skills/claude-code/harness-auth/skill.yaml +81 -0
- package/dist/agents/skills/claude-code/harness-autopilot/SKILL.md +57 -9
- package/dist/agents/skills/claude-code/harness-autopilot/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/claude-code/harness-brainstorming/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-caching/SKILL.md +309 -0
- package/dist/agents/skills/claude-code/harness-caching/skill.yaml +73 -0
- package/dist/agents/skills/claude-code/harness-chaos/SKILL.md +295 -0
- package/dist/agents/skills/claude-code/harness-chaos/skill.yaml +72 -0
- package/dist/agents/skills/claude-code/harness-code-review/SKILL.md +19 -2
- package/dist/agents/skills/claude-code/harness-code-review/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-codebase-cleanup/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-compliance/SKILL.md +303 -0
- package/dist/agents/skills/claude-code/harness-compliance/skill.yaml +78 -0
- package/dist/agents/skills/claude-code/harness-containerization/SKILL.md +284 -0
- package/dist/agents/skills/claude-code/harness-containerization/skill.yaml +80 -0
- package/dist/agents/skills/claude-code/harness-data-pipeline/SKILL.md +274 -0
- package/dist/agents/skills/claude-code/harness-data-pipeline/skill.yaml +81 -0
- package/dist/agents/skills/claude-code/harness-data-validation/SKILL.md +343 -0
- package/dist/agents/skills/claude-code/harness-data-validation/skill.yaml +75 -0
- package/dist/agents/skills/claude-code/harness-database/SKILL.md +258 -0
- package/dist/agents/skills/claude-code/harness-database/skill.yaml +80 -0
- package/dist/agents/skills/claude-code/harness-debugging/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-dependency-health/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-deployment/SKILL.md +255 -0
- package/dist/agents/skills/claude-code/harness-deployment/skill.yaml +77 -0
- package/dist/agents/skills/claude-code/harness-design/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-design-mobile/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-design-system/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-design-web/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-diagnostics/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-docs-pipeline/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-dx/SKILL.md +276 -0
- package/dist/agents/skills/claude-code/harness-dx/skill.yaml +76 -0
- package/dist/agents/skills/claude-code/harness-e2e/SKILL.md +245 -0
- package/dist/agents/skills/claude-code/harness-e2e/skill.yaml +78 -0
- package/dist/agents/skills/claude-code/harness-event-driven/SKILL.md +280 -0
- package/dist/agents/skills/claude-code/harness-event-driven/skill.yaml +77 -0
- package/dist/agents/skills/claude-code/harness-execution/SKILL.md +39 -12
- package/dist/agents/skills/claude-code/harness-execution/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-feature-flags/SKILL.md +287 -0
- package/dist/agents/skills/claude-code/harness-feature-flags/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/harness-git-workflow/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-hotspot-detector/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-i18n/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-i18n-process/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-i18n-workflow/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-impact-analysis/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-incident-response/SKILL.md +223 -0
- package/dist/agents/skills/claude-code/harness-incident-response/skill.yaml +78 -0
- package/dist/agents/skills/claude-code/harness-infrastructure-as-code/SKILL.md +279 -0
- package/dist/agents/skills/claude-code/harness-infrastructure-as-code/skill.yaml +80 -0
- package/dist/agents/skills/claude-code/harness-integration-test/SKILL.md +271 -0
- package/dist/agents/skills/claude-code/harness-integration-test/skill.yaml +73 -0
- package/dist/agents/skills/claude-code/harness-integrity/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-knowledge-mapper/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-load-testing/SKILL.md +274 -0
- package/dist/agents/skills/claude-code/harness-load-testing/skill.yaml +79 -0
- package/dist/agents/skills/claude-code/harness-ml-ops/SKILL.md +341 -0
- package/dist/agents/skills/claude-code/harness-ml-ops/skill.yaml +79 -0
- package/dist/agents/skills/claude-code/harness-mobile-patterns/SKILL.md +326 -0
- package/dist/agents/skills/claude-code/harness-mobile-patterns/skill.yaml +82 -0
- package/dist/agents/skills/claude-code/harness-mutation-test/SKILL.md +251 -0
- package/dist/agents/skills/claude-code/harness-mutation-test/skill.yaml +70 -0
- package/dist/agents/skills/claude-code/harness-observability/SKILL.md +283 -0
- package/dist/agents/skills/claude-code/harness-observability/skill.yaml +78 -0
- package/dist/agents/skills/claude-code/harness-onboarding/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-parallel-agents/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-perf/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-perf-tdd/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-planning/SKILL.md +28 -11
- package/dist/agents/skills/claude-code/harness-planning/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-pre-commit-review/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-product-spec/SKILL.md +285 -0
- package/dist/agents/skills/claude-code/harness-product-spec/skill.yaml +72 -0
- package/dist/agents/skills/claude-code/harness-property-test/SKILL.md +281 -0
- package/dist/agents/skills/claude-code/harness-property-test/skill.yaml +71 -0
- package/dist/agents/skills/claude-code/harness-refactoring/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-release-readiness/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-resilience/SKILL.md +255 -0
- package/dist/agents/skills/claude-code/harness-resilience/skill.yaml +76 -0
- package/dist/agents/skills/claude-code/harness-roadmap/SKILL.md +34 -0
- package/dist/agents/skills/claude-code/harness-roadmap/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-secrets/SKILL.md +293 -0
- package/dist/agents/skills/claude-code/harness-secrets/skill.yaml +76 -0
- package/dist/agents/skills/claude-code/harness-security-review/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-security-scan/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-skill-authoring/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-soundness-review/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-sql-review/SKILL.md +315 -0
- package/dist/agents/skills/claude-code/harness-sql-review/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/harness-state-management/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-tdd/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-test-advisor/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-test-data/SKILL.md +268 -0
- package/dist/agents/skills/claude-code/harness-test-data/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/harness-ux-copy/SKILL.md +271 -0
- package/dist/agents/skills/claude-code/harness-ux-copy/skill.yaml +77 -0
- package/dist/agents/skills/claude-code/harness-verification/SKILL.md +42 -0
- package/dist/agents/skills/claude-code/harness-verification/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-verify/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/harness-visual-regression/SKILL.md +257 -0
- package/dist/agents/skills/claude-code/harness-visual-regression/skill.yaml +74 -0
- package/dist/agents/skills/claude-code/initialize-harness-project/skill.yaml +1 -0
- package/dist/agents/skills/claude-code/validate-context-engineering/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/add-harness-component/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/align-documentation/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/check-mechanical-constraints/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/cleanup-dead-code/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/detect-doc-drift/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/enforce-architecture/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-accessibility/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-api-design/SKILL.md +304 -0
- package/dist/agents/skills/gemini-cli/harness-api-design/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/harness-architecture-advisor/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-auth/SKILL.md +279 -0
- package/dist/agents/skills/gemini-cli/harness-auth/skill.yaml +81 -0
- package/dist/agents/skills/gemini-cli/harness-autopilot/SKILL.md +57 -9
- package/dist/agents/skills/gemini-cli/harness-autopilot/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-brainstorming/SKILL.md +1 -1
- package/dist/agents/skills/gemini-cli/harness-brainstorming/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-caching/SKILL.md +309 -0
- package/dist/agents/skills/gemini-cli/harness-caching/skill.yaml +73 -0
- package/dist/agents/skills/gemini-cli/harness-chaos/SKILL.md +295 -0
- package/dist/agents/skills/gemini-cli/harness-chaos/skill.yaml +72 -0
- package/dist/agents/skills/gemini-cli/harness-code-review/SKILL.md +19 -2
- package/dist/agents/skills/gemini-cli/harness-code-review/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-codebase-cleanup/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-compliance/SKILL.md +303 -0
- package/dist/agents/skills/gemini-cli/harness-compliance/skill.yaml +78 -0
- package/dist/agents/skills/gemini-cli/harness-containerization/SKILL.md +284 -0
- package/dist/agents/skills/gemini-cli/harness-containerization/skill.yaml +80 -0
- package/dist/agents/skills/gemini-cli/harness-data-pipeline/SKILL.md +274 -0
- package/dist/agents/skills/gemini-cli/harness-data-pipeline/skill.yaml +81 -0
- package/dist/agents/skills/gemini-cli/harness-data-validation/SKILL.md +343 -0
- package/dist/agents/skills/gemini-cli/harness-data-validation/skill.yaml +75 -0
- package/dist/agents/skills/gemini-cli/harness-database/SKILL.md +258 -0
- package/dist/agents/skills/gemini-cli/harness-database/skill.yaml +80 -0
- package/dist/agents/skills/gemini-cli/harness-debugging/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-dependency-health/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-deployment/SKILL.md +255 -0
- package/dist/agents/skills/gemini-cli/harness-deployment/skill.yaml +77 -0
- package/dist/agents/skills/gemini-cli/harness-design/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-design-mobile/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-design-system/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-design-web/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-diagnostics/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-docs-pipeline/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-dx/SKILL.md +276 -0
- package/dist/agents/skills/gemini-cli/harness-dx/skill.yaml +76 -0
- package/dist/agents/skills/gemini-cli/harness-e2e/SKILL.md +245 -0
- package/dist/agents/skills/gemini-cli/harness-e2e/skill.yaml +78 -0
- package/dist/agents/skills/gemini-cli/harness-event-driven/SKILL.md +280 -0
- package/dist/agents/skills/gemini-cli/harness-event-driven/skill.yaml +77 -0
- package/dist/agents/skills/gemini-cli/harness-execution/SKILL.md +39 -12
- package/dist/agents/skills/gemini-cli/harness-execution/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-feature-flags/SKILL.md +287 -0
- package/dist/agents/skills/gemini-cli/harness-feature-flags/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/harness-git-workflow/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-hotspot-detector/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-i18n/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-i18n-process/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-i18n-workflow/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-impact-analysis/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-incident-response/SKILL.md +223 -0
- package/dist/agents/skills/gemini-cli/harness-incident-response/skill.yaml +78 -0
- package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/SKILL.md +279 -0
- package/dist/agents/skills/gemini-cli/harness-infrastructure-as-code/skill.yaml +80 -0
- package/dist/agents/skills/gemini-cli/harness-integration-test/SKILL.md +271 -0
- package/dist/agents/skills/gemini-cli/harness-integration-test/skill.yaml +73 -0
- package/dist/agents/skills/gemini-cli/harness-integrity/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-knowledge-mapper/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-load-testing/SKILL.md +274 -0
- package/dist/agents/skills/gemini-cli/harness-load-testing/skill.yaml +79 -0
- package/dist/agents/skills/gemini-cli/harness-ml-ops/SKILL.md +341 -0
- package/dist/agents/skills/gemini-cli/harness-ml-ops/skill.yaml +79 -0
- package/dist/agents/skills/gemini-cli/harness-mobile-patterns/SKILL.md +326 -0
- package/dist/agents/skills/gemini-cli/harness-mobile-patterns/skill.yaml +82 -0
- package/dist/agents/skills/gemini-cli/harness-mutation-test/SKILL.md +251 -0
- package/dist/agents/skills/gemini-cli/harness-mutation-test/skill.yaml +70 -0
- package/dist/agents/skills/gemini-cli/harness-observability/SKILL.md +283 -0
- package/dist/agents/skills/gemini-cli/harness-observability/skill.yaml +78 -0
- package/dist/agents/skills/gemini-cli/harness-onboarding/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-parallel-agents/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-perf/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-perf-tdd/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-planning/SKILL.md +28 -11
- package/dist/agents/skills/gemini-cli/harness-planning/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-pre-commit-review/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-product-spec/SKILL.md +285 -0
- package/dist/agents/skills/gemini-cli/harness-product-spec/skill.yaml +72 -0
- package/dist/agents/skills/gemini-cli/harness-property-test/SKILL.md +281 -0
- package/dist/agents/skills/gemini-cli/harness-property-test/skill.yaml +71 -0
- package/dist/agents/skills/gemini-cli/harness-refactoring/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-release-readiness/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-resilience/SKILL.md +255 -0
- package/dist/agents/skills/gemini-cli/harness-resilience/skill.yaml +76 -0
- package/dist/agents/skills/gemini-cli/harness-roadmap/SKILL.md +34 -0
- package/dist/agents/skills/gemini-cli/harness-roadmap/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-secrets/SKILL.md +293 -0
- package/dist/agents/skills/gemini-cli/harness-secrets/skill.yaml +76 -0
- package/dist/agents/skills/gemini-cli/harness-security-review/SKILL.md +240 -0
- package/dist/agents/skills/gemini-cli/harness-security-review/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-security-scan/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-skill-authoring/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-soundness-review/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-sql-review/SKILL.md +315 -0
- package/dist/agents/skills/gemini-cli/harness-sql-review/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/harness-state-management/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-tdd/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-test-advisor/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-test-data/SKILL.md +268 -0
- package/dist/agents/skills/gemini-cli/harness-test-data/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/harness-ux-copy/SKILL.md +271 -0
- package/dist/agents/skills/gemini-cli/harness-ux-copy/skill.yaml +77 -0
- package/dist/agents/skills/gemini-cli/harness-verification/SKILL.md +42 -0
- package/dist/agents/skills/gemini-cli/harness-verification/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-verify/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/harness-visual-regression/SKILL.md +257 -0
- package/dist/agents/skills/gemini-cli/harness-visual-regression/skill.yaml +74 -0
- package/dist/agents/skills/gemini-cli/initialize-harness-project/skill.yaml +1 -0
- package/dist/agents/skills/gemini-cli/validate-context-engineering/skill.yaml +1 -0
- package/dist/{agents-md-KIS2RSMG.js → agents-md-XU3BHE22.js} +1 -1
- package/dist/{architecture-AJAUDRQQ.js → architecture-2R5Z4ZAF.js} +2 -2
- package/dist/bin/harness-mcp.js +14 -13
- package/dist/bin/harness.js +22 -21
- package/dist/{check-phase-gate-K7QCSYRJ.js → check-phase-gate-2OFZ7OWW.js} +3 -2
- package/dist/{chunk-TJVVU3HB.js → chunk-4ZMOCPYO.js} +1 -1
- package/dist/{chunk-EAURF4LH.js → chunk-65FRIL4D.js} +2 -2
- package/dist/{chunk-L2KLU56K.js → chunk-AOZRDOIP.js} +2 -2
- package/dist/{chunk-JLXOEO5C.js → chunk-DZS7CJKL.js} +4 -4
- package/dist/{chunk-FLOEMHDF.js → chunk-IM32EEDM.js} +9 -9
- package/dist/{chunk-2YPZKGAG.js → chunk-IMFVFNJE.js} +1 -1
- package/dist/{chunk-HD4IBGLA.js → chunk-N5G5QMS3.js} +24 -1
- package/dist/{chunk-CTTFXXKJ.js → chunk-ND6PNADU.js} +23 -9
- package/dist/{chunk-747VBPA4.js → chunk-NERR4TAO.js} +783 -444
- package/dist/{chunk-YXOG2277.js → chunk-NOPU4RZ4.js} +2 -2
- package/dist/{chunk-AE2OWWDH.js → chunk-PQ5YK4AY.js} +870 -504
- package/dist/{chunk-OIGVQF5V.js → chunk-QY4T6YAZ.js} +3 -3
- package/dist/{chunk-B5SBNH4S.js → chunk-SSKDAOX5.js} +93 -30
- package/dist/{chunk-2SWJ4VO7.js → chunk-TKJZKICB.js} +6 -6
- package/dist/{chunk-GNGELAXY.js → chunk-TS3XWPW5.js} +1 -1
- package/dist/chunk-UAX4I5ZE.js +217 -0
- package/dist/{chunk-VRFZWGMS.js → chunk-XYLGHKG6.js} +5 -1
- package/dist/{chunk-6N4R6FVX.js → chunk-YBJ262QL.js} +1 -1
- package/dist/{chunk-ZU2UBYBY.js → chunk-Z77YQRQT.js} +11 -207
- package/dist/{ci-workflow-NBL4OT4A.js → ci-workflow-EHV65NQB.js} +1 -1
- package/dist/{create-skill-WPXHSLX2.js → create-skill-XSWHMSM5.js} +2 -2
- package/dist/{dist-IJ4J4C5G.js → dist-2B363XUH.js} +25 -1
- package/dist/{dist-M6BQODWC.js → dist-HXHWB7SV.js} +2 -2
- package/dist/{docs-CPTMH3VY.js → docs-FZOPM4GK.js} +4 -2
- package/dist/{engine-BUWPAAGD.js → engine-OL4T6NZS.js} +1 -1
- package/dist/{entropy-Z4FYVQ7L.js → entropy-LVHJMFGH.js} +2 -2
- package/dist/{feedback-TT6WF5YX.js → feedback-IHLVLMRD.js} +1 -1
- package/dist/{generate-agent-definitions-J5HANRNR.js → generate-agent-definitions-64S3CLEZ.js} +3 -3
- package/dist/{glob-helper-5OHBUQAI.js → glob-helper-R5FXNUPS.js} +1 -1
- package/dist/{graph-loader-KO4GJ5N2.js → graph-loader-GJZ4FN4Y.js} +1 -1
- package/dist/index.d.ts +60 -33
- package/dist/index.js +23 -21
- package/dist/{loader-PCU5YWRH.js → loader-DPYFB6R6.js} +1 -1
- package/dist/{mcp-YM6QLHLZ.js → mcp-JQUI7BVZ.js} +14 -13
- package/dist/{performance-YJVXOKIB.js → performance-ZTVSUANN.js} +2 -2
- package/dist/{review-pipeline-KGMIMLIE.js → review-pipeline-76JHKGSV.js} +1 -1
- package/dist/{runtime-F6R27LD6.js → runtime-X7U6SC7K.js} +1 -1
- package/dist/{security-MX5VVXBC.js → security-FWQZF2IZ.js} +1 -1
- package/dist/skill-executor-XZLYZYAK.js +8 -0
- package/dist/{validate-EFNMSFKD.js → validate-GCHZJIL7.js} +2 -2
- package/dist/{validate-cross-check-LJX65SBS.js → validate-cross-check-STFHYMAZ.js} +1 -1
- package/package.json +4 -4
- package/dist/skill-executor-RG45LUO5.js +0 -8
|
@@ -38,7 +38,7 @@ async function handleCheckDependencies(input) {
|
|
|
38
38
|
const configResult = resolveProjectConfig(projectPath);
|
|
39
39
|
if (!configResult.ok) return resultToMcpResponse(configResult);
|
|
40
40
|
try {
|
|
41
|
-
const { validateDependencies, TypeScriptParser } = await import("./dist-
|
|
41
|
+
const { validateDependencies, TypeScriptParser } = await import("./dist-2B363XUH.js");
|
|
42
42
|
const config = configResult.value;
|
|
43
43
|
const rawLayers = Array.isArray(config.layers) ? config.layers : [];
|
|
44
44
|
const layers = rawLayers.map((l) => ({
|
|
@@ -47,11 +47,11 @@ async function handleCheckDependencies(input) {
|
|
|
47
47
|
allowedDependencies: l.allowedDependencies
|
|
48
48
|
}));
|
|
49
49
|
const parser = new TypeScriptParser();
|
|
50
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
50
|
+
const { loadGraphStore } = await import("./graph-loader-GJZ4FN4Y.js");
|
|
51
51
|
const store = await loadGraphStore(projectPath);
|
|
52
52
|
let graphDependencyData;
|
|
53
53
|
if (store) {
|
|
54
|
-
const { GraphConstraintAdapter } = await import("./dist-
|
|
54
|
+
const { GraphConstraintAdapter } = await import("./dist-HXHWB7SV.js");
|
|
55
55
|
const adapter = new GraphConstraintAdapter(store);
|
|
56
56
|
const graphData = adapter.computeDependencyGraph();
|
|
57
57
|
graphDependencyData = {
|
|
@@ -5,14 +5,12 @@ import {
|
|
|
5
5
|
OutputFormatter,
|
|
6
6
|
OutputMode,
|
|
7
7
|
createCheckPhaseGateCommand,
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
resolveConfig
|
|
11
|
-
} from "./chunk-ZU2UBYBY.js";
|
|
8
|
+
findFiles
|
|
9
|
+
} from "./chunk-UAX4I5ZE.js";
|
|
12
10
|
import {
|
|
13
11
|
createGenerateAgentDefinitionsCommand,
|
|
14
12
|
generateAgentDefinitions
|
|
15
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-TS3XWPW5.js";
|
|
16
14
|
import {
|
|
17
15
|
listPersonas,
|
|
18
16
|
loadPersona
|
|
@@ -22,13 +20,13 @@ import {
|
|
|
22
20
|
} from "./chunk-TRAPF4IX.js";
|
|
23
21
|
import {
|
|
24
22
|
executeSkill
|
|
25
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-AOZRDOIP.js";
|
|
26
24
|
import {
|
|
27
25
|
ALLOWED_PERSONA_COMMANDS
|
|
28
26
|
} from "./chunk-TEFCFC4H.js";
|
|
29
27
|
import {
|
|
30
28
|
createCreateSkillCommand
|
|
31
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-YBJ262QL.js";
|
|
32
30
|
import {
|
|
33
31
|
logger
|
|
34
32
|
} from "./chunk-EBJQ6N4M.js";
|
|
@@ -50,17 +48,21 @@ import {
|
|
|
50
48
|
generateSlashCommands,
|
|
51
49
|
handleGetImpact,
|
|
52
50
|
handleOrphanDeletion
|
|
53
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-NERR4TAO.js";
|
|
54
52
|
import {
|
|
55
53
|
VALID_PLATFORMS
|
|
56
54
|
} from "./chunk-ZOAWBDWU.js";
|
|
55
|
+
import {
|
|
56
|
+
findConfigFile,
|
|
57
|
+
resolveConfig
|
|
58
|
+
} from "./chunk-Z77YQRQT.js";
|
|
57
59
|
import {
|
|
58
60
|
resolveGlobalSkillsDir,
|
|
59
61
|
resolvePersonasDir,
|
|
60
62
|
resolveProjectSkillsDir,
|
|
61
63
|
resolveSkillsDir,
|
|
62
64
|
resolveTemplatesDir
|
|
63
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-N5G5QMS3.js";
|
|
64
66
|
import {
|
|
65
67
|
CLIError,
|
|
66
68
|
ExitCode,
|
|
@@ -68,7 +70,7 @@ import {
|
|
|
68
70
|
} from "./chunk-3WGJMBKH.js";
|
|
69
71
|
import {
|
|
70
72
|
SkillMetadataSchema
|
|
71
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-XYLGHKG6.js";
|
|
72
74
|
import {
|
|
73
75
|
CLI_VERSION
|
|
74
76
|
} from "./chunk-BM3PWGXQ.js";
|
|
@@ -108,6 +110,7 @@ import {
|
|
|
108
110
|
parseDiff,
|
|
109
111
|
parseManifest,
|
|
110
112
|
parseSecurityConfig,
|
|
113
|
+
pruneLearnings,
|
|
111
114
|
readLockfile,
|
|
112
115
|
removeContributions,
|
|
113
116
|
removeProvenance,
|
|
@@ -122,14 +125,14 @@ import {
|
|
|
122
125
|
validateKnowledgeMap,
|
|
123
126
|
writeConfig,
|
|
124
127
|
writeLockfile
|
|
125
|
-
} from "./chunk-
|
|
128
|
+
} from "./chunk-PQ5YK4AY.js";
|
|
126
129
|
import {
|
|
127
130
|
Err,
|
|
128
131
|
Ok
|
|
129
132
|
} from "./chunk-MHBMTPW7.js";
|
|
130
133
|
|
|
131
134
|
// src/index.ts
|
|
132
|
-
import { Command as
|
|
135
|
+
import { Command as Command55 } from "commander";
|
|
133
136
|
|
|
134
137
|
// src/commands/validate.ts
|
|
135
138
|
import { Command } from "commander";
|
|
@@ -208,7 +211,7 @@ function createValidateCommand() {
|
|
|
208
211
|
process.exit(result.error.exitCode);
|
|
209
212
|
}
|
|
210
213
|
if (opts.crossCheck) {
|
|
211
|
-
const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-
|
|
214
|
+
const { runCrossCheck: runCrossCheck2 } = await import("./validate-cross-check-STFHYMAZ.js");
|
|
212
215
|
const cwd = process.cwd();
|
|
213
216
|
const specsDir = path.join(cwd, "docs", "specs");
|
|
214
217
|
const plansDir = path.join(cwd, "docs", "plans");
|
|
@@ -566,7 +569,7 @@ function createPerfCommand() {
|
|
|
566
569
|
perf.command("bench [glob]").description("Run benchmarks via vitest bench").action(async (glob, _opts, cmd) => {
|
|
567
570
|
const globalOpts = cmd.optsWithGlobals();
|
|
568
571
|
const cwd = process.cwd();
|
|
569
|
-
const { BenchmarkRunner } = await import("./dist-
|
|
572
|
+
const { BenchmarkRunner } = await import("./dist-2B363XUH.js");
|
|
570
573
|
const runner = new BenchmarkRunner();
|
|
571
574
|
const benchFiles = runner.discover(cwd, glob);
|
|
572
575
|
if (benchFiles.length === 0) {
|
|
@@ -635,7 +638,7 @@ Results (${result.results.length} benchmarks):`);
|
|
|
635
638
|
baselines.command("update").description("Update baselines from latest benchmark run").action(async (_opts, cmd) => {
|
|
636
639
|
const globalOpts = cmd.optsWithGlobals();
|
|
637
640
|
const cwd = process.cwd();
|
|
638
|
-
const { BenchmarkRunner } = await import("./dist-
|
|
641
|
+
const { BenchmarkRunner } = await import("./dist-2B363XUH.js");
|
|
639
642
|
const runner = new BenchmarkRunner();
|
|
640
643
|
const manager = new BaselineManager(cwd);
|
|
641
644
|
logger.info("Running benchmarks to update baselines...");
|
|
@@ -663,7 +666,7 @@ Results (${result.results.length} benchmarks):`);
|
|
|
663
666
|
perf.command("report").description("Full performance report with metrics, trends, and hotspots").action(async (_opts, cmd) => {
|
|
664
667
|
const globalOpts = cmd.optsWithGlobals();
|
|
665
668
|
const cwd = process.cwd();
|
|
666
|
-
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-
|
|
669
|
+
const { EntropyAnalyzer: EntropyAnalyzer2 } = await import("./dist-2B363XUH.js");
|
|
667
670
|
const analyzer = new EntropyAnalyzer2({
|
|
668
671
|
rootDir: path5.resolve(cwd),
|
|
669
672
|
analyze: { complexity: true, coupling: true }
|
|
@@ -1606,7 +1609,8 @@ async function runAdd(componentType, name, options) {
|
|
|
1606
1609
|
break;
|
|
1607
1610
|
}
|
|
1608
1611
|
case "doc": {
|
|
1609
|
-
const
|
|
1612
|
+
const configDocsDir = configResult.ok ? configResult.value.docsDir : "./docs";
|
|
1613
|
+
const docsDir = path12.resolve(cwd, configDocsDir);
|
|
1610
1614
|
if (!fs3.existsSync(docsDir)) {
|
|
1611
1615
|
fs3.mkdirSync(docsDir, { recursive: true });
|
|
1612
1616
|
}
|
|
@@ -1615,11 +1619,11 @@ async function runAdd(componentType, name, options) {
|
|
|
1615
1619
|
return Err(new CLIError(`Doc ${name} already exists`, ExitCode.ERROR));
|
|
1616
1620
|
}
|
|
1617
1621
|
fs3.writeFileSync(docPath, DOC_TEMPLATE(name));
|
|
1618
|
-
created.push(
|
|
1622
|
+
created.push(`${configDocsDir.replace(/^\.[\\/]/, "")}/${name}.md`);
|
|
1619
1623
|
break;
|
|
1620
1624
|
}
|
|
1621
1625
|
case "skill": {
|
|
1622
|
-
const { generateSkillFiles: generateSkillFiles2 } = await import("./create-skill-
|
|
1626
|
+
const { generateSkillFiles: generateSkillFiles2 } = await import("./create-skill-XSWHMSM5.js");
|
|
1623
1627
|
generateSkillFiles2({
|
|
1624
1628
|
name,
|
|
1625
1629
|
description: `${name} skill`,
|
|
@@ -3027,8 +3031,8 @@ function createResetCommand() {
|
|
|
3027
3031
|
}
|
|
3028
3032
|
if (!opts.yes) {
|
|
3029
3033
|
const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
|
|
3030
|
-
const answer = await new Promise((
|
|
3031
|
-
rl.question("Reset project state? This cannot be undone. [y/N] ",
|
|
3034
|
+
const answer = await new Promise((resolve29) => {
|
|
3035
|
+
rl.question("Reset project state? This cannot be undone. [y/N] ", resolve29);
|
|
3032
3036
|
});
|
|
3033
3037
|
rl.close();
|
|
3034
3038
|
if (answer.toLowerCase() !== "y" && answer.toLowerCase() !== "yes") {
|
|
@@ -3435,10 +3439,10 @@ function prompt(question) {
|
|
|
3435
3439
|
input: process.stdin,
|
|
3436
3440
|
output: process.stdout
|
|
3437
3441
|
});
|
|
3438
|
-
return new Promise((
|
|
3442
|
+
return new Promise((resolve29) => {
|
|
3439
3443
|
rl.question(question, (answer) => {
|
|
3440
3444
|
rl.close();
|
|
3441
|
-
|
|
3445
|
+
resolve29(answer.trim().toLowerCase());
|
|
3442
3446
|
});
|
|
3443
3447
|
});
|
|
3444
3448
|
}
|
|
@@ -3578,7 +3582,7 @@ function createGenerateCommand3() {
|
|
|
3578
3582
|
import { Command as Command39 } from "commander";
|
|
3579
3583
|
import * as path29 from "path";
|
|
3580
3584
|
async function runScan(projectPath) {
|
|
3581
|
-
const { GraphStore, CodeIngestor, TopologicalLinker, KnowledgeIngestor, GitIngestor } = await import("./dist-
|
|
3585
|
+
const { GraphStore, CodeIngestor, TopologicalLinker, KnowledgeIngestor, GitIngestor } = await import("./dist-HXHWB7SV.js");
|
|
3582
3586
|
const store = new GraphStore();
|
|
3583
3587
|
const start = Date.now();
|
|
3584
3588
|
await new CodeIngestor(store).ingest(projectPath);
|
|
@@ -3659,7 +3663,7 @@ async function runIngest(projectPath, source, opts) {
|
|
|
3659
3663
|
SyncManager,
|
|
3660
3664
|
JiraConnector,
|
|
3661
3665
|
SlackConnector
|
|
3662
|
-
} = await import("./dist-
|
|
3666
|
+
} = await import("./dist-HXHWB7SV.js");
|
|
3663
3667
|
const graphDir = path30.join(projectPath, ".harness", "graph");
|
|
3664
3668
|
const store = new GraphStore();
|
|
3665
3669
|
await store.load(graphDir);
|
|
@@ -3752,7 +3756,7 @@ function createIngestCommand() {
|
|
|
3752
3756
|
import { Command as Command41 } from "commander";
|
|
3753
3757
|
import * as path31 from "path";
|
|
3754
3758
|
async function runQuery(projectPath, rootNodeId, opts) {
|
|
3755
|
-
const { GraphStore, ContextQL } = await import("./dist-
|
|
3759
|
+
const { GraphStore, ContextQL } = await import("./dist-HXHWB7SV.js");
|
|
3756
3760
|
const store = new GraphStore();
|
|
3757
3761
|
const graphDir = path31.join(projectPath, ".harness", "graph");
|
|
3758
3762
|
const loaded = await store.load(graphDir);
|
|
@@ -3801,7 +3805,7 @@ import { Command as Command42 } from "commander";
|
|
|
3801
3805
|
// src/commands/graph/status.ts
|
|
3802
3806
|
import * as path32 from "path";
|
|
3803
3807
|
async function runGraphStatus(projectPath) {
|
|
3804
|
-
const { GraphStore } = await import("./dist-
|
|
3808
|
+
const { GraphStore } = await import("./dist-HXHWB7SV.js");
|
|
3805
3809
|
const graphDir = path32.join(projectPath, ".harness", "graph");
|
|
3806
3810
|
const store = new GraphStore();
|
|
3807
3811
|
const loaded = await store.load(graphDir);
|
|
@@ -3841,7 +3845,7 @@ async function runGraphStatus(projectPath) {
|
|
|
3841
3845
|
// src/commands/graph/export.ts
|
|
3842
3846
|
import * as path33 from "path";
|
|
3843
3847
|
async function runGraphExport(projectPath, format) {
|
|
3844
|
-
const { GraphStore } = await import("./dist-
|
|
3848
|
+
const { GraphStore } = await import("./dist-HXHWB7SV.js");
|
|
3845
3849
|
const graphDir = path33.join(projectPath, ".harness", "graph");
|
|
3846
3850
|
const store = new GraphStore();
|
|
3847
3851
|
const loaded = await store.load(graphDir);
|
|
@@ -3920,7 +3924,7 @@ function createGraphCommand() {
|
|
|
3920
3924
|
import { Command as Command43 } from "commander";
|
|
3921
3925
|
function createMcpCommand() {
|
|
3922
3926
|
return new Command43("mcp").description("Start the MCP (Model Context Protocol) server on stdio").action(async () => {
|
|
3923
|
-
const { startServer: startServer2 } = await import("./mcp-
|
|
3927
|
+
const { startServer: startServer2 } = await import("./mcp-JQUI7BVZ.js");
|
|
3924
3928
|
await startServer2();
|
|
3925
3929
|
});
|
|
3926
3930
|
}
|
|
@@ -5108,9 +5112,67 @@ function createOrchestratorCommand() {
|
|
|
5108
5112
|
return orchestrator;
|
|
5109
5113
|
}
|
|
5110
5114
|
|
|
5115
|
+
// src/commands/learnings/index.ts
|
|
5116
|
+
import { Command as Command54 } from "commander";
|
|
5117
|
+
|
|
5118
|
+
// src/commands/learnings/prune.ts
|
|
5119
|
+
import { Command as Command53 } from "commander";
|
|
5120
|
+
import * as path44 from "path";
|
|
5121
|
+
async function handlePrune(opts) {
|
|
5122
|
+
const projectPath = path44.resolve(opts.path);
|
|
5123
|
+
const result = await pruneLearnings(projectPath, opts.stream);
|
|
5124
|
+
if (!result.ok) {
|
|
5125
|
+
logger.error(result.error.message);
|
|
5126
|
+
process.exit(ExitCode.ERROR);
|
|
5127
|
+
return;
|
|
5128
|
+
}
|
|
5129
|
+
const { kept, archived, patterns } = result.value;
|
|
5130
|
+
if (archived === 0 && patterns.length === 0) {
|
|
5131
|
+
logger.info(`Nothing to prune. ${kept} learnings in file, all within retention window.`);
|
|
5132
|
+
process.exit(ExitCode.SUCCESS);
|
|
5133
|
+
return;
|
|
5134
|
+
}
|
|
5135
|
+
if (patterns.length > 0) {
|
|
5136
|
+
printPatternProposals(patterns);
|
|
5137
|
+
}
|
|
5138
|
+
if (archived > 0) {
|
|
5139
|
+
logger.success(`Pruned ${archived} entries. ${kept} most recent entries retained.`);
|
|
5140
|
+
logger.info("Archived entries written to .harness/learnings-archive/");
|
|
5141
|
+
} else {
|
|
5142
|
+
logger.info(`No entries archived. ${kept} entries retained.`);
|
|
5143
|
+
}
|
|
5144
|
+
process.exit(ExitCode.SUCCESS);
|
|
5145
|
+
}
|
|
5146
|
+
function printPatternProposals(patterns) {
|
|
5147
|
+
console.log("\n--- Improvement Proposals ---\n");
|
|
5148
|
+
for (const pattern of patterns) {
|
|
5149
|
+
console.log(` [${pattern.tag}] ${pattern.count} learnings with this theme.`);
|
|
5150
|
+
console.log(` Proposal: These learnings suggest a recurring pattern in "${pattern.tag}".`);
|
|
5151
|
+
console.log(
|
|
5152
|
+
` To add to roadmap: harness mcp manage_roadmap --action add --feature "<improvement>" --status planned
|
|
5153
|
+
`
|
|
5154
|
+
);
|
|
5155
|
+
}
|
|
5156
|
+
console.log(
|
|
5157
|
+
"Review the proposals above. If any warrant a process improvement, add them to the roadmap manually or via manage_roadmap.\n"
|
|
5158
|
+
);
|
|
5159
|
+
}
|
|
5160
|
+
function createPruneCommand() {
|
|
5161
|
+
return new Command53("prune").description(
|
|
5162
|
+
"Analyze global learnings for patterns, present improvement proposals, and archive old entries"
|
|
5163
|
+
).option("--path <path>", "Project root path", ".").option("--stream <name>", "Target a specific stream").action(handlePrune);
|
|
5164
|
+
}
|
|
5165
|
+
|
|
5166
|
+
// src/commands/learnings/index.ts
|
|
5167
|
+
function createLearningsCommand() {
|
|
5168
|
+
const command = new Command54("learnings").description("Learnings management commands");
|
|
5169
|
+
command.addCommand(createPruneCommand());
|
|
5170
|
+
return command;
|
|
5171
|
+
}
|
|
5172
|
+
|
|
5111
5173
|
// src/index.ts
|
|
5112
5174
|
function createProgram() {
|
|
5113
|
-
const program = new
|
|
5175
|
+
const program = new Command55();
|
|
5114
5176
|
program.name("harness").description("CLI for Harness Engineering toolkit").version(CLI_VERSION).option("-c, --config <path>", "Path to config file").option("--json", "Output as JSON").option("--verbose", "Verbose output").option("--quiet", "Minimal output");
|
|
5115
5177
|
program.addCommand(createValidateCommand());
|
|
5116
5178
|
program.addCommand(createCheckDepsCommand());
|
|
@@ -5127,6 +5189,7 @@ function createProgram() {
|
|
|
5127
5189
|
program.addCommand(createPersonaCommand());
|
|
5128
5190
|
program.addCommand(createSkillCommand());
|
|
5129
5191
|
program.addCommand(createStateCommand());
|
|
5192
|
+
program.addCommand(createLearningsCommand());
|
|
5130
5193
|
program.addCommand(createCheckPhaseGateCommand());
|
|
5131
5194
|
program.addCommand(createCreateSkillCommand());
|
|
5132
5195
|
program.addCommand(createSetupMcpCommand());
|
|
@@ -27,7 +27,7 @@ var checkPerformanceDefinition = {
|
|
|
27
27
|
};
|
|
28
28
|
async function handleCheckPerformance(input) {
|
|
29
29
|
try {
|
|
30
|
-
const { EntropyAnalyzer } = await import("./dist-
|
|
30
|
+
const { EntropyAnalyzer } = await import("./dist-2B363XUH.js");
|
|
31
31
|
const typeFilter = input.type ?? "all";
|
|
32
32
|
const projectPath = sanitizePath(input.path);
|
|
33
33
|
const analyzer = new EntropyAnalyzer({
|
|
@@ -40,10 +40,10 @@ async function handleCheckPerformance(input) {
|
|
|
40
40
|
});
|
|
41
41
|
let graphOptions;
|
|
42
42
|
try {
|
|
43
|
-
const { loadGraphStore } = await import("./graph-loader-
|
|
43
|
+
const { loadGraphStore } = await import("./graph-loader-GJZ4FN4Y.js");
|
|
44
44
|
const store = await loadGraphStore(projectPath);
|
|
45
45
|
if (store) {
|
|
46
|
-
const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-
|
|
46
|
+
const { GraphComplexityAdapter, GraphCouplingAdapter } = await import("./dist-HXHWB7SV.js");
|
|
47
47
|
const complexityAdapter = new GraphComplexityAdapter(store);
|
|
48
48
|
const couplingAdapter = new GraphCouplingAdapter(store);
|
|
49
49
|
graphOptions = {
|
|
@@ -80,7 +80,7 @@ var getPerfBaselinesDefinition = {
|
|
|
80
80
|
};
|
|
81
81
|
async function handleGetPerfBaselines(input) {
|
|
82
82
|
try {
|
|
83
|
-
const { BaselineManager } = await import("./dist-
|
|
83
|
+
const { BaselineManager } = await import("./dist-2B363XUH.js");
|
|
84
84
|
const manager = new BaselineManager(sanitizePath(input.path));
|
|
85
85
|
const baselines = manager.load();
|
|
86
86
|
return resultToMcpResponse(
|
|
@@ -128,7 +128,7 @@ var updatePerfBaselinesDefinition = {
|
|
|
128
128
|
};
|
|
129
129
|
async function handleUpdatePerfBaselines(input) {
|
|
130
130
|
try {
|
|
131
|
-
const { BaselineManager } = await import("./dist-
|
|
131
|
+
const { BaselineManager } = await import("./dist-2B363XUH.js");
|
|
132
132
|
const manager = new BaselineManager(sanitizePath(input.path));
|
|
133
133
|
manager.save(input.results, input.commitHash);
|
|
134
134
|
const updated = manager.load();
|
|
@@ -158,7 +158,7 @@ var getCriticalPathsDefinition = {
|
|
|
158
158
|
};
|
|
159
159
|
async function handleGetCriticalPaths(input) {
|
|
160
160
|
try {
|
|
161
|
-
const { CriticalPathResolver } = await import("./dist-
|
|
161
|
+
const { CriticalPathResolver } = await import("./dist-2B363XUH.js");
|
|
162
162
|
const resolver = new CriticalPathResolver(sanitizePath(input.path));
|
|
163
163
|
const result = await resolver.resolve();
|
|
164
164
|
return resultToMcpResponse(Ok(result));
|
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import {
|
|
2
|
+
logger
|
|
3
|
+
} from "./chunk-EBJQ6N4M.js";
|
|
4
|
+
import {
|
|
5
|
+
resolveConfig
|
|
6
|
+
} from "./chunk-Z77YQRQT.js";
|
|
7
|
+
import {
|
|
8
|
+
ExitCode
|
|
9
|
+
} from "./chunk-3WGJMBKH.js";
|
|
10
|
+
import {
|
|
11
|
+
Ok
|
|
12
|
+
} from "./chunk-MHBMTPW7.js";
|
|
13
|
+
|
|
14
|
+
// src/commands/check-phase-gate.ts
|
|
15
|
+
import { Command } from "commander";
|
|
16
|
+
import * as path from "path";
|
|
17
|
+
import * as fs from "fs";
|
|
18
|
+
|
|
19
|
+
// src/utils/files.ts
|
|
20
|
+
import { glob } from "glob";
|
|
21
|
+
async function findFiles(pattern, cwd = process.cwd()) {
|
|
22
|
+
return glob(pattern, { cwd, absolute: true });
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// src/output/formatter.ts
|
|
26
|
+
import chalk from "chalk";
|
|
27
|
+
var OutputMode = {
|
|
28
|
+
/** Output as formatted JSON */
|
|
29
|
+
JSON: "json",
|
|
30
|
+
/** Output as human-readable text */
|
|
31
|
+
TEXT: "text",
|
|
32
|
+
/** Minimal output, only errors and successes */
|
|
33
|
+
QUIET: "quiet",
|
|
34
|
+
/** Full output with detailed context and suggestions */
|
|
35
|
+
VERBOSE: "verbose"
|
|
36
|
+
};
|
|
37
|
+
var OutputFormatter = class {
|
|
38
|
+
/**
|
|
39
|
+
* Creates a new OutputFormatter.
|
|
40
|
+
*
|
|
41
|
+
* @param mode - The output mode to use. Defaults to TEXT.
|
|
42
|
+
*/
|
|
43
|
+
constructor(mode = OutputMode.TEXT) {
|
|
44
|
+
this.mode = mode;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Formats raw data for output.
|
|
48
|
+
*
|
|
49
|
+
* @param data - The data to format.
|
|
50
|
+
* @returns A string representation of the data based on the current mode.
|
|
51
|
+
*/
|
|
52
|
+
format(data) {
|
|
53
|
+
if (this.mode === OutputMode.JSON) {
|
|
54
|
+
return JSON.stringify(data, null, 2);
|
|
55
|
+
}
|
|
56
|
+
return String(data);
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Formats a validation result into a user-friendly string.
|
|
60
|
+
*
|
|
61
|
+
* @param result - The validation result to format.
|
|
62
|
+
* @returns A formatted string containing the validation status and any issues.
|
|
63
|
+
*/
|
|
64
|
+
formatValidation(result) {
|
|
65
|
+
if (this.mode === OutputMode.JSON) {
|
|
66
|
+
return JSON.stringify(result, null, 2);
|
|
67
|
+
}
|
|
68
|
+
if (this.mode === OutputMode.QUIET) {
|
|
69
|
+
if (result.valid) return "";
|
|
70
|
+
return result.issues.map((i) => `${i.file ?? ""}: ${i.message}`).join("\n");
|
|
71
|
+
}
|
|
72
|
+
const lines = [];
|
|
73
|
+
if (result.valid) {
|
|
74
|
+
lines.push(chalk.green("v validation passed"));
|
|
75
|
+
} else {
|
|
76
|
+
lines.push(chalk.red(`x Validation failed (${result.issues.length} issues)`));
|
|
77
|
+
lines.push("");
|
|
78
|
+
for (const issue of result.issues) {
|
|
79
|
+
const location = issue.file ? issue.line ? `${issue.file}:${issue.line}` : issue.file : "unknown";
|
|
80
|
+
lines.push(` ${chalk.yellow("*")} ${chalk.dim(location)}`);
|
|
81
|
+
lines.push(` ${issue.message}`);
|
|
82
|
+
if (issue.suggestion && this.mode === OutputMode.VERBOSE) {
|
|
83
|
+
lines.push(` ${chalk.dim("->")} ${issue.suggestion}`);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return lines.join("\n");
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Formats a summary line with a success/failure icon and label.
|
|
91
|
+
*
|
|
92
|
+
* @param label - The name of the field to summarize.
|
|
93
|
+
* @param value - The value to display.
|
|
94
|
+
* @param success - Whether the summary represents a success or failure state.
|
|
95
|
+
* @returns A formatted summary string, or an empty string in JSON or QUIET modes.
|
|
96
|
+
*/
|
|
97
|
+
formatSummary(label, value, success) {
|
|
98
|
+
if (this.mode === OutputMode.JSON || this.mode === OutputMode.QUIET) {
|
|
99
|
+
return "";
|
|
100
|
+
}
|
|
101
|
+
const icon = success ? chalk.green("v") : chalk.red("x");
|
|
102
|
+
return `${icon} ${label}: ${value}`;
|
|
103
|
+
}
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
// src/commands/check-phase-gate.ts
|
|
107
|
+
function resolveSpecPath(implFile, implPattern, specPattern, cwd) {
|
|
108
|
+
const relImpl = path.relative(cwd, implFile).replace(/\\/g, "/");
|
|
109
|
+
const implBase = (implPattern.split("*")[0] ?? "").replace(/\/+$/, "");
|
|
110
|
+
const afterBase = relImpl.startsWith(implBase + "/") ? relImpl.slice(implBase.length + 1) : relImpl;
|
|
111
|
+
const segments = afterBase.split("/");
|
|
112
|
+
const firstSegment = segments[0] ?? "";
|
|
113
|
+
const feature = segments.length > 1 ? firstSegment : path.basename(firstSegment, path.extname(firstSegment));
|
|
114
|
+
const specRelative = specPattern.replace("{feature}", feature);
|
|
115
|
+
return path.resolve(cwd, specRelative);
|
|
116
|
+
}
|
|
117
|
+
async function runCheckPhaseGate(options) {
|
|
118
|
+
const configResult = resolveConfig(options.configPath);
|
|
119
|
+
if (!configResult.ok) {
|
|
120
|
+
return configResult;
|
|
121
|
+
}
|
|
122
|
+
const config = configResult.value;
|
|
123
|
+
const cwd = options.cwd ?? (options.configPath ? path.dirname(path.resolve(options.configPath)) : process.cwd());
|
|
124
|
+
if (!config.phaseGates?.enabled) {
|
|
125
|
+
return Ok({
|
|
126
|
+
pass: true,
|
|
127
|
+
skipped: true,
|
|
128
|
+
missingSpecs: [],
|
|
129
|
+
checkedFiles: 0
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
const phaseGates = config.phaseGates;
|
|
133
|
+
const missingSpecs = [];
|
|
134
|
+
let checkedFiles = 0;
|
|
135
|
+
for (const mapping of phaseGates.mappings) {
|
|
136
|
+
const implFiles = await findFiles(mapping.implPattern, cwd);
|
|
137
|
+
for (const implFile of implFiles) {
|
|
138
|
+
checkedFiles++;
|
|
139
|
+
const expectedSpec = resolveSpecPath(implFile, mapping.implPattern, mapping.specPattern, cwd);
|
|
140
|
+
if (!fs.existsSync(expectedSpec)) {
|
|
141
|
+
missingSpecs.push({
|
|
142
|
+
implFile: path.relative(cwd, implFile).replace(/\\/g, "/"),
|
|
143
|
+
expectedSpec: path.relative(cwd, expectedSpec).replace(/\\/g, "/")
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const pass = missingSpecs.length === 0;
|
|
149
|
+
return Ok({
|
|
150
|
+
pass,
|
|
151
|
+
skipped: false,
|
|
152
|
+
severity: phaseGates.severity,
|
|
153
|
+
missingSpecs,
|
|
154
|
+
checkedFiles
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
function createCheckPhaseGateCommand() {
|
|
158
|
+
const command = new Command("check-phase-gate").description("Verify that implementation files have matching spec documents").action(async (_opts, cmd) => {
|
|
159
|
+
const globalOpts = cmd.optsWithGlobals();
|
|
160
|
+
const mode = globalOpts.json ? OutputMode.JSON : globalOpts.quiet ? OutputMode.QUIET : globalOpts.verbose ? OutputMode.VERBOSE : OutputMode.TEXT;
|
|
161
|
+
const formatter = new OutputFormatter(mode);
|
|
162
|
+
const result = await runCheckPhaseGate({
|
|
163
|
+
configPath: globalOpts.config,
|
|
164
|
+
json: globalOpts.json,
|
|
165
|
+
verbose: globalOpts.verbose,
|
|
166
|
+
quiet: globalOpts.quiet
|
|
167
|
+
});
|
|
168
|
+
if (!result.ok) {
|
|
169
|
+
if (mode === OutputMode.JSON) {
|
|
170
|
+
console.log(JSON.stringify({ error: result.error.message }));
|
|
171
|
+
} else {
|
|
172
|
+
logger.error(result.error.message);
|
|
173
|
+
}
|
|
174
|
+
process.exit(result.error.exitCode);
|
|
175
|
+
}
|
|
176
|
+
const value = result.value;
|
|
177
|
+
if (value.skipped) {
|
|
178
|
+
if (mode === OutputMode.JSON) {
|
|
179
|
+
console.log(formatter.format(value));
|
|
180
|
+
} else if (mode !== OutputMode.QUIET) {
|
|
181
|
+
logger.dim("Phase gates not enabled, skipping.");
|
|
182
|
+
}
|
|
183
|
+
process.exit(ExitCode.SUCCESS);
|
|
184
|
+
}
|
|
185
|
+
const output = formatter.formatValidation({
|
|
186
|
+
valid: value.pass,
|
|
187
|
+
issues: value.missingSpecs.map((m) => ({
|
|
188
|
+
file: m.implFile,
|
|
189
|
+
message: `Missing spec: ${m.expectedSpec}`
|
|
190
|
+
}))
|
|
191
|
+
});
|
|
192
|
+
if (output) {
|
|
193
|
+
console.log(output);
|
|
194
|
+
}
|
|
195
|
+
const summary = formatter.formatSummary(
|
|
196
|
+
"Phase gate check",
|
|
197
|
+
`${value.checkedFiles} files checked, ${value.missingSpecs.length} missing specs`,
|
|
198
|
+
value.pass
|
|
199
|
+
);
|
|
200
|
+
if (summary) {
|
|
201
|
+
console.log(summary);
|
|
202
|
+
}
|
|
203
|
+
if (!value.pass && value.severity === "error") {
|
|
204
|
+
process.exit(ExitCode.VALIDATION_FAILED);
|
|
205
|
+
}
|
|
206
|
+
process.exit(ExitCode.SUCCESS);
|
|
207
|
+
});
|
|
208
|
+
return command;
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
export {
|
|
212
|
+
OutputMode,
|
|
213
|
+
OutputFormatter,
|
|
214
|
+
findFiles,
|
|
215
|
+
runCheckPhaseGate,
|
|
216
|
+
createCheckPhaseGateCommand
|
|
217
|
+
};
|
|
@@ -59,7 +59,11 @@ var SkillMetadataSchema = z.object({
|
|
|
59
59
|
phases: z.array(SkillPhaseSchema).optional(),
|
|
60
60
|
state: SkillStateSchema.default({}),
|
|
61
61
|
depends_on: z.array(z.string()).default([]),
|
|
62
|
-
repository: z.string().url().optional()
|
|
62
|
+
repository: z.string().url().optional(),
|
|
63
|
+
tier: z.number().int().min(1).max(3).optional(),
|
|
64
|
+
internal: z.boolean().default(false),
|
|
65
|
+
keywords: z.array(z.string()).default([]),
|
|
66
|
+
stack_signals: z.array(z.string()).default([])
|
|
63
67
|
});
|
|
64
68
|
|
|
65
69
|
export {
|