metaharness 0.3.0 → 0.3.2
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 -21
- package/README.md +111 -74
- package/dist/bin.js +14 -2
- package/dist/bin.js.map +1 -1
- package/dist/completions-cmd.js +94 -94
- package/dist/diag.d.ts +8 -0
- package/dist/diag.d.ts.map +1 -1
- package/dist/diag.js +79 -15
- package/dist/diag.js.map +1 -1
- package/dist/export-config.d.ts.map +1 -1
- package/dist/export-config.js +3 -12
- package/dist/export-config.js.map +1 -1
- package/dist/genome.d.ts.map +1 -1
- package/dist/genome.js +3 -12
- package/dist/genome.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +101 -75
- package/dist/index.js.map +1 -1
- package/dist/meta-proxy.d.ts +57 -0
- package/dist/meta-proxy.d.ts.map +1 -0
- package/dist/meta-proxy.js +325 -0
- package/dist/meta-proxy.js.map +1 -0
- package/dist/publish-cmd.d.ts.map +1 -1
- package/dist/publish-cmd.js +5 -0
- package/dist/publish-cmd.js.map +1 -1
- package/dist/publish.d.ts +6 -0
- package/dist/publish.d.ts.map +1 -1
- package/dist/publish.js +9 -0
- package/dist/publish.js.map +1 -1
- package/dist/redact.d.ts +25 -0
- package/dist/redact.d.ts.map +1 -0
- package/dist/redact.js +62 -0
- package/dist/redact.js.map +1 -0
- package/dist/score.d.ts +9 -0
- package/dist/score.d.ts.map +1 -1
- package/dist/score.js +20 -14
- package/dist/score.js.map +1 -1
- package/dist/threat-model.d.ts.map +1 -1
- package/dist/threat-model.js +3 -12
- package/dist/threat-model.js.map +1 -1
- package/dist/with-wasm.js +43 -43
- package/dist/witness-client.d.ts +7 -0
- package/dist/witness-client.d.ts.map +1 -1
- package/dist/witness-client.js +5 -1
- package/dist/witness-client.js.map +1 -1
- package/genomes/README.md +23 -23
- package/genomes/genome-promoted-cand6-edit-by-midpoint.json +26 -26
- package/package.json +126 -125
- package/templates/catalog.def.mjs +542 -542
- package/templates/catalog.json +1274 -1274
- package/templates/minimal/.claude/settings.json.tmpl +18 -18
- package/templates/minimal/.claude-plugin/plugin.json.tmpl +13 -13
- package/templates/minimal/CLAUDE.md.tmpl +26 -23
- package/templates/minimal/README.md.tmpl +20 -20
- package/templates/minimal/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/minimal/bin/cli.js.tmpl +100 -100
- package/templates/minimal/manifest.json +20 -20
- package/templates/minimal/package.json.tmpl +31 -31
- package/templates/minimal/src/init.ts.tmpl +21 -21
- package/templates/minimal/tsconfig.json.tmpl +19 -19
- package/templates/minimal/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_advertising/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_advertising/.claude/settings.json.tmpl +33 -33
- package/templates/vertical_advertising/.claude/skills/media-plan/SKILL.md.tmpl +13 -13
- package/templates/vertical_advertising/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_advertising/CLAUDE.md.tmpl +30 -30
- package/templates/vertical_advertising/README.md.tmpl +29 -29
- package/templates/vertical_advertising/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_advertising/bin/cli.js.tmpl +100 -100
- package/templates/vertical_advertising/manifest.json +101 -101
- package/templates/vertical_advertising/package.json.tmpl +30 -30
- package/templates/vertical_advertising/src/agents/copywriter.ts.tmpl +7 -7
- package/templates/vertical_advertising/src/agents/media-planner.ts.tmpl +7 -7
- package/templates/vertical_advertising/src/agents/performance-analyst.ts.tmpl +7 -7
- package/templates/vertical_advertising/src/init.ts.tmpl +21 -21
- package/templates/vertical_advertising/tsconfig.json.tmpl +19 -19
- package/templates/vertical_advertising/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_agentics/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_agentics/.claude/settings.json.tmpl +33 -33
- package/templates/vertical_agentics/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -14
- package/templates/vertical_agentics/.claude/skills/run-swarm/SKILL.md.tmpl +14 -14
- package/templates/vertical_agentics/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_agentics/CLAUDE.md.tmpl +32 -32
- package/templates/vertical_agentics/README.md.tmpl +30 -30
- package/templates/vertical_agentics/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_agentics/bin/cli.js.tmpl +100 -100
- package/templates/vertical_agentics/manifest.json +111 -111
- package/templates/vertical_agentics/package.json.tmpl +30 -30
- package/templates/vertical_agentics/src/agents/critic.ts.tmpl +7 -7
- package/templates/vertical_agentics/src/agents/orchestrator.ts.tmpl +7 -7
- package/templates/vertical_agentics/src/agents/planner.ts.tmpl +7 -7
- package/templates/vertical_agentics/src/agents/worker.ts.tmpl +7 -7
- package/templates/vertical_agentics/src/init.ts.tmpl +21 -21
- package/templates/vertical_agentics/tsconfig.json.tmpl +19 -19
- package/templates/vertical_agentics/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_ai/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_ai/.claude/settings.json.tmpl +35 -35
- package/templates/vertical_ai/.claude/skills/eval-report/SKILL.md.tmpl +13 -13
- package/templates/vertical_ai/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_ai/CLAUDE.md.tmpl +31 -31
- package/templates/vertical_ai/README.md.tmpl +30 -30
- package/templates/vertical_ai/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_ai/bin/cli.js.tmpl +100 -100
- package/templates/vertical_ai/manifest.json +106 -106
- package/templates/vertical_ai/package.json.tmpl +30 -30
- package/templates/vertical_ai/src/agents/data-curator.ts.tmpl +7 -7
- package/templates/vertical_ai/src/agents/deployer.ts.tmpl +7 -7
- package/templates/vertical_ai/src/agents/evaluator.ts.tmpl +7 -7
- package/templates/vertical_ai/src/agents/trainer.ts.tmpl +7 -7
- package/templates/vertical_ai/src/init.ts.tmpl +21 -21
- package/templates/vertical_ai/tsconfig.json.tmpl +19 -19
- package/templates/vertical_ai/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_business/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_business/.claude/settings.json.tmpl +33 -33
- package/templates/vertical_business/.claude/skills/quarterly-plan/SKILL.md.tmpl +13 -13
- package/templates/vertical_business/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_business/CLAUDE.md.tmpl +30 -30
- package/templates/vertical_business/README.md.tmpl +29 -29
- package/templates/vertical_business/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_business/bin/cli.js.tmpl +100 -100
- package/templates/vertical_business/manifest.json +101 -101
- package/templates/vertical_business/package.json.tmpl +30 -30
- package/templates/vertical_business/src/agents/analyst.ts.tmpl +7 -7
- package/templates/vertical_business/src/agents/ops-coordinator.ts.tmpl +7 -7
- package/templates/vertical_business/src/agents/strategist.ts.tmpl +7 -7
- package/templates/vertical_business/src/init.ts.tmpl +21 -21
- package/templates/vertical_business/tsconfig.json.tmpl +19 -19
- package/templates/vertical_business/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_coding/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_coding/.claude/commands/review-diff.md.tmpl +10 -10
- package/templates/vertical_coding/.claude/settings.json.tmpl +40 -40
- package/templates/vertical_coding/.claude/skills/plan-change/SKILL.md.tmpl +15 -15
- package/templates/vertical_coding/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_coding/CLAUDE.md.tmpl +32 -32
- package/templates/vertical_coding/README.md.tmpl +30 -30
- package/templates/vertical_coding/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_coding/bin/cli.js.tmpl +100 -100
- package/templates/vertical_coding/manifest.json +111 -111
- package/templates/vertical_coding/package.json.tmpl +30 -30
- package/templates/vertical_coding/src/agents/architect.ts.tmpl +7 -7
- package/templates/vertical_coding/src/agents/implementer.ts.tmpl +7 -7
- package/templates/vertical_coding/src/agents/reviewer.ts.tmpl +7 -7
- package/templates/vertical_coding/src/agents/test-writer.ts.tmpl +7 -7
- package/templates/vertical_coding/src/init.ts.tmpl +21 -21
- package/templates/vertical_coding/tsconfig.json.tmpl +19 -19
- package/templates/vertical_coding/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_crm/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_crm/.claude/settings.json.tmpl +33 -33
- package/templates/vertical_crm/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -14
- package/templates/vertical_crm/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_crm/CLAUDE.md.tmpl +30 -30
- package/templates/vertical_crm/README.md.tmpl +29 -29
- package/templates/vertical_crm/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_crm/bin/cli.js.tmpl +100 -100
- package/templates/vertical_crm/manifest.json +101 -101
- package/templates/vertical_crm/package.json.tmpl +30 -30
- package/templates/vertical_crm/src/agents/account-manager.ts.tmpl +7 -7
- package/templates/vertical_crm/src/agents/churn-watcher.ts.tmpl +7 -7
- package/templates/vertical_crm/src/agents/lead-qualifier.ts.tmpl +7 -7
- package/templates/vertical_crm/src/init.ts.tmpl +21 -21
- package/templates/vertical_crm/tsconfig.json.tmpl +19 -19
- package/templates/vertical_crm/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_devops/.claude/settings.json.tmpl +36 -36
- package/templates/vertical_devops/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_devops/CLAUDE.md.tmpl +34 -34
- package/templates/vertical_devops/README.md.tmpl +27 -27
- package/templates/vertical_devops/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_devops/bin/cli.js.tmpl +100 -100
- package/templates/vertical_devops/manifest.json +100 -100
- package/templates/vertical_devops/package.json.tmpl +27 -27
- package/templates/vertical_devops/runbooks/README.md.tmpl +32 -32
- package/templates/vertical_devops/src/agents/escalator.ts.tmpl +19 -19
- package/templates/vertical_devops/src/agents/postmortem.ts.tmpl +23 -23
- package/templates/vertical_devops/src/agents/responder.ts.tmpl +14 -14
- package/templates/vertical_devops/src/agents/runbook-runner.ts.tmpl +17 -17
- package/templates/vertical_devops/src/init.ts.tmpl +23 -23
- package/templates/vertical_devops/tsconfig.json.tmpl +19 -19
- package/templates/vertical_devops/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_education/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_education/.claude/commands/mastery-report.md.tmpl +12 -12
- package/templates/vertical_education/.claude/settings.json.tmpl +45 -45
- package/templates/vertical_education/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -14
- package/templates/vertical_education/.claude/skills/teach-next/SKILL.md.tmpl +16 -16
- package/templates/vertical_education/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_education/CLAUDE.md.tmpl +33 -33
- package/templates/vertical_education/README.md.tmpl +30 -30
- package/templates/vertical_education/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_education/bin/cli.js.tmpl +100 -100
- package/templates/vertical_education/manifest.json +116 -116
- package/templates/vertical_education/package.json.tmpl +30 -30
- package/templates/vertical_education/src/agents/explainer.ts.tmpl +7 -7
- package/templates/vertical_education/src/agents/grader.ts.tmpl +7 -7
- package/templates/vertical_education/src/agents/quiz-master.ts.tmpl +7 -7
- package/templates/vertical_education/src/agents/tutor.ts.tmpl +7 -7
- package/templates/vertical_education/src/init.ts.tmpl +21 -21
- package/templates/vertical_education/tsconfig.json.tmpl +19 -19
- package/templates/vertical_education/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_exotic/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_exotic/.claude/settings.json.tmpl +44 -44
- package/templates/vertical_exotic/.claude/skills/evolve/SKILL.md.tmpl +14 -14
- package/templates/vertical_exotic/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -14
- package/templates/vertical_exotic/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_exotic/CLAUDE.md.tmpl +31 -31
- package/templates/vertical_exotic/README.md.tmpl +29 -29
- package/templates/vertical_exotic/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_exotic/bin/cli.js.tmpl +100 -100
- package/templates/vertical_exotic/manifest.json +106 -106
- package/templates/vertical_exotic/package.json.tmpl +30 -30
- package/templates/vertical_exotic/src/agents/experimenter.ts.tmpl +7 -7
- package/templates/vertical_exotic/src/agents/federator.ts.tmpl +7 -7
- package/templates/vertical_exotic/src/agents/hypothesizer.ts.tmpl +7 -7
- package/templates/vertical_exotic/src/init.ts.tmpl +21 -21
- package/templates/vertical_exotic/tsconfig.json.tmpl +19 -19
- package/templates/vertical_exotic/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_gaming/.claude/commands/design-doc-diff.md.tmpl +13 -13
- package/templates/vertical_gaming/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_gaming/.claude/settings.json.tmpl +45 -45
- package/templates/vertical_gaming/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -14
- package/templates/vertical_gaming/.claude/skills/playtest-recap/SKILL.md.tmpl +16 -16
- package/templates/vertical_gaming/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_gaming/CLAUDE.md.tmpl +33 -33
- package/templates/vertical_gaming/README.md.tmpl +30 -30
- package/templates/vertical_gaming/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_gaming/bin/cli.js.tmpl +100 -100
- package/templates/vertical_gaming/manifest.json +116 -116
- package/templates/vertical_gaming/package.json.tmpl +30 -30
- package/templates/vertical_gaming/src/agents/balance-critic.ts.tmpl +7 -7
- package/templates/vertical_gaming/src/agents/economy-modeler.ts.tmpl +7 -7
- package/templates/vertical_gaming/src/agents/narrative-keeper.ts.tmpl +7 -7
- package/templates/vertical_gaming/src/agents/playtest-reader.ts.tmpl +7 -7
- package/templates/vertical_gaming/src/init.ts.tmpl +21 -21
- package/templates/vertical_gaming/tsconfig.json.tmpl +19 -19
- package/templates/vertical_gaming/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_health/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_health/.claude/settings.json.tmpl +33 -33
- package/templates/vertical_health/.claude/skills/wellness-intake/SKILL.md.tmpl +15 -15
- package/templates/vertical_health/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_health/CLAUDE.md.tmpl +30 -30
- package/templates/vertical_health/README.md.tmpl +29 -29
- package/templates/vertical_health/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_health/bin/cli.js.tmpl +100 -100
- package/templates/vertical_health/manifest.json +101 -101
- package/templates/vertical_health/package.json.tmpl +30 -30
- package/templates/vertical_health/src/agents/care-coordinator.ts.tmpl +7 -7
- package/templates/vertical_health/src/agents/intake.ts.tmpl +7 -7
- package/templates/vertical_health/src/agents/triage.ts.tmpl +7 -7
- package/templates/vertical_health/src/init.ts.tmpl +21 -21
- package/templates/vertical_health/tsconfig.json.tmpl +19 -19
- package/templates/vertical_health/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_legal/.claude/settings.json.tmpl +10 -10
- package/templates/vertical_legal/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_legal/CLAUDE.md.tmpl +24 -24
- package/templates/vertical_legal/README.md.tmpl +21 -21
- package/templates/vertical_legal/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_legal/bin/cli.js.tmpl +100 -100
- package/templates/vertical_legal/manifest.json +90 -90
- package/templates/vertical_legal/package.json.tmpl +14 -14
- package/templates/vertical_legal/src/agents/citation-checker.ts.tmpl +7 -7
- package/templates/vertical_legal/src/agents/redline.ts.tmpl +7 -7
- package/templates/vertical_legal/src/agents/risk-rater.ts.tmpl +8 -8
- package/templates/vertical_legal/src/init.ts.tmpl +13 -13
- package/templates/vertical_legal/tsconfig.json.tmpl +19 -19
- package/templates/vertical_legal/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_marketing/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_marketing/.claude/settings.json.tmpl +33 -33
- package/templates/vertical_marketing/.claude/skills/campaign-brief/SKILL.md.tmpl +13 -13
- package/templates/vertical_marketing/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_marketing/CLAUDE.md.tmpl +30 -30
- package/templates/vertical_marketing/README.md.tmpl +29 -29
- package/templates/vertical_marketing/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_marketing/bin/cli.js.tmpl +100 -100
- package/templates/vertical_marketing/manifest.json +101 -101
- package/templates/vertical_marketing/package.json.tmpl +30 -30
- package/templates/vertical_marketing/src/agents/content-creator.ts.tmpl +7 -7
- package/templates/vertical_marketing/src/agents/seo-analyst.ts.tmpl +7 -7
- package/templates/vertical_marketing/src/agents/strategist.ts.tmpl +7 -7
- package/templates/vertical_marketing/src/init.ts.tmpl +21 -21
- package/templates/vertical_marketing/tsconfig.json.tmpl +19 -19
- package/templates/vertical_marketing/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_repo-maintainer/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_repo-maintainer/.claude/commands/release-check.md.tmpl +13 -13
- package/templates/vertical_repo-maintainer/.claude/commands/repo-triage.md.tmpl +16 -16
- package/templates/vertical_repo-maintainer/.claude/settings.json.tmpl +44 -44
- package/templates/vertical_repo-maintainer/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -14
- package/templates/vertical_repo-maintainer/.claude/skills/plan-change/SKILL.md.tmpl +15 -15
- package/templates/vertical_repo-maintainer/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_repo-maintainer/CLAUDE.md.tmpl +34 -34
- package/templates/vertical_repo-maintainer/README.md.tmpl +30 -30
- package/templates/vertical_repo-maintainer/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_repo-maintainer/bin/cli.js.tmpl +100 -100
- package/templates/vertical_repo-maintainer/manifest.json +121 -121
- package/templates/vertical_repo-maintainer/package.json.tmpl +30 -30
- package/templates/vertical_repo-maintainer/src/agents/benchmarker.ts.tmpl +7 -7
- package/templates/vertical_repo-maintainer/src/agents/maintainer.ts.tmpl +7 -7
- package/templates/vertical_repo-maintainer/src/agents/release.ts.tmpl +7 -7
- package/templates/vertical_repo-maintainer/src/agents/security.ts.tmpl +7 -7
- package/templates/vertical_repo-maintainer/src/init.ts.tmpl +21 -21
- package/templates/vertical_repo-maintainer/tsconfig.json.tmpl +19 -19
- package/templates/vertical_repo-maintainer/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_research/.claude/settings.json.tmpl +9 -9
- package/templates/vertical_research/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_research/CLAUDE.md.tmpl +33 -33
- package/templates/vertical_research/README.md.tmpl +17 -17
- package/templates/vertical_research/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_research/bin/cli.js.tmpl +100 -100
- package/templates/vertical_research/manifest.json +105 -105
- package/templates/vertical_research/package.json.tmpl +14 -14
- package/templates/vertical_research/src/agents/citer.ts.tmpl +8 -8
- package/templates/vertical_research/src/agents/fact-checker.ts.tmpl +8 -8
- package/templates/vertical_research/src/agents/scout.ts.tmpl +7 -7
- package/templates/vertical_research/src/agents/source-grader.ts.tmpl +10 -10
- package/templates/vertical_research/src/agents/synthesizer.ts.tmpl +8 -8
- package/templates/vertical_research/src/agents/web-searcher.ts.tmpl +6 -6
- package/templates/vertical_research/src/init.ts.tmpl +13 -13
- package/templates/vertical_research/tsconfig.json.tmpl +19 -19
- package/templates/vertical_research/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_ruview/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_ruview/.claude/settings.json.tmpl +33 -33
- package/templates/vertical_ruview/.claude/skills/index-and-ask/SKILL.md.tmpl +15 -15
- package/templates/vertical_ruview/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -14
- package/templates/vertical_ruview/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_ruview/CLAUDE.md.tmpl +31 -31
- package/templates/vertical_ruview/README.md.tmpl +29 -29
- package/templates/vertical_ruview/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_ruview/bin/cli.js.tmpl +100 -100
- package/templates/vertical_ruview/manifest.json +106 -106
- package/templates/vertical_ruview/package.json.tmpl +30 -30
- package/templates/vertical_ruview/src/agents/indexer.ts.tmpl +7 -7
- package/templates/vertical_ruview/src/agents/retriever.ts.tmpl +7 -7
- package/templates/vertical_ruview/src/agents/reviewer.ts.tmpl +7 -7
- package/templates/vertical_ruview/src/init.ts.tmpl +21 -21
- package/templates/vertical_ruview/tsconfig.json.tmpl +19 -19
- package/templates/vertical_ruview/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_sales/.claude/commands/doctor.md.tmpl +12 -12
- package/templates/vertical_sales/.claude/commands/pipeline-report.md.tmpl +13 -13
- package/templates/vertical_sales/.claude/settings.json.tmpl +45 -45
- package/templates/vertical_sales/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -14
- package/templates/vertical_sales/.claude/skills/qualify-lead/SKILL.md.tmpl +15 -15
- package/templates/vertical_sales/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_sales/CLAUDE.md.tmpl +33 -33
- package/templates/vertical_sales/README.md.tmpl +30 -30
- package/templates/vertical_sales/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_sales/bin/cli.js.tmpl +100 -100
- package/templates/vertical_sales/manifest.json +116 -116
- package/templates/vertical_sales/package.json.tmpl +30 -30
- package/templates/vertical_sales/src/agents/closer.ts.tmpl +7 -7
- package/templates/vertical_sales/src/agents/demo-coach.ts.tmpl +7 -7
- package/templates/vertical_sales/src/agents/prospector.ts.tmpl +7 -7
- package/templates/vertical_sales/src/agents/qualifier.ts.tmpl +7 -7
- package/templates/vertical_sales/src/init.ts.tmpl +21 -21
- package/templates/vertical_sales/tsconfig.json.tmpl +19 -19
- package/templates/vertical_sales/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_support/.claude/settings.json.tmpl +25 -25
- package/templates/vertical_support/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_support/CLAUDE.md.tmpl +34 -34
- package/templates/vertical_support/README.md.tmpl +16 -16
- package/templates/vertical_support/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_support/bin/cli.js.tmpl +100 -100
- package/templates/vertical_support/kb/README.md.tmpl +23 -23
- package/templates/vertical_support/manifest.json +100 -100
- package/templates/vertical_support/package.json.tmpl +25 -25
- package/templates/vertical_support/src/agents/escalator.ts.tmpl +6 -6
- package/templates/vertical_support/src/agents/kb-searcher.ts.tmpl +6 -6
- package/templates/vertical_support/src/agents/responder.ts.tmpl +7 -7
- package/templates/vertical_support/src/agents/triager.ts.tmpl +6 -6
- package/templates/vertical_support/src/init.ts.tmpl +16 -16
- package/templates/vertical_support/tsconfig.json.tmpl +19 -19
- package/templates/vertical_support/vitest.config.ts.tmpl +23 -23
- package/templates/vertical_trading/.claude/settings.json.tmpl +20 -20
- package/templates/vertical_trading/.claude-plugin/plugin.json.tmpl +23 -23
- package/templates/vertical_trading/CLAUDE.md.tmpl +24 -24
- package/templates/vertical_trading/README.md.tmpl +17 -17
- package/templates/vertical_trading/__tests__/smoke.test.ts.tmpl +37 -37
- package/templates/vertical_trading/bin/cli.js.tmpl +100 -100
- package/templates/vertical_trading/manifest.json +100 -100
- package/templates/vertical_trading/package.json.tmpl +14 -14
- package/templates/vertical_trading/src/agents/executor.ts.tmpl +8 -8
- package/templates/vertical_trading/src/agents/market-watcher.ts.tmpl +7 -7
- package/templates/vertical_trading/src/agents/postmortem.ts.tmpl +8 -8
- package/templates/vertical_trading/src/agents/risk-checker.ts.tmpl +11 -11
- package/templates/vertical_trading/src/agents/signal-gen.ts.tmpl +8 -8
- package/templates/vertical_trading/src/init.ts.tmpl +20 -20
- package/templates/vertical_trading/tsconfig.json.tmpl +19 -19
- package/templates/vertical_trading/vitest.config.ts.tmpl +23 -23
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
{
|
|
2
|
-
"permissions": {
|
|
3
|
-
"allow": [
|
|
4
|
-
"Bash(npx {{name}}*)",
|
|
5
|
-
"Bash(kubectl describe*)",
|
|
6
|
-
"Bash(kubectl logs*)",
|
|
7
|
-
"Bash(kubectl get*)",
|
|
8
|
-
"Bash(systemctl status*)",
|
|
9
|
-
"Bash(journalctl*)",
|
|
10
|
-
"mcp__{{name}}__*",
|
|
11
|
-
"mcp__alerts__*",
|
|
12
|
-
"mcp__runbook_store__*"
|
|
13
|
-
],
|
|
14
|
-
"deny": [
|
|
15
|
-
"Bash(kubectl delete*)",
|
|
16
|
-
"Bash(rm *)",
|
|
17
|
-
"Bash(systemctl stop*)",
|
|
18
|
-
"Read(./.env)",
|
|
19
|
-
"Read(./.env.*)"
|
|
20
|
-
]
|
|
21
|
-
},
|
|
22
|
-
"mcpServers": {
|
|
23
|
-
"{{name}}": {
|
|
24
|
-
"command": "npx",
|
|
25
|
-
"args": ["-y", "{{name}}@latest", "mcp", "start"]
|
|
26
|
-
},
|
|
27
|
-
"alerts": {
|
|
28
|
-
"command": "npx",
|
|
29
|
-
"args": ["-y", "{{name}}@latest", "mcp", "alerts"]
|
|
30
|
-
},
|
|
31
|
-
"runbook_store": {
|
|
32
|
-
"command": "npx",
|
|
33
|
-
"args": ["-y", "{{name}}@latest", "mcp", "runbooks"]
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"permissions": {
|
|
3
|
+
"allow": [
|
|
4
|
+
"Bash(npx {{name}}*)",
|
|
5
|
+
"Bash(kubectl describe*)",
|
|
6
|
+
"Bash(kubectl logs*)",
|
|
7
|
+
"Bash(kubectl get*)",
|
|
8
|
+
"Bash(systemctl status*)",
|
|
9
|
+
"Bash(journalctl*)",
|
|
10
|
+
"mcp__{{name}}__*",
|
|
11
|
+
"mcp__alerts__*",
|
|
12
|
+
"mcp__runbook_store__*"
|
|
13
|
+
],
|
|
14
|
+
"deny": [
|
|
15
|
+
"Bash(kubectl delete*)",
|
|
16
|
+
"Bash(rm *)",
|
|
17
|
+
"Bash(systemctl stop*)",
|
|
18
|
+
"Read(./.env)",
|
|
19
|
+
"Read(./.env.*)"
|
|
20
|
+
]
|
|
21
|
+
},
|
|
22
|
+
"mcpServers": {
|
|
23
|
+
"{{name}}": {
|
|
24
|
+
"command": "npx",
|
|
25
|
+
"args": ["-y", "{{name}}@latest", "mcp", "start"]
|
|
26
|
+
},
|
|
27
|
+
"alerts": {
|
|
28
|
+
"command": "npx",
|
|
29
|
+
"args": ["-y", "{{name}}@latest", "mcp", "alerts"]
|
|
30
|
+
},
|
|
31
|
+
"runbook_store": {
|
|
32
|
+
"command": "npx",
|
|
33
|
+
"args": ["-y", "{{name}}@latest", "mcp", "runbooks"]
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "{{name}}",
|
|
3
|
-
"version": "0.1.0",
|
|
4
|
-
"description": "{{description}}",
|
|
5
|
-
"author": {
|
|
6
|
-
"displayName": "Generated by metaharness",
|
|
7
|
-
"url": "https://www.npmjs.com/package/metaharness"
|
|
8
|
-
},
|
|
9
|
-
"license": "MIT",
|
|
10
|
-
"categories": [
|
|
11
|
-
"agent-harness",
|
|
12
|
-
"metaharness-scaffold",
|
|
13
|
-
"vertical",
|
|
14
|
-
"devops/incident-response"
|
|
15
|
-
],
|
|
16
|
-
"tags": [
|
|
17
|
-
"metaharness",
|
|
18
|
-
"agent-harness",
|
|
19
|
-
"vertical:devops",
|
|
20
|
-
"devops/incident-response"
|
|
21
|
-
],
|
|
22
|
-
"homepage": "https://github.com/ruvnet/agent-harness-generator"
|
|
23
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "{{name}}",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "{{description}}",
|
|
5
|
+
"author": {
|
|
6
|
+
"displayName": "Generated by metaharness",
|
|
7
|
+
"url": "https://www.npmjs.com/package/metaharness"
|
|
8
|
+
},
|
|
9
|
+
"license": "MIT",
|
|
10
|
+
"categories": [
|
|
11
|
+
"agent-harness",
|
|
12
|
+
"metaharness-scaffold",
|
|
13
|
+
"vertical",
|
|
14
|
+
"devops/incident-response"
|
|
15
|
+
],
|
|
16
|
+
"tags": [
|
|
17
|
+
"metaharness",
|
|
18
|
+
"agent-harness",
|
|
19
|
+
"vertical:devops",
|
|
20
|
+
"devops/incident-response"
|
|
21
|
+
],
|
|
22
|
+
"homepage": "https://github.com/ruvnet/agent-harness-generator"
|
|
23
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
# {{name}}
|
|
2
|
-
|
|
3
|
-
{{description}}
|
|
4
|
-
|
|
5
|
-
## What this harness does
|
|
6
|
-
|
|
7
|
-
Coordinates on-call incident response: alert ingestion, runbook lookup, escalation logic, and postmortem authoring. 4 agents work in a hierarchical pipeline; the kernel routes between them.
|
|
8
|
-
|
|
9
|
-
## Agents
|
|
10
|
-
|
|
11
|
-
| Agent | Role | Typical model tier |
|
|
12
|
-
|---|---|---|
|
|
13
|
-
| `responder` | Triages incoming alerts, identifies playbook | Haiku |
|
|
14
|
-
| `runbook-runner` | Executes known runbooks step by step | Haiku |
|
|
15
|
-
| `escalator` | Decides when to page humans + who | Sonnet |
|
|
16
|
-
| `postmortem` | Drafts incident postmortems from session transcript | Sonnet |
|
|
17
|
-
|
|
18
|
-
## Behavioral rules
|
|
19
|
-
|
|
20
|
-
- ALWAYS run `runbook-runner` before `escalator` — escalation requires runbook context
|
|
21
|
-
- NEVER auto-execute destructive commands; runbook-runner deliberates, doesn't `rm`
|
|
22
|
-
- `escalator` may invoke a human via the `notify` MCP tool — that's the only side-effect agent
|
|
23
|
-
|
|
24
|
-
## Slash commands
|
|
25
|
-
|
|
26
|
-
| Command | What it does |
|
|
27
|
-
|---|---|
|
|
28
|
-
| `/triage <alert>` | Run responder + runbook-runner |
|
|
29
|
-
| `/escalate <reason>` | Force escalation path |
|
|
30
|
-
| `/postmortem` | Generate postmortem from current session |
|
|
31
|
-
|
|
32
|
-
## Architecture
|
|
33
|
-
|
|
34
|
-
Built on `@metaharness/kernel` (Rust + WASM). Multi-host: ships with the **{{host}}** adapter; other hosts available via `harness add-host <name>`.
|
|
1
|
+
# {{name}}
|
|
2
|
+
|
|
3
|
+
{{description}}
|
|
4
|
+
|
|
5
|
+
## What this harness does
|
|
6
|
+
|
|
7
|
+
Coordinates on-call incident response: alert ingestion, runbook lookup, escalation logic, and postmortem authoring. 4 agents work in a hierarchical pipeline; the kernel routes between them.
|
|
8
|
+
|
|
9
|
+
## Agents
|
|
10
|
+
|
|
11
|
+
| Agent | Role | Typical model tier |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| `responder` | Triages incoming alerts, identifies playbook | Haiku |
|
|
14
|
+
| `runbook-runner` | Executes known runbooks step by step | Haiku |
|
|
15
|
+
| `escalator` | Decides when to page humans + who | Sonnet |
|
|
16
|
+
| `postmortem` | Drafts incident postmortems from session transcript | Sonnet |
|
|
17
|
+
|
|
18
|
+
## Behavioral rules
|
|
19
|
+
|
|
20
|
+
- ALWAYS run `runbook-runner` before `escalator` — escalation requires runbook context
|
|
21
|
+
- NEVER auto-execute destructive commands; runbook-runner deliberates, doesn't `rm`
|
|
22
|
+
- `escalator` may invoke a human via the `notify` MCP tool — that's the only side-effect agent
|
|
23
|
+
|
|
24
|
+
## Slash commands
|
|
25
|
+
|
|
26
|
+
| Command | What it does |
|
|
27
|
+
|---|---|
|
|
28
|
+
| `/triage <alert>` | Run responder + runbook-runner |
|
|
29
|
+
| `/escalate <reason>` | Force escalation path |
|
|
30
|
+
| `/postmortem` | Generate postmortem from current session |
|
|
31
|
+
|
|
32
|
+
## Architecture
|
|
33
|
+
|
|
34
|
+
Built on `@metaharness/kernel` (Rust + WASM). Multi-host: ships with the **{{host}}** adapter; other hosts available via `harness add-host <name>`.
|
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
# {{name}}
|
|
2
|
-
|
|
3
|
-
{{description}}
|
|
4
|
-
|
|
5
|
-
> Generated with [`create-agent-harness`](https://github.com/ruvnet/agent-harness-generator) using the `vertical:devops` template. Multi-host scaffolding with a kernel that resolves native → wasm → js (js backend in the published beta; see `harness doctor`).
|
|
6
|
-
|
|
7
|
-
## Install
|
|
8
|
-
|
|
9
|
-
```bash
|
|
10
|
-
npm install -g {{name}}
|
|
11
|
-
{{name}} init
|
|
12
|
-
```
|
|
13
|
-
|
|
14
|
-
## What's in the box
|
|
15
|
-
|
|
16
|
-
- 4 specialized agents (responder, runbook-runner, escalator, postmortem)
|
|
17
|
-
- `runbooks/` directory for your team's runbooks (markdown)
|
|
18
|
-
- Pre-configured routing: Haiku for triage/runbook execution, Sonnet for escalation + postmortem
|
|
19
|
-
- `.claude/settings.json` with sensible permissions and the kernel MCP server registered
|
|
20
|
-
|
|
21
|
-
## Adding your own runbooks
|
|
22
|
-
|
|
23
|
-
Drop markdown files into `runbooks/`. The runbook-runner agent finds them by semantic search via the kernel's memory bridge — no schema required.
|
|
24
|
-
|
|
25
|
-
## License
|
|
26
|
-
|
|
27
|
-
MIT
|
|
1
|
+
# {{name}}
|
|
2
|
+
|
|
3
|
+
{{description}}
|
|
4
|
+
|
|
5
|
+
> Generated with [`create-agent-harness`](https://github.com/ruvnet/agent-harness-generator) using the `vertical:devops` template. Multi-host scaffolding with a kernel that resolves native → wasm → js (js backend in the published beta; see `harness doctor`).
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g {{name}}
|
|
11
|
+
{{name}} init
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## What's in the box
|
|
15
|
+
|
|
16
|
+
- 4 specialized agents (responder, runbook-runner, escalator, postmortem)
|
|
17
|
+
- `runbooks/` directory for your team's runbooks (markdown)
|
|
18
|
+
- Pre-configured routing: Haiku for triage/runbook execution, Sonnet for escalation + postmortem
|
|
19
|
+
- `.claude/settings.json` with sensible permissions and the kernel MCP server registered
|
|
20
|
+
|
|
21
|
+
## Adding your own runbooks
|
|
22
|
+
|
|
23
|
+
Drop markdown files into `runbooks/`. The runbook-runner agent finds them by semantic search via the kernel's memory bridge — no schema required.
|
|
24
|
+
|
|
25
|
+
## License
|
|
26
|
+
|
|
27
|
+
MIT
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
// SPDX-License-Identifier: MIT
|
|
2
|
-
// Generated by metaharness — a real smoke test for {{name}}.
|
|
3
|
-
//
|
|
4
|
-
// This is NOT a placeholder: it boots the actual kernel + host adapter the
|
|
5
|
-
// harness depends on, so `npm test` fails loudly if @metaharness/kernel or
|
|
6
|
-
// @metaharness/host-{{host}} is missing, broken, or version-skewed. It is the
|
|
7
|
-
// fastest signal that `npm install` produced a runnable harness.
|
|
8
|
-
|
|
9
|
-
import { describe, it, expect } from 'vitest';
|
|
10
|
-
import { loadKernel } from '@metaharness/kernel';
|
|
11
|
-
import adapter from '@metaharness/host-{{host}}';
|
|
12
|
-
import { run } from '../bin/cli.js';
|
|
13
|
-
|
|
14
|
-
describe('{{name}} — install smoke test', () => {
|
|
15
|
-
it('loads the kernel and reports a version + a known backend', async () => {
|
|
16
|
-
const kernel = await loadKernel();
|
|
17
|
-
const info = kernel.kernelInfo();
|
|
18
|
-
expect(typeof info.version).toBe('string');
|
|
19
|
-
expect(info.version.length).toBeGreaterThan(0);
|
|
20
|
-
expect(['native', 'wasm', 'js']).toContain(kernel.backend);
|
|
21
|
-
});
|
|
22
|
-
|
|
23
|
-
it('resolves the host adapter with a name', () => {
|
|
24
|
-
expect(typeof adapter.name).toBe('string');
|
|
25
|
-
expect(adapter.name.length).toBeGreaterThan(0);
|
|
26
|
-
});
|
|
27
|
-
|
|
28
|
-
it('the CLI doctor command succeeds (exit 0)', async () => {
|
|
29
|
-
const code = await run(['doctor']);
|
|
30
|
-
expect(code).toBe(0);
|
|
31
|
-
});
|
|
32
|
-
|
|
33
|
-
it('an unknown CLI command exits non-zero', async () => {
|
|
34
|
-
const code = await run(['definitely-not-a-command']);
|
|
35
|
-
expect(code).not.toBe(0);
|
|
36
|
-
});
|
|
37
|
-
});
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
// Generated by metaharness — a real smoke test for {{name}}.
|
|
3
|
+
//
|
|
4
|
+
// This is NOT a placeholder: it boots the actual kernel + host adapter the
|
|
5
|
+
// harness depends on, so `npm test` fails loudly if @metaharness/kernel or
|
|
6
|
+
// @metaharness/host-{{host}} is missing, broken, or version-skewed. It is the
|
|
7
|
+
// fastest signal that `npm install` produced a runnable harness.
|
|
8
|
+
|
|
9
|
+
import { describe, it, expect } from 'vitest';
|
|
10
|
+
import { loadKernel } from '@metaharness/kernel';
|
|
11
|
+
import adapter from '@metaharness/host-{{host}}';
|
|
12
|
+
import { run } from '../bin/cli.js';
|
|
13
|
+
|
|
14
|
+
describe('{{name}} — install smoke test', () => {
|
|
15
|
+
it('loads the kernel and reports a version + a known backend', async () => {
|
|
16
|
+
const kernel = await loadKernel();
|
|
17
|
+
const info = kernel.kernelInfo();
|
|
18
|
+
expect(typeof info.version).toBe('string');
|
|
19
|
+
expect(info.version.length).toBeGreaterThan(0);
|
|
20
|
+
expect(['native', 'wasm', 'js']).toContain(kernel.backend);
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
it('resolves the host adapter with a name', () => {
|
|
24
|
+
expect(typeof adapter.name).toBe('string');
|
|
25
|
+
expect(adapter.name.length).toBeGreaterThan(0);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('the CLI doctor command succeeds (exit 0)', async () => {
|
|
29
|
+
const code = await run(['doctor']);
|
|
30
|
+
expect(code).toBe(0);
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('an unknown CLI command exits non-zero', async () => {
|
|
34
|
+
const code = await run(['definitely-not-a-command']);
|
|
35
|
+
expect(code).not.toBe(0);
|
|
36
|
+
});
|
|
37
|
+
});
|
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
// SPDX-License-Identifier: MIT
|
|
3
|
-
// Generated by metaharness — the `{{name}}` CLI entry point.
|
|
4
|
-
//
|
|
5
|
-
// This is plain ESM JavaScript on purpose: it runs as-is via `npx {{name}}`
|
|
6
|
-
// with NO build step. `npm run build` (tsc) is only needed if you extend the
|
|
7
|
-
// TypeScript in src/. The published package ships this file directly (see the
|
|
8
|
-
// "bin" + "files" fields in package.json), so `npx {{name}}` works the moment
|
|
9
|
-
// `npm install` has resolved @metaharness/kernel + @metaharness/host-{{host}}.
|
|
10
|
-
|
|
11
|
-
import { loadKernel } from '@metaharness/kernel';
|
|
12
|
-
import adapter from '@metaharness/host-{{host}}';
|
|
13
|
-
|
|
14
|
-
const HARNESS_NAME = '{{name}}';
|
|
15
|
-
|
|
16
|
-
/** `{{name}} init` — boot the kernel + host adapter and report status. */
|
|
17
|
-
async function init() {
|
|
18
|
-
const kernel = await loadKernel();
|
|
19
|
-
const info = kernel.kernelInfo();
|
|
20
|
-
console.log(`${HARNESS_NAME} — kernel ${info.version} (${kernel.backend})`);
|
|
21
|
-
console.log(`Host adapter: ${adapter.name}`);
|
|
22
|
-
console.log(`Run \`${HARNESS_NAME} doctor\` to verify the install.`);
|
|
23
|
-
return 0;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
/** `{{name}} doctor` — verify the install end-to-end (kernel + host resolve). */
|
|
27
|
-
async function doctor() {
|
|
28
|
-
const kernel = await loadKernel();
|
|
29
|
-
const info = kernel.kernelInfo();
|
|
30
|
-
const checks = [
|
|
31
|
-
['kernel loads', !!kernel],
|
|
32
|
-
['kernel reports a version', typeof info.version === 'string' && info.version.length > 0],
|
|
33
|
-
['kernel backend is native|wasm|js', ['native', 'wasm', 'js'].includes(kernel.backend)],
|
|
34
|
-
['host adapter has a name', typeof adapter?.name === 'string' && adapter.name.length > 0],
|
|
35
|
-
];
|
|
36
|
-
let ok = true;
|
|
37
|
-
for (const [label, pass] of checks) {
|
|
38
|
-
console.log(`${pass ? 'PASS' : 'FAIL'} ${label}`);
|
|
39
|
-
if (!pass) ok = false;
|
|
40
|
-
}
|
|
41
|
-
console.log(
|
|
42
|
-
ok
|
|
43
|
-
? `\n${HARNESS_NAME}: all checks passed (kernel ${info.version}, ${kernel.backend} backend, host ${adapter.name})`
|
|
44
|
-
: `\n${HARNESS_NAME}: doctor found problems`,
|
|
45
|
-
);
|
|
46
|
-
return ok ? 0 : 1;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/**
|
|
50
|
-
* Dispatch one CLI invocation. Exported (not just run on import) so a test can
|
|
51
|
-
* drive it without spawning a subprocess. Returns the intended exit code.
|
|
52
|
-
*/
|
|
53
|
-
export async function run(argv) {
|
|
54
|
-
const cmd = argv[0] ?? 'init';
|
|
55
|
-
switch (cmd) {
|
|
56
|
-
case 'init':
|
|
57
|
-
return init();
|
|
58
|
-
case 'doctor':
|
|
59
|
-
return doctor();
|
|
60
|
-
case '--version':
|
|
61
|
-
case '-v': {
|
|
62
|
-
const kernel = await loadKernel();
|
|
63
|
-
console.log(kernel.version());
|
|
64
|
-
return 0;
|
|
65
|
-
}
|
|
66
|
-
case '--help':
|
|
67
|
-
case '-h':
|
|
68
|
-
console.log(`Usage: ${HARNESS_NAME} <command>\n\n init boot the kernel + host adapter (default)\n doctor verify the install end-to-end\n --version print the kernel version`);
|
|
69
|
-
return 0;
|
|
70
|
-
default:
|
|
71
|
-
console.error(`Unknown command: ${cmd}. Try \`${HARNESS_NAME} --help\`.`);
|
|
72
|
-
return 2;
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
// CLI guard: execute only when invoked directly (not when imported by a test).
|
|
77
|
-
// npm's bin shims pass a NON-normalized argv[1] (e.g. ".../.bin/../<pkg>/bin/cli.js"
|
|
78
|
-
// on Windows) and may differ in case, so realpath BOTH sides before comparing —
|
|
79
|
-
// a naive string === misses the npx/shim path and the CLI silently no-ops.
|
|
80
|
-
import { fileURLToPath } from 'node:url';
|
|
81
|
-
import { realpathSync } from 'node:fs';
|
|
82
|
-
import { argv } from 'node:process';
|
|
83
|
-
const invokedDirectly = (() => {
|
|
84
|
-
if (!argv[1]) return false;
|
|
85
|
-
try {
|
|
86
|
-
const a = realpathSync(argv[1]);
|
|
87
|
-
const b = realpathSync(fileURLToPath(import.meta.url));
|
|
88
|
-
return process.platform === 'win32' ? a.toLowerCase() === b.toLowerCase() : a === b;
|
|
89
|
-
} catch {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
})();
|
|
93
|
-
if (invokedDirectly) {
|
|
94
|
-
run(argv.slice(2))
|
|
95
|
-
.then((code) => process.exit(code))
|
|
96
|
-
.catch((err) => {
|
|
97
|
-
console.error(err);
|
|
98
|
-
process.exit(1);
|
|
99
|
-
});
|
|
100
|
-
}
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SPDX-License-Identifier: MIT
|
|
3
|
+
// Generated by metaharness — the `{{name}}` CLI entry point.
|
|
4
|
+
//
|
|
5
|
+
// This is plain ESM JavaScript on purpose: it runs as-is via `npx {{name}}`
|
|
6
|
+
// with NO build step. `npm run build` (tsc) is only needed if you extend the
|
|
7
|
+
// TypeScript in src/. The published package ships this file directly (see the
|
|
8
|
+
// "bin" + "files" fields in package.json), so `npx {{name}}` works the moment
|
|
9
|
+
// `npm install` has resolved @metaharness/kernel + @metaharness/host-{{host}}.
|
|
10
|
+
|
|
11
|
+
import { loadKernel } from '@metaharness/kernel';
|
|
12
|
+
import adapter from '@metaharness/host-{{host}}';
|
|
13
|
+
|
|
14
|
+
const HARNESS_NAME = '{{name}}';
|
|
15
|
+
|
|
16
|
+
/** `{{name}} init` — boot the kernel + host adapter and report status. */
|
|
17
|
+
async function init() {
|
|
18
|
+
const kernel = await loadKernel();
|
|
19
|
+
const info = kernel.kernelInfo();
|
|
20
|
+
console.log(`${HARNESS_NAME} — kernel ${info.version} (${kernel.backend})`);
|
|
21
|
+
console.log(`Host adapter: ${adapter.name}`);
|
|
22
|
+
console.log(`Run \`${HARNESS_NAME} doctor\` to verify the install.`);
|
|
23
|
+
return 0;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** `{{name}} doctor` — verify the install end-to-end (kernel + host resolve). */
|
|
27
|
+
async function doctor() {
|
|
28
|
+
const kernel = await loadKernel();
|
|
29
|
+
const info = kernel.kernelInfo();
|
|
30
|
+
const checks = [
|
|
31
|
+
['kernel loads', !!kernel],
|
|
32
|
+
['kernel reports a version', typeof info.version === 'string' && info.version.length > 0],
|
|
33
|
+
['kernel backend is native|wasm|js', ['native', 'wasm', 'js'].includes(kernel.backend)],
|
|
34
|
+
['host adapter has a name', typeof adapter?.name === 'string' && adapter.name.length > 0],
|
|
35
|
+
];
|
|
36
|
+
let ok = true;
|
|
37
|
+
for (const [label, pass] of checks) {
|
|
38
|
+
console.log(`${pass ? 'PASS' : 'FAIL'} ${label}`);
|
|
39
|
+
if (!pass) ok = false;
|
|
40
|
+
}
|
|
41
|
+
console.log(
|
|
42
|
+
ok
|
|
43
|
+
? `\n${HARNESS_NAME}: all checks passed (kernel ${info.version}, ${kernel.backend} backend, host ${adapter.name})`
|
|
44
|
+
: `\n${HARNESS_NAME}: doctor found problems`,
|
|
45
|
+
);
|
|
46
|
+
return ok ? 0 : 1;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Dispatch one CLI invocation. Exported (not just run on import) so a test can
|
|
51
|
+
* drive it without spawning a subprocess. Returns the intended exit code.
|
|
52
|
+
*/
|
|
53
|
+
export async function run(argv) {
|
|
54
|
+
const cmd = argv[0] ?? 'init';
|
|
55
|
+
switch (cmd) {
|
|
56
|
+
case 'init':
|
|
57
|
+
return init();
|
|
58
|
+
case 'doctor':
|
|
59
|
+
return doctor();
|
|
60
|
+
case '--version':
|
|
61
|
+
case '-v': {
|
|
62
|
+
const kernel = await loadKernel();
|
|
63
|
+
console.log(kernel.version());
|
|
64
|
+
return 0;
|
|
65
|
+
}
|
|
66
|
+
case '--help':
|
|
67
|
+
case '-h':
|
|
68
|
+
console.log(`Usage: ${HARNESS_NAME} <command>\n\n init boot the kernel + host adapter (default)\n doctor verify the install end-to-end\n --version print the kernel version`);
|
|
69
|
+
return 0;
|
|
70
|
+
default:
|
|
71
|
+
console.error(`Unknown command: ${cmd}. Try \`${HARNESS_NAME} --help\`.`);
|
|
72
|
+
return 2;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// CLI guard: execute only when invoked directly (not when imported by a test).
|
|
77
|
+
// npm's bin shims pass a NON-normalized argv[1] (e.g. ".../.bin/../<pkg>/bin/cli.js"
|
|
78
|
+
// on Windows) and may differ in case, so realpath BOTH sides before comparing —
|
|
79
|
+
// a naive string === misses the npx/shim path and the CLI silently no-ops.
|
|
80
|
+
import { fileURLToPath } from 'node:url';
|
|
81
|
+
import { realpathSync } from 'node:fs';
|
|
82
|
+
import { argv } from 'node:process';
|
|
83
|
+
const invokedDirectly = (() => {
|
|
84
|
+
if (!argv[1]) return false;
|
|
85
|
+
try {
|
|
86
|
+
const a = realpathSync(argv[1]);
|
|
87
|
+
const b = realpathSync(fileURLToPath(import.meta.url));
|
|
88
|
+
return process.platform === 'win32' ? a.toLowerCase() === b.toLowerCase() : a === b;
|
|
89
|
+
} catch {
|
|
90
|
+
return false;
|
|
91
|
+
}
|
|
92
|
+
})();
|
|
93
|
+
if (invokedDirectly) {
|
|
94
|
+
run(argv.slice(2))
|
|
95
|
+
.then((code) => process.exit(code))
|
|
96
|
+
.catch((err) => {
|
|
97
|
+
console.error(err);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
});
|
|
100
|
+
}
|