@harness-engineering/cli 1.13.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.yaml +1 -0
- 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.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.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.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.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.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.yaml +1 -0
- 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.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.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.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.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.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-P2RHSUV7.js → agents-md-XU3BHE22.js} +1 -1
- package/dist/{architecture-ESOOE26S.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-S2MZKLFQ.js → check-phase-gate-2OFZ7OWW.js} +3 -2
- package/dist/{chunk-LD3DKUK5.js → chunk-4ZMOCPYO.js} +1 -1
- package/dist/{chunk-5VY23YK3.js → chunk-65FRIL4D.js} +2 -2
- package/dist/{chunk-L2KLU56K.js → chunk-AOZRDOIP.js} +2 -2
- package/dist/{chunk-MACVXDZK.js → chunk-DZS7CJKL.js} +4 -4
- package/dist/{chunk-7PZWR4LI.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-MI5XJQDY.js → chunk-ND6PNADU.js} +23 -9
- package/dist/{chunk-7KQSUZVG.js → chunk-NERR4TAO.js} +729 -436
- package/dist/{chunk-PSNN4LWX.js → chunk-NOPU4RZ4.js} +2 -2
- package/dist/{chunk-KELT6K6M.js → chunk-PQ5YK4AY.js} +287 -258
- package/dist/{chunk-WPPDRIJL.js → chunk-QY4T6YAZ.js} +3 -3
- package/dist/{chunk-RZSUJBZZ.js → chunk-SSKDAOX5.js} +31 -28
- package/dist/{chunk-2VU4MFM3.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-3KOLLWWE.js → chunk-Z77YQRQT.js} +11 -207
- package/dist/{ci-workflow-4NYBUG6R.js → ci-workflow-EHV65NQB.js} +1 -1
- package/dist/{create-skill-WPXHSLX2.js → create-skill-XSWHMSM5.js} +2 -2
- package/dist/{dist-WF4C7A4A.js → dist-2B363XUH.js} +1 -1
- package/dist/{dist-M6BQODWC.js → dist-HXHWB7SV.js} +2 -2
- package/dist/{docs-BPYCN2DR.js → docs-FZOPM4GK.js} +4 -2
- package/dist/{engine-LXLIWQQ3.js → engine-OL4T6NZS.js} +1 -1
- package/dist/{entropy-4VDVV5CR.js → entropy-LVHJMFGH.js} +2 -2
- package/dist/{feedback-63QB5RCA.js → feedback-IHLVLMRD.js} +1 -1
- package/dist/{generate-agent-definitions-QABOJG56.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 +35 -8
- package/dist/index.js +23 -21
- package/dist/{loader-Z2IT7QX3.js → loader-DPYFB6R6.js} +1 -1
- package/dist/{mcp-KQHEL5IF.js → mcp-JQUI7BVZ.js} +14 -13
- package/dist/{performance-26BH47O4.js → performance-ZTVSUANN.js} +2 -2
- package/dist/{review-pipeline-GHR3WFBI.js → review-pipeline-76JHKGSV.js} +1 -1
- package/dist/{runtime-PDWD7UIK.js → runtime-X7U6SC7K.js} +1 -1
- package/dist/{security-UQFUZXEN.js → security-FWQZF2IZ.js} +1 -1
- package/dist/skill-executor-XZLYZYAK.js +8 -0
- package/dist/{validate-N7QJOKFZ.js → validate-GCHZJIL7.js} +2 -2
- package/dist/{validate-cross-check-EDQ5QGTM.js → validate-cross-check-STFHYMAZ.js} +1 -1
- package/package.json +3 -3
- package/dist/skill-executor-RG45LUO5.js +0 -8
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
# Harness API Design
|
|
2
|
+
|
|
3
|
+
> Advisory guide for REST, GraphQL, and gRPC API design. Produces OpenAPI specs, GraphQL schemas, or proto definitions with versioning strategies and consistency validation.
|
|
4
|
+
|
|
5
|
+
## When to Use
|
|
6
|
+
|
|
7
|
+
- When designing new API endpoints for a feature or service
|
|
8
|
+
- When adding routes to an existing Express, Fastify, NestJS, or Hono application
|
|
9
|
+
- When defining a GraphQL schema or extending an existing one
|
|
10
|
+
- When creating gRPC service definitions with Protocol Buffers
|
|
11
|
+
- When establishing or updating an API versioning strategy
|
|
12
|
+
- When reviewing an API surface for consistency before release
|
|
13
|
+
- NOT for API security review (use harness-security-review for authentication, authorization, and injection analysis)
|
|
14
|
+
- NOT for API performance testing (use harness-perf or harness-load-testing for benchmarks and load simulation)
|
|
15
|
+
- NOT for database schema design that backs the API (use harness-database for schema and migration work)
|
|
16
|
+
- NOT for event-driven async APIs (use harness-event-driven for message queues, webhooks, and pub/sub)
|
|
17
|
+
|
|
18
|
+
## Process
|
|
19
|
+
|
|
20
|
+
### Phase 1: DISCOVER -- Detect API Style and Existing Surface
|
|
21
|
+
|
|
22
|
+
1. **Detect the API style.** Scan the project for stack signals. WHERE `openapi.*` or `swagger.*` files exist, THEN classify as REST. WHERE `*.graphql` or `schema.graphql` exists, THEN classify as GraphQL. WHERE `*.proto` files exist, THEN classify as gRPC. If the `--style` argument is provided, use that instead of auto-detection.
|
|
23
|
+
|
|
24
|
+
2. **Map existing endpoints.** For REST projects, scan route files (`src/**/routes/**`, `src/**/controllers/**`) and extract HTTP method, path, request body, and response shape. For GraphQL, parse `schema.graphql` or code-first schema definitions. For gRPC, parse `.proto` files for service and rpc definitions.
|
|
25
|
+
|
|
26
|
+
3. **Identify the framework.** Detect Express (`app.get`, `router.post`), Fastify (`fastify.route`), NestJS (`@Controller`, `@Get`), Hono (`app.get`), Apollo (`typeDefs`, `resolvers`), or gRPC libraries (`@grpc/grpc-js`, `grpc-node`). Framework detection drives phase 2 recommendations.
|
|
27
|
+
|
|
28
|
+
4. **Catalog existing conventions.** Record naming patterns (camelCase vs kebab-case paths), response envelope structure (e.g., `{ data, error, meta }`), pagination style (cursor vs offset), and error format (RFC 7807, custom). These become the baseline that new endpoints must follow.
|
|
29
|
+
|
|
30
|
+
5. **Check for an existing OpenAPI spec.** If `openapi.yaml` or `openapi.json` exists, parse it and compare against the actual route definitions. Flag any drift where the spec does not match the implementation.
|
|
31
|
+
|
|
32
|
+
### Phase 2: DESIGN -- Produce Endpoint Definitions and Schemas
|
|
33
|
+
|
|
34
|
+
1. **Define resource models.** For each new resource, produce a schema with required fields, types, nullable markers, and validation constraints. Use JSON Schema for REST, GraphQL type definitions for GraphQL, or message definitions for gRPC.
|
|
35
|
+
|
|
36
|
+
2. **Design endpoint signatures.** For REST: define method, path, path parameters, query parameters, request body schema, and response schema. Follow the conventions cataloged in phase 1. For GraphQL: define queries, mutations, and input types. For gRPC: define service RPCs with request and response messages.
|
|
37
|
+
|
|
38
|
+
3. **Apply versioning strategy.** WHERE a versioning strategy is already in use, THEN follow it. WHERE no strategy exists, THEN recommend URL-path versioning (`/v1/resources`) for REST, schema evolution with `@deprecated` for GraphQL, or package versioning for gRPC. Document the strategy for future endpoints.
|
|
39
|
+
|
|
40
|
+
4. **Design error responses.** For REST: use RFC 7807 Problem Details unless the project already uses a different format. Include `type`, `title`, `status`, `detail`, and `instance`. For GraphQL: use the `errors` array with `extensions.code`. For gRPC: use standard status codes with detailed error metadata.
|
|
41
|
+
|
|
42
|
+
5. **Define pagination.** WHERE the endpoint returns a collection, THEN include pagination. Recommend cursor-based pagination for real-time data and offset-based for static datasets. Define the pagination envelope: `{ data: [], pagination: { cursor, hasMore } }` or equivalent.
|
|
43
|
+
|
|
44
|
+
6. **Specify rate limiting and caching headers.** For each endpoint, recommend `Cache-Control`, `ETag`, and `Vary` headers where applicable. Identify endpoints that should be rate-limited and suggest `X-RateLimit-*` headers.
|
|
45
|
+
|
|
46
|
+
### Phase 3: VALIDATE -- Check Against Best Practices
|
|
47
|
+
|
|
48
|
+
1. **Verify naming consistency.** All resource names must follow the same convention (plural nouns for REST collections, singular for GraphQL types). Path segments must use the same casing throughout. Flag any deviation from the conventions cataloged in phase 1.
|
|
49
|
+
|
|
50
|
+
2. **Check HTTP method correctness.** WHERE a REST endpoint modifies state, THEN it must not use GET. WHERE an endpoint is idempotent, THEN it should use PUT over POST. WHERE an endpoint creates a resource, THEN it must return 201 with a Location header.
|
|
51
|
+
|
|
52
|
+
3. **Validate schema completeness.** Every endpoint must have a defined request schema (if it accepts input) and response schema. No `any` types. No untyped response bodies. For GraphQL, every field must have an explicit type. For gRPC, no `google.protobuf.Any` unless justified.
|
|
53
|
+
|
|
54
|
+
4. **Check backward compatibility.** WHERE this is an update to an existing API, THEN verify that no required fields were added to request schemas, no fields were removed from response schemas, no endpoint paths changed, and no response status codes changed. Flag breaking changes explicitly.
|
|
55
|
+
|
|
56
|
+
5. **Verify OpenAPI spec validity.** Run the OpenAPI spec through structural validation. Check for missing descriptions, missing examples, and undefined `$ref` targets. For GraphQL, validate the schema parses without errors. For gRPC, verify proto files compile with `protoc`.
|
|
57
|
+
|
|
58
|
+
### Phase 4: DOCUMENT -- Generate or Update Specifications
|
|
59
|
+
|
|
60
|
+
1. **Generate the OpenAPI spec.** For REST APIs, produce or update an `openapi.yaml` file with all endpoints, schemas, examples, and security definitions. Use OpenAPI 3.1 unless the project already uses 3.0. Include `operationId` for every endpoint.
|
|
61
|
+
|
|
62
|
+
2. **Generate GraphQL schema documentation.** For GraphQL APIs, ensure every type, field, query, and mutation has a description. Produce a schema file that can be used for introspection. Add deprecation notices to fields being phased out.
|
|
63
|
+
|
|
64
|
+
3. **Generate proto documentation.** For gRPC APIs, ensure every service, rpc, message, and field has a comment. Verify the proto file includes package name, syntax version, and appropriate options.
|
|
65
|
+
|
|
66
|
+
4. **Produce a changelog entry.** For updates to existing APIs, write a changelog entry listing new endpoints, modified endpoints, deprecated endpoints, and breaking changes (if any). Follow the project's changelog format.
|
|
67
|
+
|
|
68
|
+
5. **Create request/response examples.** For every new endpoint, include at least one success example and one error example in the spec. Examples must use realistic data, not placeholders like `"string"` or `0`.
|
|
69
|
+
|
|
70
|
+
## Harness Integration
|
|
71
|
+
|
|
72
|
+
- **`harness validate`** -- Run after generating specs to confirm project health
|
|
73
|
+
- **`harness scan`** -- Refresh the knowledge graph after adding new route files
|
|
74
|
+
- **`query_graph`** -- Trace dependencies between routes, controllers, and services
|
|
75
|
+
- **`get_impact`** -- Understand blast radius when modifying shared API schemas
|
|
76
|
+
|
|
77
|
+
## Success Criteria
|
|
78
|
+
|
|
79
|
+
- API style was correctly detected or explicitly specified
|
|
80
|
+
- Existing conventions were cataloged and followed in new designs
|
|
81
|
+
- Every new endpoint has a complete schema (request and response)
|
|
82
|
+
- Versioning strategy is documented and applied
|
|
83
|
+
- Error responses follow a consistent format with machine-readable codes
|
|
84
|
+
- OpenAPI/GraphQL/proto spec is valid and matches the implementation
|
|
85
|
+
- No backward-incompatible changes were introduced without explicit flagging
|
|
86
|
+
- Pagination, caching, and rate limiting were addressed for applicable endpoints
|
|
87
|
+
|
|
88
|
+
## Examples
|
|
89
|
+
|
|
90
|
+
### Example: REST API Design with Express
|
|
91
|
+
|
|
92
|
+
**Input:** "Design CRUD endpoints for a blog posts resource in our Express app."
|
|
93
|
+
|
|
94
|
+
**Phase 1 -- DISCOVER:**
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
Detected: REST API (Express 4.x)
|
|
98
|
+
Routes directory: src/routes/
|
|
99
|
+
Existing endpoints: GET /v1/users, POST /v1/users, GET /v1/users/:id
|
|
100
|
+
Conventions: kebab-case paths, plural nouns, /v1/ prefix
|
|
101
|
+
Response envelope: { data, meta, error }
|
|
102
|
+
Pagination: cursor-based ({ cursor, limit })
|
|
103
|
+
Error format: RFC 7807 Problem Details
|
|
104
|
+
OpenAPI spec: openapi.yaml (last updated 2 weeks ago, 1 drift: missing GET /v1/users/:id/settings)
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**Phase 2 -- DESIGN:**
|
|
108
|
+
|
|
109
|
+
```yaml
|
|
110
|
+
paths:
|
|
111
|
+
/v1/posts:
|
|
112
|
+
get:
|
|
113
|
+
operationId: listPosts
|
|
114
|
+
parameters:
|
|
115
|
+
- name: cursor
|
|
116
|
+
in: query
|
|
117
|
+
schema: { type: string }
|
|
118
|
+
- name: limit
|
|
119
|
+
in: query
|
|
120
|
+
schema: { type: integer, default: 20, maximum: 100 }
|
|
121
|
+
- name: status
|
|
122
|
+
in: query
|
|
123
|
+
schema: { type: string, enum: [draft, published, archived] }
|
|
124
|
+
responses:
|
|
125
|
+
200:
|
|
126
|
+
content:
|
|
127
|
+
application/json:
|
|
128
|
+
schema:
|
|
129
|
+
type: object
|
|
130
|
+
properties:
|
|
131
|
+
data: { type: array, items: { $ref: '#/components/schemas/Post' } }
|
|
132
|
+
meta:
|
|
133
|
+
type: object
|
|
134
|
+
properties:
|
|
135
|
+
cursor: { type: string, nullable: true }
|
|
136
|
+
hasMore: { type: boolean }
|
|
137
|
+
post:
|
|
138
|
+
operationId: createPost
|
|
139
|
+
requestBody:
|
|
140
|
+
content:
|
|
141
|
+
application/json:
|
|
142
|
+
schema: { $ref: '#/components/schemas/CreatePostInput' }
|
|
143
|
+
responses:
|
|
144
|
+
201:
|
|
145
|
+
headers:
|
|
146
|
+
Location: { schema: { type: string } }
|
|
147
|
+
content:
|
|
148
|
+
application/json:
|
|
149
|
+
schema:
|
|
150
|
+
type: object
|
|
151
|
+
properties:
|
|
152
|
+
data: { $ref: '#/components/schemas/Post' }
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
**Phase 3 -- VALIDATE:**
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
Naming: PASS -- /v1/posts follows plural noun convention
|
|
159
|
+
Methods: PASS -- GET for reads, POST for creation
|
|
160
|
+
Schemas: PASS -- all endpoints have request/response schemas
|
|
161
|
+
Compatibility: N/A -- new resource, no existing contract
|
|
162
|
+
OpenAPI: WARN -- existing spec drift detected (1 endpoint missing)
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
**Phase 4 -- DOCUMENT:**
|
|
166
|
+
Updated `openapi.yaml` with 5 new endpoints, 3 new schemas, and examples. Fixed existing drift for `GET /v1/users/:id/settings`.
|
|
167
|
+
|
|
168
|
+
### Example: GraphQL Schema Extension with Apollo
|
|
169
|
+
|
|
170
|
+
**Input:** "Add a comments system to our GraphQL API."
|
|
171
|
+
|
|
172
|
+
**Phase 1 -- DISCOVER:**
|
|
173
|
+
|
|
174
|
+
```
|
|
175
|
+
Detected: GraphQL (Apollo Server 4, code-first with typeDefs)
|
|
176
|
+
Schema: src/schema/typeDefs.ts
|
|
177
|
+
Existing types: User, Post, Category
|
|
178
|
+
Resolvers: src/resolvers/
|
|
179
|
+
Conventions: PascalCase types, camelCase fields, relay-style connections for pagination
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
**Phase 2 -- DESIGN:**
|
|
183
|
+
|
|
184
|
+
```graphql
|
|
185
|
+
type Comment {
|
|
186
|
+
id: ID!
|
|
187
|
+
body: String!
|
|
188
|
+
author: User!
|
|
189
|
+
post: Post!
|
|
190
|
+
createdAt: DateTime!
|
|
191
|
+
updatedAt: DateTime!
|
|
192
|
+
parentComment: Comment
|
|
193
|
+
replies(first: Int, after: String): CommentConnection!
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
type CommentConnection {
|
|
197
|
+
edges: [CommentEdge!]!
|
|
198
|
+
pageInfo: PageInfo!
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
type CommentEdge {
|
|
202
|
+
node: Comment!
|
|
203
|
+
cursor: String!
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
input CreateCommentInput {
|
|
207
|
+
postId: ID!
|
|
208
|
+
body: String!
|
|
209
|
+
parentCommentId: ID
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
extend type Query {
|
|
213
|
+
comments(postId: ID!, first: Int, after: String): CommentConnection!
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
extend type Mutation {
|
|
217
|
+
createComment(input: CreateCommentInput!): Comment!
|
|
218
|
+
updateComment(id: ID!, body: String!): Comment!
|
|
219
|
+
deleteComment(id: ID!): Boolean!
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
extend type Post {
|
|
223
|
+
comments(first: Int, after: String): CommentConnection!
|
|
224
|
+
commentCount: Int!
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
**Phase 3 -- VALIDATE:**
|
|
229
|
+
|
|
230
|
+
```
|
|
231
|
+
Naming: PASS -- PascalCase types, camelCase fields
|
|
232
|
+
Pagination: PASS -- relay-style connections with PageInfo
|
|
233
|
+
Types: PASS -- all fields explicitly typed, no Any
|
|
234
|
+
Compatibility: PASS -- uses extend, no modifications to existing types
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### Example: gRPC Service Definition
|
|
238
|
+
|
|
239
|
+
**Input:** "Define a notification service for our microservices platform."
|
|
240
|
+
|
|
241
|
+
**Phase 1 -- DISCOVER:**
|
|
242
|
+
|
|
243
|
+
```
|
|
244
|
+
Detected: gRPC (proto3, @grpc/grpc-js)
|
|
245
|
+
Proto directory: proto/
|
|
246
|
+
Existing services: UserService, OrderService
|
|
247
|
+
Package: platform.v1
|
|
248
|
+
Conventions: PascalCase services and messages, snake_case fields
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
**Phase 2 -- DESIGN:**
|
|
252
|
+
|
|
253
|
+
```protobuf
|
|
254
|
+
syntax = "proto3";
|
|
255
|
+
|
|
256
|
+
package platform.v1;
|
|
257
|
+
|
|
258
|
+
import "google/protobuf/timestamp.proto";
|
|
259
|
+
|
|
260
|
+
service NotificationService {
|
|
261
|
+
// Send a notification to a specific user.
|
|
262
|
+
rpc SendNotification(SendNotificationRequest) returns (SendNotificationResponse);
|
|
263
|
+
|
|
264
|
+
// List notifications for a user with cursor pagination.
|
|
265
|
+
rpc ListNotifications(ListNotificationsRequest) returns (ListNotificationsResponse);
|
|
266
|
+
|
|
267
|
+
// Mark a notification as read.
|
|
268
|
+
rpc MarkAsRead(MarkAsReadRequest) returns (MarkAsReadResponse);
|
|
269
|
+
|
|
270
|
+
// Stream real-time notifications for a user.
|
|
271
|
+
rpc StreamNotifications(StreamNotificationsRequest) returns (stream Notification);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
message Notification {
|
|
275
|
+
string id = 1;
|
|
276
|
+
string user_id = 2;
|
|
277
|
+
string title = 3;
|
|
278
|
+
string body = 4;
|
|
279
|
+
NotificationType type = 5;
|
|
280
|
+
bool is_read = 6;
|
|
281
|
+
google.protobuf.Timestamp created_at = 7;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
enum NotificationType {
|
|
285
|
+
NOTIFICATION_TYPE_UNSPECIFIED = 0;
|
|
286
|
+
NOTIFICATION_TYPE_ORDER_UPDATE = 1;
|
|
287
|
+
NOTIFICATION_TYPE_SYSTEM_ALERT = 2;
|
|
288
|
+
NOTIFICATION_TYPE_PROMOTION = 3;
|
|
289
|
+
}
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
## Gates
|
|
293
|
+
|
|
294
|
+
- **Every endpoint must have a complete schema.** No endpoint may be added without defined request parameters, request body (if applicable), response body, and error responses. An endpoint without a schema is not designed -- it is a stub.
|
|
295
|
+
- **Breaking changes must be explicitly flagged.** WHERE a change removes a field, renames an endpoint, or adds a required request parameter, THEN the skill must flag it as a breaking change and halt until the human acknowledges the break. Silent breaking changes are not permitted.
|
|
296
|
+
- **Generated specs must be valid.** The OpenAPI spec must pass structural validation. The GraphQL schema must parse without errors. Proto files must compile with `protoc`. An invalid spec is worse than no spec.
|
|
297
|
+
- **Naming conventions must be consistent.** WHERE the project uses a naming convention (detected in phase 1), THEN all new endpoints must follow it. A single inconsistent name pollutes the entire API surface.
|
|
298
|
+
|
|
299
|
+
## Escalation
|
|
300
|
+
|
|
301
|
+
- **No existing conventions detected:** When the project has no existing API endpoints and no spec file, the skill cannot infer conventions. Report: "No existing API conventions found. Provide a style guide or approve the defaults (plural nouns, kebab-case paths, RFC 7807 errors, cursor pagination) before proceeding."
|
|
302
|
+
- **Breaking change required by the feature:** When the requested feature inherently requires a breaking change (e.g., restructuring a response), present the break explicitly with migration guidance: "This feature requires removing the `legacyField` from the response. Recommend a deprecation period: add `newField` in v1, remove `legacyField` in v2."
|
|
303
|
+
- **Conflicting API styles in the same project:** When both REST routes and GraphQL resolvers exist, ask: "This project has both REST and GraphQL endpoints. Which style should the new feature use? Mixing styles for the same resource creates maintenance burden."
|
|
304
|
+
- **OpenAPI spec severely out of date:** When more than 30% of implemented endpoints are missing from the spec, flag: "The OpenAPI spec is significantly drifted from implementation (N endpoints missing). Recommend a full spec regeneration before adding new endpoints to avoid compounding the drift."
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
name: harness-api-design
|
|
2
|
+
version: "1.0.0"
|
|
3
|
+
description: REST, GraphQL, gRPC API design with OpenAPI specs and versioning strategies
|
|
4
|
+
cognitive_mode: advisory-guide
|
|
5
|
+
triggers:
|
|
6
|
+
- manual
|
|
7
|
+
- on_new_feature
|
|
8
|
+
platforms:
|
|
9
|
+
- claude-code
|
|
10
|
+
- gemini-cli
|
|
11
|
+
tools:
|
|
12
|
+
- Bash
|
|
13
|
+
- Read
|
|
14
|
+
- Write
|
|
15
|
+
- Edit
|
|
16
|
+
- Glob
|
|
17
|
+
- Grep
|
|
18
|
+
cli:
|
|
19
|
+
command: harness skill run harness-api-design
|
|
20
|
+
args:
|
|
21
|
+
- name: path
|
|
22
|
+
description: Project root path
|
|
23
|
+
required: false
|
|
24
|
+
- name: style
|
|
25
|
+
description: "API style: rest, graphql, or grpc. Auto-detected when omitted."
|
|
26
|
+
required: false
|
|
27
|
+
- name: versioning
|
|
28
|
+
description: "Versioning strategy: url-path, header, or query-param. Defaults to url-path."
|
|
29
|
+
required: false
|
|
30
|
+
mcp:
|
|
31
|
+
tool: run_skill
|
|
32
|
+
input:
|
|
33
|
+
skill: harness-api-design
|
|
34
|
+
path: string
|
|
35
|
+
type: rigid
|
|
36
|
+
tier: 3
|
|
37
|
+
internal: false
|
|
38
|
+
keywords:
|
|
39
|
+
- API
|
|
40
|
+
- REST
|
|
41
|
+
- GraphQL
|
|
42
|
+
- gRPC
|
|
43
|
+
- OpenAPI
|
|
44
|
+
- swagger
|
|
45
|
+
- endpoint
|
|
46
|
+
- versioning
|
|
47
|
+
- schema
|
|
48
|
+
- protobuf
|
|
49
|
+
stack_signals:
|
|
50
|
+
- "openapi.*"
|
|
51
|
+
- "swagger.*"
|
|
52
|
+
- "*.proto"
|
|
53
|
+
- "schema.graphql"
|
|
54
|
+
- "*.graphql"
|
|
55
|
+
- "src/**/routes/**"
|
|
56
|
+
- "src/**/controllers/**"
|
|
57
|
+
- "src/**/resolvers/**"
|
|
58
|
+
phases:
|
|
59
|
+
- name: discover
|
|
60
|
+
description: Detect API style, existing endpoints, and technology stack
|
|
61
|
+
required: true
|
|
62
|
+
- name: design
|
|
63
|
+
description: Produce endpoint definitions, schemas, and versioning plan
|
|
64
|
+
required: true
|
|
65
|
+
- name: validate
|
|
66
|
+
description: Verify design against REST/GraphQL/gRPC best practices and consistency rules
|
|
67
|
+
required: true
|
|
68
|
+
- name: document
|
|
69
|
+
description: Generate or update OpenAPI spec, GraphQL schema, or proto definitions
|
|
70
|
+
required: true
|
|
71
|
+
state:
|
|
72
|
+
persistent: false
|
|
73
|
+
files: []
|
|
74
|
+
depends_on: []
|