metaharness 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +73 -0
  3. package/dist/analyze-repo.d.ts +74 -0
  4. package/dist/analyze-repo.d.ts.map +1 -0
  5. package/dist/analyze-repo.js +329 -0
  6. package/dist/analyze-repo.js.map +1 -0
  7. package/dist/audit-cmd.d.ts +6 -0
  8. package/dist/audit-cmd.d.ts.map +1 -0
  9. package/dist/audit-cmd.js +139 -0
  10. package/dist/audit-cmd.js.map +1 -0
  11. package/dist/bin.d.ts +3 -0
  12. package/dist/bin.d.ts.map +1 -0
  13. package/dist/bin.js +8 -0
  14. package/dist/bin.js.map +1 -0
  15. package/dist/compare-cmd.d.ts +56 -0
  16. package/dist/compare-cmd.d.ts.map +1 -0
  17. package/dist/compare-cmd.js +173 -0
  18. package/dist/compare-cmd.js.map +1 -0
  19. package/dist/completions-cmd.d.ts +6 -0
  20. package/dist/completions-cmd.d.ts.map +1 -0
  21. package/dist/completions-cmd.js +171 -0
  22. package/dist/completions-cmd.js.map +1 -0
  23. package/dist/diag.d.ts +76 -0
  24. package/dist/diag.d.ts.map +1 -0
  25. package/dist/diag.js +349 -0
  26. package/dist/diag.js.map +1 -0
  27. package/dist/eject.d.ts +33 -0
  28. package/dist/eject.d.ts.map +1 -0
  29. package/dist/eject.js +147 -0
  30. package/dist/eject.js.map +1 -0
  31. package/dist/export-config.d.ts +25 -0
  32. package/dist/export-config.d.ts.map +1 -0
  33. package/dist/export-config.js +134 -0
  34. package/dist/export-config.js.map +1 -0
  35. package/dist/external-template.d.ts +19 -0
  36. package/dist/external-template.d.ts.map +1 -0
  37. package/dist/external-template.js +37 -0
  38. package/dist/external-template.js.map +1 -0
  39. package/dist/federate.d.ts +37 -0
  40. package/dist/federate.d.ts.map +1 -0
  41. package/dist/federate.js +167 -0
  42. package/dist/federate.js.map +1 -0
  43. package/dist/genome-scorers.d.ts +33 -0
  44. package/dist/genome-scorers.d.ts.map +1 -0
  45. package/dist/genome-scorers.js +115 -0
  46. package/dist/genome-scorers.js.map +1 -0
  47. package/dist/genome.d.ts +28 -0
  48. package/dist/genome.d.ts.map +1 -0
  49. package/dist/genome.js +219 -0
  50. package/dist/genome.js.map +1 -0
  51. package/dist/harness-bin.d.ts +3 -0
  52. package/dist/harness-bin.d.ts.map +1 -0
  53. package/dist/harness-bin.js +17 -0
  54. package/dist/harness-bin.js.map +1 -0
  55. package/dist/index.d.ts +79 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +409 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/manifest.d.ts +55 -0
  60. package/dist/manifest.d.ts.map +1 -0
  61. package/dist/manifest.js +62 -0
  62. package/dist/manifest.js.map +1 -0
  63. package/dist/mcp-cmd.d.ts +19 -0
  64. package/dist/mcp-cmd.d.ts.map +1 -0
  65. package/dist/mcp-cmd.js +179 -0
  66. package/dist/mcp-cmd.js.map +1 -0
  67. package/dist/mcp-scan.d.ts +25 -0
  68. package/dist/mcp-scan.d.ts.map +1 -0
  69. package/dist/mcp-scan.js +132 -0
  70. package/dist/mcp-scan.js.map +1 -0
  71. package/dist/oia-manifest.d.ts +97 -0
  72. package/dist/oia-manifest.d.ts.map +1 -0
  73. package/dist/oia-manifest.js +241 -0
  74. package/dist/oia-manifest.js.map +1 -0
  75. package/dist/publish-cmd.d.ts +9 -0
  76. package/dist/publish-cmd.d.ts.map +1 -0
  77. package/dist/publish-cmd.js +56 -0
  78. package/dist/publish-cmd.js.map +1 -0
  79. package/dist/publish.d.ts +55 -0
  80. package/dist/publish.d.ts.map +1 -0
  81. package/dist/publish.js +104 -0
  82. package/dist/publish.js.map +1 -0
  83. package/dist/registry.d.ts +60 -0
  84. package/dist/registry.d.ts.map +1 -0
  85. package/dist/registry.js +67 -0
  86. package/dist/registry.js.map +1 -0
  87. package/dist/rename.d.ts +26 -0
  88. package/dist/rename.d.ts.map +1 -0
  89. package/dist/rename.js +86 -0
  90. package/dist/rename.js.map +1 -0
  91. package/dist/renderer.d.ts +39 -0
  92. package/dist/renderer.d.ts.map +1 -0
  93. package/dist/renderer.js +75 -0
  94. package/dist/renderer.js.map +1 -0
  95. package/dist/sbom-cmd.d.ts +6 -0
  96. package/dist/sbom-cmd.d.ts.map +1 -0
  97. package/dist/sbom-cmd.js +125 -0
  98. package/dist/sbom-cmd.js.map +1 -0
  99. package/dist/score.d.ts +32 -0
  100. package/dist/score.d.ts.map +1 -0
  101. package/dist/score.js +381 -0
  102. package/dist/score.js.map +1 -0
  103. package/dist/secrets.d.ts +27 -0
  104. package/dist/secrets.d.ts.map +1 -0
  105. package/dist/secrets.js +228 -0
  106. package/dist/secrets.js.map +1 -0
  107. package/dist/subcommands.d.ts +32 -0
  108. package/dist/subcommands.d.ts.map +1 -0
  109. package/dist/subcommands.js +335 -0
  110. package/dist/subcommands.js.map +1 -0
  111. package/dist/tarball.d.ts +14 -0
  112. package/dist/tarball.d.ts.map +1 -0
  113. package/dist/tarball.js +121 -0
  114. package/dist/tarball.js.map +1 -0
  115. package/dist/threat-model.d.ts +32 -0
  116. package/dist/threat-model.d.ts.map +1 -0
  117. package/dist/threat-model.js +236 -0
  118. package/dist/threat-model.js.map +1 -0
  119. package/dist/upgrade-cmd.d.ts +9 -0
  120. package/dist/upgrade-cmd.d.ts.map +1 -0
  121. package/dist/upgrade-cmd.js +90 -0
  122. package/dist/upgrade-cmd.js.map +1 -0
  123. package/dist/upgrade.d.ts +37 -0
  124. package/dist/upgrade.d.ts.map +1 -0
  125. package/dist/upgrade.js +124 -0
  126. package/dist/upgrade.js.map +1 -0
  127. package/dist/validate.d.ts +7 -0
  128. package/dist/validate.d.ts.map +1 -0
  129. package/dist/validate.js +240 -0
  130. package/dist/validate.js.map +1 -0
  131. package/dist/walker.d.ts +24 -0
  132. package/dist/walker.d.ts.map +1 -0
  133. package/dist/walker.js +76 -0
  134. package/dist/walker.js.map +1 -0
  135. package/dist/witness-client.d.ts +40 -0
  136. package/dist/witness-client.d.ts.map +1 -0
  137. package/dist/witness-client.js +99 -0
  138. package/dist/witness-client.js.map +1 -0
  139. package/dist/wizard.d.ts +37 -0
  140. package/dist/wizard.d.ts.map +1 -0
  141. package/dist/wizard.js +137 -0
  142. package/dist/wizard.js.map +1 -0
  143. package/dist/writer.d.ts +13 -0
  144. package/dist/writer.d.ts.map +1 -0
  145. package/dist/writer.js +43 -0
  146. package/dist/writer.js.map +1 -0
  147. package/package.json +114 -0
  148. package/templates/catalog.def.mjs +542 -0
  149. package/templates/catalog.json +1274 -0
  150. package/templates/minimal/.claude/settings.json.tmpl +18 -0
  151. package/templates/minimal/CLAUDE.md.tmpl +23 -0
  152. package/templates/minimal/README.md.tmpl +20 -0
  153. package/templates/minimal/manifest.json +16 -0
  154. package/templates/minimal/package.json.tmpl +30 -0
  155. package/templates/minimal/src/init.ts.tmpl +21 -0
  156. package/templates/vertical_advertising/.claude/commands/doctor.md.tmpl +12 -0
  157. package/templates/vertical_advertising/.claude/settings.json.tmpl +33 -0
  158. package/templates/vertical_advertising/.claude/skills/media-plan/SKILL.md.tmpl +13 -0
  159. package/templates/vertical_advertising/CLAUDE.md.tmpl +30 -0
  160. package/templates/vertical_advertising/README.md.tmpl +29 -0
  161. package/templates/vertical_advertising/manifest.json +81 -0
  162. package/templates/vertical_advertising/package.json.tmpl +30 -0
  163. package/templates/vertical_advertising/src/agents/copywriter.ts.tmpl +7 -0
  164. package/templates/vertical_advertising/src/agents/media-planner.ts.tmpl +7 -0
  165. package/templates/vertical_advertising/src/agents/performance-analyst.ts.tmpl +7 -0
  166. package/templates/vertical_advertising/src/init.ts.tmpl +21 -0
  167. package/templates/vertical_agentics/.claude/commands/doctor.md.tmpl +12 -0
  168. package/templates/vertical_agentics/.claude/settings.json.tmpl +33 -0
  169. package/templates/vertical_agentics/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
  170. package/templates/vertical_agentics/.claude/skills/run-swarm/SKILL.md.tmpl +14 -0
  171. package/templates/vertical_agentics/CLAUDE.md.tmpl +32 -0
  172. package/templates/vertical_agentics/README.md.tmpl +30 -0
  173. package/templates/vertical_agentics/manifest.json +91 -0
  174. package/templates/vertical_agentics/package.json.tmpl +30 -0
  175. package/templates/vertical_agentics/src/agents/critic.ts.tmpl +7 -0
  176. package/templates/vertical_agentics/src/agents/orchestrator.ts.tmpl +7 -0
  177. package/templates/vertical_agentics/src/agents/planner.ts.tmpl +7 -0
  178. package/templates/vertical_agentics/src/agents/worker.ts.tmpl +7 -0
  179. package/templates/vertical_agentics/src/init.ts.tmpl +21 -0
  180. package/templates/vertical_ai/.claude/commands/doctor.md.tmpl +12 -0
  181. package/templates/vertical_ai/.claude/settings.json.tmpl +35 -0
  182. package/templates/vertical_ai/.claude/skills/eval-report/SKILL.md.tmpl +13 -0
  183. package/templates/vertical_ai/CLAUDE.md.tmpl +31 -0
  184. package/templates/vertical_ai/README.md.tmpl +30 -0
  185. package/templates/vertical_ai/manifest.json +86 -0
  186. package/templates/vertical_ai/package.json.tmpl +30 -0
  187. package/templates/vertical_ai/src/agents/data-curator.ts.tmpl +7 -0
  188. package/templates/vertical_ai/src/agents/deployer.ts.tmpl +7 -0
  189. package/templates/vertical_ai/src/agents/evaluator.ts.tmpl +7 -0
  190. package/templates/vertical_ai/src/agents/trainer.ts.tmpl +7 -0
  191. package/templates/vertical_ai/src/init.ts.tmpl +21 -0
  192. package/templates/vertical_business/.claude/commands/doctor.md.tmpl +12 -0
  193. package/templates/vertical_business/.claude/settings.json.tmpl +33 -0
  194. package/templates/vertical_business/.claude/skills/quarterly-plan/SKILL.md.tmpl +13 -0
  195. package/templates/vertical_business/CLAUDE.md.tmpl +30 -0
  196. package/templates/vertical_business/README.md.tmpl +29 -0
  197. package/templates/vertical_business/manifest.json +81 -0
  198. package/templates/vertical_business/package.json.tmpl +30 -0
  199. package/templates/vertical_business/src/agents/analyst.ts.tmpl +7 -0
  200. package/templates/vertical_business/src/agents/ops-coordinator.ts.tmpl +7 -0
  201. package/templates/vertical_business/src/agents/strategist.ts.tmpl +7 -0
  202. package/templates/vertical_business/src/init.ts.tmpl +21 -0
  203. package/templates/vertical_coding/.claude/commands/doctor.md.tmpl +12 -0
  204. package/templates/vertical_coding/.claude/commands/review-diff.md.tmpl +10 -0
  205. package/templates/vertical_coding/.claude/settings.json.tmpl +40 -0
  206. package/templates/vertical_coding/.claude/skills/plan-change/SKILL.md.tmpl +15 -0
  207. package/templates/vertical_coding/CLAUDE.md.tmpl +32 -0
  208. package/templates/vertical_coding/README.md.tmpl +30 -0
  209. package/templates/vertical_coding/manifest.json +91 -0
  210. package/templates/vertical_coding/package.json.tmpl +30 -0
  211. package/templates/vertical_coding/src/agents/architect.ts.tmpl +7 -0
  212. package/templates/vertical_coding/src/agents/implementer.ts.tmpl +7 -0
  213. package/templates/vertical_coding/src/agents/reviewer.ts.tmpl +7 -0
  214. package/templates/vertical_coding/src/agents/test-writer.ts.tmpl +7 -0
  215. package/templates/vertical_coding/src/init.ts.tmpl +21 -0
  216. package/templates/vertical_crm/.claude/commands/doctor.md.tmpl +12 -0
  217. package/templates/vertical_crm/.claude/settings.json.tmpl +33 -0
  218. package/templates/vertical_crm/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
  219. package/templates/vertical_crm/CLAUDE.md.tmpl +30 -0
  220. package/templates/vertical_crm/README.md.tmpl +29 -0
  221. package/templates/vertical_crm/manifest.json +81 -0
  222. package/templates/vertical_crm/package.json.tmpl +30 -0
  223. package/templates/vertical_crm/src/agents/account-manager.ts.tmpl +7 -0
  224. package/templates/vertical_crm/src/agents/churn-watcher.ts.tmpl +7 -0
  225. package/templates/vertical_crm/src/agents/lead-qualifier.ts.tmpl +7 -0
  226. package/templates/vertical_crm/src/init.ts.tmpl +21 -0
  227. package/templates/vertical_devops/.claude/settings.json.tmpl +36 -0
  228. package/templates/vertical_devops/CLAUDE.md.tmpl +34 -0
  229. package/templates/vertical_devops/README.md.tmpl +27 -0
  230. package/templates/vertical_devops/manifest.json +22 -0
  231. package/templates/vertical_devops/package.json.tmpl +26 -0
  232. package/templates/vertical_devops/runbooks/README.md.tmpl +32 -0
  233. package/templates/vertical_devops/src/agents/escalator.ts.tmpl +19 -0
  234. package/templates/vertical_devops/src/agents/postmortem.ts.tmpl +23 -0
  235. package/templates/vertical_devops/src/agents/responder.ts.tmpl +14 -0
  236. package/templates/vertical_devops/src/agents/runbook-runner.ts.tmpl +17 -0
  237. package/templates/vertical_devops/src/init.ts.tmpl +23 -0
  238. package/templates/vertical_education/.claude/commands/doctor.md.tmpl +12 -0
  239. package/templates/vertical_education/.claude/commands/mastery-report.md.tmpl +12 -0
  240. package/templates/vertical_education/.claude/settings.json.tmpl +45 -0
  241. package/templates/vertical_education/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
  242. package/templates/vertical_education/.claude/skills/teach-next/SKILL.md.tmpl +16 -0
  243. package/templates/vertical_education/CLAUDE.md.tmpl +33 -0
  244. package/templates/vertical_education/README.md.tmpl +30 -0
  245. package/templates/vertical_education/manifest.json +96 -0
  246. package/templates/vertical_education/package.json.tmpl +30 -0
  247. package/templates/vertical_education/src/agents/explainer.ts.tmpl +7 -0
  248. package/templates/vertical_education/src/agents/grader.ts.tmpl +7 -0
  249. package/templates/vertical_education/src/agents/quiz-master.ts.tmpl +7 -0
  250. package/templates/vertical_education/src/agents/tutor.ts.tmpl +7 -0
  251. package/templates/vertical_education/src/init.ts.tmpl +21 -0
  252. package/templates/vertical_exotic/.claude/commands/doctor.md.tmpl +12 -0
  253. package/templates/vertical_exotic/.claude/settings.json.tmpl +44 -0
  254. package/templates/vertical_exotic/.claude/skills/evolve/SKILL.md.tmpl +14 -0
  255. package/templates/vertical_exotic/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
  256. package/templates/vertical_exotic/CLAUDE.md.tmpl +31 -0
  257. package/templates/vertical_exotic/README.md.tmpl +29 -0
  258. package/templates/vertical_exotic/manifest.json +86 -0
  259. package/templates/vertical_exotic/package.json.tmpl +30 -0
  260. package/templates/vertical_exotic/src/agents/experimenter.ts.tmpl +7 -0
  261. package/templates/vertical_exotic/src/agents/federator.ts.tmpl +7 -0
  262. package/templates/vertical_exotic/src/agents/hypothesizer.ts.tmpl +7 -0
  263. package/templates/vertical_exotic/src/init.ts.tmpl +21 -0
  264. package/templates/vertical_gaming/.claude/commands/design-doc-diff.md.tmpl +13 -0
  265. package/templates/vertical_gaming/.claude/commands/doctor.md.tmpl +12 -0
  266. package/templates/vertical_gaming/.claude/settings.json.tmpl +45 -0
  267. package/templates/vertical_gaming/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
  268. package/templates/vertical_gaming/.claude/skills/playtest-recap/SKILL.md.tmpl +16 -0
  269. package/templates/vertical_gaming/CLAUDE.md.tmpl +33 -0
  270. package/templates/vertical_gaming/README.md.tmpl +30 -0
  271. package/templates/vertical_gaming/manifest.json +96 -0
  272. package/templates/vertical_gaming/package.json.tmpl +30 -0
  273. package/templates/vertical_gaming/src/agents/balance-critic.ts.tmpl +7 -0
  274. package/templates/vertical_gaming/src/agents/economy-modeler.ts.tmpl +7 -0
  275. package/templates/vertical_gaming/src/agents/narrative-keeper.ts.tmpl +7 -0
  276. package/templates/vertical_gaming/src/agents/playtest-reader.ts.tmpl +7 -0
  277. package/templates/vertical_gaming/src/init.ts.tmpl +21 -0
  278. package/templates/vertical_health/.claude/commands/doctor.md.tmpl +12 -0
  279. package/templates/vertical_health/.claude/settings.json.tmpl +33 -0
  280. package/templates/vertical_health/.claude/skills/wellness-intake/SKILL.md.tmpl +15 -0
  281. package/templates/vertical_health/CLAUDE.md.tmpl +30 -0
  282. package/templates/vertical_health/README.md.tmpl +29 -0
  283. package/templates/vertical_health/manifest.json +81 -0
  284. package/templates/vertical_health/package.json.tmpl +30 -0
  285. package/templates/vertical_health/src/agents/care-coordinator.ts.tmpl +7 -0
  286. package/templates/vertical_health/src/agents/intake.ts.tmpl +7 -0
  287. package/templates/vertical_health/src/agents/triage.ts.tmpl +7 -0
  288. package/templates/vertical_health/src/init.ts.tmpl +21 -0
  289. package/templates/vertical_legal/.claude/settings.json.tmpl +10 -0
  290. package/templates/vertical_legal/CLAUDE.md.tmpl +24 -0
  291. package/templates/vertical_legal/README.md.tmpl +21 -0
  292. package/templates/vertical_legal/manifest.json +20 -0
  293. package/templates/vertical_legal/package.json.tmpl +13 -0
  294. package/templates/vertical_legal/src/agents/citation-checker.ts.tmpl +7 -0
  295. package/templates/vertical_legal/src/agents/redline.ts.tmpl +7 -0
  296. package/templates/vertical_legal/src/agents/risk-rater.ts.tmpl +8 -0
  297. package/templates/vertical_legal/src/init.ts.tmpl +13 -0
  298. package/templates/vertical_marketing/.claude/commands/doctor.md.tmpl +12 -0
  299. package/templates/vertical_marketing/.claude/settings.json.tmpl +33 -0
  300. package/templates/vertical_marketing/.claude/skills/campaign-brief/SKILL.md.tmpl +13 -0
  301. package/templates/vertical_marketing/CLAUDE.md.tmpl +30 -0
  302. package/templates/vertical_marketing/README.md.tmpl +29 -0
  303. package/templates/vertical_marketing/manifest.json +81 -0
  304. package/templates/vertical_marketing/package.json.tmpl +30 -0
  305. package/templates/vertical_marketing/src/agents/content-creator.ts.tmpl +7 -0
  306. package/templates/vertical_marketing/src/agents/seo-analyst.ts.tmpl +7 -0
  307. package/templates/vertical_marketing/src/agents/strategist.ts.tmpl +7 -0
  308. package/templates/vertical_marketing/src/init.ts.tmpl +21 -0
  309. package/templates/vertical_repo-maintainer/.claude/commands/doctor.md.tmpl +12 -0
  310. package/templates/vertical_repo-maintainer/.claude/commands/release-check.md.tmpl +13 -0
  311. package/templates/vertical_repo-maintainer/.claude/commands/repo-triage.md.tmpl +16 -0
  312. package/templates/vertical_repo-maintainer/.claude/settings.json.tmpl +44 -0
  313. package/templates/vertical_repo-maintainer/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
  314. package/templates/vertical_repo-maintainer/.claude/skills/plan-change/SKILL.md.tmpl +15 -0
  315. package/templates/vertical_repo-maintainer/CLAUDE.md.tmpl +34 -0
  316. package/templates/vertical_repo-maintainer/README.md.tmpl +30 -0
  317. package/templates/vertical_repo-maintainer/manifest.json +101 -0
  318. package/templates/vertical_repo-maintainer/package.json.tmpl +30 -0
  319. package/templates/vertical_repo-maintainer/src/agents/benchmarker.ts.tmpl +7 -0
  320. package/templates/vertical_repo-maintainer/src/agents/maintainer.ts.tmpl +7 -0
  321. package/templates/vertical_repo-maintainer/src/agents/release.ts.tmpl +7 -0
  322. package/templates/vertical_repo-maintainer/src/agents/security.ts.tmpl +7 -0
  323. package/templates/vertical_repo-maintainer/src/init.ts.tmpl +21 -0
  324. package/templates/vertical_research/.claude/settings.json.tmpl +9 -0
  325. package/templates/vertical_research/CLAUDE.md.tmpl +33 -0
  326. package/templates/vertical_research/README.md.tmpl +17 -0
  327. package/templates/vertical_research/manifest.json +23 -0
  328. package/templates/vertical_research/package.json.tmpl +13 -0
  329. package/templates/vertical_research/src/agents/citer.ts.tmpl +8 -0
  330. package/templates/vertical_research/src/agents/fact-checker.ts.tmpl +8 -0
  331. package/templates/vertical_research/src/agents/scout.ts.tmpl +7 -0
  332. package/templates/vertical_research/src/agents/source-grader.ts.tmpl +10 -0
  333. package/templates/vertical_research/src/agents/synthesizer.ts.tmpl +8 -0
  334. package/templates/vertical_research/src/agents/web-searcher.ts.tmpl +6 -0
  335. package/templates/vertical_research/src/init.ts.tmpl +13 -0
  336. package/templates/vertical_ruview/.claude/commands/doctor.md.tmpl +12 -0
  337. package/templates/vertical_ruview/.claude/settings.json.tmpl +33 -0
  338. package/templates/vertical_ruview/.claude/skills/index-and-ask/SKILL.md.tmpl +15 -0
  339. package/templates/vertical_ruview/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
  340. package/templates/vertical_ruview/CLAUDE.md.tmpl +31 -0
  341. package/templates/vertical_ruview/README.md.tmpl +29 -0
  342. package/templates/vertical_ruview/manifest.json +86 -0
  343. package/templates/vertical_ruview/package.json.tmpl +30 -0
  344. package/templates/vertical_ruview/src/agents/indexer.ts.tmpl +7 -0
  345. package/templates/vertical_ruview/src/agents/retriever.ts.tmpl +7 -0
  346. package/templates/vertical_ruview/src/agents/reviewer.ts.tmpl +7 -0
  347. package/templates/vertical_ruview/src/init.ts.tmpl +21 -0
  348. package/templates/vertical_sales/.claude/commands/doctor.md.tmpl +12 -0
  349. package/templates/vertical_sales/.claude/commands/pipeline-report.md.tmpl +13 -0
  350. package/templates/vertical_sales/.claude/settings.json.tmpl +45 -0
  351. package/templates/vertical_sales/.claude/skills/memory-inspect/SKILL.md.tmpl +14 -0
  352. package/templates/vertical_sales/.claude/skills/qualify-lead/SKILL.md.tmpl +15 -0
  353. package/templates/vertical_sales/CLAUDE.md.tmpl +33 -0
  354. package/templates/vertical_sales/README.md.tmpl +30 -0
  355. package/templates/vertical_sales/manifest.json +96 -0
  356. package/templates/vertical_sales/package.json.tmpl +30 -0
  357. package/templates/vertical_sales/src/agents/closer.ts.tmpl +7 -0
  358. package/templates/vertical_sales/src/agents/demo-coach.ts.tmpl +7 -0
  359. package/templates/vertical_sales/src/agents/prospector.ts.tmpl +7 -0
  360. package/templates/vertical_sales/src/agents/qualifier.ts.tmpl +7 -0
  361. package/templates/vertical_sales/src/init.ts.tmpl +21 -0
  362. package/templates/vertical_support/.claude/settings.json.tmpl +25 -0
  363. package/templates/vertical_support/CLAUDE.md.tmpl +34 -0
  364. package/templates/vertical_support/README.md.tmpl +16 -0
  365. package/templates/vertical_support/kb/README.md.tmpl +23 -0
  366. package/templates/vertical_support/manifest.json +22 -0
  367. package/templates/vertical_support/package.json.tmpl +24 -0
  368. package/templates/vertical_support/src/agents/escalator.ts.tmpl +6 -0
  369. package/templates/vertical_support/src/agents/kb-searcher.ts.tmpl +6 -0
  370. package/templates/vertical_support/src/agents/responder.ts.tmpl +7 -0
  371. package/templates/vertical_support/src/agents/triager.ts.tmpl +6 -0
  372. package/templates/vertical_support/src/init.ts.tmpl +16 -0
  373. package/templates/vertical_trading/.claude/settings.json.tmpl +20 -0
  374. package/templates/vertical_trading/CLAUDE.md.tmpl +24 -0
  375. package/templates/vertical_trading/README.md.tmpl +17 -0
  376. package/templates/vertical_trading/manifest.json +22 -0
  377. package/templates/vertical_trading/package.json.tmpl +13 -0
  378. package/templates/vertical_trading/src/agents/executor.ts.tmpl +8 -0
  379. package/templates/vertical_trading/src/agents/market-watcher.ts.tmpl +7 -0
  380. package/templates/vertical_trading/src/agents/postmortem.ts.tmpl +8 -0
  381. package/templates/vertical_trading/src/agents/risk-checker.ts.tmpl +11 -0
  382. package/templates/vertical_trading/src/agents/signal-gen.ts.tmpl +8 -0
  383. package/templates/vertical_trading/src/init.ts.tmpl +20 -0
