@intentius/chant 0.124.12 → 0.124.14

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 (928) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.js +668 -0
  35. package/dist/builder.js +44 -0
  36. package/dist/cdk/advise.js +30 -0
  37. package/dist/cdk/assembly.js +122 -0
  38. package/dist/cdk/graph.js +444 -0
  39. package/dist/cdk/tier-map.js +64 -0
  40. package/dist/cdk/types.js +24 -0
  41. package/dist/change-set.js +312 -0
  42. package/dist/child-project.js +21 -0
  43. package/dist/claimed-fields.js +135 -0
  44. package/dist/cli/build-options.js +70 -0
  45. package/dist/cli/build-params-cli.js +139 -0
  46. package/dist/cli/command-group.js +123 -0
  47. package/dist/cli/commands/audit-agents.js +326 -0
  48. package/dist/cli/commands/audit.js +571 -0
  49. package/dist/cli/commands/build.js +920 -0
  50. package/dist/cli/commands/carve-apply.js +153 -0
  51. package/dist/cli/commands/carve-bridge.js +201 -0
  52. package/dist/cli/commands/carve-emit.js +332 -0
  53. package/dist/cli/commands/carve-status.js +119 -0
  54. package/dist/cli/commands/carve.js +204 -0
  55. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  56. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  57. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  58. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  59. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  60. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  61. package/dist/cli/commands/check-lexicon.js +766 -0
  62. package/dist/cli/commands/describe.js +85 -0
  63. package/dist/cli/commands/diff.js +175 -0
  64. package/dist/cli/commands/doctor.js +350 -0
  65. package/dist/cli/commands/import-agents.js +155 -0
  66. package/dist/cli/commands/import.js +670 -0
  67. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  68. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  69. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  70. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  71. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  72. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  73. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  74. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  75. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  76. package/dist/cli/commands/init-lexicon.js +172 -0
  77. package/dist/cli/commands/init.js +381 -0
  78. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  79. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  80. package/dist/cli/commands/licenses.js +125 -0
  81. package/dist/cli/commands/lint.d.ts.map +1 -1
  82. package/dist/cli/commands/lint.js +948 -0
  83. package/dist/cli/commands/list.js +63 -0
  84. package/dist/cli/commands/migrate.d.ts.map +1 -1
  85. package/dist/cli/commands/migrate.js +423 -0
  86. package/dist/cli/commands/onboard.js +403 -0
  87. package/dist/cli/commands/pinned-upgrade.js +191 -0
  88. package/dist/cli/commands/update.js +194 -0
  89. package/dist/cli/commands/vendor.js +217 -0
  90. package/dist/cli/conflict-check.js +104 -0
  91. package/dist/cli/debug.js +8 -0
  92. package/dist/cli/format.js +104 -0
  93. package/dist/cli/handlers/build.js +267 -0
  94. package/dist/cli/handlers/carve-apply.js +30 -0
  95. package/dist/cli/handlers/carve-bridge.js +28 -0
  96. package/dist/cli/handlers/carve-emit.js +50 -0
  97. package/dist/cli/handlers/carve-status.js +26 -0
  98. package/dist/cli/handlers/carve.js +40 -0
  99. package/dist/cli/handlers/change-set.js +46 -0
  100. package/dist/cli/handlers/components.js +730 -0
  101. package/dist/cli/handlers/dev.js +113 -0
  102. package/dist/cli/handlers/emulator.js +233 -0
  103. package/dist/cli/handlers/explain.js +54 -0
  104. package/dist/cli/handlers/fan-out.js +422 -0
  105. package/dist/cli/handlers/gate-resume.js +275 -0
  106. package/dist/cli/handlers/generate.js +84 -0
  107. package/dist/cli/handlers/graph.js +969 -0
  108. package/dist/cli/handlers/init.js +102 -0
  109. package/dist/cli/handlers/lifecycle.js +1727 -0
  110. package/dist/cli/handlers/lint.js +62 -0
  111. package/dist/cli/handlers/migrate.js +48 -0
  112. package/dist/cli/handlers/misc.js +391 -0
  113. package/dist/cli/handlers/operator.js +1162 -0
  114. package/dist/cli/handlers/override-approve.js +102 -0
  115. package/dist/cli/handlers/pr.js +503 -0
  116. package/dist/cli/handlers/promote.js +342 -0
  117. package/dist/cli/handlers/run-generate.js +206 -0
  118. package/dist/cli/handlers/run-wave.js +66 -0
  119. package/dist/cli/handlers/run.js +1191 -0
  120. package/dist/cli/handlers/scenario.js +325 -0
  121. package/dist/cli/handlers/search.js +924 -0
  122. package/dist/cli/handlers/serve.js +32 -0
  123. package/dist/cli/handlers/vendor.js +154 -0
  124. package/dist/cli/index.js +3 -0
  125. package/dist/cli/is-entry-point.js +23 -0
  126. package/dist/cli/lsp/capabilities.js +28 -0
  127. package/dist/cli/lsp/diagnostics.js +34 -0
  128. package/dist/cli/lsp/server.js +329 -0
  129. package/dist/cli/main.d.ts.map +1 -1
  130. package/dist/cli/main.js +2540 -0
  131. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  132. package/dist/cli/mcp/op-tools.js +306 -0
  133. package/dist/cli/mcp/resource-handlers.js +258 -0
  134. package/dist/cli/mcp/resources/context.js +85 -0
  135. package/dist/cli/mcp/server.js +353 -0
  136. package/dist/cli/mcp/tools/build.js +111 -0
  137. package/dist/cli/mcp/tools/composites.js +95 -0
  138. package/dist/cli/mcp/tools/explain.js +166 -0
  139. package/dist/cli/mcp/tools/import.js +49 -0
  140. package/dist/cli/mcp/tools/lint.js +41 -0
  141. package/dist/cli/mcp/tools/scaffold.js +111 -0
  142. package/dist/cli/mcp/tools/search.js +112 -0
  143. package/dist/cli/mcp/types.js +1 -0
  144. package/dist/cli/mcp/workspace-plugins.js +91 -0
  145. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  146. package/dist/cli/mcp/workspace-tools.js +564 -0
  147. package/dist/cli/mcp-config.js +70 -0
  148. package/dist/cli/plugins.js +313 -0
  149. package/dist/cli/registry.js +23 -0
  150. package/dist/cli/reporters/stylish.js +329 -0
  151. package/dist/cli/version.js +15 -0
  152. package/dist/cli/watch.js +79 -0
  153. package/dist/codegen/bound-property-types.js +82 -0
  154. package/dist/codegen/coverage.js +119 -0
  155. package/dist/codegen/docs-file-markers.js +60 -0
  156. package/dist/codegen/docs-pages.js +115 -0
  157. package/dist/codegen/docs-rule-scanning.js +164 -0
  158. package/dist/codegen/docs-rules.js +76 -0
  159. package/dist/codegen/docs-sections.js +117 -0
  160. package/dist/codegen/docs-sidebar.js +65 -0
  161. package/dist/codegen/docs-types.js +4 -0
  162. package/dist/codegen/docs.js +356 -0
  163. package/dist/codegen/fetch.js +340 -0
  164. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  165. package/dist/codegen/generate-registry.js +71 -0
  166. package/dist/codegen/generate-runtime-index.js +56 -0
  167. package/dist/codegen/generate-typescript.js +119 -0
  168. package/dist/codegen/generate.js +115 -0
  169. package/dist/codegen/json-patch.js +141 -0
  170. package/dist/codegen/json-schema-to-ts.js +344 -0
  171. package/dist/codegen/json-schema.js +246 -0
  172. package/dist/codegen/lexicon-regen.js +412 -0
  173. package/dist/codegen/naming.js +217 -0
  174. package/dist/codegen/okf-lexicon.js +245 -0
  175. package/dist/codegen/package.js +150 -0
  176. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  177. package/dist/codegen/pinned-upgrade.js +494 -0
  178. package/dist/codegen/registry.js +60 -0
  179. package/dist/codegen/rehype-base-url.mjs +68 -0
  180. package/dist/codegen/rolling-upgrade.js +217 -0
  181. package/dist/codegen/surface-snapshot.js +537 -0
  182. package/dist/codegen/testdata/postgres-tags.json +242 -0
  183. package/dist/codegen/topo-sort.js +36 -0
  184. package/dist/codegen/typecheck.js +115 -0
  185. package/dist/codegen/validate.js +200 -0
  186. package/dist/codegen/version-bump.js +35 -0
  187. package/dist/components/auto-release.js +143 -0
  188. package/dist/components/builders.js +47 -0
  189. package/dist/components/capability-plugin-loader.js +175 -0
  190. package/dist/components/capability-plugin-schema.js +46 -0
  191. package/dist/components/capability-plugin.js +99 -0
  192. package/dist/components/capability.js +60 -0
  193. package/dist/components/changed-files.js +72 -0
  194. package/dist/components/cli-support.js +427 -0
  195. package/dist/components/component.js +120 -0
  196. package/dist/components/component.schema.json +271 -0
  197. package/dist/components/config-defaults.js +130 -0
  198. package/dist/components/deploy-units.js +60 -0
  199. package/dist/components/discover.d.ts.map +1 -1
  200. package/dist/components/discover.js +189 -0
  201. package/dist/components/driver-output.js +86 -0
  202. package/dist/components/driver.js +728 -0
  203. package/dist/components/fan-out-output.js +165 -0
  204. package/dist/components/fan-out-record.js +94 -0
  205. package/dist/components/fan-out-run.js +373 -0
  206. package/dist/components/fan-out-support.js +60 -0
  207. package/dist/components/fan-out.js +273 -0
  208. package/dist/components/gate-plan.js +41 -0
  209. package/dist/components/gated-wave-pipeline.js +46 -0
  210. package/dist/components/index.js +24 -0
  211. package/dist/components/layers.js +28 -0
  212. package/dist/components/manifest-persistence.js +108 -0
  213. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  214. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  215. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  216. package/dist/components/pilots/lambda.pilot.js +52 -0
  217. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  218. package/dist/components/pilots/project.js +12 -0
  219. package/dist/components/pr-pipeline.js +134 -0
  220. package/dist/components/pr-run.js +363 -0
  221. package/dist/components/presets/ecs-fargate.js +72 -0
  222. package/dist/components/presets/index.js +28 -0
  223. package/dist/components/presets/lambda.js +34 -0
  224. package/dist/components/presets/single-host-compose.js +41 -0
  225. package/dist/components/promote.js +549 -0
  226. package/dist/components/registry.js +34 -0
  227. package/dist/components/run-progress.js +33 -0
  228. package/dist/components/sandbox/driver.d.ts.map +1 -1
  229. package/dist/components/sandbox/driver.js +93 -0
  230. package/dist/components/sandbox/run.js +115 -0
  231. package/dist/components/starter-plugin.js +104 -0
  232. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  233. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  234. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  235. package/dist/components/verbs/bom-writer.js +287 -0
  236. package/dist/components/verbs/build-archive.js +188 -0
  237. package/dist/components/verbs/build.js +142 -0
  238. package/dist/components/verbs/cloud-executor.js +110 -0
  239. package/dist/components/verbs/component-bom.js +125 -0
  240. package/dist/components/verbs/ensure-secret.js +50 -0
  241. package/dist/components/verbs/index.js +61 -0
  242. package/dist/components/verbs/license-policy.js +75 -0
  243. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  244. package/dist/components/verbs/process-runner.js +78 -0
  245. package/dist/components/verbs/r2-sync.js +93 -0
  246. package/dist/components/verbs/reproducibility.js +62 -0
  247. package/dist/components/verbs/run-agent.js +577 -0
  248. package/dist/components/verbs/sbom-generator.js +119 -0
  249. package/dist/components/verbs/sbom.js +97 -0
  250. package/dist/components/verbs/shell.js +32 -0
  251. package/dist/components/verbs/sign.js +221 -0
  252. package/dist/components/verbs/stub.js +28 -0
  253. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  254. package/dist/components/verbs/verify.js +112 -0
  255. package/dist/components/verbs/vex.js +131 -0
  256. package/dist/components/verbs/vuln-gate.js +152 -0
  257. package/dist/components/verbs/vuln-scan.js +288 -0
  258. package/dist/components/verbs/wait-verify.js +106 -0
  259. package/dist/components/verbs/wrangler.js +179 -0
  260. package/dist/components/wave-plan.js +102 -0
  261. package/dist/composite.js +305 -0
  262. package/dist/config-import.d.ts.map +1 -1
  263. package/dist/config-import.js +22 -0
  264. package/dist/config-sandbox.js +122 -0
  265. package/dist/config-static.js +206 -0
  266. package/dist/config.js +605 -0
  267. package/dist/content-digest.js +23 -0
  268. package/dist/declarable.js +114 -0
  269. package/dist/deep-observation.js +437 -0
  270. package/dist/detectLexicon.js +54 -0
  271. package/dist/discovery/cache.js +70 -0
  272. package/dist/discovery/collect.js +208 -0
  273. package/dist/discovery/cycles.js +95 -0
  274. package/dist/discovery/entity-wire-codec.js +391 -0
  275. package/dist/discovery/entity-wire.js +42 -0
  276. package/dist/discovery/files.js +121 -0
  277. package/dist/discovery/fold-import.d.ts.map +1 -1
  278. package/dist/discovery/fold-import.js +4178 -0
  279. package/dist/discovery/fold-rank.js +292 -0
  280. package/dist/discovery/graph.js +115 -0
  281. package/dist/discovery/import.d.ts.map +1 -1
  282. package/dist/discovery/import.js +65 -0
  283. package/dist/discovery/index.js +333 -0
  284. package/dist/discovery/param-deps.js +487 -0
  285. package/dist/discovery/resolve.js +39 -0
  286. package/dist/discovery/sandbox/bundle.js +214 -0
  287. package/dist/discovery/sandbox/child-errors.js +26 -0
  288. package/dist/discovery/sandbox/config-run.js +100 -0
  289. package/dist/discovery/sandbox/config-wire.js +183 -0
  290. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  291. package/dist/discovery/sandbox/driver.js +333 -0
  292. package/dist/discovery/sandbox/fork.js +229 -0
  293. package/dist/discovery/sandbox/policy-run.js +142 -0
  294. package/dist/discovery/sandbox/policy-wire.js +152 -0
  295. package/dist/discovery/sandbox/run.js +77 -0
  296. package/dist/discovery/specifier-resolve.js +320 -0
  297. package/dist/discovery/walk.js +284 -0
  298. package/dist/effect-receipt.js +340 -0
  299. package/dist/env.js +55 -0
  300. package/dist/errors.js +62 -0
  301. package/dist/fold/fold.js +1434 -0
  302. package/dist/fold/foldable-helpers.js +229 -0
  303. package/dist/fold/subset.js +696 -0
  304. package/dist/fold-provenance.js +414 -0
  305. package/dist/gate-decision.d.ts +36 -4
  306. package/dist/gate-decision.d.ts.map +1 -1
  307. package/dist/gate-decision.js +260 -0
  308. package/dist/gate-resume-run.js +154 -0
  309. package/dist/gated-waves.js +165 -0
  310. package/dist/governance.js +43 -0
  311. package/dist/graph-declared.js +45 -0
  312. package/dist/graph-detail.js +207 -0
  313. package/dist/graph-dot.js +54 -0
  314. package/dist/graph-effective.js +107 -0
  315. package/dist/graph-ir.js +623 -0
  316. package/dist/graph-layout.js +184 -0
  317. package/dist/graph-lens.js +105 -0
  318. package/dist/graph-mermaid.js +83 -0
  319. package/dist/graph-ops.js +39 -0
  320. package/dist/graph-refs.js +156 -0
  321. package/dist/held-elsewhere.js +87 -0
  322. package/dist/identity.js +251 -0
  323. package/dist/import/base-parser.js +34 -0
  324. package/dist/import/embedded.js +255 -0
  325. package/dist/import/generator.js +1 -0
  326. package/dist/import/ir-utils.js +85 -0
  327. package/dist/import/parser-options.js +45 -0
  328. package/dist/import/parser.js +1 -0
  329. package/dist/index.js +118 -0
  330. package/dist/intrinsic-interpolation.js +73 -0
  331. package/dist/intrinsic.js +31 -0
  332. package/dist/join-key.js +35 -0
  333. package/dist/kubectl-context.js +150 -0
  334. package/dist/lexicon-config.js +58 -0
  335. package/dist/lexicon-integrity.js +47 -0
  336. package/dist/lexicon-manifest.js +70 -0
  337. package/dist/lexicon-module.d.ts.map +1 -1
  338. package/dist/lexicon-module.js +241 -0
  339. package/dist/lexicon-output.js +218 -0
  340. package/dist/lexicon-plugin-helpers.js +104 -0
  341. package/dist/lexicon-schema.js +136 -0
  342. package/dist/lexicon.js +130 -0
  343. package/dist/lifecycle/affected.js +224 -0
  344. package/dist/lifecycle/assert-live.js +110 -0
  345. package/dist/lifecycle/build-ledger-store.js +160 -0
  346. package/dist/lifecycle/build-ledger.js +155 -0
  347. package/dist/lifecycle/change-set.js +356 -0
  348. package/dist/lifecycle/converge-ledger.js +161 -0
  349. package/dist/lifecycle/deep-diff.js +233 -0
  350. package/dist/lifecycle/deep-observe.js +147 -0
  351. package/dist/lifecycle/digest.js +143 -0
  352. package/dist/lifecycle/disruption.js +135 -0
  353. package/dist/lifecycle/gate-applied.js +113 -0
  354. package/dist/lifecycle/gate-audit.js +341 -0
  355. package/dist/lifecycle/gate-ledger-select.js +89 -0
  356. package/dist/lifecycle/gate-ledger.d.ts +8 -0
  357. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  358. package/dist/lifecycle/gate-ledger.js +193 -0
  359. package/dist/lifecycle/gate-origin.js +117 -0
  360. package/dist/lifecycle/gate-pending.js +58 -0
  361. package/dist/lifecycle/git.js +1182 -0
  362. package/dist/lifecycle/identity.js +58 -0
  363. package/dist/lifecycle/index.js +26 -0
  364. package/dist/lifecycle/lease.js +283 -0
  365. package/dist/lifecycle/ledger-port.js +1 -0
  366. package/dist/lifecycle/legacy-digest.js +91 -0
  367. package/dist/lifecycle/live-diff.js +274 -0
  368. package/dist/lifecycle/local-note.js +15 -0
  369. package/dist/lifecycle/member-ledger.js +122 -0
  370. package/dist/lifecycle/observation-baseline.js +155 -0
  371. package/dist/lifecycle/observe.js +375 -0
  372. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  373. package/dist/lifecycle/override-ledger.js +54 -0
  374. package/dist/lifecycle/plan-digest.js +110 -0
  375. package/dist/lifecycle/plan-ledger.js +129 -0
  376. package/dist/lifecycle/receipt-plan.js +192 -0
  377. package/dist/lifecycle/release-ledger.js +155 -0
  378. package/dist/lifecycle/release-read.js +64 -0
  379. package/dist/lifecycle/replay.js +193 -0
  380. package/dist/lifecycle/rollback.js +102 -0
  381. package/dist/lifecycle/run-ledger.js +183 -0
  382. package/dist/lifecycle/scenario-eval.js +204 -0
  383. package/dist/lifecycle/scenario.js +214 -0
  384. package/dist/lifecycle/snapshot.js +239 -0
  385. package/dist/lifecycle/status.js +447 -0
  386. package/dist/lifecycle/symptoms.js +117 -0
  387. package/dist/lifecycle/teardown.js +255 -0
  388. package/dist/lifecycle/types.js +1 -0
  389. package/dist/lifecycle/unobserved-gate.js +33 -0
  390. package/dist/lifecycle/wave-plans.js +68 -0
  391. package/dist/lifecycle/work-item-id.js +36 -0
  392. package/dist/lifecycle/work-lease.js +393 -0
  393. package/dist/lint/component-checks.js +87 -0
  394. package/dist/lint/config.js +483 -0
  395. package/dist/lint/declarative.js +122 -0
  396. package/dist/lint/discover.d.ts.map +1 -1
  397. package/dist/lint/discover.js +138 -0
  398. package/dist/lint/engine.js +246 -0
  399. package/dist/lint/knowledge-checks.js +64 -0
  400. package/dist/lint/named-checks.js +22 -0
  401. package/dist/lint/output-checks.js +87 -0
  402. package/dist/lint/output-docs.js +163 -0
  403. package/dist/lint/parser.js +33 -0
  404. package/dist/lint/pipeline-change-gate.js +70 -0
  405. package/dist/lint/policy-import.d.ts +1 -1
  406. package/dist/lint/policy-import.d.ts.map +1 -1
  407. package/dist/lint/policy-import.js +62 -0
  408. package/dist/lint/policy-sandbox.js +86 -0
  409. package/dist/lint/policy.js +122 -0
  410. package/dist/lint/post-synth.js +87 -0
  411. package/dist/lint/presets/relaxed.json +26 -0
  412. package/dist/lint/presets/strict.json +24 -24
  413. package/dist/lint/receipt-checks.js +83 -0
  414. package/dist/lint/rule-loader.d.ts.map +1 -1
  415. package/dist/lint/rule-loader.js +89 -0
  416. package/dist/lint/rule-registry.js +86 -0
  417. package/dist/lint/rule.js +1 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  441. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  442. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  443. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  444. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  445. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  446. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  447. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  448. package/dist/lint/rules/comp/index.js +33 -0
  449. package/dist/lint/rules/comp/support.js +129 -0
  450. package/dist/lint/rules/composite-scope.js +51 -0
  451. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  452. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  453. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  454. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  455. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  456. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  457. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  458. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  459. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  460. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  461. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  462. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  463. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  464. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  465. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  466. package/dist/lint/rules/export-required.js +115 -0
  467. package/dist/lint/rules/file-declarable-limit.js +88 -0
  468. package/dist/lint/rules/flat-declarations.js +62 -0
  469. package/dist/lint/rules/index.js +90 -0
  470. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  471. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  472. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  473. package/dist/lint/rules/no-string-ref.js +59 -0
  474. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  475. package/dist/lint/rules/no-unused-declarable.js +142 -0
  476. package/dist/lint/rules/op/index.js +28 -0
  477. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  478. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  479. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  480. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  481. package/dist/lint/rules/op/support.js +11 -0
  482. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  483. package/dist/lint/rules/property-kind.js +56 -0
  484. package/dist/lint/rules/single-concern-file.js +71 -0
  485. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  486. package/dist/lint/selectors.js +168 -0
  487. package/dist/lint/suppressions.js +129 -0
  488. package/dist/lint/typescript.js +17 -0
  489. package/dist/live-endpoint.js +113 -0
  490. package/dist/live-read-session.js +76 -0
  491. package/dist/lsp/lexicon-providers.js +163 -0
  492. package/dist/lsp/types.js +5 -0
  493. package/dist/managed-fields.js +293 -0
  494. package/dist/mcp/types.js +4 -0
  495. package/dist/notify-verify.js +0 -1
  496. package/dist/notify.js +0 -1
  497. package/dist/notify.schema.json +72 -0
  498. package/dist/observation.js +266 -0
  499. package/dist/okf-read.js +134 -0
  500. package/dist/okf.js +275 -0
  501. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  502. package/dist/op/activities/activity-contracts.js +313 -0
  503. package/dist/op/activities/apply.js +582 -0
  504. package/dist/op/activities/build.js +18 -0
  505. package/dist/op/activities/change-coverage.js +40 -0
  506. package/dist/op/activities/change-set.js +64 -0
  507. package/dist/op/activities/converge.js +492 -0
  508. package/dist/op/activities/decide.js +211 -0
  509. package/dist/op/activities/env-teardown.js +110 -0
  510. package/dist/op/activities/factory.js +591 -0
  511. package/dist/op/activities/forge-pull-request.js +82 -0
  512. package/dist/op/activities/gh-host.js +78 -0
  513. package/dist/op/activities/guard-validate.js +165 -0
  514. package/dist/op/activities/http-check.js +40 -0
  515. package/dist/op/activities/index.js +59 -0
  516. package/dist/op/activities/lexicon-upgrade.js +629 -0
  517. package/dist/op/activities/lifecycle.js +109 -0
  518. package/dist/op/activities/pipeline-audit.js +147 -0
  519. package/dist/op/activities/policy.js +26 -0
  520. package/dist/op/activities/predict-behaviour.js +341 -0
  521. package/dist/op/activities/propose-upgrade.js +165 -0
  522. package/dist/op/activities/reconcile.js +997 -0
  523. package/dist/op/activities/shell.js +118 -0
  524. package/dist/op/activities/source-release.js +97 -0
  525. package/dist/op/activities/source-rollback.js +165 -0
  526. package/dist/op/activities/teardown.js +17 -0
  527. package/dist/op/activities/util.js +6 -0
  528. package/dist/op/activities/wait.js +51 -0
  529. package/dist/op/activities/work-evidence.js +35 -0
  530. package/dist/op/activities/workflow-audit.js +133 -0
  531. package/dist/op/activity-contract-registry.js +106 -0
  532. package/dist/op/activity-contract.js +232 -0
  533. package/dist/op/activity-failure.js +31 -0
  534. package/dist/op/activity-profiles.js +129 -0
  535. package/dist/op/activity-registry.js +105 -0
  536. package/dist/op/activity-runtime.js +28 -0
  537. package/dist/op/builders.js +801 -0
  538. package/dist/op/change-signal.js +118 -0
  539. package/dist/op/composites/apply-op.js +151 -0
  540. package/dist/op/composites/behaviour-op.js +65 -0
  541. package/dist/op/composites/converge-op.js +141 -0
  542. package/dist/op/composites/index.js +19 -0
  543. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  544. package/dist/op/composites/pipeline-audit-op.js +50 -0
  545. package/dist/op/composites/reconcile-op.js +84 -0
  546. package/dist/op/composites/watch-op.js +69 -0
  547. package/dist/op/composites/workflow-audit-op.js +57 -0
  548. package/dist/op/converge-rule.js +205 -0
  549. package/dist/op/cron.js +146 -0
  550. package/dist/op/decide-backend.js +181 -0
  551. package/dist/op/decide-config.js +68 -0
  552. package/dist/op/decide-read-inputs.js +141 -0
  553. package/dist/op/discover.d.ts.map +1 -1
  554. package/dist/op/discover.js +213 -0
  555. package/dist/op/duration.js +21 -0
  556. package/dist/op/emulator-freshness.js +80 -0
  557. package/dist/op/emulator-lifecycle.js +269 -0
  558. package/dist/op/factory.js +83 -0
  559. package/dist/op/gate-approval.js +172 -0
  560. package/dist/op/gate-name.js +86 -0
  561. package/dist/op/gate-plan-context.js +167 -0
  562. package/dist/op/gate-point-run.js +67 -0
  563. package/dist/op/gate-point.js +111 -0
  564. package/dist/op/gate-resume-plan.js +155 -0
  565. package/dist/op/gate-resume.js +31 -0
  566. package/dist/op/gate-review.js +290 -0
  567. package/dist/op/gate-run-locator.js +85 -0
  568. package/dist/op/gate-summary.js +100 -0
  569. package/dist/op/gate-wait.js +56 -0
  570. package/dist/op/gate.js +449 -0
  571. package/dist/op/generate-pipeline.js +124 -0
  572. package/dist/op/index.js +51 -0
  573. package/dist/op/lifecycle-receipt-store.js +45 -0
  574. package/dist/op/local-executor.js +1164 -0
  575. package/dist/op/local-output.js +140 -0
  576. package/dist/op/op-ir.js +317 -0
  577. package/dist/op/op-verb-class.js +131 -0
  578. package/dist/op/op-waves-notify.js +136 -0
  579. package/dist/op/op-waves-run.d.ts +1 -1
  580. package/dist/op/op-waves-run.d.ts.map +1 -1
  581. package/dist/op/op-waves-run.js +1657 -0
  582. package/dist/op/op-waves.js +409 -0
  583. package/dist/op/operator.js +743 -0
  584. package/dist/op/receipt-store.js +94 -0
  585. package/dist/op/resource.js +23 -0
  586. package/dist/op/run-context.js +28 -0
  587. package/dist/op/run-live.js +256 -0
  588. package/dist/op/runtime.js +21 -0
  589. package/dist/op/runtimes/local.js +195 -0
  590. package/dist/op/source-archive.js +131 -0
  591. package/dist/op/step-output-ref.js +397 -0
  592. package/dist/op/steward-beside.js +169 -0
  593. package/dist/op/steward-points.js +138 -0
  594. package/dist/op/steward-turn.js +59 -0
  595. package/dist/op/steward.js +317 -0
  596. package/dist/op/types.js +25 -0
  597. package/dist/op/work-lease-decl.js +81 -0
  598. package/dist/op/work-lease-run.js +393 -0
  599. package/dist/override-gate.js +284 -0
  600. package/dist/owner-chain.js +74 -0
  601. package/dist/ownership.js +92 -0
  602. package/dist/params.js +61 -0
  603. package/dist/plan-summary.js +711 -0
  604. package/dist/point-decision.js +211 -0
  605. package/dist/pr-forge.js +810 -0
  606. package/dist/pr-loop.js +203 -0
  607. package/dist/project-codegen.js +191 -0
  608. package/dist/project-root.js +74 -0
  609. package/dist/project-validation.js +50 -0
  610. package/dist/provenance.js +157 -0
  611. package/dist/pseudo-parameter.js +40 -0
  612. package/dist/reconcile.js +450 -0
  613. package/dist/resource-attributes.js +33 -0
  614. package/dist/runtime-adapter.js +77 -0
  615. package/dist/runtime.js +66 -0
  616. package/dist/secret-materialization.js +153 -0
  617. package/dist/secret-provenance.js +250 -0
  618. package/dist/serializer-walker.js +112 -0
  619. package/dist/serializer.js +1 -0
  620. package/dist/sort.js +45 -0
  621. package/dist/stack-output.js +115 -0
  622. package/dist/telemetry-attribution.js +149 -0
  623. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  624. package/dist/terraform/adopt-state.js +40 -0
  625. package/dist/terraform/aws-resources.js +384 -0
  626. package/dist/terraform/bridge.js +204 -0
  627. package/dist/terraform/carve-provider.js +155 -0
  628. package/dist/terraform/carve.js +138 -0
  629. package/dist/terraform/data-source-shape.js +57 -0
  630. package/dist/terraform/emit-source.js +36 -0
  631. package/dist/terraform/excise.js +123 -0
  632. package/dist/terraform/graduate.js +128 -0
  633. package/dist/terraform/graph.js +435 -0
  634. package/dist/terraform/hcl2json.js +60 -0
  635. package/dist/terraform/manifest.js +149 -0
  636. package/dist/terraform/parse.js +81 -0
  637. package/dist/terraform/providers/aws.js +146 -0
  638. package/dist/terraform/providers/gcp.js +294 -0
  639. package/dist/terraform/providers/index.js +17 -0
  640. package/dist/terraform/providers/kubernetes.js +253 -0
  641. package/dist/terraform/score.js +151 -0
  642. package/dist/terraform/state.js +67 -0
  643. package/dist/terraform/tier-map.js +74 -0
  644. package/dist/terraform/types.js +13 -0
  645. package/dist/terraform/unified-diff.js +132 -0
  646. package/dist/testing.js +295 -0
  647. package/dist/toml-emit.js +153 -0
  648. package/dist/toml-parse.js +355 -0
  649. package/dist/toml-utils.js +60 -0
  650. package/dist/toml.js +428 -0
  651. package/dist/ts-loader.d.ts +46 -0
  652. package/dist/ts-loader.d.ts.map +1 -0
  653. package/dist/ts-loader.js +103 -0
  654. package/dist/types.js +1 -0
  655. package/dist/utils.js +61 -0
  656. package/dist/validation.js +20 -0
  657. package/dist/vendor/js-yaml-load.js +1662 -0
  658. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  659. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  660. package/dist/workspace/__fixtures__/sessions.js +91 -0
  661. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  662. package/dist/workspace/agent-cli.js +99 -0
  663. package/dist/workspace/agent.schema.json +390 -0
  664. package/dist/workspace/answers-ledger.js +89 -0
  665. package/dist/workspace/box-cli.js +142 -0
  666. package/dist/workspace/box-factory-write.js +196 -0
  667. package/dist/workspace/box-factory-write.schema.json +342 -0
  668. package/dist/workspace/box-factory.js +88 -0
  669. package/dist/workspace/box-intent.js +126 -0
  670. package/dist/workspace/box-isolation.js +169 -0
  671. package/dist/workspace/box-listing-write.schema.json +204 -0
  672. package/dist/workspace/box-listing.js +298 -0
  673. package/dist/workspace/box-publish.js +352 -0
  674. package/dist/workspace/box-publish.schema.json +498 -0
  675. package/dist/workspace/box-services.js +39 -0
  676. package/dist/workspace/broker-protocol.js +359 -0
  677. package/dist/workspace/broker-protocol.schema.json +228 -0
  678. package/dist/workspace/change-set.schema.json +460 -0
  679. package/dist/workspace/changes-cli.js +56 -0
  680. package/dist/workspace/changes.js +446 -0
  681. package/dist/workspace/changes.schema.json +642 -0
  682. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  683. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  684. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  685. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  686. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  687. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  688. package/dist/workspace/chant-migrations.js +113 -0
  689. package/dist/workspace/check.schema.json +433 -0
  690. package/dist/workspace/checks/box-isolation.js +62 -0
  691. package/dist/workspace/checks/boxes.js +491 -0
  692. package/dist/workspace/checks/diagrams.js +104 -0
  693. package/dist/workspace/checks/generated.js +419 -0
  694. package/dist/workspace/checks/ledgers.js +212 -0
  695. package/dist/workspace/checks/links.js +191 -0
  696. package/dist/workspace/checks/live.js +100 -0
  697. package/dist/workspace/checks/pipelines.js +188 -0
  698. package/dist/workspace/checks/records.js +169 -0
  699. package/dist/workspace/checks.js +426 -0
  700. package/dist/workspace/ci-green-cli.js +125 -0
  701. package/dist/workspace/ci-green-forge.js +83 -0
  702. package/dist/workspace/ci-green-workflow.js +199 -0
  703. package/dist/workspace/ci-green.js +325 -0
  704. package/dist/workspace/ci-last-green.schema.json +158 -0
  705. package/dist/workspace/compose-graph.js +235 -0
  706. package/dist/workspace/compose-reports.js +146 -0
  707. package/dist/workspace/composites.js +264 -0
  708. package/dist/workspace/composites.schema.json +617 -0
  709. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  710. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  711. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  712. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  713. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  714. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  715. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  716. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  717. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  718. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  719. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  720. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  721. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  722. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  723. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  724. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  725. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  726. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  727. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  728. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  729. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  730. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  731. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  732. package/dist/workspace/conformance/broker.js +736 -0
  733. package/dist/workspace/conformance/index.js +673 -0
  734. package/dist/workspace/conformance/vitest.js +108 -0
  735. package/dist/workspace/conformance/writer.js +1080 -0
  736. package/dist/workspace/decide.js +879 -0
  737. package/dist/workspace/decision-points.schema.json +135 -135
  738. package/dist/workspace/declaration-write-cli.js +74 -0
  739. package/dist/workspace/declaration-write.js +238 -0
  740. package/dist/workspace/declaration.js +938 -0
  741. package/dist/workspace/declaration.schema.json +1413 -1413
  742. package/dist/workspace/declared-kinds.js +106 -0
  743. package/dist/workspace/environments.js +164 -0
  744. package/dist/workspace/evidence.schema.json +279 -0
  745. package/dist/workspace/export-cli.js +185 -0
  746. package/dist/workspace/export.js +499 -0
  747. package/dist/workspace/factory-rules.js +175 -0
  748. package/dist/workspace/generated-files.js +92 -0
  749. package/dist/workspace/glob.js +45 -0
  750. package/dist/workspace/graph-cache.js +352 -0
  751. package/dist/workspace/graph-cli.js +348 -0
  752. package/dist/workspace/graph.schema.json +1338 -0
  753. package/dist/workspace/identity-gate-rule.d.ts +65 -0
  754. package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
  755. package/dist/workspace/identity-gate-rule.js +75 -0
  756. package/dist/workspace/identity.d.ts +4 -2
  757. package/dist/workspace/identity.d.ts.map +1 -1
  758. package/dist/workspace/identity.js +126 -0
  759. package/dist/workspace/import.js +283 -0
  760. package/dist/workspace/init.js +620 -0
  761. package/dist/workspace/intent-cli.js +263 -0
  762. package/dist/workspace/intent-joins.js +201 -0
  763. package/dist/workspace/intent-record.js +352 -0
  764. package/dist/workspace/intent-record.schema.json +864 -0
  765. package/dist/workspace/intent.js +1582 -0
  766. package/dist/workspace/intent.schema.json +2420 -0
  767. package/dist/workspace/json-edit.js +221 -0
  768. package/dist/workspace/jsonc.js +235 -0
  769. package/dist/workspace/kind-readers.js +103 -0
  770. package/dist/workspace/kinds.js +587 -0
  771. package/dist/workspace/lexicon-symbols.js +112 -0
  772. package/dist/workspace/lineage-adopt-cli.js +102 -0
  773. package/dist/workspace/lineage-adopt.js +360 -0
  774. package/dist/workspace/lineage-check.js +282 -0
  775. package/dist/workspace/lineage-cli.js +121 -0
  776. package/dist/workspace/lineage-hash-index.js +284 -0
  777. package/dist/workspace/lineage-init.js +507 -0
  778. package/dist/workspace/lineage-lock.js +387 -0
  779. package/dist/workspace/lineage-merge.js +45 -0
  780. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  781. package/dist/workspace/lineage-migrations.js +329 -0
  782. package/dist/workspace/lineage-provenance.js +36 -0
  783. package/dist/workspace/lineage-update.js +138 -0
  784. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  785. package/dist/workspace/lineage-upgrade.js +889 -0
  786. package/dist/workspace/lineage-vendor.js +171 -0
  787. package/dist/workspace/lineage-version.js +128 -0
  788. package/dist/workspace/lineage-versions.js +275 -0
  789. package/dist/workspace/links.js +330 -0
  790. package/dist/workspace/ls-generated.js +95 -0
  791. package/dist/workspace/ls.js +277 -0
  792. package/dist/workspace/ls.schema.json +333 -0
  793. package/dist/workspace/member-commands.js +508 -0
  794. package/dist/workspace/member-handles.js +216 -0
  795. package/dist/workspace/member-pipeline.js +258 -0
  796. package/dist/workspace/member-run.js +117 -0
  797. package/dist/workspace/member-write.schema.json +193 -0
  798. package/dist/workspace/nested-graph.js +156 -0
  799. package/dist/workspace/nesting.js +38 -0
  800. package/dist/workspace/patch.js +301 -0
  801. package/dist/workspace/patch.schema.json +321 -0
  802. package/dist/workspace/pin-cli.js +55 -0
  803. package/dist/workspace/pin-integrity.js +100 -0
  804. package/dist/workspace/plan-summary.schema.json +155 -0
  805. package/dist/workspace/point-answer.schema.json +129 -129
  806. package/dist/workspace/points-cli.js +291 -0
  807. package/dist/workspace/points-write.schema.json +660 -0
  808. package/dist/workspace/points.js +521 -0
  809. package/dist/workspace/points.schema.json +916 -0
  810. package/dist/workspace/pr-report.schema.json +108 -0
  811. package/dist/workspace/principal-classes.d.ts +3 -14
  812. package/dist/workspace/principal-classes.d.ts.map +1 -1
  813. package/dist/workspace/principal-classes.js +245 -0
  814. package/dist/workspace/reason-codes.js +326 -0
  815. package/dist/workspace/record-assets.js +151 -0
  816. package/dist/workspace/record-decided.js +105 -0
  817. package/dist/workspace/record-sessions.js +96 -0
  818. package/dist/workspace/record-source.js +114 -0
  819. package/dist/workspace/records-amend.schema.json +284 -0
  820. package/dist/workspace/records-checkout.js +76 -0
  821. package/dist/workspace/records-cli.js +707 -0
  822. package/dist/workspace/records-close.js +116 -0
  823. package/dist/workspace/records-close.schema.json +278 -0
  824. package/dist/workspace/records-new.schema.json +202 -0
  825. package/dist/workspace/records-review.schema.json +367 -0
  826. package/dist/workspace/records-since.js +317 -0
  827. package/dist/workspace/records-since.schema.json +218 -0
  828. package/dist/workspace/records-write.js +1229 -0
  829. package/dist/workspace/records.js +1345 -0
  830. package/dist/workspace/records.schema.json +604 -0
  831. package/dist/workspace/reference-kinds/app/package.json +10 -0
  832. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  833. package/dist/workspace/returns.js +303 -0
  834. package/dist/workspace/root-refusal.js +75 -0
  835. package/dist/workspace/run-statement.schema.json +622 -0
  836. package/dist/workspace/runs-cli.js +584 -0
  837. package/dist/workspace/runs-write.schema.json +994 -0
  838. package/dist/workspace/runs.js +708 -0
  839. package/dist/workspace/runs.schema.json +1257 -0
  840. package/dist/workspace/runtimes.js +76 -0
  841. package/dist/workspace/session-kinds.js +83 -0
  842. package/dist/workspace/signers.schema.json +206 -0
  843. package/dist/workspace/source-block.js +125 -0
  844. package/dist/workspace/squash.js +177 -0
  845. package/dist/workspace/status-gates.js +162 -0
  846. package/dist/workspace/status-stewards.js +330 -0
  847. package/dist/workspace/status.js +514 -0
  848. package/dist/workspace/status.schema.json +998 -0
  849. package/dist/workspace/steward-index.js +191 -0
  850. package/dist/workspace/symbols.js +188 -0
  851. package/dist/workspace/template-manifest.js +227 -0
  852. package/dist/workspace/template-pins.js +115 -0
  853. package/dist/workspace/trailer-joins.js +65 -0
  854. package/dist/workspace/trailers.js +111 -0
  855. package/dist/workspace/tree.js +136 -0
  856. package/dist/workspace/trust/attestor.js +63 -0
  857. package/dist/workspace/trust/dsse.js +108 -0
  858. package/dist/workspace/trust/evidence-cli.js +175 -0
  859. package/dist/workspace/trust/evidence.js +161 -0
  860. package/dist/workspace/trust/gate-seal.js +226 -0
  861. package/dist/workspace/trust/policy.js +190 -0
  862. package/dist/workspace/trust/provenance.js +180 -0
  863. package/dist/workspace/trust/rotation.js +298 -0
  864. package/dist/workspace/trust/run-commits.js +101 -0
  865. package/dist/workspace/trust/run-statement.js +182 -0
  866. package/dist/workspace/trust/seal.js +272 -0
  867. package/dist/workspace/trust/signers-cli.js +152 -0
  868. package/dist/workspace/trust/ssh-commit.js +178 -0
  869. package/dist/workspace/trust/test-repo.js +118 -0
  870. package/dist/workspace/trust/trust-files.js +193 -0
  871. package/dist/workspace/trust/verify-cli.js +63 -0
  872. package/dist/workspace/trust/verify.js +192 -0
  873. package/dist/workspace/which-chant.js +141 -0
  874. package/dist/workspace/wip-cli.js +95 -0
  875. package/dist/workspace/wip-write.schema.json +504 -0
  876. package/dist/workspace/wip.js +631 -0
  877. package/dist/workspace/wip.schema.json +334 -0
  878. package/dist/workspace/work-cli.js +448 -0
  879. package/dist/workspace/work-evidence.js +122 -0
  880. package/dist/workspace/work-evidence.schema.json +222 -0
  881. package/dist/workspace/work-history.schema.json +421 -0
  882. package/dist/workspace/work-lease.schema.json +246 -0
  883. package/dist/workspace/work-size.js +77 -0
  884. package/dist/workspace/work.js +283 -0
  885. package/dist/workspace/workspace-kinds.schema.json +259 -259
  886. package/dist/workspace/workspace-principals.schema.json +53 -53
  887. package/dist/workspace/write-lock-cli.js +105 -0
  888. package/dist/workspace/write-lock.js +424 -0
  889. package/dist/workspace/write-lock.schema.json +172 -0
  890. package/dist/workspace/write-scope.js +484 -0
  891. package/dist/yaml.js +459 -0
  892. package/package.json +2 -2
  893. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  894. package/src/cli/commands/lint.ts +36 -6
  895. package/src/cli/commands/migrate.ts +2 -0
  896. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  897. package/src/cli/main.ts +121 -27
  898. package/src/cli/mcp/workspace-tools.ts +1 -1
  899. package/src/codegen/pinned-upgrade.ts +2 -0
  900. package/src/components/discover.ts +2 -0
  901. package/src/components/sandbox/driver.ts +3 -1
  902. package/src/config-import.ts +3 -0
  903. package/src/discovery/fold-import.ts +23 -14
  904. package/src/discovery/import.ts +2 -0
  905. package/src/discovery/sandbox/driver.ts +3 -1
  906. package/src/gate-decision-bundle.test.ts +3 -2
  907. package/src/gate-decision-identity.test.ts +176 -0
  908. package/src/gate-decision.ts +100 -22
  909. package/src/lexicon-module.ts +3 -0
  910. package/src/lifecycle/gate-ledger.ts +8 -0
  911. package/src/lint/config.ts +1 -1
  912. package/src/lint/discover.ts +28 -8
  913. package/src/lint/policy-import.ts +4 -1
  914. package/src/lint/rule-loader.ts +2 -0
  915. package/src/op/discover.ts +3 -0
  916. package/src/op/op-waves-point.test.ts +1 -0
  917. package/src/op/op-waves-run.ts +5 -4
  918. package/src/op/op-waves.test.ts +14 -0
  919. package/src/ts-loader.test.ts +23 -0
  920. package/src/ts-loader.ts +122 -0
  921. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  922. package/src/workspace/declaration.ts +1 -1
  923. package/src/workspace/identity-gate-rule.ts +109 -0
  924. package/src/workspace/identity.ts +8 -18
  925. package/src/workspace/kinds.ts +1 -1
  926. package/src/workspace/lineage-migrations.ts +2 -0
  927. package/src/workspace/points.ts +1 -1
  928. package/src/workspace/principal-classes.ts +5 -30
