@intentius/chant 0.124.13 → 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 (907) 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.js +260 -0
  306. package/dist/gate-resume-run.js +154 -0
  307. package/dist/gated-waves.js +165 -0
  308. package/dist/governance.js +43 -0
  309. package/dist/graph-declared.js +45 -0
  310. package/dist/graph-detail.js +207 -0
  311. package/dist/graph-dot.js +54 -0
  312. package/dist/graph-effective.js +107 -0
  313. package/dist/graph-ir.js +623 -0
  314. package/dist/graph-layout.js +184 -0
  315. package/dist/graph-lens.js +105 -0
  316. package/dist/graph-mermaid.js +83 -0
  317. package/dist/graph-ops.js +39 -0
  318. package/dist/graph-refs.js +156 -0
  319. package/dist/held-elsewhere.js +87 -0
  320. package/dist/identity.js +251 -0
  321. package/dist/import/base-parser.js +34 -0
  322. package/dist/import/embedded.js +255 -0
  323. package/dist/import/generator.js +1 -0
  324. package/dist/import/ir-utils.js +85 -0
  325. package/dist/import/parser-options.js +45 -0
  326. package/dist/import/parser.js +1 -0
  327. package/dist/index.js +118 -0
  328. package/dist/intrinsic-interpolation.js +73 -0
  329. package/dist/intrinsic.js +31 -0
  330. package/dist/join-key.js +35 -0
  331. package/dist/kubectl-context.js +150 -0
  332. package/dist/lexicon-config.js +58 -0
  333. package/dist/lexicon-integrity.js +47 -0
  334. package/dist/lexicon-manifest.js +70 -0
  335. package/dist/lexicon-module.d.ts.map +1 -1
  336. package/dist/lexicon-module.js +241 -0
  337. package/dist/lexicon-output.js +218 -0
  338. package/dist/lexicon-plugin-helpers.js +104 -0
  339. package/dist/lexicon-schema.js +136 -0
  340. package/dist/lexicon.js +130 -0
  341. package/dist/lifecycle/affected.js +224 -0
  342. package/dist/lifecycle/assert-live.js +110 -0
  343. package/dist/lifecycle/build-ledger-store.js +160 -0
  344. package/dist/lifecycle/build-ledger.js +155 -0
  345. package/dist/lifecycle/change-set.js +356 -0
  346. package/dist/lifecycle/converge-ledger.js +161 -0
  347. package/dist/lifecycle/deep-diff.js +233 -0
  348. package/dist/lifecycle/deep-observe.js +147 -0
  349. package/dist/lifecycle/digest.js +143 -0
  350. package/dist/lifecycle/disruption.js +135 -0
  351. package/dist/lifecycle/gate-applied.js +113 -0
  352. package/dist/lifecycle/gate-audit.js +341 -0
  353. package/dist/lifecycle/gate-ledger-select.js +89 -0
  354. package/dist/lifecycle/gate-ledger.js +193 -0
  355. package/dist/lifecycle/gate-origin.js +117 -0
  356. package/dist/lifecycle/gate-pending.js +58 -0
  357. package/dist/lifecycle/git.js +1182 -0
  358. package/dist/lifecycle/identity.js +58 -0
  359. package/dist/lifecycle/index.js +26 -0
  360. package/dist/lifecycle/lease.js +283 -0
  361. package/dist/lifecycle/ledger-port.js +1 -0
  362. package/dist/lifecycle/legacy-digest.js +91 -0
  363. package/dist/lifecycle/live-diff.js +274 -0
  364. package/dist/lifecycle/local-note.js +15 -0
  365. package/dist/lifecycle/member-ledger.js +122 -0
  366. package/dist/lifecycle/observation-baseline.js +155 -0
  367. package/dist/lifecycle/observe.js +375 -0
  368. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  369. package/dist/lifecycle/override-ledger.js +54 -0
  370. package/dist/lifecycle/plan-digest.js +110 -0
  371. package/dist/lifecycle/plan-ledger.js +129 -0
  372. package/dist/lifecycle/receipt-plan.js +192 -0
  373. package/dist/lifecycle/release-ledger.js +155 -0
  374. package/dist/lifecycle/release-read.js +64 -0
  375. package/dist/lifecycle/replay.js +193 -0
  376. package/dist/lifecycle/rollback.js +102 -0
  377. package/dist/lifecycle/run-ledger.js +183 -0
  378. package/dist/lifecycle/scenario-eval.js +204 -0
  379. package/dist/lifecycle/scenario.js +214 -0
  380. package/dist/lifecycle/snapshot.js +239 -0
  381. package/dist/lifecycle/status.js +447 -0
  382. package/dist/lifecycle/symptoms.js +117 -0
  383. package/dist/lifecycle/teardown.js +255 -0
  384. package/dist/lifecycle/types.js +1 -0
  385. package/dist/lifecycle/unobserved-gate.js +33 -0
  386. package/dist/lifecycle/wave-plans.js +68 -0
  387. package/dist/lifecycle/work-item-id.js +36 -0
  388. package/dist/lifecycle/work-lease.js +393 -0
  389. package/dist/lint/component-checks.js +87 -0
  390. package/dist/lint/config.js +483 -0
  391. package/dist/lint/declarative.js +122 -0
  392. package/dist/lint/discover.d.ts.map +1 -1
  393. package/dist/lint/discover.js +138 -0
  394. package/dist/lint/engine.js +246 -0
  395. package/dist/lint/knowledge-checks.js +64 -0
  396. package/dist/lint/named-checks.js +22 -0
  397. package/dist/lint/output-checks.js +87 -0
  398. package/dist/lint/output-docs.js +163 -0
  399. package/dist/lint/parser.js +33 -0
  400. package/dist/lint/pipeline-change-gate.js +70 -0
  401. package/dist/lint/policy-import.d.ts +1 -1
  402. package/dist/lint/policy-import.d.ts.map +1 -1
  403. package/dist/lint/policy-import.js +62 -0
  404. package/dist/lint/policy-sandbox.js +86 -0
  405. package/dist/lint/policy.js +122 -0
  406. package/dist/lint/post-synth.js +87 -0
  407. package/dist/lint/presets/relaxed.json +26 -0
  408. package/dist/lint/presets/strict.json +24 -24
  409. package/dist/lint/receipt-checks.js +83 -0
  410. package/dist/lint/rule-loader.d.ts.map +1 -1
  411. package/dist/lint/rule-loader.js +89 -0
  412. package/dist/lint/rule-registry.js +86 -0
  413. package/dist/lint/rule.js +1 -0
  414. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  415. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  416. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  417. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  437. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  438. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  439. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  440. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  441. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  442. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  443. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  444. package/dist/lint/rules/comp/index.js +33 -0
  445. package/dist/lint/rules/comp/support.js +129 -0
  446. package/dist/lint/rules/composite-scope.js +51 -0
  447. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  448. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  449. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  450. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  451. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  452. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  453. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  454. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  455. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  456. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  457. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  458. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  459. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  460. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  461. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  462. package/dist/lint/rules/export-required.js +115 -0
  463. package/dist/lint/rules/file-declarable-limit.js +88 -0
  464. package/dist/lint/rules/flat-declarations.js +62 -0
  465. package/dist/lint/rules/index.js +90 -0
  466. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  467. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  468. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  469. package/dist/lint/rules/no-string-ref.js +59 -0
  470. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  471. package/dist/lint/rules/no-unused-declarable.js +142 -0
  472. package/dist/lint/rules/op/index.js +28 -0
  473. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  474. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  475. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  476. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  477. package/dist/lint/rules/op/support.js +11 -0
  478. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  479. package/dist/lint/rules/property-kind.js +56 -0
  480. package/dist/lint/rules/single-concern-file.js +71 -0
  481. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  482. package/dist/lint/selectors.js +168 -0
  483. package/dist/lint/suppressions.js +129 -0
  484. package/dist/lint/typescript.js +17 -0
  485. package/dist/live-endpoint.js +113 -0
  486. package/dist/live-read-session.js +76 -0
  487. package/dist/lsp/lexicon-providers.js +163 -0
  488. package/dist/lsp/types.js +5 -0
  489. package/dist/managed-fields.js +293 -0
  490. package/dist/mcp/types.js +4 -0
  491. package/dist/notify-verify.js +0 -1
  492. package/dist/notify.js +0 -1
  493. package/dist/notify.schema.json +72 -0
  494. package/dist/observation.js +266 -0
  495. package/dist/okf-read.js +134 -0
  496. package/dist/okf.js +275 -0
  497. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  498. package/dist/op/activities/activity-contracts.js +313 -0
  499. package/dist/op/activities/apply.js +582 -0
  500. package/dist/op/activities/build.js +18 -0
  501. package/dist/op/activities/change-coverage.js +40 -0
  502. package/dist/op/activities/change-set.js +64 -0
  503. package/dist/op/activities/converge.js +492 -0
  504. package/dist/op/activities/decide.js +211 -0
  505. package/dist/op/activities/env-teardown.js +110 -0
  506. package/dist/op/activities/factory.js +591 -0
  507. package/dist/op/activities/forge-pull-request.js +82 -0
  508. package/dist/op/activities/gh-host.js +78 -0
  509. package/dist/op/activities/guard-validate.js +165 -0
  510. package/dist/op/activities/http-check.js +40 -0
  511. package/dist/op/activities/index.js +59 -0
  512. package/dist/op/activities/lexicon-upgrade.js +629 -0
  513. package/dist/op/activities/lifecycle.js +109 -0
  514. package/dist/op/activities/pipeline-audit.js +147 -0
  515. package/dist/op/activities/policy.js +26 -0
  516. package/dist/op/activities/predict-behaviour.js +341 -0
  517. package/dist/op/activities/propose-upgrade.js +165 -0
  518. package/dist/op/activities/reconcile.js +997 -0
  519. package/dist/op/activities/shell.js +118 -0
  520. package/dist/op/activities/source-release.js +97 -0
  521. package/dist/op/activities/source-rollback.js +165 -0
  522. package/dist/op/activities/teardown.js +17 -0
  523. package/dist/op/activities/util.js +6 -0
  524. package/dist/op/activities/wait.js +51 -0
  525. package/dist/op/activities/work-evidence.js +35 -0
  526. package/dist/op/activities/workflow-audit.js +133 -0
  527. package/dist/op/activity-contract-registry.js +106 -0
  528. package/dist/op/activity-contract.js +232 -0
  529. package/dist/op/activity-failure.js +31 -0
  530. package/dist/op/activity-profiles.js +129 -0
  531. package/dist/op/activity-registry.js +105 -0
  532. package/dist/op/activity-runtime.js +28 -0
  533. package/dist/op/builders.js +801 -0
  534. package/dist/op/change-signal.js +118 -0
  535. package/dist/op/composites/apply-op.js +151 -0
  536. package/dist/op/composites/behaviour-op.js +65 -0
  537. package/dist/op/composites/converge-op.js +141 -0
  538. package/dist/op/composites/index.js +19 -0
  539. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  540. package/dist/op/composites/pipeline-audit-op.js +50 -0
  541. package/dist/op/composites/reconcile-op.js +84 -0
  542. package/dist/op/composites/watch-op.js +69 -0
  543. package/dist/op/composites/workflow-audit-op.js +57 -0
  544. package/dist/op/converge-rule.js +205 -0
  545. package/dist/op/cron.js +146 -0
  546. package/dist/op/decide-backend.js +181 -0
  547. package/dist/op/decide-config.js +68 -0
  548. package/dist/op/decide-read-inputs.js +141 -0
  549. package/dist/op/discover.d.ts.map +1 -1
  550. package/dist/op/discover.js +213 -0
  551. package/dist/op/duration.js +21 -0
  552. package/dist/op/emulator-freshness.js +80 -0
  553. package/dist/op/emulator-lifecycle.js +269 -0
  554. package/dist/op/factory.js +83 -0
  555. package/dist/op/gate-approval.js +172 -0
  556. package/dist/op/gate-name.js +86 -0
  557. package/dist/op/gate-plan-context.js +167 -0
  558. package/dist/op/gate-point-run.js +67 -0
  559. package/dist/op/gate-point.js +111 -0
  560. package/dist/op/gate-resume-plan.js +155 -0
  561. package/dist/op/gate-resume.js +31 -0
  562. package/dist/op/gate-review.js +290 -0
  563. package/dist/op/gate-run-locator.js +85 -0
  564. package/dist/op/gate-summary.js +100 -0
  565. package/dist/op/gate-wait.js +56 -0
  566. package/dist/op/gate.js +449 -0
  567. package/dist/op/generate-pipeline.js +124 -0
  568. package/dist/op/index.js +51 -0
  569. package/dist/op/lifecycle-receipt-store.js +45 -0
  570. package/dist/op/local-executor.js +1164 -0
  571. package/dist/op/local-output.js +140 -0
  572. package/dist/op/op-ir.js +317 -0
  573. package/dist/op/op-verb-class.js +131 -0
  574. package/dist/op/op-waves-notify.js +136 -0
  575. package/dist/op/op-waves-run.js +1657 -0
  576. package/dist/op/op-waves.js +409 -0
  577. package/dist/op/operator.js +743 -0
  578. package/dist/op/receipt-store.js +94 -0
  579. package/dist/op/resource.js +23 -0
  580. package/dist/op/run-context.js +28 -0
  581. package/dist/op/run-live.js +256 -0
  582. package/dist/op/runtime.js +21 -0
  583. package/dist/op/runtimes/local.js +195 -0
  584. package/dist/op/source-archive.js +131 -0
  585. package/dist/op/step-output-ref.js +397 -0
  586. package/dist/op/steward-beside.js +169 -0
  587. package/dist/op/steward-points.js +138 -0
  588. package/dist/op/steward-turn.js +59 -0
  589. package/dist/op/steward.js +317 -0
  590. package/dist/op/types.js +25 -0
  591. package/dist/op/work-lease-decl.js +81 -0
  592. package/dist/op/work-lease-run.js +393 -0
  593. package/dist/override-gate.js +284 -0
  594. package/dist/owner-chain.js +74 -0
  595. package/dist/ownership.js +92 -0
  596. package/dist/params.js +61 -0
  597. package/dist/plan-summary.js +711 -0
  598. package/dist/point-decision.js +211 -0
  599. package/dist/pr-forge.js +810 -0
  600. package/dist/pr-loop.js +203 -0
  601. package/dist/project-codegen.js +191 -0
  602. package/dist/project-root.js +74 -0
  603. package/dist/project-validation.js +50 -0
  604. package/dist/provenance.js +157 -0
  605. package/dist/pseudo-parameter.js +40 -0
  606. package/dist/reconcile.js +450 -0
  607. package/dist/resource-attributes.js +33 -0
  608. package/dist/runtime-adapter.js +77 -0
  609. package/dist/runtime.js +66 -0
  610. package/dist/secret-materialization.js +153 -0
  611. package/dist/secret-provenance.js +250 -0
  612. package/dist/serializer-walker.js +112 -0
  613. package/dist/serializer.js +1 -0
  614. package/dist/sort.js +45 -0
  615. package/dist/stack-output.js +115 -0
  616. package/dist/telemetry-attribution.js +149 -0
  617. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  618. package/dist/terraform/adopt-state.js +40 -0
  619. package/dist/terraform/aws-resources.js +384 -0
  620. package/dist/terraform/bridge.js +204 -0
  621. package/dist/terraform/carve-provider.js +155 -0
  622. package/dist/terraform/carve.js +138 -0
  623. package/dist/terraform/data-source-shape.js +57 -0
  624. package/dist/terraform/emit-source.js +36 -0
  625. package/dist/terraform/excise.js +123 -0
  626. package/dist/terraform/graduate.js +128 -0
  627. package/dist/terraform/graph.js +435 -0
  628. package/dist/terraform/hcl2json.js +60 -0
  629. package/dist/terraform/manifest.js +149 -0
  630. package/dist/terraform/parse.js +81 -0
  631. package/dist/terraform/providers/aws.js +146 -0
  632. package/dist/terraform/providers/gcp.js +294 -0
  633. package/dist/terraform/providers/index.js +17 -0
  634. package/dist/terraform/providers/kubernetes.js +253 -0
  635. package/dist/terraform/score.js +151 -0
  636. package/dist/terraform/state.js +67 -0
  637. package/dist/terraform/tier-map.js +74 -0
  638. package/dist/terraform/types.js +13 -0
  639. package/dist/terraform/unified-diff.js +132 -0
  640. package/dist/testing.js +295 -0
  641. package/dist/toml-emit.js +153 -0
  642. package/dist/toml-parse.js +355 -0
  643. package/dist/toml-utils.js +60 -0
  644. package/dist/toml.js +428 -0
  645. package/dist/ts-loader.d.ts +46 -0
  646. package/dist/ts-loader.d.ts.map +1 -0
  647. package/dist/ts-loader.js +103 -0
  648. package/dist/types.js +1 -0
  649. package/dist/utils.js +61 -0
  650. package/dist/validation.js +20 -0
  651. package/dist/vendor/js-yaml-load.js +1662 -0
  652. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  653. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  654. package/dist/workspace/__fixtures__/sessions.js +91 -0
  655. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  656. package/dist/workspace/agent-cli.js +99 -0
  657. package/dist/workspace/agent.schema.json +390 -0
  658. package/dist/workspace/answers-ledger.js +89 -0
  659. package/dist/workspace/box-cli.js +142 -0
  660. package/dist/workspace/box-factory-write.js +196 -0
  661. package/dist/workspace/box-factory-write.schema.json +342 -0
  662. package/dist/workspace/box-factory.js +88 -0
  663. package/dist/workspace/box-intent.js +126 -0
  664. package/dist/workspace/box-isolation.js +169 -0
  665. package/dist/workspace/box-listing-write.schema.json +204 -0
  666. package/dist/workspace/box-listing.js +298 -0
  667. package/dist/workspace/box-publish.js +352 -0
  668. package/dist/workspace/box-publish.schema.json +498 -0
  669. package/dist/workspace/box-services.js +39 -0
  670. package/dist/workspace/broker-protocol.js +359 -0
  671. package/dist/workspace/broker-protocol.schema.json +228 -0
  672. package/dist/workspace/change-set.schema.json +460 -0
  673. package/dist/workspace/changes-cli.js +56 -0
  674. package/dist/workspace/changes.js +446 -0
  675. package/dist/workspace/changes.schema.json +642 -0
  676. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  677. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  678. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  679. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  680. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  681. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  682. package/dist/workspace/chant-migrations.js +113 -0
  683. package/dist/workspace/check.schema.json +433 -0
  684. package/dist/workspace/checks/box-isolation.js +62 -0
  685. package/dist/workspace/checks/boxes.js +491 -0
  686. package/dist/workspace/checks/diagrams.js +104 -0
  687. package/dist/workspace/checks/generated.js +419 -0
  688. package/dist/workspace/checks/ledgers.js +212 -0
  689. package/dist/workspace/checks/links.js +191 -0
  690. package/dist/workspace/checks/live.js +100 -0
  691. package/dist/workspace/checks/pipelines.js +188 -0
  692. package/dist/workspace/checks/records.js +169 -0
  693. package/dist/workspace/checks.js +426 -0
  694. package/dist/workspace/ci-green-cli.js +125 -0
  695. package/dist/workspace/ci-green-forge.js +83 -0
  696. package/dist/workspace/ci-green-workflow.js +199 -0
  697. package/dist/workspace/ci-green.js +325 -0
  698. package/dist/workspace/ci-last-green.schema.json +158 -0
  699. package/dist/workspace/compose-graph.js +235 -0
  700. package/dist/workspace/compose-reports.js +146 -0
  701. package/dist/workspace/composites.js +264 -0
  702. package/dist/workspace/composites.schema.json +617 -0
  703. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  704. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  705. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  706. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  707. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  708. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  709. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  710. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  711. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  712. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  713. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  714. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  715. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  716. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  717. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  718. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  719. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  720. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  721. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  722. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  723. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  724. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  725. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  726. package/dist/workspace/conformance/broker.js +736 -0
  727. package/dist/workspace/conformance/index.js +673 -0
  728. package/dist/workspace/conformance/vitest.js +108 -0
  729. package/dist/workspace/conformance/writer.js +1080 -0
  730. package/dist/workspace/decide.js +879 -0
  731. package/dist/workspace/decision-points.schema.json +135 -135
  732. package/dist/workspace/declaration-write-cli.js +74 -0
  733. package/dist/workspace/declaration-write.js +238 -0
  734. package/dist/workspace/declaration.js +938 -0
  735. package/dist/workspace/declaration.schema.json +1413 -1413
  736. package/dist/workspace/declared-kinds.js +106 -0
  737. package/dist/workspace/environments.js +164 -0
  738. package/dist/workspace/evidence.schema.json +279 -0
  739. package/dist/workspace/export-cli.js +185 -0
  740. package/dist/workspace/export.js +499 -0
  741. package/dist/workspace/factory-rules.js +175 -0
  742. package/dist/workspace/generated-files.js +92 -0
  743. package/dist/workspace/glob.js +45 -0
  744. package/dist/workspace/graph-cache.js +352 -0
  745. package/dist/workspace/graph-cli.js +348 -0
  746. package/dist/workspace/graph.schema.json +1338 -0
  747. package/dist/workspace/identity-gate-rule.js +75 -0
  748. package/dist/workspace/identity.js +126 -0
  749. package/dist/workspace/import.js +283 -0
  750. package/dist/workspace/init.js +620 -0
  751. package/dist/workspace/intent-cli.js +263 -0
  752. package/dist/workspace/intent-joins.js +201 -0
  753. package/dist/workspace/intent-record.js +352 -0
  754. package/dist/workspace/intent-record.schema.json +864 -0
  755. package/dist/workspace/intent.js +1582 -0
  756. package/dist/workspace/intent.schema.json +2420 -0
  757. package/dist/workspace/json-edit.js +221 -0
  758. package/dist/workspace/jsonc.js +235 -0
  759. package/dist/workspace/kind-readers.js +103 -0
  760. package/dist/workspace/kinds.js +587 -0
  761. package/dist/workspace/lexicon-symbols.js +112 -0
  762. package/dist/workspace/lineage-adopt-cli.js +102 -0
  763. package/dist/workspace/lineage-adopt.js +360 -0
  764. package/dist/workspace/lineage-check.js +282 -0
  765. package/dist/workspace/lineage-cli.js +121 -0
  766. package/dist/workspace/lineage-hash-index.js +284 -0
  767. package/dist/workspace/lineage-init.js +507 -0
  768. package/dist/workspace/lineage-lock.js +387 -0
  769. package/dist/workspace/lineage-merge.js +45 -0
  770. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  771. package/dist/workspace/lineage-migrations.js +329 -0
  772. package/dist/workspace/lineage-provenance.js +36 -0
  773. package/dist/workspace/lineage-update.js +138 -0
  774. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  775. package/dist/workspace/lineage-upgrade.js +889 -0
  776. package/dist/workspace/lineage-vendor.js +171 -0
  777. package/dist/workspace/lineage-version.js +128 -0
  778. package/dist/workspace/lineage-versions.js +275 -0
  779. package/dist/workspace/links.js +330 -0
  780. package/dist/workspace/ls-generated.js +95 -0
  781. package/dist/workspace/ls.js +277 -0
  782. package/dist/workspace/ls.schema.json +333 -0
  783. package/dist/workspace/member-commands.js +508 -0
  784. package/dist/workspace/member-handles.js +216 -0
  785. package/dist/workspace/member-pipeline.js +258 -0
  786. package/dist/workspace/member-run.js +117 -0
  787. package/dist/workspace/member-write.schema.json +193 -0
  788. package/dist/workspace/nested-graph.js +156 -0
  789. package/dist/workspace/nesting.js +38 -0
  790. package/dist/workspace/patch.js +301 -0
  791. package/dist/workspace/patch.schema.json +321 -0
  792. package/dist/workspace/pin-cli.js +55 -0
  793. package/dist/workspace/pin-integrity.js +100 -0
  794. package/dist/workspace/plan-summary.schema.json +155 -0
  795. package/dist/workspace/point-answer.schema.json +129 -129
  796. package/dist/workspace/points-cli.js +291 -0
  797. package/dist/workspace/points-write.schema.json +660 -0
  798. package/dist/workspace/points.js +521 -0
  799. package/dist/workspace/points.schema.json +916 -0
  800. package/dist/workspace/pr-report.schema.json +108 -0
  801. package/dist/workspace/principal-classes.js +245 -0
  802. package/dist/workspace/reason-codes.js +326 -0
  803. package/dist/workspace/record-assets.js +151 -0
  804. package/dist/workspace/record-decided.js +105 -0
  805. package/dist/workspace/record-sessions.js +96 -0
  806. package/dist/workspace/record-source.js +114 -0
  807. package/dist/workspace/records-amend.schema.json +284 -0
  808. package/dist/workspace/records-checkout.js +76 -0
  809. package/dist/workspace/records-cli.js +707 -0
  810. package/dist/workspace/records-close.js +116 -0
  811. package/dist/workspace/records-close.schema.json +278 -0
  812. package/dist/workspace/records-new.schema.json +202 -0
  813. package/dist/workspace/records-review.schema.json +367 -0
  814. package/dist/workspace/records-since.js +317 -0
  815. package/dist/workspace/records-since.schema.json +218 -0
  816. package/dist/workspace/records-write.js +1229 -0
  817. package/dist/workspace/records.js +1345 -0
  818. package/dist/workspace/records.schema.json +604 -0
  819. package/dist/workspace/reference-kinds/app/package.json +10 -0
  820. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  821. package/dist/workspace/returns.js +303 -0
  822. package/dist/workspace/root-refusal.js +75 -0
  823. package/dist/workspace/run-statement.schema.json +622 -0
  824. package/dist/workspace/runs-cli.js +584 -0
  825. package/dist/workspace/runs-write.schema.json +994 -0
  826. package/dist/workspace/runs.js +708 -0
  827. package/dist/workspace/runs.schema.json +1257 -0
  828. package/dist/workspace/runtimes.js +76 -0
  829. package/dist/workspace/session-kinds.js +83 -0
  830. package/dist/workspace/signers.schema.json +206 -0
  831. package/dist/workspace/source-block.js +125 -0
  832. package/dist/workspace/squash.js +177 -0
  833. package/dist/workspace/status-gates.js +162 -0
  834. package/dist/workspace/status-stewards.js +330 -0
  835. package/dist/workspace/status.js +514 -0
  836. package/dist/workspace/status.schema.json +998 -0
  837. package/dist/workspace/steward-index.js +191 -0
  838. package/dist/workspace/symbols.js +188 -0
  839. package/dist/workspace/template-manifest.js +227 -0
  840. package/dist/workspace/template-pins.js +115 -0
  841. package/dist/workspace/trailer-joins.js +65 -0
  842. package/dist/workspace/trailers.js +111 -0
  843. package/dist/workspace/tree.js +136 -0
  844. package/dist/workspace/trust/attestor.js +63 -0
  845. package/dist/workspace/trust/dsse.js +108 -0
  846. package/dist/workspace/trust/evidence-cli.js +175 -0
  847. package/dist/workspace/trust/evidence.js +161 -0
  848. package/dist/workspace/trust/gate-seal.js +226 -0
  849. package/dist/workspace/trust/policy.js +190 -0
  850. package/dist/workspace/trust/provenance.js +180 -0
  851. package/dist/workspace/trust/rotation.js +298 -0
  852. package/dist/workspace/trust/run-commits.js +101 -0
  853. package/dist/workspace/trust/run-statement.js +182 -0
  854. package/dist/workspace/trust/seal.js +272 -0
  855. package/dist/workspace/trust/signers-cli.js +152 -0
  856. package/dist/workspace/trust/ssh-commit.js +178 -0
  857. package/dist/workspace/trust/test-repo.js +118 -0
  858. package/dist/workspace/trust/trust-files.js +193 -0
  859. package/dist/workspace/trust/verify-cli.js +63 -0
  860. package/dist/workspace/trust/verify.js +192 -0
  861. package/dist/workspace/which-chant.js +141 -0
  862. package/dist/workspace/wip-cli.js +95 -0
  863. package/dist/workspace/wip-write.schema.json +504 -0
  864. package/dist/workspace/wip.js +631 -0
  865. package/dist/workspace/wip.schema.json +334 -0
  866. package/dist/workspace/work-cli.js +448 -0
  867. package/dist/workspace/work-evidence.js +122 -0
  868. package/dist/workspace/work-evidence.schema.json +222 -0
  869. package/dist/workspace/work-history.schema.json +421 -0
  870. package/dist/workspace/work-lease.schema.json +246 -0
  871. package/dist/workspace/work-size.js +77 -0
  872. package/dist/workspace/work.js +283 -0
  873. package/dist/workspace/workspace-kinds.schema.json +259 -259
  874. package/dist/workspace/workspace-principals.schema.json +53 -53
  875. package/dist/workspace/write-lock-cli.js +105 -0
  876. package/dist/workspace/write-lock.js +424 -0
  877. package/dist/workspace/write-lock.schema.json +172 -0
  878. package/dist/workspace/write-scope.js +484 -0
  879. package/dist/yaml.js +459 -0
  880. package/package.json +2 -2
  881. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  882. package/src/cli/commands/lint.ts +3 -0
  883. package/src/cli/commands/migrate.ts +2 -0
  884. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  885. package/src/cli/main.ts +121 -27
  886. package/src/cli/mcp/workspace-tools.ts +1 -1
  887. package/src/codegen/pinned-upgrade.ts +2 -0
  888. package/src/components/discover.ts +2 -0
  889. package/src/components/sandbox/driver.ts +3 -1
  890. package/src/config-import.ts +3 -0
  891. package/src/discovery/fold-import.ts +23 -14
  892. package/src/discovery/import.ts +2 -0
  893. package/src/discovery/sandbox/driver.ts +3 -1
  894. package/src/lexicon-module.ts +3 -0
  895. package/src/lint/config.ts +1 -1
  896. package/src/lint/discover.ts +28 -8
  897. package/src/lint/policy-import.ts +4 -1
  898. package/src/lint/rule-loader.ts +2 -0
  899. package/src/op/discover.ts +3 -0
  900. package/src/ts-loader.test.ts +23 -0
  901. package/src/ts-loader.ts +122 -0
  902. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  903. package/src/workspace/declaration.ts +1 -1
  904. package/src/workspace/kinds.ts +1 -1
  905. package/src/workspace/lineage-migrations.ts +2 -0
  906. package/src/workspace/points.ts +1 -1
  907. package/src/workspace/principal-classes.ts +1 -1
