@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,251 @@
1
+ /**
2
+ * The identity contract (#1982) — which principal chant would act as in each
3
+ * substrate, reported before it acts.
4
+ *
5
+ * Every native observer already resolves this. `ObserverAdapter.bind()`
6
+ * (./observation.ts) reaches the provider on the applier's own transport, the
7
+ * k8s connector resolves a kubeconfig context and says which binding produced
8
+ * it, the aws read client resolves a region and an endpoint. All of it is
9
+ * discarded. The only way the answer has ever surfaced is as an `unobserved`
10
+ * entry with reason `no-credentials`, or — worse — as a successful read
11
+ * against the wrong account.
12
+ *
13
+ * A project spanning aws, k8s, gcp and github reaches four substrates with
14
+ * four credential sets, and nothing says which identity each one resolves to.
15
+ * `chant lifecycle whoami <env>` asks each configured lexicon that question
16
+ * and prints one row per lexicon.
17
+ *
18
+ * ## The tri-state
19
+ *
20
+ * The same discipline the observation contract draws between "absent" and
21
+ * "not observed" applies here, because the same mistake is available: an empty
22
+ * identity reads as "nobody", and "nobody" is not what "I could not find out"
23
+ * means.
24
+ *
25
+ * - **REPORTED** — the lexicon asked the substrate and it answered. A
26
+ * principal, a scope, and where the binding came from.
27
+ * - **UNRESOLVED** — the lexicon tried and could not, carrying a total
28
+ * {@link UnobservedReason}. `no-credentials` is "no identity is
29
+ * configured"; `no-binding` and `read-failed` are "could not determine".
30
+ * Those are different answers and the reason keeps them apart.
31
+ * - **NOT REPORTED** — the lexicon implements no {@link
32
+ * import("./lexicon.js").LexiconPlugin.describeIdentity}. It answers for
33
+ * nothing, which is honest; it is never rendered as an empty identity.
34
+ *
35
+ * ## Read-only, and never a gate
36
+ *
37
+ * `whoami` mutates nothing and blocks nothing. It exits 0 whatever the rows
38
+ * say unless the caller asks for a non-zero exit on an unresolved row with
39
+ * `--strict`. A lexicon's implementation is held to the same rule: a self-query
40
+ * that reaches the substrate must be one the substrate treats as a read of the
41
+ * caller's own identity.
42
+ *
43
+ * ## No credential ever reaches the output
44
+ *
45
+ * An identity is a principal and a scope — an account id, a project, an org, a
46
+ * cluster context, a service-account name. It is never a token, a key, a
47
+ * password or a certificate. The rule is on the lexicon: report the fact, not
48
+ * the value, and where a substrate's only identity signal IS a secret, say so
49
+ * without it.
50
+ *
51
+ * {@link redactCredentialMaterial} is the backstop core applies to every field
52
+ * of every row regardless, not a license to be careless. It is deliberately
53
+ * structural rather than heuristic — it redacts what the process actually
54
+ * holds in a credential-shaped environment variable, plus the three literal
55
+ * shapes (PEM block, JWT, `Bearer …`) that no principal string can be — so an
56
+ * account id, an ARN and a `system:serviceaccount:…` subject survive it intact.
57
+ */
58
+ /** True when a lexicon answered with a typed refusal rather than an identity. */
59
+ export function isUnresolvedIdentity(value) {
60
+ return typeof value === "object" && value !== null && "unresolved" in value;
61
+ }
62
+ /** The marker a redacted field carries. Fixed text so a consumer can match it. */
63
+ export const REDACTED = "[redacted]";
64
+ /**
65
+ * Environment variables whose VALUE is credential material. Matched on the
66
+ * name, so a lexicon that echoes one of these into an identity string has the
67
+ * value removed before it is printed or serialized.
68
+ */
69
+ export const CREDENTIAL_ENV_NAME = /(SECRET|TOKEN|PASSWORD|PASSWD|CREDENTIAL|PRIVATE_KEY|APIKEY|API_KEY|ACCESS_KEY|SESSION_KEY|AUTH)/i;
70
+ /** Shortest env value worth redacting. Below this a "secret" is a false positive. */
71
+ const MIN_CREDENTIAL_LENGTH = 8;
72
+ /**
73
+ * Literal credential shapes. Each is something a principal string cannot be,
74
+ * so matching one is proof rather than a guess.
75
+ */
76
+ export const CREDENTIAL_SHAPES = [
77
+ // A PEM block of any key type.
78
+ /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g,
79
+ // A JWT: three base64url segments, the first starting with the `{"` header.
80
+ /\beyJ[A-Za-z0-9_-]{4,}\.[A-Za-z0-9_-]{4,}\.[A-Za-z0-9_-]*/g,
81
+ // An `Authorization`-style scheme plus its value.
82
+ /\b(?:Bearer|Basic)\s+[A-Za-z0-9\-._~+/]{16,}={0,2}/g,
83
+ ];
84
+ /**
85
+ * Provider-prefixed access tokens, by their issuer's own prefix (#2356).
86
+ *
87
+ * Separate from {@link CREDENTIAL_SHAPES} because these are a **denylist of
88
+ * known formats** rather than proof-by-shape. A prefix nobody has added here —
89
+ * a new provider, an internal issuer, a bare random string — passes every one
90
+ * of them, and any caller relying on this must say so rather than claim
91
+ * coverage. What it does buy is that the tokens people actually paste are
92
+ * caught wherever they appear, whatever the field is called.
93
+ *
94
+ * The suffix bound is deliberately short. The prefix is the signal; a truncated
95
+ * or example token is still somebody having written a credential down.
96
+ */
97
+ export const CREDENTIAL_TOKEN_SHAPES = [
98
+ { name: "a GitHub token", re: /\b(?:ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{6,}\b/g },
99
+ { name: "a GitHub fine-grained token", re: /\bgithub_pat_[A-Za-z0-9_]{6,}\b/g },
100
+ { name: "a GitLab personal access token", re: /\bglpat-[A-Za-z0-9_-]{3,}\b/g },
101
+ { name: "an OpenAI-style secret key", re: /\bsk-(?:live-|proj-|test-)?[A-Za-z0-9]{6,}\b/g },
102
+ { name: "a Stripe key", re: /\b[rs]k_(?:live|test)_[A-Za-z0-9]{6,}\b/g },
103
+ { name: "a Slack token", re: /\bxox[abposr]-[A-Za-z0-9-]{6,}\b/g },
104
+ { name: "an AWS access key id", re: /\b(?:AKIA|ASIA)[0-9A-Z]{16}\b/g },
105
+ { name: "a Google API key", re: /\bAIza[0-9A-Za-z_-]{20,}\b/g },
106
+ { name: "a Google OAuth token", re: /\bya29\.[0-9A-Za-z_-]{10,}/g },
107
+ { name: "an npm token", re: /\bnpm_[A-Za-z0-9]{10,}\b/g },
108
+ ];
109
+ /**
110
+ * Strip credential material from one reported field.
111
+ *
112
+ * Two rules, both structural. Any value this process holds in a
113
+ * credential-named environment variable is replaced wherever it appears, which
114
+ * covers the realistic accident — a lexicon echoing `$GITHUB_TOKEN` or
115
+ * `$AWS_SECRET_ACCESS_KEY` into a `source`. And the three literal shapes above
116
+ * are replaced on sight.
117
+ *
118
+ * Nothing is entropy-scored, so an ARN, an account id, a service-account email
119
+ * and a cluster context name pass through unchanged — which matters, because a
120
+ * mangled principal is a wrong answer, not a safe one.
121
+ */
122
+ export function redactCredentialMaterial(value, env = process.env) {
123
+ let out = value;
124
+ for (const [name, secret] of Object.entries(env)) {
125
+ if (!secret || secret.length < MIN_CREDENTIAL_LENGTH)
126
+ continue;
127
+ if (!CREDENTIAL_ENV_NAME.test(name))
128
+ continue;
129
+ if (!out.includes(secret))
130
+ continue;
131
+ out = out.split(secret).join(REDACTED);
132
+ }
133
+ for (const shape of CREDENTIAL_SHAPES)
134
+ out = out.replace(shape, REDACTED);
135
+ // Provider-prefixed tokens too (#2356): these are the ones people paste, and
136
+ // the three shapes above match none of them.
137
+ for (const { re } of CREDENTIAL_TOKEN_SHAPES)
138
+ out = out.replace(re, REDACTED);
139
+ return out;
140
+ }
141
+ /** Apply {@link redactCredentialMaterial} to every free-text field of a row. */
142
+ export function redactIdentityRow(row, env = process.env) {
143
+ const clean = (v) => v === undefined ? undefined : redactCredentialMaterial(v, env);
144
+ return {
145
+ ...row,
146
+ ...(row.identity !== undefined ? { identity: clean(row.identity) } : {}),
147
+ ...(row.scope !== undefined ? { scope: clean(row.scope) } : {}),
148
+ ...(row.source !== undefined ? { source: clean(row.source) } : {}),
149
+ ...(row.endpoint !== undefined ? { endpoint: clean(row.endpoint) } : {}),
150
+ ...(row.detail !== undefined ? { detail: clean(row.detail) } : {}),
151
+ };
152
+ }
153
+ /**
154
+ * Normalize one lexicon's answer into a row.
155
+ *
156
+ * Every degradation lands somewhere honest. No method at all is NOT REPORTED.
157
+ * A throw is UNRESOLVED with `read-failed` — the lexicon reached for the
158
+ * substrate and something broke, which is a different claim from having no
159
+ * credentials. An answer that carries no identity string is UNRESOLVED too: a
160
+ * lexicon cannot report an empty principal, because an empty principal renders
161
+ * as "acting as nobody", and nobody is a claim.
162
+ */
163
+ export function identityRowFor(lexicon, result, env = process.env) {
164
+ if (result === undefined)
165
+ return { lexicon, status: "not-reported" };
166
+ if (isUnresolvedIdentity(result)) {
167
+ return redactIdentityRow({
168
+ lexicon,
169
+ status: "unresolved",
170
+ reason: result.unresolved.reason,
171
+ ...(result.unresolved.detail ? { detail: result.unresolved.detail } : {}),
172
+ }, env);
173
+ }
174
+ if (!result.identity || result.identity.trim() === "") {
175
+ return {
176
+ lexicon,
177
+ status: "unresolved",
178
+ reason: "read-failed",
179
+ detail: "the lexicon reported an identity with no principal in it",
180
+ };
181
+ }
182
+ return redactIdentityRow({
183
+ lexicon,
184
+ status: "reported",
185
+ identity: result.identity,
186
+ scope: result.scope,
187
+ source: result.source,
188
+ ...(result.endpoint ? { endpoint: result.endpoint } : {}),
189
+ }, env);
190
+ }
191
+ /**
192
+ * Ask every plugin who it would act as. One call per lexicon, concurrently,
193
+ * in the order the plugins were configured so the report is stable.
194
+ *
195
+ * A plugin that throws never fails the run: the throw becomes that lexicon's
196
+ * UNRESOLVED row. Reporting is the whole point, and a report that aborts on
197
+ * the first broken substrate is exactly the report nobody can use.
198
+ */
199
+ export async function describeIdentities(plugins, options, env = process.env) {
200
+ return Promise.all(plugins.map(async (plugin) => {
201
+ if (!plugin.describeIdentity)
202
+ return { lexicon: plugin.name, status: "not-reported" };
203
+ try {
204
+ return identityRowFor(plugin.name, await plugin.describeIdentity(options), env);
205
+ }
206
+ catch (err) {
207
+ return identityRowFor(plugin.name, {
208
+ unresolved: {
209
+ reason: "read-failed",
210
+ detail: err instanceof Error ? err.message : String(err),
211
+ },
212
+ }, env);
213
+ }
214
+ }));
215
+ }
216
+ /**
217
+ * A row's verdict as one short cell, for the IDENTITY column. Deliberately
218
+ * without the `detail`, which is a sentence and belongs under the table rather
219
+ * than inside a column every other row has to be padded to.
220
+ */
221
+ export function identityStatusText(row) {
222
+ switch (row.status) {
223
+ case "reported":
224
+ return row.identity ?? "";
225
+ case "unresolved":
226
+ return `could not determine — ${unresolvedReasonText(row.reason)}`;
227
+ case "not-reported":
228
+ return "not reported — this lexicon does not answer for an identity";
229
+ }
230
+ }
231
+ /**
232
+ * Why an identity did not resolve, in words. Deliberately distinct from
233
+ * `unobservedReasonText`: `no-credentials` here means "no identity is
234
+ * configured for this substrate", which is an answer, not a failure to look.
235
+ */
236
+ export function unresolvedReasonText(reason) {
237
+ switch (reason) {
238
+ case "no-credentials":
239
+ return "no identity is configured for this substrate";
240
+ case "no-binding":
241
+ return "this environment resolves to no target";
242
+ case "read-failed":
243
+ return "the substrate was reached and the self-query failed";
244
+ case "unsupported-kind":
245
+ return "the substrate exposes no self-query";
246
+ case "filtered":
247
+ return "withheld";
248
+ default:
249
+ return "no reason given";
250
+ }
251
+ }
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Base class for template value parsers.
3
+ *
4
+ * Implements the generic recursive walk: null → array → single-key
5
+ * intrinsic dispatch → plain object → primitive. Subclasses provide
6
+ * format-specific intrinsic dispatch.
7
+ */
8
+ export class BaseValueParser {
9
+ /**
10
+ * Parse a value recursively: null → array → single-key intrinsic → object → primitive.
11
+ */
12
+ parseValue(value) {
13
+ if (value === null || value === undefined)
14
+ return value;
15
+ if (Array.isArray(value)) {
16
+ return value.map((v) => this.parseValue(v));
17
+ }
18
+ if (typeof value === "object") {
19
+ const obj = value;
20
+ const keys = Object.keys(obj);
21
+ if (keys.length === 1) {
22
+ const result = this.dispatchIntrinsic(keys[0], obj[keys[0]], obj);
23
+ if (result !== null)
24
+ return result;
25
+ }
26
+ const parsed = {};
27
+ for (const [k, v] of Object.entries(obj)) {
28
+ parsed[k] = this.parseValue(v);
29
+ }
30
+ return parsed;
31
+ }
32
+ return value;
33
+ }
34
+ }
@@ -0,0 +1,255 @@
1
+ /**
2
+ * Content embedded in another lexicon's resources, imported by the lexicon
3
+ * that owns it (#2962).
4
+ *
5
+ * A Kubernetes ConfigMap holding a collector's `config.yaml`, a
6
+ * `PrometheusRule` whose `spec.groups` are Prometheus rule groups, and a
7
+ * ConfigMap holding Grafana dashboard JSON all carry another lexicon's
8
+ * source inside a k8s resource. The host lexicon's parser (k8s) finds such
9
+ * content and offers it here; the lexicon that can import it (otel,
10
+ * prometheus, grafana) declares so with `LexiconPlugin.embeddedImporters()`.
11
+ * Core matches the two at run time, so the host needs no dependency on the
12
+ * owner: when the owner is not installed the content stays as written, with
13
+ * a warning.
14
+ *
15
+ * The flow, driven by `chant import`:
16
+ *
17
+ * 1. The host's `TemplateParser.parse(content, context)` calls
18
+ * `context.embedded.resolve(site)` for each place content can be
19
+ * embedded, and puts the `EmbeddedReference` it gets back into its IR in
20
+ * place of the raw value. `undefined` means keep the raw value.
21
+ * 2. The owner's `EmbeddedContentImporter.import(site)` returns the modules
22
+ * declaring the content and how the host's value is built from them
23
+ * (`collectorYaml([...])`, a list of rule groups, `dashboardJson(...)`).
24
+ * 3. Core writes those modules in a directory of their own beside the
25
+ * host's files, and the host's generator renders the reference with
26
+ * `renderEmbeddedReference`, which also writes the imports it needs.
27
+ */
28
+ import { posix } from "path";
29
+ import { parseYAMLDocument, splitYAMLDocuments } from "../yaml.js";
30
+ export function isEmbeddedReference(value) {
31
+ if (typeof value !== "object" || value === null || Array.isArray(value))
32
+ return false;
33
+ const e = value.$embedded;
34
+ return (typeof e === "object" &&
35
+ e !== null &&
36
+ Array.isArray(e.value?.bindings));
37
+ }
38
+ // ── the registry ─────────────────────────────────────────────────────
39
+ function isObject(v) {
40
+ return typeof v === "object" && v !== null && !Array.isArray(v);
41
+ }
42
+ /** The document a text holds: JSON, or a single YAML document. Undefined for anything else. */
43
+ export function embeddedDocument(text) {
44
+ try {
45
+ return JSON.parse(text);
46
+ }
47
+ catch {
48
+ // Not JSON: try YAML.
49
+ }
50
+ const docs = splitYAMLDocuments(text);
51
+ if (docs.length !== 1)
52
+ return undefined;
53
+ let doc;
54
+ try {
55
+ doc = parseYAMLDocument(docs[0]);
56
+ }
57
+ catch {
58
+ return undefined;
59
+ }
60
+ // Text that is not YAML (`just text`, `KEY=value` lines) makes core's YAML
61
+ // reader throw, caught above (#2991); an empty or comment-only text reads
62
+ // as an empty mapping. Neither is a document.
63
+ if (typeof doc === "object" && doc !== null && Object.keys(doc).length === 0)
64
+ return undefined;
65
+ return doc;
66
+ }
67
+ /** A directory name: lower-case letters, digits and `-`. */
68
+ function slug(text) {
69
+ const s = text
70
+ .replace(/([a-z0-9])([A-Z])/g, "$1-$2")
71
+ .toLowerCase()
72
+ .replace(/[^a-z0-9]+/g, "-")
73
+ .replace(/^-+|-+$/g, "");
74
+ return s === "" ? "embedded" : s;
75
+ }
76
+ /**
77
+ * Resolves embedded content against the importers registered for one
78
+ * import, and collects what the imports produce: the files to write beside
79
+ * the host's and the warnings to print. `offered` lists every piece of
80
+ * content the host offered, claimed or not.
81
+ */
82
+ export class EmbeddedImports {
83
+ /**
84
+ * @param importers what the installed lexicons registered, in the order they are asked
85
+ * @param options.quiet collect `offered` only, with no warnings (a probe before the importers are known)
86
+ */
87
+ constructor(importers = [], options = {}) {
88
+ this.importers = importers;
89
+ this.options = options;
90
+ this.offered = [];
91
+ this.files = [];
92
+ this.warnings = [];
93
+ this.directories = new Set();
94
+ }
95
+ resolve(offered) {
96
+ const content = offered.document === undefined && typeof offered.text === "string"
97
+ ? { ...offered, document: embeddedDocument(offered.text) }
98
+ : offered;
99
+ this.offered.push(content);
100
+ const matching = this.importers.filter(({ importer }) => {
101
+ try {
102
+ return importer.matches(content);
103
+ }
104
+ catch {
105
+ return false;
106
+ }
107
+ });
108
+ const [chosen, ...others] = matching;
109
+ if (!chosen) {
110
+ const owner = content.expectedOwner;
111
+ if (owner && !this.options.quiet) {
112
+ this.warnings.push(`${content.location} looks like ${owner.what}, and no installed lexicon imports it, so it is kept as written. ` +
113
+ `Install @intentius/chant-lexicon-${owner.lexicon} (or a version that imports embedded content) to import it as typed declarations.`);
114
+ }
115
+ return undefined;
116
+ }
117
+ if (others.length > 0) {
118
+ this.warnings.push(`${content.location} is also importable by ${others.map((o) => o.lexicon).join(", ")}; imported with ${chosen.lexicon}.`);
119
+ }
120
+ const kept = chosen.importer.keepsAsWritten?.(content);
121
+ if (kept !== undefined) {
122
+ this.warnings.push(`${content.location} is ${chosen.importer.what}, kept as written: ${kept}`);
123
+ return undefined;
124
+ }
125
+ let result;
126
+ try {
127
+ result = chosen.importer.import(content);
128
+ }
129
+ catch (err) {
130
+ this.warnings.push(`${content.location} looks like ${chosen.importer.what}, but the ${chosen.lexicon} import failed, so it is kept as written: ` +
131
+ (err instanceof Error ? err.message : String(err)));
132
+ return undefined;
133
+ }
134
+ const dir = this.claimDirectory(content.directory);
135
+ const local = new Set(result.files.map((f) => f.path));
136
+ const rebase = (from) => (local.has(from) ? `${dir}/${from}` : from);
137
+ for (const f of result.files)
138
+ this.files.push({ path: `${dir}/${f.path}`, content: f.content });
139
+ for (const w of result.warnings ?? [])
140
+ this.warnings.push(`${content.location}: ${w}`);
141
+ const v = result.value;
142
+ const value = {
143
+ bindings: v.bindings.map((b) => ({ ...b, from: rebase(b.from) })),
144
+ shape: v.shape,
145
+ ...(v.through ? { through: { ...v.through, from: rebase(v.through.from) } } : {}),
146
+ };
147
+ return {
148
+ $embedded: { lexicon: chosen.lexicon, what: chosen.importer.what, location: content.location, value },
149
+ };
150
+ }
151
+ claimDirectory(name) {
152
+ const base = slug(name);
153
+ let dir = base;
154
+ for (let n = 2; this.directories.has(dir); n++)
155
+ dir = `${base}-${n}`;
156
+ this.directories.add(dir);
157
+ return dir;
158
+ }
159
+ }
160
+ // ── rendering ────────────────────────────────────────────────────────
161
+ const RESERVED = new Set(("break case catch class const continue debugger default delete do else enum export extends false finally for " +
162
+ "function if import in instanceof new null return super switch this throw true try typeof var void while with " +
163
+ "yield let static implements interface package private protected public await arguments eval undefined").split(" "));
164
+ /**
165
+ * The imports one generated module needs for the references it renders.
166
+ * Names are made unique against the module's own declarations: a second
167
+ * `otlp` from another collector's directory is imported as `otlp2`.
168
+ */
169
+ export class EmbeddedImportScope {
170
+ /**
171
+ * @param fromDir the directory of the module being generated, relative to the output directory (`""` for its top)
172
+ * @param taken names the module already declares or imports
173
+ */
174
+ constructor(fromDir, taken = []) {
175
+ this.fromDir = fromDir;
176
+ /** specifier -> exported name -> local name */
177
+ this.bySpecifier = new Map();
178
+ this.taken = new Set(taken);
179
+ }
180
+ /** The local name `name`, exported by `from` (a package or an output-relative path), is used under. */
181
+ bind(from, name) {
182
+ const spec = this.specifier(from);
183
+ let names = this.bySpecifier.get(spec);
184
+ if (!names) {
185
+ names = new Map();
186
+ this.bySpecifier.set(spec, names);
187
+ }
188
+ const existing = names.get(name);
189
+ if (existing)
190
+ return existing;
191
+ let local = name;
192
+ for (let n = 2; this.taken.has(local) || RESERVED.has(local); n++)
193
+ local = `${name}${n}`;
194
+ this.taken.add(local);
195
+ names.set(name, local);
196
+ return local;
197
+ }
198
+ /** The import statements, packages first, then local modules, each sorted. */
199
+ lines() {
200
+ const specs = [...this.bySpecifier.keys()].sort((a, b) => {
201
+ const la = a.startsWith("."), lb = b.startsWith(".");
202
+ return la === lb ? a.localeCompare(b) : la ? 1 : -1;
203
+ });
204
+ return specs.map((spec) => {
205
+ const entries = [...this.bySpecifier.get(spec)].sort(([a], [b]) => a.localeCompare(b));
206
+ const list = entries.map(([name, local]) => (name === local ? name : `${name} as ${local}`));
207
+ const one = `import { ${list.join(", ")} } from "${spec}";`;
208
+ return one.length <= 100 ? one : `import {\n${list.map((n) => ` ${n},`).join("\n")}\n} from "${spec}";`;
209
+ });
210
+ }
211
+ specifier(from) {
212
+ if (!from.endsWith(".ts"))
213
+ return from;
214
+ let rel = posix.relative(this.fromDir || ".", from.replace(/\.ts$/, ""));
215
+ if (!rel.startsWith("."))
216
+ rel = `./${rel}`;
217
+ return rel;
218
+ }
219
+ }
220
+ /**
221
+ * The TypeScript expression for a reference, binding its names in `scope`.
222
+ * A list longer than one line is broken one binding per line, indented from
223
+ * `indent` spaces.
224
+ */
225
+ export function renderEmbeddedReference(ref, scope, indent = 0) {
226
+ const { value } = ref.$embedded;
227
+ const items = value.bindings.map((b) => `${scope.bind(b.from, b.name)}${b.member ? `.${b.member}` : ""}`);
228
+ let inner;
229
+ if (value.shape === "single") {
230
+ if (items.length !== 1)
231
+ throw new Error(`${ref.$embedded.location}: a single embedded value needs exactly one binding`);
232
+ inner = items[0];
233
+ }
234
+ else {
235
+ const one = `[${items.join(", ")}]`;
236
+ const pad = " ".repeat(indent);
237
+ inner = one.length <= 80 ? one : `[\n${items.map((i) => `${pad} ${i},`).join("\n")}\n${pad}]`;
238
+ }
239
+ return value.through ? `${scope.bind(value.through.from, value.through.name)}(${inner})` : inner;
240
+ }
241
+ /**
242
+ * The names a generated module exports in its `export { … }` list, for an
243
+ * importer whose generator writes one per module (COR004).
244
+ */
245
+ export function exportedNames(content) {
246
+ const names = [];
247
+ for (const m of content.matchAll(/^export\s*\{([^}]*)\};?\s*$/gm)) {
248
+ for (const part of m[1].split(",")) {
249
+ const name = part.trim().split(/\s+as\s+/).pop().trim();
250
+ if (name !== "" && !name.startsWith("type "))
251
+ names.push(name);
252
+ }
253
+ }
254
+ return names;
255
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,85 @@
1
+ /**
2
+ * IR intrinsic scanning utilities.
3
+ *
4
+ * Generic recursive walkers that scan the import IR value trees for
5
+ * intrinsic markers and dependency references.
6
+ */
7
+ /**
8
+ * Check if a value tree contains an intrinsic with the given name.
9
+ * Looks for `{ __intrinsic: name }` objects recursively.
10
+ */
11
+ export function hasIntrinsicInValue(value, name) {
12
+ if (value === null || value === undefined) {
13
+ return false;
14
+ }
15
+ if (Array.isArray(value)) {
16
+ return value.some((item) => hasIntrinsicInValue(item, name));
17
+ }
18
+ if (typeof value === "object") {
19
+ const obj = value;
20
+ if (obj.__intrinsic === name) {
21
+ return true;
22
+ }
23
+ return Object.values(obj).some((v) => hasIntrinsicInValue(v, name));
24
+ }
25
+ return false;
26
+ }
27
+ /**
28
+ * Check if any resource, condition, or output in the IR uses a given intrinsic.
29
+ */
30
+ export function irUsesIntrinsic(ir, name) {
31
+ for (const resource of ir.resources) {
32
+ if (hasIntrinsicInValue(resource.properties, name) ||
33
+ hasIntrinsicInValue(resource.metadata, name) ||
34
+ hasIntrinsicInValue(resource.attributes, name)) {
35
+ return true;
36
+ }
37
+ }
38
+ if (hasIntrinsicInValue(ir.metadata, name))
39
+ return true;
40
+ for (const condition of ir.conditions ?? []) {
41
+ if (hasIntrinsicInValue(condition.expression, name)) {
42
+ return true;
43
+ }
44
+ }
45
+ for (const output of ir.outputs ?? []) {
46
+ if (hasIntrinsicInValue(output.value, name) || hasIntrinsicInValue(output.exportName, name)) {
47
+ return true;
48
+ }
49
+ }
50
+ return false;
51
+ }
52
+ /**
53
+ * Collect dependency references from a value tree.
54
+ *
55
+ * @param value - The value tree to scan
56
+ * @param isDependency - Given an object, returns a logical ID if it represents
57
+ * a dependency, or null otherwise. Each lexicon provides its own predicate.
58
+ */
59
+ export function collectDependencies(value, isDependency) {
60
+ const deps = new Set();
61
+ collectDepsRecursive(value, isDependency, deps);
62
+ return deps;
63
+ }
64
+ function collectDepsRecursive(value, isDependency, deps) {
65
+ if (value === null || value === undefined)
66
+ return;
67
+ if (Array.isArray(value)) {
68
+ for (const item of value) {
69
+ collectDepsRecursive(item, isDependency, deps);
70
+ }
71
+ return;
72
+ }
73
+ if (typeof value === "object") {
74
+ const obj = value;
75
+ const dep = isDependency(obj);
76
+ if (dep !== null) {
77
+ deps.add(dep);
78
+ }
79
+ else {
80
+ for (const v of Object.values(obj)) {
81
+ collectDepsRecursive(v, isDependency, deps);
82
+ }
83
+ }
84
+ }
85
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Check `--parser-option` entries (`key` or `key=value`) against what the
3
+ * lexicon declares in `parserOptions()` and convert each value to its declared
4
+ * type (#2994). Returns the options, or an error message naming what is wrong
5
+ * and what the lexicon accepts. An empty list is always valid.
6
+ */
7
+ export function resolveParserOptions(plugin, entries) {
8
+ const options = {};
9
+ if (!entries || entries.length === 0)
10
+ return { options };
11
+ const specs = plugin.parserOptions?.() ?? [];
12
+ const accepted = specs.length === 0
13
+ ? `lexicon "${plugin.name}" declares no parser options`
14
+ : `${plugin.name} accepts: ${specs.map((s) => `${s.name} (${s.type}): ${s.description}`).join("; ")}`;
15
+ for (const entry of entries) {
16
+ const eq = entry.indexOf("=");
17
+ const name = eq === -1 ? entry : entry.slice(0, eq);
18
+ const raw = eq === -1 ? undefined : entry.slice(eq + 1);
19
+ const spec = specs.find((s) => s.name === name);
20
+ if (!spec) {
21
+ return { error: `Unknown parser option "${name}" for lexicon "${plugin.name}"; ${accepted}.` };
22
+ }
23
+ if (spec.type === "boolean") {
24
+ if (raw === undefined || raw === "true")
25
+ options[name] = true;
26
+ else if (raw === "false")
27
+ options[name] = false;
28
+ else
29
+ return { error: `Parser option "${name}" is a boolean: use ${name}, ${name}=true or ${name}=false, got "${raw}".` };
30
+ }
31
+ else if (raw === undefined) {
32
+ return { error: `Parser option "${name}" needs a value: --parser-option ${name}=<${spec.type}>.` };
33
+ }
34
+ else if (spec.type === "number") {
35
+ const n = Number(raw);
36
+ if (raw.trim() === "" || !Number.isFinite(n))
37
+ return { error: `Parser option "${name}" is a number, got "${raw}".` };
38
+ options[name] = n;
39
+ }
40
+ else {
41
+ options[name] = raw;
42
+ }
43
+ }
44
+ return { options };
45
+ }
@@ -0,0 +1 @@
1
+ export {};