@@ -0,0 +1,139 @@
1
+ import { readFileSync } from "fs";
2
+ import { resolve } from "path";
3
+ import { resolveBuildParams } from "../build-params.js";
4
+ import { formatError, formatInfo } from "./format.js";
5
+ /**
6
+ * Shared CLI-layer wiring for chant #1064's build-time parameters, factored
7
+ * out (chant #1108) so every command that discovers project source before
8
+ * running it resolves `chant.config.ts`'s declared `buildParams` the exact
9
+ * same way: `chant build` (`../commands/build.ts`'s `buildCommand`), the
10
+ * component deploy driver (`./handlers/run.ts`'s `chant run --components`),
11
+ * and generate mode (`./handlers/build.ts`'s
12
+ * `chant build --components --generate <lexicon>`).
13
+ *
14
+ * Before #1108, only `buildCommand` ran this sequence — `chant run
15
+ * --components` never resolved `--param`/`--params-file`/a declared `env`
16
+ * mapping at all, so a `*.component.ts` file reading `params.<name>`
17
+ * (`@intentius/chant/params`) always saw `{}`, no matter what a CI job
18
+ * exported into the environment. See ../build-params.ts's module doc for the
19
+ * full precedence rules this wraps.
20
+ */
21
+ /** Parse repeated `--param name=value` flags into a flat `{ name: value }` record — the raw (unvalidated) strings {@link resolveCliBuildParams} resolves against a project's declared `buildParams`. `undefined` when no `--param` flag was given, matching `resolveBuildParams`'s "no cli input" shape. */
22
+ export function parseParamFlags(entries) {
23
+ if (!entries?.length)
24
+ return undefined;
25
+ return Object.fromEntries(entries.map((entry) => {
26
+ const eq = entry.indexOf("=");
27
+ return eq === -1 ? [entry, ""] : [entry.slice(0, eq), entry.slice(eq + 1)];
28
+ }));
29
+ }
30
+ /**
31
+ * Resolve this invocation's declared build-time parameters (`chant.config.ts`'s
32
+ * `buildParams`) against `args`/the process environment, and log each
33
+ * resolved value — the identical resolution + logging sequence `chant build`
34
+ * runs (`../commands/build.ts`'s `buildCommand`), factored out so every other
35
+ * command that discovers project source runs it too (chant #1108).
36
+ *
37
+ * A resolution failure (an unknown `--param`/`--params-file` name, a missing
38
+ * required value, a type/enum mismatch, or an unreadable `--params-file`) is
39
+ * returned as `{ success: false, errors }` — never thrown — so the caller can
40
+ * print each message and exit non-zero exactly like a build error, matching
41
+ * chant #1064's acceptance criterion that this never surfaces as a thrown
42
+ * error from inside user source.
43
+ *
44
+ * On success, the resolution is summarized on one `console.error` line —
45
+ * `N build parameters resolved (a default, b from cli, ...); --verbose to
46
+ * list` — so silence never means "no parameters reached us", and the count
47
+ * by source says whether an override arrived. Under `--verbose` (or
48
+ * `CHANT_PARAM_ECHO=all`) every parameter is listed as
49
+ * `[param] <name> = <value> (<source>)` instead (#1424).
50
+ */
51
+ export function resolveCliBuildParams(buildParamsConfig, args) {
52
+ const errors = [];
53
+ let fromFile;
54
+ if (args.paramsFile) {
55
+ try {
56
+ fromFile = JSON.parse(readFileSync(resolve(args.paramsFile), "utf-8"));
57
+ }
58
+ catch (err) {
59
+ errors.push(formatError({
60
+ message: `Failed to read/parse --params-file "${args.paramsFile}": ${err instanceof Error ? err.message : String(err)}`,
61
+ }));
62
+ }
63
+ }
64
+ const resolution = resolveBuildParams(buildParamsConfig, {
65
+ cli: args.cli,
66
+ fromFile,
67
+ env: process.env,
68
+ });
69
+ for (const message of resolution.errors) {
70
+ errors.push(formatError({ message }));
71
+ }
72
+ if (errors.length > 0) {
73
+ return { success: false, provenance: [], errors };
74
+ }
75
+ // #1424 — one line by default. A project with two dozen declared
76
+ // parameters printed two dozen grey lines on every build, ahead of the
77
+ // warnings the reader actually needed. The count by source still answers
78
+ // "did my override reach the build" (the failure mode
79
+ // warnIfParamsCannotReachProject exists for); --verbose names every value.
80
+ const verbose = args.verbose === true || process.env.CHANT_PARAM_ECHO === "all";
81
+ if (verbose) {
82
+ for (const p of resolution.provenance) {
83
+ console.error(formatInfo(`[param] ${p.name} = ${JSON.stringify(p.value)} (${p.source})`));
84
+ }
85
+ }
86
+ else if (resolution.provenance.length > 0) {
87
+ console.error(formatInfo(summarizeBuildParams(resolution.provenance)));
88
+ }
89
+ return { success: true, provenance: resolution.provenance, errors: [] };
90
+ }
91
+ /**
92
+ * `N build parameters resolved (1 from cli, 3 default); --verbose to list` —
93
+ * the non-verbose echo of a successful resolution (#1424). Sources appear in
94
+ * precedence order; a source nobody used is left out.
95
+ */
96
+ export function summarizeBuildParams(provenance) {
97
+ const counts = new Map();
98
+ for (const p of provenance)
99
+ counts.set(p.source, (counts.get(p.source) ?? 0) + 1);
100
+ const order = ["cli", "params-file", "env", "default"];
101
+ const rank = (s) => (order.includes(s) ? order.indexOf(s) : order.length);
102
+ const parts = [...counts.keys()]
103
+ .sort((a, b) => rank(a) - rank(b))
104
+ .map((source) => (source === "default" ? `${counts.get(source)} default` : `${counts.get(source)} from ${source}`));
105
+ const n = provenance.length;
106
+ return `${n} build parameter${n === 1 ? "" : "s"} resolved (${parts.join(", ")}); --verbose to list`;
107
+ }
108
+ /**
109
+ * Resolve a command's declared build-time parameters, the same way `chant
110
+ * build` does, so a `build()`/`discover()` on the declared side sees the values
111
+ * the source will actually read.
112
+ *
113
+ * Every command that reads declared source needs this and only `chant build`
114
+ * had it. `chant graph` was fixed in #1483; the lifecycle family — `diff`,
115
+ * `snapshot`, `plan`, and `components status --live` — built the declared side
116
+ * on parameter *defaults* while the live side was whatever is really deployed.
117
+ *
118
+ * For a project whose parameters choose which resources *exist* that is not a
119
+ * near miss. `chant lifecycle diff dev --live` on kubemicrovm-ops returned
120
+ * byte-identical output at `KMV_TIER=minimal` and `KMV_TIER=prod-ha`, and
121
+ * reported the tier label itself as drift — `minimal → prod-ha`, declared
122
+ * against live — which is the comparison announcing it is against the wrong
123
+ * declaration.
124
+ *
125
+ * Returns `undefined` when resolution failed, having printed why: the caller
126
+ * should stop rather than compare against source that will not build.
127
+ */
128
+ export async function commandBuildParams(buildParamsConfig, args) {
129
+ const resolution = resolveCliBuildParams(buildParamsConfig, {
130
+ cli: parseParamFlags(args.param),
131
+ paramsFile: args.paramsFile,
132
+ });
133
+ if (!resolution.success) {
134
+ for (const message of resolution.errors)
135
+ console.error(message);
136
+ return undefined;
137
+ }
138
+ return resolution.provenance;
139
+ }
@@ -0,0 +1,123 @@
1
+ /**
2
+ * Top-level command words core's own static registry already owns
3
+ * (`packages/core/src/cli/main.ts`'s `registry`). A lexicon's `commands()`
4
+ * group name colliding with one of these is always unreachable — core's own
5
+ * registry is resolved first, unconditionally — so `checkConflicts`
6
+ * (./conflict-check.ts) treats a collision as a hard, loud failure at
7
+ * plugin-load time rather than a silently-ignored command group. Hand
8
+ * maintained alongside the registry; update both together.
9
+ *
10
+ * `workspace` is reserved before core has the command (#2529, #2524 D12), so
11
+ * no lexicon can claim the word first and later be shadowed by it. Only a
12
+ * command-group name is reserved: a lexicon's own config field or flag
13
+ * called `workspace` (the terraform lexicon's root config has one) is
14
+ * untouched.
15
+ */
16
+ export const RESERVED_COMMAND_NAMES = new Set([
17
+ "build", "lint", "list", "describe", "import", "audit", "migrate", "carve",
18
+ "init", "update", "doctor", "dev", "run", "graph", "vendor", "lifecycle",
19
+ "lc", "components", "emulator", "serve", "operator", "approve",
20
+ "workspace",
21
+ ]);
22
+ /**
23
+ * chant #1127 — split a joined `--flag=value` token into two array elements
24
+ * (`--flag`, `value`), the same discipline core's own `parseArgs` applies,
25
+ * generalized so a lexicon's mounted command can reuse it for its own flag
26
+ * vocabulary instead of reimplementing the split. Throws the same shape of
27
+ * error as core's parser when `flag` is declared boolean but was given a
28
+ * value — a boolean has nothing to assign, and silently reinterpreting the
29
+ * joined value as the next positional would be exactly the silent misparse
30
+ * #1127 closed for core's own flags.
31
+ */
32
+ export function splitJoinedFlags(args, booleanFlags = new Set()) {
33
+ const out = [];
34
+ for (const arg of args) {
35
+ if (arg.startsWith("--") && arg.includes("=")) {
36
+ const eq = arg.indexOf("=");
37
+ const flag = arg.slice(0, eq);
38
+ const value = arg.slice(eq + 1);
39
+ if (booleanFlags.has(flag)) {
40
+ throw new Error(`${arg} — ${flag} is a boolean flag and does not take a value. Pass ${flag} on its own.`);
41
+ }
42
+ out.push(flag, value);
43
+ }
44
+ else {
45
+ out.push(arg);
46
+ }
47
+ }
48
+ return out;
49
+ }
50
+ /**
51
+ * Same "Unknown flag" error shape core's own `parseArgs` throws (#1127), for
52
+ * a mounted command's own flag vocabulary — core doesn't know that
53
+ * vocabulary, so it can't produce this error itself; the handler does, using
54
+ * this helper for a consistent message.
55
+ */
56
+ export function unknownFlagError(flag, hint = `Run "chant --help" to see supported flags.`) {
57
+ return new Error(`Unknown flag: ${flag}\n${hint}`);
58
+ }
59
+ /**
60
+ * Find the plugin (if any) whose `commands()` group is named `groupName`,
61
+ * and the verb within it named `verbName`. Pure — does no I/O, calls
62
+ * `plugin.commands()` at most once per plugin (registration, not execution:
63
+ * this never invokes a verb's handler).
64
+ */
65
+ export function resolveCommandGroupVerb(plugins, groupName, verbName) {
66
+ for (const plugin of plugins) {
67
+ const group = plugin.commands?.();
68
+ if (!group || group.name !== groupName)
69
+ continue;
70
+ if (verbName === undefined)
71
+ return { kind: "no-verb", group };
72
+ const command = group.commands.find((c) => c.name === verbName);
73
+ if (!command)
74
+ return { kind: "unknown-verb", group };
75
+ return { kind: "matched", plugin, group, command };
76
+ }
77
+ return { kind: "no-group" };
78
+ }
79
+ /** Every command group contributed by the given loaded plugins, in plugin order. */
80
+ export function collectCommandGroups(plugins) {
81
+ const groups = [];
82
+ for (const plugin of plugins) {
83
+ const group = plugin.commands?.();
84
+ if (group)
85
+ groups.push(group);
86
+ }
87
+ return groups;
88
+ }
89
+ /**
90
+ * Resolve `groupName`/`verbName` against the loaded plugins and, if matched,
91
+ * run the verb's handler with `rawArgs`. Returns `{ kind: "no-group" }` when
92
+ * nothing claims `groupName` at all — the caller's cue to fall back to its
93
+ * own "unknown command" handling — and a printable usage error when the
94
+ * group matched but the verb didn't (or was omitted).
95
+ */
96
+ export async function dispatchCommandGroup(plugins, groupName, verbName, rawArgs) {
97
+ const lookup = resolveCommandGroupVerb(plugins, groupName, verbName);
98
+ if (lookup.kind === "no-group")
99
+ return { kind: "no-group" };
100
+ if (lookup.kind === "matched") {
101
+ const exitCode = await lookup.command.handler({ verb: verbName, rawArgs });
102
+ return { kind: "ran", exitCode };
103
+ }
104
+ const verbs = lookup.group.commands.map((c) => ` ${c.name.padEnd(14)} ${c.description}`).join("\n");
105
+ const message = lookup.kind === "unknown-verb"
106
+ ? `Unknown ${groupName} subcommand: ${verbName}`
107
+ : `Usage: chant ${groupName} <verb> [args...]`;
108
+ return { kind: "usage-error", message, hint: `Available verbs:\n${verbs}` };
109
+ }
110
+ /**
111
+ * Render the `--help` section listing every lexicon-contributed command
112
+ * group. Empty string when there are none, so a caller can splice it in
113
+ * unconditionally without an extra length check.
114
+ */
115
+ export function formatCommandGroupsHelp(groups) {
116
+ if (groups.length === 0)
117
+ return "";
118
+ const lines = groups.flatMap((g) => [
119
+ ` ${g.name.padEnd(20)} ${g.description}`,
120
+ ...g.commands.map((c) => ` ${g.name} ${c.name.padEnd(Math.max(1, 17 - g.name.length))}${c.description}`),
121
+ ]);
122
+ return `Lexicon commands:\n${lines.join("\n")}\n`;
123
+ }
@@ -0,0 +1,326 @@
1
+ /**
2
+ * `chant audit --agents` — audit the agent configuration on this machine.
3
+ *
4
+ * This is a different *subject* from the rest of `chant audit` (a machine, not
5
+ * a repo) but deliberately the same *product*: the same tiering, the same
6
+ * five output formats, the same rule-catalog links. A reader who already knows
7
+ * how to read a chant audit report can read this one, and the HTML/SARIF/JSON
8
+ * consumers downstream need no changes.
9
+ *
10
+ * The bridge is {@link toAuditFindings}: an `AgentFinding` is projected onto
11
+ * the `AuditFinding` shape the renderers already take, with the site id in
12
+ * `entity` so a reader can tell which configuration a finding came from.
13
+ *
14
+ * Two things this command adds that a repo audit has no need for:
15
+ *
16
+ * - **An inventory.** "What is configured on this machine" is the primary
17
+ * question here; findings are secondary. A clean scan should still print
18
+ * the sites it found, because most users have never seen the full list.
19
+ * - **Coverage honesty.** The scan probes a fixed set of locations, so it can
20
+ * state what it looked for and didn't find, what it couldn't parse, and how
21
+ * many registered projects it did not visit. An inventory that quietly
22
+ * omits half the machine is worse than no inventory.
23
+ */
24
+ import { writeFileSync } from "fs";
25
+ import { homedir } from "os";
26
+ import { resolve } from "path";
27
+ import { scanAgentConfigs, unscannedProjectCount } from "../../agents/discover.js";
28
+ import { checkAgentConfigs } from "../../agents/checks.js";
29
+ import { AGENT_RUNTIMES, AGENT_SCOPES } from "../../agents/types.js";
30
+ import { RULE_CATALOG, ruleDocUrl } from "../../audit/catalog.js";
31
+ import { renderMarkdown } from "../../audit/report.js";
32
+ import { renderHtml } from "../../audit/report-html.js";
33
+ import { buildReportJson } from "../../audit/report-model.js";
34
+ /**
35
+ * Project an agent finding onto the audit renderers' finding shape.
36
+ *
37
+ * `lexicon` is set to `"agents"` — the renderers only use it as a grouping
38
+ * label, and calling this family what it is keeps a mixed report readable.
39
+ */
40
+ export function toAuditFindings(findings) {
41
+ return findings.map((f) => ({
42
+ checkId: f.checkId,
43
+ severity: f.severity,
44
+ message: f.message,
45
+ file: f.file,
46
+ lexicon: "agents",
47
+ entity: f.entity ? `${f.siteId} › ${f.entity}` : f.siteId,
48
+ }));
49
+ }
50
+ function isMergeWorthy(f, catalog) {
51
+ return catalog[f.checkId]?.tier === "merge-worthy";
52
+ }
53
+ function exitCodeFor(findings, failOn, catalog) {
54
+ if (failOn === "merge-worthy")
55
+ return findings.some((f) => isMergeWorthy(f, catalog)) ? 1 : 0;
56
+ if (failOn === "warning")
57
+ return findings.some((f) => f.severity === "error" || f.severity === "warning") ? 1 : 0;
58
+ return 0;
59
+ }
60
+ /** One-line summary of what a site carries, e.g. `3 MCP servers · 11 skills`. */
61
+ export function siteSummary(site) {
62
+ const parts = [];
63
+ const plural = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
64
+ if (site.instructions.length > 0)
65
+ parts.push(plural(site.instructions.length, "instruction file"));
66
+ if (site.mcpServers.length > 0)
67
+ parts.push(plural(site.mcpServers.length, "MCP server"));
68
+ if (site.skills.length > 0)
69
+ parts.push(plural(site.skills.length, "skill"));
70
+ if (site.subagents.length > 0)
71
+ parts.push(plural(site.subagents.length, "subagent"));
72
+ if (site.commands.length > 0)
73
+ parts.push(plural(site.commands.length, "command"));
74
+ if (site.plugins.length > 0)
75
+ parts.push(plural(site.plugins.length, "plugin"));
76
+ const envCount = Object.keys(site.env).length;
77
+ if (envCount > 0)
78
+ parts.push(plural(envCount, "env var"));
79
+ if (site.model)
80
+ parts.push(`model ${site.model}`);
81
+ return parts.length > 0 ? parts.join(" · ") : "no content";
82
+ }
83
+ /**
84
+ * Coverage caveats. Stated even when empty-ish, because the value of an
85
+ * inventory depends entirely on the reader knowing its edges.
86
+ */
87
+ export function agentCoverageNotes(scan, opts) {
88
+ const notes = [];
89
+ if (opts.scopes.includes("project")) {
90
+ const roots = opts.projectRoots.length;
91
+ const unscanned = unscannedProjectCount(opts.home, opts.projectRoots);
92
+ if (unscanned > 0) {
93
+ notes.push(`Scanned ${roots} project root${roots === 1 ? "" : "s"}; ` +
94
+ `${unscanned} more ${unscanned === 1 ? "is" : "are"} registered in ~/.claude.json and ${unscanned === 1 ? "was" : "were"} not visited. ` +
95
+ // The path is positional (`chant audit <path>`), not a `--path` flag.
96
+ `Scan one with \`chant audit --agents --scope project <dir>\`, or all of them with \`--all-projects\`.`);
97
+ }
98
+ else if (roots > 1) {
99
+ // Breadth is worth stating even when nothing was missed — a reader
100
+ // seeing four findings should know whether that was across one project
101
+ // or sixty-five.
102
+ notes.push(`Scanned ${roots} project roots — every project registered in ~/.claude.json whose directory still exists.`);
103
+ }
104
+ }
105
+ if (scan.unreadable.length > 0) {
106
+ notes.push(`${scan.unreadable.length} file${scan.unreadable.length === 1 ? "" : "s"} existed but could not be parsed, so ` +
107
+ `${scan.unreadable.length === 1 ? "its" : "their"} contents are not covered: ` +
108
+ scan.unreadable.map((u) => `${u.path} (${u.reason})`).join("; "));
109
+ }
110
+ const skippedScopes = AGENT_SCOPES.filter((s) => !opts.scopes.includes(s));
111
+ if (skippedScopes.length > 0)
112
+ notes.push(`Scope${skippedScopes.length === 1 ? "" : "s"} not scanned: ${skippedScopes.join(", ")}.`);
113
+ return notes;
114
+ }
115
+ /** Render the inventory section — what was found, before any judgement about it. */
116
+ function renderInventory(scan) {
117
+ const lines = [];
118
+ if (scan.sites.length === 0) {
119
+ lines.push("No agent configuration found.");
120
+ return lines;
121
+ }
122
+ lines.push(`Found ${scan.sites.length} agent config${scan.sites.length === 1 ? "" : "s"}:`);
123
+ let lastScope;
124
+ for (const site of scan.sites) {
125
+ if (site.scope !== lastScope) {
126
+ lines.push("", ` ${site.scope}:`);
127
+ lastScope = site.scope;
128
+ }
129
+ lines.push(` ${site.runtime.padEnd(9)} ${site.root}`);
130
+ lines.push(` ${siteSummary(site)}`);
131
+ lines.push(` from ${site.sources.length} file${site.sources.length === 1 ? "" : "s"}`);
132
+ }
133
+ return lines;
134
+ }
135
+ function renderStylish(scan, findings, notes, catalog) {
136
+ const lines = [...renderInventory(scan), ""];
137
+ for (const note of notes)
138
+ lines.push(`Note: ${note}`);
139
+ if (notes.length > 0)
140
+ lines.push("");
141
+ const mw = findings.filter((f) => isMergeWorthy(f, catalog));
142
+ const ro = findings.filter((f) => !isMergeWorthy(f, catalog));
143
+ lines.push(`${findings.length} finding${findings.length === 1 ? "" : "s"} (${mw.length} merge-worthy, ${ro.length} report-only).`);
144
+ const section = (title, list) => {
145
+ if (list.length === 0)
146
+ return;
147
+ lines.push("", title);
148
+ for (const f of list) {
149
+ lines.push(` [${f.checkId}] ${f.severity} ${f.entity}`);
150
+ lines.push(` ${f.message}`);
151
+ lines.push(` ${f.file}`);
152
+ }
153
+ };
154
+ section("Merge-worthy:", mw);
155
+ section("Report-only:", ro);
156
+ return lines.join("\n");
157
+ }
158
+ /**
159
+ * Provenance for the machine-readable and HTML reports. `target` is the home
160
+ * directory rather than a repo URL, and `files` lists the config sources that
161
+ * contributed — the machine-scope analogue of "which workflow files were read".
162
+ */
163
+ function buildSnapshot(scan, home, opts) {
164
+ return {
165
+ target: home,
166
+ files: scan.sites.flatMap((s) => s.sources),
167
+ generatedAt: opts.now ?? new Date().toISOString(),
168
+ toolVersion: opts.toolVersion ?? "0.0.0",
169
+ };
170
+ }
171
+ /** The JSON report: the full inventory plus findings, so a consumer can do its own analysis. */
172
+ function renderJson(scan, agentFindings, findings, notes, catalog, snapshot) {
173
+ const base = buildReportJson(findings, { snapshot, toolVersion: snapshot.toolVersion, catalog });
174
+ return JSON.stringify({
175
+ ...base,
176
+ subject: "agent-configuration",
177
+ notes,
178
+ sites: scan.sites.map((site) => ({
179
+ id: site.id,
180
+ scope: site.scope,
181
+ runtime: site.runtime,
182
+ root: site.root,
183
+ sources: site.sources,
184
+ summary: siteSummary(site),
185
+ instructions: site.instructions.map((i) => ({ path: i.path, bytes: i.bytes })),
186
+ mcpServers: site.mcpServers,
187
+ skills: site.skills.map((s) => ({ name: s.name, origin: s.origin, path: s.path, source: s.source, ref: s.ref })),
188
+ subagents: site.subagents,
189
+ commands: site.commands,
190
+ plugins: site.plugins,
191
+ env: Object.keys(site.env),
192
+ permissions: site.permissions,
193
+ model: site.model,
194
+ })),
195
+ agentFindings,
196
+ coverage: { probed: scan.probed, unreadable: scan.unreadable },
197
+ }, null, 2);
198
+ }
199
+ /**
200
+ * SARIF (2.1.0) export for the agent scan. Same property bag the repository
201
+ * audit emits (#442, #444) — `category`/`dimension` per rule and `tier` per
202
+ * result — so a consumer that triages one SARIF file can triage the other
203
+ * without special-casing the driver. `helpUri` points at the rule's own docs
204
+ * anchor rather than its authority citation: an AGT finding is about a local
205
+ * file, and the chant page is what explains what to do with it.
206
+ */
207
+ function renderSarif(findings, catalog) {
208
+ const ids = [...new Set(findings.map((f) => f.checkId))].sort();
209
+ return JSON.stringify({
210
+ $schema: "https://json.schemastore.org/sarif-2.1.0.json",
211
+ version: "2.1.0",
212
+ runs: [
213
+ {
214
+ tool: {
215
+ driver: {
216
+ name: "chant audit --agents",
217
+ informationUri: "https://intentius.io/chant/cli/audit/",
218
+ rules: ids.map((id) => {
219
+ const m = catalog[id];
220
+ return {
221
+ id,
222
+ name: m?.title ?? id,
223
+ shortDescription: { text: m?.title ?? id },
224
+ fullDescription: { text: m?.remediation ?? "" },
225
+ ...(m?.remediation ? { help: { text: m.remediation } } : {}),
226
+ helpUri: ruleDocUrl(id),
227
+ ...(m?.category ? { properties: { category: m.category, dimension: m.category } } : {}),
228
+ };
229
+ }),
230
+ },
231
+ },
232
+ results: findings.map((f) => {
233
+ const tier = catalog[f.checkId]?.tier;
234
+ return {
235
+ ruleId: f.checkId,
236
+ level: f.severity === "error" ? "error" : f.severity === "warning" ? "warning" : "note",
237
+ message: { text: f.message },
238
+ locations: [{ physicalLocation: { artifactLocation: { uri: f.file } } }],
239
+ ...(tier ? { properties: { tier } } : {}),
240
+ };
241
+ }),
242
+ },
243
+ ],
244
+ }, null, 2);
245
+ }
246
+ /**
247
+ * Scan the machine's agent configuration and render a report.
248
+ *
249
+ * Pure with respect to the filesystem apart from the scan itself and an
250
+ * optional `--output` write, so it can be driven from tests against a fixture
251
+ * home directory.
252
+ */
253
+ export function auditAgentsCommand(opts = {}) {
254
+ const home = opts.home ?? homedir();
255
+ const scopes = opts.scopes ?? AGENT_SCOPES;
256
+ const runtimes = opts.runtimes ?? AGENT_RUNTIMES;
257
+ const projectRoots = (opts.projectRoots ?? [process.cwd()]).map((p) => resolve(p));
258
+ const format = opts.format ?? "stylish";
259
+ const tier = opts.tier ?? "all";
260
+ const failOn = opts.failOn ?? "none";
261
+ const catalog = RULE_CATALOG;
262
+ const scan = scanAgentConfigs({ scopes, runtimes, projectRoots, home, platform: opts.platform });
263
+ const all = checkAgentConfigs(scan);
264
+ const agentFindings = tier === "merge-worthy" ? all.filter((f) => catalog[f.checkId]?.tier === "merge-worthy") : all;
265
+ const findings = toAuditFindings(agentFindings);
266
+ const notes = agentCoverageNotes(scan, { home, projectRoots, scopes });
267
+ const snapshot = buildSnapshot(scan, home, opts);
268
+ let output;
269
+ switch (format) {
270
+ case "json":
271
+ output = renderJson(scan, agentFindings, findings, notes, catalog, snapshot);
272
+ break;
273
+ case "sarif":
274
+ output = renderSarif(findings, catalog);
275
+ break;
276
+ case "markdown":
277
+ output = [
278
+ "# Agent configuration audit",
279
+ "",
280
+ "## Inventory",
281
+ "",
282
+ "```",
283
+ renderInventory(scan).join("\n"),
284
+ "```",
285
+ "",
286
+ renderMarkdown(findings, { target: home, notes, catalog, title: "Findings", headingLevel: 2 }),
287
+ ].join("\n");
288
+ break;
289
+ case "html":
290
+ output = renderHtml(findings, {
291
+ notes,
292
+ catalog,
293
+ snapshot,
294
+ theme: opts.theme,
295
+ template: opts.template,
296
+ });
297
+ break;
298
+ default:
299
+ output = renderStylish(scan, findings, notes, catalog);
300
+ }
301
+ let wroteTo;
302
+ if (opts.output) {
303
+ try {
304
+ writeFileSync(opts.output, output, "utf-8");
305
+ wroteTo = opts.output;
306
+ }
307
+ catch (err) {
308
+ return {
309
+ success: false,
310
+ output: "",
311
+ findings: agentFindings,
312
+ scan,
313
+ exitCode: 1,
314
+ error: `Failed to write ${opts.output}: ${err instanceof Error ? err.message : String(err)}`,
315
+ };
316
+ }
317
+ }
318
+ return {
319
+ success: true,
320
+ output,
321
+ findings: agentFindings,
322
+ scan,
323
+ exitCode: exitCodeFor(findings, failOn, catalog),
324
+ wroteTo,
325
+ };
326
+ }