@@ -0,0 +1,179 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // `harness mcp <ls|invoke>` subcommand.
4
+ //
5
+ // Surfaces the iter-10/13/34 MCP dispatch layer to the CLI:
6
+ //
7
+ // harness mcp ls [path]
8
+ // List MCP servers + tools declared in <path>/.mcp/servers.json.
9
+ //
10
+ // harness mcp invoke <server> <tool> [--args=<json>] [path]
11
+ // Dispatch a tool through the kernel's claim-checked dispatcher,
12
+ // using the harness's local claim set. Prints the structured
13
+ // outcome (result / denied / not-found / bad-args).
14
+ //
15
+ // The ToolDispatcher itself lives in @ruflo/kernel/dispatch.js (TS)
16
+ // + crates/kernel/src/dispatch.rs (Rust). This module is just the
17
+ // CLI surface that loads the harness's MCP config + claim set and
18
+ // hands them off.
19
+ import { readFile } from 'node:fs/promises';
20
+ import { existsSync } from 'node:fs';
21
+ import { join, resolve } from 'node:path';
22
+ async function readMcpConfig(harnessDir) {
23
+ const path = join(harnessDir, '.mcp', 'servers.json');
24
+ if (!existsSync(path))
25
+ return null;
26
+ try {
27
+ const raw = JSON.parse(await readFile(path, 'utf-8'));
28
+ return Array.isArray(raw) ? { mcpServers: raw } : raw;
29
+ }
30
+ catch {
31
+ return null;
32
+ }
33
+ }
34
+ async function readClaims(harnessDir) {
35
+ const path = join(harnessDir, '.harness', 'claims.json');
36
+ if (!existsSync(path))
37
+ return [];
38
+ try {
39
+ const raw = JSON.parse(await readFile(path, 'utf-8'));
40
+ return Array.isArray(raw) ? raw : (raw.claims ?? []);
41
+ }
42
+ catch {
43
+ return [];
44
+ }
45
+ }
46
+ /** `harness mcp ls [path]` — list MCP servers + tools declared. */
47
+ export async function mcpLs(args) {
48
+ const dir = resolve(args.find(a => !a.startsWith('--')) ?? process.cwd());
49
+ const lines = [`harness mcp ls — ${dir}`];
50
+ const cfg = await readMcpConfig(dir);
51
+ if (!cfg) {
52
+ lines.push(' no .mcp/servers.json present (scaffold with --mcp to add one)');
53
+ return { code: 0, lines };
54
+ }
55
+ const servers = cfg.mcpServers ?? [];
56
+ if (servers.length === 0) {
57
+ lines.push(' .mcp/servers.json present but declares no servers');
58
+ return { code: 0, lines };
59
+ }
60
+ for (const s of servers) {
61
+ const cmd = Array.isArray(s.command) ? s.command.join(' ') : s.command;
62
+ lines.push(` ${s.name}`);
63
+ if (s.description)
64
+ lines.push(` ${s.description}`);
65
+ lines.push(` command: ${cmd}`);
66
+ if (Array.isArray(s.tools) && s.tools.length) {
67
+ lines.push(` tools:`);
68
+ for (const t of s.tools) {
69
+ lines.push(` - ${t.name}${t.description ? ` — ${t.description}` : ''}`);
70
+ }
71
+ }
72
+ else {
73
+ lines.push(` tools: <not declared statically; query the server at runtime>`);
74
+ }
75
+ }
76
+ lines.push('', `${servers.length} MCP server${servers.length === 1 ? '' : 's'} declared.`);
77
+ return { code: 0, lines };
78
+ }
79
+ /**
80
+ * `harness mcp invoke <server> <tool> --args=<json> [path]` — dispatch
81
+ * a tool through the kernel-style claim check and print the outcome.
82
+ *
83
+ * We re-use the TS ToolDispatcher here. For a real-world harness this
84
+ * would talk to the actual MCP server over stdio/HTTP; the CLI command
85
+ * is the same shape so users learn the dispatch model without bringing
86
+ * up infrastructure.
87
+ */
88
+ export async function mcpInvoke(args) {
89
+ const positional = args.filter(a => !a.startsWith('--'));
90
+ const [server, tool] = positional;
91
+ if (!server || !tool) {
92
+ return {
93
+ code: 2,
94
+ lines: ['Usage: harness mcp invoke <server> <tool> [--args=<json>] [path]'],
95
+ };
96
+ }
97
+ const dir = resolve(positional[2] ?? process.cwd());
98
+ const argsJson = args.find(a => a.startsWith('--args='))?.slice('--args='.length) ?? '{}';
99
+ let argsObj;
100
+ try {
101
+ argsObj = JSON.parse(argsJson);
102
+ if (typeof argsObj !== 'object' || Array.isArray(argsObj) || argsObj === null) {
103
+ return { code: 2, lines: [`--args must be a JSON object`] };
104
+ }
105
+ }
106
+ catch (e) {
107
+ return { code: 2, lines: [`--args must be valid JSON: ${e instanceof Error ? e.message : e}`] };
108
+ }
109
+ const lines = [`harness mcp invoke ${server}/${tool}`];
110
+ // Dynamically load the kernel-js dispatcher so the CLI doesn't pay
111
+ // its import cost on every help/ls invocation.
112
+ let DispatcherClass;
113
+ try {
114
+ const mod = await import('@ruflo/kernel/dispatch');
115
+ DispatcherClass = mod.ToolDispatcher;
116
+ }
117
+ catch (e) {
118
+ return { code: 1, lines: [`failed to load dispatcher: ${e instanceof Error ? e.message : e}`] };
119
+ }
120
+ const dispatcher = new DispatcherClass();
121
+ // For the CLI flow we don't have a real handler — we wire a no-op so
122
+ // claim-denials surface but successes return a placeholder. The
123
+ // structured outcome is the user-visible thing.
124
+ dispatcher.register(server, tool, async (a) => ({
125
+ note: 'CLI dispatch — no real handler bound; this confirms the CLAIMS layer authorises the call',
126
+ echoArgs: a,
127
+ }));
128
+ const claims = await readClaims(dir);
129
+ const outcome = await dispatcher.dispatch({ server, tool, args: argsObj, claims });
130
+ lines.push(` kind: ${outcome.kind}`);
131
+ if (outcome.kind === 'result') {
132
+ lines.push(` output: ${JSON.stringify(outcome.output)}`);
133
+ return { code: 0, lines };
134
+ }
135
+ if (outcome.kind === 'denied') {
136
+ lines.push(` reason: ${outcome.reason}`);
137
+ return { code: 1, lines };
138
+ }
139
+ if (outcome.kind === 'not-found') {
140
+ lines.push(` server/tool: ${outcome.server}/${outcome.tool} not registered`);
141
+ return { code: 1, lines };
142
+ }
143
+ // bad-args
144
+ lines.push(` reason: ${outcome.reason}`);
145
+ return { code: 2, lines };
146
+ }
147
+ /** Top-level dispatcher for `harness mcp <subsub> ...`. */
148
+ export async function mcpDispatch(args) {
149
+ const [subsub = 'help', ...rest] = args;
150
+ switch (subsub) {
151
+ case 'ls':
152
+ return mcpLs(rest);
153
+ case 'invoke':
154
+ return mcpInvoke(rest);
155
+ case 'help':
156
+ return {
157
+ code: 0,
158
+ lines: [
159
+ 'Usage: harness mcp <subcommand> [args]',
160
+ '',
161
+ 'Subcommands:',
162
+ ' ls [path] — list MCP servers + tools',
163
+ ' invoke <server> <tool> [--args=<json>] [path] — dispatch one tool through the claim check',
164
+ '',
165
+ 'Notes:',
166
+ ' - `ls` reads <path>/.mcp/servers.json',
167
+ ' - `invoke` reads <path>/.harness/claims.json for the local claim set',
168
+ ' - The kernel dispatch surface is the same one tested in',
169
+ ' __tests__/mcp-dispatch-integration.test.ts (iter 34)',
170
+ ],
171
+ };
172
+ default:
173
+ return {
174
+ code: 2,
175
+ lines: [`Unknown mcp subcommand: ${subsub}`, `Run 'harness mcp help' for usage.`],
176
+ };
177
+ }
178
+ }
179
+ //# sourceMappingURL=mcp-cmd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-cmd.js","sourceRoot":"","sources":["../src/mcp-cmd.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export type Severity = 'high' | 'medium' | 'low' | 'info';
2
+ export interface Finding {
3
+ id: string;
4
+ severity: Severity;
5
+ title: string;
6
+ detail: string;
7
+ }
8
+ export interface ScanReport {
9
+ dir: string;
10
+ mcpEnabled: boolean;
11
+ findings: Finding[];
12
+ /** Highest severity present, or 'info' when clean. */
13
+ worst: Severity;
14
+ }
15
+ /**
16
+ * Scan a harness directory for MCP security issues. Never executes anything —
17
+ * static inspection of policy + config + manifest files only.
18
+ */
19
+ export declare function scanMcp(dir: string): ScanReport;
20
+ /** CLI wrapper. Exit code 1 if any HIGH finding, else 0. */
21
+ export declare function mcpScanCmd(args: string[]): {
22
+ code: number;
23
+ lines: string[];
24
+ };
25
+ //# sourceMappingURL=mcp-scan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-scan.d.ts","sourceRoot":"","sources":["../src/mcp-scan.ts"],"names":[],"mappings":"AAgBA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;AAE1D,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;IACpB,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,sDAAsD;IACtD,KAAK,EAAE,QAAQ,CAAC;CACjB;AAYD;;;GAGG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,CAsF/C;AAUD,4DAA4D;AAC5D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAmB5E"}
@@ -0,0 +1,132 @@
1
+ // SPDX-License-Identifier: MIT
2
+ //
3
+ // `harness mcp-scan [path]` — a security scanner for a scaffolded harness's MCP
4
+ // surface. "npm audit for agent tools" (ADR-022): it reads the harness's MCP
5
+ // policy + host configs + package manifest and flags the patterns that make MCP
6
+ // servers risky — broad shell/network/file-write grants, missing timeouts,
7
+ // missing audit log, wildcard tool permissions, unpinned deps, and secret-read
8
+ // exposure.
9
+ //
10
+ // Pure + dependency-light on purpose: `scanMcp()` takes a directory and returns
11
+ // structured findings, so it is unit-testable without the kernel and reusable
12
+ // from CI. The CLI wrapper just formats + sets the exit code.
13
+ import { existsSync, readFileSync } from 'node:fs';
14
+ import { join, resolve } from 'node:path';
15
+ const SEV_ORDER = ['info', 'low', 'medium', 'high'];
16
+ function readJson(path) {
17
+ try {
18
+ return existsSync(path) ? JSON.parse(readFileSync(path, 'utf-8')) : undefined;
19
+ }
20
+ catch {
21
+ return undefined;
22
+ }
23
+ }
24
+ /**
25
+ * Scan a harness directory for MCP security issues. Never executes anything —
26
+ * static inspection of policy + config + manifest files only.
27
+ */
28
+ export function scanMcp(dir) {
29
+ const root = resolve(dir);
30
+ const findings = [];
31
+ const add = (f) => findings.push(f);
32
+ const policy = readJson(join(root, '.harness', 'mcp-policy.json'));
33
+ const settings = readJson(join(root, '.claude', 'settings.json'));
34
+ const pkg = readJson(join(root, 'package.json'));
35
+ const mcpEnabled = !!policy || !!(settings && settings.mcpServers && Object.keys(settings.mcpServers).length > 0);
36
+ if (!mcpEnabled) {
37
+ add({ id: 'mcp-disabled', severity: 'info', title: 'No MCP surface', detail: 'No MCP policy or server registered — nothing to scan.' });
38
+ return { dir: root, mcpEnabled: false, findings, worst: worstOf(findings) };
39
+ }
40
+ // --- policy checks -------------------------------------------------------
41
+ if (!policy) {
42
+ add({ id: 'no-policy', severity: 'high', title: 'MCP server with no policy', detail: 'An MCP server is registered but .harness/mcp-policy.json is missing — execution is ungoverned.' });
43
+ }
44
+ else {
45
+ if (policy.defaultDeny !== true) {
46
+ add({ id: 'no-default-deny', severity: 'high', title: 'Policy is not default-deny', detail: 'defaultDeny should be true so ungranted capabilities are refused, not silently allowed.' });
47
+ }
48
+ if (policy.allowShell === true) {
49
+ add({ id: 'allow-shell', severity: 'high', title: 'Shell access granted', detail: 'allowShell=true lets tools run arbitrary commands. Gate behind approval or disable.' });
50
+ }
51
+ if (policy.allowNetwork === true) {
52
+ add({ id: 'allow-network', severity: 'medium', title: 'Network access granted', detail: 'allowNetwork=true widens the exfiltration surface. Scope to specific hosts if possible.' });
53
+ }
54
+ if (policy.allowFileWrite === true) {
55
+ add({ id: 'allow-file-write', severity: 'medium', title: 'File-write access granted', detail: 'allowFileWrite=true lets tools modify the filesystem. Confirm this is intended.' });
56
+ }
57
+ if (policy.requireApprovalForDangerous !== true) {
58
+ add({ id: 'no-approval-gate', severity: 'medium', title: 'No approval gate for dangerous tools', detail: 'requireApprovalForDangerous should be true so dangerous tools need explicit consent.' });
59
+ }
60
+ if (policy.auditLog !== true) {
61
+ add({ id: 'no-audit-log', severity: 'medium', title: 'Audit log disabled', detail: 'auditLog=false means tool calls are not recorded — required for enterprise trust.' });
62
+ }
63
+ const timeout = Number(policy.toolTimeoutMs ?? 0);
64
+ if (!timeout || timeout <= 0) {
65
+ add({ id: 'no-timeout', severity: 'medium', title: 'No tool timeout', detail: 'toolTimeoutMs must be a positive number so a hung tool cannot stall the agent.' });
66
+ }
67
+ const maxCalls = Number(policy.maxToolCallsPerTurn ?? 0);
68
+ if (!maxCalls || maxCalls <= 0) {
69
+ add({ id: 'no-call-budget', severity: 'low', title: 'No per-turn tool-call budget', detail: 'maxToolCallsPerTurn bounds runaway loops; set a positive limit.' });
70
+ }
71
+ }
72
+ // --- host permission checks ---------------------------------------------
73
+ const allow = settings?.permissions?.allow ?? [];
74
+ const deny = settings?.permissions?.deny ?? [];
75
+ for (const a of allow) {
76
+ if (a === '*' || a === 'mcp__*' || a === 'mcp__*__*') {
77
+ add({ id: 'wildcard-tool-perm', severity: 'high', title: `Over-broad tool permission: ${a}`, detail: 'Wildcard MCP permissions grant every tool on every server. Scope to mcp__<server>__*.' });
78
+ }
79
+ if (/^Bash\((rm|curl|wget|sudo|chmod|ssh)\b/i.test(a) && !a.includes('status') && !a.includes('--dry-run')) {
80
+ add({ id: 'risky-bash-allow', severity: 'medium', title: `Risky shell allow-rule: ${a}`, detail: 'Allowing rm/curl/wget/sudo/ssh broadly is dangerous; narrow the glob.' });
81
+ }
82
+ }
83
+ const guardsEnv = deny.some((d) => /\.env/.test(d));
84
+ if (!guardsEnv) {
85
+ add({ id: 'no-secret-guard', severity: 'medium', title: 'Secrets not denied', detail: 'permissions.deny should block Read(./.env*) so tools cannot read credentials.' });
86
+ }
87
+ // --- dependency pinning --------------------------------------------------
88
+ const deps = pkg?.dependencies ?? {};
89
+ const unpinned = Object.entries(deps).filter(([, v]) => /^[\^~]/.test(v) || v === 'latest' || v.includes('*'));
90
+ if (unpinned.length > 0) {
91
+ add({
92
+ id: 'unpinned-deps',
93
+ severity: 'low',
94
+ title: `${unpinned.length} unpinned dependency range(s)`,
95
+ detail: `Floating ranges weaken supply-chain reproducibility: ${unpinned.map(([k]) => k).join(', ')}.`,
96
+ });
97
+ }
98
+ if (findings.length === 0) {
99
+ add({ id: 'clean', severity: 'info', title: 'No MCP security issues found', detail: 'Policy is default-deny with safe capability grants and an audit log.' });
100
+ }
101
+ return { dir: root, mcpEnabled: true, findings, worst: worstOf(findings) };
102
+ }
103
+ function worstOf(findings) {
104
+ let worst = 'info';
105
+ for (const f of findings) {
106
+ if (SEV_ORDER.indexOf(f.severity) > SEV_ORDER.indexOf(worst))
107
+ worst = f.severity;
108
+ }
109
+ return worst;
110
+ }
111
+ /** CLI wrapper. Exit code 1 if any HIGH finding, else 0. */
112
+ export function mcpScanCmd(args) {
113
+ const dir = args[0] ?? process.cwd();
114
+ const report = scanMcp(dir);
115
+ const lines = [`harness mcp-scan — ${report.dir}`, ''];
116
+ if (!report.mcpEnabled) {
117
+ lines.push('MCP: not enabled (no policy or server). Nothing to scan.');
118
+ return { code: 0, lines };
119
+ }
120
+ const order = ['high', 'medium', 'low', 'info'];
121
+ const tag = { high: 'HIGH', medium: 'MED ', low: 'LOW ', info: 'INFO' };
122
+ for (const sev of order) {
123
+ for (const f of report.findings.filter((x) => x.severity === sev)) {
124
+ lines.push(` [${tag[sev]}] ${f.title}`);
125
+ lines.push(` ${f.detail}`);
126
+ }
127
+ }
128
+ const highs = report.findings.filter((f) => f.severity === 'high').length;
129
+ lines.push('', `Result: ${report.worst.toUpperCase()} (${report.findings.length} finding${report.findings.length === 1 ? '' : 's'}, ${highs} high)`);
130
+ return { code: highs > 0 ? 1 : 0, lines };
131
+ }
132
+ //# sourceMappingURL=mcp-scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-scan.js","sourceRoot":"","sources":["../src/mcp-scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,97 @@
1
+ export type SubcommandResult = {
2
+ code: number;
3
+ lines: string[];
4
+ };
5
+ export type AlignmentLevel = 'full' | 'partial' | 'none' | 'not-applicable';
6
+ export type SpanStatus = 'full' | 'partial' | 'none';
7
+ export interface OiaManifest {
8
+ schema: 1;
9
+ oiaVersion: '0.1';
10
+ generatedAt: string;
11
+ harnessId: string;
12
+ layerAlignment: {
13
+ L1_physicalCompute: AlignmentLevel;
14
+ L2_dataAndStorage: AlignmentLevel;
15
+ L3_models: AlignmentLevel;
16
+ L4_toolsAndIntegrations: AlignmentLevel;
17
+ L5_agentOrchestration: AlignmentLevel;
18
+ L6_workflowAndAutomation: AlignmentLevel;
19
+ L7_governanceAndPolicy: AlignmentLevel;
20
+ L8_observabilityAndAudit: AlignmentLevel;
21
+ L9_humanAndBrowserInterface: AlignmentLevel;
22
+ };
23
+ horizontalSpans: {
24
+ security: {
25
+ status: SpanStatus;
26
+ implementation: string | null;
27
+ };
28
+ observability: {
29
+ status: SpanStatus;
30
+ implementation: string | null;
31
+ };
32
+ identity: {
33
+ status: SpanStatus;
34
+ implementation: string | null;
35
+ };
36
+ governance: {
37
+ status: SpanStatus;
38
+ implementation: string | null;
39
+ };
40
+ policyEnforcement: {
41
+ status: SpanStatus;
42
+ implementation: string | null;
43
+ };
44
+ interoperability: {
45
+ status: SpanStatus;
46
+ implementation: string | null;
47
+ };
48
+ };
49
+ adjacentStandards: {
50
+ mcp: {
51
+ mode: 'off' | 'local' | 'remote';
52
+ policyPath: string | null;
53
+ };
54
+ a2a: {
55
+ mode: 'off' | 'inbound' | 'bidi';
56
+ note: string;
57
+ };
58
+ acp: {
59
+ mode: 'off' | 'inbound' | 'bidi';
60
+ note: string;
61
+ };
62
+ agentProtocol: {
63
+ mode: 'off' | 'inbound' | 'bidi';
64
+ note: string;
65
+ };
66
+ };
67
+ discoveryEndpoint: string | null;
68
+ registryUrl: string | null;
69
+ }
70
+ interface HarnessProfile {
71
+ name: string;
72
+ version: string;
73
+ hasMcp: boolean;
74
+ mcpMode: 'off' | 'local' | 'remote';
75
+ mcpPolicyPath: string | null;
76
+ hasWitness: boolean;
77
+ hasAuditLog: boolean;
78
+ }
79
+ /**
80
+ * Build an OIA manifest from the harness profile. Pure: same profile + same
81
+ * generatedAt → byte-identical manifest, so the witness fingerprint (ADR-011)
82
+ * stays stable.
83
+ */
84
+ export declare function buildOiaManifest(profile: HarnessProfile, generatedAt?: string): OiaManifest;
85
+ export interface CheckResult {
86
+ ok: boolean;
87
+ reasons: string[];
88
+ }
89
+ /**
90
+ * Validate an OIA manifest against the v0.1 schema. Strict shape check;
91
+ * unknown keys are reported as warnings (not failures) so a v1.0 manifest
92
+ * can be linted against v0.1 with informational drift output.
93
+ */
94
+ export declare function checkOiaManifest(m: unknown): CheckResult;
95
+ export declare function oiaManifestCmd(args: string[]): Promise<SubcommandResult>;
96
+ export {};
97
+ //# sourceMappingURL=oia-manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oia-manifest.d.ts","sourceRoot":"","sources":["../src/oia-manifest.ts"],"names":[],"mappings":"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"}