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
|
@@ -0,0 +1,325 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Optional Meta-Proxy integration for the published `metaharness` CLI.
|
|
3
|
+
*
|
|
4
|
+
* Meta-Proxy is deliberately not an npm dependency: it is a separately released
|
|
5
|
+
* Rust binary. This module downloads its public, signed release only when the
|
|
6
|
+
* user explicitly asks for `metaharness proxy install --yes`, verifies the
|
|
7
|
+
* signed SHA256 manifest with a pinned Ed25519 public key, and then installs it
|
|
8
|
+
* under the user's MetaHarness state directory.
|
|
9
|
+
*/
|
|
10
|
+
import { spawn, spawnSync } from 'node:child_process';
|
|
11
|
+
import { createHash, createPublicKey, verify as verifySignature } from 'node:crypto';
|
|
12
|
+
import { chmodSync, closeSync, existsSync, mkdirSync, mkdtempSync, openSync, readFileSync, readdirSync, renameSync, rmSync, statSync, writeFileSync, } from 'node:fs';
|
|
13
|
+
import { homedir } from 'node:os';
|
|
14
|
+
import { basename, join } from 'node:path';
|
|
15
|
+
export const META_PROXY_VERSION = '0.3.0';
|
|
16
|
+
export const META_PROXY_RELEASE_BASE = 'https://github.com/cognitum-one/meta-proxy-dist/releases/download';
|
|
17
|
+
/** The release signing key, pinned in the client rather than fetched from GitHub. */
|
|
18
|
+
export const META_PROXY_SIGNING_PUBKEY_PEM = `-----BEGIN PUBLIC KEY-----
|
|
19
|
+
MCowBQYDK2VwAyEAjhLDomjIGdcltYC7j+aiESQFD4LWoHaULietG1PuDjw=
|
|
20
|
+
-----END PUBLIC KEY-----
|
|
21
|
+
`;
|
|
22
|
+
const PLATFORM_TABLE = {
|
|
23
|
+
'darwin-arm64': { target: 'aarch64-apple-darwin', archive: 'tar.gz' },
|
|
24
|
+
'darwin-x64': { target: 'x86_64-apple-darwin', archive: 'tar.gz' },
|
|
25
|
+
'linux-arm64': { target: 'aarch64-unknown-linux-gnu', archive: 'tar.gz' },
|
|
26
|
+
'linux-x64': { target: 'x86_64-unknown-linux-gnu', archive: 'tar.gz' },
|
|
27
|
+
'win32-x64': { target: 'x86_64-pc-windows-msvc', archive: 'zip' },
|
|
28
|
+
};
|
|
29
|
+
export function resolveMetaProxyAsset(platform = process.platform, arch = process.arch, version = META_PROXY_VERSION) {
|
|
30
|
+
const entry = PLATFORM_TABLE[`${platform}-${arch}`];
|
|
31
|
+
if (!entry) {
|
|
32
|
+
throw new Error(`No signed Meta-Proxy release for ${platform}-${arch}. Supported: ${Object.keys(PLATFORM_TABLE).join(', ')}.`);
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
...entry,
|
|
36
|
+
assetName: `meta-proxy-${version}-${entry.target}.${entry.archive}`,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export function isValidReleaseVersion(value) {
|
|
40
|
+
return /^\d+\.\d+\.\d+(?:[-+][A-Za-z0-9.-]+)?$/.test(value);
|
|
41
|
+
}
|
|
42
|
+
export function sha256Hex(bytes) {
|
|
43
|
+
return createHash('sha256').update(bytes).digest('hex');
|
|
44
|
+
}
|
|
45
|
+
export function parseSha256Sums(text) {
|
|
46
|
+
const entries = new Map();
|
|
47
|
+
for (const line of text.split(/\r?\n/)) {
|
|
48
|
+
const match = line.trim().match(/^([0-9a-fA-F]{64})[ \t]+\*?(.+)$/);
|
|
49
|
+
if (match)
|
|
50
|
+
entries.set(match[2].trim(), match[1].toLowerCase());
|
|
51
|
+
}
|
|
52
|
+
return entries;
|
|
53
|
+
}
|
|
54
|
+
export function verifyMetaProxyChecksum(archive, assetName, sums) {
|
|
55
|
+
return parseSha256Sums(sums.toString('utf8')).get(assetName) === sha256Hex(archive);
|
|
56
|
+
}
|
|
57
|
+
/** Verify the raw SHA256SUMS bytes against the pinned Ed25519 release key. */
|
|
58
|
+
export function verifyMetaProxyManifest(sums, signatureBase64) {
|
|
59
|
+
try {
|
|
60
|
+
const signature = Buffer.from(signatureBase64.trim(), 'base64');
|
|
61
|
+
return signature.length > 0 && verifySignature(null, sums, createPublicKey(META_PROXY_SIGNING_PUBKEY_PEM), signature);
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export function metaProxyDataDir(home = homedir()) {
|
|
68
|
+
return process.env.METAHARNESS_META_PROXY_DIR?.trim() || join(home, '.metaharness', 'meta-proxy');
|
|
69
|
+
}
|
|
70
|
+
export function metaProxyBinaryPath(platform = process.platform, home = homedir()) {
|
|
71
|
+
return join(metaProxyDataDir(home), 'bin', platform === 'win32' ? 'meta-proxy.exe' : 'meta-proxy');
|
|
72
|
+
}
|
|
73
|
+
function pidPath(home = homedir()) {
|
|
74
|
+
return join(metaProxyDataDir(home), 'meta-proxy.pid');
|
|
75
|
+
}
|
|
76
|
+
function versionPath(bin) {
|
|
77
|
+
return `${bin}.version`;
|
|
78
|
+
}
|
|
79
|
+
async function fetchBytes(fetcher, url) {
|
|
80
|
+
try {
|
|
81
|
+
const response = await fetcher(url);
|
|
82
|
+
return response.ok ? Buffer.from(await response.arrayBuffer()) : null;
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
/** Download, authenticate, extract, and atomically install a Meta-Proxy release. */
|
|
89
|
+
export async function installMetaProxy(options = {}) {
|
|
90
|
+
const version = options.version ?? META_PROXY_VERSION;
|
|
91
|
+
if (!isValidReleaseVersion(version))
|
|
92
|
+
return { ok: false, message: `Invalid Meta-Proxy version "${version}".` };
|
|
93
|
+
let asset;
|
|
94
|
+
try {
|
|
95
|
+
asset = resolveMetaProxyAsset(options.platform, options.arch, version);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
return { ok: false, message: error instanceof Error ? error.message : String(error) };
|
|
99
|
+
}
|
|
100
|
+
const base = `${(options.releaseBase ?? META_PROXY_RELEASE_BASE).replace(/\/$/, '')}/v${version}`;
|
|
101
|
+
const fetcher = options.fetcher ?? globalThis.fetch;
|
|
102
|
+
const [archive, sums, signature] = await Promise.all([
|
|
103
|
+
fetchBytes(fetcher, `${base}/${asset.assetName}`),
|
|
104
|
+
fetchBytes(fetcher, `${base}/SHA256SUMS`),
|
|
105
|
+
fetchBytes(fetcher, `${base}/SHA256SUMS.sig`),
|
|
106
|
+
]);
|
|
107
|
+
if (!archive || !sums || !signature) {
|
|
108
|
+
return { ok: false, message: `Signed Meta-Proxy v${version} release assets were not available for ${asset.target}.` };
|
|
109
|
+
}
|
|
110
|
+
if (!verifyMetaProxyManifest(sums, signature.toString('utf8'))) {
|
|
111
|
+
return { ok: false, message: 'Meta-Proxy SHA256SUMS signature verification failed; refusing to install.' };
|
|
112
|
+
}
|
|
113
|
+
if (!verifyMetaProxyChecksum(archive, asset.assetName, sums)) {
|
|
114
|
+
return { ok: false, message: `Meta-Proxy checksum verification failed for ${asset.assetName}; refusing to install.` };
|
|
115
|
+
}
|
|
116
|
+
const root = metaProxyDataDir(options.home);
|
|
117
|
+
const binDir = join(root, 'bin');
|
|
118
|
+
mkdirSync(binDir, { recursive: true, mode: 0o700 });
|
|
119
|
+
const work = mkdtempSync(join(root, '.install-'));
|
|
120
|
+
try {
|
|
121
|
+
const archivePath = join(work, asset.assetName);
|
|
122
|
+
writeFileSync(archivePath, archive, { mode: 0o600 });
|
|
123
|
+
extractArchive(archivePath, asset.archive, work);
|
|
124
|
+
const binaryName = (options.platform ?? process.platform) === 'win32' ? 'meta-proxy.exe' : 'meta-proxy';
|
|
125
|
+
const extractedBinary = findFile(work, binaryName);
|
|
126
|
+
if (!extractedBinary)
|
|
127
|
+
return { ok: false, message: `Verified archive did not contain ${binaryName}.` };
|
|
128
|
+
const destination = metaProxyBinaryPath(options.platform, options.home);
|
|
129
|
+
if (existsSync(destination))
|
|
130
|
+
rmSync(destination, { force: true });
|
|
131
|
+
renameSync(extractedBinary, destination);
|
|
132
|
+
if ((options.platform ?? process.platform) !== 'win32')
|
|
133
|
+
chmodSync(destination, 0o755);
|
|
134
|
+
writeFileSync(versionPath(destination), `${version}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
135
|
+
return { ok: true, message: `Installed verified Meta-Proxy v${version} at ${destination}.`, binaryPath: destination, version };
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
return { ok: false, message: error instanceof Error ? error.message : String(error) };
|
|
139
|
+
}
|
|
140
|
+
finally {
|
|
141
|
+
rmSync(work, { recursive: true, force: true });
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
function extractArchive(archivePath, archive, work) {
|
|
145
|
+
const command = archive === 'zip' ? 'tar' : 'tar';
|
|
146
|
+
const args = archive === 'zip'
|
|
147
|
+
? ['-xf', archivePath, '-C', work]
|
|
148
|
+
: ['-xzf', archivePath, '-C', work];
|
|
149
|
+
const result = spawnSync(command, args, { encoding: 'utf8', timeout: 60_000 });
|
|
150
|
+
if (result.error || result.status !== 0) {
|
|
151
|
+
throw new Error(`Could not extract the Meta-Proxy archive: ${result.error?.message ?? result.stderr ?? `tar exited ${result.status}`}`);
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
function findFile(dir, basename) {
|
|
155
|
+
for (const entry of readdirSync(dir)) {
|
|
156
|
+
const candidate = join(dir, entry);
|
|
157
|
+
const stat = statSync(candidate);
|
|
158
|
+
if (stat.isDirectory()) {
|
|
159
|
+
const nested = findFile(candidate, basename);
|
|
160
|
+
if (nested)
|
|
161
|
+
return nested;
|
|
162
|
+
}
|
|
163
|
+
else if (entry === basename) {
|
|
164
|
+
return candidate;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
return null;
|
|
168
|
+
}
|
|
169
|
+
function processExists(pid) {
|
|
170
|
+
try {
|
|
171
|
+
process.kill(pid, 0);
|
|
172
|
+
return true;
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
return error.code === 'EPERM';
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* A pid file alone is not sufficient authority to terminate a process: operating
|
|
180
|
+
* systems eventually reuse PIDs. Confirm that it is still our exact executable
|
|
181
|
+
* before reporting it as managed or sending a stop signal.
|
|
182
|
+
*/
|
|
183
|
+
function processMatchesBinary(pid, binaryPath, platform) {
|
|
184
|
+
try {
|
|
185
|
+
if (platform === 'linux') {
|
|
186
|
+
const result = spawnSync('readlink', ['-f', `/proc/${pid}/exe`], { encoding: 'utf8', timeout: 2_000 });
|
|
187
|
+
return result.status === 0 && result.stdout.trim() === binaryPath;
|
|
188
|
+
}
|
|
189
|
+
if (platform === 'win32') {
|
|
190
|
+
const command = `$p = Get-CimInstance Win32_Process -Filter 'ProcessId = ${pid}'; if ($null -ne $p) { [Console]::Out.Write($p.ExecutablePath) }`;
|
|
191
|
+
const result = spawnSync('powershell.exe', ['-NoProfile', '-NonInteractive', '-Command', command], { encoding: 'utf8', timeout: 2_000, windowsHide: true });
|
|
192
|
+
return result.status === 0 && result.stdout.trim().toLowerCase() === binaryPath.toLowerCase();
|
|
193
|
+
}
|
|
194
|
+
const result = spawnSync('ps', ['-p', String(pid), '-o', 'comm='], { encoding: 'utf8', timeout: 2_000 });
|
|
195
|
+
return result.status === 0 && result.stdout.trim().endsWith(basename(binaryPath));
|
|
196
|
+
}
|
|
197
|
+
catch {
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
export function metaProxyStatus(home = homedir(), platform = process.platform) {
|
|
202
|
+
const binaryPath = metaProxyBinaryPath(platform, home);
|
|
203
|
+
const installed = existsSync(binaryPath);
|
|
204
|
+
let version = null;
|
|
205
|
+
try {
|
|
206
|
+
version = readFileSync(versionPath(binaryPath), 'utf8').trim() || null;
|
|
207
|
+
}
|
|
208
|
+
catch { /* no sidecar */ }
|
|
209
|
+
let pid = null;
|
|
210
|
+
try {
|
|
211
|
+
const parsed = Number.parseInt(readFileSync(pidPath(home), 'utf8').trim(), 10);
|
|
212
|
+
if (Number.isSafeInteger(parsed) && parsed > 0 && processExists(parsed) && processMatchesBinary(parsed, binaryPath, platform))
|
|
213
|
+
pid = parsed;
|
|
214
|
+
}
|
|
215
|
+
catch { /* no managed process */ }
|
|
216
|
+
return { installed, running: pid !== null, binaryPath, version, pid };
|
|
217
|
+
}
|
|
218
|
+
export function startMetaProxy(home = homedir(), platform = process.platform) {
|
|
219
|
+
const status = metaProxyStatus(home, platform);
|
|
220
|
+
if (!status.installed)
|
|
221
|
+
return { ok: false, message: 'Meta-Proxy is not installed. Run `metaharness proxy install --yes` first.' };
|
|
222
|
+
if (status.running)
|
|
223
|
+
return { ok: true, message: `Meta-Proxy is already running (pid ${status.pid}).`, binaryPath: status.binaryPath, version: status.version ?? undefined };
|
|
224
|
+
const root = metaProxyDataDir(home);
|
|
225
|
+
mkdirSync(root, { recursive: true, mode: 0o700 });
|
|
226
|
+
const log = openSync(join(root, 'meta-proxy.log'), 'a', 0o600);
|
|
227
|
+
try {
|
|
228
|
+
const child = spawn(status.binaryPath, [], { detached: true, stdio: ['ignore', log, log], windowsHide: true });
|
|
229
|
+
if (!child.pid)
|
|
230
|
+
return { ok: false, message: 'Meta-Proxy did not return a process id.' };
|
|
231
|
+
child.unref();
|
|
232
|
+
writeFileSync(pidPath(home), `${child.pid}\n`, { encoding: 'utf8', mode: 0o600 });
|
|
233
|
+
return { ok: true, message: `Meta-Proxy started (pid ${child.pid}).`, binaryPath: status.binaryPath, version: status.version ?? undefined };
|
|
234
|
+
}
|
|
235
|
+
finally {
|
|
236
|
+
closeSync(log);
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
export function stopMetaProxy(home = homedir()) {
|
|
240
|
+
let pid;
|
|
241
|
+
try {
|
|
242
|
+
pid = Number.parseInt(readFileSync(pidPath(home), 'utf8').trim(), 10);
|
|
243
|
+
}
|
|
244
|
+
catch {
|
|
245
|
+
return { ok: true, message: 'Meta-Proxy is not running (no managed pid file).' };
|
|
246
|
+
}
|
|
247
|
+
const status = metaProxyStatus(home);
|
|
248
|
+
if (!Number.isSafeInteger(pid) || pid <= 0 || !status.running || status.pid !== pid) {
|
|
249
|
+
rmSync(pidPath(home), { force: true });
|
|
250
|
+
return { ok: true, message: 'Meta-Proxy is not running under this managed binary (stale pid file removed).' };
|
|
251
|
+
}
|
|
252
|
+
try {
|
|
253
|
+
process.kill(pid, 'SIGTERM');
|
|
254
|
+
rmSync(pidPath(home), { force: true });
|
|
255
|
+
return { ok: true, message: `Meta-Proxy stop requested (pid ${pid}).` };
|
|
256
|
+
}
|
|
257
|
+
catch (error) {
|
|
258
|
+
return { ok: false, message: `Could not stop Meta-Proxy pid ${pid}: ${error instanceof Error ? error.message : String(error)}` };
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/** `metaharness proxy` command surface. OAuth remains inside the Meta-Proxy binary. */
|
|
262
|
+
export async function metaProxyCmd(args) {
|
|
263
|
+
const subcommand = args[0] ?? 'help';
|
|
264
|
+
if (subcommand === 'help' || subcommand === '--help' || subcommand === '-h') {
|
|
265
|
+
return {
|
|
266
|
+
code: 0,
|
|
267
|
+
lines: [
|
|
268
|
+
'Usage: metaharness proxy <install|status|start|stop|path|login|logout> [options]',
|
|
269
|
+
'',
|
|
270
|
+
'Optional signed Meta-Proxy sidecar for local Claude-compatible routing.',
|
|
271
|
+
` install [--version ${META_PROXY_VERSION}] --yes download, verify, and install`,
|
|
272
|
+
' status show installed version and managed process state',
|
|
273
|
+
' start | stop | path manage the optional local sidecar',
|
|
274
|
+
' login | logout run Meta-Proxy Cognitum OAuth login/logout',
|
|
275
|
+
],
|
|
276
|
+
};
|
|
277
|
+
}
|
|
278
|
+
if (subcommand === 'install') {
|
|
279
|
+
const versionIndex = args.indexOf('--version');
|
|
280
|
+
const version = versionIndex >= 0 ? args[versionIndex + 1] : undefined;
|
|
281
|
+
if (versionIndex >= 0 && !version)
|
|
282
|
+
return { code: 2, lines: ['--version requires a value, for example 0.3.0.'] };
|
|
283
|
+
if (!args.includes('--yes')) {
|
|
284
|
+
return { code: 2, lines: ['Refusing to download a binary without explicit consent. Re-run: metaharness proxy install --yes'] };
|
|
285
|
+
}
|
|
286
|
+
const result = await installMetaProxy({ version });
|
|
287
|
+
return { code: result.ok ? 0 : 1, lines: [result.message] };
|
|
288
|
+
}
|
|
289
|
+
if (subcommand === 'status') {
|
|
290
|
+
const status = metaProxyStatus();
|
|
291
|
+
return {
|
|
292
|
+
code: status.installed ? 0 : 1,
|
|
293
|
+
lines: [
|
|
294
|
+
'Meta-Proxy',
|
|
295
|
+
` installed: ${status.installed ? 'yes' : 'no'}`,
|
|
296
|
+
` binary: ${status.binaryPath}`,
|
|
297
|
+
` version: ${status.version ?? 'unknown'}`,
|
|
298
|
+
` managed process: ${status.running ? `running (pid ${status.pid})` : 'not running'}`,
|
|
299
|
+
],
|
|
300
|
+
};
|
|
301
|
+
}
|
|
302
|
+
if (subcommand === 'path') {
|
|
303
|
+
const status = metaProxyStatus();
|
|
304
|
+
return { code: status.installed ? 0 : 1, lines: status.installed ? [status.binaryPath] : ['Meta-Proxy is not installed. Run `metaharness proxy install --yes`.'] };
|
|
305
|
+
}
|
|
306
|
+
if (subcommand === 'start') {
|
|
307
|
+
const result = startMetaProxy();
|
|
308
|
+
return { code: result.ok ? 0 : 1, lines: [result.message] };
|
|
309
|
+
}
|
|
310
|
+
if (subcommand === 'stop') {
|
|
311
|
+
const result = stopMetaProxy();
|
|
312
|
+
return { code: result.ok ? 0 : 1, lines: [result.message] };
|
|
313
|
+
}
|
|
314
|
+
if (subcommand === 'login' || subcommand === 'logout') {
|
|
315
|
+
const status = metaProxyStatus();
|
|
316
|
+
if (!status.installed)
|
|
317
|
+
return { code: 1, lines: ['Meta-Proxy is not installed. Run `metaharness proxy install --yes` first.'] };
|
|
318
|
+
const result = spawnSync(status.binaryPath, [subcommand, ...args.slice(1)], { stdio: 'inherit', windowsHide: true });
|
|
319
|
+
if (result.error)
|
|
320
|
+
return { code: 1, lines: [`Could not run Meta-Proxy ${subcommand}: ${result.error.message}`] };
|
|
321
|
+
return { code: result.status ?? 1, lines: [] };
|
|
322
|
+
}
|
|
323
|
+
return { code: 2, lines: [`Unknown proxy subcommand "${subcommand}". Try: install | status | start | stop | path | login | logout`] };
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=meta-proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"meta-proxy.js","sourceRoot":"","sources":["../src/meta-proxy.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-cmd.d.ts","sourceRoot":"","sources":["../src/publish-cmd.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEjE;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"publish-cmd.d.ts","sourceRoot":"","sources":["../src/publish-cmd.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEjE;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA+C1E"}
|
package/dist/publish-cmd.js
CHANGED
|
@@ -19,8 +19,12 @@ export async function publishCmd(args) {
|
|
|
19
19
|
const positional = args.filter(a => !a.startsWith('--'));
|
|
20
20
|
const dir = resolve(positional[0] ?? process.cwd());
|
|
21
21
|
const confirm = args.includes('--confirm');
|
|
22
|
+
const allowUnverified = args.includes('--allow-unverified-witness');
|
|
22
23
|
const nameOverride = args.find(a => a.startsWith('--name='))?.slice('--name='.length);
|
|
23
24
|
const lines = [`harness publish — ${dir} ${confirm ? '(CONFIRMED)' : '(DRY-RUN)'}`];
|
|
25
|
+
if (allowUnverified) {
|
|
26
|
+
lines.push(' ⚠️ --allow-unverified-witness: the witness signature will NOT be cryptographically checked.');
|
|
27
|
+
}
|
|
24
28
|
if (confirm) {
|
|
25
29
|
const jwt = process.env.PINATA_JWT;
|
|
26
30
|
if (!jwt) {
|
|
@@ -36,6 +40,7 @@ export async function publishCmd(args) {
|
|
|
36
40
|
},
|
|
37
41
|
confirm,
|
|
38
42
|
name: nameOverride,
|
|
43
|
+
allowUnverified,
|
|
39
44
|
});
|
|
40
45
|
lines.push(` manifest CID: ${r.manifestCid}`);
|
|
41
46
|
lines.push(` size: ${r.manifestSize} bytes`);
|
package/dist/publish-cmd.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish-cmd.js","sourceRoot":"","sources":["../src/publish-cmd.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,uDAAuD;AACvD,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,qEAAqE;AACrE,2BAA2B;AAC3B,EAAE;AACF,oCAAoC;AACpC,8DAA8D;AAC9D,oCAAoC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEtF,MAAM,KAAK,GAAa,CAAC,qBAAqB,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"publish-cmd.js","sourceRoot":"","sources":["../src/publish-cmd.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,uDAAuD;AACvD,EAAE;AACF,sEAAsE;AACtE,sEAAsE;AACtE,qEAAqE;AACrE,2BAA2B;AAC3B,EAAE;AACF,oCAAoC;AACpC,8DAA8D;AAC9D,oCAAoC;AAEpC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAI9C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAc;IAC7C,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACpD,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IAEtF,MAAM,KAAK,GAAa,CAAC,qBAAqB,GAAG,IAAI,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;IAC9F,IAAI,eAAe,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAC;IAC/G,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC;QACnC,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,KAAK,CAAC,IAAI,CACR,+BAA+B,EAC/B,gDAAgD,EAChD,iCAAiC,CAClC,CAAC;YACF,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,CAAC,GAAG,MAAM,cAAc,CAAC;YAC7B,UAAU,EAAE,GAAG;YACf,MAAM,EAAE;gBACN,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,gBAAgB;aAChD;YACD,OAAO;YACP,IAAI,EAAE,YAAY;YAClB,eAAe;SAChB,CAAC,CAAC;QACH,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,YAAY,QAAQ,CAAC,CAAC;QAC9C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YACjB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,8DAA8D,CAAC,CAAC;QACjF,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,gFAAgF,CAAC,CAAC;QACnG,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QACpE,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC"}
|
package/dist/publish.d.ts
CHANGED
|
@@ -31,6 +31,12 @@ export interface HarnessPublishOptions {
|
|
|
31
31
|
confirm: boolean;
|
|
32
32
|
/** Optional override of the harness's name (defaults to manifest.vars.name). */
|
|
33
33
|
name?: string;
|
|
34
|
+
/**
|
|
35
|
+
* GH #4 (HIGH-1): explicitly publish even when a present witness could NOT be cryptographically
|
|
36
|
+
* verified (no verifier available). Off by default — publishing is fail-closed on an unverified
|
|
37
|
+
* witness so a garbage signature can't masquerade as signed. The signature is NOT checked when set.
|
|
38
|
+
*/
|
|
39
|
+
allowUnverified?: boolean;
|
|
34
40
|
}
|
|
35
41
|
export interface PublishResult {
|
|
36
42
|
/** IPFS CID of the pinned manifest. */
|
package/dist/publish.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC7D,OAAO,CAAC,SAAS,CAAC,CAiCpB;AAED,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAqBA,MAAM,WAAW,YAAY;IAC3B,6EAA6E;IAC7E,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,SAAS;IACxB,4CAA4C;IAC5C,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,OAAO,CAC3B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GAC7D,OAAO,CAAC,SAAS,CAAC,CAiCpB;AAED,MAAM,WAAW,qBAAqB;IACpC,wEAAwE;IACxE,UAAU,EAAE,MAAM,CAAC;IACnB,qBAAqB;IACrB,MAAM,EAAE,YAAY,CAAC;IACrB,yEAAyE;IACzE,OAAO,EAAE,OAAO,CAAC;IACjB,gFAAgF;IAChF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,aAAa;IAC5B,uCAAuC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,oBAAoB;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,qDAAqD;IACrD,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,aAAa,CAAC,CAmDxF"}
|
package/dist/publish.js
CHANGED
|
@@ -80,6 +80,15 @@ export async function publishHarness(opts) {
|
|
|
80
80
|
if (!result.valid) {
|
|
81
81
|
throw new Error(`witness verification failed: ${result.reason ?? 'unknown'}`);
|
|
82
82
|
}
|
|
83
|
+
// GH #4 (HIGH-1): a witness whose signature was NOT cryptographically verified (shape-only
|
|
84
|
+
// degraded mode — no kernel verifier) must NOT be published as "signed". Before this, that path
|
|
85
|
+
// returned valid:true, so a shape-valid witness carrying a garbage signature published silently as
|
|
86
|
+
// verified. Fail closed unless the caller explicitly opts in (and is then told the sig was unchecked).
|
|
87
|
+
if (result.unverified && !opts.allowUnverified) {
|
|
88
|
+
throw new Error(`witness present at ${witnessPath} but its signature was NOT cryptographically verified ` +
|
|
89
|
+
`(${result.reason ?? 'no verifier available'}). Refusing to publish this harness as signed. ` +
|
|
90
|
+
`Re-run with --allow-unverified-witness to publish anyway — the signature will NOT have been checked.`);
|
|
91
|
+
}
|
|
83
92
|
}
|
|
84
93
|
if (!opts.confirm) {
|
|
85
94
|
return {
|
package/dist/publish.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,uEAAuE;AACvE,sDAAsD;AACtD,EAAE;AACF,yEAAyE;AACzE,sEAAsE;AACtE,uEAAuE;AACvE,wEAAwE;AACxE,EAAE;AACF,YAAY;AACZ,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,uBAAuB;AAEvB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAkBjE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAoB,EACpB,OAAgB,EAChB,QAA8D;IAE9D,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,0BAA0B,CAAC;IAC7D,MAAM,GAAG,GAAG,GAAG,OAAO,wBAAwB,CAAC;IAE/C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,aAAa,EAAE,OAAO;QACtB,cAAc,EAAE,QAAQ;QACxB,aAAa,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;KACjC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,CAAC,GAAG,EAAE;YACvC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,MAAM,GAAG,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA8D,CAAC;IAC1F,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,QAAQ;QAClB,IAAI,EAAE,IAAI,CAAC,OAAO;QAClB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;AACJ,CAAC;
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,uEAAuE;AACvE,sDAAsD;AACtD,EAAE;AACF,yEAAyE;AACzE,sEAAsE;AACtE,uEAAuE;AACvE,wEAAwE;AACxE,EAAE;AACF,YAAY;AACZ,wEAAwE;AACxE,yEAAyE;AACzE,uEAAuE;AACvE,uBAAuB;AAEvB,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAkBjE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,MAAoB,EACpB,OAAgB,EAChB,QAA8D;IAE9D,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,uEAAuE,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,0BAA0B,CAAC;IAC7D,MAAM,GAAG,GAAG,GAAG,OAAO,wBAAwB,CAAC;IAE/C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC1B,aAAa,EAAE,OAAO;QACtB,cAAc,EAAE,QAAQ;QACxB,aAAa,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;KACjC,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;QAC3B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,eAAe,EAAE,UAAU,MAAM,CAAC,GAAG,EAAE;YACvC,cAAc,EAAE,kBAAkB;SACnC;QACD,IAAI;KACL,CAAC,CAAC;IAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,2BAA2B,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,MAAM,GAAG,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAA8D,CAAC;IAC1F,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,QAAQ;QAClB,IAAI,EAAE,IAAI,CAAC,OAAO;QAClB,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC;AACJ,CAAC;AA4BD;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAA2B;IAC9D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC,CAAC;IACxE,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,kBAAkB,YAAY,SAAS,IAAI,CAAC,UAAU,uBAAuB,CAAC,CAAC;IACjG,CAAC;IACD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAA4B,CAAC;IAE5D,qEAAqE;IACrE,wEAAwE;IACxE,6CAA6C;IAC7C,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,WAAW,CAAC,CAAC;QACpD,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,gCAAgC,MAAM,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,2FAA2F;QAC3F,gGAAgG;QAChG,mGAAmG;QACnG,uGAAuG;QACvG,IAAI,MAAM,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,sBAAsB,WAAW,wDAAwD;gBACzF,IAAI,MAAM,CAAC,MAAM,IAAI,uBAAuB,iDAAiD;gBAC7F,sGAAsG,CACvG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO;YACL,WAAW,EAAE,gBAAgB;YAC7B,YAAY,EAAE,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC;YAC7C,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE;QAClD,IAAI,EAAE,IAAI,CAAC,IAAI,IAAK,QAAQ,CAAC,MAAM,CAAmC,EAAE,IAAI,IAAI,SAAS;QACzF,SAAS,EAAE;YACT,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YAC5C,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;SAC/C;KACF,CAAC,CAAC;IAEH,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,GAAG;QACvB,YAAY,EAAE,MAAM,CAAC,IAAI;QACzB,SAAS,EAAE,IAAI;KAChB,CAAC;AACJ,CAAC"}
|
package/dist/redact.d.ts
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heuristic: does this STRING look like a secret, independent of the key it's stored under?
|
|
3
|
+
*
|
|
4
|
+
* Conservative by construction — precision is favoured over recall because over-redacting a legitimate
|
|
5
|
+
* value in a score/genome dump is a real (if smaller) cost:
|
|
6
|
+
* 1. a known provider token prefix (sk-/ghp_/AKIA/AIza/JWT/PEM/…) — high confidence, OR
|
|
7
|
+
* 2. a generic ≥40-char base64/token run that is MIXED-CASE alphanumeric (letters+digits, upper+lower).
|
|
8
|
+
*
|
|
9
|
+
* The mixed-case+digit requirement in (2) deliberately EXCLUDES lowercase-hex git SHAs, uppercase-hex
|
|
10
|
+
* digests, and dashed UUIDs — all common NON-secret identifiers — so we don't redact them.
|
|
11
|
+
*/
|
|
12
|
+
export declare function looksLikeSecretValue(s: unknown): boolean;
|
|
13
|
+
export interface RedactOptions {
|
|
14
|
+
/** Redact a value when its KEY name matches (the existing behaviour of every call site). */
|
|
15
|
+
keyRe: RegExp;
|
|
16
|
+
/** The replacement token — kept per-site (`<redacted>` for bundles, `[REDACTED]` for score/genome/threat). */
|
|
17
|
+
replacement: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Deep-copy `value`, redacting (a) any object value whose KEY matches `keyRe`, and (b) any string
|
|
21
|
+
* value that `looksLikeSecretValue` — anywhere in the tree, including a bare top-level string.
|
|
22
|
+
* Non-string primitives pass through. Pure (no I/O); safe to run on untrusted manifest/config data.
|
|
23
|
+
*/
|
|
24
|
+
export declare function redactSecretsDeep(value: unknown, opts: RedactOptions): unknown;
|
|
25
|
+
//# sourceMappingURL=redact.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAkBA;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CASxD;AAED,MAAM,WAAW,aAAa;IAC5B,4FAA4F;IAC5F,KAAK,EAAE,MAAM,CAAC;IACd,8GAA8G;IAC9G,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,GAAG,OAAO,CAa9E"}
|
package/dist/redact.js
ADDED
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
//
|
|
3
|
+
// Single source of truth for secret redaction in every user-facing output surface — the diag
|
|
4
|
+
// support-bundle, export-config, score/genome/threat-model sanitisers (GH #4 finding #7). Before this,
|
|
5
|
+
// five copies of the same recursive redactor each keyed ONLY on object-key NAMES, so a secret-shaped
|
|
6
|
+
// VALUE landing in a field NOT named secret/token/key (e.g. a token pasted into a `vars` entry) sailed
|
|
7
|
+
// through into a `harness diag --bundle` a user pastes into a GitHub issue — the exact HIGH-2 leak in #4
|
|
8
|
+
// (the "bundle is sanitised" promise was value-blind). This module adds VALUE-aware detection on top of
|
|
9
|
+
// the key-name pass, so both a secret-named key AND a secret-shaped value redact.
|
|
10
|
+
// High-confidence provider token shapes (prefix-anchored — near-zero false positives).
|
|
11
|
+
const SECRET_PREFIX_RE = /(?:^|[^A-Za-z0-9])(sk-[A-Za-z0-9]|sk-ant-|rk_[A-Za-z0-9]|ghp_|gho_|ghu_|ghs_|github_pat_|glpat-|xox[baprs]-|AKIA[0-9A-Z]{16}|ASIA[0-9A-Z]{16}|AIza[0-9A-Za-z_-]{10,}|ya29\.|npm_[A-Za-z0-9]{20}|AC[a-z0-9]{30,}|SK[a-z0-9]{30,})/;
|
|
12
|
+
// PEM private-key blocks.
|
|
13
|
+
const PEM_RE = /-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP )?PRIVATE KEY-----/;
|
|
14
|
+
// JWT (header.payload.signature, all base64url).
|
|
15
|
+
const JWT_RE = /\beyJ[A-Za-z0-9_-]{8,}\.eyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/;
|
|
16
|
+
/**
|
|
17
|
+
* Heuristic: does this STRING look like a secret, independent of the key it's stored under?
|
|
18
|
+
*
|
|
19
|
+
* Conservative by construction — precision is favoured over recall because over-redacting a legitimate
|
|
20
|
+
* value in a score/genome dump is a real (if smaller) cost:
|
|
21
|
+
* 1. a known provider token prefix (sk-/ghp_/AKIA/AIza/JWT/PEM/…) — high confidence, OR
|
|
22
|
+
* 2. a generic ≥40-char base64/token run that is MIXED-CASE alphanumeric (letters+digits, upper+lower).
|
|
23
|
+
*
|
|
24
|
+
* The mixed-case+digit requirement in (2) deliberately EXCLUDES lowercase-hex git SHAs, uppercase-hex
|
|
25
|
+
* digests, and dashed UUIDs — all common NON-secret identifiers — so we don't redact them.
|
|
26
|
+
*/
|
|
27
|
+
export function looksLikeSecretValue(s) {
|
|
28
|
+
if (typeof s !== 'string' || s.length < 20)
|
|
29
|
+
return false;
|
|
30
|
+
if (PEM_RE.test(s) || JWT_RE.test(s) || SECRET_PREFIX_RE.test(s))
|
|
31
|
+
return true;
|
|
32
|
+
const m = s.match(/[A-Za-z0-9_\-+/=]{40,}/);
|
|
33
|
+
if (m) {
|
|
34
|
+
const tok = m[0];
|
|
35
|
+
if (/[A-Z]/.test(tok) && /[a-z]/.test(tok) && /[0-9]/.test(tok))
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Deep-copy `value`, redacting (a) any object value whose KEY matches `keyRe`, and (b) any string
|
|
42
|
+
* value that `looksLikeSecretValue` — anywhere in the tree, including a bare top-level string.
|
|
43
|
+
* Non-string primitives pass through. Pure (no I/O); safe to run on untrusted manifest/config data.
|
|
44
|
+
*/
|
|
45
|
+
export function redactSecretsDeep(value, opts) {
|
|
46
|
+
const { keyRe, replacement } = opts;
|
|
47
|
+
if (value == null)
|
|
48
|
+
return value;
|
|
49
|
+
if (typeof value === 'string')
|
|
50
|
+
return looksLikeSecretValue(value) ? replacement : value;
|
|
51
|
+
if (Array.isArray(value))
|
|
52
|
+
return value.map(v => redactSecretsDeep(v, opts));
|
|
53
|
+
if (typeof value === 'object') {
|
|
54
|
+
const out = {};
|
|
55
|
+
for (const [k, v] of Object.entries(value)) {
|
|
56
|
+
out[k] = keyRe.test(k) ? replacement : redactSecretsDeep(v, opts);
|
|
57
|
+
}
|
|
58
|
+
return out;
|
|
59
|
+
}
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=redact.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../src/redact.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,6FAA6F;AAC7F,uGAAuG;AACvG,qGAAqG;AACrG,uGAAuG;AACvG,yGAAyG;AACzG,wGAAwG;AACxG,kFAAkF;AAElF,uFAAuF;AACvF,MAAM,gBAAgB,GACpB,kOAAkO,CAAC;AACrO,0BAA0B;AAC1B,MAAM,MAAM,GAAG,6DAA6D,CAAC;AAC7E,iDAAiD;AACjD,MAAM,MAAM,GAAG,mEAAmE,CAAC;AAEnF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,CAAU;IAC7C,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,EAAE;QAAE,OAAO,KAAK,CAAC;IACzD,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAC9E,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,IAAI,CAAC,EAAE,CAAC;QACN,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjB,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC/E,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AASD;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc,EAAE,IAAmB;IACnE,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IACpC,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC;IACxF,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;IAC5E,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,GAAG,GAA4B,EAAE,CAAC;QACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC,EAAE,CAAC;YACtE,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QACpE,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
package/dist/score.d.ts
CHANGED
|
@@ -2,6 +2,15 @@ export type SubcommandResult = {
|
|
|
2
2
|
code: number;
|
|
3
3
|
lines: string[];
|
|
4
4
|
};
|
|
5
|
+
/**
|
|
6
|
+
* #15 — schema discriminator for the `harness score` badge JSON (`--json` / `--out`). It lets a
|
|
7
|
+
* downstream consumer detect this shape at the data layer and REFUSE the wrong one: `harness score`
|
|
8
|
+
* (this flat badge set) and `metaharness score` (the repo-scorecard, numeric `schema: 1`) are
|
|
9
|
+
* DIFFERENT operations with different keys, and an unmarked badge blob silently mis-parsed as the
|
|
10
|
+
* metaharness scorecard (every numeric field defaulting to 0). A string id is unambiguously distinct
|
|
11
|
+
* from the numeric `schema: 1`.
|
|
12
|
+
*/
|
|
13
|
+
export declare const HARNESS_SCORE_SCHEMA = "harness-quickcheck-v1";
|
|
5
14
|
interface DimensionScore {
|
|
6
15
|
name: string;
|
|
7
16
|
weight: number;
|
package/dist/score.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../src/score.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"score.d.ts","sourceRoot":"","sources":["../src/score.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAEjE;;;;;;;GAOG;AACH,eAAO,MAAM,oBAAoB,0BAA0B,CAAC;AAE5D,UAAU,cAAc;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,CAAC,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC7B,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;QAC5C,YAAY,EAAE,OAAO,CAAC;QACtB,aAAa,EAAE,OAAO,CAAC;QACvB,IAAI,EAAE,OAAO,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;CACrB;AAuMD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,GAAE,MAAiC,GAAG,SAAS,CA+CrG;AAcD,wBAAgB,eAAe,CAAC,EAAE,EAAE,SAAS,GAAG,MAAM,EAAE,CAqBvD;AA2BD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8DxE"}
|
package/dist/score.js
CHANGED
|
@@ -20,6 +20,16 @@
|
|
|
20
20
|
// - score < 50 → 'F' (exit 2, blocked)
|
|
21
21
|
import { existsSync, statSync, writeFileSync, readFileSync, readdirSync } from 'node:fs';
|
|
22
22
|
import { resolve, join } from 'node:path';
|
|
23
|
+
import { redactSecretsDeep } from './redact.js';
|
|
24
|
+
/**
|
|
25
|
+
* #15 — schema discriminator for the `harness score` badge JSON (`--json` / `--out`). It lets a
|
|
26
|
+
* downstream consumer detect this shape at the data layer and REFUSE the wrong one: `harness score`
|
|
27
|
+
* (this flat badge set) and `metaharness score` (the repo-scorecard, numeric `schema: 1`) are
|
|
28
|
+
* DIFFERENT operations with different keys, and an unmarked badge blob silently mis-parsed as the
|
|
29
|
+
* metaharness scorecard (every numeric field defaulting to 0). A string id is unambiguously distinct
|
|
30
|
+
* from the numeric `schema: 1`.
|
|
31
|
+
*/
|
|
32
|
+
export const HARNESS_SCORE_SCHEMA = 'harness-quickcheck-v1';
|
|
23
33
|
// --- helpers ---------------------------------------------------------------
|
|
24
34
|
function safeReadJson(path) {
|
|
25
35
|
try {
|
|
@@ -293,19 +303,9 @@ export function formatScorecard(sc) {
|
|
|
293
303
|
}
|
|
294
304
|
// --- sanitisation (ADR-031) ------------------------------------------------
|
|
295
305
|
const SECRET_RE = /(secret|token|key|password|passphrase)/i;
|
|
306
|
+
// GH #4 (HIGH-2): redact by KEY name AND by VALUE shape (redact.ts — single source of truth, #7).
|
|
296
307
|
function sanitise(v) {
|
|
297
|
-
|
|
298
|
-
return v;
|
|
299
|
-
if (Array.isArray(v))
|
|
300
|
-
return v.map(sanitise);
|
|
301
|
-
if (typeof v === 'object') {
|
|
302
|
-
const out = {};
|
|
303
|
-
for (const [k, val] of Object.entries(v)) {
|
|
304
|
-
out[k] = SECRET_RE.test(k) ? '[REDACTED]' : sanitise(val);
|
|
305
|
-
}
|
|
306
|
-
return out;
|
|
307
|
-
}
|
|
308
|
-
return v;
|
|
308
|
+
return redactSecretsDeep(v, { keyRe: SECRET_RE, replacement: '[REDACTED]' });
|
|
309
309
|
}
|
|
310
310
|
// --- dispatch --------------------------------------------------------------
|
|
311
311
|
function usage() {
|
|
@@ -361,9 +361,15 @@ export async function scoreCmd(args) {
|
|
|
361
361
|
return { code: 2, lines: [`harness score: not a directory: ${dir}`] };
|
|
362
362
|
}
|
|
363
363
|
const sc = buildScorecard(dir);
|
|
364
|
+
// #15 — carry the schema discriminator on the badge output so a consumer can detect this shape at
|
|
365
|
+
// the DATA layer. `harness score` and `metaharness score` are DIFFERENT operations with different
|
|
366
|
+
// JSON shapes; an unmarked badge blob was silently mis-parsed as the `metaharness score` scorecard
|
|
367
|
+
// (every field defaulting to 0). The metaharness scorecard uses numeric `schema: 1`; this string id
|
|
368
|
+
// is unambiguously distinct so downstream code can refuse the wrong shape instead of guessing.
|
|
369
|
+
const badgeOutput = { schema: HARNESS_SCORE_SCHEMA, ...sc.badges };
|
|
364
370
|
if (outPath) {
|
|
365
371
|
try {
|
|
366
|
-
writeFileSync(resolve(outPath), JSON.stringify(
|
|
372
|
+
writeFileSync(resolve(outPath), JSON.stringify(badgeOutput, null, 2) + '\n', 'utf-8');
|
|
367
373
|
}
|
|
368
374
|
catch (e) {
|
|
369
375
|
const err = { schema: 1, error: 'out-write-failed', detail: String(e), exitCode: 2 };
|
|
@@ -374,7 +380,7 @@ export async function scoreCmd(args) {
|
|
|
374
380
|
return { code: sc.exitCode, lines: [JSON.stringify(sanitise(sc), null, 2)] };
|
|
375
381
|
}
|
|
376
382
|
if (json) {
|
|
377
|
-
return { code: sc.exitCode, lines: [JSON.stringify(
|
|
383
|
+
return { code: sc.exitCode, lines: [JSON.stringify(badgeOutput, null, 2)] };
|
|
378
384
|
}
|
|
379
385
|
return { code: sc.exitCode, lines: formatScorecard(sc) };
|
|
380
386
|
}
|