@intentius/chant 0.124.12 → 0.124.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (928) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.js +668 -0
  35. package/dist/builder.js +44 -0
  36. package/dist/cdk/advise.js +30 -0
  37. package/dist/cdk/assembly.js +122 -0
  38. package/dist/cdk/graph.js +444 -0
  39. package/dist/cdk/tier-map.js +64 -0
  40. package/dist/cdk/types.js +24 -0
  41. package/dist/change-set.js +312 -0
  42. package/dist/child-project.js +21 -0
  43. package/dist/claimed-fields.js +135 -0
  44. package/dist/cli/build-options.js +70 -0
  45. package/dist/cli/build-params-cli.js +139 -0
  46. package/dist/cli/command-group.js +123 -0
  47. package/dist/cli/commands/audit-agents.js +326 -0
  48. package/dist/cli/commands/audit.js +571 -0
  49. package/dist/cli/commands/build.js +920 -0
  50. package/dist/cli/commands/carve-apply.js +153 -0
  51. package/dist/cli/commands/carve-bridge.js +201 -0
  52. package/dist/cli/commands/carve-emit.js +332 -0
  53. package/dist/cli/commands/carve-status.js +119 -0
  54. package/dist/cli/commands/carve.js +204 -0
  55. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  56. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  57. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  58. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  59. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  60. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  61. package/dist/cli/commands/check-lexicon.js +766 -0
  62. package/dist/cli/commands/describe.js +85 -0
  63. package/dist/cli/commands/diff.js +175 -0
  64. package/dist/cli/commands/doctor.js +350 -0
  65. package/dist/cli/commands/import-agents.js +155 -0
  66. package/dist/cli/commands/import.js +670 -0
  67. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  68. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  69. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  70. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  71. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  72. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  73. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  74. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  75. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  76. package/dist/cli/commands/init-lexicon.js +172 -0
  77. package/dist/cli/commands/init.js +381 -0
  78. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  79. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  80. package/dist/cli/commands/licenses.js +125 -0
  81. package/dist/cli/commands/lint.d.ts.map +1 -1
  82. package/dist/cli/commands/lint.js +948 -0
  83. package/dist/cli/commands/list.js +63 -0
  84. package/dist/cli/commands/migrate.d.ts.map +1 -1
  85. package/dist/cli/commands/migrate.js +423 -0
  86. package/dist/cli/commands/onboard.js +403 -0
  87. package/dist/cli/commands/pinned-upgrade.js +191 -0
  88. package/dist/cli/commands/update.js +194 -0
  89. package/dist/cli/commands/vendor.js +217 -0
  90. package/dist/cli/conflict-check.js +104 -0
  91. package/dist/cli/debug.js +8 -0
  92. package/dist/cli/format.js +104 -0
  93. package/dist/cli/handlers/build.js +267 -0
  94. package/dist/cli/handlers/carve-apply.js +30 -0
  95. package/dist/cli/handlers/carve-bridge.js +28 -0
  96. package/dist/cli/handlers/carve-emit.js +50 -0
  97. package/dist/cli/handlers/carve-status.js +26 -0
  98. package/dist/cli/handlers/carve.js +40 -0
  99. package/dist/cli/handlers/change-set.js +46 -0
  100. package/dist/cli/handlers/components.js +730 -0
  101. package/dist/cli/handlers/dev.js +113 -0
  102. package/dist/cli/handlers/emulator.js +233 -0
  103. package/dist/cli/handlers/explain.js +54 -0
  104. package/dist/cli/handlers/fan-out.js +422 -0
  105. package/dist/cli/handlers/gate-resume.js +275 -0
  106. package/dist/cli/handlers/generate.js +84 -0
  107. package/dist/cli/handlers/graph.js +969 -0
  108. package/dist/cli/handlers/init.js +102 -0
  109. package/dist/cli/handlers/lifecycle.js +1727 -0
  110. package/dist/cli/handlers/lint.js +62 -0
  111. package/dist/cli/handlers/migrate.js +48 -0
  112. package/dist/cli/handlers/misc.js +391 -0
  113. package/dist/cli/handlers/operator.js +1162 -0
  114. package/dist/cli/handlers/override-approve.js +102 -0
  115. package/dist/cli/handlers/pr.js +503 -0
  116. package/dist/cli/handlers/promote.js +342 -0
  117. package/dist/cli/handlers/run-generate.js +206 -0
  118. package/dist/cli/handlers/run-wave.js +66 -0
  119. package/dist/cli/handlers/run.js +1191 -0
  120. package/dist/cli/handlers/scenario.js +325 -0
  121. package/dist/cli/handlers/search.js +924 -0
  122. package/dist/cli/handlers/serve.js +32 -0
  123. package/dist/cli/handlers/vendor.js +154 -0
  124. package/dist/cli/index.js +3 -0
  125. package/dist/cli/is-entry-point.js +23 -0
  126. package/dist/cli/lsp/capabilities.js +28 -0
  127. package/dist/cli/lsp/diagnostics.js +34 -0
  128. package/dist/cli/lsp/server.js +329 -0
  129. package/dist/cli/main.d.ts.map +1 -1
  130. package/dist/cli/main.js +2540 -0
  131. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  132. package/dist/cli/mcp/op-tools.js +306 -0
  133. package/dist/cli/mcp/resource-handlers.js +258 -0
  134. package/dist/cli/mcp/resources/context.js +85 -0
  135. package/dist/cli/mcp/server.js +353 -0
  136. package/dist/cli/mcp/tools/build.js +111 -0
  137. package/dist/cli/mcp/tools/composites.js +95 -0
  138. package/dist/cli/mcp/tools/explain.js +166 -0
  139. package/dist/cli/mcp/tools/import.js +49 -0
  140. package/dist/cli/mcp/tools/lint.js +41 -0
  141. package/dist/cli/mcp/tools/scaffold.js +111 -0
  142. package/dist/cli/mcp/tools/search.js +112 -0
  143. package/dist/cli/mcp/types.js +1 -0
  144. package/dist/cli/mcp/workspace-plugins.js +91 -0
  145. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  146. package/dist/cli/mcp/workspace-tools.js +564 -0
  147. package/dist/cli/mcp-config.js +70 -0
  148. package/dist/cli/plugins.js +313 -0
  149. package/dist/cli/registry.js +23 -0
  150. package/dist/cli/reporters/stylish.js +329 -0
  151. package/dist/cli/version.js +15 -0
  152. package/dist/cli/watch.js +79 -0
  153. package/dist/codegen/bound-property-types.js +82 -0
  154. package/dist/codegen/coverage.js +119 -0
  155. package/dist/codegen/docs-file-markers.js +60 -0
  156. package/dist/codegen/docs-pages.js +115 -0
  157. package/dist/codegen/docs-rule-scanning.js +164 -0
  158. package/dist/codegen/docs-rules.js +76 -0
  159. package/dist/codegen/docs-sections.js +117 -0
  160. package/dist/codegen/docs-sidebar.js +65 -0
  161. package/dist/codegen/docs-types.js +4 -0
  162. package/dist/codegen/docs.js +356 -0
  163. package/dist/codegen/fetch.js +340 -0
  164. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  165. package/dist/codegen/generate-registry.js +71 -0
  166. package/dist/codegen/generate-runtime-index.js +56 -0
  167. package/dist/codegen/generate-typescript.js +119 -0
  168. package/dist/codegen/generate.js +115 -0
  169. package/dist/codegen/json-patch.js +141 -0
  170. package/dist/codegen/json-schema-to-ts.js +344 -0
  171. package/dist/codegen/json-schema.js +246 -0
  172. package/dist/codegen/lexicon-regen.js +412 -0
  173. package/dist/codegen/naming.js +217 -0
  174. package/dist/codegen/okf-lexicon.js +245 -0
  175. package/dist/codegen/package.js +150 -0
  176. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  177. package/dist/codegen/pinned-upgrade.js +494 -0
  178. package/dist/codegen/registry.js +60 -0
  179. package/dist/codegen/rehype-base-url.mjs +68 -0
  180. package/dist/codegen/rolling-upgrade.js +217 -0
  181. package/dist/codegen/surface-snapshot.js +537 -0
  182. package/dist/codegen/testdata/postgres-tags.json +242 -0
  183. package/dist/codegen/topo-sort.js +36 -0
  184. package/dist/codegen/typecheck.js +115 -0
  185. package/dist/codegen/validate.js +200 -0
  186. package/dist/codegen/version-bump.js +35 -0
  187. package/dist/components/auto-release.js +143 -0
  188. package/dist/components/builders.js +47 -0
  189. package/dist/components/capability-plugin-loader.js +175 -0
  190. package/dist/components/capability-plugin-schema.js +46 -0
  191. package/dist/components/capability-plugin.js +99 -0
  192. package/dist/components/capability.js +60 -0
  193. package/dist/components/changed-files.js +72 -0
  194. package/dist/components/cli-support.js +427 -0
  195. package/dist/components/component.js +120 -0
  196. package/dist/components/component.schema.json +271 -0
  197. package/dist/components/config-defaults.js +130 -0
  198. package/dist/components/deploy-units.js +60 -0
  199. package/dist/components/discover.d.ts.map +1 -1
  200. package/dist/components/discover.js +189 -0
  201. package/dist/components/driver-output.js +86 -0
  202. package/dist/components/driver.js +728 -0
  203. package/dist/components/fan-out-output.js +165 -0
  204. package/dist/components/fan-out-record.js +94 -0
  205. package/dist/components/fan-out-run.js +373 -0
  206. package/dist/components/fan-out-support.js +60 -0
  207. package/dist/components/fan-out.js +273 -0
  208. package/dist/components/gate-plan.js +41 -0
  209. package/dist/components/gated-wave-pipeline.js +46 -0
  210. package/dist/components/index.js +24 -0
  211. package/dist/components/layers.js +28 -0
  212. package/dist/components/manifest-persistence.js +108 -0
  213. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  214. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  215. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  216. package/dist/components/pilots/lambda.pilot.js +52 -0
  217. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  218. package/dist/components/pilots/project.js +12 -0
  219. package/dist/components/pr-pipeline.js +134 -0
  220. package/dist/components/pr-run.js +363 -0
  221. package/dist/components/presets/ecs-fargate.js +72 -0
  222. package/dist/components/presets/index.js +28 -0
  223. package/dist/components/presets/lambda.js +34 -0
  224. package/dist/components/presets/single-host-compose.js +41 -0
  225. package/dist/components/promote.js +549 -0
  226. package/dist/components/registry.js +34 -0
  227. package/dist/components/run-progress.js +33 -0
  228. package/dist/components/sandbox/driver.d.ts.map +1 -1
  229. package/dist/components/sandbox/driver.js +93 -0
  230. package/dist/components/sandbox/run.js +115 -0
  231. package/dist/components/starter-plugin.js +104 -0
  232. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  233. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  234. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  235. package/dist/components/verbs/bom-writer.js +287 -0
  236. package/dist/components/verbs/build-archive.js +188 -0
  237. package/dist/components/verbs/build.js +142 -0
  238. package/dist/components/verbs/cloud-executor.js +110 -0
  239. package/dist/components/verbs/component-bom.js +125 -0
  240. package/dist/components/verbs/ensure-secret.js +50 -0
  241. package/dist/components/verbs/index.js +61 -0
  242. package/dist/components/verbs/license-policy.js +75 -0
  243. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  244. package/dist/components/verbs/process-runner.js +78 -0
  245. package/dist/components/verbs/r2-sync.js +93 -0
  246. package/dist/components/verbs/reproducibility.js +62 -0
  247. package/dist/components/verbs/run-agent.js +577 -0
  248. package/dist/components/verbs/sbom-generator.js +119 -0
  249. package/dist/components/verbs/sbom.js +97 -0
  250. package/dist/components/verbs/shell.js +32 -0
  251. package/dist/components/verbs/sign.js +221 -0
  252. package/dist/components/verbs/stub.js +28 -0
  253. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  254. package/dist/components/verbs/verify.js +112 -0
  255. package/dist/components/verbs/vex.js +131 -0
  256. package/dist/components/verbs/vuln-gate.js +152 -0
  257. package/dist/components/verbs/vuln-scan.js +288 -0
  258. package/dist/components/verbs/wait-verify.js +106 -0
  259. package/dist/components/verbs/wrangler.js +179 -0
  260. package/dist/components/wave-plan.js +102 -0
  261. package/dist/composite.js +305 -0
  262. package/dist/config-import.d.ts.map +1 -1
  263. package/dist/config-import.js +22 -0
  264. package/dist/config-sandbox.js +122 -0
  265. package/dist/config-static.js +206 -0
  266. package/dist/config.js +605 -0
  267. package/dist/content-digest.js +23 -0
  268. package/dist/declarable.js +114 -0
  269. package/dist/deep-observation.js +437 -0
  270. package/dist/detectLexicon.js +54 -0
  271. package/dist/discovery/cache.js +70 -0
  272. package/dist/discovery/collect.js +208 -0
  273. package/dist/discovery/cycles.js +95 -0
  274. package/dist/discovery/entity-wire-codec.js +391 -0
  275. package/dist/discovery/entity-wire.js +42 -0
  276. package/dist/discovery/files.js +121 -0
  277. package/dist/discovery/fold-import.d.ts.map +1 -1
  278. package/dist/discovery/fold-import.js +4178 -0
  279. package/dist/discovery/fold-rank.js +292 -0
  280. package/dist/discovery/graph.js +115 -0
  281. package/dist/discovery/import.d.ts.map +1 -1
  282. package/dist/discovery/import.js +65 -0
  283. package/dist/discovery/index.js +333 -0
  284. package/dist/discovery/param-deps.js +487 -0
  285. package/dist/discovery/resolve.js +39 -0
  286. package/dist/discovery/sandbox/bundle.js +214 -0
  287. package/dist/discovery/sandbox/child-errors.js +26 -0
  288. package/dist/discovery/sandbox/config-run.js +100 -0
  289. package/dist/discovery/sandbox/config-wire.js +183 -0
  290. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  291. package/dist/discovery/sandbox/driver.js +333 -0
  292. package/dist/discovery/sandbox/fork.js +229 -0
  293. package/dist/discovery/sandbox/policy-run.js +142 -0
  294. package/dist/discovery/sandbox/policy-wire.js +152 -0
  295. package/dist/discovery/sandbox/run.js +77 -0
  296. package/dist/discovery/specifier-resolve.js +320 -0
  297. package/dist/discovery/walk.js +284 -0
  298. package/dist/effect-receipt.js +340 -0
  299. package/dist/env.js +55 -0
  300. package/dist/errors.js +62 -0
  301. package/dist/fold/fold.js +1434 -0
  302. package/dist/fold/foldable-helpers.js +229 -0
  303. package/dist/fold/subset.js +696 -0
  304. package/dist/fold-provenance.js +414 -0
  305. package/dist/gate-decision.d.ts +36 -4
  306. package/dist/gate-decision.d.ts.map +1 -1
  307. package/dist/gate-decision.js +260 -0
  308. package/dist/gate-resume-run.js +154 -0
  309. package/dist/gated-waves.js +165 -0
  310. package/dist/governance.js +43 -0
  311. package/dist/graph-declared.js +45 -0
  312. package/dist/graph-detail.js +207 -0
  313. package/dist/graph-dot.js +54 -0
  314. package/dist/graph-effective.js +107 -0
  315. package/dist/graph-ir.js +623 -0
  316. package/dist/graph-layout.js +184 -0
  317. package/dist/graph-lens.js +105 -0
  318. package/dist/graph-mermaid.js +83 -0
  319. package/dist/graph-ops.js +39 -0
  320. package/dist/graph-refs.js +156 -0
  321. package/dist/held-elsewhere.js +87 -0
  322. package/dist/identity.js +251 -0
  323. package/dist/import/base-parser.js +34 -0
  324. package/dist/import/embedded.js +255 -0
  325. package/dist/import/generator.js +1 -0
  326. package/dist/import/ir-utils.js +85 -0
  327. package/dist/import/parser-options.js +45 -0
  328. package/dist/import/parser.js +1 -0
  329. package/dist/index.js +118 -0
  330. package/dist/intrinsic-interpolation.js +73 -0
  331. package/dist/intrinsic.js +31 -0
  332. package/dist/join-key.js +35 -0
  333. package/dist/kubectl-context.js +150 -0
  334. package/dist/lexicon-config.js +58 -0
  335. package/dist/lexicon-integrity.js +47 -0
  336. package/dist/lexicon-manifest.js +70 -0
  337. package/dist/lexicon-module.d.ts.map +1 -1
  338. package/dist/lexicon-module.js +241 -0
  339. package/dist/lexicon-output.js +218 -0
  340. package/dist/lexicon-plugin-helpers.js +104 -0
  341. package/dist/lexicon-schema.js +136 -0
  342. package/dist/lexicon.js +130 -0
  343. package/dist/lifecycle/affected.js +224 -0
  344. package/dist/lifecycle/assert-live.js +110 -0
  345. package/dist/lifecycle/build-ledger-store.js +160 -0
  346. package/dist/lifecycle/build-ledger.js +155 -0
  347. package/dist/lifecycle/change-set.js +356 -0
  348. package/dist/lifecycle/converge-ledger.js +161 -0
  349. package/dist/lifecycle/deep-diff.js +233 -0
  350. package/dist/lifecycle/deep-observe.js +147 -0
  351. package/dist/lifecycle/digest.js +143 -0
  352. package/dist/lifecycle/disruption.js +135 -0
  353. package/dist/lifecycle/gate-applied.js +113 -0
  354. package/dist/lifecycle/gate-audit.js +341 -0
  355. package/dist/lifecycle/gate-ledger-select.js +89 -0
  356. package/dist/lifecycle/gate-ledger.d.ts +8 -0
  357. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  358. package/dist/lifecycle/gate-ledger.js +193 -0
  359. package/dist/lifecycle/gate-origin.js +117 -0
  360. package/dist/lifecycle/gate-pending.js +58 -0
  361. package/dist/lifecycle/git.js +1182 -0
  362. package/dist/lifecycle/identity.js +58 -0
  363. package/dist/lifecycle/index.js +26 -0
  364. package/dist/lifecycle/lease.js +283 -0
  365. package/dist/lifecycle/ledger-port.js +1 -0
  366. package/dist/lifecycle/legacy-digest.js +91 -0
  367. package/dist/lifecycle/live-diff.js +274 -0
  368. package/dist/lifecycle/local-note.js +15 -0
  369. package/dist/lifecycle/member-ledger.js +122 -0
  370. package/dist/lifecycle/observation-baseline.js +155 -0
  371. package/dist/lifecycle/observe.js +375 -0
  372. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  373. package/dist/lifecycle/override-ledger.js +54 -0
  374. package/dist/lifecycle/plan-digest.js +110 -0
  375. package/dist/lifecycle/plan-ledger.js +129 -0
  376. package/dist/lifecycle/receipt-plan.js +192 -0
  377. package/dist/lifecycle/release-ledger.js +155 -0
  378. package/dist/lifecycle/release-read.js +64 -0
  379. package/dist/lifecycle/replay.js +193 -0
  380. package/dist/lifecycle/rollback.js +102 -0
  381. package/dist/lifecycle/run-ledger.js +183 -0
  382. package/dist/lifecycle/scenario-eval.js +204 -0
  383. package/dist/lifecycle/scenario.js +214 -0
  384. package/dist/lifecycle/snapshot.js +239 -0
  385. package/dist/lifecycle/status.js +447 -0
  386. package/dist/lifecycle/symptoms.js +117 -0
  387. package/dist/lifecycle/teardown.js +255 -0
  388. package/dist/lifecycle/types.js +1 -0
  389. package/dist/lifecycle/unobserved-gate.js +33 -0
  390. package/dist/lifecycle/wave-plans.js +68 -0
  391. package/dist/lifecycle/work-item-id.js +36 -0
  392. package/dist/lifecycle/work-lease.js +393 -0
  393. package/dist/lint/component-checks.js +87 -0
  394. package/dist/lint/config.js +483 -0
  395. package/dist/lint/declarative.js +122 -0
  396. package/dist/lint/discover.d.ts.map +1 -1
  397. package/dist/lint/discover.js +138 -0
  398. package/dist/lint/engine.js +246 -0
  399. package/dist/lint/knowledge-checks.js +64 -0
  400. package/dist/lint/named-checks.js +22 -0
  401. package/dist/lint/output-checks.js +87 -0
  402. package/dist/lint/output-docs.js +163 -0
  403. package/dist/lint/parser.js +33 -0
  404. package/dist/lint/pipeline-change-gate.js +70 -0
  405. package/dist/lint/policy-import.d.ts +1 -1
  406. package/dist/lint/policy-import.d.ts.map +1 -1
  407. package/dist/lint/policy-import.js +62 -0
  408. package/dist/lint/policy-sandbox.js +86 -0
  409. package/dist/lint/policy.js +122 -0
  410. package/dist/lint/post-synth.js +87 -0
  411. package/dist/lint/presets/relaxed.json +26 -0
  412. package/dist/lint/presets/strict.json +24 -24
  413. package/dist/lint/receipt-checks.js +83 -0
  414. package/dist/lint/rule-loader.d.ts.map +1 -1
  415. package/dist/lint/rule-loader.js +89 -0
  416. package/dist/lint/rule-registry.js +86 -0
  417. package/dist/lint/rule.js +1 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  437. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  438. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  439. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  440. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  441. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  442. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  443. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  444. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  445. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  446. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  447. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  448. package/dist/lint/rules/comp/index.js +33 -0
  449. package/dist/lint/rules/comp/support.js +129 -0
  450. package/dist/lint/rules/composite-scope.js +51 -0
  451. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  452. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  453. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  454. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  455. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  456. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  457. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  458. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  459. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  460. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  461. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  462. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  463. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  464. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  465. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  466. package/dist/lint/rules/export-required.js +115 -0
  467. package/dist/lint/rules/file-declarable-limit.js +88 -0
  468. package/dist/lint/rules/flat-declarations.js +62 -0
  469. package/dist/lint/rules/index.js +90 -0
  470. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  471. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  472. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  473. package/dist/lint/rules/no-string-ref.js +59 -0
  474. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  475. package/dist/lint/rules/no-unused-declarable.js +142 -0
  476. package/dist/lint/rules/op/index.js +28 -0
  477. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  478. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  479. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  480. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  481. package/dist/lint/rules/op/support.js +11 -0
  482. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  483. package/dist/lint/rules/property-kind.js +56 -0
  484. package/dist/lint/rules/single-concern-file.js +71 -0
  485. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  486. package/dist/lint/selectors.js +168 -0
  487. package/dist/lint/suppressions.js +129 -0
  488. package/dist/lint/typescript.js +17 -0
  489. package/dist/live-endpoint.js +113 -0
  490. package/dist/live-read-session.js +76 -0
  491. package/dist/lsp/lexicon-providers.js +163 -0
  492. package/dist/lsp/types.js +5 -0
  493. package/dist/managed-fields.js +293 -0
  494. package/dist/mcp/types.js +4 -0
  495. package/dist/notify-verify.js +0 -1
  496. package/dist/notify.js +0 -1
  497. package/dist/notify.schema.json +72 -0
  498. package/dist/observation.js +266 -0
  499. package/dist/okf-read.js +134 -0
  500. package/dist/okf.js +275 -0
  501. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  502. package/dist/op/activities/activity-contracts.js +313 -0
  503. package/dist/op/activities/apply.js +582 -0
  504. package/dist/op/activities/build.js +18 -0
  505. package/dist/op/activities/change-coverage.js +40 -0
  506. package/dist/op/activities/change-set.js +64 -0
  507. package/dist/op/activities/converge.js +492 -0
  508. package/dist/op/activities/decide.js +211 -0
  509. package/dist/op/activities/env-teardown.js +110 -0
  510. package/dist/op/activities/factory.js +591 -0
  511. package/dist/op/activities/forge-pull-request.js +82 -0
  512. package/dist/op/activities/gh-host.js +78 -0
  513. package/dist/op/activities/guard-validate.js +165 -0
  514. package/dist/op/activities/http-check.js +40 -0
  515. package/dist/op/activities/index.js +59 -0
  516. package/dist/op/activities/lexicon-upgrade.js +629 -0
  517. package/dist/op/activities/lifecycle.js +109 -0
  518. package/dist/op/activities/pipeline-audit.js +147 -0
  519. package/dist/op/activities/policy.js +26 -0
  520. package/dist/op/activities/predict-behaviour.js +341 -0
  521. package/dist/op/activities/propose-upgrade.js +165 -0
  522. package/dist/op/activities/reconcile.js +997 -0
  523. package/dist/op/activities/shell.js +118 -0
  524. package/dist/op/activities/source-release.js +97 -0
  525. package/dist/op/activities/source-rollback.js +165 -0
  526. package/dist/op/activities/teardown.js +17 -0
  527. package/dist/op/activities/util.js +6 -0
  528. package/dist/op/activities/wait.js +51 -0
  529. package/dist/op/activities/work-evidence.js +35 -0
  530. package/dist/op/activities/workflow-audit.js +133 -0
  531. package/dist/op/activity-contract-registry.js +106 -0
  532. package/dist/op/activity-contract.js +232 -0
  533. package/dist/op/activity-failure.js +31 -0
  534. package/dist/op/activity-profiles.js +129 -0
  535. package/dist/op/activity-registry.js +105 -0
  536. package/dist/op/activity-runtime.js +28 -0
  537. package/dist/op/builders.js +801 -0
  538. package/dist/op/change-signal.js +118 -0
  539. package/dist/op/composites/apply-op.js +151 -0
  540. package/dist/op/composites/behaviour-op.js +65 -0
  541. package/dist/op/composites/converge-op.js +141 -0
  542. package/dist/op/composites/index.js +19 -0
  543. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  544. package/dist/op/composites/pipeline-audit-op.js +50 -0
  545. package/dist/op/composites/reconcile-op.js +84 -0
  546. package/dist/op/composites/watch-op.js +69 -0
  547. package/dist/op/composites/workflow-audit-op.js +57 -0
  548. package/dist/op/converge-rule.js +205 -0
  549. package/dist/op/cron.js +146 -0
  550. package/dist/op/decide-backend.js +181 -0
  551. package/dist/op/decide-config.js +68 -0
  552. package/dist/op/decide-read-inputs.js +141 -0
  553. package/dist/op/discover.d.ts.map +1 -1
  554. package/dist/op/discover.js +213 -0
  555. package/dist/op/duration.js +21 -0
  556. package/dist/op/emulator-freshness.js +80 -0
  557. package/dist/op/emulator-lifecycle.js +269 -0
  558. package/dist/op/factory.js +83 -0
  559. package/dist/op/gate-approval.js +172 -0
  560. package/dist/op/gate-name.js +86 -0
  561. package/dist/op/gate-plan-context.js +167 -0
  562. package/dist/op/gate-point-run.js +67 -0
  563. package/dist/op/gate-point.js +111 -0
  564. package/dist/op/gate-resume-plan.js +155 -0
  565. package/dist/op/gate-resume.js +31 -0
  566. package/dist/op/gate-review.js +290 -0
  567. package/dist/op/gate-run-locator.js +85 -0
  568. package/dist/op/gate-summary.js +100 -0
  569. package/dist/op/gate-wait.js +56 -0
  570. package/dist/op/gate.js +449 -0
  571. package/dist/op/generate-pipeline.js +124 -0
  572. package/dist/op/index.js +51 -0
  573. package/dist/op/lifecycle-receipt-store.js +45 -0
  574. package/dist/op/local-executor.js +1164 -0
  575. package/dist/op/local-output.js +140 -0
  576. package/dist/op/op-ir.js +317 -0
  577. package/dist/op/op-verb-class.js +131 -0
  578. package/dist/op/op-waves-notify.js +136 -0
  579. package/dist/op/op-waves-run.d.ts +1 -1
  580. package/dist/op/op-waves-run.d.ts.map +1 -1
  581. package/dist/op/op-waves-run.js +1657 -0
  582. package/dist/op/op-waves.js +409 -0
  583. package/dist/op/operator.js +743 -0
  584. package/dist/op/receipt-store.js +94 -0
  585. package/dist/op/resource.js +23 -0
  586. package/dist/op/run-context.js +28 -0
  587. package/dist/op/run-live.js +256 -0
  588. package/dist/op/runtime.js +21 -0
  589. package/dist/op/runtimes/local.js +195 -0
  590. package/dist/op/source-archive.js +131 -0
  591. package/dist/op/step-output-ref.js +397 -0
  592. package/dist/op/steward-beside.js +169 -0
  593. package/dist/op/steward-points.js +138 -0
  594. package/dist/op/steward-turn.js +59 -0
  595. package/dist/op/steward.js +317 -0
  596. package/dist/op/types.js +25 -0
  597. package/dist/op/work-lease-decl.js +81 -0
  598. package/dist/op/work-lease-run.js +393 -0
  599. package/dist/override-gate.js +284 -0
  600. package/dist/owner-chain.js +74 -0
  601. package/dist/ownership.js +92 -0
  602. package/dist/params.js +61 -0
  603. package/dist/plan-summary.js +711 -0
  604. package/dist/point-decision.js +211 -0
  605. package/dist/pr-forge.js +810 -0
  606. package/dist/pr-loop.js +203 -0
  607. package/dist/project-codegen.js +191 -0
  608. package/dist/project-root.js +74 -0
  609. package/dist/project-validation.js +50 -0
  610. package/dist/provenance.js +157 -0
  611. package/dist/pseudo-parameter.js +40 -0
  612. package/dist/reconcile.js +450 -0
  613. package/dist/resource-attributes.js +33 -0
  614. package/dist/runtime-adapter.js +77 -0
  615. package/dist/runtime.js +66 -0
  616. package/dist/secret-materialization.js +153 -0
  617. package/dist/secret-provenance.js +250 -0
  618. package/dist/serializer-walker.js +112 -0
  619. package/dist/serializer.js +1 -0
  620. package/dist/sort.js +45 -0
  621. package/dist/stack-output.js +115 -0
  622. package/dist/telemetry-attribution.js +149 -0
  623. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  624. package/dist/terraform/adopt-state.js +40 -0
  625. package/dist/terraform/aws-resources.js +384 -0
  626. package/dist/terraform/bridge.js +204 -0
  627. package/dist/terraform/carve-provider.js +155 -0
  628. package/dist/terraform/carve.js +138 -0
  629. package/dist/terraform/data-source-shape.js +57 -0
  630. package/dist/terraform/emit-source.js +36 -0
  631. package/dist/terraform/excise.js +123 -0
  632. package/dist/terraform/graduate.js +128 -0
  633. package/dist/terraform/graph.js +435 -0
  634. package/dist/terraform/hcl2json.js +60 -0
  635. package/dist/terraform/manifest.js +149 -0
  636. package/dist/terraform/parse.js +81 -0
  637. package/dist/terraform/providers/aws.js +146 -0
  638. package/dist/terraform/providers/gcp.js +294 -0
  639. package/dist/terraform/providers/index.js +17 -0
  640. package/dist/terraform/providers/kubernetes.js +253 -0
  641. package/dist/terraform/score.js +151 -0
  642. package/dist/terraform/state.js +67 -0
  643. package/dist/terraform/tier-map.js +74 -0
  644. package/dist/terraform/types.js +13 -0
  645. package/dist/terraform/unified-diff.js +132 -0
  646. package/dist/testing.js +295 -0
  647. package/dist/toml-emit.js +153 -0
  648. package/dist/toml-parse.js +355 -0
  649. package/dist/toml-utils.js +60 -0
  650. package/dist/toml.js +428 -0
  651. package/dist/ts-loader.d.ts +46 -0
  652. package/dist/ts-loader.d.ts.map +1 -0
  653. package/dist/ts-loader.js +103 -0
  654. package/dist/types.js +1 -0
  655. package/dist/utils.js +61 -0
  656. package/dist/validation.js +20 -0
  657. package/dist/vendor/js-yaml-load.js +1662 -0
  658. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  659. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  660. package/dist/workspace/__fixtures__/sessions.js +91 -0
  661. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  662. package/dist/workspace/agent-cli.js +99 -0
  663. package/dist/workspace/agent.schema.json +390 -0
  664. package/dist/workspace/answers-ledger.js +89 -0
  665. package/dist/workspace/box-cli.js +142 -0
  666. package/dist/workspace/box-factory-write.js +196 -0
  667. package/dist/workspace/box-factory-write.schema.json +342 -0
  668. package/dist/workspace/box-factory.js +88 -0
  669. package/dist/workspace/box-intent.js +126 -0
  670. package/dist/workspace/box-isolation.js +169 -0
  671. package/dist/workspace/box-listing-write.schema.json +204 -0
  672. package/dist/workspace/box-listing.js +298 -0
  673. package/dist/workspace/box-publish.js +352 -0
  674. package/dist/workspace/box-publish.schema.json +498 -0
  675. package/dist/workspace/box-services.js +39 -0
  676. package/dist/workspace/broker-protocol.js +359 -0
  677. package/dist/workspace/broker-protocol.schema.json +228 -0
  678. package/dist/workspace/change-set.schema.json +460 -0
  679. package/dist/workspace/changes-cli.js +56 -0
  680. package/dist/workspace/changes.js +446 -0
  681. package/dist/workspace/changes.schema.json +642 -0
  682. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  683. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  684. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  685. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  686. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  687. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  688. package/dist/workspace/chant-migrations.js +113 -0
  689. package/dist/workspace/check.schema.json +433 -0
  690. package/dist/workspace/checks/box-isolation.js +62 -0
  691. package/dist/workspace/checks/boxes.js +491 -0
  692. package/dist/workspace/checks/diagrams.js +104 -0
  693. package/dist/workspace/checks/generated.js +419 -0
  694. package/dist/workspace/checks/ledgers.js +212 -0
  695. package/dist/workspace/checks/links.js +191 -0
  696. package/dist/workspace/checks/live.js +100 -0
  697. package/dist/workspace/checks/pipelines.js +188 -0
  698. package/dist/workspace/checks/records.js +169 -0
  699. package/dist/workspace/checks.js +426 -0
  700. package/dist/workspace/ci-green-cli.js +125 -0
  701. package/dist/workspace/ci-green-forge.js +83 -0
  702. package/dist/workspace/ci-green-workflow.js +199 -0
  703. package/dist/workspace/ci-green.js +325 -0
  704. package/dist/workspace/ci-last-green.schema.json +158 -0
  705. package/dist/workspace/compose-graph.js +235 -0
  706. package/dist/workspace/compose-reports.js +146 -0
  707. package/dist/workspace/composites.js +264 -0
  708. package/dist/workspace/composites.schema.json +617 -0
  709. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  710. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  711. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  712. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  713. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  714. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  715. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  716. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  717. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  718. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  719. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  720. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  721. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  722. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  723. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  724. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  725. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  726. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  727. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  728. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  729. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  730. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  731. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  732. package/dist/workspace/conformance/broker.js +736 -0
  733. package/dist/workspace/conformance/index.js +673 -0
  734. package/dist/workspace/conformance/vitest.js +108 -0
  735. package/dist/workspace/conformance/writer.js +1080 -0
  736. package/dist/workspace/decide.js +879 -0
  737. package/dist/workspace/decision-points.schema.json +135 -135
  738. package/dist/workspace/declaration-write-cli.js +74 -0
  739. package/dist/workspace/declaration-write.js +238 -0
  740. package/dist/workspace/declaration.js +938 -0
  741. package/dist/workspace/declaration.schema.json +1413 -1413
  742. package/dist/workspace/declared-kinds.js +106 -0
  743. package/dist/workspace/environments.js +164 -0
  744. package/dist/workspace/evidence.schema.json +279 -0
  745. package/dist/workspace/export-cli.js +185 -0
  746. package/dist/workspace/export.js +499 -0
  747. package/dist/workspace/factory-rules.js +175 -0
  748. package/dist/workspace/generated-files.js +92 -0
  749. package/dist/workspace/glob.js +45 -0
  750. package/dist/workspace/graph-cache.js +352 -0
  751. package/dist/workspace/graph-cli.js +348 -0
  752. package/dist/workspace/graph.schema.json +1338 -0
  753. package/dist/workspace/identity-gate-rule.d.ts +65 -0
  754. package/dist/workspace/identity-gate-rule.d.ts.map +1 -0
  755. package/dist/workspace/identity-gate-rule.js +75 -0
  756. package/dist/workspace/identity.d.ts +4 -2
  757. package/dist/workspace/identity.d.ts.map +1 -1
  758. package/dist/workspace/identity.js +126 -0
  759. package/dist/workspace/import.js +283 -0
  760. package/dist/workspace/init.js +620 -0
  761. package/dist/workspace/intent-cli.js +263 -0
  762. package/dist/workspace/intent-joins.js +201 -0
  763. package/dist/workspace/intent-record.js +352 -0
  764. package/dist/workspace/intent-record.schema.json +864 -0
  765. package/dist/workspace/intent.js +1582 -0
  766. package/dist/workspace/intent.schema.json +2420 -0
  767. package/dist/workspace/json-edit.js +221 -0
  768. package/dist/workspace/jsonc.js +235 -0
  769. package/dist/workspace/kind-readers.js +103 -0
  770. package/dist/workspace/kinds.js +587 -0
  771. package/dist/workspace/lexicon-symbols.js +112 -0
  772. package/dist/workspace/lineage-adopt-cli.js +102 -0
  773. package/dist/workspace/lineage-adopt.js +360 -0
  774. package/dist/workspace/lineage-check.js +282 -0
  775. package/dist/workspace/lineage-cli.js +121 -0
  776. package/dist/workspace/lineage-hash-index.js +284 -0
  777. package/dist/workspace/lineage-init.js +507 -0
  778. package/dist/workspace/lineage-lock.js +387 -0
  779. package/dist/workspace/lineage-merge.js +45 -0
  780. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  781. package/dist/workspace/lineage-migrations.js +329 -0
  782. package/dist/workspace/lineage-provenance.js +36 -0
  783. package/dist/workspace/lineage-update.js +138 -0
  784. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  785. package/dist/workspace/lineage-upgrade.js +889 -0
  786. package/dist/workspace/lineage-vendor.js +171 -0
  787. package/dist/workspace/lineage-version.js +128 -0
  788. package/dist/workspace/lineage-versions.js +275 -0
  789. package/dist/workspace/links.js +330 -0
  790. package/dist/workspace/ls-generated.js +95 -0
  791. package/dist/workspace/ls.js +277 -0
  792. package/dist/workspace/ls.schema.json +333 -0
  793. package/dist/workspace/member-commands.js +508 -0
  794. package/dist/workspace/member-handles.js +216 -0
  795. package/dist/workspace/member-pipeline.js +258 -0
  796. package/dist/workspace/member-run.js +117 -0
  797. package/dist/workspace/member-write.schema.json +193 -0
  798. package/dist/workspace/nested-graph.js +156 -0
  799. package/dist/workspace/nesting.js +38 -0
  800. package/dist/workspace/patch.js +301 -0
  801. package/dist/workspace/patch.schema.json +321 -0
  802. package/dist/workspace/pin-cli.js +55 -0
  803. package/dist/workspace/pin-integrity.js +100 -0
  804. package/dist/workspace/plan-summary.schema.json +155 -0
  805. package/dist/workspace/point-answer.schema.json +129 -129
  806. package/dist/workspace/points-cli.js +291 -0
  807. package/dist/workspace/points-write.schema.json +660 -0
  808. package/dist/workspace/points.js +521 -0
  809. package/dist/workspace/points.schema.json +916 -0
  810. package/dist/workspace/pr-report.schema.json +108 -0
  811. package/dist/workspace/principal-classes.d.ts +3 -14
  812. package/dist/workspace/principal-classes.d.ts.map +1 -1
  813. package/dist/workspace/principal-classes.js +245 -0
  814. package/dist/workspace/reason-codes.js +326 -0
  815. package/dist/workspace/record-assets.js +151 -0
  816. package/dist/workspace/record-decided.js +105 -0
  817. package/dist/workspace/record-sessions.js +96 -0
  818. package/dist/workspace/record-source.js +114 -0
  819. package/dist/workspace/records-amend.schema.json +284 -0
  820. package/dist/workspace/records-checkout.js +76 -0
  821. package/dist/workspace/records-cli.js +707 -0
  822. package/dist/workspace/records-close.js +116 -0
  823. package/dist/workspace/records-close.schema.json +278 -0
  824. package/dist/workspace/records-new.schema.json +202 -0
  825. package/dist/workspace/records-review.schema.json +367 -0
  826. package/dist/workspace/records-since.js +317 -0
  827. package/dist/workspace/records-since.schema.json +218 -0
  828. package/dist/workspace/records-write.js +1229 -0
  829. package/dist/workspace/records.js +1345 -0
  830. package/dist/workspace/records.schema.json +604 -0
  831. package/dist/workspace/reference-kinds/app/package.json +10 -0
  832. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  833. package/dist/workspace/returns.js +303 -0
  834. package/dist/workspace/root-refusal.js +75 -0
  835. package/dist/workspace/run-statement.schema.json +622 -0
  836. package/dist/workspace/runs-cli.js +584 -0
  837. package/dist/workspace/runs-write.schema.json +994 -0
  838. package/dist/workspace/runs.js +708 -0
  839. package/dist/workspace/runs.schema.json +1257 -0
  840. package/dist/workspace/runtimes.js +76 -0
  841. package/dist/workspace/session-kinds.js +83 -0
  842. package/dist/workspace/signers.schema.json +206 -0
  843. package/dist/workspace/source-block.js +125 -0
  844. package/dist/workspace/squash.js +177 -0
  845. package/dist/workspace/status-gates.js +162 -0
  846. package/dist/workspace/status-stewards.js +330 -0
  847. package/dist/workspace/status.js +514 -0
  848. package/dist/workspace/status.schema.json +998 -0
  849. package/dist/workspace/steward-index.js +191 -0
  850. package/dist/workspace/symbols.js +188 -0
  851. package/dist/workspace/template-manifest.js +227 -0
  852. package/dist/workspace/template-pins.js +115 -0
  853. package/dist/workspace/trailer-joins.js +65 -0
  854. package/dist/workspace/trailers.js +111 -0
  855. package/dist/workspace/tree.js +136 -0
  856. package/dist/workspace/trust/attestor.js +63 -0
  857. package/dist/workspace/trust/dsse.js +108 -0
  858. package/dist/workspace/trust/evidence-cli.js +175 -0
  859. package/dist/workspace/trust/evidence.js +161 -0
  860. package/dist/workspace/trust/gate-seal.js +226 -0
  861. package/dist/workspace/trust/policy.js +190 -0
  862. package/dist/workspace/trust/provenance.js +180 -0
  863. package/dist/workspace/trust/rotation.js +298 -0
  864. package/dist/workspace/trust/run-commits.js +101 -0
  865. package/dist/workspace/trust/run-statement.js +182 -0
  866. package/dist/workspace/trust/seal.js +272 -0
  867. package/dist/workspace/trust/signers-cli.js +152 -0
  868. package/dist/workspace/trust/ssh-commit.js +178 -0
  869. package/dist/workspace/trust/test-repo.js +118 -0
  870. package/dist/workspace/trust/trust-files.js +193 -0
  871. package/dist/workspace/trust/verify-cli.js +63 -0
  872. package/dist/workspace/trust/verify.js +192 -0
  873. package/dist/workspace/which-chant.js +141 -0
  874. package/dist/workspace/wip-cli.js +95 -0
  875. package/dist/workspace/wip-write.schema.json +504 -0
  876. package/dist/workspace/wip.js +631 -0
  877. package/dist/workspace/wip.schema.json +334 -0
  878. package/dist/workspace/work-cli.js +448 -0
  879. package/dist/workspace/work-evidence.js +122 -0
  880. package/dist/workspace/work-evidence.schema.json +222 -0
  881. package/dist/workspace/work-history.schema.json +421 -0
  882. package/dist/workspace/work-lease.schema.json +246 -0
  883. package/dist/workspace/work-size.js +77 -0
  884. package/dist/workspace/work.js +283 -0
  885. package/dist/workspace/workspace-kinds.schema.json +259 -259
  886. package/dist/workspace/workspace-principals.schema.json +53 -53
  887. package/dist/workspace/write-lock-cli.js +105 -0
  888. package/dist/workspace/write-lock.js +424 -0
  889. package/dist/workspace/write-lock.schema.json +172 -0
  890. package/dist/workspace/write-scope.js +484 -0
  891. package/dist/yaml.js +459 -0
  892. package/package.json +2 -2
  893. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  894. package/src/cli/commands/lint.ts +36 -6
  895. package/src/cli/commands/migrate.ts +2 -0
  896. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  897. package/src/cli/main.ts +121 -27
  898. package/src/cli/mcp/workspace-tools.ts +1 -1
  899. package/src/codegen/pinned-upgrade.ts +2 -0
  900. package/src/components/discover.ts +2 -0
  901. package/src/components/sandbox/driver.ts +3 -1
  902. package/src/config-import.ts +3 -0
  903. package/src/discovery/fold-import.ts +23 -14
  904. package/src/discovery/import.ts +2 -0
  905. package/src/discovery/sandbox/driver.ts +3 -1
  906. package/src/gate-decision-bundle.test.ts +3 -2
  907. package/src/gate-decision-identity.test.ts +176 -0
  908. package/src/gate-decision.ts +100 -22
  909. package/src/lexicon-module.ts +3 -0
  910. package/src/lifecycle/gate-ledger.ts +8 -0
  911. package/src/lint/config.ts +1 -1
  912. package/src/lint/discover.ts +28 -8
  913. package/src/lint/policy-import.ts +4 -1
  914. package/src/lint/rule-loader.ts +2 -0
  915. package/src/op/discover.ts +3 -0
  916. package/src/op/op-waves-point.test.ts +1 -0
  917. package/src/op/op-waves-run.ts +5 -4
  918. package/src/op/op-waves.test.ts +14 -0
  919. package/src/ts-loader.test.ts +23 -0
  920. package/src/ts-loader.ts +122 -0
  921. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  922. package/src/workspace/declaration.ts +1 -1
  923. package/src/workspace/identity-gate-rule.ts +109 -0
  924. package/src/workspace/identity.ts +8 -18
  925. package/src/workspace/kinds.ts +1 -1
  926. package/src/workspace/lineage-migrations.ts +2 -0
  927. package/src/workspace/points.ts +1 -1
  928. package/src/workspace/principal-classes.ts +5 -30