@@ -0,0 +1,313 @@
1
+ import { importLexiconModule, importLexiconPackage, lexiconModulePath, lexiconNames, registerLexiconDeclarations, resolveFromProject } from "../lexicon-module.js";
2
+ import { readLexiconDeclarationsStatically } from "../config-static.js";
3
+ export { unknownPathLexiconsNotice } from "../config-static.js";
4
+ import { createRequire } from "node:module";
5
+ import { dirname, join, resolve } from "node:path";
6
+ import { fileURLToPath } from "node:url";
7
+ import { existsSync, readdirSync, readFileSync } from "node:fs";
8
+ import { isLexiconPlugin } from "../lexicon.js";
9
+ import { loadChantConfigUpward } from "../config.js";
10
+ import { findInfraFiles, detectLexicons } from "../index.js";
11
+ import { isNoLexiconDetected } from "../detectLexicon.js";
12
+ import { checkConflicts, describeConflict } from "./conflict-check.js";
13
+ import { prepareProjectCodegen } from "../project-codegen.js";
14
+ /**
15
+ * chant#2591 — record the lexicons the chant.config nearest `dir` declares by
16
+ * path (../lexicon-module.ts), for a command that does not otherwise read the
17
+ * config: `init --force`, `dev onboard` and `import --agents`.
18
+ *
19
+ * The config is read statically (../config-static.ts) and never evaluated,
20
+ * so these commands run no project code to learn it. When the `lexicons`
21
+ * value cannot be read that way, nothing is recorded, every lexicon keeps its
22
+ * package behaviour, and the returned read carries the reason; the caller
23
+ * prints {@link unknownPathLexiconsNotice} for it.
24
+ */
25
+ export function recordProjectLexicons(dir) {
26
+ const read = readLexiconDeclarationsStatically(dir);
27
+ if (read.status === "read")
28
+ registerLexiconDeclarations(read.entries, dirname(read.configPath));
29
+ return read;
30
+ }
31
+ /**
32
+ * Load a single lexicon plugin by lexicon name.
33
+ *
34
+ * Dynamically imports `@intentius/chant-lexicon-{name}` and looks for a
35
+ * LexiconPlugin export. Falls back to wrapping a raw Serializer export.
36
+ */
37
+ export async function loadPlugin(lexiconName) {
38
+ // chant #2520 — a lexicon declared by module path loads from that module.
39
+ const modulePath = lexiconModulePath(lexiconName);
40
+ if (modulePath !== undefined) {
41
+ const mod = (await importLexiconModule(lexiconName));
42
+ for (const value of Object.values(mod)) {
43
+ if (isLexiconPlugin(value)) {
44
+ if (value.name !== lexiconName) {
45
+ throw new Error(`lexicon "${lexiconName}" is declared with module ${modulePath}, but the plugin it exports is named "${value.name}"`);
46
+ }
47
+ return value;
48
+ }
49
+ }
50
+ throw new Error(`Module ${modulePath} (lexicon "${lexiconName}") does not export a LexiconPlugin`);
51
+ }
52
+ const packageName = `@intentius/chant-lexicon-${lexiconName}`;
53
+ const mod = (await importLexiconPackage(packageName));
54
+ // Look for an explicit LexiconPlugin export
55
+ for (const value of Object.values(mod)) {
56
+ if (isLexiconPlugin(value)) {
57
+ return value;
58
+ }
59
+ }
60
+ // Fallback: wrap a raw Serializer export into a minimal plugin
61
+ const serializer = mod.serializer ?? mod.default?.serializer ?? mod[`${lexiconName}Serializer`];
62
+ if (serializer && typeof serializer === "object" && "name" in serializer && "serialize" in serializer) {
63
+ const notSupported = (op) => async () => {
64
+ throw new Error(`${serializer.name}: ${op} is not supported (raw serializer fallback)`);
65
+ };
66
+ return {
67
+ name: serializer.name,
68
+ serializer,
69
+ generate: notSupported("generate"),
70
+ validate: notSupported("validate"),
71
+ coverage: notSupported("coverage"),
72
+ package: notSupported("package"),
73
+ };
74
+ }
75
+ throw new Error(`Package ${packageName} does not export a LexiconPlugin or Serializer`);
76
+ }
77
+ const LEXICON_PACKAGE_PREFIX = "chant-lexicon-";
78
+ /**
79
+ * The names of the lexicon packages installed where {@link loadPlugin} can
80
+ * load them (#2965), sorted. `loadPlugin` imports
81
+ * `@intentius/chant-lexicon-<name>` from chant's own install and then from the
82
+ * project (`importLexiconPackage`), so this lists the `@intentius` scope of
83
+ * every `node_modules` directory Node would search from either place: each
84
+ * ancestor of chant's own module and each ancestor of `projectDir`. A name
85
+ * being listed does not promise it loads; the caller still handles a failure.
86
+ */
87
+ export function listInstalledLexicons(projectDir = process.cwd()) {
88
+ const names = new Set();
89
+ const starts = [dirname(fileURLToPath(import.meta.url)), resolve(projectDir)];
90
+ for (const start of starts) {
91
+ let dir = start;
92
+ for (;;) {
93
+ const scope = join(dir, "node_modules", "@intentius");
94
+ let entries = [];
95
+ try {
96
+ entries = readdirSync(scope, { withFileTypes: true });
97
+ }
98
+ catch {
99
+ // No @intentius scope here.
100
+ }
101
+ for (const entry of entries) {
102
+ if (!entry.name.startsWith(LEXICON_PACKAGE_PREFIX))
103
+ continue;
104
+ if (!entry.isDirectory() && !entry.isSymbolicLink())
105
+ continue;
106
+ const name = entry.name.slice(LEXICON_PACKAGE_PREFIX.length);
107
+ if (name !== "")
108
+ names.add(name);
109
+ }
110
+ const parent = dirname(dir);
111
+ if (parent === dir)
112
+ break;
113
+ dir = parent;
114
+ }
115
+ }
116
+ return [...names].sort();
117
+ }
118
+ /**
119
+ * The installed version of each named lexicon package (chant #1442).
120
+ *
121
+ * A `LexiconPlugin` does not carry its own version — `LexiconManifest` does,
122
+ * but that is an artifact type describing generated output, not something the
123
+ * plugin object exposes. The version wanted here is a property of the
124
+ * *installed package*, so it is read from the package's own `package.json`.
125
+ *
126
+ * Resolved by walking up from the package's entry point rather than resolving
127
+ * `<pkg>/package.json` directly: lexicon packages declare an `exports` map
128
+ * that does not include `./package.json`, so the direct specifier is blocked
129
+ * by Node. `./manifest` (→ `dist/manifest.json`) is not used either — it is a
130
+ * `prepack` build artifact, absent in a monorepo dev tree, and its absence
131
+ * once read as four unrelated bugs (#1367).
132
+ *
133
+ * A lexicon whose version cannot be determined is omitted rather than
134
+ * recorded as `"unknown"`: a digest that says nothing is honest, one that
135
+ * says `unknown` compares unequal to itself across builds.
136
+ */
137
+ export function resolveLexiconVersions(lexiconNames) {
138
+ const require_ = createRequire(import.meta.url);
139
+ const versions = {};
140
+ for (const name of lexiconNames) {
141
+ // chant #2520 — a lexicon declared by module path is not an installed
142
+ // package, so it has no package version to report.
143
+ if (lexiconModulePath(name) !== undefined)
144
+ continue;
145
+ const packageName = `@intentius/chant-lexicon-${name}`;
146
+ try {
147
+ // chant#2845 — a lexicon chant's own install can't reach is resolved from the project.
148
+ let entry;
149
+ try {
150
+ entry = require_.resolve(packageName);
151
+ }
152
+ catch (err) {
153
+ entry = resolveFromProject(packageName);
154
+ if (entry === undefined)
155
+ throw err;
156
+ }
157
+ let dir = dirname(entry);
158
+ // Bounded walk — a resolved entry point is never deeply nested inside
159
+ // its own package, and an unbounded loop here would climb to `/`.
160
+ for (let depth = 0; depth < 10; depth++) {
161
+ const candidate = join(dir, "package.json");
162
+ if (existsSync(candidate)) {
163
+ const pkg = JSON.parse(readFileSync(candidate, "utf-8"));
164
+ // Only the lexicon's OWN package.json — a nested dependency's
165
+ // manifest would otherwise be read as the lexicon's version.
166
+ if (pkg.name === packageName && pkg.version) {
167
+ versions[name] = pkg.version;
168
+ break;
169
+ }
170
+ }
171
+ const parent = dirname(dir);
172
+ if (parent === dir)
173
+ break;
174
+ dir = parent;
175
+ }
176
+ }
177
+ catch {
178
+ // Not installed, or not resolvable from here — omit it.
179
+ }
180
+ }
181
+ return versions;
182
+ }
183
+ /**
184
+ * Bind each loaded plugin's `buildRoots` hook (#1548 piece 3) to this
185
+ * invocation's config and project root, producing the closures
186
+ * `BuildOptions.buildRoots` takes — the same extract-then-thread shape the
187
+ * CLI uses for `intrinsics`. Plugins without the hook contribute nothing;
188
+ * an empty array is the common case and `build()` treats it as absent.
189
+ */
190
+ export function collectBuildRootContributors(plugins, config, projectRoot) {
191
+ // Project-local codegen (../project-codegen.ts) rides the same seam: every
192
+ // build path that renders build roots also has to refuse generated code
193
+ // that drifted from its declared sources, and to let the lexicon load that
194
+ // code (the k8s kinds its serializer must know) before serialization. Its
195
+ // contributor adds no entities; a drift is thrown, which the merge reports
196
+ // as a build error. Runs first, so a build-root hook sees loaded kinds.
197
+ const codegen = (plugins ?? [])
198
+ .filter((plugin) => typeof plugin.projectCodegen === "function")
199
+ .map((plugin) => async () => {
200
+ await prepareProjectCodegen(plugin, projectRoot, config);
201
+ return { entities: new Map() };
202
+ });
203
+ const roots = (plugins ?? [])
204
+ .filter((plugin) => typeof plugin.buildRoots === "function")
205
+ // `entities` is not bindable here — discovery has not run — so the merge
206
+ // hands it in when it calls the closure (#1828 / SOPS provenance).
207
+ .map((plugin) => (ctx) => plugin.buildRoots({ projectRoot, config, entities: ctx?.entities, ...(ctx?.sourceDir !== undefined ? { sourceDir: ctx.sourceDir } : {}) }));
208
+ return [...codegen, ...roots];
209
+ }
210
+ /**
211
+ * Bind each loaded plugin's `subscribeChanges` seam (#1981) to one environment
212
+ * and its declared entities, producing the `ChangeSubscriber` list `chant
213
+ * operator`'s loop takes, in the same extract-then-thread shape
214
+ * {@link collectBuildRootContributors} uses, and for the same reason: core's
215
+ * operator must not import plugins.
216
+ *
217
+ * Plugins without the seam contribute nothing, so a project whose lexicons all
218
+ * lack it gets a loop that is exactly the timer it always was. `entities` is
219
+ * the per-lexicon slice of a build's declared entities, which is the bound on
220
+ * what a subscription may watch; a lexicon with no declared entities is
221
+ * skipped rather than handed an empty scope to widen.
222
+ */
223
+ export function collectChangeSubscribers(plugins, options) {
224
+ return (plugins ?? [])
225
+ .filter((plugin) => typeof plugin.subscribeChanges === "function")
226
+ .filter((plugin) => (options.entities.get(plugin.name)?.size ?? 0) > 0)
227
+ .map((plugin) => ({
228
+ lexicon: plugin.name,
229
+ subscribe: (ctx) => plugin.subscribeChanges({
230
+ environment: options.environment,
231
+ ...(options.cwd ? { cwd: options.cwd } : {}),
232
+ entities: options.entities.get(plugin.name),
233
+ onChange: ctx.onChange,
234
+ onError: ctx.onError,
235
+ signal: ctx.signal,
236
+ }),
237
+ }));
238
+ }
239
+ /**
240
+ * Load plugins for all detected lexicon names.
241
+ * Calls `init()` on each plugin if present.
242
+ */
243
+ export async function loadPlugins(lexiconNames) {
244
+ const plugins = [];
245
+ for (const name of lexiconNames) {
246
+ const plugin = await loadPlugin(name);
247
+ if (plugin.init) {
248
+ await plugin.init();
249
+ }
250
+ plugins.push(plugin);
251
+ }
252
+ // Cross-lexicon conflict detection
253
+ const report = checkConflicts(plugins);
254
+ for (const warning of report.warnings) {
255
+ console.warn(`[chant] warning: ${warning.type} "${warning.key}" is provided by multiple lexicons: ${warning.plugins.join(", ")}`);
256
+ }
257
+ if (report.conflicts.length > 0) {
258
+ const details = report.conflicts.map(describeConflict).join("\n");
259
+ throw new Error(`Cross-lexicon conflicts detected:\n${details}`);
260
+ }
261
+ return plugins;
262
+ }
263
+ /**
264
+ * Resolve lexicon names for a project directory.
265
+ *
266
+ * Reads `lexicons` from `chant.config.ts` / `chant.config.json` if present.
267
+ * Falls back to source-file detection via `detectLexicons()`.
268
+ *
269
+ * chant #1045 Phase 2 — this used to fall back to a full `discover()` call
270
+ * just to read its `sourceFiles` list, which imports and RUNS every project
271
+ * source file to collect entities that are then discarded here. That ran
272
+ * unconditionally, on every command that reaches this function without an
273
+ * explicit `chant.config.ts` `lexicons` list (`build`, `lint`, `doctor`,
274
+ * `import`, `graph`, the MCP server — effectively the whole CLI), with no
275
+ * `--fold`/`--sandbox` involved at all: a project could omit `lexicons` and
276
+ * every file would execute here, in the CLI's own process, before the
277
+ * caller's OWN (possibly folded, possibly sandboxed) build ever ran. Fixed
278
+ * by using `findInfraFiles()` alone — the pure directory walk `discover()`
279
+ * itself starts from, no import, no execution — since `detectLexicons()` is
280
+ * already a plain text/regex scan over file contents (`../detectLexicon.ts`)
281
+ * that never needed live module exports to begin with. This is strictly
282
+ * better than routing the detection through the sandbox: it removes the
283
+ * execution entirely rather than containing it, at no bundling/spawn cost.
284
+ *
285
+ * chant #1117 — walks up from `projectPath` to the project root
286
+ * (`loadChantConfigUpward`) rather than reading `projectPath` alone: `chant
287
+ * build src/<stack>` calls this with the stack's own subdirectory, and a
288
+ * project that declares `lexicons` only in its root `chant.config.ts` (never
289
+ * detectable by `detectLexicons()`'s import scan alone, e.g. a lexicon that's
290
+ * loaded but never imported by name in that particular stack's files) would
291
+ * otherwise silently miss it.
292
+ */
293
+ export async function resolveProjectLexicons(projectPath, options = {}) {
294
+ const requested = options.lexicon;
295
+ const { config } = await loadChantConfigUpward(projectPath);
296
+ let names;
297
+ if (config.lexicons && config.lexicons.length > 0) {
298
+ names = lexiconNames(config.lexicons);
299
+ }
300
+ else {
301
+ // Fallback: detect from source imports — a pure text scan, no execution.
302
+ const files = await findInfraFiles(projectPath);
303
+ try {
304
+ names = await detectLexicons(files);
305
+ }
306
+ catch (error) {
307
+ if (requested && isNoLexiconDetected(error))
308
+ return [requested];
309
+ throw error;
310
+ }
311
+ }
312
+ return requested && !names.includes(requested) ? [...names, requested] : names;
313
+ }
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Resolve a command from parsed CLI args against the registry.
3
+ *
4
+ * Supports compound commands like "dev generate" where args.command="dev"
5
+ * and args.path="generate". Falls back to simple command matching.
6
+ */
7
+ /** Short command aliases. `chant lc …` is sugar for `chant lifecycle …`. */
8
+ const COMMAND_ALIASES = { lc: "lifecycle" };
9
+ export function resolveCommand(args, registry) {
10
+ const command = COMMAND_ALIASES[args.command] ?? args.command;
11
+ // Try compound command first: "dev generate", "serve lsp", "init lexicon"
12
+ const compound = `${command} ${args.path}`;
13
+ const compoundMatch = registry.find((c) => c.name === compound);
14
+ if (compoundMatch) {
15
+ return { def: compoundMatch, compound: true };
16
+ }
17
+ // Try simple command
18
+ const simpleMatch = registry.find((c) => c.name === command);
19
+ if (simpleMatch) {
20
+ return { def: simpleMatch, compound: false };
21
+ }
22
+ return null;
23
+ }
@@ -0,0 +1,329 @@
1
+ import { pathToFileURL } from "node:url";
2
+ /**
3
+ * ANSI color codes
4
+ */
5
+ const colors = {
6
+ red: "\x1b[31m",
7
+ yellow: "\x1b[33m",
8
+ green: "\x1b[32m",
9
+ cyan: "\x1b[36m",
10
+ gray: "\x1b[90m",
11
+ reset: "\x1b[0m",
12
+ bold: "\x1b[1m",
13
+ underline: "\x1b[4m",
14
+ };
15
+ /**
16
+ * Check if colors should be used
17
+ */
18
+ function useColors() {
19
+ return !process.env.NO_COLOR && process.stdout.isTTY !== false;
20
+ }
21
+ /**
22
+ * Apply color if enabled
23
+ */
24
+ function color(text, colorCode) {
25
+ if (!useColors())
26
+ return text;
27
+ return `${colorCode}${text}${colors.reset}`;
28
+ }
29
+ /**
30
+ * Format diagnostics in stylish format (similar to ESLint)
31
+ * Groups by file, shows severity, message, and rule ID
32
+ *
33
+ * @param diagnostics - Active (non-suppressed) diagnostics
34
+ * @param suppressed - Suppressed diagnostics with optional reason (optional). When
35
+ * present and non-empty, a "Suppressed" section is appended (#1866, design #1059)
36
+ * below the active diagnostics, mirroring SARIF's `suppressed` param on
37
+ * {@link formatSarif} rather than changing what "diagnostics" means here.
38
+ * @param bundle - The project's loaded OKF knowledge bundle (`../../okf-read`'s
39
+ * `loadOkfBundle`), used to resolve `okf:` citations in suppression reasons.
40
+ * Omitted (or a bundle with no matching concept) falls back to printing the
41
+ * raw reason with a warning — this never affects suppression itself, only
42
+ * how a cited reason renders.
43
+ */
44
+ export function formatStylish(diagnostics, suppressed, bundle) {
45
+ const hasSuppressed = suppressed !== undefined && suppressed.length > 0;
46
+ if (diagnostics.length === 0 && !hasSuppressed) {
47
+ return formatSummary(0, 0);
48
+ }
49
+ const lines = [];
50
+ let errorCount = 0;
51
+ let warningCount = 0;
52
+ if (diagnostics.length > 0) {
53
+ // Group by file
54
+ const byFile = new Map();
55
+ for (const diag of diagnostics) {
56
+ const existing = byFile.get(diag.file) ?? [];
57
+ existing.push(diag);
58
+ byFile.set(diag.file, existing);
59
+ }
60
+ for (const [file, fileDiags] of byFile) {
61
+ // File header with underline
62
+ lines.push("");
63
+ lines.push(color(file, colors.underline));
64
+ // Sort by line, then column
65
+ fileDiags.sort((a, b) => {
66
+ if (a.line !== b.line)
67
+ return a.line - b.line;
68
+ return a.column - b.column;
69
+ });
70
+ for (const diag of fileDiags) {
71
+ // Count errors and warnings
72
+ if (diag.severity === "error") {
73
+ errorCount++;
74
+ }
75
+ else if (diag.severity === "warning") {
76
+ warningCount++;
77
+ }
78
+ // Format: " line:col severity message ruleId"
79
+ const location = color(`${String(diag.line).padStart(4)}:${String(diag.column).padEnd(3)}`, colors.gray);
80
+ const severityColor = diag.severity === "error" ? colors.red : colors.yellow;
81
+ const severity = color(diag.severity.padEnd(7), severityColor);
82
+ const ruleId = color(diag.ruleId, colors.gray);
83
+ lines.push(` ${location} ${severity} ${diag.message} ${ruleId}`);
84
+ }
85
+ }
86
+ }
87
+ if (hasSuppressed) {
88
+ lines.push(...formatSuppressedSection(suppressed, bundle));
89
+ }
90
+ // Summary line
91
+ lines.push("");
92
+ const summary = formatSummary(errorCount, warningCount);
93
+ lines.push(summary);
94
+ return lines.join("\n");
95
+ }
96
+ /**
97
+ * Resolve a suppression reason's `okf:<path>` citation (#1866, design #1059)
98
+ * against a loaded bundle's concepts, matched on `OkfConcept.path`. Not an
99
+ * `okf:` citation at all: returns `null`, and the reason renders as plain
100
+ * text, same as before this section existed. A leading `/` on the cited path
101
+ * is accepted and stripped — `okf-read.ts`'s bundle-relative paths never
102
+ * carry one, but the design doc's worked example writes citations with one
103
+ * (mirroring an absolute-from-bundle-root reading), so both forms resolve.
104
+ */
105
+ function resolveOkfCitation(reason, bundle) {
106
+ const prefix = "okf:";
107
+ if (!reason.startsWith(prefix))
108
+ return null;
109
+ const token = reason.slice(prefix.length).trim().replace(/^\/+/, "");
110
+ const concept = bundle?.concepts.find((c) => c.path === token);
111
+ if (concept) {
112
+ return { label: concept.title ?? concept.path, path: concept.path, unresolved: false };
113
+ }
114
+ return { label: reason, unresolved: true };
115
+ }
116
+ /**
117
+ * Render the "Suppressed" section: every suppressed diagnostic, grouped by
118
+ * file like the active section above, with an `okf:` reason resolved to its
119
+ * concept's title (and bundle-relative path on the line below) when
120
+ * `bundle` has a match. A citation naming no concept — including when no
121
+ * `bundle` was loaded at all — prints the raw reason plus a warning; a
122
+ * plain (non-`okf:`) reason prints as-is. Never affects which diagnostics
123
+ * are suppressed, only how the reason renders (design #1059: "a cited
124
+ * suppression suppresses exactly as an uncited one does").
125
+ */
126
+ function formatSuppressedSection(suppressed, bundle) {
127
+ const lines = [];
128
+ const byFile = new Map();
129
+ for (const diag of suppressed) {
130
+ const existing = byFile.get(diag.file) ?? [];
131
+ existing.push(diag);
132
+ byFile.set(diag.file, existing);
133
+ }
134
+ lines.push("");
135
+ lines.push(color("Suppressed", colors.underline));
136
+ for (const [file, fileDiags] of byFile) {
137
+ lines.push("");
138
+ lines.push(color(file, colors.underline));
139
+ fileDiags.sort((a, b) => {
140
+ if (a.line !== b.line)
141
+ return a.line - b.line;
142
+ return a.column - b.column;
143
+ });
144
+ for (const diag of fileDiags) {
145
+ const locationPlain = `${String(diag.line).padStart(4)}:${String(diag.column).padEnd(3)}`;
146
+ const location = color(locationPlain, colors.gray);
147
+ const severity = color("suppressed", colors.cyan);
148
+ const ruleId = color(diag.ruleId, colors.gray);
149
+ const citation = diag.reason ? resolveOkfCitation(diag.reason, bundle) : null;
150
+ const indent = " ".repeat(2 + locationPlain.length + 2 + "suppressed".length + 2 + diag.ruleId.length + 2);
151
+ if (citation) {
152
+ lines.push(` ${location} ${severity} ${ruleId} ${citation.label}`);
153
+ if (!citation.unresolved) {
154
+ lines.push(`${indent}${color(citation.path, colors.gray)}`);
155
+ }
156
+ else {
157
+ lines.push(`${indent}${color("⚠ unresolved okf citation", colors.yellow)}`);
158
+ }
159
+ }
160
+ else if (diag.reason) {
161
+ lines.push(` ${location} ${severity} ${ruleId} ${diag.reason}`);
162
+ }
163
+ else {
164
+ lines.push(` ${location} ${severity} ${ruleId}`);
165
+ }
166
+ }
167
+ }
168
+ return lines;
169
+ }
170
+ /**
171
+ * Format the summary line
172
+ */
173
+ export function formatSummary(errorCount, warningCount) {
174
+ const parts = [];
175
+ if (errorCount > 0) {
176
+ parts.push(color(`${errorCount} error${errorCount === 1 ? "" : "s"}`, colors.red));
177
+ }
178
+ if (warningCount > 0) {
179
+ parts.push(color(`${warningCount} warning${warningCount === 1 ? "" : "s"}`, colors.yellow));
180
+ }
181
+ if (parts.length === 0) {
182
+ return color("✓ No problems found", colors.green);
183
+ }
184
+ const symbol = errorCount > 0 ? "✖" : "⚠";
185
+ return `${symbol} ${parts.join(", ")}`;
186
+ }
187
+ /**
188
+ * Format diagnostics as JSON
189
+ */
190
+ export function formatJson(diagnostics) {
191
+ return JSON.stringify(diagnostics, null, 2);
192
+ }
193
+ /**
194
+ * Map lint severity to SARIF level
195
+ */
196
+ function mapSeverity(severity) {
197
+ if (severity === "error")
198
+ return "error";
199
+ if (severity === "warning")
200
+ return "warning";
201
+ return "note";
202
+ }
203
+ /**
204
+ * Build a SARIF region object, only including endLine/endColumn when available
205
+ */
206
+ function buildRegion(diag) {
207
+ const region = {
208
+ startLine: diag.line,
209
+ startColumn: diag.column,
210
+ };
211
+ if (diag.endLine !== undefined)
212
+ region.endLine = diag.endLine;
213
+ if (diag.endColumn !== undefined)
214
+ region.endColumn = diag.endColumn;
215
+ return region;
216
+ }
217
+ /**
218
+ * Build a SARIF result from a diagnostic
219
+ */
220
+ function buildSarifResult(diag, ruleIndex) {
221
+ const result = {
222
+ ruleId: diag.ruleId,
223
+ ruleIndex: ruleIndex.get(diag.ruleId),
224
+ level: mapSeverity(diag.severity),
225
+ message: { text: diag.message },
226
+ locations: [
227
+ {
228
+ physicalLocation: {
229
+ artifactLocation: {
230
+ uri: diag.file.startsWith("/") ? pathToFileURL(diag.file).href : diag.file,
231
+ },
232
+ region: buildRegion(diag),
233
+ },
234
+ },
235
+ ],
236
+ fingerprints: {
237
+ "chant/v1": `${diag.ruleId}:${diag.file}:${diag.line}:${diag.column}`,
238
+ },
239
+ };
240
+ return result;
241
+ }
242
+ /**
243
+ * Format diagnostics as SARIF (Static Analysis Results Interchange Format)
244
+ *
245
+ * @param diagnostics - Active (non-suppressed) diagnostics
246
+ * @param rules - Full list of loaded LintRules for rich metadata (optional)
247
+ * @param suppressed - Suppressed diagnostics with optional reason (optional)
248
+ * @param version - Tool version string (optional, defaults to "0.1.0")
249
+ */
250
+ export function formatSarif(diagnostics, rules, suppressed, version) {
251
+ // Build rule metadata from LintRule objects when available, otherwise from diagnostics
252
+ const { sarifRules, ruleIndex } = buildRuleMetadata(diagnostics, suppressed ?? [], rules);
253
+ // Build active results
254
+ const results = diagnostics.map((diag) => buildSarifResult(diag, ruleIndex));
255
+ // Append suppressed results with SARIF suppressions
256
+ if (suppressed) {
257
+ for (const diag of suppressed) {
258
+ const result = buildSarifResult(diag, ruleIndex);
259
+ result.suppressions = [
260
+ {
261
+ kind: "inSource",
262
+ ...(diag.reason ? { justification: diag.reason } : {}),
263
+ },
264
+ ];
265
+ results.push(result);
266
+ }
267
+ }
268
+ const sarif = {
269
+ $schema: "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
270
+ version: "2.1.0",
271
+ runs: [
272
+ {
273
+ tool: {
274
+ driver: {
275
+ name: "chant",
276
+ version: version ?? "0.1.0",
277
+ informationUri: "https://intentius.io/chant",
278
+ rules: sarifRules,
279
+ },
280
+ },
281
+ results,
282
+ },
283
+ ],
284
+ };
285
+ return JSON.stringify(sarif, null, 2);
286
+ }
287
+ /**
288
+ * Build SARIF rule metadata from loaded LintRules and/or diagnostics.
289
+ * Returns both the rules array and a ruleId→index map for result references.
290
+ */
291
+ function buildRuleMetadata(diagnostics, suppressed, rules) {
292
+ // Build a lookup from rule objects
293
+ const ruleMap = new Map();
294
+ if (rules) {
295
+ for (const r of rules) {
296
+ ruleMap.set(r.id, r);
297
+ }
298
+ }
299
+ // Collect all unique rule IDs from diagnostics + suppressed
300
+ const seen = new Set();
301
+ const orderedIds = [];
302
+ for (const diag of [...diagnostics, ...suppressed]) {
303
+ if (!seen.has(diag.ruleId)) {
304
+ seen.add(diag.ruleId);
305
+ orderedIds.push(diag.ruleId);
306
+ }
307
+ }
308
+ const sarifRules = [];
309
+ const ruleIndex = new Map();
310
+ for (const id of orderedIds) {
311
+ const rule = ruleMap.get(id);
312
+ const descText = rule?.description || id;
313
+ const entry = {
314
+ id,
315
+ shortDescription: { text: descText },
316
+ fullDescription: { text: descText },
317
+ helpUri: rule?.helpUri || `https://intentius.io/chant/lint-rules/${id.toLowerCase()}`,
318
+ defaultConfiguration: {
319
+ level: mapSeverity(rule?.severity ?? "warning"),
320
+ },
321
+ };
322
+ if (rule?.category) {
323
+ entry.properties = { category: rule.category };
324
+ }
325
+ ruleIndex.set(id, sarifRules.length);
326
+ sarifRules.push(entry);
327
+ }
328
+ return { sarifRules, ruleIndex };
329
+ }
@@ -0,0 +1,15 @@
1
+ import { createRequire } from "node:module";
2
+ /**
3
+ * The installed chant's version, read from `@intentius/chant`'s own
4
+ * package.json, or "0.0.0" when it can't be read. The path is the same from
5
+ * `src/cli/` and `dist/cli/`, so it holds whether chant runs from source or
6
+ * from its build.
7
+ */
8
+ export const CHANT_VERSION = (() => {
9
+ try {
10
+ return createRequire(import.meta.url)("../../package.json").version ?? "0.0.0";
11
+ }
12
+ catch {
13
+ return "0.0.0";
14
+ }
15
+ })();