@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,110 @@
1
+ /**
2
+ * Injectable cloud I/O boundary for the *agnostic* capability implementations
3
+ * that remain in core: the `docker` build/push client and the Neo4j bolt-port
4
+ * probe. Every capability here that talks to a real tool goes through a
5
+ * `CloudExecutor` instead of shelling out directly, so production code gets a
6
+ * real, `child_process`/`net`-backed executor and tests get a
7
+ * `MockCloudExecutor` (./__tests__/mock-cloud-executor.ts) that records calls
8
+ * and returns canned results — no live docker, ever, in a test run.
9
+ *
10
+ * The AWS-specific clients (CloudFormation, ECS, Lambda, EMR, CodeDeploy, SSM
11
+ * host, S3, CloudFront, snapshot, ECR) used to live here too. They now live in
12
+ * the aws lexicon (`@intentius/chant-lexicon-aws/components`), contributed
13
+ * through the capability-plugin seam — see docs/components/cloud-boundary. The
14
+ * `docker` client stays in core because it is genuinely cloud-agnostic and
15
+ * shared: `docker-build` (agnostic) uses it here, and the aws lexicon's
16
+ * `publish-image` reuses the exported `realDocker` rather than duplicating it.
17
+ */
18
+ import { exec } from "node:child_process";
19
+ import { createConnection } from "node:net";
20
+ import { promisify } from "node:util";
21
+ import { isAbsolute, join } from "node:path";
22
+ export const execFileAsync = promisify(exec);
23
+ // ── Real executor — shells out to `docker`; used outside tests ───────────────
24
+ /** Run a shell command, capturing stdout/stderr. Internal to the docker client; the aws lexicon's executor has its own (endpoint-aware) runner. */
25
+ function run(command) {
26
+ return execFileAsync(command, { maxBuffer: 64 * 1024 * 1024 });
27
+ }
28
+ /** Shell-quote a single argument for POSIX shells (wrap in single quotes, escaping embedded ones). Internal; the shared, exported `q` lives in ./process-runner. */
29
+ function q(value) {
30
+ return `'${value.replace(/'/g, `'\\''`)}'`;
31
+ }
32
+ export const realDocker = {
33
+ async build(args) {
34
+ const parts = [`docker build`, `-t ${q(args.tag)}`];
35
+ if (args.dockerfile) {
36
+ // dockerfile is relative to `context` (its documented contract); docker's `-f` resolves a relative path against cwd, not the context dir, so join them here (chant#936).
37
+ const dockerfilePath = isAbsolute(args.dockerfile) ? args.dockerfile : join(args.context, args.dockerfile);
38
+ parts.push(`-f ${q(dockerfilePath)}`);
39
+ }
40
+ if (args.target)
41
+ parts.push(`--target ${q(args.target)}`);
42
+ for (const [k, v] of Object.entries(args.buildArgs ?? {}))
43
+ parts.push(`--build-arg ${q(`${k}=${v}`)}`);
44
+ parts.push(q(args.context));
45
+ await run(parts.join(" "));
46
+ const { stdout } = await run(`docker image inspect ${q(args.tag)} --format '{{.Id}}'`);
47
+ return { digest: stdout.trim() };
48
+ },
49
+ async save(args) {
50
+ await run(`docker save ${q(args.image)} -o ${q(args.outFile)}`);
51
+ },
52
+ async load(args) {
53
+ const { stdout } = await run(`docker load -i ${q(args.inFile)}`);
54
+ const match = stdout.match(/[Ll]oaded image(?: ID)?:\s*(\S+)/);
55
+ return { digest: match?.[1] ?? stdout.trim() };
56
+ },
57
+ async tag(args) {
58
+ await run(`docker tag ${q(args.source)} ${q(args.target)}`);
59
+ },
60
+ async push(args) {
61
+ await run(`docker push ${q(args.image)}`);
62
+ const { stdout } = await run(`docker image inspect ${q(args.image)} --format '{{index .RepoDigests 0}}'`);
63
+ return { digest: stdout.trim() };
64
+ },
65
+ async remoteDigest(image) {
66
+ const { stdout } = await run(`docker manifest inspect -v ${q(image)}`);
67
+ return stdout.trim();
68
+ },
69
+ };
70
+ const realNeo4j = {
71
+ async probe(args) {
72
+ const endpoints = args.cluster
73
+ .split(",")
74
+ .map((s) => s.trim())
75
+ .filter(Boolean);
76
+ const results = await Promise.all(endpoints.map((endpoint) => probeBoltPort(endpoint)));
77
+ return { healthyCount: results.filter(Boolean).length, total: endpoints.length };
78
+ },
79
+ };
80
+ /** Probe one `host:port` bolt endpoint by opening (and immediately closing) a TCP socket. */
81
+ function probeBoltPort(endpoint, timeoutMs = 5000) {
82
+ const [host, portStr] = endpoint.split(":");
83
+ const port = Number(portStr ?? 7687);
84
+ return new Promise((resolve) => {
85
+ const socket = createConnection({ host, port, timeout: timeoutMs });
86
+ const finish = (healthy) => {
87
+ socket.destroy();
88
+ resolve(healthy);
89
+ };
90
+ socket.once("connect", () => finish(true));
91
+ socket.once("timeout", () => finish(false));
92
+ socket.once("error", () => finish(false));
93
+ });
94
+ }
95
+ /** Build a `CloudExecutor` that shells out to the real `docker` CLI and probes real bolt ports. Never used in tests. */
96
+ export function realCloudExecutor() {
97
+ return { docker: realDocker, neo4j: realNeo4j };
98
+ }
99
+ /** Lazily-constructed process-wide default so importing a capability module never shells out at import time. */
100
+ let defaultExecutor;
101
+ /** The default `CloudExecutor` each capability factory falls back to when none is supplied. */
102
+ export function defaultCloudExecutor() {
103
+ if (!defaultExecutor)
104
+ defaultExecutor = realCloudExecutor();
105
+ return defaultExecutor;
106
+ }
107
+ /** Sleep for `ms`. Shared by every polling capability (`wait-*`) between attempts. */
108
+ export function sleep(ms) {
109
+ return new Promise((resolve) => setTimeout(resolve, ms));
110
+ }
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Component-level BOM aggregation (#614, epic #551 follow-up to #613).
3
+ *
4
+ * A component may produce more than one leaf BOM: a software SBOM
5
+ * (./sbom.ts's `generate-sbom`, over an image/jar/zip/dir) for its built
6
+ * artifact, and/or an IaC config-BOM (./config-bom.ts's `extract-config-bom`)
7
+ * for its synthesized template. Each leaf BOM already validates as its own
8
+ * standalone SPDX/CycloneDX document (#613). This module composes every leaf
9
+ * BOM a component's build archive carries into **one** component-level BOM —
10
+ * a real assembly (CycloneDX `metadata.component` + nested `components` +
11
+ * `compositions` + `dependencies`, or SPDX `documentDescribes`-equivalent
12
+ * `CONTAINS`/`DEPENDS_ON` relationships), not a re-implementation of the
13
+ * writer: `aggregateComponentBom` below reads each leaf BOM's own structural
14
+ * inventory back out (it does not re-parse the leaf's serialized bytes) and
15
+ * hands the result to ./bom-writer.ts's `writeBom`, which gained
16
+ * `BomInput.subDocuments` support for exactly this purpose.
17
+ *
18
+ * **Why not just concatenate/parse the leaf documents' bytes.** The leaf BOM
19
+ * bytes are the source of truth for each artifact independently, but this
20
+ * module needs each leaf's package list as structured data to nest it
21
+ * correctly in the assembly — reparsing SPDX/CycloneDX JSON back into
22
+ * `BomPackage[]` would be a second, format-aware reader this codebase does
23
+ * not otherwise need. Callers therefore pass each leaf's already-known
24
+ * `BomPackage[]` (what `generate-sbom`/`extract-config-bom` built before
25
+ * calling `writeBom` themselves) plus the archive entry it produced — see
26
+ * `ComponentBomLeaf` below. A caller assembling a component's archive
27
+ * end-to-end has both on hand already; nothing here re-derives them from
28
+ * scratch.
29
+ *
30
+ * **Single-artifact = 1:1, multi-artifact = a real assembly.** A component
31
+ * with exactly one leaf BOM produces a component BOM whose only "assembly"
32
+ * is itself — see `aggregateComponentBom`'s single-leaf fast path, which
33
+ * still runs through the same writer and produces a valid document, just
34
+ * with an empty `subDocuments` composition (nothing to nest). A component
35
+ * with two or more leaves gets `subDocuments` populated, the real multi-leaf
36
+ * case #614 asks for.
37
+ *
38
+ * **Release-level rollup is out of scope here** (deferred per #614's note) —
39
+ * this module aggregates *within* one component's archive, never across
40
+ * components/releases.
41
+ */
42
+ import { sbomEntries } from "./build-archive.js";
43
+ import { writeBom } from "./bom-writer.js";
44
+ import { DEFAULT_SBOM_FORMAT } from "./sbom-generator.js";
45
+ /** Tool name recorded on the aggregate document — distinct from any individual leaf's own `generator` (e.g. "syft", "chant-config-bom-extractor"), since the aggregate is produced by this module, not by whichever tool generated a leaf. */
46
+ const COMPONENT_BOM_GENERATOR = "chant-component-bom-aggregator";
47
+ /**
48
+ * Compose a component's leaf BOMs (a software SBOM and/or an IaC config-BOM,
49
+ * per `input.leaves`) into one component-level BOM via ./bom-writer.ts's
50
+ * assembly support (`BomInput.subDocuments`). Pure — no I/O, no manifest
51
+ * mutation; the caller decides whether/where to write the result to disk
52
+ * (mirroring `extract-config-bom`'s `outDir` convention) and whether to fold
53
+ * it back into the archive as its own entry.
54
+ *
55
+ * Throws if `input.leaves` is empty — aggregation over zero leaves is a
56
+ * caller bug (compose only when at least one BOM exists), not a case this
57
+ * function silently no-ops on.
58
+ */
59
+ export function aggregateComponentBom(input) {
60
+ if (input.leaves.length === 0) {
61
+ throw new Error(`aggregateComponentBom: component "${input.component}" has no leaf BOMs to aggregate — ` +
62
+ `only call this once at least one generate-sbom/extract-config-bom leaf exists`);
63
+ }
64
+ const format = input.format ?? DEFAULT_SBOM_FORMAT;
65
+ const totalPackageCount = input.leaves.reduce((sum, l) => sum + l.packages.length, 0);
66
+ // Single leaf: the component BOM *is* that leaf's BOM, structurally — no
67
+ // sub-document nesting needed, its packages become the aggregate's own
68
+ // flat package list directly (still a real, standalone valid document).
69
+ if (input.leaves.length === 1) {
70
+ const leaf = input.leaves[0];
71
+ const doc = writeBom(format, {
72
+ subjectName: input.component,
73
+ subjectId: input.manifest.manifestDigest,
74
+ packages: leaf.packages,
75
+ generator: COMPONENT_BOM_GENERATOR,
76
+ }, input.now);
77
+ return {
78
+ bom: { ...doc, packageCount: totalPackageCount, generator: COMPONENT_BOM_GENERATOR },
79
+ totalPackageCount,
80
+ leafCount: 1,
81
+ };
82
+ }
83
+ // Multi-leaf: a real assembly — each leaf becomes its own nested
84
+ // sub-document, keyed by which artifact digest it describes (its
85
+ // `subjectDigest`) so the assembly is traceable back to a specific
86
+ // BuildArchiveEntry, never flattened into one anonymous package list.
87
+ const subDocuments = input.leaves.map((leaf) => ({
88
+ subjectName: leafSubjectName(leaf),
89
+ subjectId: leaf.entry.subjectDigest ?? leaf.entry.digest,
90
+ packages: leaf.packages,
91
+ }));
92
+ const doc = writeBom(format, {
93
+ subjectName: input.component,
94
+ subjectId: input.manifest.manifestDigest,
95
+ packages: [],
96
+ generator: COMPONENT_BOM_GENERATOR,
97
+ subDocuments,
98
+ }, input.now);
99
+ return {
100
+ bom: { ...doc, packageCount: totalPackageCount, generator: COMPONENT_BOM_GENERATOR },
101
+ totalPackageCount,
102
+ leafCount: input.leaves.length,
103
+ };
104
+ }
105
+ /** Human-readable sub-document name: the leaf kind plus the archive path of the BOM entry itself, so two leaves of the same `bomKind` (unlikely but not disallowed) remain distinguishable. */
106
+ function leafSubjectName(leaf) {
107
+ const kind = leaf.entry.bomKind ?? "software";
108
+ return `${kind}:${leaf.entry.path}`;
109
+ }
110
+ // ── convenience: build leaves straight from a manifest ──────────────────────
111
+ /**
112
+ * Convenience for the common case: given a manifest that already carries
113
+ * `sbom`-kind entries (written by `generate-sbom`/`extract-config-bom`) and
114
+ * the `BomPackage[]` each one was built from (keyed by archive path, since
115
+ * that's the one stable identifier a caller has for "which leaf is this"),
116
+ * assemble the `ComponentBomLeaf[]` `aggregateComponentBom` expects. Kept
117
+ * separate from `aggregateComponentBom` itself so a caller that already has
118
+ * `ComponentBomLeaf[]` in hand (e.g. straight from the capabilities that just
119
+ * ran) can skip this lookup entirely.
120
+ */
121
+ export function componentBomLeavesFromManifest(manifest, packagesByPath) {
122
+ return sbomEntries(manifest)
123
+ .filter((entry) => packagesByPath.has(entry.path))
124
+ .map((entry) => ({ entry, packages: packagesByPath.get(entry.path) }));
125
+ }
@@ -0,0 +1,50 @@
1
+ /**
2
+ * secrets family — `ensure-secret` (#1829, epic #1365 decision 3). The
3
+ * capability surface over the one generated-once materialization engine
4
+ * (../../secret-materialization.ts); the op step builder `ensureSecret(...)`
5
+ * (../../op/builders.ts) is the other surface over the same engine.
6
+ *
7
+ * Contract (read-then-write): present means done. The verb never mints over
8
+ * an existing value and never rotates implicitly; an existing secret that
9
+ * does not match the declared key-set/metadata stops the apply with a
10
+ * `SecretContractMismatchError` naming key names and metadata keys — never
11
+ * values. There is no safe undo for minting a secret others may already have
12
+ * consumed, and un-creating it would destroy the only copy of the material —
13
+ * so `rollbackPolicy: "needs-opt-out"`: COMP003 requires a component using
14
+ * this verb to acknowledge the compensation gap explicitly.
15
+ *
16
+ * The store adapter is per-provider (#1830 is the k8s row). Core registers a
17
+ * typed stub; a provider builds the real capability with
18
+ * {@link createEnsureSecretCapability}.
19
+ */
20
+ import { CapabilityNotImplementedError } from "../capability.js";
21
+ import { ensureSecretMaterialization, defaultSecretMaterialGenerator, } from "../../secret-materialization.js";
22
+ /**
23
+ * Build the real `ensure-secret` capability over a provider's
24
+ * {@link SecretStoreAdapter}. The generator seam defaults to 32 CSPRNG bytes
25
+ * per key; the material it mints flows straight through the adapter to the
26
+ * store and is never returned, logged, or retained (see
27
+ * ../../secret-materialization.ts).
28
+ */
29
+ export function createEnsureSecretCapability(deps) {
30
+ return {
31
+ kind: "ensure-secret",
32
+ rollbackPolicy: "needs-opt-out",
33
+ async run(_ctx, input) {
34
+ return ensureSecretMaterialization(deps.store, { name: input.name, keys: input.keys, metadata: input.metadata }, deps.generator ?? defaultSecretMaterialGenerator);
35
+ },
36
+ };
37
+ }
38
+ /**
39
+ * The starter-set registration: fully typed, correct `rollbackPolicy` for
40
+ * COMP003, but no store adapter — running it throws
41
+ * `CapabilityNotImplementedError` until a provider row (#1830, k8s) wires a
42
+ * real adapter via {@link createEnsureSecretCapability}.
43
+ */
44
+ export const ensureSecretCapability = {
45
+ kind: "ensure-secret",
46
+ rollbackPolicy: "needs-opt-out",
47
+ async run() {
48
+ throw new CapabilityNotImplementedError("ensure-secret");
49
+ },
50
+ };
@@ -0,0 +1,61 @@
1
+ /**
2
+ * The starter verb set, grouped by family, per epic #551 and
3
+ * docs/components/capabilities.mdx. The pilot AWS leaves — `docker-build`,
4
+ * `publish-image`, `load-image-on-host`, `cfn-deploy`, `ecs-update-service`,
5
+ * `code-deploy`, `wait-for-stack`, `wait-steady-state`, `wait-cluster-healthy`
6
+ * — are real implementations over the injectable `CloudExecutor` (#557/#564,
7
+ * epic #551, see ./cloud-executor.ts); every other verb remains a typed stub
8
+ * (../capability.ts). `generate-sbom` (#606) is a real implementation over
9
+ * the injectable, artifact-type-keyed `SbomGenerator` (./sbom-generator.ts);
10
+ * `./lockfile-sbom-generator.ts` (#613) is a real, hermetic backend for it
11
+ * (lockfile/manifest parsing, no external tool), and `./tool-sbom-generator.ts`
12
+ * (#610) is a real, deep-scan backend for it (`syft`/`docker buildx --sbom`/
13
+ * `cyclonedx-maven`/`cdxgen`, shelling out through the injectable
14
+ * `ProcessRunner`, ./process-runner.ts). `extract-config-bom` (#613) parses a
15
+ * synthesized CloudFormation template, so it moved to the aws lexicon (#684);
16
+ * core keeps the agnostic SPDX/CycloneDX writer, ./bom-writer.ts, which both it
17
+ * and `generate-sbom` share. ./component-bom.ts
18
+ * (#614) composes a component's leaf BOMs into one component-level BOM over
19
+ * that same writer, and ./reproducibility.ts (#614) records per-artifact
20
+ * reproducibility + provenance on each `BuildArchiveEntry`. `publish-image`
21
+ * (#610) also gained a best-effort OCI-referrer attach step (`oras attach`,
22
+ * also via `ProcessRunner`) for a supplied SBOM/component BOM — see ./publish.ts.
23
+ * `sign`/`attest-provenance` (#622, ./sign.ts) are real implementations over
24
+ * the same injectable `ProcessRunner`: keyless-by-default `cosign sign`/
25
+ * `cosign attest` for signature + SLSA provenance, reusing #614's
26
+ * `ProvenanceLink` material. `verify` (#622, ./verify.ts) is the matching
27
+ * deploy-time gate — `cosign verify`/`verify-attestation` against a
28
+ * configured identity policy, mirroring ../../lint/policy.ts's `policyGate`.
29
+ * `wrangler-deploy`/`wrangler-versions-promote` (#1293, epic #1296,
30
+ * ./wrangler.ts) and `r2-sync` (#1293, ./r2-sync.ts) are the Cloudflare
31
+ * Workers apply leaves — real implementations over the same injectable
32
+ * `ProcessRunner` `sign` uses, shelling to `wrangler`/`rclone` rather than an
33
+ * AWS-shaped SDK client. `run-agent` (#1941, epic #1564 phase 1, ./run-agent.ts)
34
+ * is the typed schema + registry entry for a bounded, attested agent-turn
35
+ * capability over a fly Sprite — a typed stub for now (`run`/`rollback`
36
+ * reject with `CapabilityNotImplementedError`), `rollbackPolicy: "native"`
37
+ * declared up front; the real sprite-lifecycle implementation is #1942.
38
+ */
39
+ export * from "./build-archive.js";
40
+ export * from "./build.js";
41
+ export * from "./bom-writer.js";
42
+ export * from "./sbom-generator.js";
43
+ export * from "./sbom.js";
44
+ export * from "./lockfile-sbom-generator.js";
45
+ export * from "./tool-sbom-generator.js";
46
+ export * from "./component-bom.js";
47
+ export * from "./reproducibility.js";
48
+ export * from "./sign.js";
49
+ export * from "./verify.js";
50
+ export * from "./run-agent.js";
51
+ export * from "./wrangler.js";
52
+ export * from "./r2-sync.js";
53
+ export * from "./vuln-scan.js";
54
+ export * from "./vex.js";
55
+ export * from "./license-policy.js";
56
+ export * from "./vuln-gate.js";
57
+ export * from "./wait-verify.js";
58
+ export * from "./shell.js";
59
+ export * from "./ensure-secret.js";
60
+ export * from "./cloud-executor.js";
61
+ export * from "./process-runner.js";
@@ -0,0 +1,75 @@
1
+ /**
2
+ * License policy over an SBOM's declared licenses (#626). The SBOM already
3
+ * enumerates every component and its license; this evaluates those against an
4
+ * allow/deny list (e.g. block a copyleft license in a proprietary product).
5
+ *
6
+ * **Report-only by default.** License posture is context-dependent — GPL is a
7
+ * problem for a proprietary binary but fine for a GPL project — so the gate
8
+ * (./vuln-gate.ts) does NOT block on license violations unless a project opts
9
+ * in (`failOnLicense: true`). Extraction reads both SPDX
10
+ * (`packages[].licenseConcluded`/`licenseDeclared`) and CycloneDX
11
+ * (`components[].licenses[]`) without a spec dependency.
12
+ */
13
+ /** Extract each package's declared license from an SBOM, dispatching on media type (SPDX vs CycloneDX). Never throws on shape — a package with no license reads as `"NOASSERTION"`. */
14
+ export function extractLicenses(sbom) {
15
+ const doc = JSON.parse(sbom.bytes);
16
+ if (sbom.format === "cyclonedx" || Array.isArray(doc.components)) {
17
+ return (doc.components ?? []).map((c) => {
18
+ const first = c.licenses?.[0];
19
+ const license = first?.expression ?? first?.license?.id ?? first?.license?.name ?? "NOASSERTION";
20
+ return { package: c.name ?? "unknown", license };
21
+ });
22
+ }
23
+ return (doc.packages ?? []).map((p) => ({
24
+ package: p.name ?? "unknown",
25
+ license: p.licenseConcluded && p.licenseConcluded !== "NOASSERTION" ? p.licenseConcluded : (p.licenseDeclared ?? "NOASSERTION"),
26
+ }));
27
+ }
28
+ // ── evaluation ───────────────────────────────────────────────────────────────
29
+ /** Case-insensitive membership, so `"mit"` matches `"MIT"`. */
30
+ function includesCi(list, value) {
31
+ const v = value.toLowerCase();
32
+ return list.some((x) => x.toLowerCase() === v);
33
+ }
34
+ /**
35
+ * Split an SPDX license expression into its component license atoms, so a
36
+ * deny/allow list matches a license hidden inside an expression like
37
+ * `"GPL-3.0 OR MIT"` or `"(Apache-2.0 AND MIT)"` — an exact-string compare on
38
+ * the whole expression would miss `GPL-3.0` and let it through. Conservative:
39
+ * we only need the *set* of licenses referenced, so we split on `OR`/`AND`,
40
+ * drop parentheses, and strip any `WITH <exception>` suffix. A single license
41
+ * id returns itself unchanged.
42
+ */
43
+ export function licenseAtoms(expr) {
44
+ return expr
45
+ .replace(/[()]/g, " ")
46
+ .split(/\s+(?:OR|AND)\s+/i)
47
+ .map((a) => a.split(/\s+WITH\s+/i)[0].trim())
48
+ .filter(Boolean);
49
+ }
50
+ /**
51
+ * Evaluate an SBOM's licenses against `policy`. A package violates if ANY atom
52
+ * of its (possibly compound) SPDX license expression is in `deny`, or (when
53
+ * `allow` is set) any atom is not in `allow`. This is conservative on `OR`
54
+ * expressions — `"GPL-3.0 OR MIT"` counts as a `GPL-3.0` deny hit even though a
55
+ * consumer could choose MIT — because a policy gate should surface the presence
56
+ * of a denied license, not silently rely on the consumer picking the permissive
57
+ * branch. Packages with no declared license (`NOASSERTION`/empty) are not
58
+ * flagged — an undeclared license is not asserted to be denied.
59
+ */
60
+ export function evaluateLicensePolicy(sbom, policy) {
61
+ const out = [];
62
+ for (const { package: pkg, license } of extractLicenses(sbom)) {
63
+ if (!license || license === "NOASSERTION")
64
+ continue;
65
+ const atoms = licenseAtoms(license);
66
+ if (policy.deny && atoms.some((a) => includesCi(policy.deny, a))) {
67
+ out.push({ package: pkg, license, reason: "denied" });
68
+ continue;
69
+ }
70
+ if (policy.allow && policy.allow.length > 0 && atoms.some((a) => !includesCi(policy.allow, a))) {
71
+ out.push({ package: pkg, license, reason: "not-allowed" });
72
+ }
73
+ }
74
+ return out;
75
+ }
@@ -0,0 +1,191 @@
1
+ /**
2
+ * Hermetic lockfile/manifest-derived `SbomGenerator` (#613, epic #551 closes
3
+ * the "HERMETIC-generator half of #610" per #613's scope note). Pure
4
+ * TypeScript: reads a declared-dependency manifest already on disk (Node
5
+ * `package-lock.json`, JVM `pom.xml`) and emits a real SPDX/CycloneDX
6
+ * document via ./bom-writer.ts. No `syft`, no `docker buildx`, no
7
+ * `cyclonedx-maven`, no network — every package in the resulting BOM comes
8
+ * from parsing bytes chant already has locally.
9
+ *
10
+ * **What this backend is, and isn't.** A lockfile enumerates every declared
11
+ * (transitive-resolved) dependency at the versions actually installed, so
12
+ * the resulting SBOM is complete for **declared** dependencies — accurate
13
+ * package identity and version for everything npm/Maven resolved. It is
14
+ * **not** a container-layer scan: it cannot see OS packages baked into a base
15
+ * image, binaries copied in by a Dockerfile `COPY`/`RUN`, or anything not
16
+ * expressed as a lockfile entry. That deeper, image-layer-aware scan is
17
+ * `syft`'s job (or BuildKit's native `--sbom` attestation) and stays exactly
18
+ * where #610 already scoped it: the optional *deep* path, layered on top of
19
+ * (never replacing) this hermetic baseline. See
20
+ * docs/components/build-archive.mdx's SBOM section, updated alongside this
21
+ * change, for the customer-facing version of this distinction.
22
+ *
23
+ * Registered as `forDir`/`forZip`/`forJar` implementations (the artifact
24
+ * shapes a source-tree or packaged-but-uninspected artifact naturally maps
25
+ * to); `forImage` still throws `SbomGeneratorNotImplementedError` — an image
26
+ * SBOM needs either BuildKit's attestation or a container-layer scan, neither
27
+ * of which a lockfile read can substitute for, so this backend deliberately
28
+ * does not claim to cover it (mirrors how ./sbom-generator.ts's own
29
+ * `notImplementedSbomGenerator` prefers a loud, specific failure over a
30
+ * silently wrong answer).
31
+ */
32
+ import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
33
+ import { dirname, join } from "node:path";
34
+ import { writeBom } from "./bom-writer.js";
35
+ import { DEFAULT_SBOM_FORMAT } from "./sbom-generator.js";
36
+ import { SbomGeneratorNotImplementedError } from "./sbom-generator.js";
37
+ /**
38
+ * Parse a `package-lock.json` (v1, v2, or v3) into a flat `BomPackage[]`.
39
+ * Prefers the v2/v3 `packages` map (flat, one entry per resolved install
40
+ * location) since that's what `npm` >= 7 writes; falls back to the v1
41
+ * `dependencies` tree for older lockfiles. De-duplicates by `name@version`
42
+ * so a package appearing at multiple install paths (npm's dedup/hoisting)
43
+ * contributes one BOM entry, matching how a real scanner reports installed
44
+ * packages rather than filesystem paths.
45
+ */
46
+ export function parseNpmPackageLock(content) {
47
+ const lock = JSON.parse(content);
48
+ const seen = new Map();
49
+ const add = (name, version, deps) => {
50
+ if (!name)
51
+ return;
52
+ const key = `${name}@${version ?? ""}`;
53
+ const existing = seen.get(key);
54
+ if (existing) {
55
+ if (deps?.length)
56
+ existing.dependsOn = [...new Set([...(existing.dependsOn ?? []), ...deps])];
57
+ return;
58
+ }
59
+ seen.set(key, {
60
+ name,
61
+ version,
62
+ type: "npm",
63
+ purl: version ? `pkg:npm/${encodeURIComponent(name)}@${version}` : undefined,
64
+ dependsOn: deps?.length ? deps : undefined,
65
+ });
66
+ };
67
+ if (lock.packages) {
68
+ for (const [path, pkg] of Object.entries(lock.packages)) {
69
+ if (path === "")
70
+ continue; // the root project itself, not a dependency
71
+ const name = pkg.name ?? path.replace(/^.*node_modules\//, "");
72
+ add(name, pkg.version, pkg.dependencies ? Object.keys(pkg.dependencies) : undefined);
73
+ }
74
+ }
75
+ else if (lock.dependencies) {
76
+ for (const [name, pkg] of Object.entries(lock.dependencies)) {
77
+ add(name, pkg.version, pkg.requires ? Object.keys(pkg.requires) : undefined);
78
+ }
79
+ }
80
+ return [...seen.values()].sort((a, b) => a.name.localeCompare(b.name));
81
+ }
82
+ // ── pom.xml (Maven — cheap, declared <dependencies> only) ───────────────────
83
+ /**
84
+ * Parse the `<dependencies>` block of a `pom.xml` into a flat `BomPackage[]`.
85
+ * Deliberately minimal (#613 calls this out as "add JVM pom.xml if cheap"):
86
+ * a small tag-scoped regex walk over `<dependency>...</dependency>` blocks
87
+ * extracting `groupId`/`artifactId`/`version`, no XML DOM dependency, no
88
+ * property (`${...}`) resolution, no transitive resolution (Maven's own
89
+ * dependency-mediation graph isn't reproducible without invoking `mvn`,
90
+ * which would break the hermetic requirement). This is deliberately narrower
91
+ * than the npm parser above: it covers the common case (a flat, literal
92
+ * `<dependencies>` list) and documents its own limits rather than silently
93
+ * mis-resolving a `${property}` version or a `<dependencyManagement>`
94
+ * inheritance chain.
95
+ */
96
+ export function parsePomXml(content) {
97
+ const packages = [];
98
+ // Strip <dependencyManagement>...</dependencyManagement> first — it
99
+ // declares version *policy*, not necessarily artifacts actually used, and
100
+ // (like the real <dependencies> block) can itself contain a nested
101
+ // <dependencies> block, which a naive non-nesting-aware regex would match
102
+ // in its place. Removing it up front guarantees the subsequent
103
+ // <dependencies> match is the real, top-level one.
104
+ const withoutManagement = content.replace(/<dependencyManagement>[\s\S]*?<\/dependencyManagement>/, "");
105
+ const depsBlockMatch = withoutManagement.match(/<dependencies>([\s\S]*?)<\/dependencies>/);
106
+ if (!depsBlockMatch)
107
+ return packages;
108
+ const depBlock = depsBlockMatch[1];
109
+ const depRegex = /<dependency>([\s\S]*?)<\/dependency>/g;
110
+ let match;
111
+ while ((match = depRegex.exec(depBlock)) !== null) {
112
+ const entry = match[1];
113
+ const groupId = entry.match(/<groupId>([^<]+)<\/groupId>/)?.[1]?.trim();
114
+ const artifactId = entry.match(/<artifactId>([^<]+)<\/artifactId>/)?.[1]?.trim();
115
+ const version = entry.match(/<version>([^<]+)<\/version>/)?.[1]?.trim();
116
+ if (!groupId || !artifactId)
117
+ continue;
118
+ const name = `${groupId}:${artifactId}`;
119
+ packages.push({
120
+ name,
121
+ version,
122
+ type: "maven",
123
+ purl: version ? `pkg:maven/${encodeURIComponent(groupId)}/${encodeURIComponent(artifactId)}@${version}` : undefined,
124
+ });
125
+ }
126
+ return packages.sort((a, b) => a.name.localeCompare(b.name));
127
+ }
128
+ /** Locate the first readable lockfile/manifest under `dir` this generator knows how to parse, in preference order (npm before Maven — most chant components are Node-first). Returns `undefined` if none is found. */
129
+ function findManifest(dir) {
130
+ for (const [kind, filename] of [["npm", "package-lock.json"], ["maven", "pom.xml"]]) {
131
+ const candidate = join(dir, filename);
132
+ try {
133
+ readFileSync(candidate, "utf-8");
134
+ return { kind, path: candidate };
135
+ }
136
+ catch {
137
+ continue;
138
+ }
139
+ }
140
+ return undefined;
141
+ }
142
+ /** Default on-disk path for a generated SBOM: `<dir>/sbom.<format>.json`, matching #613's `sbom.<format>.json` naming convention. */
143
+ export function sbomOutputPath(dir, format) {
144
+ return join(dir, `sbom.${format}.json`);
145
+ }
146
+ /**
147
+ * Build a hermetic `SbomGenerator` backed by lockfile parsing. `forDir` scans
148
+ * `input.path` for a known manifest (`package-lock.json`, then `pom.xml`),
149
+ * parses it into a `BomPackage[]`, and writes both the SBOM document (via
150
+ * ./bom-writer.ts) to disk and returns it as an `SbomDocument`. `forZip`/
151
+ * `forJar` reuse the same scan against the artifact's source directory
152
+ * (the directory the archive was built from is the natural place a lockfile
153
+ * lives — the packaged bytes themselves are not re-inspected, matching this
154
+ * backend's "declared deps, not a binary scan" scope). `forImage` is not
155
+ * implemented here: an image's dependency surface includes its base layers,
156
+ * which no lockfile enumerates — see this module's doc comment.
157
+ */
158
+ export function createLockfileSbomGenerator(options = {}) {
159
+ const now = options.now ?? (() => new Date());
160
+ function generateFromDir(dir, subjectName, digest, format = DEFAULT_SBOM_FORMAT) {
161
+ const manifest = findManifest(dir);
162
+ if (!manifest) {
163
+ throw new Error(`no supported lockfile/manifest found under "${dir}" (looked for package-lock.json, pom.xml) — ` +
164
+ `the hermetic lockfile SBOM backend requires a lockfile on disk; use the deep-scan path (#610) for images with no lockfile`);
165
+ }
166
+ const content = readFileSync(manifest.path, "utf-8");
167
+ const packages = manifest.kind === "npm" ? parseNpmPackageLock(content) : parsePomXml(content);
168
+ const generatorName = manifest.kind === "npm" ? "chant-lockfile-sbom/package-lock.json" : "chant-lockfile-sbom/pom.xml";
169
+ const doc = writeBom(format, { subjectName, subjectId: digest ?? manifest.path, packages, generator: generatorName }, now);
170
+ const outDir = options.outDir ?? dir;
171
+ mkdirSync(outDir, { recursive: true });
172
+ writeFileSync(sbomOutputPath(outDir, format), doc.bytes);
173
+ return { ...doc, packageCount: packages.length, generator: generatorName };
174
+ }
175
+ return {
176
+ async forImage(_input) {
177
+ throw new SbomGeneratorNotImplementedError("forImage");
178
+ },
179
+ async forJar(input) {
180
+ return generateFromDir(dirname(input.jarPath), input.jarPath, input.digest, input.format);
181
+ },
182
+ async forZip(input) {
183
+ return generateFromDir(dirname(input.zipPath), input.zipPath, input.digest, input.format);
184
+ },
185
+ async forDir(input) {
186
+ return generateFromDir(input.path, input.path, undefined, input.format);
187
+ },
188
+ };
189
+ }
190
+ /** Process-wide hermetic lockfile-backed `SbomGenerator`, ready to inject wherever ./sbom-generator.ts's `notImplementedSbomGenerator` default previously required an explicit real backend. */
191
+ export const lockfileSbomGenerator = createLockfileSbomGenerator();