@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,80 @@
1
+ import { resolve } from "node:path";
2
+ import { readSnapshot } from "../../lifecycle/git.js";
3
+ import { build } from "../../build.js";
4
+ import { computeBuildDigest, diffDigests } from "../../lifecycle/digest.js";
5
+ import { takeSnapshot } from "../../lifecycle/snapshot.js";
6
+ /**
7
+ * Create lifecycle-snapshot tool definition and handler
8
+ */
9
+ export function createSnapshotTool(plugins) {
10
+ return {
11
+ definition: {
12
+ name: "lifecycle-snapshot",
13
+ description: "Capture deployed state for an environment",
14
+ inputSchema: {
15
+ type: "object",
16
+ properties: {
17
+ environment: { type: "string", description: "Target environment" },
18
+ lexicon: { type: "string", description: "Optional — snapshot all lexicons if omitted" },
19
+ },
20
+ required: ["environment"],
21
+ },
22
+ },
23
+ handler: async (params) => {
24
+ const env = params.environment;
25
+ const lexiconFilter = params.lexicon;
26
+ const targetPlugins = lexiconFilter
27
+ ? plugins.filter((p) => p.name === lexiconFilter)
28
+ : plugins;
29
+ const pluginsWithDescribe = targetPlugins.filter((p) => p.describeResources);
30
+ if (pluginsWithDescribe.length === 0)
31
+ return "No plugins implement describeResources";
32
+ const serializers = plugins.map((p) => p.serializer);
33
+ const buildResult = await build(resolve("."), serializers);
34
+ if (buildResult.errors.length > 0)
35
+ return "Build failed";
36
+ const result = await takeSnapshot(env, pluginsWithDescribe, buildResult);
37
+ return { snapshots: result.snapshots.length, warnings: result.warnings, errors: result.errors };
38
+ },
39
+ };
40
+ }
41
+ /**
42
+ * Create lifecycle-diff tool definition and handler
43
+ */
44
+ export function createDiffTool(plugins) {
45
+ return {
46
+ definition: {
47
+ name: "lifecycle-diff",
48
+ description: "Compare current build declarations against last snapshot's digest",
49
+ inputSchema: {
50
+ type: "object",
51
+ properties: {
52
+ environment: { type: "string", description: "Target environment" },
53
+ lexicon: { type: "string", description: "Optional — diff all lexicons if omitted" },
54
+ },
55
+ required: ["environment"],
56
+ },
57
+ },
58
+ handler: async (params) => {
59
+ const env = params.environment;
60
+ const lexiconFilter = params.lexicon;
61
+ const serializers = plugins.map((p) => p.serializer);
62
+ const buildResult = await build(resolve("."), serializers);
63
+ if (buildResult.errors.length > 0)
64
+ return "Build failed";
65
+ const currentDigest = computeBuildDigest(buildResult);
66
+ const lexicons = lexiconFilter ? [lexiconFilter] : buildResult.manifest.lexicons;
67
+ const results = {};
68
+ for (const lex of lexicons) {
69
+ const content = await readSnapshot(env, lex);
70
+ let previousDigest = undefined;
71
+ if (content) {
72
+ const snapshot = JSON.parse(content);
73
+ previousDigest = snapshot.digest;
74
+ }
75
+ results[lex] = diffDigests(currentDigest, previousDigest);
76
+ }
77
+ return results;
78
+ },
79
+ };
80
+ }
@@ -0,0 +1,306 @@
1
+ /**
2
+ * MCP tools over Ops — on the runtime seam (#2121), not on any one runtime's
3
+ * own client.
4
+ *
5
+ * Every tool here goes through an {@link OpRuntimeProvider} — the built-in
6
+ * `local` one by default, or the `runtime` argument's lexicon `opRuntime` when
7
+ * an agent names one. One provider is built per call, so a long-lived server
8
+ * picks up a project's config as it is now rather than as it was at boot; the
9
+ * local provider's in-process run history is the exception and is held for the
10
+ * life of the module, so `op-status` can answer for a run `op-run` started.
11
+ *
12
+ * #2118 owns the ledger-backed record shape; when it lands, `status`/`log`
13
+ * read the ledger and this file stops depending on the process outliving the
14
+ * run.
15
+ */
16
+ import { lexiconNames } from "../../lexicon-module.js";
17
+ import { resolve } from "node:path";
18
+ import { discoverOps } from "../../op/discover.js";
19
+ import { createLocalOpRuntime } from "../../op/runtimes/local.js";
20
+ import { loadChantConfig } from "../../config.js";
21
+ import { loadPlugins } from "../plugins.js";
22
+ import { readGateLedger, latestPendingGate } from "../../lifecycle/gate-ledger.js";
23
+ import { recordGateApproval } from "../handlers/operator.js";
24
+ /** The `local` provider, shared so an `op-run` is visible to a later `op-status`. */
25
+ let localRuntime;
26
+ /**
27
+ * Resolve the runtime a tool call addresses. `runtime` names a configured
28
+ * lexicon's `opRuntime`; omitted (or `local`) it is core's built-in provider.
29
+ * Throws with an actionable message — the MCP layer turns that into `isError`.
30
+ */
31
+ async function runtimeFor(name) {
32
+ const wanted = typeof name === "string" && name.length > 0 ? name : "local";
33
+ if (wanted === "local") {
34
+ localRuntime ?? (localRuntime = createLocalOpRuntime({ projectPath: resolve(".") }));
35
+ return localRuntime;
36
+ }
37
+ const configured = await loadChantConfig(resolve("."))
38
+ .then(({ config }) => lexiconNames(config.lexicons ?? []))
39
+ .catch(() => []);
40
+ if (!configured.includes(wanted)) {
41
+ throw new Error(`runtime "${wanted}" is not a configured lexicon` +
42
+ (configured.length > 0 ? ` (configured: ${configured.join(", ")})` : ""));
43
+ }
44
+ const plugin = (await loadPlugins([wanted]))[0];
45
+ if (!plugin?.opRuntime)
46
+ throw new Error(`lexicon "${wanted}" does not host Op runs`);
47
+ return plugin.opRuntime;
48
+ }
49
+ /**
50
+ * The refusal for an Op that declares `neverOverMcp`, or `undefined` when MCP
51
+ * may act on it. It names the rule and the way through, which is a person at a
52
+ * shell. An Op that is not discovered is left to the caller's own not-found
53
+ * handling.
54
+ */
55
+ async function neverOverMcpRefusal(name, action, gate) {
56
+ const { ops } = await discoverOps();
57
+ let declared = Boolean(ops.get(name)?.config.neverOverMcp);
58
+ // An Op that is not discovered (fan-out) declares nothing, so its gate
59
+ // records the rule itself (chant#3485).
60
+ if (!declared && action === "approve" && gate !== undefined) {
61
+ const { pending } = await readGateLedger(name).catch(() => ({ pending: [] }));
62
+ declared = Boolean(latestPendingGate(pending, gate)?.neverOverMcp);
63
+ }
64
+ if (!declared)
65
+ return undefined;
66
+ return action === "run"
67
+ ? `Op "${name}" declares neverOverMcp, so it is not run over MCP. Run it at a shell with \`chant run ${name}\`; op-status and op-report still answer here.`
68
+ : `Op "${name}" declares neverOverMcp, so its gates are not resolved over MCP, whichever channel reached them. ` +
69
+ `Approvals belong to people: approve at a shell with \`chant approve ${name} <gate>\`.`;
70
+ }
71
+ const RUNTIME_PARAM = {
72
+ type: "string",
73
+ description: 'Runtime to address: a lexicon name with an opRuntime, or "local" (the default)',
74
+ };
75
+ export function createOpListTool() {
76
+ return {
77
+ definition: {
78
+ name: "op-list",
79
+ description: "List all Op definitions discovered from *.op.ts files with their current run state",
80
+ inputSchema: {
81
+ type: "object",
82
+ properties: {
83
+ runtime: RUNTIME_PARAM,
84
+ },
85
+ },
86
+ },
87
+ handler: async (params) => {
88
+ const { ops, errors } = await discoverOps();
89
+ let states = new Map();
90
+ try {
91
+ const runtime = await runtimeFor(params.runtime);
92
+ states = await runtime.list([...ops.values()].map((d) => d.config));
93
+ }
94
+ catch {
95
+ // Runtime unavailable — the definitions are still worth listing.
96
+ }
97
+ const result = [];
98
+ for (const [name, { config }] of ops) {
99
+ result.push({
100
+ name,
101
+ overview: config.overview,
102
+ phases: config.phases.length,
103
+ labels: config.labels ?? {},
104
+ depends: config.depends ?? [],
105
+ runState: states.get(name)?.state ?? "—",
106
+ });
107
+ }
108
+ return { ops: result, errors };
109
+ },
110
+ };
111
+ }
112
+ export function createOpRunTool() {
113
+ return {
114
+ definition: {
115
+ name: "op-run",
116
+ description: "Run an Op on a runtime and return its result. Defaults to the built-in local runtime, which executes the Op in this process. " +
117
+ "Refuses an Op that declares neverOverMcp.",
118
+ inputSchema: {
119
+ type: "object",
120
+ properties: {
121
+ name: { type: "string", description: "Op name (e.g. alb-deploy)" },
122
+ // chant#3560 — what `chant run --env` passes: the environment the
123
+ // run targets. Omitted, the runtime uses its own default.
124
+ env: { type: "string", description: "Environment the run targets (defaults to the runtime's own)" },
125
+ runtime: RUNTIME_PARAM,
126
+ },
127
+ required: ["name"],
128
+ },
129
+ },
130
+ handler: async (params) => {
131
+ const name = params.name;
132
+ const { ops } = await discoverOps();
133
+ const refusal = await neverOverMcpRefusal(name, "run");
134
+ if (refusal)
135
+ throw new Error(refusal);
136
+ if (!ops.has(name)) {
137
+ const available = [...ops.keys()];
138
+ return `Op "${name}" not found. Available: ${available.join(", ") || "none"}`;
139
+ }
140
+ const runtime = await runtimeFor(params.runtime);
141
+ const env = typeof params.env === "string" && params.env !== "" ? params.env : undefined;
142
+ const handle = await runtime.start(ops.get(name).config, env !== undefined ? { env } : {});
143
+ const status = await handle.result();
144
+ return {
145
+ op: status.op,
146
+ runId: status.runId,
147
+ state: status.state,
148
+ startedAt: status.startedAt,
149
+ endedAt: status.endedAt ?? null,
150
+ ...(status.records ? { records: status.records } : {}),
151
+ ...(status.gate ? { gate: status.gate } : {}),
152
+ };
153
+ },
154
+ };
155
+ }
156
+ export function createOpStatusTool() {
157
+ return {
158
+ definition: {
159
+ name: "op-status",
160
+ description: "Return the current run state of an Op on a runtime",
161
+ inputSchema: {
162
+ type: "object",
163
+ properties: {
164
+ name: { type: "string", description: "Op name (e.g. alb-deploy)" },
165
+ runtime: RUNTIME_PARAM,
166
+ },
167
+ required: ["name"],
168
+ },
169
+ },
170
+ handler: async (params) => {
171
+ const name = params.name;
172
+ const { ops } = await discoverOps();
173
+ if (!ops.has(name))
174
+ throw new Error(`Op "${name}" not found`);
175
+ const runtime = await runtimeFor(params.runtime);
176
+ const status = await runtime.status(name);
177
+ if (!status)
178
+ return { op: name, runtime: runtime.name, state: null, message: "no run recorded" };
179
+ return {
180
+ op: status.op,
181
+ runtime: runtime.name,
182
+ runId: status.runId,
183
+ state: status.state,
184
+ startedAt: status.startedAt,
185
+ endedAt: status.endedAt ?? null,
186
+ ...(status.records ? { records: status.records } : {}),
187
+ gate: status.gate ?? null,
188
+ };
189
+ },
190
+ };
191
+ }
192
+ export function createOpApproveTool() {
193
+ return {
194
+ definition: {
195
+ name: "op-approve",
196
+ description: "Record a gate's resolution on the gate ledger and wake the runtime hosting the gated run. " +
197
+ "Refuses a gate this same channel reached: a run started with op-run must be approved from " +
198
+ "somewhere else, normally `chant approve <op> <gate>` at a shell. The approver is recorded as " +
199
+ "unattested, because this channel cannot verify a name. Also refuses every gate of an Op that " +
200
+ "declares neverOverMcp, whatever channel reached the gate.",
201
+ inputSchema: {
202
+ type: "object",
203
+ properties: {
204
+ name: { type: "string", description: "Op name (e.g. alb-deploy)" },
205
+ gate: { type: "string", description: "Gate name (e.g. gate-dns-delegation)" },
206
+ // chant#2384 — no `approver`. It was free text on a channel that
207
+ // cannot verify one, so the model named itself whatever it liked and
208
+ // the ledger recorded it indistinguishably from a name a person gave.
209
+ note: { type: "string", description: "Free-text context recorded on the resolution" },
210
+ url: { type: "string", description: "Absolute http/https URL this resolution happened at" },
211
+ // chant#3555 — what `chant run approve --env` passes: the
212
+ // environment the woken run runs in. Omitted, the runtime keeps the
213
+ // gated run's.
214
+ env: { type: "string", description: "Environment the woken run runs in (defaults to the gated run's)" },
215
+ runtime: RUNTIME_PARAM,
216
+ },
217
+ required: ["name", "gate"],
218
+ },
219
+ },
220
+ handler: async (params) => {
221
+ const name = params.name;
222
+ const gate = params.gate;
223
+ if (!name || !gate)
224
+ throw new Error("op-approve needs both an Op name and a gate name");
225
+ const refusal = await neverOverMcpRefusal(name, "approve", gate);
226
+ if (refusal)
227
+ throw new Error(refusal);
228
+ const runtime = await runtimeFor(params.runtime);
229
+ const outcome = await recordGateApproval(name, gate, {
230
+ note: params.note,
231
+ url: params.url,
232
+ // Named rather than left to the ambient value, so this tool states its
233
+ // own channel even if it is ever registered on a server that did not.
234
+ origin: "mcp",
235
+ });
236
+ if (!outcome.ok) {
237
+ throw new Error(`Gate "${gate}" on "${name}" was not recorded. If the gate was reached over MCP, it cannot ` +
238
+ `also be resolved over MCP — approve it from another channel, normally ` +
239
+ `\`chant approve ${name} ${gate}\` at a shell.`);
240
+ }
241
+ if (runtime.resolveGate) {
242
+ const env = typeof params.env === "string" && params.env !== "" ? params.env : undefined;
243
+ if (env !== undefined)
244
+ await runtime.resolveGate(name, gate, outcome.record, { env });
245
+ else
246
+ await runtime.resolveGate(name, gate, outcome.record);
247
+ }
248
+ return {
249
+ op: name,
250
+ gate,
251
+ resolvedBy: outcome.record.resolvedBy,
252
+ origin: outcome.record.origin,
253
+ timestamp: outcome.record.timestamp,
254
+ runtimeNotified: Boolean(runtime.resolveGate),
255
+ };
256
+ },
257
+ };
258
+ }
259
+ export function createOpReportTool() {
260
+ return {
261
+ definition: {
262
+ name: "op-report",
263
+ description: "Return a markdown report for the latest run of an Op on a runtime",
264
+ inputSchema: {
265
+ type: "object",
266
+ properties: {
267
+ name: { type: "string", description: "Op name (e.g. alb-deploy)" },
268
+ runtime: RUNTIME_PARAM,
269
+ },
270
+ required: ["name"],
271
+ },
272
+ },
273
+ handler: async (params) => {
274
+ const name = params.name;
275
+ const { ops } = await discoverOps();
276
+ if (!ops.has(name))
277
+ return `Op "${name}" not found`;
278
+ const { config } = ops.get(name);
279
+ const runtime = await runtimeFor(params.runtime);
280
+ const status = await runtime.status(name);
281
+ if (!status)
282
+ return `# ${name}\n\n${config.overview}\n\nNo run is recorded on the "${runtime.name}" runtime.\n`;
283
+ const lines = [
284
+ `# ${name}`,
285
+ "",
286
+ config.overview,
287
+ "",
288
+ `- Runtime: ${runtime.name}`,
289
+ `- Run: ${status.runId}`,
290
+ `- State: ${status.state}`,
291
+ `- Started: ${status.startedAt}`,
292
+ ...(status.endedAt ? [`- Ended: ${status.endedAt}`] : []),
293
+ ...(status.gate ? [`- Gate: ${status.gate.name} (pending since ${status.gate.since})`] : []),
294
+ "",
295
+ ];
296
+ if (status.records?.length) {
297
+ lines.push("| Phase | Step | Status | Duration |", "|---|---|---|---|");
298
+ for (const record of status.records) {
299
+ lines.push(`| ${record.phase} | ${record.fn} | ${record.status} | ${record.durationMs}ms |`);
300
+ }
301
+ lines.push("");
302
+ }
303
+ return lines.join("\n");
304
+ },
305
+ };
306
+ }
@@ -0,0 +1,258 @@
1
+ import { resolve, join, dirname } from "node:path";
2
+ import { readFile } from "node:fs/promises";
3
+ import { collectComposites } from "./tools/composites.js";
4
+ import { getContext } from "./resources/context.js";
5
+ import { readSnapshot, readEnvironmentSnapshots } from "../../lifecycle/git.js";
6
+ import { discoverOps } from "../../op/discover.js";
7
+ import { createLocalOpRuntime } from "../../op/runtimes/local.js";
8
+ import { loadOkfBundle } from "../../okf-read.js";
9
+ import { loadChantConfigUpward, resolveKnowledgeDir } from "../../config.js";
10
+ /**
11
+ * Core resource definitions (always present regardless of plugins)
12
+ */
13
+ export const coreResourceDefinitions = [
14
+ {
15
+ uri: "chant://context",
16
+ name: "chant Context",
17
+ description: "Lexicon-specific instructions and patterns for chant development",
18
+ mimeType: "text/markdown",
19
+ },
20
+ {
21
+ uri: "chant://examples/list",
22
+ name: "Examples List",
23
+ description: "List of available chant examples",
24
+ mimeType: "application/json",
25
+ },
26
+ {
27
+ uri: "chant://ops",
28
+ name: "Ops",
29
+ description: "All Op definitions discovered from *.op.ts files",
30
+ mimeType: "application/json",
31
+ },
32
+ {
33
+ uri: "chant://ops/{name}/runs",
34
+ name: "Op run history",
35
+ description: "Run history for a named Op, newest first",
36
+ mimeType: "application/json",
37
+ },
38
+ {
39
+ uri: "chant://ops/{name}/runs/latest",
40
+ name: "Op latest run",
41
+ description: "Latest run state for a named Op",
42
+ mimeType: "application/json",
43
+ },
44
+ {
45
+ uri: "chant://composites",
46
+ name: "Composite catalog",
47
+ description: "Every composite the loaded lexicons export, with what each bundles and its parameters (#2662)",
48
+ mimeType: "application/json",
49
+ },
50
+ {
51
+ uri: "chant://knowledge",
52
+ name: "Knowledge bundle",
53
+ description: "The project's OKF knowledge bundle (#1864, #1059): index.md and every authored concept, empty when no bundle exists",
54
+ mimeType: "application/json",
55
+ },
56
+ {
57
+ uri: "chant://state/{environment}",
58
+ name: "State (all lexicons)",
59
+ description: "All lexicon snapshots for an environment",
60
+ mimeType: "application/json",
61
+ },
62
+ {
63
+ uri: "chant://state/{environment}/{lexicon}",
64
+ name: "State (single lexicon)",
65
+ description: "Single lexicon snapshot for an environment",
66
+ mimeType: "application/json",
67
+ },
68
+ ];
69
+ /**
70
+ * Build the full resources list merging core + plugin resources
71
+ */
72
+ export function buildResourcesList(pluginResources) {
73
+ const resources = [...coreResourceDefinitions];
74
+ for (const { definition } of pluginResources.values()) {
75
+ resources.push(definition);
76
+ }
77
+ return { resources };
78
+ }
79
+ /**
80
+ * Collect example resources from plugins whose URI contains "examples/"
81
+ */
82
+ export function collectExamples(pluginResources) {
83
+ const examples = [];
84
+ for (const [uri, { definition }] of pluginResources.entries()) {
85
+ if (uri.includes("/examples/")) {
86
+ const name = uri.replace(/^chant:\/\/[^/]+\/examples\//, "");
87
+ examples.push({ name, description: definition.description });
88
+ }
89
+ }
90
+ return examples;
91
+ }
92
+ /**
93
+ * Handle resources/read request — checks plugin resources after core
94
+ */
95
+ export async function handleResourcesRead(params, pluginResources, plugins = []) {
96
+ const uri = params.uri;
97
+ // The whole composite catalog (#2662), static data from each lexicon's
98
+ // `composites()`; the `composites` tool filters the same list.
99
+ if (uri === "chant://composites") {
100
+ return {
101
+ contents: [{ uri, mimeType: "application/json", text: JSON.stringify(collectComposites(plugins), null, 2) }],
102
+ };
103
+ }
104
+ if (uri === "chant://context") {
105
+ return {
106
+ contents: [
107
+ {
108
+ uri,
109
+ mimeType: "text/markdown",
110
+ text: getContext(),
111
+ },
112
+ ],
113
+ };
114
+ }
115
+ if (uri === "chant://examples/list") {
116
+ return {
117
+ contents: [
118
+ {
119
+ uri,
120
+ mimeType: "application/json",
121
+ text: JSON.stringify(collectExamples(pluginResources)),
122
+ },
123
+ ],
124
+ };
125
+ }
126
+ // Authored knowledge (#1867, #1864, design #1059): same bundle the CLI's
127
+ // `chant explain` reads, over MCP — the resource path has no local
128
+ // filesystem, so this is the only way an MCP client sees the `knowledge/`
129
+ // directory's contents at all. Resolved from cwd, matching every other
130
+ // path-less resource here (`chant://ops`, `chant://state/...`). A missing
131
+ // bundle is not an error — `loadOkfBundle` already treats it as empty, and
132
+ // a missing `index.md` reads as `index: null` rather than throwing.
133
+ if (uri === "chant://knowledge") {
134
+ const cwd = resolve(".");
135
+ const loaded = await loadChantConfigUpward(cwd);
136
+ const projectRoot = loaded.configPath ? dirname(loaded.configPath) : cwd;
137
+ const dir = resolveKnowledgeDir(loaded.config, projectRoot);
138
+ const bundle = await loadOkfBundle(dir);
139
+ let index = null;
140
+ try {
141
+ index = await readFile(join(dir, "index.md"), "utf8");
142
+ }
143
+ catch {
144
+ index = null;
145
+ }
146
+ return {
147
+ contents: [{
148
+ uri,
149
+ mimeType: "application/json",
150
+ text: JSON.stringify({ dir, index, concepts: bundle.concepts }, null, 2),
151
+ }],
152
+ };
153
+ }
154
+ // Op resources
155
+ if (uri === "chant://ops") {
156
+ const { ops } = await discoverOps();
157
+ const list = Array.from(ops.values()).map(({ config }) => ({
158
+ name: config.name,
159
+ overview: config.overview,
160
+ phases: config.phases.length,
161
+ labels: config.labels ?? {},
162
+ depends: config.depends ?? [],
163
+ }));
164
+ return {
165
+ contents: [{ uri, mimeType: "application/json", text: JSON.stringify(list, null, 2) }],
166
+ };
167
+ }
168
+ // Both run resources read the built-in local runtime (#2121, #2116) — the
169
+ // one an MCP client can address without naming a lexicon. `status` and `log`
170
+ // answer from the run ledger (#2118), so a run that ended in an earlier
171
+ // process still reads back here.
172
+ if (uri.startsWith("chant://ops/") && uri.endsWith("/runs/latest")) {
173
+ const name = uri.replace("chant://ops/", "").replace("/runs/latest", "");
174
+ try {
175
+ const status = await createLocalOpRuntime({ projectPath: resolve(".") }).status(name);
176
+ return {
177
+ contents: [{ uri, mimeType: "application/json", text: JSON.stringify(status ?? null, null, 2) }],
178
+ };
179
+ }
180
+ catch (err) {
181
+ return {
182
+ contents: [{ uri, mimeType: "application/json", text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }) }],
183
+ };
184
+ }
185
+ }
186
+ if (uri.startsWith("chant://ops/") && uri.endsWith("/runs")) {
187
+ const name = uri.replace("chant://ops/", "").replace("/runs", "");
188
+ try {
189
+ const runs = await createLocalOpRuntime({ projectPath: resolve(".") }).log(name);
190
+ return {
191
+ contents: [{ uri, mimeType: "application/json", text: JSON.stringify(runs, null, 2) }],
192
+ };
193
+ }
194
+ catch (err) {
195
+ return {
196
+ contents: [{ uri, mimeType: "application/json", text: JSON.stringify({ error: err instanceof Error ? err.message : String(err) }) }],
197
+ };
198
+ }
199
+ }
200
+ // State resources: chant://state/{environment} and chant://state/{environment}/{lexicon}
201
+ if (uri.startsWith("chant://state/")) {
202
+ const parts = uri.replace("chant://state/", "").split("/");
203
+ const environment = parts[0];
204
+ const lexicon = parts[1];
205
+ if (lexicon) {
206
+ const content = await readSnapshot(environment, lexicon);
207
+ if (!content)
208
+ throw new Error(`No snapshot found for ${environment}/${lexicon}`);
209
+ return {
210
+ contents: [{ uri, mimeType: "application/json", text: content }],
211
+ };
212
+ }
213
+ else {
214
+ const snapshots = await readEnvironmentSnapshots(environment);
215
+ const result = {};
216
+ for (const [lex, content] of snapshots) {
217
+ result[lex] = JSON.parse(content);
218
+ }
219
+ return {
220
+ contents: [{ uri, mimeType: "application/json", text: JSON.stringify(result, null, 2) }],
221
+ };
222
+ }
223
+ }
224
+ if (uri.startsWith("chant://examples/")) {
225
+ // Look up example in plugin resources
226
+ const name = uri.replace("chant://examples/", "");
227
+ for (const [pluginUri, pluginResource] of pluginResources.entries()) {
228
+ if (pluginUri.endsWith(`/examples/${name}`)) {
229
+ const text = await pluginResource.handler();
230
+ return {
231
+ contents: [
232
+ {
233
+ uri,
234
+ mimeType: pluginResource.definition.mimeType ?? "text/typescript",
235
+ text,
236
+ },
237
+ ],
238
+ };
239
+ }
240
+ }
241
+ throw new Error(`Example not found: ${name}`);
242
+ }
243
+ // Check plugin resources
244
+ const pluginResource = pluginResources.get(uri);
245
+ if (pluginResource) {
246
+ const text = await pluginResource.handler();
247
+ return {
248
+ contents: [
249
+ {
250
+ uri,
251
+ mimeType: pluginResource.definition.mimeType ?? "text/plain",
252
+ text,
253
+ },
254
+ ],
255
+ };
256
+ }
257
+ throw new Error(`Unknown resource: ${uri}`);
258
+ }