@intentius/chant 0.124.13 → 0.124.15

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 (991) 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.d.ts +6 -0
  35. package/dist/build.d.ts.map +1 -1
  36. package/dist/build.js +669 -0
  37. package/dist/builder.js +44 -0
  38. package/dist/cdk/advise.js +30 -0
  39. package/dist/cdk/assembly.js +122 -0
  40. package/dist/cdk/graph.js +444 -0
  41. package/dist/cdk/tier-map.js +64 -0
  42. package/dist/cdk/types.js +24 -0
  43. package/dist/change-set.d.ts +24 -2
  44. package/dist/change-set.d.ts.map +1 -1
  45. package/dist/change-set.js +361 -0
  46. package/dist/child-project.js +21 -0
  47. package/dist/ci-jobs.d.ts +227 -0
  48. package/dist/ci-jobs.d.ts.map +1 -0
  49. package/dist/ci-jobs.js +448 -0
  50. package/dist/claimed-fields.js +135 -0
  51. package/dist/cli/build-options.js +70 -0
  52. package/dist/cli/build-params-cli.js +139 -0
  53. package/dist/cli/command-group.js +123 -0
  54. package/dist/cli/commands/audit-agents.js +326 -0
  55. package/dist/cli/commands/audit.js +571 -0
  56. package/dist/cli/commands/build.js +920 -0
  57. package/dist/cli/commands/carve-apply.js +153 -0
  58. package/dist/cli/commands/carve-bridge.js +201 -0
  59. package/dist/cli/commands/carve-emit.js +332 -0
  60. package/dist/cli/commands/carve-status.js +119 -0
  61. package/dist/cli/commands/carve.js +204 -0
  62. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  63. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  64. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  65. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  66. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  67. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  68. package/dist/cli/commands/check-lexicon.js +766 -0
  69. package/dist/cli/commands/describe.js +85 -0
  70. package/dist/cli/commands/diff.js +175 -0
  71. package/dist/cli/commands/doctor.js +350 -0
  72. package/dist/cli/commands/import-agents.js +155 -0
  73. package/dist/cli/commands/import.js +670 -0
  74. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  75. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  76. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  77. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  78. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  79. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  80. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  81. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  82. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  83. package/dist/cli/commands/init-lexicon.js +172 -0
  84. package/dist/cli/commands/init.js +381 -0
  85. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  86. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  87. package/dist/cli/commands/licenses.js +125 -0
  88. package/dist/cli/commands/lint.d.ts.map +1 -1
  89. package/dist/cli/commands/lint.js +948 -0
  90. package/dist/cli/commands/list.js +63 -0
  91. package/dist/cli/commands/migrate.d.ts.map +1 -1
  92. package/dist/cli/commands/migrate.js +423 -0
  93. package/dist/cli/commands/onboard.js +403 -0
  94. package/dist/cli/commands/pinned-upgrade.js +191 -0
  95. package/dist/cli/commands/update.js +194 -0
  96. package/dist/cli/commands/vendor.js +217 -0
  97. package/dist/cli/conflict-check.js +104 -0
  98. package/dist/cli/debug.js +8 -0
  99. package/dist/cli/format.js +104 -0
  100. package/dist/cli/handlers/build.js +267 -0
  101. package/dist/cli/handlers/carve-apply.js +30 -0
  102. package/dist/cli/handlers/carve-bridge.js +28 -0
  103. package/dist/cli/handlers/carve-emit.js +50 -0
  104. package/dist/cli/handlers/carve-status.js +26 -0
  105. package/dist/cli/handlers/carve.js +40 -0
  106. package/dist/cli/handlers/change-set.js +46 -0
  107. package/dist/cli/handlers/components.js +730 -0
  108. package/dist/cli/handlers/dev.js +113 -0
  109. package/dist/cli/handlers/emulator.js +233 -0
  110. package/dist/cli/handlers/explain.js +54 -0
  111. package/dist/cli/handlers/fan-out.js +422 -0
  112. package/dist/cli/handlers/gate-resume.js +275 -0
  113. package/dist/cli/handlers/generate.js +84 -0
  114. package/dist/cli/handlers/graph.js +969 -0
  115. package/dist/cli/handlers/init.js +102 -0
  116. package/dist/cli/handlers/lifecycle.js +1727 -0
  117. package/dist/cli/handlers/lint.js +62 -0
  118. package/dist/cli/handlers/migrate.js +48 -0
  119. package/dist/cli/handlers/misc.js +391 -0
  120. package/dist/cli/handlers/operator.js +1162 -0
  121. package/dist/cli/handlers/override-approve.js +102 -0
  122. package/dist/cli/handlers/pr.js +503 -0
  123. package/dist/cli/handlers/promote.js +342 -0
  124. package/dist/cli/handlers/run-generate.js +206 -0
  125. package/dist/cli/handlers/run-wave.js +66 -0
  126. package/dist/cli/handlers/run.js +1191 -0
  127. package/dist/cli/handlers/scenario.js +325 -0
  128. package/dist/cli/handlers/search.js +924 -0
  129. package/dist/cli/handlers/serve.js +32 -0
  130. package/dist/cli/handlers/vendor.js +154 -0
  131. package/dist/cli/index.js +3 -0
  132. package/dist/cli/is-entry-point.js +23 -0
  133. package/dist/cli/lsp/capabilities.js +28 -0
  134. package/dist/cli/lsp/diagnostics.js +34 -0
  135. package/dist/cli/lsp/server.js +329 -0
  136. package/dist/cli/main.d.ts.map +1 -1
  137. package/dist/cli/main.js +2540 -0
  138. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  139. package/dist/cli/mcp/op-tools.js +306 -0
  140. package/dist/cli/mcp/resource-handlers.js +258 -0
  141. package/dist/cli/mcp/resources/context.js +85 -0
  142. package/dist/cli/mcp/server.js +353 -0
  143. package/dist/cli/mcp/tools/build.js +111 -0
  144. package/dist/cli/mcp/tools/composites.js +95 -0
  145. package/dist/cli/mcp/tools/explain.js +166 -0
  146. package/dist/cli/mcp/tools/import.js +49 -0
  147. package/dist/cli/mcp/tools/lint.js +41 -0
  148. package/dist/cli/mcp/tools/scaffold.js +111 -0
  149. package/dist/cli/mcp/tools/search.js +112 -0
  150. package/dist/cli/mcp/types.js +1 -0
  151. package/dist/cli/mcp/workspace-plugins.js +91 -0
  152. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  153. package/dist/cli/mcp/workspace-tools.js +564 -0
  154. package/dist/cli/mcp-config.js +70 -0
  155. package/dist/cli/plugins.js +313 -0
  156. package/dist/cli/registry.js +23 -0
  157. package/dist/cli/reporters/stylish.js +329 -0
  158. package/dist/cli/version.js +15 -0
  159. package/dist/cli/watch.js +79 -0
  160. package/dist/codegen/bound-property-types.js +82 -0
  161. package/dist/codegen/coverage.js +119 -0
  162. package/dist/codegen/docs-file-markers.js +60 -0
  163. package/dist/codegen/docs-pages.js +115 -0
  164. package/dist/codegen/docs-rule-scanning.js +164 -0
  165. package/dist/codegen/docs-rules.js +76 -0
  166. package/dist/codegen/docs-sections.js +117 -0
  167. package/dist/codegen/docs-sidebar.js +65 -0
  168. package/dist/codegen/docs-types.js +4 -0
  169. package/dist/codegen/docs.js +356 -0
  170. package/dist/codegen/fetch.js +340 -0
  171. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  172. package/dist/codegen/generate-registry.js +71 -0
  173. package/dist/codegen/generate-runtime-index.js +56 -0
  174. package/dist/codegen/generate-typescript.js +119 -0
  175. package/dist/codegen/generate.js +115 -0
  176. package/dist/codegen/json-patch.js +141 -0
  177. package/dist/codegen/json-schema-to-ts.js +344 -0
  178. package/dist/codegen/json-schema.js +246 -0
  179. package/dist/codegen/lexicon-regen.js +412 -0
  180. package/dist/codegen/naming.js +217 -0
  181. package/dist/codegen/okf-lexicon.js +245 -0
  182. package/dist/codegen/package.js +150 -0
  183. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  184. package/dist/codegen/pinned-upgrade.js +494 -0
  185. package/dist/codegen/registry.js +60 -0
  186. package/dist/codegen/rehype-base-url.mjs +68 -0
  187. package/dist/codegen/rolling-upgrade.js +217 -0
  188. package/dist/codegen/surface-snapshot.js +537 -0
  189. package/dist/codegen/testdata/postgres-tags.json +242 -0
  190. package/dist/codegen/topo-sort.js +36 -0
  191. package/dist/codegen/typecheck.js +115 -0
  192. package/dist/codegen/validate.js +200 -0
  193. package/dist/codegen/version-bump.js +35 -0
  194. package/dist/components/auto-release.js +143 -0
  195. package/dist/components/builders.js +47 -0
  196. package/dist/components/capability-plugin-loader.js +175 -0
  197. package/dist/components/capability-plugin-schema.js +46 -0
  198. package/dist/components/capability-plugin.js +99 -0
  199. package/dist/components/capability.js +60 -0
  200. package/dist/components/changed-files.js +72 -0
  201. package/dist/components/cli-support.js +427 -0
  202. package/dist/components/component.js +120 -0
  203. package/dist/components/component.schema.json +271 -0
  204. package/dist/components/config-defaults.js +130 -0
  205. package/dist/components/deploy-units.js +60 -0
  206. package/dist/components/discover.d.ts.map +1 -1
  207. package/dist/components/discover.js +189 -0
  208. package/dist/components/driver-output.js +86 -0
  209. package/dist/components/driver.js +728 -0
  210. package/dist/components/fan-out-output.js +165 -0
  211. package/dist/components/fan-out-record.js +94 -0
  212. package/dist/components/fan-out-run.js +373 -0
  213. package/dist/components/fan-out-support.js +60 -0
  214. package/dist/components/fan-out.js +273 -0
  215. package/dist/components/gate-plan.js +41 -0
  216. package/dist/components/gated-wave-pipeline.js +46 -0
  217. package/dist/components/index.js +24 -0
  218. package/dist/components/layers.js +28 -0
  219. package/dist/components/manifest-persistence.js +108 -0
  220. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  221. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  222. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  223. package/dist/components/pilots/lambda.pilot.js +52 -0
  224. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  225. package/dist/components/pilots/project.js +12 -0
  226. package/dist/components/pr-pipeline.d.ts.map +1 -1
  227. package/dist/components/pr-pipeline.js +135 -0
  228. package/dist/components/pr-run.js +363 -0
  229. package/dist/components/presets/ecs-fargate.js +72 -0
  230. package/dist/components/presets/index.js +28 -0
  231. package/dist/components/presets/lambda.js +34 -0
  232. package/dist/components/presets/single-host-compose.js +41 -0
  233. package/dist/components/promote.js +549 -0
  234. package/dist/components/registry.js +34 -0
  235. package/dist/components/run-progress.js +33 -0
  236. package/dist/components/sandbox/driver.d.ts.map +1 -1
  237. package/dist/components/sandbox/driver.js +93 -0
  238. package/dist/components/sandbox/run.js +115 -0
  239. package/dist/components/starter-plugin.js +104 -0
  240. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  241. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  242. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  243. package/dist/components/verbs/bom-writer.js +287 -0
  244. package/dist/components/verbs/build-archive.js +188 -0
  245. package/dist/components/verbs/build.js +142 -0
  246. package/dist/components/verbs/cloud-executor.js +110 -0
  247. package/dist/components/verbs/component-bom.js +125 -0
  248. package/dist/components/verbs/ensure-secret.js +50 -0
  249. package/dist/components/verbs/index.js +61 -0
  250. package/dist/components/verbs/license-policy.js +75 -0
  251. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  252. package/dist/components/verbs/process-runner.js +78 -0
  253. package/dist/components/verbs/r2-sync.js +93 -0
  254. package/dist/components/verbs/reproducibility.js +62 -0
  255. package/dist/components/verbs/run-agent.js +577 -0
  256. package/dist/components/verbs/sbom-generator.js +119 -0
  257. package/dist/components/verbs/sbom.js +97 -0
  258. package/dist/components/verbs/shell.js +32 -0
  259. package/dist/components/verbs/sign.js +221 -0
  260. package/dist/components/verbs/stub.js +28 -0
  261. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  262. package/dist/components/verbs/verify.js +112 -0
  263. package/dist/components/verbs/vex.js +131 -0
  264. package/dist/components/verbs/vuln-gate.js +152 -0
  265. package/dist/components/verbs/vuln-scan.js +288 -0
  266. package/dist/components/verbs/wait-verify.js +106 -0
  267. package/dist/components/verbs/wrangler.js +179 -0
  268. package/dist/components/wave-plan.js +102 -0
  269. package/dist/composite.d.ts +10 -2
  270. package/dist/composite.d.ts.map +1 -1
  271. package/dist/composite.js +313 -0
  272. package/dist/config-import.d.ts.map +1 -1
  273. package/dist/config-import.js +22 -0
  274. package/dist/config-sandbox.js +122 -0
  275. package/dist/config-static.js +206 -0
  276. package/dist/config.js +605 -0
  277. package/dist/content-digest.js +23 -0
  278. package/dist/declarable.js +114 -0
  279. package/dist/deep-observation.js +437 -0
  280. package/dist/detectLexicon.js +54 -0
  281. package/dist/discovery/cache.js +70 -0
  282. package/dist/discovery/collect.d.ts +2 -1
  283. package/dist/discovery/collect.d.ts.map +1 -1
  284. package/dist/discovery/collect.js +223 -0
  285. package/dist/discovery/cycles.js +95 -0
  286. package/dist/discovery/entity-wire-codec.js +391 -0
  287. package/dist/discovery/entity-wire.js +42 -0
  288. package/dist/discovery/files.js +121 -0
  289. package/dist/discovery/fold-import.d.ts.map +1 -1
  290. package/dist/discovery/fold-import.js +4073 -0
  291. package/dist/discovery/fold-rank.js +292 -0
  292. package/dist/discovery/graph.js +115 -0
  293. package/dist/discovery/host-composite.d.ts +35 -0
  294. package/dist/discovery/host-composite.d.ts.map +1 -0
  295. package/dist/discovery/host-composite.js +93 -0
  296. package/dist/discovery/import.d.ts.map +1 -1
  297. package/dist/discovery/import.js +65 -0
  298. package/dist/discovery/index.d.ts +9 -0
  299. package/dist/discovery/index.d.ts.map +1 -1
  300. package/dist/discovery/index.js +333 -0
  301. package/dist/discovery/param-deps.js +487 -0
  302. package/dist/discovery/resolve.js +39 -0
  303. package/dist/discovery/sandbox/bundle.js +214 -0
  304. package/dist/discovery/sandbox/child-errors.js +26 -0
  305. package/dist/discovery/sandbox/config-run.js +100 -0
  306. package/dist/discovery/sandbox/config-wire.js +183 -0
  307. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  308. package/dist/discovery/sandbox/driver.js +333 -0
  309. package/dist/discovery/sandbox/fork.js +229 -0
  310. package/dist/discovery/sandbox/policy-run.js +142 -0
  311. package/dist/discovery/sandbox/policy-wire.js +152 -0
  312. package/dist/discovery/sandbox/run.js +77 -0
  313. package/dist/discovery/specifier-resolve.js +320 -0
  314. package/dist/discovery/walk.js +284 -0
  315. package/dist/effect-receipt.js +340 -0
  316. package/dist/env.js +55 -0
  317. package/dist/errors.js +62 -0
  318. package/dist/fold/fold.js +1434 -0
  319. package/dist/fold/foldable-helpers.js +229 -0
  320. package/dist/fold/subset.js +696 -0
  321. package/dist/fold-provenance.js +414 -0
  322. package/dist/gate-decision.d.ts +20 -9
  323. package/dist/gate-decision.d.ts.map +1 -1
  324. package/dist/gate-decision.js +313 -0
  325. package/dist/gate-resume-run.js +154 -0
  326. package/dist/gated-waves.js +165 -0
  327. package/dist/governance.js +43 -0
  328. package/dist/graph-declared.js +45 -0
  329. package/dist/graph-detail.js +207 -0
  330. package/dist/graph-dot.js +54 -0
  331. package/dist/graph-effective.js +107 -0
  332. package/dist/graph-ir.js +623 -0
  333. package/dist/graph-layout.js +184 -0
  334. package/dist/graph-lens.js +105 -0
  335. package/dist/graph-mermaid.js +83 -0
  336. package/dist/graph-ops.js +39 -0
  337. package/dist/graph-refs.js +156 -0
  338. package/dist/held-elsewhere.js +87 -0
  339. package/dist/identity.js +251 -0
  340. package/dist/import/base-parser.js +34 -0
  341. package/dist/import/embedded.js +255 -0
  342. package/dist/import/generator.js +1 -0
  343. package/dist/import/ir-utils.js +85 -0
  344. package/dist/import/parser-options.js +45 -0
  345. package/dist/import/parser.js +1 -0
  346. package/dist/index.js +118 -0
  347. package/dist/intrinsic-interpolation.js +73 -0
  348. package/dist/intrinsic.js +31 -0
  349. package/dist/join-key.js +35 -0
  350. package/dist/kubectl-context.js +150 -0
  351. package/dist/lexicon-config.js +58 -0
  352. package/dist/lexicon-integrity.js +47 -0
  353. package/dist/lexicon-manifest.js +70 -0
  354. package/dist/lexicon-module.d.ts.map +1 -1
  355. package/dist/lexicon-module.js +241 -0
  356. package/dist/lexicon-output.js +218 -0
  357. package/dist/lexicon-plugin-helpers.js +104 -0
  358. package/dist/lexicon-schema.js +136 -0
  359. package/dist/lexicon.js +130 -0
  360. package/dist/lifecycle/affected.js +224 -0
  361. package/dist/lifecycle/assert-live.js +110 -0
  362. package/dist/lifecycle/build-ledger-store.js +160 -0
  363. package/dist/lifecycle/build-ledger.js +155 -0
  364. package/dist/lifecycle/change-set.js +356 -0
  365. package/dist/lifecycle/converge-ledger.js +161 -0
  366. package/dist/lifecycle/deep-diff.js +233 -0
  367. package/dist/lifecycle/deep-observe.js +147 -0
  368. package/dist/lifecycle/digest.js +143 -0
  369. package/dist/lifecycle/disruption.js +135 -0
  370. package/dist/lifecycle/gate-applied.js +113 -0
  371. package/dist/lifecycle/gate-audit.d.ts +69 -2
  372. package/dist/lifecycle/gate-audit.d.ts.map +1 -1
  373. package/dist/lifecycle/gate-audit.js +415 -0
  374. package/dist/lifecycle/gate-ledger-select.js +89 -0
  375. package/dist/lifecycle/gate-ledger.d.ts +24 -0
  376. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  377. package/dist/lifecycle/gate-ledger.js +201 -0
  378. package/dist/lifecycle/gate-origin.js +117 -0
  379. package/dist/lifecycle/gate-pending.js +58 -0
  380. package/dist/lifecycle/git.js +1182 -0
  381. package/dist/lifecycle/identity.js +58 -0
  382. package/dist/lifecycle/index.js +26 -0
  383. package/dist/lifecycle/lease.js +283 -0
  384. package/dist/lifecycle/ledger-port.js +1 -0
  385. package/dist/lifecycle/legacy-digest.js +91 -0
  386. package/dist/lifecycle/live-diff.js +274 -0
  387. package/dist/lifecycle/local-note.js +15 -0
  388. package/dist/lifecycle/member-ledger.js +122 -0
  389. package/dist/lifecycle/observation-baseline.js +155 -0
  390. package/dist/lifecycle/observe.js +375 -0
  391. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  392. package/dist/lifecycle/override-ledger.js +54 -0
  393. package/dist/lifecycle/plan-digest.js +110 -0
  394. package/dist/lifecycle/plan-ledger.js +129 -0
  395. package/dist/lifecycle/receipt-plan.js +192 -0
  396. package/dist/lifecycle/release-ledger.js +155 -0
  397. package/dist/lifecycle/release-read.js +64 -0
  398. package/dist/lifecycle/replay.js +193 -0
  399. package/dist/lifecycle/rollback.js +102 -0
  400. package/dist/lifecycle/run-ledger.js +183 -0
  401. package/dist/lifecycle/scenario-eval.js +204 -0
  402. package/dist/lifecycle/scenario.js +214 -0
  403. package/dist/lifecycle/snapshot.js +239 -0
  404. package/dist/lifecycle/status.js +447 -0
  405. package/dist/lifecycle/symptoms.js +117 -0
  406. package/dist/lifecycle/teardown.js +255 -0
  407. package/dist/lifecycle/types.js +1 -0
  408. package/dist/lifecycle/unobserved-gate.js +33 -0
  409. package/dist/lifecycle/wave-plans.js +68 -0
  410. package/dist/lifecycle/work-item-id.js +36 -0
  411. package/dist/lifecycle/work-lease.js +393 -0
  412. package/dist/lint/component-checks.js +87 -0
  413. package/dist/lint/config.js +483 -0
  414. package/dist/lint/declarative.js +122 -0
  415. package/dist/lint/discover.d.ts.map +1 -1
  416. package/dist/lint/discover.js +138 -0
  417. package/dist/lint/engine.js +246 -0
  418. package/dist/lint/knowledge-checks.js +64 -0
  419. package/dist/lint/named-checks.js +22 -0
  420. package/dist/lint/output-checks.js +87 -0
  421. package/dist/lint/output-docs.js +163 -0
  422. package/dist/lint/parser.js +33 -0
  423. package/dist/lint/pipeline-change-gate.js +70 -0
  424. package/dist/lint/policy-import.d.ts +1 -1
  425. package/dist/lint/policy-import.d.ts.map +1 -1
  426. package/dist/lint/policy-import.js +62 -0
  427. package/dist/lint/policy-sandbox.js +86 -0
  428. package/dist/lint/policy.js +122 -0
  429. package/dist/lint/post-synth.js +87 -0
  430. package/dist/lint/presets/relaxed.json +26 -0
  431. package/dist/lint/presets/strict.json +24 -24
  432. package/dist/lint/receipt-checks.js +83 -0
  433. package/dist/lint/rule-loader.d.ts.map +1 -1
  434. package/dist/lint/rule-loader.js +89 -0
  435. package/dist/lint/rule-registry.js +86 -0
  436. package/dist/lint/rule.js +1 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  441. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  442. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  443. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  444. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  445. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  446. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  447. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  448. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  449. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  450. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  451. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  452. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  453. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  454. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  455. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  456. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  457. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  458. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  459. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  460. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  461. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  462. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  463. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  464. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  465. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  466. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  467. package/dist/lint/rules/comp/index.js +33 -0
  468. package/dist/lint/rules/comp/support.js +129 -0
  469. package/dist/lint/rules/composite-scope.js +51 -0
  470. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  471. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  472. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  473. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  474. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  475. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  476. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  477. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  478. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  479. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  480. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  481. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  482. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  483. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  484. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  485. package/dist/lint/rules/export-required.js +115 -0
  486. package/dist/lint/rules/file-declarable-limit.js +88 -0
  487. package/dist/lint/rules/flat-declarations.js +62 -0
  488. package/dist/lint/rules/index.js +90 -0
  489. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  490. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  491. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  492. package/dist/lint/rules/no-string-ref.js +59 -0
  493. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  494. package/dist/lint/rules/no-unused-declarable.js +142 -0
  495. package/dist/lint/rules/op/index.js +28 -0
  496. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  497. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  498. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  499. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  500. package/dist/lint/rules/op/support.js +11 -0
  501. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  502. package/dist/lint/rules/property-kind.js +56 -0
  503. package/dist/lint/rules/single-concern-file.js +71 -0
  504. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  505. package/dist/lint/selectors.js +168 -0
  506. package/dist/lint/suppressions.js +129 -0
  507. package/dist/lint/typescript.js +17 -0
  508. package/dist/live-endpoint.js +113 -0
  509. package/dist/live-read-session.js +76 -0
  510. package/dist/lsp/lexicon-providers.js +163 -0
  511. package/dist/lsp/types.js +5 -0
  512. package/dist/managed-fields.js +293 -0
  513. package/dist/mcp/types.js +4 -0
  514. package/dist/notify-verify.js +0 -1
  515. package/dist/notify.js +0 -1
  516. package/dist/notify.schema.json +72 -0
  517. package/dist/observation.js +266 -0
  518. package/dist/okf-read.js +134 -0
  519. package/dist/okf.js +275 -0
  520. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  521. package/dist/op/activities/activity-contracts.d.ts +1 -1
  522. package/dist/op/activities/activity-contracts.js +313 -0
  523. package/dist/op/activities/apply.js +582 -0
  524. package/dist/op/activities/build.js +18 -0
  525. package/dist/op/activities/change-coverage.js +40 -0
  526. package/dist/op/activities/change-set.d.ts +8 -3
  527. package/dist/op/activities/change-set.d.ts.map +1 -1
  528. package/dist/op/activities/change-set.js +67 -0
  529. package/dist/op/activities/converge.js +492 -0
  530. package/dist/op/activities/decide.js +211 -0
  531. package/dist/op/activities/env-teardown.js +110 -0
  532. package/dist/op/activities/factory.js +591 -0
  533. package/dist/op/activities/forge-pull-request.js +82 -0
  534. package/dist/op/activities/gh-host.js +78 -0
  535. package/dist/op/activities/guard-validate.js +165 -0
  536. package/dist/op/activities/http-check.js +40 -0
  537. package/dist/op/activities/index.js +59 -0
  538. package/dist/op/activities/lexicon-upgrade.js +629 -0
  539. package/dist/op/activities/lifecycle.js +109 -0
  540. package/dist/op/activities/pipeline-audit.js +147 -0
  541. package/dist/op/activities/policy.js +26 -0
  542. package/dist/op/activities/predict-behaviour.js +341 -0
  543. package/dist/op/activities/propose-upgrade.js +165 -0
  544. package/dist/op/activities/reconcile.d.ts +28 -16
  545. package/dist/op/activities/reconcile.d.ts.map +1 -1
  546. package/dist/op/activities/reconcile.js +1011 -0
  547. package/dist/op/activities/shell.js +118 -0
  548. package/dist/op/activities/source-release.js +97 -0
  549. package/dist/op/activities/source-rollback.js +165 -0
  550. package/dist/op/activities/teardown.js +17 -0
  551. package/dist/op/activities/util.js +6 -0
  552. package/dist/op/activities/wait.js +51 -0
  553. package/dist/op/activities/work-evidence.js +35 -0
  554. package/dist/op/activities/workflow-audit.js +133 -0
  555. package/dist/op/activity-contract-registry.js +106 -0
  556. package/dist/op/activity-contract.js +232 -0
  557. package/dist/op/activity-failure.js +31 -0
  558. package/dist/op/activity-profiles.js +129 -0
  559. package/dist/op/activity-registry.js +105 -0
  560. package/dist/op/activity-runtime.js +28 -0
  561. package/dist/op/builders.d.ts +1 -1
  562. package/dist/op/builders.d.ts.map +1 -1
  563. package/dist/op/builders.js +801 -0
  564. package/dist/op/change-signal.js +118 -0
  565. package/dist/op/composites/apply-op.js +151 -0
  566. package/dist/op/composites/behaviour-op.js +65 -0
  567. package/dist/op/composites/converge-op.js +141 -0
  568. package/dist/op/composites/index.js +19 -0
  569. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  570. package/dist/op/composites/pipeline-audit-op.js +50 -0
  571. package/dist/op/composites/reconcile-op.js +84 -0
  572. package/dist/op/composites/watch-op.js +69 -0
  573. package/dist/op/composites/workflow-audit-op.js +57 -0
  574. package/dist/op/converge-rule.js +205 -0
  575. package/dist/op/cron.js +146 -0
  576. package/dist/op/decide-backend.js +181 -0
  577. package/dist/op/decide-config.js +68 -0
  578. package/dist/op/decide-read-inputs.js +141 -0
  579. package/dist/op/discover.d.ts.map +1 -1
  580. package/dist/op/discover.js +213 -0
  581. package/dist/op/duration.js +21 -0
  582. package/dist/op/emulator-freshness.js +80 -0
  583. package/dist/op/emulator-lifecycle.js +269 -0
  584. package/dist/op/factory.js +83 -0
  585. package/dist/op/gate-approval.js +172 -0
  586. package/dist/op/gate-name.js +86 -0
  587. package/dist/op/gate-plan-context.js +167 -0
  588. package/dist/op/gate-point-run.js +67 -0
  589. package/dist/op/gate-point.js +111 -0
  590. package/dist/op/gate-resume-plan.js +155 -0
  591. package/dist/op/gate-resume.js +31 -0
  592. package/dist/op/gate-review.js +290 -0
  593. package/dist/op/gate-run-locator.js +85 -0
  594. package/dist/op/gate-summary.js +100 -0
  595. package/dist/op/gate-wait.js +56 -0
  596. package/dist/op/gate.js +449 -0
  597. package/dist/op/generate-pipeline.js +124 -0
  598. package/dist/op/index.js +51 -0
  599. package/dist/op/lifecycle-receipt-store.js +45 -0
  600. package/dist/op/local-executor.js +1164 -0
  601. package/dist/op/local-output.js +140 -0
  602. package/dist/op/op-ir.js +317 -0
  603. package/dist/op/op-verb-class.js +131 -0
  604. package/dist/op/op-waves-notify.js +136 -0
  605. package/dist/op/op-waves-run.d.ts +1 -1
  606. package/dist/op/op-waves-run.d.ts.map +1 -1
  607. package/dist/op/op-waves-run.js +1657 -0
  608. package/dist/op/op-waves.js +409 -0
  609. package/dist/op/operator.js +743 -0
  610. package/dist/op/receipt-store.js +94 -0
  611. package/dist/op/resource.js +23 -0
  612. package/dist/op/run-context.js +28 -0
  613. package/dist/op/run-live.js +256 -0
  614. package/dist/op/runtime.js +21 -0
  615. package/dist/op/runtimes/local.js +195 -0
  616. package/dist/op/source-archive.js +131 -0
  617. package/dist/op/step-output-ref.js +397 -0
  618. package/dist/op/steward-beside.js +169 -0
  619. package/dist/op/steward-points.js +138 -0
  620. package/dist/op/steward-turn.js +59 -0
  621. package/dist/op/steward.js +317 -0
  622. package/dist/op/types.js +25 -0
  623. package/dist/op/work-lease-decl.js +81 -0
  624. package/dist/op/work-lease-run.js +393 -0
  625. package/dist/override-gate.js +284 -0
  626. package/dist/owner-chain.js +74 -0
  627. package/dist/ownership.js +92 -0
  628. package/dist/params.js +61 -0
  629. package/dist/plan-summary.js +711 -0
  630. package/dist/point-decision.js +211 -0
  631. package/dist/pr-forge.js +810 -0
  632. package/dist/pr-loop.js +203 -0
  633. package/dist/project-codegen.js +191 -0
  634. package/dist/project-root.js +74 -0
  635. package/dist/project-validation.js +50 -0
  636. package/dist/provenance.js +157 -0
  637. package/dist/pseudo-parameter.js +40 -0
  638. package/dist/reconcile.js +450 -0
  639. package/dist/resource-attributes.js +33 -0
  640. package/dist/runtime-adapter.js +77 -0
  641. package/dist/runtime.js +66 -0
  642. package/dist/secret-materialization.js +153 -0
  643. package/dist/secret-provenance.js +250 -0
  644. package/dist/serializer-walker.js +112 -0
  645. package/dist/serializer.js +1 -0
  646. package/dist/sort.js +45 -0
  647. package/dist/stack-output.js +115 -0
  648. package/dist/telemetry-attribution.js +149 -0
  649. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  650. package/dist/terraform/adopt-state.js +40 -0
  651. package/dist/terraform/aws-resources.js +384 -0
  652. package/dist/terraform/bridge.js +204 -0
  653. package/dist/terraform/carve-provider.js +155 -0
  654. package/dist/terraform/carve.js +138 -0
  655. package/dist/terraform/data-source-shape.js +57 -0
  656. package/dist/terraform/emit-source.js +36 -0
  657. package/dist/terraform/excise.js +123 -0
  658. package/dist/terraform/graduate.js +128 -0
  659. package/dist/terraform/graph.js +435 -0
  660. package/dist/terraform/hcl2json.js +60 -0
  661. package/dist/terraform/manifest.js +149 -0
  662. package/dist/terraform/parse.js +81 -0
  663. package/dist/terraform/providers/aws.js +146 -0
  664. package/dist/terraform/providers/gcp.js +294 -0
  665. package/dist/terraform/providers/index.js +17 -0
  666. package/dist/terraform/providers/kubernetes.js +253 -0
  667. package/dist/terraform/score.js +151 -0
  668. package/dist/terraform/state.js +67 -0
  669. package/dist/terraform/tier-map.js +74 -0
  670. package/dist/terraform/types.js +13 -0
  671. package/dist/terraform/unified-diff.js +132 -0
  672. package/dist/testing.js +295 -0
  673. package/dist/toml-emit.js +153 -0
  674. package/dist/toml-parse.js +355 -0
  675. package/dist/toml-utils.js +60 -0
  676. package/dist/toml.js +428 -0
  677. package/dist/ts-loader.d.ts +46 -0
  678. package/dist/ts-loader.d.ts.map +1 -0
  679. package/dist/ts-loader.js +103 -0
  680. package/dist/types.js +1 -0
  681. package/dist/utils.js +61 -0
  682. package/dist/validation.js +20 -0
  683. package/dist/vendor/js-yaml-load.js +1662 -0
  684. package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
  685. package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
  686. package/dist/workspace/__fixtures__/contract-repo.js +119 -0
  687. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  688. package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
  689. package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
  690. package/dist/workspace/__fixtures__/sessions.js +91 -0
  691. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  692. package/dist/workspace/agent-cli.js +99 -0
  693. package/dist/workspace/agent.schema.json +390 -0
  694. package/dist/workspace/answers-ledger.js +89 -0
  695. package/dist/workspace/box-cli.js +142 -0
  696. package/dist/workspace/box-factory-write.js +196 -0
  697. package/dist/workspace/box-factory-write.schema.json +342 -0
  698. package/dist/workspace/box-factory.js +88 -0
  699. package/dist/workspace/box-intent.js +126 -0
  700. package/dist/workspace/box-isolation.js +169 -0
  701. package/dist/workspace/box-listing-write.schema.json +204 -0
  702. package/dist/workspace/box-listing.js +298 -0
  703. package/dist/workspace/box-publish.js +352 -0
  704. package/dist/workspace/box-publish.schema.json +498 -0
  705. package/dist/workspace/box-services.js +39 -0
  706. package/dist/workspace/broker-protocol.js +359 -0
  707. package/dist/workspace/broker-protocol.schema.json +228 -0
  708. package/dist/workspace/change-set.schema.json +462 -0
  709. package/dist/workspace/changes-cli.js +56 -0
  710. package/dist/workspace/changes.js +446 -0
  711. package/dist/workspace/changes.schema.json +642 -0
  712. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  713. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  714. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  715. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  716. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  717. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  718. package/dist/workspace/chant-migrations.js +113 -0
  719. package/dist/workspace/check.schema.json +433 -0
  720. package/dist/workspace/checks/box-isolation.js +62 -0
  721. package/dist/workspace/checks/boxes.js +491 -0
  722. package/dist/workspace/checks/diagrams.js +104 -0
  723. package/dist/workspace/checks/generated.js +419 -0
  724. package/dist/workspace/checks/ledgers.js +212 -0
  725. package/dist/workspace/checks/links.js +191 -0
  726. package/dist/workspace/checks/live.js +100 -0
  727. package/dist/workspace/checks/pipelines.js +188 -0
  728. package/dist/workspace/checks/records.js +169 -0
  729. package/dist/workspace/checks.js +426 -0
  730. package/dist/workspace/ci-green-cli.js +125 -0
  731. package/dist/workspace/ci-green-forge.js +83 -0
  732. package/dist/workspace/ci-green-workflow.d.ts +3 -1
  733. package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
  734. package/dist/workspace/ci-green-workflow.js +202 -0
  735. package/dist/workspace/ci-green.js +325 -0
  736. package/dist/workspace/ci-last-green.schema.json +158 -0
  737. package/dist/workspace/class-data.d.ts +84 -0
  738. package/dist/workspace/class-data.d.ts.map +1 -0
  739. package/dist/workspace/class-data.js +238 -0
  740. package/dist/workspace/compose-graph.js +235 -0
  741. package/dist/workspace/compose-reports.js +146 -0
  742. package/dist/workspace/composites.js +264 -0
  743. package/dist/workspace/composites.schema.json +617 -0
  744. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  745. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  746. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  747. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  748. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  749. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  750. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  751. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  752. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  753. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  754. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  755. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  756. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  757. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  758. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  759. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  760. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  761. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  762. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  763. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  764. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  765. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  766. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  767. package/dist/workspace/conformance/broker.js +736 -0
  768. package/dist/workspace/conformance/index.js +673 -0
  769. package/dist/workspace/conformance/vitest.js +108 -0
  770. package/dist/workspace/conformance/writer.js +1080 -0
  771. package/dist/workspace/decide.js +879 -0
  772. package/dist/workspace/decision-points.schema.json +135 -135
  773. package/dist/workspace/declaration-write-cli.js +74 -0
  774. package/dist/workspace/declaration-write.js +238 -0
  775. package/dist/workspace/declaration.js +938 -0
  776. package/dist/workspace/declaration.schema.json +1413 -1413
  777. package/dist/workspace/declared-kinds.js +106 -0
  778. package/dist/workspace/environments.js +164 -0
  779. package/dist/workspace/evidence.schema.json +279 -0
  780. package/dist/workspace/export-cli.js +185 -0
  781. package/dist/workspace/export.js +499 -0
  782. package/dist/workspace/factory-rules.js +175 -0
  783. package/dist/workspace/generated-files.js +92 -0
  784. package/dist/workspace/glob.js +45 -0
  785. package/dist/workspace/graph-cache.js +352 -0
  786. package/dist/workspace/graph-cli.js +348 -0
  787. package/dist/workspace/graph.schema.json +1338 -0
  788. package/dist/workspace/identity-gate-rule.js +75 -0
  789. package/dist/workspace/identity.js +126 -0
  790. package/dist/workspace/import.js +283 -0
  791. package/dist/workspace/init.js +620 -0
  792. package/dist/workspace/intent-cli.js +263 -0
  793. package/dist/workspace/intent-joins.js +201 -0
  794. package/dist/workspace/intent-record.js +352 -0
  795. package/dist/workspace/intent-record.schema.json +864 -0
  796. package/dist/workspace/intent.js +1582 -0
  797. package/dist/workspace/intent.schema.json +2420 -0
  798. package/dist/workspace/json-edit.js +221 -0
  799. package/dist/workspace/jsonc.js +235 -0
  800. package/dist/workspace/kind-readers.js +103 -0
  801. package/dist/workspace/kinds.d.ts +3 -7
  802. package/dist/workspace/kinds.d.ts.map +1 -1
  803. package/dist/workspace/kinds.js +553 -0
  804. package/dist/workspace/lexicon-symbols.js +112 -0
  805. package/dist/workspace/lineage-adopt-cli.js +102 -0
  806. package/dist/workspace/lineage-adopt.js +360 -0
  807. package/dist/workspace/lineage-check.js +282 -0
  808. package/dist/workspace/lineage-cli.js +121 -0
  809. package/dist/workspace/lineage-hash-index.js +284 -0
  810. package/dist/workspace/lineage-init.js +507 -0
  811. package/dist/workspace/lineage-lock.js +387 -0
  812. package/dist/workspace/lineage-merge.js +45 -0
  813. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  814. package/dist/workspace/lineage-migrations.js +329 -0
  815. package/dist/workspace/lineage-provenance.js +36 -0
  816. package/dist/workspace/lineage-update.js +138 -0
  817. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  818. package/dist/workspace/lineage-upgrade.js +889 -0
  819. package/dist/workspace/lineage-vendor.js +171 -0
  820. package/dist/workspace/lineage-version.js +128 -0
  821. package/dist/workspace/lineage-versions.js +275 -0
  822. package/dist/workspace/links.js +330 -0
  823. package/dist/workspace/ls-generated.js +95 -0
  824. package/dist/workspace/ls.js +277 -0
  825. package/dist/workspace/ls.schema.json +333 -0
  826. package/dist/workspace/member-commands.js +508 -0
  827. package/dist/workspace/member-handles.js +216 -0
  828. package/dist/workspace/member-pipeline.js +258 -0
  829. package/dist/workspace/member-run.js +117 -0
  830. package/dist/workspace/member-write.schema.json +193 -0
  831. package/dist/workspace/nested-graph.js +156 -0
  832. package/dist/workspace/nesting.js +38 -0
  833. package/dist/workspace/patch.js +301 -0
  834. package/dist/workspace/patch.schema.json +321 -0
  835. package/dist/workspace/pin-cli.js +55 -0
  836. package/dist/workspace/pin-integrity.js +100 -0
  837. package/dist/workspace/plan-summary.schema.json +155 -0
  838. package/dist/workspace/point-answer.schema.json +129 -129
  839. package/dist/workspace/points-cli.js +291 -0
  840. package/dist/workspace/points-write.schema.json +660 -0
  841. package/dist/workspace/points.js +521 -0
  842. package/dist/workspace/points.schema.json +916 -0
  843. package/dist/workspace/pr-report.schema.json +108 -0
  844. package/dist/workspace/principal-classes.d.ts +4 -11
  845. package/dist/workspace/principal-classes.d.ts.map +1 -1
  846. package/dist/workspace/principal-classes.js +162 -0
  847. package/dist/workspace/reason-codes.js +326 -0
  848. package/dist/workspace/record-assets.js +151 -0
  849. package/dist/workspace/record-decided.js +105 -0
  850. package/dist/workspace/record-sessions.js +96 -0
  851. package/dist/workspace/record-source.js +114 -0
  852. package/dist/workspace/records-amend.schema.json +284 -0
  853. package/dist/workspace/records-checkout.js +76 -0
  854. package/dist/workspace/records-cli.js +707 -0
  855. package/dist/workspace/records-close.js +116 -0
  856. package/dist/workspace/records-close.schema.json +278 -0
  857. package/dist/workspace/records-new.schema.json +202 -0
  858. package/dist/workspace/records-review.schema.json +367 -0
  859. package/dist/workspace/records-since.js +317 -0
  860. package/dist/workspace/records-since.schema.json +218 -0
  861. package/dist/workspace/records-write.js +1229 -0
  862. package/dist/workspace/records.js +1345 -0
  863. package/dist/workspace/records.schema.json +604 -0
  864. package/dist/workspace/reference-kinds/app/package.json +10 -0
  865. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  866. package/dist/workspace/returns.js +303 -0
  867. package/dist/workspace/root-refusal.js +75 -0
  868. package/dist/workspace/run-statement.schema.json +622 -0
  869. package/dist/workspace/runs-cli.js +584 -0
  870. package/dist/workspace/runs-write.schema.json +994 -0
  871. package/dist/workspace/runs.js +708 -0
  872. package/dist/workspace/runs.schema.json +1257 -0
  873. package/dist/workspace/runtimes.js +76 -0
  874. package/dist/workspace/session-kinds.js +83 -0
  875. package/dist/workspace/signers.schema.json +206 -0
  876. package/dist/workspace/source-block.js +125 -0
  877. package/dist/workspace/squash.js +177 -0
  878. package/dist/workspace/status-gates.js +162 -0
  879. package/dist/workspace/status-stewards.js +330 -0
  880. package/dist/workspace/status.js +514 -0
  881. package/dist/workspace/status.schema.json +998 -0
  882. package/dist/workspace/steward-index.js +191 -0
  883. package/dist/workspace/symbols.js +188 -0
  884. package/dist/workspace/template-manifest.js +227 -0
  885. package/dist/workspace/template-pins.js +115 -0
  886. package/dist/workspace/trailer-joins.js +65 -0
  887. package/dist/workspace/trailers.js +111 -0
  888. package/dist/workspace/tree.js +136 -0
  889. package/dist/workspace/trust/attestor.js +63 -0
  890. package/dist/workspace/trust/dsse.js +108 -0
  891. package/dist/workspace/trust/evidence-cli.js +175 -0
  892. package/dist/workspace/trust/evidence.js +161 -0
  893. package/dist/workspace/trust/gate-seal.js +226 -0
  894. package/dist/workspace/trust/policy.js +190 -0
  895. package/dist/workspace/trust/provenance.js +180 -0
  896. package/dist/workspace/trust/rotation.js +298 -0
  897. package/dist/workspace/trust/run-commits.js +101 -0
  898. package/dist/workspace/trust/run-statement.js +182 -0
  899. package/dist/workspace/trust/seal.js +272 -0
  900. package/dist/workspace/trust/signers-cli.js +152 -0
  901. package/dist/workspace/trust/ssh-commit.js +178 -0
  902. package/dist/workspace/trust/test-repo.js +118 -0
  903. package/dist/workspace/trust/trust-files.js +193 -0
  904. package/dist/workspace/trust/verify-cli.js +63 -0
  905. package/dist/workspace/trust/verify.js +192 -0
  906. package/dist/workspace/which-chant.js +141 -0
  907. package/dist/workspace/wip-cli.js +95 -0
  908. package/dist/workspace/wip-write.schema.json +504 -0
  909. package/dist/workspace/wip.js +631 -0
  910. package/dist/workspace/wip.schema.json +334 -0
  911. package/dist/workspace/work-cli.js +448 -0
  912. package/dist/workspace/work-evidence.js +122 -0
  913. package/dist/workspace/work-evidence.schema.json +222 -0
  914. package/dist/workspace/work-history.schema.json +421 -0
  915. package/dist/workspace/work-lease.schema.json +246 -0
  916. package/dist/workspace/work-size.js +77 -0
  917. package/dist/workspace/work.js +283 -0
  918. package/dist/workspace/workspace-kinds.schema.json +259 -259
  919. package/dist/workspace/workspace-principals.schema.json +53 -53
  920. package/dist/workspace/write-lock-cli.js +105 -0
  921. package/dist/workspace/write-lock.js +424 -0
  922. package/dist/workspace/write-lock.schema.json +172 -0
  923. package/dist/workspace/write-scope.js +484 -0
  924. package/dist/yaml.js +459 -0
  925. package/package.json +2 -2
  926. package/src/build.ts +8 -0
  927. package/src/change-set.test.ts +48 -0
  928. package/src/change-set.ts +52 -2
  929. package/src/ci-jobs.test.ts +49 -0
  930. package/src/ci-jobs.ts +515 -0
  931. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  932. package/src/cli/commands/lint.ts +3 -0
  933. package/src/cli/commands/migrate.ts +2 -0
  934. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  935. package/src/cli/main.ts +121 -27
  936. package/src/cli/mcp/workspace-tools.ts +1 -1
  937. package/src/codegen/pinned-upgrade.ts +2 -0
  938. package/src/components/discover.ts +2 -0
  939. package/src/components/pr-pipeline.ts +3 -2
  940. package/src/components/sandbox/driver.ts +3 -1
  941. package/src/composite.ts +15 -3
  942. package/src/config-import.ts +3 -0
  943. package/src/discovery/collect.ts +15 -1
  944. package/src/discovery/fold-build-parity.test.ts +71 -0
  945. package/src/discovery/fold-import.ts +25 -127
  946. package/src/discovery/fold-project-provenance.test.ts +21 -4
  947. package/src/discovery/host-composite.ts +101 -0
  948. package/src/discovery/import.ts +2 -0
  949. package/src/discovery/index.ts +11 -1
  950. package/src/discovery/sandbox/driver.ts +3 -1
  951. package/src/gate-decision-bundle.test.ts +5 -4
  952. package/src/gate-decision-identity.test.ts +59 -6
  953. package/src/gate-decision.ts +81 -21
  954. package/src/lexicon-module.ts +3 -0
  955. package/src/lifecycle/gate-audit.test.ts +55 -1
  956. package/src/lifecycle/gate-audit.ts +116 -3
  957. package/src/lifecycle/gate-ledger.test.ts +20 -1
  958. package/src/lifecycle/gate-ledger.ts +33 -1
  959. package/src/lint/config.ts +1 -1
  960. package/src/lint/discover.ts +28 -8
  961. package/src/lint/policy-import.ts +4 -1
  962. package/src/lint/rule-loader.ts +2 -0
  963. package/src/op/activities/activity-contracts.ts +1 -1
  964. package/src/op/activities/change-set.ts +11 -3
  965. package/src/op/activities/lexicon-upgrade.test.ts +2 -0
  966. package/src/op/activities/reconcile.test.ts +62 -2
  967. package/src/op/activities/reconcile.ts +46 -22
  968. package/src/op/builders.ts +1 -1
  969. package/src/op/discover.ts +3 -0
  970. package/src/op/op-waves-run.ts +4 -3
  971. package/src/op/op-waves.test.ts +2 -0
  972. package/src/op/work-lease-run.test.ts +12 -4
  973. package/src/ts-loader.test.ts +23 -0
  974. package/src/ts-loader.ts +122 -0
  975. package/src/workspace/__fixtures__/contract-repo.ts +17 -1
  976. package/src/workspace/__fixtures__/sessions.ts +3 -3
  977. package/src/workspace/change-set.schema.json +5 -3
  978. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  979. package/src/workspace/ci-green-workflow.test.ts +4 -4
  980. package/src/workspace/ci-green-workflow.ts +5 -2
  981. package/src/workspace/class-data.test.ts +64 -0
  982. package/src/workspace/class-data.ts +236 -0
  983. package/src/workspace/declaration.ts +1 -1
  984. package/src/workspace/kinds.ts +7 -36
  985. package/src/workspace/lineage-migrations.ts +2 -0
  986. package/src/workspace/points.ts +1 -1
  987. package/src/workspace/principal-classes.ts +12 -95
  988. package/src/workspace/records-formats.test.ts +7 -2
  989. package/src/workspace/records-sessions-write.test.ts +3 -3
  990. package/src/workspace/status-contract.e2e.test.ts +37 -0
  991. package/src/workspace/status-contract.test.ts +23 -21
