metaharness 0.1.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/LICENSE +21 -0
- package/README.md +73 -0
- package/dist/analyze-repo.d.ts +74 -0
- package/dist/analyze-repo.d.ts.map +1 -0
- package/dist/analyze-repo.js +329 -0
- package/dist/analyze-repo.js.map +1 -0
- package/dist/audit-cmd.d.ts +6 -0
- package/dist/audit-cmd.d.ts.map +1 -0
- package/dist/audit-cmd.js +139 -0
- package/dist/audit-cmd.js.map +1 -0
- package/dist/bin.d.ts +3 -0
- package/dist/bin.d.ts.map +1 -0
- package/dist/bin.js +8 -0
- package/dist/bin.js.map +1 -0
- package/dist/compare-cmd.d.ts +56 -0
- package/dist/compare-cmd.d.ts.map +1 -0
- package/dist/compare-cmd.js +173 -0
- package/dist/compare-cmd.js.map +1 -0
- package/dist/completions-cmd.d.ts +6 -0
- package/dist/completions-cmd.d.ts.map +1 -0
- package/dist/completions-cmd.js +171 -0
- package/dist/completions-cmd.js.map +1 -0
- package/dist/diag.d.ts +76 -0
- package/dist/diag.d.ts.map +1 -0
- package/dist/diag.js +349 -0
- package/dist/diag.js.map +1 -0
- package/dist/eject.d.ts +33 -0
- package/dist/eject.d.ts.map +1 -0
- package/dist/eject.js +147 -0
- package/dist/eject.js.map +1 -0
- package/dist/export-config.d.ts +25 -0
- package/dist/export-config.d.ts.map +1 -0
- package/dist/export-config.js +134 -0
- package/dist/export-config.js.map +1 -0
- package/dist/external-template.d.ts +19 -0
- package/dist/external-template.d.ts.map +1 -0
- package/dist/external-template.js +37 -0
- package/dist/external-template.js.map +1 -0
- package/dist/federate.d.ts +37 -0
- package/dist/federate.d.ts.map +1 -0
- package/dist/federate.js +167 -0
- package/dist/federate.js.map +1 -0
- package/dist/genome-scorers.d.ts +33 -0
- package/dist/genome-scorers.d.ts.map +1 -0
- package/dist/genome-scorers.js +115 -0
- package/dist/genome-scorers.js.map +1 -0
- package/dist/genome.d.ts +28 -0
- package/dist/genome.d.ts.map +1 -0
- package/dist/genome.js +219 -0
- package/dist/genome.js.map +1 -0
- package/dist/harness-bin.d.ts +3 -0
- package/dist/harness-bin.d.ts.map +1 -0
- package/dist/harness-bin.js +17 -0
- package/dist/harness-bin.js.map +1 -0
- package/dist/index.d.ts +79 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +409 -0
- package/dist/index.js.map +1 -0
- package/dist/manifest.d.ts +55 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +62 -0
- package/dist/manifest.js.map +1 -0
- package/dist/mcp-cmd.d.ts +19 -0
- package/dist/mcp-cmd.d.ts.map +1 -0
- package/dist/mcp-cmd.js +179 -0
- package/dist/mcp-cmd.js.map +1 -0
- package/dist/mcp-scan.d.ts +25 -0
- package/dist/mcp-scan.d.ts.map +1 -0
- package/dist/mcp-scan.js +132 -0
- package/dist/mcp-scan.js.map +1 -0
- package/dist/oia-manifest.d.ts +97 -0
- package/dist/oia-manifest.d.ts.map +1 -0
- package/dist/oia-manifest.js +241 -0
- package/dist/oia-manifest.js.map +1 -0
- package/dist/publish-cmd.d.ts +9 -0
- package/dist/publish-cmd.d.ts.map +1 -0
- package/dist/publish-cmd.js +56 -0
- package/dist/publish-cmd.js.map +1 -0
- package/dist/publish.d.ts +55 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +104 -0
- package/dist/publish.js.map +1 -0
- package/dist/registry.d.ts +60 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +67 -0
- package/dist/registry.js.map +1 -0
- package/dist/rename.d.ts +26 -0
- package/dist/rename.d.ts.map +1 -0
- package/dist/rename.js +86 -0
- package/dist/rename.js.map +1 -0
- package/dist/renderer.d.ts +39 -0
- package/dist/renderer.d.ts.map +1 -0
- package/dist/renderer.js +75 -0
- package/dist/renderer.js.map +1 -0
- package/dist/sbom-cmd.d.ts +6 -0
- package/dist/sbom-cmd.d.ts.map +1 -0
- package/dist/sbom-cmd.js +125 -0
- package/dist/sbom-cmd.js.map +1 -0
- package/dist/score.d.ts +32 -0
- package/dist/score.d.ts.map +1 -0
- package/dist/score.js +381 -0
- package/dist/score.js.map +1 -0
- package/dist/secrets.d.ts +27 -0
- package/dist/secrets.d.ts.map +1 -0
- package/dist/secrets.js +228 -0
- package/dist/secrets.js.map +1 -0
- package/dist/subcommands.d.ts +32 -0
- package/dist/subcommands.d.ts.map +1 -0
- package/dist/subcommands.js +335 -0
- package/dist/subcommands.js.map +1 -0
- package/dist/tarball.d.ts +14 -0
- package/dist/tarball.d.ts.map +1 -0
- package/dist/tarball.js +121 -0
- package/dist/tarball.js.map +1 -0
- package/dist/threat-model.d.ts +32 -0
- package/dist/threat-model.d.ts.map +1 -0
- package/dist/threat-model.js +236 -0
- package/dist/threat-model.js.map +1 -0
- package/dist/upgrade-cmd.d.ts +9 -0
- package/dist/upgrade-cmd.d.ts.map +1 -0
- package/dist/upgrade-cmd.js +90 -0
- package/dist/upgrade-cmd.js.map +1 -0
- package/dist/upgrade.d.ts +37 -0
- package/dist/upgrade.d.ts.map +1 -0
- package/dist/upgrade.js +124 -0
- package/dist/upgrade.js.map +1 -0
- package/dist/validate.d.ts +7 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +240 -0
- package/dist/validate.js.map +1 -0
- package/dist/walker.d.ts +24 -0
- package/dist/walker.d.ts.map +1 -0
- package/dist/walker.js +76 -0
- package/dist/walker.js.map +1 -0
- package/dist/witness-client.d.ts +40 -0
- package/dist/witness-client.d.ts.map +1 -0
- package/dist/witness-client.js +99 -0
- package/dist/witness-client.js.map +1 -0
- package/dist/wizard.d.ts +37 -0
- package/dist/wizard.d.ts.map +1 -0
- package/dist/wizard.js +137 -0
- package/dist/wizard.js.map +1 -0
- package/dist/writer.d.ts +13 -0
- package/dist/writer.d.ts.map +1 -0
- package/dist/writer.js +43 -0
- package/dist/writer.js.map +1 -0
- package/package.json +114 -0
- package/templates/catalog.def.mjs +542 -0
- package/templates/catalog.json +1274 -0
- package/templates/minimal/.claude/settings.json.tmpl +18 -0
- package/templates/minimal/CLAUDE.md.tmpl +23 -0
- package/templates/minimal/README.md.tmpl +20 -0
- package/templates/minimal/manifest.json +16 -0
- package/templates/minimal/package.json.tmpl +30 -0
- package/templates/minimal/src/init.ts.tmpl +21 -0
- package/templates/vertical_advertising/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_advertising/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_advertising/.claude/skills/media-plan/SKILL.md.tmpl +13 -0
- package/templates/vertical_advertising/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_advertising/README.md.tmpl +29 -0
- package/templates/vertical_advertising/manifest.json +81 -0
- package/templates/vertical_advertising/package.json.tmpl +30 -0
- package/templates/vertical_advertising/src/agents/copywriter.ts.tmpl +7 -0
- package/templates/vertical_advertising/src/agents/media-planner.ts.tmpl +7 -0
- package/templates/vertical_advertising/src/agents/performance-analyst.ts.tmpl +7 -0
- package/templates/vertical_advertising/src/init.ts.tmpl +21 -0
- package/templates/vertical_agentics/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_agentics/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_agentics/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_agentics/.claude/skills/run-swarm/SKILL.md.tmpl +14 -0
- package/templates/vertical_agentics/CLAUDE.md.tmpl +32 -0
- package/templates/vertical_agentics/README.md.tmpl +30 -0
- package/templates/vertical_agentics/manifest.json +91 -0
- package/templates/vertical_agentics/package.json.tmpl +30 -0
- package/templates/vertical_agentics/src/agents/critic.ts.tmpl +7 -0
- package/templates/vertical_agentics/src/agents/orchestrator.ts.tmpl +7 -0
- package/templates/vertical_agentics/src/agents/planner.ts.tmpl +7 -0
- package/templates/vertical_agentics/src/agents/worker.ts.tmpl +7 -0
- package/templates/vertical_agentics/src/init.ts.tmpl +21 -0
- package/templates/vertical_ai/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_ai/.claude/settings.json.tmpl +35 -0
- package/templates/vertical_ai/.claude/skills/eval-report/SKILL.md.tmpl +13 -0
- package/templates/vertical_ai/CLAUDE.md.tmpl +31 -0
- package/templates/vertical_ai/README.md.tmpl +30 -0
- package/templates/vertical_ai/manifest.json +86 -0
- package/templates/vertical_ai/package.json.tmpl +30 -0
- package/templates/vertical_ai/src/agents/data-curator.ts.tmpl +7 -0
- package/templates/vertical_ai/src/agents/deployer.ts.tmpl +7 -0
- package/templates/vertical_ai/src/agents/evaluator.ts.tmpl +7 -0
- package/templates/vertical_ai/src/agents/trainer.ts.tmpl +7 -0
- package/templates/vertical_ai/src/init.ts.tmpl +21 -0
- package/templates/vertical_business/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_business/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_business/.claude/skills/quarterly-plan/SKILL.md.tmpl +13 -0
- package/templates/vertical_business/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_business/README.md.tmpl +29 -0
- package/templates/vertical_business/manifest.json +81 -0
- package/templates/vertical_business/package.json.tmpl +30 -0
- package/templates/vertical_business/src/agents/analyst.ts.tmpl +7 -0
- package/templates/vertical_business/src/agents/ops-coordinator.ts.tmpl +7 -0
- package/templates/vertical_business/src/agents/strategist.ts.tmpl +7 -0
- package/templates/vertical_business/src/init.ts.tmpl +21 -0
- package/templates/vertical_coding/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_coding/.claude/commands/review-diff.md.tmpl +10 -0
- package/templates/vertical_coding/.claude/settings.json.tmpl +40 -0
- package/templates/vertical_coding/.claude/skills/plan-change/SKILL.md.tmpl +15 -0
- package/templates/vertical_coding/CLAUDE.md.tmpl +32 -0
- package/templates/vertical_coding/README.md.tmpl +30 -0
- package/templates/vertical_coding/manifest.json +91 -0
- package/templates/vertical_coding/package.json.tmpl +30 -0
- package/templates/vertical_coding/src/agents/architect.ts.tmpl +7 -0
- package/templates/vertical_coding/src/agents/implementer.ts.tmpl +7 -0
- package/templates/vertical_coding/src/agents/reviewer.ts.tmpl +7 -0
- package/templates/vertical_coding/src/agents/test-writer.ts.tmpl +7 -0
- package/templates/vertical_coding/src/init.ts.tmpl +21 -0
- package/templates/vertical_crm/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_crm/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_crm/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_crm/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_crm/README.md.tmpl +29 -0
- package/templates/vertical_crm/manifest.json +81 -0
- package/templates/vertical_crm/package.json.tmpl +30 -0
- package/templates/vertical_crm/src/agents/account-manager.ts.tmpl +7 -0
- package/templates/vertical_crm/src/agents/churn-watcher.ts.tmpl +7 -0
- package/templates/vertical_crm/src/agents/lead-qualifier.ts.tmpl +7 -0
- package/templates/vertical_crm/src/init.ts.tmpl +21 -0
- package/templates/vertical_devops/.claude/settings.json.tmpl +36 -0
- package/templates/vertical_devops/CLAUDE.md.tmpl +34 -0
- package/templates/vertical_devops/README.md.tmpl +27 -0
- package/templates/vertical_devops/manifest.json +22 -0
- package/templates/vertical_devops/package.json.tmpl +26 -0
- package/templates/vertical_devops/runbooks/README.md.tmpl +32 -0
- package/templates/vertical_devops/src/agents/escalator.ts.tmpl +19 -0
- package/templates/vertical_devops/src/agents/postmortem.ts.tmpl +23 -0
- package/templates/vertical_devops/src/agents/responder.ts.tmpl +14 -0
- package/templates/vertical_devops/src/agents/runbook-runner.ts.tmpl +17 -0
- package/templates/vertical_devops/src/init.ts.tmpl +23 -0
- package/templates/vertical_education/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_education/.claude/commands/mastery-report.md.tmpl +12 -0
- package/templates/vertical_education/.claude/settings.json.tmpl +45 -0
- package/templates/vertical_education/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_education/.claude/skills/teach-next/SKILL.md.tmpl +16 -0
- package/templates/vertical_education/CLAUDE.md.tmpl +33 -0
- package/templates/vertical_education/README.md.tmpl +30 -0
- package/templates/vertical_education/manifest.json +96 -0
- package/templates/vertical_education/package.json.tmpl +30 -0
- package/templates/vertical_education/src/agents/explainer.ts.tmpl +7 -0
- package/templates/vertical_education/src/agents/grader.ts.tmpl +7 -0
- package/templates/vertical_education/src/agents/quiz-master.ts.tmpl +7 -0
- package/templates/vertical_education/src/agents/tutor.ts.tmpl +7 -0
- package/templates/vertical_education/src/init.ts.tmpl +21 -0
- package/templates/vertical_exotic/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_exotic/.claude/settings.json.tmpl +44 -0
- package/templates/vertical_exotic/.claude/skills/evolve/SKILL.md.tmpl +14 -0
- package/templates/vertical_exotic/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_exotic/CLAUDE.md.tmpl +31 -0
- package/templates/vertical_exotic/README.md.tmpl +29 -0
- package/templates/vertical_exotic/manifest.json +86 -0
- package/templates/vertical_exotic/package.json.tmpl +30 -0
- package/templates/vertical_exotic/src/agents/experimenter.ts.tmpl +7 -0
- package/templates/vertical_exotic/src/agents/federator.ts.tmpl +7 -0
- package/templates/vertical_exotic/src/agents/hypothesizer.ts.tmpl +7 -0
- package/templates/vertical_exotic/src/init.ts.tmpl +21 -0
- package/templates/vertical_gaming/.claude/commands/design-doc-diff.md.tmpl +13 -0
- package/templates/vertical_gaming/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_gaming/.claude/settings.json.tmpl +45 -0
- package/templates/vertical_gaming/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_gaming/.claude/skills/playtest-recap/SKILL.md.tmpl +16 -0
- package/templates/vertical_gaming/CLAUDE.md.tmpl +33 -0
- package/templates/vertical_gaming/README.md.tmpl +30 -0
- package/templates/vertical_gaming/manifest.json +96 -0
- package/templates/vertical_gaming/package.json.tmpl +30 -0
- package/templates/vertical_gaming/src/agents/balance-critic.ts.tmpl +7 -0
- package/templates/vertical_gaming/src/agents/economy-modeler.ts.tmpl +7 -0
- package/templates/vertical_gaming/src/agents/narrative-keeper.ts.tmpl +7 -0
- package/templates/vertical_gaming/src/agents/playtest-reader.ts.tmpl +7 -0
- package/templates/vertical_gaming/src/init.ts.tmpl +21 -0
- package/templates/vertical_health/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_health/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_health/.claude/skills/wellness-intake/SKILL.md.tmpl +15 -0
- package/templates/vertical_health/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_health/README.md.tmpl +29 -0
- package/templates/vertical_health/manifest.json +81 -0
- package/templates/vertical_health/package.json.tmpl +30 -0
- package/templates/vertical_health/src/agents/care-coordinator.ts.tmpl +7 -0
- package/templates/vertical_health/src/agents/intake.ts.tmpl +7 -0
- package/templates/vertical_health/src/agents/triage.ts.tmpl +7 -0
- package/templates/vertical_health/src/init.ts.tmpl +21 -0
- package/templates/vertical_legal/.claude/settings.json.tmpl +10 -0
- package/templates/vertical_legal/CLAUDE.md.tmpl +24 -0
- package/templates/vertical_legal/README.md.tmpl +21 -0
- package/templates/vertical_legal/manifest.json +20 -0
- package/templates/vertical_legal/package.json.tmpl +13 -0
- package/templates/vertical_legal/src/agents/citation-checker.ts.tmpl +7 -0
- package/templates/vertical_legal/src/agents/redline.ts.tmpl +7 -0
- package/templates/vertical_legal/src/agents/risk-rater.ts.tmpl +8 -0
- package/templates/vertical_legal/src/init.ts.tmpl +13 -0
- package/templates/vertical_marketing/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_marketing/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_marketing/.claude/skills/campaign-brief/SKILL.md.tmpl +13 -0
- package/templates/vertical_marketing/CLAUDE.md.tmpl +30 -0
- package/templates/vertical_marketing/README.md.tmpl +29 -0
- package/templates/vertical_marketing/manifest.json +81 -0
- package/templates/vertical_marketing/package.json.tmpl +30 -0
- package/templates/vertical_marketing/src/agents/content-creator.ts.tmpl +7 -0
- package/templates/vertical_marketing/src/agents/seo-analyst.ts.tmpl +7 -0
- package/templates/vertical_marketing/src/agents/strategist.ts.tmpl +7 -0
- package/templates/vertical_marketing/src/init.ts.tmpl +21 -0
- package/templates/vertical_repo-maintainer/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_repo-maintainer/.claude/commands/release-check.md.tmpl +13 -0
- package/templates/vertical_repo-maintainer/.claude/commands/repo-triage.md.tmpl +16 -0
- package/templates/vertical_repo-maintainer/.claude/settings.json.tmpl +44 -0
- package/templates/vertical_repo-maintainer/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_repo-maintainer/.claude/skills/plan-change/SKILL.md.tmpl +15 -0
- package/templates/vertical_repo-maintainer/CLAUDE.md.tmpl +34 -0
- package/templates/vertical_repo-maintainer/README.md.tmpl +30 -0
- package/templates/vertical_repo-maintainer/manifest.json +101 -0
- package/templates/vertical_repo-maintainer/package.json.tmpl +30 -0
- package/templates/vertical_repo-maintainer/src/agents/benchmarker.ts.tmpl +7 -0
- package/templates/vertical_repo-maintainer/src/agents/maintainer.ts.tmpl +7 -0
- package/templates/vertical_repo-maintainer/src/agents/release.ts.tmpl +7 -0
- package/templates/vertical_repo-maintainer/src/agents/security.ts.tmpl +7 -0
- package/templates/vertical_repo-maintainer/src/init.ts.tmpl +21 -0
- package/templates/vertical_research/.claude/settings.json.tmpl +9 -0
- package/templates/vertical_research/CLAUDE.md.tmpl +33 -0
- package/templates/vertical_research/README.md.tmpl +17 -0
- package/templates/vertical_research/manifest.json +23 -0
- package/templates/vertical_research/package.json.tmpl +13 -0
- package/templates/vertical_research/src/agents/citer.ts.tmpl +8 -0
- package/templates/vertical_research/src/agents/fact-checker.ts.tmpl +8 -0
- package/templates/vertical_research/src/agents/scout.ts.tmpl +7 -0
- package/templates/vertical_research/src/agents/source-grader.ts.tmpl +10 -0
- package/templates/vertical_research/src/agents/synthesizer.ts.tmpl +8 -0
- package/templates/vertical_research/src/agents/web-searcher.ts.tmpl +6 -0
- package/templates/vertical_research/src/init.ts.tmpl +13 -0
- package/templates/vertical_ruview/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_ruview/.claude/settings.json.tmpl +33 -0
- package/templates/vertical_ruview/.claude/skills/index-and-ask/SKILL.md.tmpl +15 -0
- package/templates/vertical_ruview/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_ruview/CLAUDE.md.tmpl +31 -0
- package/templates/vertical_ruview/README.md.tmpl +29 -0
- package/templates/vertical_ruview/manifest.json +86 -0
- package/templates/vertical_ruview/package.json.tmpl +30 -0
- package/templates/vertical_ruview/src/agents/indexer.ts.tmpl +7 -0
- package/templates/vertical_ruview/src/agents/retriever.ts.tmpl +7 -0
- package/templates/vertical_ruview/src/agents/reviewer.ts.tmpl +7 -0
- package/templates/vertical_ruview/src/init.ts.tmpl +21 -0
- package/templates/vertical_sales/.claude/commands/doctor.md.tmpl +12 -0
- package/templates/vertical_sales/.claude/commands/pipeline-report.md.tmpl +13 -0
- package/templates/vertical_sales/.claude/settings.json.tmpl +45 -0
- package/templates/vertical_sales/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
- package/templates/vertical_sales/.claude/skills/qualify-lead/SKILL.md.tmpl +15 -0
- package/templates/vertical_sales/CLAUDE.md.tmpl +33 -0
- package/templates/vertical_sales/README.md.tmpl +30 -0
- package/templates/vertical_sales/manifest.json +96 -0
- package/templates/vertical_sales/package.json.tmpl +30 -0
- package/templates/vertical_sales/src/agents/closer.ts.tmpl +7 -0
- package/templates/vertical_sales/src/agents/demo-coach.ts.tmpl +7 -0
- package/templates/vertical_sales/src/agents/prospector.ts.tmpl +7 -0
- package/templates/vertical_sales/src/agents/qualifier.ts.tmpl +7 -0
- package/templates/vertical_sales/src/init.ts.tmpl +21 -0
- package/templates/vertical_support/.claude/settings.json.tmpl +25 -0
- package/templates/vertical_support/CLAUDE.md.tmpl +34 -0
- package/templates/vertical_support/README.md.tmpl +16 -0
- package/templates/vertical_support/kb/README.md.tmpl +23 -0
- package/templates/vertical_support/manifest.json +22 -0
- package/templates/vertical_support/package.json.tmpl +24 -0
- package/templates/vertical_support/src/agents/escalator.ts.tmpl +6 -0
- package/templates/vertical_support/src/agents/kb-searcher.ts.tmpl +6 -0
- package/templates/vertical_support/src/agents/responder.ts.tmpl +7 -0
- package/templates/vertical_support/src/agents/triager.ts.tmpl +6 -0
- package/templates/vertical_support/src/init.ts.tmpl +16 -0
- package/templates/vertical_trading/.claude/settings.json.tmpl +20 -0
- package/templates/vertical_trading/CLAUDE.md.tmpl +24 -0
- package/templates/vertical_trading/README.md.tmpl +17 -0
- package/templates/vertical_trading/manifest.json +22 -0
- package/templates/vertical_trading/package.json.tmpl +13 -0
- package/templates/vertical_trading/src/agents/executor.ts.tmpl +8 -0
- package/templates/vertical_trading/src/agents/market-watcher.ts.tmpl +7 -0
- package/templates/vertical_trading/src/agents/postmortem.ts.tmpl +8 -0
- package/templates/vertical_trading/src/agents/risk-checker.ts.tmpl +11 -0
- package/templates/vertical_trading/src/agents/signal-gen.ts.tmpl +8 -0
- package/templates/vertical_trading/src/init.ts.tmpl +20 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
//
|
|
3
|
+
// `harness audit [path] [--level=high|critical|moderate]` CLI subcommand.
|
|
4
|
+
//
|
|
5
|
+
// Wraps `npm audit --omit=dev --audit-level=<level>` against a harness's
|
|
6
|
+
// package-lock.json + reports the per-severity advisory count. Like
|
|
7
|
+
// scripts/audit-deps.mjs but per-harness.
|
|
8
|
+
import { execFile as execFileCb } from 'node:child_process';
|
|
9
|
+
import { promisify } from 'node:util';
|
|
10
|
+
import { existsSync } from 'node:fs';
|
|
11
|
+
import { join, resolve } from 'node:path';
|
|
12
|
+
const execFile = promisify(execFileCb);
|
|
13
|
+
const LEVELS = ['info', 'low', 'moderate', 'high', 'critical'];
|
|
14
|
+
export async function auditCmd(args) {
|
|
15
|
+
const positional = args.filter(a => !a.startsWith('--'));
|
|
16
|
+
const dir = resolve(positional[0] ?? process.cwd());
|
|
17
|
+
const level = args.find(a => a.startsWith('--level='))?.slice('--level='.length) ?? 'high';
|
|
18
|
+
const includeDev = args.includes('--include-dev');
|
|
19
|
+
// iter 102: --bundle emits the full audit JSON (npm audit raw output +
|
|
20
|
+
// harness metadata) so users can paste it into a security review or
|
|
21
|
+
// attach to a GitHub issue. Same pattern as iter-90 diag --bundle.
|
|
22
|
+
const bundle = args.includes('--bundle');
|
|
23
|
+
const lines = [`harness audit — ${dir} (level=${level})`];
|
|
24
|
+
if (!LEVELS.includes(level)) {
|
|
25
|
+
if (bundle) {
|
|
26
|
+
return {
|
|
27
|
+
code: 2,
|
|
28
|
+
lines: [JSON.stringify({ schema: 1, error: 'unknown-level', level, validLevels: LEVELS }, null, 2)],
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
lines.push(` unknown --level=${level} (use one of ${LEVELS.join(', ')})`);
|
|
32
|
+
return { code: 2, lines };
|
|
33
|
+
}
|
|
34
|
+
const pkgPath = join(dir, 'package.json');
|
|
35
|
+
if (!existsSync(pkgPath)) {
|
|
36
|
+
if (bundle) {
|
|
37
|
+
return {
|
|
38
|
+
code: 1,
|
|
39
|
+
lines: [JSON.stringify({ schema: 1, error: 'no-package-json', dir }, null, 2)],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
lines.push(` no package.json at ${dir}`);
|
|
43
|
+
return { code: 1, lines };
|
|
44
|
+
}
|
|
45
|
+
const lockPath = join(dir, 'package-lock.json');
|
|
46
|
+
if (!existsSync(lockPath)) {
|
|
47
|
+
if (bundle) {
|
|
48
|
+
return {
|
|
49
|
+
code: 1,
|
|
50
|
+
lines: [JSON.stringify({ schema: 1, error: 'no-lockfile', dir }, null, 2)],
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
lines.push(` no package-lock.json at ${dir} — run \`npm install --package-lock-only\` first`);
|
|
54
|
+
return { code: 1, lines };
|
|
55
|
+
}
|
|
56
|
+
const npmArgs = ['audit', '--json', `--audit-level=${level}`];
|
|
57
|
+
if (!includeDev)
|
|
58
|
+
npmArgs.push('--omit=dev');
|
|
59
|
+
const npmCmd = process.platform === 'win32' ? 'cmd.exe' : 'npm';
|
|
60
|
+
const finalArgs = process.platform === 'win32'
|
|
61
|
+
? ['/d', '/s', '/c', 'npm', ...npmArgs]
|
|
62
|
+
: npmArgs;
|
|
63
|
+
let stdout = '', stderr = '', exitCode = 0;
|
|
64
|
+
try {
|
|
65
|
+
const r = await execFile(npmCmd, finalArgs, {
|
|
66
|
+
cwd: dir, maxBuffer: 1024 * 1024 * 16, windowsHide: true,
|
|
67
|
+
});
|
|
68
|
+
stdout = r.stdout;
|
|
69
|
+
stderr = r.stderr;
|
|
70
|
+
}
|
|
71
|
+
catch (e) {
|
|
72
|
+
stdout = e.stdout ?? '';
|
|
73
|
+
stderr = e.stderr ?? '';
|
|
74
|
+
exitCode = e.code ?? 1;
|
|
75
|
+
}
|
|
76
|
+
let parsed = null;
|
|
77
|
+
try {
|
|
78
|
+
parsed = JSON.parse(stdout);
|
|
79
|
+
}
|
|
80
|
+
catch { /* */ }
|
|
81
|
+
if (!parsed) {
|
|
82
|
+
if (exitCode === 0) {
|
|
83
|
+
if (bundle) {
|
|
84
|
+
return {
|
|
85
|
+
code: 0,
|
|
86
|
+
lines: [JSON.stringify({
|
|
87
|
+
schema: 1, generatedAt: new Date().toISOString(),
|
|
88
|
+
harnessDir: dir, level, total: 0, counts: {},
|
|
89
|
+
offenders: [], failCount: 0, exitCode: 0,
|
|
90
|
+
}, null, 2)],
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
lines.push(' no advisories at the configured level');
|
|
94
|
+
return { code: 0, lines };
|
|
95
|
+
}
|
|
96
|
+
if (bundle) {
|
|
97
|
+
return {
|
|
98
|
+
code: 1,
|
|
99
|
+
lines: [JSON.stringify({ schema: 1, error: 'non-json-audit-output', exitCode, stderr }, null, 2)],
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
lines.push(` npm audit produced non-JSON output (exit ${exitCode})`);
|
|
103
|
+
return { code: 1, lines };
|
|
104
|
+
}
|
|
105
|
+
const counts = parsed.metadata?.vulnerabilities ?? {};
|
|
106
|
+
const levelIdx = LEVELS.indexOf(level);
|
|
107
|
+
const failCount = LEVELS.slice(levelIdx).reduce((s, l) => s + (counts[l] ?? 0), 0);
|
|
108
|
+
const total = Object.values(counts).reduce((s, n) => s + (n ?? 0), 0);
|
|
109
|
+
const offenders = Object.entries(parsed.vulnerabilities ?? {})
|
|
110
|
+
.filter(([, v]) => LEVELS.indexOf(v.severity) >= levelIdx)
|
|
111
|
+
.map(([name, v]) => ({ name, severity: v.severity, advisory: v.via?.[0]?.title ?? null }));
|
|
112
|
+
const code = failCount === 0 ? 0 : 1;
|
|
113
|
+
if (bundle) {
|
|
114
|
+
return {
|
|
115
|
+
code,
|
|
116
|
+
lines: [JSON.stringify({
|
|
117
|
+
schema: 1,
|
|
118
|
+
generatedAt: new Date().toISOString(),
|
|
119
|
+
harnessDir: dir,
|
|
120
|
+
level,
|
|
121
|
+
total,
|
|
122
|
+
counts,
|
|
123
|
+
offenders,
|
|
124
|
+
failCount,
|
|
125
|
+
exitCode: code,
|
|
126
|
+
}, null, 2)],
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
lines.push(` total advisories: ${total}`);
|
|
130
|
+
lines.push(` per severity: ${LEVELS.map(l => `${l}=${counts[l] ?? 0}`).join(', ')}`);
|
|
131
|
+
if (failCount === 0) {
|
|
132
|
+
lines.push(` PASS: 0 advisories at ${level}+`);
|
|
133
|
+
return { code: 0, lines };
|
|
134
|
+
}
|
|
135
|
+
const offenderText = offenders.slice(0, 5).map(o => `${o.name}(${o.severity})`);
|
|
136
|
+
lines.push(` FAIL: ${failCount} advisories at ${level}+: ${offenderText.join(', ')}`);
|
|
137
|
+
return { code: 1, lines };
|
|
138
|
+
}
|
|
139
|
+
//# sourceMappingURL=audit-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-cmd.js","sourceRoot":"","sources":["../src/audit-cmd.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,0EAA0E;AAC1E,EAAE;AACF,yEAAyE;AACzE,oEAAoE;AACpE,0CAA0C;AAE1C,OAAO,EAAE,QAAQ,IAAI,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,QAAQ,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;AAIvC,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAU,CAAC;AAExE,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC;IAC3F,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClD,uEAAuE;IACvE,oEAAoE;IACpE,mEAAmE;IACnE,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;IAEzC,MAAM,KAAK,GAAa,CAAC,mBAAmB,GAAG,WAAW,KAAK,GAAG,CAAC,CAAC;IAEpE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAY,CAAC,EAAE,CAAC;QACnC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;aACpG,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,qBAAqB,KAAK,gBAAgB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC3E,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;IAC1C,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,iBAAiB,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;aAC/E,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,wBAAwB,GAAG,EAAE,CAAC,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;IAChD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;aAC3E,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,6BAA6B,GAAG,kDAAkD,CAAC,CAAC;QAC/F,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,iBAAiB,KAAK,EAAE,CAAC,CAAC;IAC9D,IAAI,CAAC,UAAU;QAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO;QAC5C,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QACvC,CAAC,CAAC,OAAO,CAAC;IAEZ,IAAI,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,GAAG,CAAC,CAAC;IAC3C,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE;YAC1C,GAAG,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,GAAG,IAAI,GAAG,EAAE,EAAE,WAAW,EAAE,IAAI;SACzD,CAAC,CAAC;QACH,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;QAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAAC,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;QAAC,QAAQ,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,MAAM,GAAQ,IAAI,CAAC;IACvB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC;IACpD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,IAAI,MAAM,EAAE,CAAC;gBACX,OAAO;oBACL,IAAI,EAAE,CAAC;oBACP,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;4BACrB,MAAM,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BAChD,UAAU,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE;4BAC5C,SAAS,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC;yBACzC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;iBACb,CAAC;YACJ,CAAC;YACD,KAAK,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;YACtD,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;QACD,IAAI,MAAM,EAAE,CAAC;YACX,OAAO;gBACL,IAAI,EAAE,CAAC;gBACP,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,uBAAuB,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;aAClG,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,8CAA8C,QAAQ,GAAG,CAAC,CAAC;QACtE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,EAAE,eAAe,IAAI,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,KAAY,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAS,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAM,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;SAChE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAE,CAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;SAClE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAG,CAAS,CAAC,QAAQ,EAAE,QAAQ,EAAG,CAAS,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC;IAC/G,MAAM,IAAI,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAErC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,IAAI;YACJ,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;oBACrB,MAAM,EAAE,CAAC;oBACT,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACrC,UAAU,EAAE,GAAG;oBACf,KAAK;oBACL,KAAK;oBACL,MAAM;oBACN,SAAS;oBACT,SAAS;oBACT,QAAQ,EAAE,IAAI;iBACf,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;SACb,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;IAC3C,KAAK,CAAC,IAAI,CAAC,mBAAmB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtF,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,2BAA2B,KAAK,GAAG,CAAC,CAAC;QAChD,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC;IAChF,KAAK,CAAC,IAAI,CAAC,WAAW,SAAS,kBAAkB,KAAK,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvF,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;AAC5B,CAAC"}
|
package/dist/bin.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":""}
|
package/dist/bin.js
ADDED
package/dist/bin.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,+BAA+B;AAC/B,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACjD,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
export type SubcommandResult = {
|
|
2
|
+
code: number;
|
|
3
|
+
lines: string[];
|
|
4
|
+
};
|
|
5
|
+
interface Manifest {
|
|
6
|
+
schema?: number;
|
|
7
|
+
generator?: string;
|
|
8
|
+
template?: string;
|
|
9
|
+
template_version?: string;
|
|
10
|
+
hosts?: string[];
|
|
11
|
+
files?: Record<string, string>;
|
|
12
|
+
meta?: {
|
|
13
|
+
surface?: string;
|
|
14
|
+
kernel_version?: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
interface CompareReport {
|
|
18
|
+
schema: 1;
|
|
19
|
+
generatedAt: string;
|
|
20
|
+
a: {
|
|
21
|
+
dir: string;
|
|
22
|
+
manifest: Manifest | undefined;
|
|
23
|
+
};
|
|
24
|
+
b: {
|
|
25
|
+
dir: string;
|
|
26
|
+
manifest: Manifest | undefined;
|
|
27
|
+
};
|
|
28
|
+
meta: {
|
|
29
|
+
sameSurface: boolean;
|
|
30
|
+
sameKernel: boolean;
|
|
31
|
+
sameGenerator: boolean;
|
|
32
|
+
surfaceA: string | undefined;
|
|
33
|
+
surfaceB: string | undefined;
|
|
34
|
+
kernelA: string | undefined;
|
|
35
|
+
kernelB: string | undefined;
|
|
36
|
+
generatorA: string | undefined;
|
|
37
|
+
generatorB: string | undefined;
|
|
38
|
+
};
|
|
39
|
+
hosts: {
|
|
40
|
+
sameHosts: boolean;
|
|
41
|
+
addedInB: string[];
|
|
42
|
+
removedInB: string[];
|
|
43
|
+
};
|
|
44
|
+
files: {
|
|
45
|
+
sameFiles: boolean;
|
|
46
|
+
addedInB: string[];
|
|
47
|
+
removedInB: string[];
|
|
48
|
+
changed: string[];
|
|
49
|
+
};
|
|
50
|
+
identical: boolean;
|
|
51
|
+
exitCode: number;
|
|
52
|
+
}
|
|
53
|
+
export declare function buildCompareReport(dirA: string, dirB: string): Promise<CompareReport>;
|
|
54
|
+
export declare function compareCmd(args: string[]): Promise<SubcommandResult>;
|
|
55
|
+
export {};
|
|
56
|
+
//# sourceMappingURL=compare-cmd.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-cmd.d.ts","sourceRoot":"","sources":["../src/compare-cmd.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEjE,UAAU,QAAQ;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,UAAU,aAAa;IACrB,MAAM,EAAE,CAAC,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,CAAC;IACnD,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,GAAG,SAAS,CAAA;KAAE,CAAC;IACnD,IAAI,EAAE;QACJ,WAAW,EAAE,OAAO,CAAC;QACrB,UAAU,EAAE,OAAO,CAAC;QACpB,aAAa,EAAE,OAAO,CAAC;QACvB,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;QAC7B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;QAC5B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;QAC/B,UAAU,EAAE,MAAM,GAAG,SAAS,CAAC;KAChC,CAAC;IACF,KAAK,EAAE;QACL,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,EAAE,CAAC;KACtB,CAAC;IACF,KAAK,EAAE;QACL,SAAS,EAAE,OAAO,CAAC;QACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;QACnB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqBD,wBAAsB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAuD3F;AA0CD,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAsC1E"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
//
|
|
3
|
+
// `harness compare <a> <b>` — diff two harness manifests + per-file
|
|
4
|
+
// fingerprints + meta blocks.
|
|
5
|
+
//
|
|
6
|
+
// Use case: "is my fork drifting from upstream?" or "does my prod copy
|
|
7
|
+
// match my staging copy?". The manifest already records per-file
|
|
8
|
+
// sha256 (iter 56 + earlier), so a comparison reduces to:
|
|
9
|
+
//
|
|
10
|
+
// 1. meta block diff (surface? kernel_version? generator?)
|
|
11
|
+
// 2. host list diff (does the fork target the same hosts?)
|
|
12
|
+
// 3. per-file fingerprint diff (added/removed/changed)
|
|
13
|
+
//
|
|
14
|
+
// Bundle-shaped output (--bundle) per ADR-031.
|
|
15
|
+
import { readFile } from 'node:fs/promises';
|
|
16
|
+
import { existsSync } from 'node:fs';
|
|
17
|
+
import { join, resolve } from 'node:path';
|
|
18
|
+
async function readManifest(dir) {
|
|
19
|
+
const path = join(dir, '.harness', 'manifest.json');
|
|
20
|
+
if (!existsSync(path))
|
|
21
|
+
return undefined;
|
|
22
|
+
try {
|
|
23
|
+
return JSON.parse(await readFile(path, 'utf-8'));
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function diffSets(a, b) {
|
|
30
|
+
const aSet = new Set(a);
|
|
31
|
+
const bSet = new Set(b);
|
|
32
|
+
return {
|
|
33
|
+
addedInB: b.filter(x => !aSet.has(x)).sort(),
|
|
34
|
+
removedInB: a.filter(x => !bSet.has(x)).sort(),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export async function buildCompareReport(dirA, dirB) {
|
|
38
|
+
const mA = await readManifest(dirA);
|
|
39
|
+
const mB = await readManifest(dirB);
|
|
40
|
+
const surfaceA = mA?.meta?.surface;
|
|
41
|
+
const surfaceB = mB?.meta?.surface;
|
|
42
|
+
const kernelA = mA?.meta?.kernel_version;
|
|
43
|
+
const kernelB = mB?.meta?.kernel_version;
|
|
44
|
+
const generatorA = mA?.generator;
|
|
45
|
+
const generatorB = mB?.generator;
|
|
46
|
+
const hostsDiff = diffSets(mA?.hosts ?? [], mB?.hosts ?? []);
|
|
47
|
+
const filesA = mA?.files ?? {};
|
|
48
|
+
const filesB = mB?.files ?? {};
|
|
49
|
+
const filesDiff = diffSets(Object.keys(filesA), Object.keys(filesB));
|
|
50
|
+
const changed = Object.keys(filesA)
|
|
51
|
+
.filter(p => p in filesB && filesA[p] !== filesB[p])
|
|
52
|
+
.sort();
|
|
53
|
+
const identical = surfaceA === surfaceB &&
|
|
54
|
+
kernelA === kernelB &&
|
|
55
|
+
generatorA === generatorB &&
|
|
56
|
+
hostsDiff.addedInB.length === 0 &&
|
|
57
|
+
hostsDiff.removedInB.length === 0 &&
|
|
58
|
+
filesDiff.addedInB.length === 0 &&
|
|
59
|
+
filesDiff.removedInB.length === 0 &&
|
|
60
|
+
changed.length === 0;
|
|
61
|
+
return {
|
|
62
|
+
schema: 1,
|
|
63
|
+
generatedAt: new Date().toISOString(),
|
|
64
|
+
a: { dir: dirA, manifest: mA },
|
|
65
|
+
b: { dir: dirB, manifest: mB },
|
|
66
|
+
meta: {
|
|
67
|
+
sameSurface: surfaceA === surfaceB,
|
|
68
|
+
sameKernel: kernelA === kernelB,
|
|
69
|
+
sameGenerator: generatorA === generatorB,
|
|
70
|
+
surfaceA, surfaceB, kernelA, kernelB, generatorA, generatorB,
|
|
71
|
+
},
|
|
72
|
+
hosts: {
|
|
73
|
+
sameHosts: hostsDiff.addedInB.length === 0 && hostsDiff.removedInB.length === 0,
|
|
74
|
+
addedInB: hostsDiff.addedInB,
|
|
75
|
+
removedInB: hostsDiff.removedInB,
|
|
76
|
+
},
|
|
77
|
+
files: {
|
|
78
|
+
sameFiles: filesDiff.addedInB.length === 0 && filesDiff.removedInB.length === 0 && changed.length === 0,
|
|
79
|
+
addedInB: filesDiff.addedInB,
|
|
80
|
+
removedInB: filesDiff.removedInB,
|
|
81
|
+
changed,
|
|
82
|
+
},
|
|
83
|
+
identical,
|
|
84
|
+
exitCode: identical ? 0 : 1,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function formatReport(r) {
|
|
88
|
+
const lines = [];
|
|
89
|
+
lines.push(`harness compare`);
|
|
90
|
+
lines.push(` A: ${r.a.dir}`);
|
|
91
|
+
lines.push(` B: ${r.b.dir}`);
|
|
92
|
+
lines.push('');
|
|
93
|
+
if (!r.a.manifest || !r.b.manifest) {
|
|
94
|
+
if (!r.a.manifest)
|
|
95
|
+
lines.push(` FAIL no .harness/manifest.json at A (${r.a.dir})`);
|
|
96
|
+
if (!r.b.manifest)
|
|
97
|
+
lines.push(` FAIL no .harness/manifest.json at B (${r.b.dir})`);
|
|
98
|
+
return lines;
|
|
99
|
+
}
|
|
100
|
+
lines.push(' meta:');
|
|
101
|
+
lines.push(` surface: A=${r.meta.surfaceA ?? '(unset)'} B=${r.meta.surfaceB ?? '(unset)'} ${r.meta.sameSurface ? 'PASS' : 'FAIL'}`);
|
|
102
|
+
lines.push(` kernel_version: A=${r.meta.kernelA ?? '(unset)'} B=${r.meta.kernelB ?? '(unset)'} ${r.meta.sameKernel ? 'PASS' : 'FAIL'}`);
|
|
103
|
+
lines.push(` generator: A=${r.meta.generatorA ?? '(unset)'} B=${r.meta.generatorB ?? '(unset)'} ${r.meta.sameGenerator ? 'PASS' : 'FAIL'}`);
|
|
104
|
+
lines.push(' hosts:');
|
|
105
|
+
if (r.hosts.sameHosts) {
|
|
106
|
+
lines.push(' PASS host lists match');
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
if (r.hosts.addedInB.length)
|
|
110
|
+
lines.push(` + added in B: ${r.hosts.addedInB.join(', ')}`);
|
|
111
|
+
if (r.hosts.removedInB.length)
|
|
112
|
+
lines.push(` - removed in B: ${r.hosts.removedInB.join(', ')}`);
|
|
113
|
+
}
|
|
114
|
+
lines.push(' files:');
|
|
115
|
+
if (r.files.sameFiles) {
|
|
116
|
+
lines.push(` PASS ${Object.keys(r.a.manifest.files ?? {}).length} files match`);
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
if (r.files.addedInB.length)
|
|
120
|
+
lines.push(` + added in B: ${r.files.addedInB.length} file(s)`);
|
|
121
|
+
if (r.files.removedInB.length)
|
|
122
|
+
lines.push(` - removed in B: ${r.files.removedInB.length} file(s)`);
|
|
123
|
+
if (r.files.changed.length)
|
|
124
|
+
lines.push(` ~ changed: ${r.files.changed.length} file(s)`);
|
|
125
|
+
// Show the first 5 of each so the user can spot the obvious differences
|
|
126
|
+
const sample = (arr) => arr.slice(0, 5).map(p => ` ${p}`);
|
|
127
|
+
if (r.files.addedInB.length)
|
|
128
|
+
sample(r.files.addedInB).forEach(l => lines.push(l));
|
|
129
|
+
if (r.files.removedInB.length)
|
|
130
|
+
sample(r.files.removedInB).forEach(l => lines.push(l));
|
|
131
|
+
if (r.files.changed.length)
|
|
132
|
+
sample(r.files.changed).forEach(l => lines.push(l));
|
|
133
|
+
}
|
|
134
|
+
lines.push('');
|
|
135
|
+
lines.push(` Result: ${r.identical ? 'IDENTICAL' : 'DRIFT'}`);
|
|
136
|
+
return lines;
|
|
137
|
+
}
|
|
138
|
+
export async function compareCmd(args) {
|
|
139
|
+
const bundle = args.includes('--bundle');
|
|
140
|
+
const positional = args.filter(a => !a.startsWith('--'));
|
|
141
|
+
if (positional.length < 2) {
|
|
142
|
+
const lines = [
|
|
143
|
+
'Usage: harness compare <a> <b> [--bundle]',
|
|
144
|
+
'',
|
|
145
|
+
'Compare two scaffolded harnesses by manifest + per-file fingerprint.',
|
|
146
|
+
'Exits 0 if identical, 1 if drift, 2 if either path lacks a manifest.',
|
|
147
|
+
];
|
|
148
|
+
return { code: 2, lines };
|
|
149
|
+
}
|
|
150
|
+
const dirA = resolve(positional[0]);
|
|
151
|
+
const dirB = resolve(positional[1]);
|
|
152
|
+
const report = await buildCompareReport(dirA, dirB);
|
|
153
|
+
// ADR-031: missing manifest is an error path that's still bundle-formed.
|
|
154
|
+
if (!report.a.manifest || !report.b.manifest) {
|
|
155
|
+
if (bundle) {
|
|
156
|
+
return {
|
|
157
|
+
code: 2,
|
|
158
|
+
lines: [JSON.stringify({
|
|
159
|
+
schema: 1, generatedAt: report.generatedAt,
|
|
160
|
+
error: !report.a.manifest && !report.b.manifest ? 'no-manifest-in-either'
|
|
161
|
+
: !report.a.manifest ? 'no-manifest-in-a' : 'no-manifest-in-b',
|
|
162
|
+
dirA, dirB, exitCode: 2,
|
|
163
|
+
}, null, 2)],
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
return { code: 2, lines: formatReport(report) };
|
|
167
|
+
}
|
|
168
|
+
if (bundle) {
|
|
169
|
+
return { code: report.exitCode, lines: [JSON.stringify(report, null, 2)] };
|
|
170
|
+
}
|
|
171
|
+
return { code: report.exitCode, lines: formatReport(report) };
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=compare-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-cmd.js","sourceRoot":"","sources":["../src/compare-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completions-cmd.d.ts","sourceRoot":"","sources":["../src/completions-cmd.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAyIjE,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,gBAAgB,CA8B/D"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
//
|
|
3
|
+
// `harness completions <bash|zsh|fish>` — emit shell completion
|
|
4
|
+
// scripts. Mirrors the standard CLI convention (gh, npm, etc.).
|
|
5
|
+
// Users source the output:
|
|
6
|
+
//
|
|
7
|
+
// harness completions bash >> ~/.bash_completion
|
|
8
|
+
// harness completions zsh > ~/.zsh/_harness
|
|
9
|
+
// harness completions fish > ~/.config/fish/completions/harness.fish
|
|
10
|
+
const SUBCOMMANDS = [
|
|
11
|
+
'sign', 'verify', 'doctor',
|
|
12
|
+
'federate', 'secrets', 'validate',
|
|
13
|
+
'mcp', 'publish', 'upgrade',
|
|
14
|
+
'completions', 'sbom', 'audit',
|
|
15
|
+
// iter 55 PR-#1 additions
|
|
16
|
+
'mcp-scan', 'analyze-repo',
|
|
17
|
+
// iter 66 — kernel-version skew diagnostic
|
|
18
|
+
'diag',
|
|
19
|
+
// iter 97 — export MCP + claims as single JSON
|
|
20
|
+
'export-config',
|
|
21
|
+
// iter 105 — diff two harness manifests + per-file fingerprints
|
|
22
|
+
'compare',
|
|
23
|
+
// iter 110 — 7-section readiness scorecard for a local repo
|
|
24
|
+
'genome',
|
|
25
|
+
// iter 111 — 5-dimension harness scorecard with badges
|
|
26
|
+
'score',
|
|
27
|
+
// iter 112 — MCP threat-model artifact for enterprise review
|
|
28
|
+
'threat-model',
|
|
29
|
+
// iter 121 — OIA v0.1 cross-cutting manifest (ADR-034)
|
|
30
|
+
'oia-manifest',
|
|
31
|
+
'help',
|
|
32
|
+
];
|
|
33
|
+
const SECRETS_SUBSUBS = ['check', 'fetch', 'validate-token', 'help'];
|
|
34
|
+
const MCP_SUBSUBS = ['ls', 'invoke', 'help'];
|
|
35
|
+
const FEDERATE_SUBSUBS = ['init', 'add', 'remove', 'list', 'status', 'help'];
|
|
36
|
+
function bashCompletion() {
|
|
37
|
+
return `# bash completion for harness
|
|
38
|
+
_harness_completion() {
|
|
39
|
+
local cur prev cmd
|
|
40
|
+
COMPREPLY=()
|
|
41
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
42
|
+
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
43
|
+
cmd="\${COMP_WORDS[1]:-}"
|
|
44
|
+
|
|
45
|
+
# Top-level subcommands
|
|
46
|
+
if [ $COMP_CWORD -eq 1 ]; then
|
|
47
|
+
COMPREPLY=( $(compgen -W "${SUBCOMMANDS.join(' ')}" -- "$cur") )
|
|
48
|
+
return 0
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
case "$cmd" in
|
|
52
|
+
secrets)
|
|
53
|
+
[ $COMP_CWORD -eq 2 ] && COMPREPLY=( $(compgen -W "${SECRETS_SUBSUBS.join(' ')}" -- "$cur") )
|
|
54
|
+
;;
|
|
55
|
+
mcp)
|
|
56
|
+
[ $COMP_CWORD -eq 2 ] && COMPREPLY=( $(compgen -W "${MCP_SUBSUBS.join(' ')}" -- "$cur") )
|
|
57
|
+
;;
|
|
58
|
+
federate)
|
|
59
|
+
[ $COMP_CWORD -eq 2 ] && COMPREPLY=( $(compgen -W "${FEDERATE_SUBSUBS.join(' ')}" -- "$cur") )
|
|
60
|
+
;;
|
|
61
|
+
completions)
|
|
62
|
+
[ $COMP_CWORD -eq 2 ] && COMPREPLY=( $(compgen -W "bash zsh fish" -- "$cur") )
|
|
63
|
+
;;
|
|
64
|
+
esac
|
|
65
|
+
return 0
|
|
66
|
+
}
|
|
67
|
+
complete -F _harness_completion harness
|
|
68
|
+
`;
|
|
69
|
+
}
|
|
70
|
+
function zshCompletion() {
|
|
71
|
+
return `#compdef harness
|
|
72
|
+
# zsh completion for harness
|
|
73
|
+
|
|
74
|
+
_harness() {
|
|
75
|
+
local -a subcommands
|
|
76
|
+
subcommands=(
|
|
77
|
+
'sign:produce or update the witness manifest'
|
|
78
|
+
'verify:verify the witness manifest signature'
|
|
79
|
+
'doctor:smoke-check a scaffolded harness'
|
|
80
|
+
'federate:manage federation peers (init/add/remove/list/status)'
|
|
81
|
+
'secrets:GCP Secret Manager: check / fetch / validate-token'
|
|
82
|
+
'validate:umbrella: doctor + verify + path-guard + mcp + secrets'
|
|
83
|
+
'mcp:list MCP servers / dispatch a tool through the claim check'
|
|
84
|
+
'publish:pin the harness manifest to IPFS via Pinata (dry-run default)'
|
|
85
|
+
'upgrade:re-render template + drift plan (--apply to apply)'
|
|
86
|
+
'completions:emit shell completion scripts (bash/zsh/fish)'
|
|
87
|
+
'sbom:emit SPDX-2.3 SBOM for the harness'
|
|
88
|
+
'audit:npm audit per-harness with structured output'
|
|
89
|
+
'mcp-scan:security-scan the harness MCP surface (policy + perms + deps)'
|
|
90
|
+
'analyze-repo:recommend a harness from a local repo'
|
|
91
|
+
'diag:kernel-version skew check (ADR-027 diagnostic)'
|
|
92
|
+
'export-config:emit MCP servers + claims + permissions as a single JSON'
|
|
93
|
+
'compare:diff two harnesses (manifest + per-file fingerprints, ADR-031 --bundle)'
|
|
94
|
+
'genome:7-section readiness scorecard for a local repo (--json/--bundle, iter 110)'
|
|
95
|
+
'score:5-dimension harness scorecard 0–100 with badges (--json/--bundle, iter 111)'
|
|
96
|
+
'threat-model:MCP threat-model artifact for PR/compliance review (--json/--bundle, iter 112)'
|
|
97
|
+
'oia-manifest:emit .harness/oia-manifest.json — OIA v0.1 layer alignment (ADR-034, iter 121)'
|
|
98
|
+
'help:show help'
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
if (( CURRENT == 2 )); then
|
|
102
|
+
_describe -t commands 'harness command' subcommands
|
|
103
|
+
return
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
case "$words[2]" in
|
|
107
|
+
secrets)
|
|
108
|
+
(( CURRENT == 3 )) && compadd ${SECRETS_SUBSUBS.join(' ')}
|
|
109
|
+
;;
|
|
110
|
+
mcp)
|
|
111
|
+
(( CURRENT == 3 )) && compadd ${MCP_SUBSUBS.join(' ')}
|
|
112
|
+
;;
|
|
113
|
+
federate)
|
|
114
|
+
(( CURRENT == 3 )) && compadd ${FEDERATE_SUBSUBS.join(' ')}
|
|
115
|
+
;;
|
|
116
|
+
completions)
|
|
117
|
+
(( CURRENT == 3 )) && compadd bash zsh fish
|
|
118
|
+
;;
|
|
119
|
+
esac
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
_harness "$@"
|
|
123
|
+
`;
|
|
124
|
+
}
|
|
125
|
+
function fishCompletion() {
|
|
126
|
+
const subs = SUBCOMMANDS.map(s => `complete -c harness -f -n '__fish_use_subcommand' -a ${s}`).join('\n');
|
|
127
|
+
return `# fish completion for harness
|
|
128
|
+
${subs}
|
|
129
|
+
|
|
130
|
+
# secrets sub-subs
|
|
131
|
+
complete -c harness -f -n '__fish_seen_subcommand_from secrets' -a '${SECRETS_SUBSUBS.join(' ')}'
|
|
132
|
+
# mcp sub-subs
|
|
133
|
+
complete -c harness -f -n '__fish_seen_subcommand_from mcp' -a '${MCP_SUBSUBS.join(' ')}'
|
|
134
|
+
# federate sub-subs
|
|
135
|
+
complete -c harness -f -n '__fish_seen_subcommand_from federate' -a '${FEDERATE_SUBSUBS.join(' ')}'
|
|
136
|
+
# completions sub-subs
|
|
137
|
+
complete -c harness -f -n '__fish_seen_subcommand_from completions' -a 'bash zsh fish'
|
|
138
|
+
`;
|
|
139
|
+
}
|
|
140
|
+
export function completionsCmd(args) {
|
|
141
|
+
const shell = args[0];
|
|
142
|
+
switch (shell) {
|
|
143
|
+
case 'bash':
|
|
144
|
+
return { code: 0, lines: [bashCompletion()] };
|
|
145
|
+
case 'zsh':
|
|
146
|
+
return { code: 0, lines: [zshCompletion()] };
|
|
147
|
+
case 'fish':
|
|
148
|
+
return { code: 0, lines: [fishCompletion()] };
|
|
149
|
+
case undefined:
|
|
150
|
+
case 'help':
|
|
151
|
+
return {
|
|
152
|
+
code: 0,
|
|
153
|
+
lines: [
|
|
154
|
+
'Usage: harness completions <bash|zsh|fish>',
|
|
155
|
+
'',
|
|
156
|
+
'Emit a shell completion script for the given shell.',
|
|
157
|
+
'',
|
|
158
|
+
'Examples:',
|
|
159
|
+
' harness completions bash >> ~/.bash_completion',
|
|
160
|
+
' harness completions zsh > ~/.zsh/_harness',
|
|
161
|
+
' harness completions fish > ~/.config/fish/completions/harness.fish',
|
|
162
|
+
],
|
|
163
|
+
};
|
|
164
|
+
default:
|
|
165
|
+
return {
|
|
166
|
+
code: 2,
|
|
167
|
+
lines: [`Unknown shell: ${shell} (expected bash, zsh, or fish)`],
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=completions-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completions-cmd.js","sourceRoot":"","sources":["../src/completions-cmd.ts"],"names":[],"mappings":"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"}
|