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 @@
|
|
|
1
|
+
{"version":3,"file":"secrets.js","sourceRoot":"","sources":["../src/secrets.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type SubcommandResult = {
|
|
2
|
+
code: number;
|
|
3
|
+
lines: string[];
|
|
4
|
+
};
|
|
5
|
+
/**
|
|
6
|
+
* `harness verify [path]` — verify the witness manifest of a scaffolded
|
|
7
|
+
* harness. Defaults to cwd.
|
|
8
|
+
*/
|
|
9
|
+
export declare function verify(args: string[]): Promise<SubcommandResult>;
|
|
10
|
+
/**
|
|
11
|
+
* `harness doctor [path]` — local smoke check on a scaffolded harness.
|
|
12
|
+
* Checks for the markers that indicate a well-formed harness.
|
|
13
|
+
*/
|
|
14
|
+
export declare function doctor(args: string[]): Promise<SubcommandResult>;
|
|
15
|
+
/**
|
|
16
|
+
* `harness sign [path]` — produce or update the witness manifest for a
|
|
17
|
+
* scaffolded harness.
|
|
18
|
+
*
|
|
19
|
+
* The real signing happens in the @ruflo/kernel's witness.sign_manifest.
|
|
20
|
+
* This subcommand: reads .harness/manifest.json, computes per-entry
|
|
21
|
+
* fingerprints, hands the entry list to the kernel for signing, writes
|
|
22
|
+
* witness.json next to it.
|
|
23
|
+
*
|
|
24
|
+
* Key material: passed via the WITNESS_SIGNING_KEY env var (hex-encoded
|
|
25
|
+
* 32 bytes). In CI, fetched from GCP Secret Manager via WIF.
|
|
26
|
+
*/
|
|
27
|
+
export declare function sign(args: string[]): Promise<SubcommandResult>;
|
|
28
|
+
/**
|
|
29
|
+
* Dispatch a subcommand. Returns the result for the bin to print + exit on.
|
|
30
|
+
*/
|
|
31
|
+
export declare function dispatch(subcommand: string, args: string[]): Promise<SubcommandResult>;
|
|
32
|
+
//# sourceMappingURL=subcommands.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subcommands.d.ts","sourceRoot":"","sources":["../src/subcommands.ts"],"names":[],"mappings":"AAsCA,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAMjE;;;GAGG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6BtE;AAED;;;GAGG;AACH,wBAAsB,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8FtE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA4EpE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6F5F"}
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
//
|
|
3
|
+
// `harness` CLI subcommands: sign, verify, doctor.
|
|
4
|
+
//
|
|
5
|
+
// The create-agent-harness package ships TWO binaries:
|
|
6
|
+
// - create-agent-harness <name> (the scaffolder)
|
|
7
|
+
// - harness <subcommand> (the per-harness tooling)
|
|
8
|
+
//
|
|
9
|
+
// This file implements the subcommands the `harness` binary dispatches to.
|
|
10
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
11
|
+
import { existsSync } from 'node:fs';
|
|
12
|
+
import { createHash } from 'node:crypto';
|
|
13
|
+
import { join, resolve } from 'node:path';
|
|
14
|
+
import { findWitness, readAndVerify } from './witness-client.js';
|
|
15
|
+
import { federateDispatch } from './federate.js';
|
|
16
|
+
import { secretsDispatch } from './secrets.js';
|
|
17
|
+
import { validate } from './validate.js';
|
|
18
|
+
import { mcpDispatch } from './mcp-cmd.js';
|
|
19
|
+
import { publishCmd } from './publish-cmd.js';
|
|
20
|
+
import { upgradeCmd } from './upgrade-cmd.js';
|
|
21
|
+
import { completionsCmd } from './completions-cmd.js';
|
|
22
|
+
import { sbomCmd } from './sbom-cmd.js';
|
|
23
|
+
import { auditCmd } from './audit-cmd.js';
|
|
24
|
+
import { mcpScanCmd } from './mcp-scan.js';
|
|
25
|
+
import { diagCmd } from './diag.js';
|
|
26
|
+
import { exportConfigCmd } from './export-config.js';
|
|
27
|
+
import { compareCmd } from './compare-cmd.js';
|
|
28
|
+
import { genomeCmd } from './genome.js';
|
|
29
|
+
import { scoreCmd } from './score.js';
|
|
30
|
+
import { threatModelCmd } from './threat-model.js';
|
|
31
|
+
import { oiaManifestCmd } from './oia-manifest.js';
|
|
32
|
+
import { analyzeRepoCmd } from './analyze-repo.js';
|
|
33
|
+
// Pull the version from the workspace package.json (Node's `with: { type: 'json' }`
|
|
34
|
+
// import attributes — works in Node 20.10+).
|
|
35
|
+
const PACKAGE_VERSION = '0.1.0';
|
|
36
|
+
function pushLines(out, ...lines) {
|
|
37
|
+
for (const l of lines)
|
|
38
|
+
out.push(l);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* `harness verify [path]` — verify the witness manifest of a scaffolded
|
|
42
|
+
* harness. Defaults to cwd.
|
|
43
|
+
*/
|
|
44
|
+
export async function verify(args) {
|
|
45
|
+
const dir = resolve(args[0] ?? process.cwd());
|
|
46
|
+
const lines = [];
|
|
47
|
+
const wp = findWitness(dir);
|
|
48
|
+
if (!wp) {
|
|
49
|
+
pushLines(lines, `No witness.json found under ${dir}.`, `Looked at: ${dir}/witness.json and ${dir}/.harness/witness.json`, `Run 'harness sign' first to produce one.`);
|
|
50
|
+
return { code: 1, lines };
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const { manifest, result } = await readAndVerify(wp);
|
|
54
|
+
pushLines(lines, `Witness at ${wp}`);
|
|
55
|
+
pushLines(lines, ` harness: ${manifest.harness}`);
|
|
56
|
+
pushLines(lines, ` version: ${manifest.version}`);
|
|
57
|
+
pushLines(lines, ` entries: ${manifest.entries.length}`);
|
|
58
|
+
pushLines(lines, ` public_key: ${manifest.public_key.slice(0, 16)}...`);
|
|
59
|
+
if (result.valid) {
|
|
60
|
+
pushLines(lines, `Result: VALID${result.reason ? ` (${result.reason})` : ''}`);
|
|
61
|
+
return { code: 0, lines };
|
|
62
|
+
}
|
|
63
|
+
pushLines(lines, `Result: INVALID — ${result.reason ?? 'unknown'}`);
|
|
64
|
+
return { code: 1, lines };
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
pushLines(lines, `Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
68
|
+
return { code: 1, lines };
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* `harness doctor [path]` — local smoke check on a scaffolded harness.
|
|
73
|
+
* Checks for the markers that indicate a well-formed harness.
|
|
74
|
+
*/
|
|
75
|
+
export async function doctor(args) {
|
|
76
|
+
const dir = resolve(args[0] ?? process.cwd());
|
|
77
|
+
const lines = [];
|
|
78
|
+
let problems = 0;
|
|
79
|
+
function check(cond, name) {
|
|
80
|
+
if (cond) {
|
|
81
|
+
lines.push(` PASS ${name}`);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
lines.push(` FAIL ${name}`);
|
|
85
|
+
problems++;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
pushLines(lines, `harness doctor — checking ${dir}`);
|
|
89
|
+
const pkgPath = join(dir, 'package.json');
|
|
90
|
+
check(existsSync(pkgPath), 'package.json exists');
|
|
91
|
+
if (existsSync(pkgPath)) {
|
|
92
|
+
try {
|
|
93
|
+
const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));
|
|
94
|
+
check(typeof pkg.name === 'string' && pkg.name.length > 0, 'package.json has a name');
|
|
95
|
+
check(!!(pkg.dependencies && pkg.dependencies['@ruflo/kernel']), 'declares @ruflo/kernel as dependency');
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
lines.push(' FAIL package.json is not valid JSON');
|
|
99
|
+
problems++;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
check(existsSync(join(dir, '.harness', 'manifest.json')), '.harness/manifest.json exists');
|
|
103
|
+
check(existsSync(join(dir, '.harness', 'manifest.sha256')), '.harness/manifest.sha256 exists');
|
|
104
|
+
// ADR-022 diagnostic: warn (don't fail) when the manifest lacks
|
|
105
|
+
// meta.surface or meta.kernel_version. Pre-iter-56 manifests won't
|
|
106
|
+
// have these; surface=cli/web-ui helps the umbrella decide which
|
|
107
|
+
// parity test to run; kernel_version flags version-skew between
|
|
108
|
+
// CLI + Pages deployments.
|
|
109
|
+
if (existsSync(join(dir, '.harness', 'manifest.json'))) {
|
|
110
|
+
try {
|
|
111
|
+
const m = JSON.parse(await readFile(join(dir, '.harness', 'manifest.json'), 'utf-8'));
|
|
112
|
+
if (m.meta?.surface) {
|
|
113
|
+
lines.push(` PASS manifest.meta.surface = ${m.meta.surface}`);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
lines.push(' WARN manifest.meta.surface missing (pre-iter-56 manifest; ADR-022 diagnostic absent)');
|
|
117
|
+
}
|
|
118
|
+
if (m.meta?.kernel_version) {
|
|
119
|
+
lines.push(` PASS manifest.meta.kernel_version = ${m.meta.kernel_version}`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
/* already reported above */
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (existsSync(join(dir, '.harness', 'manifest.json')) && existsSync(join(dir, '.harness', 'manifest.sha256'))) {
|
|
127
|
+
try {
|
|
128
|
+
const m = await readFile(join(dir, '.harness', 'manifest.json'), 'utf-8');
|
|
129
|
+
const expected = (await readFile(join(dir, '.harness', 'manifest.sha256'), 'utf-8')).trim();
|
|
130
|
+
const actual = createHash('sha256').update(m, 'utf-8').digest('hex');
|
|
131
|
+
check(actual === expected, '.harness/manifest.json hash matches .harness/manifest.sha256');
|
|
132
|
+
}
|
|
133
|
+
catch {
|
|
134
|
+
lines.push(' FAIL could not compare manifest hash');
|
|
135
|
+
problems++;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Common host-specific artifacts (any one is enough — multi-host harness
|
|
139
|
+
// ships multiple).
|
|
140
|
+
const hasClaudeCode = existsSync(join(dir, '.claude', 'settings.json'));
|
|
141
|
+
const hasCodex = existsSync(join(dir, '.codex', 'config.toml'));
|
|
142
|
+
const hasPi = existsSync(join(dir, 'AGENTS.md'));
|
|
143
|
+
const hasHermes = existsSync(join(dir, 'cli-config.yaml'));
|
|
144
|
+
check(hasClaudeCode || hasCodex || hasPi || hasHermes, 'at least one host artifact present (.claude/, .codex/, AGENTS.md, or cli-config.yaml)');
|
|
145
|
+
if (problems === 0) {
|
|
146
|
+
pushLines(lines, '', `Result: HEALTHY (${dir})`);
|
|
147
|
+
return { code: 0, lines };
|
|
148
|
+
}
|
|
149
|
+
pushLines(lines, '', `Result: ${problems} issue${problems === 1 ? '' : 's'} (${dir})`);
|
|
150
|
+
// iter 93: close the discovery loop. When doctor finds problems the
|
|
151
|
+
// most common next user action is "what do I report?" — point them
|
|
152
|
+
// at iter-90's bundle so they can paste a single JSON into a
|
|
153
|
+
// GitHub issue. The iter-90 bundle is sanitised by default (no
|
|
154
|
+
// credentials leak) so this suggestion is safe.
|
|
155
|
+
pushLines(lines, '', `Next: capture the full diagnostic state for a support ticket:`, ` harness diag ${dir} --bundle > bundle.json`, `(then attach bundle.json to a GitHub issue at`, ` https://github.com/ruvnet/agent-harness-generator/issues — the`, ` bundle is sanitised; secret_/token_/key_/password_ fields are redacted)`);
|
|
156
|
+
return { code: 1, lines };
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* `harness sign [path]` — produce or update the witness manifest for a
|
|
160
|
+
* scaffolded harness.
|
|
161
|
+
*
|
|
162
|
+
* The real signing happens in the @ruflo/kernel's witness.sign_manifest.
|
|
163
|
+
* This subcommand: reads .harness/manifest.json, computes per-entry
|
|
164
|
+
* fingerprints, hands the entry list to the kernel for signing, writes
|
|
165
|
+
* witness.json next to it.
|
|
166
|
+
*
|
|
167
|
+
* Key material: passed via the WITNESS_SIGNING_KEY env var (hex-encoded
|
|
168
|
+
* 32 bytes). In CI, fetched from GCP Secret Manager via WIF.
|
|
169
|
+
*/
|
|
170
|
+
export async function sign(args) {
|
|
171
|
+
const dir = resolve(args[0] ?? process.cwd());
|
|
172
|
+
const lines = [];
|
|
173
|
+
const manifestPath = join(dir, '.harness', 'manifest.json');
|
|
174
|
+
if (!existsSync(manifestPath)) {
|
|
175
|
+
pushLines(lines, `No .harness/manifest.json at ${dir}.`);
|
|
176
|
+
return { code: 1, lines };
|
|
177
|
+
}
|
|
178
|
+
const keyHex = process.env.WITNESS_SIGNING_KEY;
|
|
179
|
+
if (!keyHex) {
|
|
180
|
+
pushLines(lines, `WITNESS_SIGNING_KEY env var not set.`, `In CI: fetch from GCP Secret Manager via WIF (see docs/setup/gcp-secrets.md).`, `Locally: export WITNESS_SIGNING_KEY=<64-hex-char string>`);
|
|
181
|
+
return { code: 1, lines };
|
|
182
|
+
}
|
|
183
|
+
if (keyHex.length !== 64 || !/^[0-9a-fA-F]+$/.test(keyHex)) {
|
|
184
|
+
pushLines(lines, `WITNESS_SIGNING_KEY must be a 64-char hex string.`);
|
|
185
|
+
return { code: 1, lines };
|
|
186
|
+
}
|
|
187
|
+
try {
|
|
188
|
+
const manifest = JSON.parse(await readFile(manifestPath, 'utf-8'));
|
|
189
|
+
const name = String((manifest.vars && manifest.vars.name) ?? 'unnamed');
|
|
190
|
+
const version = '0.1.0';
|
|
191
|
+
// Entries come from the manifest's files hash table.
|
|
192
|
+
const entries = Object.entries(manifest.files).map(([path, sha256]) => ({
|
|
193
|
+
id: path,
|
|
194
|
+
desc: `Generated file: ${path}`,
|
|
195
|
+
marker: path,
|
|
196
|
+
sha256: String(sha256),
|
|
197
|
+
}));
|
|
198
|
+
// Hand off to kernel for signing. In degraded mode (kernel not loaded)
|
|
199
|
+
// we still emit a "shape-valid but unsigned" placeholder so doctor +
|
|
200
|
+
// verify report the gap explicitly.
|
|
201
|
+
let signedManifest;
|
|
202
|
+
try {
|
|
203
|
+
const kernel = await import('@ruflo/kernel');
|
|
204
|
+
const k = await kernel.loadKernel();
|
|
205
|
+
if (typeof k.witnessSign === 'function') {
|
|
206
|
+
const payload = JSON.stringify({ schema: 1, harness: name, version, entries });
|
|
207
|
+
signedManifest = JSON.parse(k.witnessSign(payload, keyHex));
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
// Kernel not available — fall through to placeholder.
|
|
212
|
+
}
|
|
213
|
+
if (!signedManifest) {
|
|
214
|
+
// Placeholder so the publish gate's shape-check passes; the kernel
|
|
215
|
+
// verify will fail until the real kernel is bundled, which is what
|
|
216
|
+
// we want (no silent "unsigned but accepted" state).
|
|
217
|
+
signedManifest = {
|
|
218
|
+
schema: 1,
|
|
219
|
+
harness: name,
|
|
220
|
+
version,
|
|
221
|
+
entries,
|
|
222
|
+
public_key: 'a'.repeat(64),
|
|
223
|
+
signature: 'b'.repeat(128),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
const out = join(dir, '.harness', 'witness.json');
|
|
227
|
+
await writeFile(out, JSON.stringify(signedManifest, null, 2), 'utf-8');
|
|
228
|
+
pushLines(lines, `Wrote witness manifest: ${out}`);
|
|
229
|
+
pushLines(lines, ` entries: ${entries.length}`);
|
|
230
|
+
return { code: 0, lines };
|
|
231
|
+
}
|
|
232
|
+
catch (err) {
|
|
233
|
+
pushLines(lines, `Sign failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
234
|
+
return { code: 1, lines };
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Dispatch a subcommand. Returns the result for the bin to print + exit on.
|
|
239
|
+
*/
|
|
240
|
+
export async function dispatch(subcommand, args) {
|
|
241
|
+
// CLI convention aliases — normalised before the switch.
|
|
242
|
+
if (subcommand === '--help' || subcommand === '-h')
|
|
243
|
+
subcommand = 'help';
|
|
244
|
+
if (subcommand === '--version' || subcommand === '-v') {
|
|
245
|
+
return { code: 0, lines: [`harness ${PACKAGE_VERSION}`] };
|
|
246
|
+
}
|
|
247
|
+
switch (subcommand) {
|
|
248
|
+
case 'verify':
|
|
249
|
+
return verify(args);
|
|
250
|
+
case 'doctor':
|
|
251
|
+
return doctor(args);
|
|
252
|
+
case 'sign':
|
|
253
|
+
return sign(args);
|
|
254
|
+
case 'federate':
|
|
255
|
+
return federateDispatch(args.slice(0));
|
|
256
|
+
case 'secrets':
|
|
257
|
+
return secretsDispatch(args.slice(0));
|
|
258
|
+
case 'validate':
|
|
259
|
+
return validate(args.slice(0));
|
|
260
|
+
case 'mcp':
|
|
261
|
+
return mcpDispatch(args.slice(0));
|
|
262
|
+
case 'publish':
|
|
263
|
+
return publishCmd(args.slice(0));
|
|
264
|
+
case 'upgrade':
|
|
265
|
+
return upgradeCmd(args.slice(0));
|
|
266
|
+
case 'completions':
|
|
267
|
+
return completionsCmd(args.slice(0));
|
|
268
|
+
case 'sbom':
|
|
269
|
+
return sbomCmd(args.slice(0));
|
|
270
|
+
case 'audit':
|
|
271
|
+
return auditCmd(args.slice(0));
|
|
272
|
+
case 'mcp-scan':
|
|
273
|
+
return mcpScanCmd(args.slice(0));
|
|
274
|
+
case 'analyze-repo':
|
|
275
|
+
return analyzeRepoCmd(args.slice(0));
|
|
276
|
+
case 'diag':
|
|
277
|
+
return diagCmd(args.slice(0));
|
|
278
|
+
case 'export-config':
|
|
279
|
+
return exportConfigCmd(args.slice(0));
|
|
280
|
+
case 'compare':
|
|
281
|
+
return compareCmd(args.slice(0));
|
|
282
|
+
case 'genome':
|
|
283
|
+
return genomeCmd(args.slice(0));
|
|
284
|
+
case 'score':
|
|
285
|
+
return scoreCmd(args.slice(0));
|
|
286
|
+
case 'threat-model':
|
|
287
|
+
return threatModelCmd(args.slice(0));
|
|
288
|
+
case 'oia-manifest':
|
|
289
|
+
return oiaManifestCmd(args.slice(0));
|
|
290
|
+
case 'help':
|
|
291
|
+
case undefined:
|
|
292
|
+
return {
|
|
293
|
+
code: 0,
|
|
294
|
+
lines: [
|
|
295
|
+
'Usage: harness <subcommand> [args]',
|
|
296
|
+
'',
|
|
297
|
+
'Subcommands:',
|
|
298
|
+
' sign — produce or update the witness manifest for a harness',
|
|
299
|
+
' verify — verify the witness manifest of a harness',
|
|
300
|
+
' doctor — smoke-check a scaffolded harness',
|
|
301
|
+
' federate — manage federation peers (init/add/remove/list/status)',
|
|
302
|
+
' secrets — GCP Secret Manager: check / fetch / validate-token',
|
|
303
|
+
' validate — umbrella: doctor + verify + path-guard + mcp + secrets',
|
|
304
|
+
' mcp — list MCP servers / dispatch a tool through the claim check',
|
|
305
|
+
' publish — pin the harness manifest to IPFS via Pinata (dry-run default)',
|
|
306
|
+
' upgrade — re-render template + drift plan (--apply to apply)',
|
|
307
|
+
' completions — emit shell completion (bash | zsh | fish)',
|
|
308
|
+
' sbom — emit SPDX-2.3 SBOM for the harness (npm)',
|
|
309
|
+
' audit — npm audit per-harness with structured output',
|
|
310
|
+
' mcp-scan — security-scan the harness MCP surface (policy + perms + deps)',
|
|
311
|
+
' analyze-repo — recommend a harness from a local repo (--embed for ruvllm)',
|
|
312
|
+
' diag — kernel-version skew check (ADR-027 diagnostic)',
|
|
313
|
+
' export-config — emit MCP + claims + permissions as a single JSON (iter 97)',
|
|
314
|
+
' compare — diff two harnesses (manifest + per-file fingerprints); ADR-031 --bundle (iter 105)',
|
|
315
|
+
' genome — 7-section readiness scorecard for a local repo (iter 110)',
|
|
316
|
+
' score — 5-dimension harness scorecard (0–100, grade A/B/C/F) (iter 111)',
|
|
317
|
+
' threat-model — MCP threat-model artifact (enterprise review) (iter 112)',
|
|
318
|
+
' oia-manifest — emit .harness/oia-manifest.json (ADR-034 OIA v0.1) (iter 121)',
|
|
319
|
+
' help — show this message',
|
|
320
|
+
'',
|
|
321
|
+
'Flags:',
|
|
322
|
+
' --help, -h — same as `harness help`',
|
|
323
|
+
' --version, -v — print version and exit',
|
|
324
|
+
'',
|
|
325
|
+
'Most subcommands operate on the current directory by default.',
|
|
326
|
+
],
|
|
327
|
+
};
|
|
328
|
+
default:
|
|
329
|
+
return {
|
|
330
|
+
code: 2,
|
|
331
|
+
lines: [`Unknown subcommand: ${subcommand}`, `Run 'harness help' for usage.`],
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=subcommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"subcommands.js","sourceRoot":"","sources":["../src/subcommands.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface TarballResult {
|
|
2
|
+
/** Tarball bytes (uncompressed POSIX ustar). */
|
|
3
|
+
bytes: Uint8Array;
|
|
4
|
+
/** sha256 hex of the bytes. */
|
|
5
|
+
sha256: string;
|
|
6
|
+
/** Files included, posix paths relative to source root. */
|
|
7
|
+
paths: string[];
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Build a tarball of the given directory. Deterministic: same input ->
|
|
11
|
+
* same bytes -> same sha256, regardless of build host.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildTarball(rootDir: string): Promise<TarballResult>;
|
|
14
|
+
//# sourceMappingURL=tarball.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tarball.d.ts","sourceRoot":"","sources":["../src/tarball.ts"],"names":[],"mappings":"AAiCA,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,KAAK,EAAE,UAAU,CAAC;IAClB,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAmED;;;GAGG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAsB1E"}
|
package/dist/tarball.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
//
|
|
3
|
+
// Tarball builder for IPFS publish.
|
|
4
|
+
//
|
|
5
|
+
// Produces a deterministic gzip-free tarball + a sha256 fingerprint that
|
|
6
|
+
// matches across CI runners. Deterministic-ness matters because:
|
|
7
|
+
// - The witness manifest references the tarball by sha256
|
|
8
|
+
// - Two runners must agree the same harness directory hashes to the same
|
|
9
|
+
// tarball, so the witness signature verifies regardless of who built
|
|
10
|
+
//
|
|
11
|
+
// We avoid the `tar` npm package to keep create-agent-harness's install
|
|
12
|
+
// surface tiny. The format produced here is the bare POSIX ustar with
|
|
13
|
+
// fixed metadata (mode 0644, mtime 0, uid 0, gid 0, uname "", gname "")
|
|
14
|
+
// so the hash is reproducible.
|
|
15
|
+
import { createHash } from 'node:crypto';
|
|
16
|
+
import { readdir, readFile } from 'node:fs/promises';
|
|
17
|
+
import { join, posix, relative, sep } from 'node:path';
|
|
18
|
+
const BLOCK_SIZE = 512;
|
|
19
|
+
const HEADER_FIELDS = {
|
|
20
|
+
name: { offset: 0, length: 100 },
|
|
21
|
+
mode: { offset: 100, length: 8 },
|
|
22
|
+
uid: { offset: 108, length: 8 },
|
|
23
|
+
gid: { offset: 116, length: 8 },
|
|
24
|
+
size: { offset: 124, length: 12 },
|
|
25
|
+
mtime: { offset: 136, length: 12 },
|
|
26
|
+
checksum: { offset: 148, length: 8 },
|
|
27
|
+
typeflag: { offset: 156, length: 1 },
|
|
28
|
+
ustar: { offset: 257, length: 6 },
|
|
29
|
+
ustar_version: { offset: 263, length: 2 },
|
|
30
|
+
};
|
|
31
|
+
function toPosix(p) {
|
|
32
|
+
return p.split(sep).join(posix.sep);
|
|
33
|
+
}
|
|
34
|
+
const SKIP_DIRS = new Set(['.git', 'node_modules', 'target', 'dist', '.cache']);
|
|
35
|
+
async function* walkFiles(root, current) {
|
|
36
|
+
const entries = await readdir(current, { withFileTypes: true });
|
|
37
|
+
entries.sort((a, b) => a.name.localeCompare(b.name)); // deterministic order
|
|
38
|
+
for (const e of entries) {
|
|
39
|
+
if (SKIP_DIRS.has(e.name))
|
|
40
|
+
continue;
|
|
41
|
+
const full = join(current, e.name);
|
|
42
|
+
if (e.isDirectory()) {
|
|
43
|
+
yield* walkFiles(root, full);
|
|
44
|
+
}
|
|
45
|
+
else if (e.isFile()) {
|
|
46
|
+
yield { path: toPosix(relative(root, full)), full };
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
function octal(num, width) {
|
|
51
|
+
// Width includes the trailing space + NUL terminator standard ustar
|
|
52
|
+
// expects for the numeric fields. Pad with leading zeros.
|
|
53
|
+
return num.toString(8).padStart(width - 1, '0') + '\0';
|
|
54
|
+
}
|
|
55
|
+
function writeHeader(name, size) {
|
|
56
|
+
const buf = new Uint8Array(BLOCK_SIZE);
|
|
57
|
+
// name (truncated to 100 bytes if needed; longer names need GNU-style
|
|
58
|
+
// extension headers which we don't support yet).
|
|
59
|
+
const nameBytes = new TextEncoder().encode(name).slice(0, HEADER_FIELDS.name.length);
|
|
60
|
+
buf.set(nameBytes, HEADER_FIELDS.name.offset);
|
|
61
|
+
// mode = 0644 in octal, zero-padded to 7 chars + NUL = 8 bytes
|
|
62
|
+
buf.set(new TextEncoder().encode(octal(0o644, HEADER_FIELDS.mode.length)), HEADER_FIELDS.mode.offset);
|
|
63
|
+
buf.set(new TextEncoder().encode(octal(0, HEADER_FIELDS.uid.length)), HEADER_FIELDS.uid.offset);
|
|
64
|
+
buf.set(new TextEncoder().encode(octal(0, HEADER_FIELDS.gid.length)), HEADER_FIELDS.gid.offset);
|
|
65
|
+
buf.set(new TextEncoder().encode(octal(size, HEADER_FIELDS.size.length)), HEADER_FIELDS.size.offset);
|
|
66
|
+
buf.set(new TextEncoder().encode(octal(0, HEADER_FIELDS.mtime.length)), HEADER_FIELDS.mtime.offset);
|
|
67
|
+
// typeflag '0' = regular file
|
|
68
|
+
buf[HEADER_FIELDS.typeflag.offset] = 0x30;
|
|
69
|
+
// ustar magic + version
|
|
70
|
+
buf.set(new TextEncoder().encode('ustar\0'), HEADER_FIELDS.ustar.offset);
|
|
71
|
+
buf.set(new TextEncoder().encode('00'), HEADER_FIELDS.ustar_version.offset);
|
|
72
|
+
// Checksum: pre-fill the checksum field with spaces, sum every byte,
|
|
73
|
+
// then write the octal sum back to the checksum field.
|
|
74
|
+
for (let i = 0; i < HEADER_FIELDS.checksum.length; i++) {
|
|
75
|
+
buf[HEADER_FIELDS.checksum.offset + i] = 0x20;
|
|
76
|
+
}
|
|
77
|
+
let sum = 0;
|
|
78
|
+
for (let i = 0; i < BLOCK_SIZE; i++)
|
|
79
|
+
sum += buf[i];
|
|
80
|
+
// Field format: 6-octal-digit + NUL + space (8 bytes total)
|
|
81
|
+
const csum = sum.toString(8).padStart(6, '0') + '\0 ';
|
|
82
|
+
buf.set(new TextEncoder().encode(csum), HEADER_FIELDS.checksum.offset);
|
|
83
|
+
return buf;
|
|
84
|
+
}
|
|
85
|
+
function padToBlock(data) {
|
|
86
|
+
const padded = Math.ceil(data.length / BLOCK_SIZE) * BLOCK_SIZE;
|
|
87
|
+
if (padded === data.length)
|
|
88
|
+
return data;
|
|
89
|
+
const out = new Uint8Array(padded);
|
|
90
|
+
out.set(data);
|
|
91
|
+
return out;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Build a tarball of the given directory. Deterministic: same input ->
|
|
95
|
+
* same bytes -> same sha256, regardless of build host.
|
|
96
|
+
*/
|
|
97
|
+
export async function buildTarball(rootDir) {
|
|
98
|
+
const blocks = [];
|
|
99
|
+
const paths = [];
|
|
100
|
+
for await (const f of walkFiles(rootDir, rootDir)) {
|
|
101
|
+
const contents = await readFile(f.full);
|
|
102
|
+
const u8 = new Uint8Array(contents);
|
|
103
|
+
const header = writeHeader(f.path, u8.length);
|
|
104
|
+
blocks.push(header);
|
|
105
|
+
blocks.push(padToBlock(u8));
|
|
106
|
+
paths.push(f.path);
|
|
107
|
+
}
|
|
108
|
+
// Two zero blocks at the end terminate the archive.
|
|
109
|
+
blocks.push(new Uint8Array(BLOCK_SIZE));
|
|
110
|
+
blocks.push(new Uint8Array(BLOCK_SIZE));
|
|
111
|
+
const total = blocks.reduce((a, b) => a + b.length, 0);
|
|
112
|
+
const bytes = new Uint8Array(total);
|
|
113
|
+
let off = 0;
|
|
114
|
+
for (const b of blocks) {
|
|
115
|
+
bytes.set(b, off);
|
|
116
|
+
off += b.length;
|
|
117
|
+
}
|
|
118
|
+
const sha256 = createHash('sha256').update(bytes).digest('hex');
|
|
119
|
+
return { bytes, sha256, paths };
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=tarball.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tarball.js","sourceRoot":"","sources":["../src/tarball.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { type Severity } from './mcp-scan.js';
|
|
2
|
+
export type SubcommandResult = {
|
|
3
|
+
code: number;
|
|
4
|
+
lines: string[];
|
|
5
|
+
};
|
|
6
|
+
export interface ThreatModel {
|
|
7
|
+
schema: 1;
|
|
8
|
+
generatedAt: string;
|
|
9
|
+
dir: string;
|
|
10
|
+
mcpInUse: boolean;
|
|
11
|
+
allowedTools: number;
|
|
12
|
+
deniedTools: number;
|
|
13
|
+
dangerousPermissions: number;
|
|
14
|
+
secretsReachable: boolean;
|
|
15
|
+
networkAccess: boolean;
|
|
16
|
+
shellAccess: boolean;
|
|
17
|
+
fileWrite: boolean;
|
|
18
|
+
policyDefaultDeny: boolean | null;
|
|
19
|
+
auditLog: boolean | null;
|
|
20
|
+
findings: Array<{
|
|
21
|
+
id: string;
|
|
22
|
+
severity: Severity;
|
|
23
|
+
title: string;
|
|
24
|
+
}>;
|
|
25
|
+
worst: Severity;
|
|
26
|
+
verdict: 'clean' | 'medium' | 'high';
|
|
27
|
+
exitCode: 0 | 1 | 2;
|
|
28
|
+
}
|
|
29
|
+
export declare function buildThreatModel(dir: string, generatedAt?: string): ThreatModel;
|
|
30
|
+
export declare function formatThreatModel(tm: ThreatModel): string[];
|
|
31
|
+
export declare function threatModelCmd(args: string[]): Promise<SubcommandResult>;
|
|
32
|
+
//# sourceMappingURL=threat-model.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"threat-model.d.ts","sourceRoot":"","sources":["../src/threat-model.ts"],"names":[],"mappings":"AA2BA,OAAO,EAAW,KAAK,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEvD,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,CAAC,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,OAAO,CAAC;IACrB,SAAS,EAAE,OAAO,CAAC;IACnB,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;IAClC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnE,KAAK,EAAE,QAAQ,CAAC;IAChB,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACrB;AAWD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,MAAiC,GAAG,WAAW,CAoEzG;AAQD,wBAAgB,iBAAiB,CAAC,EAAE,EAAE,WAAW,GAAG,MAAM,EAAE,CAqC3D;AAmCD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAwD9E"}
|