@@ -0,0 +1,577 @@
1
+ /**
2
+ * `run-agent` — phase 1 design: capability schema + registry entry (#1941,
3
+ * epic #1564 "run-agent as a bounded, attested component capability").
4
+ *
5
+ * **Decided (2026-08-25, maintainer comment on #1564).** The agent turn
6
+ * executes on a fly [Sprite](https://sprites.dev), via chant's own sprite
7
+ * lifecycle activities (`lexicons/fly/src/op/activities/sprites.ts` —
8
+ * `spriteCreate`/`spriteCheckpoint`/`spriteExec`/`spriteRestore`/`spriteDestroy`,
9
+ * plus the filesystem activities in `sprite-fs.ts` —
10
+ * `spriteWriteFile`/`spriteReadFile`), **not** fountain's hosted `fountainRun`
11
+ * path (`lexicons/fountain/src/op/activities/fountain-run.ts`): `fountainRun`
12
+ * polls a fountain-managed `Conversation` to a terminal HTTP status and gives
13
+ * chant no checkpoint control, but the epic's compensation story needs chant
14
+ * to own the sprite directly. Compensation is checkpoint-before/restore-on-unwind
15
+ * — "the environment is the transaction," no hand-written inverse action — the
16
+ * same pattern `examples/sprites-agent-task/ops/guarded-task.op.ts` already
17
+ * demonstrates at the Op layer. The offline path is `sprites-fake`/
18
+ * `sprites-emulator` (spritzer), the same `SPRITES_BASE_URL` endpoint-override
19
+ * story `sprites.ts` documents.
20
+ *
21
+ * **Input tracks fountain's `Agent` surface as it stands today**
22
+ * (`lexicons/fountain/src/spec/fountain-openapi.snapshot.json`): `agent` is
23
+ * resolved the same way `fountainRun`'s `resolveAgentId` resolves a name/id
24
+ * against `/api/agents`; `task` is `PromptRequest`-shaped (`prompt` +
25
+ * optional `images`, `ImageInput`'s exact shape). The output's `turn` facts
26
+ * track `Turn`'s shape (`status`/`exit_code`/`started_at`/`ended_at`), even
27
+ * though the turn runs on a chant-owned sprite rather than a fountain-managed
28
+ * `Sandbox` — fountain supplies the *declarative* facts (which model, which
29
+ * runtime, which egress policy via `Environment`), chant drives the
30
+ * *imperative* execution. Revisit only if `BinaryBourbon/fountain#586` (the
31
+ * `Estate` proposal) lands a breaking shape.
32
+ *
33
+ * **Placement.** Registered the same way `docker-build` is (./build.ts) — a
34
+ * factory over an injectable executor seam (`SpriteActivities` below, the
35
+ * `run-agent` analogue of ./cloud-executor.ts's `CloudExecutor`) — so core
36
+ * carries the typed schema without a hard package dependency on
37
+ * `@intentius/chant-lexicon-fly` (core stays cloud/vendor-agnostic in its
38
+ * dependency graph, see docs/components/cloud-boundary; the same reasoning
39
+ * that keeps the AWS leaves in `@intentius/chant-lexicon-aws` rather than
40
+ * here). Unlike the AWS leaves, there is today no fly-lexicon capability
41
+ * plugin for this verb to live in instead, and `run-agent` is a foundational,
42
+ * pipeline-level primitive in the same vein as `docker-build` or
43
+ * `wrangler-deploy` (./wrangler.ts) rather than a swappable per-cloud leaf —
44
+ * the same tradeoff `wrangler.ts`'s module doc weighs for the Cloudflare
45
+ * Workers verbs. Revisit if a broader agent-execution lexicon ever owns this
46
+ * seam instead.
47
+ *
48
+ * **Scope across phases.** Phase 1 (#1941) shipped the typed contract only —
49
+ * `run`/`rollback` were stubs throwing `CapabilityNotImplementedError`, per
50
+ * ../capability.ts's own module doc ("Verb implementations live under
51
+ * `./verbs/*` as typed stubs — no cloud calls, no side effects. Cloud
52
+ * implementations are a later phase"). `rollbackPolicy: "native"` was declared
53
+ * from phase 1 (so COMP003, ../lint/rules/comp/comp003-mutating-no-rollback.ts,
54
+ * never requires a `noRollback` opt-out for this verb once it composes into a
55
+ * component) even before the paired `rollback` body was real — the *policy*
56
+ * was the phase 1 design commitment, the *implementation* is phase 2 (#1942,
57
+ * below). This capability is deliberately not yet registered in any
58
+ * `CapabilityPlugin`'s `STARTER_VERB_FAMILIES`-equivalent set — the fly
59
+ * lexicon's own plugin (`lexicons/fly/src/components/capability-plugin.ts`)
60
+ * registers it under its own `FLY_VERB_FAMILIES`, but that is a separate,
61
+ * later decision from "does core's sequencing logic actually work," which
62
+ * this module answers. #1943 ("Provenance + attestation") owns the
63
+ * `provenance.sourceRef` transcript-hash basis and verify-gate interop; #1944
64
+ * owns the conformance/contract test suite (saga-unwind restore, COMP003
65
+ * refusal) beyond this module's own unit tests.
66
+ *
67
+ * **#1942 (phase 2, this module's `run`/`rollback` body) resolved the
68
+ * following:**
69
+ * - **The exec-throw finding** (pre-merge review of #1946, recorded on
70
+ * #1942): the real `spriteExec` (`lexicons/fly/src/op/activities/sprites.ts`)
71
+ * throws on any non-zero exit, so a *thin* `SpriteActivities.exec` adapter
72
+ * can only ever produce `turn.status: "failed"` without throwing if it
73
+ * reclassifies that throw itself. That reclassification is the fly
74
+ * lexicon adapter's job (`lexicons/fly/src/components/run-agent.ts`,
75
+ * option (a) from the review comment) — `SpriteActivities.exec`'s
76
+ * contract, as this module consumes it, is: **resolve** with `exitCode`
77
+ * for any ordinary command outcome (zero or non-zero), **reject** only for
78
+ * a genuine transport/infra failure. `run()` below trusts that contract
79
+ * completely: it never wraps `sprites.exec` in a try/catch, so a rejection
80
+ * from the injected `sprites` always propagates as a genuine `run()`
81
+ * failure (triggering saga rollback in ../driver.ts), while an ordinary
82
+ * non-zero exit becomes `turn.status: "failed"` on a normal return —
83
+ * exactly the non-throwing first-class result the type already declared.
84
+ * - **Rollback identity (#1944 closes the durable-path gap left open here).**
85
+ * `rollback(ctx, input, output)` receives the identical `input` object
86
+ * `run(ctx, input)` was called with, plus (since #1944) the exact `output`
87
+ * `run()` returned — `../capability.ts`'s `Capability.rollback` grew an
88
+ * optional third parameter for precisely this, and ../driver.ts's saga
89
+ * unwind (and any hosting runtime that splits `run`/`rollback` across
90
+ * process boundaries) always threads it through. `run()` records the
91
+ * sprite id and exact pre-run checkpoint id two ways: in a private
92
+ * `WeakMap` keyed by the exact `input` object (works only when `rollback`
93
+ * is called with that same object — true in-process, e.g. this module's
94
+ * own tests calling `rollback()` directly after `run()`), and — the
95
+ * durable-safe channel — as `output.spriteId`/`output.checkpointId`,
96
+ * already part of `RunAgentOutput` (#1943). `rollback()` prefers `output`'s
97
+ * fields when present, falling back to the `WeakMap` only when a caller
98
+ * never threads `output` through (backward-compatible for any capability
99
+ * caller not yet passing it). **The checkpoint id, not the comment, is
100
+ * what `rollback()` restores by** when either source has one:
101
+ * `sprites.restore({ id, checkpoint: checkpointId })`, which
102
+ * `spriteRestore`'s explicit-id resolution wins over comment on
103
+ * (`lexicons/fly/src/op/activities/sprites.ts`). Restoring by comment alone
104
+ * is unsafe on a reused sprite — two `run()` calls sharing the default
105
+ * `"pre-run"` comment would make a comment-based restore always resolve to
106
+ * the *newest* matching checkpoint, so rolling back the first run would
107
+ * restore the second run's checkpoint (which already contains the first
108
+ * run's mutation) instead of undoing it. Comment-based restore
109
+ * (`workspace.checkpointComment`, default `"pre-run"`) is therefore only a
110
+ * **fallback**, used when no checkpoint id is available from either source
111
+ * (the `workspace.spriteName`-only path below). When there is no sprite id
112
+ * to restore at all (no `output`, no `WeakMap` record, no
113
+ * `workspace.spriteName`), `rollback()` degrades with an explicit,
114
+ * commented no-op return — the same pattern
115
+ * `../../lexicons/aws/src/components/host-delivery.ts`'s `code-deploy`
116
+ * rollback uses (`if (!deploymentId) return;`) — rather than throwing.
117
+ * **Before #1944**, a hosted path running `run` and `rollback` as separate
118
+ * units of work — each rebuilding `input` fresh via `resolveStepInput` —
119
+ * never gave the `WeakMap` a hit, so a fresh sprite's rollback there
120
+ * silently degraded to that no-op; passing `output` through (this revision)
121
+ * closes that gap directly, without redesigning the component-op wire
122
+ * format — see #1944's PR description for why this was chosen over the
123
+ * "make the degrade loud" alternative.
124
+ * - **Destroy vs. leave-alive.** `run()` destroys a freshly created (not
125
+ * `workspace.spriteName`-reused) sprite only when `turn.status ===
126
+ * "completed"`. An ordinary failed turn leaves the sprite alive — it
127
+ * returned normally, so no saga rollback runs, but the failure is exactly
128
+ * when a caller (or this module's own tests) most wants to inspect the
129
+ * sprite or explicitly call `rollback()` to restore it, per this issue's
130
+ * acceptance criteria.
131
+ *
132
+ * **Still open, left for later phases:**
133
+ * - Runtime invocation inside the sprite — `buildRuntimeCommand` below picks
134
+ * a real one-shot CLI invocation for each known `Agent.runtime` value,
135
+ * reading the staged prompt file; whether the sprite image already carries
136
+ * that CLI (vs. `run()` needing a setup step) is unresolved. `RunAgentInput`
137
+ * (frozen by #1941) has no separate `runtime` field, so `input.agent`
138
+ * doubles as the runtime selector for phase 2 — an unrecognized value is
139
+ * passed through verbatim as a literal command (a documented escape hatch
140
+ * for a custom binary already present in the image, and how this module's
141
+ * own tests exercise a scripted failure against the offline fake). Real
142
+ * `agent` name/id -> `Agent.runtime` resolution against fountain's
143
+ * `/api/agents` (`resolveAgentId`, `lexicons/fountain/.../fountain-run.ts`)
144
+ * is out of this issue's scope (and would need a network call the offline
145
+ * path forbids).
146
+ * - Output artifact encoding — `run()` reads one conventional path
147
+ * (`/work/output`) as the sole `artifacts.files` entry when present;
148
+ * individual `spriteReadFile` calls per changed path vs. one tarred
149
+ * snapshot folded into a `BuildArchiveManifest` entry (./build-archive.ts)
150
+ * remains an open question, as does `artifacts.diff`, which `run()` never
151
+ * populates (the real Sprites API has no built-in diff endpoint).
152
+ *
153
+ * **#1943 (this revision) resolved the transcript-hash basis and
154
+ * sign/verify-gate interop, closing #1941's open "transcript hash basis"
155
+ * question:**
156
+ * - **Hash basis.** `provenance.sourceRef`'s digest component is
157
+ * `sha256Digest(JSON.stringify(basis))` over a fixed-key-order object —
158
+ * `{ agent, promptDigest, images, status, exitCode, stdoutDigest,
159
+ * stderrDigest, artifacts, diffDigest }` — built fresh by
160
+ * `computeTranscriptDigest` below every call, never re-ordered from a
161
+ * caller-supplied object, so key order (and therefore the digest) never
162
+ * drifts by construction. Every free-text field (`prompt`, `stdout`,
163
+ * `stderr`, `diff`, each image's `data`) is folded in as its own
164
+ * `sha256Digest`, not embedded verbatim — this keeps a (possibly large,
165
+ * possibly secret-bearing) prompt or transcript out of the digest input's
166
+ * own byte stream while the digest remains exactly as sensitive to those
167
+ * bytes as embedding them would be, and it is *why* this module never
168
+ * needs to retain raw stdout/stderr past computing their digest inline
169
+ * (closing #1941's "is the raw transcript retained anywhere beyond the
170
+ * attested digest" sub-question: no, not even internally). `startedAt`/
171
+ * `endedAt` are deliberately excluded — including wall-clock time would
172
+ * make "the same turn" (same prompt, same exec outcome, same artifacts)
173
+ * hash differently on every real run, defeating the determinism property
174
+ * (`same turn -> same sourceRef`) a verifier actually needs: identity is
175
+ * about *what happened*, not *when*. `artifacts.files` is sorted by
176
+ * `path` before hashing so collection order (never semantically
177
+ * meaningful — there is exactly one conventional artifact today, see
178
+ * `OUTPUT_PATH`) can't perturb the digest.
179
+ * - **`sourceRef` folding.** `RunAgentInput.sourceRef`'s own doc comment
180
+ * promises it is "folded into the output's `provenance.sourceRef`
181
+ * alongside the transcript hash." Concretely: `sourceRef =
182
+ * input.sourceRef ? \`${input.sourceRef}@${transcriptDigest}\` :
183
+ * transcriptDigest` — an `"<sha>@sha256:<hex>"` shape when a source ref is
184
+ * known, reading like the `repo@sha256:...` convention already used
185
+ * throughout this codebase (./sign.ts, ./publish.ts's `uri`), or the bare
186
+ * `sha256:<hex>` transcript digest alone when it is not. `@` (not `:`,
187
+ * which `DockerBuildInput.sourceRef`'s own `"<sha>:<path>"` convention
188
+ * already uses for a different purpose) keeps the split unambiguous.
189
+ * `extractTranscriptDigest` below recovers the trailing
190
+ * `sha256:<hex>` deterministically regardless of what `input.sourceRef`
191
+ * contains, by anchoring on the fixed `sha256:[0-9a-f]{64}` pattern at the
192
+ * very end of the string.
193
+ * - **Attestation interop, decided.** `RunAgentOutput` gained one field,
194
+ * `attestationRef` — a `"<component>/run-agent@sha256:<hex>"` string
195
+ * already shaped like the digest-qualified `repo@sha256:...` reference
196
+ * `./sign.ts`'s `assertDigestRef`/`./verify.ts` already require, built
197
+ * from `ctx.component` and the transcript digest, so a `sign`/
198
+ * `attest-provenance`/`verify` step composed after `run-agent` wires
199
+ * `imageRef: "@RunAgent.attestationRef"` and needs **zero code changes**
200
+ * to any of those three verbs — resolving design point 4 of #1943 exactly
201
+ * as anticipated. The honest caveat, stated plainly rather than left
202
+ * implicit: `attestationRef` is *shaped* like an OCI digest reference, but
203
+ * is not by itself a real, registry-resolvable one — `run-agent`'s turn
204
+ * output is never pushed anywhere by this module. A deployment that wants
205
+ * a genuine `cosign sign`/`cosign verify` round trip against real
206
+ * Rekor/Fulcio needs a registry-backed publish step ahead of `sign`
207
+ * (mirroring `publish-image`'s `uri`, ./publish.ts) — out of this issue's
208
+ * scope, and not needed for the offline contract this issue asks for
209
+ * (injected `ProcessRunner`, no real `cosign`/registry ever touched).
210
+ * `toRunAgentArchiveEntry` below folds the same digest into a
211
+ * `BuildArchiveEntry` (`kind: "asset"`, ./build-archive.ts) per design
212
+ * point 2, for a caller building a full archive manifest.
213
+ * - **Predicate-type decision, made (not left open).** Reuses the existing
214
+ * `predicateType: "https://slsa.dev/provenance/v1"` unchanged — does
215
+ * *not* mint a `run-agent`-specific predicate type. `buildDefinition
216
+ * .buildType` is the field SLSA v1 actually designates for "what kind of
217
+ * recipe produced this" (`RUN_AGENT_BUILD_TYPE` below,
218
+ * `"https://chant.dev/agent-turn/v1"`, the same role
219
+ * `./sign.ts`'s `DEFAULT_BUILD_TYPE` plays for `docker-build`), so a
220
+ * second, parallel `predicateType` taxonomy would duplicate what
221
+ * `buildType` already discriminates. This is also what makes the "zero
222
+ * code changes to `verify.ts`" claim above literally true:
223
+ * `buildVerifyAttestationArgs` hardcodes `--type slsaprovenance1` — a
224
+ * minted `predicateType` would have broken that interop outright, forcing
225
+ * a `verify.ts` change this issue's design point 4 explicitly hoped to
226
+ * avoid.
227
+ * - **Fountain-supplied facts, honestly scoped.** `buildRunAgentProvenanceStatement`
228
+ * below folds `input.agent` into `externalParameters` (the one *declared*
229
+ * fact `RunAgentInput` actually carries today) and `spriteId`/
230
+ * `checkpointId`/`turn.status`/`turn.exitCode` into `internalParameters`
231
+ * (what actually happened). `model`/`runtime`/`Environment.networking_type`
232
+ * /`allowed_hosts` are not included — populating them honestly needs
233
+ * fountain `Agent`/`Environment` resolution against `/api/agents`, which
234
+ * this module's own doc comment already marks out of scope ("Real `agent`
235
+ * name/id -> `Agent.runtime` resolution ... is out of this issue's
236
+ * scope"). Adding those keys later is additive (merged into
237
+ * `externalParameters`, never replacing it), not a shape break.
238
+ */
239
+ import { contentDigest } from "../../content-digest.js";
240
+ import { buildProvenanceStatement } from "./sign.js";
241
+ /**
242
+ * Thrown by `defaultSpriteActivities()`'s methods when a caller never injects
243
+ * a real (or fake) `SpriteActivities` — the default remains this
244
+ * not-wired-yet placeholder even after #1942 wires `run()`/`rollback()`'s
245
+ * sequencing logic, because *some* concrete backend still has to be supplied
246
+ * for that logic to have anything to call. `lexicons/fly/src/components/
247
+ * run-agent.ts`'s adapter (the real backend, over this lexicon's own sprite
248
+ * lifecycle activities) or the offline `sprites-fake`/`sprites-emulator` path
249
+ * are what a caller injects instead. A caller that supplies its own
250
+ * `SpriteActivities` never hits this class.
251
+ */
252
+ export class SpriteActivitiesNotWiredError extends Error {
253
+ constructor(method) {
254
+ super(`SpriteActivities.${method}: not wired to a real sprite backend yet — sprite lifecycle wiring is #1942 ` +
255
+ `(epic #1564 phase 2). Inject a real or fake ("sprites-fake"/"sprites-emulator") implementation to ` +
256
+ `exercise "run-agent" end to end.`);
257
+ this.method = method;
258
+ this.name = "SpriteActivitiesNotWiredError";
259
+ }
260
+ }
261
+ /** Phase 1's placeholder default: every method throws `SpriteActivitiesNotWiredError`. See that class's doc comment. */
262
+ export function defaultSpriteActivities() {
263
+ const notWired = (method) => async () => {
264
+ throw new SpriteActivitiesNotWiredError(method);
265
+ };
266
+ return {
267
+ create: notWired("create"),
268
+ checkpoint: notWired("checkpoint"),
269
+ exec: notWired("exec"),
270
+ restore: notWired("restore"),
271
+ destroy: notWired("destroy"),
272
+ writeFile: notWired("writeFile"),
273
+ readFile: notWired("readFile"),
274
+ };
275
+ }
276
+ // ── capability ───────────────────────────────────────────────────────────
277
+ /**
278
+ * Build the `run-agent` capability. `sprites` is the injectable
279
+ * `SpriteActivities` seam (default: `defaultSpriteActivities()`, the
280
+ * not-wired-yet placeholder — see that function's doc comment) so unit tests
281
+ * never touch a real/emulated sprite, mirroring `createDockerBuildCapability`'s
282
+ * `executor: CloudExecutor` parameter (./build.ts). The fly lexicon's
283
+ * `flyRunAgentCapability` (`lexicons/fly/src/components/run-agent.ts`) is
284
+ * this same factory called with its real `SpriteActivities` adapter.
285
+ *
286
+ * `run()`: `sprites.create` (skipped when reusing `workspace.spriteName`) ->
287
+ * `sprites.checkpoint` (`comment: workspace.checkpointComment ?? "pre-run"`)
288
+ * -> `sprites.writeFile` to stage the prompt -> `sprites.exec` the runtime
289
+ * command (`buildRuntimeCommand`) -> `sprites.readFile` to collect the sole
290
+ * artifact -> `sprites.destroy`, only for a freshly created sprite whose turn
291
+ * completed. See this module's doc comment for the exec-throw resolution,
292
+ * the destroy-vs-leave-alive rule, and the rollback-identity design.
293
+ *
294
+ * `rollback()`: `sprites.restore({ id: spriteId, checkpoint: checkpointId })`
295
+ * — the sole compensation, restoring to the exact pre-run checkpoint `run()`
296
+ * recorded (see this module's doc comment, "Rollback identity"). Prefers the
297
+ * `output` parameter's `spriteId`/`checkpointId` (the durable-safe channel,
298
+ * #1944) over the in-process `WeakMap`, falls back to
299
+ * `sprites.restore({ id: spriteId, comment })` only when neither source has a
300
+ * checkpoint id, and degrades to an explicit no-op when there is no sprite id
301
+ * to restore at all. No hand-written inverse action otherwise; "the
302
+ * environment is the transaction."
303
+ *
304
+ * `rollbackPolicy: "native"` is set explicitly (not left to
305
+ * ../capability.ts's `rollback`-method inference) so the design commitment
306
+ * reads directly off this capability's declaration: a mutating `run-agent`
307
+ * step never needs a `noRollback` opt-out for COMP003
308
+ * (../lint/rules/comp/comp003-mutating-no-rollback.ts).
309
+ */
310
+ export function createRunAgentCapability(sprites = defaultSpriteActivities()) {
311
+ // Keyed by the exact `input` object `run()` was called with — a fallback
312
+ // for a caller that never threads `output` through to `rollback()` (see
313
+ // this module's doc comment, "Rollback identity"). The durable-safe path
314
+ // is `output.spriteId`/`output.checkpointId`, already part of
315
+ // `RunAgentOutput` (#1943) and threaded by every current caller (#1944).
316
+ const stateByInput = new WeakMap();
317
+ return {
318
+ kind: "run-agent",
319
+ rollbackPolicy: "native",
320
+ async run(ctx, input) {
321
+ const reused = Boolean(input.workspace.spriteName);
322
+ const spriteId = input.workspace.spriteName ?? generateSpriteName(ctx);
323
+ if (!reused) {
324
+ await sprites.create({ name: spriteId, image: input.workspace.image });
325
+ }
326
+ const checkpointComment = input.workspace.checkpointComment ?? "pre-run";
327
+ const { checkpointId } = await sprites.checkpoint({ id: spriteId, comment: checkpointComment });
328
+ // Recorded as early as possible: even if a later step throws (a genuine
329
+ // infra failure, triggering saga rollback), `rollback()` still finds
330
+ // the sprite id and exact checkpoint it needs to restore.
331
+ stateByInput.set(input, { spriteId, checkpointId });
332
+ await sprites.writeFile({ id: spriteId, path: PROMPT_PATH, content: input.task.prompt, mkdir: true });
333
+ const startedAt = new Date().toISOString();
334
+ // No try/catch here by design (see this module's doc comment, "The
335
+ // exec-throw finding"): `sprites.exec` resolves with `exitCode` for any
336
+ // ordinary command outcome and rejects only for a genuine infra
337
+ // failure, which should propagate and trigger saga rollback.
338
+ const execResult = await sprites.exec({ id: spriteId, cmd: buildRuntimeCommand(input.agent) });
339
+ const turn = {
340
+ status: execResult.exitCode === 0 ? "completed" : "failed",
341
+ exitCode: execResult.exitCode,
342
+ startedAt,
343
+ endedAt: new Date().toISOString(),
344
+ };
345
+ const artifacts = await collectArtifacts(sprites, spriteId);
346
+ // Destroy only on a normal-return success. A failed turn (status
347
+ // "failed") leaves the sprite alive — no saga rollback runs for it
348
+ // (run() returned, it didn't throw), so this is the caller's own
349
+ // window to inspect the sprite or explicitly call rollback().
350
+ if (!reused && turn.status === "completed") {
351
+ await sprites.destroy({ id: spriteId });
352
+ }
353
+ // #1943: the transcript digest — see this module's doc comment ("Hash
354
+ // basis") for the exact fields/order this is computed over.
355
+ // execResult.stdout/stderr never outlive this call: they are folded
356
+ // into the digest right here and discarded, never stored on `turn` or
357
+ // anywhere else in `RunAgentOutput`.
358
+ const transcriptDigest = computeTranscriptDigest({
359
+ agent: input.agent,
360
+ prompt: input.task.prompt,
361
+ images: input.task.images,
362
+ turn,
363
+ stdout: execResult.stdout,
364
+ stderr: execResult.stderr,
365
+ artifacts,
366
+ });
367
+ const sourceRef = input.sourceRef ? `${input.sourceRef}@${transcriptDigest}` : transcriptDigest;
368
+ const provenance = {
369
+ sourceRef,
370
+ artifactDigest: artifacts.files[0]?.digest ?? EMPTY_DIGEST,
371
+ };
372
+ const attestationRef = `${ctx.component}/run-agent@${transcriptDigest}`;
373
+ return { spriteId, checkpointId, turn, artifacts, provenance, attestationRef };
374
+ },
375
+ async rollback(_ctx, input, output) {
376
+ // The durable-safe channel first (#1944): `output` is the exact value
377
+ // this step's own `run()` returned, threaded through by every current
378
+ // caller (../driver.ts locally, and a hosting runtime across whatever
379
+ // process boundary it puts between the two) — it
380
+ // survives even when `rollback()` is called with a freshly-rebuilt
381
+ // `input` object the in-process WeakMap below has never seen. Falls
382
+ // back to the WeakMap for a caller that predates/never threads
383
+ // `output` (see this module's doc comment, "Rollback identity").
384
+ const state = stateByInput.get(input);
385
+ const spriteId = output?.spriteId ?? state?.spriteId ?? input.workspace.spriteName;
386
+ if (!spriteId) {
387
+ // No identity from any source (output, in-process record, or
388
+ // "workspace.spriteName"): there is nothing to identify which sprite
389
+ // to restore. Degrade explicitly rather than throwing into a
390
+ // swallowed catch, the same pattern
391
+ // ../../lexicons/aws/src/components/host-delivery.ts's code-deploy
392
+ // rollback uses (`if (!deploymentId) return;`).
393
+ return;
394
+ }
395
+ // Restore the exact pre-run checkpoint when either source recorded
396
+ // one — wins over comment (see "Rollback identity"), and is the only
397
+ // safe choice on a reused sprite where two runs can share the same
398
+ // default "pre-run" comment.
399
+ const checkpointId = output?.checkpointId ?? state?.checkpointId;
400
+ if (checkpointId) {
401
+ await sprites.restore({ id: spriteId, checkpoint: checkpointId });
402
+ return;
403
+ }
404
+ // Fallback: no checkpoint id from either source (e.g.
405
+ // workspace.spriteName-only, no output, no in-process run() record) —
406
+ // resolve by comment, same as before.
407
+ const comment = input.workspace.checkpointComment ?? "pre-run";
408
+ await sprites.restore({ id: spriteId, comment });
409
+ },
410
+ };
411
+ }
412
+ // ── run() helpers ────────────────────────────────────────────────────────
413
+ /** The conventional path `run()` writes the staged prompt to and reads the sole artifact from — the same `/work/*` convention `examples/sprites-agent-task/ops/agent-task.op.ts`'s Stage/Collect phases use. */
414
+ const PROMPT_PATH = "/work/prompt";
415
+ const OUTPUT_PATH = "/work/output";
416
+ /** `sha256:<hex>` over a string: ../../content-digest.ts's `contentDigest`, the same digest ./build-archive.ts uses. */
417
+ const sha256Digest = contentDigest;
418
+ const EMPTY_DIGEST = sha256Digest("");
419
+ /**
420
+ * Compute the transcript digest that becomes (the digest component of)
421
+ * `provenance.sourceRef` and `attestationRef` — see this module's doc
422
+ * comment, "Hash basis," for the precise field list/order and the rationale
423
+ * for hashing rather than embedding each free-text field. Exported so a
424
+ * caller (or a test) can independently recompute/verify the same digest from
425
+ * the same run() inputs/outputs, without reaching into this module's private
426
+ * `run()` closure.
427
+ */
428
+ export function computeTranscriptDigest(params) {
429
+ const basis = {
430
+ agent: params.agent,
431
+ promptDigest: sha256Digest(params.prompt),
432
+ images: (params.images ?? []).map((img) => ({ mediaType: img.media_type, digest: sha256Digest(img.data) })),
433
+ status: params.turn.status,
434
+ exitCode: params.turn.exitCode,
435
+ stdoutDigest: sha256Digest(params.stdout),
436
+ stderrDigest: sha256Digest(params.stderr),
437
+ artifacts: [...params.artifacts.files]
438
+ // Code-point ordering, not localeCompare: the digest must be identical
439
+ // across machines regardless of ICU/locale configuration.
440
+ .sort((a, b) => (a.path < b.path ? -1 : a.path > b.path ? 1 : 0))
441
+ .map((f) => ({ path: f.path, digest: f.digest })),
442
+ diffDigest: sha256Digest(params.artifacts.diff ?? ""),
443
+ };
444
+ return sha256Digest(JSON.stringify(basis));
445
+ }
446
+ /** The trailing `sha256:<hex>` transcript digest a `provenance.sourceRef`/`attestationRef` ends in — see this module's doc comment, "sourceRef folding." */
447
+ const TRANSCRIPT_DIGEST_PATTERN = /sha256:[0-9a-f]{64}$/i;
448
+ /**
449
+ * Recover the bare transcript digest (`sha256:<hex>`) from a
450
+ * `provenance.sourceRef` or `attestationRef` string, regardless of what (if
451
+ * anything) precedes it — see this module's doc comment, "sourceRef
452
+ * folding," for why anchoring on the fixed `sha256:[0-9a-f]{64}` suffix
453
+ * pattern is unambiguous even when `input.sourceRef` itself contains `@`/`:`.
454
+ */
455
+ export function extractTranscriptDigest(sourceRef) {
456
+ const match = TRANSCRIPT_DIGEST_PATTERN.exec(sourceRef);
457
+ if (!match) {
458
+ throw new Error(`extractTranscriptDigest: "${sourceRef}" does not end in a "sha256:<hex>" transcript digest`);
459
+ }
460
+ return match[0];
461
+ }
462
+ /**
463
+ * `run-agent`'s SLSA `buildDefinition.buildType` — the recipe-kind URI this
464
+ * module's doc comment ("Predicate-type decision, made") settles on in place
465
+ * of minting a new `predicateType`. Mirrors ./sign.ts's own
466
+ * `DEFAULT_BUILD_TYPE` for `docker-build`.
467
+ */
468
+ export const RUN_AGENT_BUILD_TYPE = "https://chant.dev/agent-turn/v1";
469
+ /**
470
+ * Fold a `RunAgentOutput` into a `BuildArchiveEntry` (#1943 design point 2,
471
+ * ./build-archive.ts) — `kind: "asset"`, content-addressed by the same
472
+ * transcript digest `attestationRef` carries. Returns a bare entry (no
473
+ * `reproducibility` assigned); pass it through `addArchiveEntry` for the
474
+ * kind-appropriate `"best-effort"` default (./reproducibility.ts), the same
475
+ * as any other `asset` entry.
476
+ */
477
+ export function toRunAgentArchiveEntry(component, output) {
478
+ return {
479
+ kind: "asset",
480
+ path: `run-agent/${component}/${output.spriteId}-turn.json`,
481
+ digest: extractTranscriptDigest(output.provenance.sourceRef),
482
+ mediaType: "application/json",
483
+ provenance: output.provenance,
484
+ };
485
+ }
486
+ /**
487
+ * Build the in-toto SLSA provenance statement for a completed turn, reusing
488
+ * ./sign.ts's `buildProvenanceStatement` unmodified in behavior for every
489
+ * existing (image) caller — `predicateType` stays
490
+ * `"https://slsa.dev/provenance/v1"`, only `buildType` and the
491
+ * `external`/`internalParameters` merge fields (#1943's minimal, documented
492
+ * extension to `BuildProvenanceStatementInput`) differ. See this module's
493
+ * doc comment, "Fountain-supplied facts, honestly scoped," for exactly what
494
+ * is (and is not yet) folded in. The returned statement's `subject` is
495
+ * `output.attestationRef` — sign+attach it the same way `attest-provenance`
496
+ * already does for any other digest-qualified reference.
497
+ */
498
+ export function buildRunAgentProvenanceStatement(input, output, builderId, opts) {
499
+ return buildProvenanceStatement({
500
+ imageRef: output.attestationRef,
501
+ provenance: output.provenance,
502
+ builderId,
503
+ buildType: RUN_AGENT_BUILD_TYPE,
504
+ externalParameters: { agent: input.agent },
505
+ internalParameters: {
506
+ spriteId: output.spriteId,
507
+ checkpointId: output.checkpointId,
508
+ turnStatus: output.turn.status,
509
+ turnExitCode: output.turn.exitCode,
510
+ },
511
+ finishedOn: opts?.finishedOn ?? output.turn.endedAt ?? undefined,
512
+ invocationId: opts?.invocationId,
513
+ });
514
+ }
515
+ /**
516
+ * Map `RunAgentInput.agent` to the one-shot, non-interactive command that
517
+ * reads the staged prompt (`PROMPT_PATH`) and runs it inside the sprite. Each
518
+ * known `RunAgentRuntime` gets its real CLI invocation; any other value is
519
+ * passed through verbatim as a literal command — a real-world escape hatch
520
+ * for a custom binary already present in the sprite image, and how this
521
+ * module's own tests drive a scripted failure/success against the offline
522
+ * fake without needing a real CLI. See this module's doc comment ("Still
523
+ * open, left for later phases") for why no fountain resolution happens here.
524
+ */
525
+ export function buildRuntimeCommand(agent) {
526
+ switch (agent) {
527
+ case "claude":
528
+ return `claude -p "$(cat ${PROMPT_PATH})" --output-format json`;
529
+ case "codex":
530
+ return `codex exec "$(cat ${PROMPT_PATH})"`;
531
+ case "gemini":
532
+ return `gemini -p "$(cat ${PROMPT_PATH})"`;
533
+ case "opencode":
534
+ return `opencode run "$(cat ${PROMPT_PATH})"`;
535
+ default:
536
+ return agent;
537
+ }
538
+ }
539
+ /** Deterministic-enough default sprite name when `workspace.spriteName` is omitted — not required to be reproducible across calls (see this module's doc comment on rollback identity: the `WeakMap` is what makes rollback work, not the name shape). */
540
+ function generateSpriteName(ctx) {
541
+ const suffix = Math.random().toString(36).slice(2, 10);
542
+ return `run-agent-${ctx.component}-${suffix}`.replace(/[^a-zA-Z0-9._-]/g, "-");
543
+ }
544
+ /**
545
+ * Match the "not found" error shape `lexicons/fly/src/op/activities/
546
+ * sprite-fs.ts`'s `spriteReadFile` throws for a 404 specifically (`sprite
547
+ * <id> read <path>: not found`) — distinct from that same module's >=300
548
+ * `"... failed (<status>): ..."` shape, which is a genuine infra failure. The
549
+ * match is narrow on purpose, mirroring how `lexicons/fly/src/components/
550
+ * run-agent.ts`'s `parseSpriteExecFailure` only reclassifies the one thrown
551
+ * shape it recognizes and lets everything else through.
552
+ */
553
+ function isArtifactNotFoundError(err) {
554
+ return err instanceof Error && /^sprite .+ read .+: not found$/.test(err.message);
555
+ }
556
+ /**
557
+ * Read `OUTPUT_PATH` as the turn's sole artifact, when present. Only a
558
+ * "not found" read (no artifact was ever written — e.g. a failed turn that
559
+ * never got that far) is treated as "no artifact"; any other error (a
560
+ * genuine transport/infra failure, or a real "failed (<status>)" from the
561
+ * sprite filesystem API) is rethrown so it propagates as a `run()` rejection
562
+ * and triggers saga rollback, instead of being silently swallowed into an
563
+ * empty `artifacts.files`.
564
+ */
565
+ async function collectArtifacts(sprites, spriteId) {
566
+ try {
567
+ const { content } = await sprites.readFile({ id: spriteId, path: OUTPUT_PATH });
568
+ return { files: [{ path: OUTPUT_PATH, digest: sha256Digest(content) }] };
569
+ }
570
+ catch (err) {
571
+ if (isArtifactNotFoundError(err))
572
+ return { files: [] };
573
+ throw err;
574
+ }
575
+ }
576
+ /** Default `run-agent` capability, backed by the not-wired-yet placeholder `SpriteActivities`. */
577
+ export const runAgentCapability = createRunAgentCapability();