@@ -0,0 +1,143 @@
1
+ /**
2
+ * Auto-emit a release-ledger record from a successful `chant run --components
3
+ * <name> --env <env>` (#597, follow-up to #568/epic #551). Before this, the
4
+ * release ledger (../lifecycle/release-ledger.ts) was only populated by the
5
+ * standalone `chant components release <env>` command — a deploy that never
6
+ * called it left the ledger silently empty. This module makes recording
7
+ * happen *by construction*: the CLI's post-run step (`runOpComponents`)
8
+ * calls `maybeRecordAutoRelease` after the run reports success.
9
+ *
10
+ * Deliberately CLI-side, not driver-side or workflow-side:
11
+ * - `../components/driver.ts` stays capability-agnostic — it already
12
+ * resists per-component/per-capability branching, and "write to git"
13
+ * is exactly the kind of side effect that doesn't belong in a step
14
+ * dispatcher tests exercise against a bare `CapabilityRegistry`.
15
+ * - A ledger write is a non-idempotent git push with real-world side
16
+ * effects (network, `Date.now()`, file writes) — the kind of thing that
17
+ * belongs at the edge of a run rather than inside a step a retry may run
18
+ * a second time. It happens in the CLI, once the run has reported a
19
+ * terminal outcome.
20
+ *
21
+ * Reuses ../lifecycle/release-ledger.ts's `appendReleaseRecord` verbatim —
22
+ * this module only decides *whether* to call it and *what digest* to record,
23
+ * mirroring the field-resolution `runComponentsReleaseRecord`
24
+ * (../cli/handlers/components.ts) already does for the standalone command
25
+ * (`--git-sha` defaults to HEAD, `--run-id`/`--actor` fall back to common CI
26
+ * env vars, timestamp is a real `new Date()` taken at record time).
27
+ */
28
+ import { getHeadCommit, pushLifecycle, StaleLifecycleBranchError } from "../lifecycle/git.js";
29
+ import { appendReleaseRecord, InvalidReleaseRecordError } from "../lifecycle/release-ledger.js";
30
+ /**
31
+ * A step output that represents a *promoted* artifact — a publish-family result
32
+ * (publish-image / publish-artifact / load-image-on-host), identified by the
33
+ * location `uri` all three carry (`repo@sha256:…`, `host:…#…`, an artifact URL).
34
+ * This deliberately excludes outputs that carry only a content `digest`: e.g.
35
+ * `generate-sbom`'s `digest` is the SBOM document's own bytes, and
36
+ * `extract-config-bom` likewise *describes* an artifact rather than promoting
37
+ * one. Those must not trigger a release record (#665) — a release means "we
38
+ * promoted this by digest to a location", not "we hashed some bytes". The
39
+ * driver's own `collectComponentOutputs` stays looser (uri/digest/key) because it
40
+ * only feeds `@<component>.publish.*` wiring, where a false positive is harmless.
41
+ */
42
+ export function isPromotedArtifact(output) {
43
+ return !!output && typeof output === "object" && "uri" in output && typeof output.uri === "string";
44
+ }
45
+ /**
46
+ * Extract the artifact digest a component run promoted, by scanning its step
47
+ * records for the last {@link isPromotedArtifact promoted-artifact} output (a
48
+ * publish-family result carrying a location `uri`) and taking its `digest`, so
49
+ * a release record is only ever attempted when the run actually promoted
50
+ * something by digest. Returns undefined when no step promoted an artifact —
51
+ * e.g. a component whose deploy has no publish step, even if it ran
52
+ * `generate-sbom` (whose content `digest` is not a promotion, #665) — the
53
+ * caller treats that as "nothing to record", not an error. Used by the
54
+ * local-executor CLI path, which has the full `DriverStepRecord[]` from
55
+ * `runComponentDeploy`.
56
+ */
57
+ export function extractRunDigest(records) {
58
+ let found;
59
+ for (const record of records) {
60
+ if (record.status !== "ok")
61
+ continue;
62
+ if (isPromotedArtifact(record.output) && typeof record.output.digest === "string") {
63
+ found = record.output.digest;
64
+ }
65
+ }
66
+ return found;
67
+ }
68
+ function resolveActor(override) {
69
+ return override ?? process.env.GITHUB_ACTOR ?? process.env.GITLAB_USER_LOGIN ?? process.env.USER;
70
+ }
71
+ /**
72
+ * After a successful `chant run --components <name> --env <env>`, append
73
+ * exactly one immutable release record to the ledger and push it — or
74
+ * explain, without throwing, why it didn't. Never called for a failed run
75
+ * (`run.success` must be true before the caller invokes this at all; see
76
+ * `runOpComponents`) — a failed
77
+ * deploy writes nothing, by construction, since this function is simply
78
+ * never reached on that path.
79
+ *
80
+ * Skips (returns `{ recorded: false, reason }`, never throws for these
81
+ * expected cases):
82
+ * - `options.disabled` — the opt-out flag/config was set.
83
+ * - `run.success` false — defensive; callers should not reach here on failure.
84
+ * - no digest found in the run's records — a component with no publish step
85
+ * has nothing to bind a release record to.
86
+ * - no resolvable actor — mirrors `runComponentsReleaseRecord`'s hard
87
+ * requirement; an unattributed record defeats the ledger's purpose.
88
+ *
89
+ * Git-sha resolution failure and ledger-write failures
90
+ * (`InvalidReleaseRecordError`, `StaleLifecycleBranchError`, or any other
91
+ * error `appendReleaseRecord`/`pushLifecycle` throw) are reported as `{
92
+ * recorded: false, reason: "error", error }` rather than propagated — an
93
+ * auto-recorded ledger write is a best-effort observability side effect of a
94
+ * successful deploy; it must never turn a successful `chant run --components`
95
+ * into a failing CLI invocation. The caller should still surface the message
96
+ * as a warning.
97
+ */
98
+ export async function maybeRecordAutoRelease(run, options = {}) {
99
+ if (options.disabled) {
100
+ return { recorded: false, reason: "opted-out" };
101
+ }
102
+ if (!run.success) {
103
+ return { recorded: false, reason: "run-not-successful" };
104
+ }
105
+ const digest = run.digest ?? extractRunDigest(run.records ?? []);
106
+ if (!digest) {
107
+ return { recorded: false, reason: "no-digest", detail: `component "${run.component}" published no digest-bearing artifact` };
108
+ }
109
+ const actor = resolveActor(options.actor);
110
+ if (!actor) {
111
+ return { recorded: false, reason: "no-actor", detail: "could not resolve an actor from GITHUB_ACTOR/GITLAB_USER_LOGIN/USER" };
112
+ }
113
+ let gitSha = options.gitSha;
114
+ try {
115
+ gitSha ?? (gitSha = await getHeadCommit({ cwd: options.cwd }));
116
+ }
117
+ catch (err) {
118
+ return { recorded: false, reason: "error", error: err instanceof Error ? err.message : String(err) };
119
+ }
120
+ const timestamp = new Date().toISOString();
121
+ try {
122
+ const { commit, record } = await appendReleaseRecord({
123
+ component: run.component,
124
+ env: run.env,
125
+ digest,
126
+ gitSha,
127
+ runId: run.runId,
128
+ ...(run.runOrigin ? { runOrigin: run.runOrigin } : {}),
129
+ timestamp,
130
+ actor,
131
+ ...(run.profileOverride ? { profileOverride: run.profileOverride } : {}),
132
+ ...(run.inputDigest ? { inputDigest: run.inputDigest } : {}),
133
+ }, { cwd: options.cwd });
134
+ await pushLifecycle({ cwd: options.cwd });
135
+ return { recorded: true, commit, record };
136
+ }
137
+ catch (err) {
138
+ if (err instanceof InvalidReleaseRecordError || err instanceof StaleLifecycleBranchError) {
139
+ return { recorded: false, reason: "error", error: err.message };
140
+ }
141
+ return { recorded: false, reason: "error", error: err instanceof Error ? err.message : String(err) };
142
+ }
143
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Typed step-builder API (#658) — ergonomic sugar over the kind-literal
3
+ * `Step`/`BuildSpec` contract. `phase("Verify", [healthGate({ path })])`
4
+ * is exactly `phase("Verify", [{ kind: "health-gate", path }])`, but
5
+ * with per-verb argument checking and autocomplete from each capability's own
6
+ * `Input` type. Core exports the agnostic verbs' builders; a lexicon exports
7
+ * its own (e.g. the aws lexicon's `cfnDeploy`, reusing the exported `step`).
8
+ *
9
+ * These are pure projections: a builder returns the same kind-literal the
10
+ * driver dispatches on (see ./component.ts's `Step`), so the JSON contract
11
+ * (component.schema.json) stays authoritative and a hand-written or
12
+ * non-chant-authored component keeps working. The runtime `Capability`
13
+ * objects live under `*Capability` names (./verbs/*), registered by `.kind`.
14
+ */
15
+ /**
16
+ * Build a `(input) => Step` for one deploy verb: tags the input with its
17
+ * `kind`. Exported so a lexicon's capability plugin (e.g. the aws lexicon,
18
+ * which owns the `cfn-deploy`/`emr-*`/… builders) can offer the same typed
19
+ * sugar for its own verbs without re-implementing this projection.
20
+ */
21
+ export function step(kind) {
22
+ return (input) => ({ kind, ...input });
23
+ }
24
+ /** Build a `(input) => BuildSpec` for one build verb (the `build` field, not `deploy`). */
25
+ function buildSpec(kind) {
26
+ return (input) => ({ kind, ...input });
27
+ }
28
+ // ── build family → BuildSpec (the component's `build` field) ─────────────────
29
+ export const dockerBuild = buildSpec("docker-build");
30
+ export const zipPackage = buildSpec("zip-package");
31
+ export const jvmBuild = buildSpec("jvm-build");
32
+ // ── sbom ─────────────────────────────────────────────────────────────────────
33
+ export const generateSbom = step("generate-sbom");
34
+ // ── supply-chain security / policy ───────────────────────────────────────────
35
+ export const sign = step("sign");
36
+ export const attestProvenance = step("attest-provenance");
37
+ export const verify = step("verify");
38
+ export const scanVulnerabilities = step("scan-vulnerabilities");
39
+ export const vulnGate = step("vuln-gate");
40
+ // ── wait / verify (agnostic) ─────────────────────────────────────────────────
41
+ // The cloud-specific waits (`wait-for-stack`/`wait-steady-state`/`wait-job`)
42
+ // ship as builders from the aws lexicon, alongside their capabilities.
43
+ export const waitClusterHealthy = step("wait-cluster-healthy");
44
+ export const waitEndpoint = step("wait-endpoint");
45
+ export const healthGate = step("health-gate");
46
+ // ── escape hatch ─────────────────────────────────────────────────────────────
47
+ export const shell = step("shell");
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Discovery + loading for capability plugins — the capability-side analogue
3
+ * of ../cli/plugins.ts's `loadPlugin`/`loadPlugins` for lexicons.
4
+ *
5
+ * Naming convention mirrors lexicons exactly, substituting "capability" for
6
+ * "lexicon": a capability plugin package is
7
+ * `@intentius/chant-capability-<name>` and is expected to export a value
8
+ * satisfying `CapabilityPlugin` (./capability-plugin.ts), detected at
9
+ * runtime with `isCapabilityPlugin` — the same dynamic-import + shape-guard
10
+ * strategy `loadPlugin` uses for `@intentius/chant-lexicon-<name>`.
11
+ *
12
+ * `buildCapabilityRegistry` is the Phase 2 replacement for Phase 1's
13
+ * `createCapabilityRegistry` (./registry.ts): it always loads the built-in
14
+ * `starterCapabilityPlugin` (./starter-plugin.ts) first — preserving every
15
+ * Phase 1 kind with zero behavior change — then loads any additional
16
+ * requested plugin packages on top, registering every capability they
17
+ * contribute into one `CapabilityRegistry` the driver resolves verbs
18
+ * through. Duplicate `kind` registration across plugins throws (via
19
+ * `CapabilityRegistry.register`'s existing guard), the same hard-conflict
20
+ * discipline `checkConflicts` (../cli/conflict-check.ts) applies to
21
+ * duplicate lexicon rule IDs.
22
+ */
23
+ import { CapabilityRegistry } from "./capability.js";
24
+ import { lexiconModulePath, importLexiconPackage } from "../lexicon-module.js";
25
+ import { isCapabilityPlugin } from "./capability-plugin.js";
26
+ import { starterCapabilityPlugin } from "./starter-plugin.js";
27
+ /** Thrown when a dynamically-imported capability package does not satisfy `CapabilityPlugin` — the "malformed capability package" case #559 asks doctor/validation to detect. */
28
+ export class MalformedCapabilityPluginError extends Error {
29
+ constructor(packageName, reason) {
30
+ super(`capability plugin package "${packageName}" is malformed: ${reason}`);
31
+ this.packageName = packageName;
32
+ this.name = "MalformedCapabilityPluginError";
33
+ }
34
+ }
35
+ /** Thrown when two loaded capability plugins register the same `kind` — mirrors the lexicon loader's hard rule-ID conflict. */
36
+ export class DuplicateCapabilityKindError extends Error {
37
+ constructor(kind, plugins) {
38
+ super(`capability "${kind}" is registered by more than one plugin: ${plugins.join(", ")}`);
39
+ this.kind = kind;
40
+ this.plugins = plugins;
41
+ this.name = "DuplicateCapabilityKindError";
42
+ }
43
+ }
44
+ /**
45
+ * Dynamically import and validate a single capability plugin package by
46
+ * name. Mirrors ../cli/plugins.ts's `loadPlugin` for lexicons: imports
47
+ * `@intentius/chant-capability-{name}`, scans its exports for a value
48
+ * satisfying `isCapabilityPlugin`, and throws a descriptive
49
+ * `MalformedCapabilityPluginError` if the package exists but exports nothing
50
+ * usable (the malformed-package case), or the original import error if the
51
+ * package cannot be found at all.
52
+ */
53
+ export async function loadCapabilityPlugin(name) {
54
+ const packageName = `@intentius/chant-capability-${name}`;
55
+ let mod;
56
+ try {
57
+ mod = (await importLexiconPackage(packageName));
58
+ }
59
+ catch (err) {
60
+ throw new Error(`capability plugin package "${packageName}" could not be loaded: ${err instanceof Error ? err.message : String(err)}`);
61
+ }
62
+ for (const value of Object.values(mod)) {
63
+ if (isCapabilityPlugin(value)) {
64
+ return value;
65
+ }
66
+ }
67
+ throw new MalformedCapabilityPluginError(packageName, `does not export a CapabilityPlugin (expected an export with string "name", string "version", and a "capabilities" function)`);
68
+ }
69
+ /**
70
+ * Load and initialize multiple named capability plugins, in order. Calls
71
+ * `init()` on each plugin if present — mirrors `loadPlugins`'s lexicon
72
+ * `init()` hook.
73
+ */
74
+ export async function loadCapabilityPlugins(names) {
75
+ const plugins = [];
76
+ for (const name of names) {
77
+ const plugin = await loadCapabilityPlugin(name);
78
+ if (plugin.init) {
79
+ await plugin.init();
80
+ }
81
+ plugins.push(plugin);
82
+ }
83
+ return plugins;
84
+ }
85
+ /**
86
+ * Load the capability plugin a *lexicon* package contributes, if any. A cloud
87
+ * lexicon (`@intentius/chant-lexicon-<name>`) is the natural home for that
88
+ * cloud's operational leaves (`cfn-deploy`, `emr-*`, …) — the same seam that
89
+ * already carries the lexicon's synthesis, `describeResources`, and ownership
90
+ * markers (docs/components/cloud-boundary). So when a project declares
91
+ * `lexicons: ["aws"]`, its aws leaves come along automatically: this imports
92
+ * the lexicon package and returns the first export satisfying
93
+ * `isCapabilityPlugin`.
94
+ *
95
+ * Tolerant by design — a lexicon that contributes *no* capabilities (most do
96
+ * not yet) simply returns `null` rather than throwing, unlike
97
+ * `loadCapabilityPlugin`'s strict `@intentius/chant-capability-<name>` contract
98
+ * where the package's whole reason to exist is the plugin.
99
+ */
100
+ export async function loadCapabilityPluginFromLexicon(name) {
101
+ // chant #2520 — a lexicon declared by module path is imported from that path.
102
+ const packageName = lexiconModulePath(name) ?? `@intentius/chant-lexicon-${name}`;
103
+ let mod;
104
+ try {
105
+ mod = (await importLexiconPackage(packageName));
106
+ }
107
+ catch {
108
+ return null; // lexicon not installed / not resolvable here — nothing to contribute.
109
+ }
110
+ for (const value of Object.values(mod)) {
111
+ if (isCapabilityPlugin(value))
112
+ return value;
113
+ }
114
+ return null; // lexicon present but contributes no capability plugin.
115
+ }
116
+ /** Load the capability plugins contributed by the given lexicons (skipping those that contribute none), initializing each. */
117
+ export async function loadCapabilityPluginsFromLexicons(names) {
118
+ const plugins = [];
119
+ for (const name of names) {
120
+ const plugin = await loadCapabilityPluginFromLexicon(name);
121
+ if (!plugin)
122
+ continue;
123
+ if (plugin.init)
124
+ await plugin.init();
125
+ plugins.push(plugin);
126
+ }
127
+ return plugins;
128
+ }
129
+ /**
130
+ * Register every capability every plugin contributes into one registry, in
131
+ * plugin order. Throws `DuplicateCapabilityKindError` if two plugins
132
+ * register the same `kind` (via a pre-check, so the error names every
133
+ * offending plugin rather than surfacing only the second registration
134
+ * attempt's generic `CapabilityRegistry.register` message).
135
+ */
136
+ export function registerCapabilityPlugins(registry, plugins) {
137
+ const owners = new Map();
138
+ for (const plugin of plugins) {
139
+ for (const capability of plugin.capabilities()) {
140
+ const existing = owners.get(capability.kind) ?? [];
141
+ existing.push(plugin.name);
142
+ owners.set(capability.kind, existing);
143
+ }
144
+ }
145
+ for (const [kind, pluginNames] of owners) {
146
+ if (pluginNames.length > 1) {
147
+ throw new DuplicateCapabilityKindError(kind, pluginNames);
148
+ }
149
+ }
150
+ for (const plugin of plugins) {
151
+ for (const capability of plugin.capabilities()) {
152
+ registry.register(capability);
153
+ }
154
+ }
155
+ return registry;
156
+ }
157
+ /**
158
+ * Build a `CapabilityRegistry` through the Phase 2 plugin contract: always
159
+ * registers the built-in `starterCapabilityPlugin` first (preserving every
160
+ * Phase 1 `kind` — see ./starter-plugin.ts), then loads and registers any
161
+ * additional named plugin packages. This is the Phase 2 entry point;
162
+ * `createCapabilityRegistry` (./registry.ts) remains available and now
163
+ * delegates to this same starter plugin, so existing Phase 1 callers (and
164
+ * the pilots) are unaffected.
165
+ */
166
+ export async function buildCapabilityRegistry(options = {}) {
167
+ const registry = new CapabilityRegistry();
168
+ const plugins = [];
169
+ if (options.includeStarter !== false) {
170
+ plugins.push(starterCapabilityPlugin);
171
+ }
172
+ plugins.push(...(await loadCapabilityPluginsFromLexicons(options.lexicons ?? [])));
173
+ plugins.push(...(await loadCapabilityPlugins(options.plugins ?? [])));
174
+ return registerCapabilityPlugins(registry, plugins);
175
+ }
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Zod schema + validation for `CapabilityManifest` (./capability-plugin.ts) —
3
+ * the capability-side analogue of ../lexicon-schema.ts's
4
+ * `LexiconManifestSchema`/`validateManifest`. Used to detect a malformed
5
+ * capability package's manifest (#559 acceptance criteria: "Doctor/validation
6
+ * covers a malformed capability package") with the same descriptive-error
7
+ * shape lexicon manifest validation uses.
8
+ */
9
+ import { z } from "zod";
10
+ const semverRegex = /^\d+\.\d+\.\d+(-[a-zA-Z0-9.]+)?(\+[a-zA-Z0-9.]+)?$/;
11
+ export const CapabilityManifestSchema = z.object({
12
+ name: z.string().min(1, "manifest name must not be empty"),
13
+ version: z.string().regex(semverRegex, "version must be valid semver (X.Y.Z)"),
14
+ chantVersion: z.string().optional(),
15
+ kinds: z.array(z.string().min(1)).optional(),
16
+ });
17
+ /**
18
+ * Validate a capability manifest from unknown input (object or JSON string).
19
+ * Throws a descriptive error on invalid input — mirrors
20
+ * ../lexicon-schema.ts's `validateManifest`.
21
+ */
22
+ export function validateCapabilityManifest(data) {
23
+ if (data === null || data === undefined) {
24
+ throw new Error("capability manifest data is empty");
25
+ }
26
+ if (typeof data === "string") {
27
+ try {
28
+ data = JSON.parse(data);
29
+ }
30
+ catch (err) {
31
+ const msg = err instanceof SyntaxError ? err.message : String(err);
32
+ throw new Error(`invalid JSON in capability manifest: ${msg}`);
33
+ }
34
+ }
35
+ if (typeof data !== "object" || data === null || Array.isArray(data)) {
36
+ throw new Error("capability manifest must be a JSON object");
37
+ }
38
+ const result = CapabilityManifestSchema.safeParse(data);
39
+ if (!result.success) {
40
+ const issue = result.error.issues[0];
41
+ const path = issue.path.length > 0 ? issue.path.join(".") : undefined;
42
+ const prefix = path ? `capability manifest field ${path}` : "capability manifest";
43
+ throw new Error(`${prefix}: ${issue.message}`);
44
+ }
45
+ return result.data;
46
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Capability plugin contract — Phase 2 (#559, epic #551).
3
+ *
4
+ * Promotes the Phase 1 capability registry convention
5
+ * (`createCapabilityRegistry`/`STARTER_VERB_FAMILIES`, ./registry.ts) to a
6
+ * first-class chant plugin contract, mirroring the lexicon plugin contract
7
+ * (../lexicon.ts, ../cli/plugins.ts) so capabilities become typed,
8
+ * discoverable packages resolved by `kind`, the same way lexicons are
9
+ * discovered and resolved by resource type.
10
+ *
11
+ * Shape parity with `LexiconPlugin` (../lexicon.ts):
12
+ * - `name`/`version` mirror `LexiconManifest.name`/`.version`.
13
+ * - `capabilities()` is the required lifecycle method (like a lexicon's
14
+ * `serializer`/`generate`/`validate`) every capability package must
15
+ * implement — it returns the typed `Capability` instances this package
16
+ * contributes, registered by `kind` the same way a lexicon's resource
17
+ * types are registered by `resourceType`.
18
+ * - `families()`, `init()` are optional extensions, mirroring
19
+ * `LexiconPlugin`'s optional `lintRules`/`init`/etc.
20
+ * - `isCapabilityPlugin` is the runtime type guard `loadCapabilityPlugin`
21
+ * (./capability-plugin-loader.ts) uses to validate a dynamically-imported
22
+ * package before trusting it — the same defensive shape check
23
+ * `isLexiconPlugin` performs for lexicons.
24
+ *
25
+ * The starter verb set (./registry.ts) becomes the built-in, always-loaded
26
+ * plugin (`starterCapabilityPlugin`, ./starter-plugin.ts) under this same
27
+ * contract — see that module's docstring for the Phase 1 -> Phase 2
28
+ * migration path and the "no behavior change" guarantee.
29
+ */
30
+ import { readFileSync } from "node:fs";
31
+ import { dirname, join } from "node:path";
32
+ import { fileURLToPath } from "node:url";
33
+ /**
34
+ * Type guard to check if a value is a `CapabilityPlugin`. Checks for the
35
+ * required `name`/`version`/`capabilities` shape, the same defensive check
36
+ * `isLexiconPlugin` (../lexicon.ts) performs before a dynamically-imported
37
+ * package is trusted and registered. This is also chant's detector for a
38
+ * *malformed* capability package (#559 acceptance criteria): a package
39
+ * missing any of these fails the guard and is rejected by the loader with a
40
+ * descriptive error rather than registered half-working.
41
+ */
42
+ export function isCapabilityPlugin(value) {
43
+ if (typeof value !== "object" ||
44
+ value === null ||
45
+ !("name" in value) ||
46
+ typeof value.name !== "string" ||
47
+ !("version" in value) ||
48
+ typeof value.version !== "string") {
49
+ return false;
50
+ }
51
+ const obj = value;
52
+ return typeof obj.capabilities === "function";
53
+ }
54
+ /**
55
+ * The calling module's own package version, read from the nearest
56
+ * `package.json` above it (chant #1505).
57
+ *
58
+ * `CapabilityPlugin.version` documents itself as the plugin package's semver,
59
+ * but chant's packages release in lockstep, so a hardcoded literal goes stale
60
+ * on every `just release` — the aws plugin shipped `"1.0.0"` from the day it
61
+ * was extracted from the starter set (#681), and the k8s plugin's authoring-
62
+ * time `"0.41.0"` was stale one release later. Walking up from the module's
63
+ * own URL survives both the `src/` (development condition) and `dist/`
64
+ * layouts, and an npm install, without any build-time stamping.
65
+ *
66
+ * Returns `"0.0.0"` when no versioned `package.json` is found — a visible
67
+ * sentinel rather than a guess; nothing gates on the field.
68
+ *
69
+ * Call it lazily (from a `get version()` accessor, as the built-in plugins
70
+ * do), not at module scope: the read touches the filesystem, and a plugin
71
+ * module must stay importable where `fs` is absent (workerd, chant #1081).
72
+ * The result is cached per module URL, so the walk happens once.
73
+ */
74
+ export function ownPackageVersion(moduleUrl) {
75
+ const cached = ownVersionCache.get(moduleUrl);
76
+ if (cached !== undefined)
77
+ return cached;
78
+ const found = findPackageVersion(moduleUrl);
79
+ ownVersionCache.set(moduleUrl, found);
80
+ return found;
81
+ }
82
+ const ownVersionCache = new Map();
83
+ function findPackageVersion(moduleUrl) {
84
+ let dir = dirname(fileURLToPath(moduleUrl));
85
+ for (;;) {
86
+ try {
87
+ const pkg = JSON.parse(readFileSync(join(dir, "package.json"), "utf-8"));
88
+ if (typeof pkg.version === "string")
89
+ return pkg.version;
90
+ }
91
+ catch {
92
+ // No package.json here (or unreadable) — keep walking up.
93
+ }
94
+ const parent = dirname(dir);
95
+ if (parent === dir)
96
+ return "0.0.0";
97
+ dir = parent;
98
+ }
99
+ }
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Capability contract — the typed leaf behavior components compose from.
3
+ *
4
+ * A capability is a verb ("docker-build", "cfn-deploy", "wait-steady-state"),
5
+ * never a noun (never named after the component that happens to use it).
6
+ * Registered once by `kind`, dispatched by the orchestrator, composed by an
7
+ * unbounded number of components. See:
8
+ * https://intentius.io/chant/components/capabilities/
9
+ *
10
+ * This module defines the interface and registry only. Verb implementations
11
+ * live under `./verbs/*` as typed stubs — no cloud calls, no side effects.
12
+ * Cloud implementations are a later phase (see epic #551, issue #554).
13
+ */
14
+ /**
15
+ * Thrown by a stub `run`/`rollback` — the verb is specified and typed but has
16
+ * no cloud implementation yet. Distinguishes "not implemented" from a runtime
17
+ * failure so callers (and tests) can assert on it specifically.
18
+ */
19
+ export class CapabilityNotImplementedError extends Error {
20
+ constructor(kind) {
21
+ super(`capability "${kind}" is not implemented`);
22
+ this.kind = kind;
23
+ this.name = "CapabilityNotImplementedError";
24
+ }
25
+ }
26
+ /**
27
+ * Resolves capabilities by `kind`. One registry instance is the composition
28
+ * root the orchestrator dispatches through; `createCapabilityRegistry` builds
29
+ * one pre-seeded with the starter verb set (see `./verbs`).
30
+ */
31
+ export class CapabilityRegistry {
32
+ constructor() {
33
+ this.capabilities = new Map();
34
+ }
35
+ /** Register a capability. Throws if `kind` is already registered — a capability is a verb, registered once. */
36
+ register(capability) {
37
+ if (this.capabilities.has(capability.kind)) {
38
+ throw new Error(`capability "${capability.kind}" is already registered`);
39
+ }
40
+ this.capabilities.set(capability.kind, capability);
41
+ return this;
42
+ }
43
+ /** Resolve a capability by `kind`. Throws a friendly error listing known kinds if absent. */
44
+ resolve(kind) {
45
+ const capability = this.capabilities.get(kind);
46
+ if (!capability) {
47
+ const known = [...this.capabilities.keys()].sort().join(", ");
48
+ throw new Error(`no capability registered for kind "${kind}" (known: ${known})`);
49
+ }
50
+ return capability;
51
+ }
52
+ /** True if a capability is registered for `kind`. */
53
+ has(kind) {
54
+ return this.capabilities.has(kind);
55
+ }
56
+ /** All registered kinds, sorted. */
57
+ kinds() {
58
+ return [...this.capabilities.keys()].sort();
59
+ }
60
+ }
@@ -0,0 +1,72 @@
1
+ /**
2
+ * The files a change touched, and the units lexicons own that those files
3
+ * belong to (#3183).
4
+ *
5
+ * `lifecycle affected` judges chant source by diffing what it builds. A unit
6
+ * that is not chant source, such as a hand-written Terraform root, never
7
+ * shows in that diff, so a lexicon that owns such units answers from the
8
+ * changed paths instead (`LexiconPlugin.changedUnits`).
9
+ */
10
+ import { execFile } from "node:child_process";
11
+ import { posix } from "node:path";
12
+ import { promisify } from "node:util";
13
+ const execFileAsync = promisify(execFile);
14
+ async function git(cwd, args) {
15
+ const { stdout } = await execFileAsync("git", args, { cwd, maxBuffer: 64 * 1024 * 1024 });
16
+ return stdout;
17
+ }
18
+ /**
19
+ * The commit a change is measured from: the merge base of `base` and `head`.
20
+ * A pull request's head that branched before `base` moved is measured from
21
+ * where it branched, so the other changes on `base` are not counted as its
22
+ * own; a merge commit's first parent is its own merge base.
23
+ */
24
+ export async function resolveMergeBase(cwd, base, head = "HEAD") {
25
+ try {
26
+ return (await git(cwd, ["merge-base", base, head])).trim();
27
+ }
28
+ catch (err) {
29
+ const detail = err.stderr?.trim();
30
+ throw new Error(`cannot find where ${head} and ${base} meet${detail ? `: ${detail}` : ""}. ` +
31
+ "Is the base fetched? A CI checkout needs the history (fetch-depth: 0, GIT_DEPTH: 0).");
32
+ }
33
+ }
34
+ /** The full commit `ref` names. */
35
+ export async function resolveCommit(cwd, ref) {
36
+ return (await git(cwd, ["rev-parse", "--verify", `${ref}^{commit}`])).trim();
37
+ }
38
+ /**
39
+ * Files changed between `base` and `head`, relative to `cwd`, with `/`
40
+ * separators. A rename counts as its old and its new path.
41
+ *
42
+ * Every changed file in the repository is listed, not only those under
43
+ * `cwd`: one outside it reads `../...`. A project in a workspace member
44
+ * (#3465) can call a module that lives in another member or beside the
45
+ * members, and a change there reaches it; `changedUnits` decides which of
46
+ * these paths matter.
47
+ */
48
+ export async function changedFilesBetween(cwd, base, head = "HEAD") {
49
+ const prefix = (await git(cwd, ["rev-parse", "--show-prefix"])).trim().replace(/\/+$/, "");
50
+ const out = await git(cwd, ["diff", "--name-only", "-z", "--no-renames", "--no-relative", base, head]);
51
+ return out
52
+ .split("\0")
53
+ .filter(Boolean)
54
+ .map((file) => {
55
+ const rel = posix.relative(prefix, file);
56
+ return rel === "" ? "." : rel;
57
+ })
58
+ .sort();
59
+ }
60
+ /** The union of every plugin's `changedUnits` answer, sorted. */
61
+ export async function lexiconChangedUnits(plugins, ctx) {
62
+ if (ctx.changedFiles.length === 0)
63
+ return [];
64
+ const units = new Set();
65
+ for (const plugin of plugins) {
66
+ if (!plugin.changedUnits)
67
+ continue;
68
+ for (const unit of await plugin.changedUnits(ctx))
69
+ units.add(unit);
70
+ }
71
+ return [...units].sort();
72
+ }