@intentius/chant 0.124.13 → 0.124.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (907) hide show
  1. package/bin/chant +11 -0
  2. package/dist/agents/checks.js +326 -0
  3. package/dist/agents/discover.js +885 -0
  4. package/dist/agents/importer.js +17 -0
  5. package/dist/agents/index.js +12 -0
  6. package/dist/agents/types.js +19 -0
  7. package/dist/apply.js +151 -0
  8. package/dist/attrref.js +70 -0
  9. package/dist/audit/catalog.js +350 -0
  10. package/dist/audit/core.js +252 -0
  11. package/dist/audit/discover.js +633 -0
  12. package/dist/audit/fetch.js +666 -0
  13. package/dist/audit/lineage.js +91 -0
  14. package/dist/audit/nginx.js +366 -0
  15. package/dist/audit/prior-art.js +132 -0
  16. package/dist/audit/proof.js +321 -0
  17. package/dist/audit/report-html.js +194 -0
  18. package/dist/audit/report-model.js +198 -0
  19. package/dist/audit/report.js +102 -0
  20. package/dist/audit/rules-doc.js +144 -0
  21. package/dist/audit/secrets.js +405 -0
  22. package/dist/audit/terraform-state.js +140 -0
  23. package/dist/audit/wrangler.js +262 -0
  24. package/dist/behaviour-delta.js +401 -0
  25. package/dist/behaviour-engine.js +357 -0
  26. package/dist/behaviour-graph.js +83 -0
  27. package/dist/behaviour-http.js +188 -0
  28. package/dist/behaviour-kinds.js +172 -0
  29. package/dist/behaviour-overlay.js +50 -0
  30. package/dist/behaviour-predict.js +188 -0
  31. package/dist/behaviour-request.js +194 -0
  32. package/dist/behaviour.js +1325 -0
  33. package/dist/build-params.js +108 -0
  34. package/dist/build.js +668 -0
  35. package/dist/builder.js +44 -0
  36. package/dist/cdk/advise.js +30 -0
  37. package/dist/cdk/assembly.js +122 -0
  38. package/dist/cdk/graph.js +444 -0
  39. package/dist/cdk/tier-map.js +64 -0
  40. package/dist/cdk/types.js +24 -0
  41. package/dist/change-set.js +312 -0
  42. package/dist/child-project.js +21 -0
  43. package/dist/claimed-fields.js +135 -0
  44. package/dist/cli/build-options.js +70 -0
  45. package/dist/cli/build-params-cli.js +139 -0
  46. package/dist/cli/command-group.js +123 -0
  47. package/dist/cli/commands/audit-agents.js +326 -0
  48. package/dist/cli/commands/audit.js +571 -0
  49. package/dist/cli/commands/build.js +920 -0
  50. package/dist/cli/commands/carve-apply.js +153 -0
  51. package/dist/cli/commands/carve-bridge.js +201 -0
  52. package/dist/cli/commands/carve-emit.js +332 -0
  53. package/dist/cli/commands/carve-status.js +119 -0
  54. package/dist/cli/commands/carve.js +204 -0
  55. package/dist/cli/commands/check-lexicon-docs.js +79 -0
  56. package/dist/cli/commands/check-lexicon-examples.js +177 -0
  57. package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
  58. package/dist/cli/commands/check-lexicon-mcp.js +82 -0
  59. package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
  60. package/dist/cli/commands/check-lexicon-plugin.js +104 -0
  61. package/dist/cli/commands/check-lexicon.js +766 -0
  62. package/dist/cli/commands/describe.js +85 -0
  63. package/dist/cli/commands/diff.js +175 -0
  64. package/dist/cli/commands/doctor.js +350 -0
  65. package/dist/cli/commands/import-agents.js +155 -0
  66. package/dist/cli/commands/import.js +670 -0
  67. package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
  68. package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
  69. package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
  70. package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
  71. package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
  72. package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
  73. package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
  74. package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
  75. package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
  76. package/dist/cli/commands/init-lexicon.js +172 -0
  77. package/dist/cli/commands/init.js +381 -0
  78. package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
  79. package/dist/cli/commands/lexicon-surface-diff.js +145 -0
  80. package/dist/cli/commands/licenses.js +125 -0
  81. package/dist/cli/commands/lint.d.ts.map +1 -1
  82. package/dist/cli/commands/lint.js +948 -0
  83. package/dist/cli/commands/list.js +63 -0
  84. package/dist/cli/commands/migrate.d.ts.map +1 -1
  85. package/dist/cli/commands/migrate.js +423 -0
  86. package/dist/cli/commands/onboard.js +403 -0
  87. package/dist/cli/commands/pinned-upgrade.js +191 -0
  88. package/dist/cli/commands/update.js +194 -0
  89. package/dist/cli/commands/vendor.js +217 -0
  90. package/dist/cli/conflict-check.js +104 -0
  91. package/dist/cli/debug.js +8 -0
  92. package/dist/cli/format.js +104 -0
  93. package/dist/cli/handlers/build.js +267 -0
  94. package/dist/cli/handlers/carve-apply.js +30 -0
  95. package/dist/cli/handlers/carve-bridge.js +28 -0
  96. package/dist/cli/handlers/carve-emit.js +50 -0
  97. package/dist/cli/handlers/carve-status.js +26 -0
  98. package/dist/cli/handlers/carve.js +40 -0
  99. package/dist/cli/handlers/change-set.js +46 -0
  100. package/dist/cli/handlers/components.js +730 -0
  101. package/dist/cli/handlers/dev.js +113 -0
  102. package/dist/cli/handlers/emulator.js +233 -0
  103. package/dist/cli/handlers/explain.js +54 -0
  104. package/dist/cli/handlers/fan-out.js +422 -0
  105. package/dist/cli/handlers/gate-resume.js +275 -0
  106. package/dist/cli/handlers/generate.js +84 -0
  107. package/dist/cli/handlers/graph.js +969 -0
  108. package/dist/cli/handlers/init.js +102 -0
  109. package/dist/cli/handlers/lifecycle.js +1727 -0
  110. package/dist/cli/handlers/lint.js +62 -0
  111. package/dist/cli/handlers/migrate.js +48 -0
  112. package/dist/cli/handlers/misc.js +391 -0
  113. package/dist/cli/handlers/operator.js +1162 -0
  114. package/dist/cli/handlers/override-approve.js +102 -0
  115. package/dist/cli/handlers/pr.js +503 -0
  116. package/dist/cli/handlers/promote.js +342 -0
  117. package/dist/cli/handlers/run-generate.js +206 -0
  118. package/dist/cli/handlers/run-wave.js +66 -0
  119. package/dist/cli/handlers/run.js +1191 -0
  120. package/dist/cli/handlers/scenario.js +325 -0
  121. package/dist/cli/handlers/search.js +924 -0
  122. package/dist/cli/handlers/serve.js +32 -0
  123. package/dist/cli/handlers/vendor.js +154 -0
  124. package/dist/cli/index.js +3 -0
  125. package/dist/cli/is-entry-point.js +23 -0
  126. package/dist/cli/lsp/capabilities.js +28 -0
  127. package/dist/cli/lsp/diagnostics.js +34 -0
  128. package/dist/cli/lsp/server.js +329 -0
  129. package/dist/cli/main.d.ts.map +1 -1
  130. package/dist/cli/main.js +2540 -0
  131. package/dist/cli/mcp/lifecycle-tools.js +80 -0
  132. package/dist/cli/mcp/op-tools.js +306 -0
  133. package/dist/cli/mcp/resource-handlers.js +258 -0
  134. package/dist/cli/mcp/resources/context.js +85 -0
  135. package/dist/cli/mcp/server.js +353 -0
  136. package/dist/cli/mcp/tools/build.js +111 -0
  137. package/dist/cli/mcp/tools/composites.js +95 -0
  138. package/dist/cli/mcp/tools/explain.js +166 -0
  139. package/dist/cli/mcp/tools/import.js +49 -0
  140. package/dist/cli/mcp/tools/lint.js +41 -0
  141. package/dist/cli/mcp/tools/scaffold.js +111 -0
  142. package/dist/cli/mcp/tools/search.js +112 -0
  143. package/dist/cli/mcp/types.js +1 -0
  144. package/dist/cli/mcp/workspace-plugins.js +91 -0
  145. package/dist/cli/mcp/workspace-tools.d.ts +1 -1
  146. package/dist/cli/mcp/workspace-tools.js +564 -0
  147. package/dist/cli/mcp-config.js +70 -0
  148. package/dist/cli/plugins.js +313 -0
  149. package/dist/cli/registry.js +23 -0
  150. package/dist/cli/reporters/stylish.js +329 -0
  151. package/dist/cli/version.js +15 -0
  152. package/dist/cli/watch.js +79 -0
  153. package/dist/codegen/bound-property-types.js +82 -0
  154. package/dist/codegen/coverage.js +119 -0
  155. package/dist/codegen/docs-file-markers.js +60 -0
  156. package/dist/codegen/docs-pages.js +115 -0
  157. package/dist/codegen/docs-rule-scanning.js +164 -0
  158. package/dist/codegen/docs-rules.js +76 -0
  159. package/dist/codegen/docs-sections.js +117 -0
  160. package/dist/codegen/docs-sidebar.js +65 -0
  161. package/dist/codegen/docs-types.js +4 -0
  162. package/dist/codegen/docs.js +356 -0
  163. package/dist/codegen/fetch.js +340 -0
  164. package/dist/codegen/generate-post-synth-barrel.js +63 -0
  165. package/dist/codegen/generate-registry.js +71 -0
  166. package/dist/codegen/generate-runtime-index.js +56 -0
  167. package/dist/codegen/generate-typescript.js +119 -0
  168. package/dist/codegen/generate.js +115 -0
  169. package/dist/codegen/json-patch.js +141 -0
  170. package/dist/codegen/json-schema-to-ts.js +344 -0
  171. package/dist/codegen/json-schema.js +246 -0
  172. package/dist/codegen/lexicon-regen.js +412 -0
  173. package/dist/codegen/naming.js +217 -0
  174. package/dist/codegen/okf-lexicon.js +245 -0
  175. package/dist/codegen/package.js +150 -0
  176. package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
  177. package/dist/codegen/pinned-upgrade.js +494 -0
  178. package/dist/codegen/registry.js +60 -0
  179. package/dist/codegen/rehype-base-url.mjs +68 -0
  180. package/dist/codegen/rolling-upgrade.js +217 -0
  181. package/dist/codegen/surface-snapshot.js +537 -0
  182. package/dist/codegen/testdata/postgres-tags.json +242 -0
  183. package/dist/codegen/topo-sort.js +36 -0
  184. package/dist/codegen/typecheck.js +115 -0
  185. package/dist/codegen/validate.js +200 -0
  186. package/dist/codegen/version-bump.js +35 -0
  187. package/dist/components/auto-release.js +143 -0
  188. package/dist/components/builders.js +47 -0
  189. package/dist/components/capability-plugin-loader.js +175 -0
  190. package/dist/components/capability-plugin-schema.js +46 -0
  191. package/dist/components/capability-plugin.js +99 -0
  192. package/dist/components/capability.js +60 -0
  193. package/dist/components/changed-files.js +72 -0
  194. package/dist/components/cli-support.js +427 -0
  195. package/dist/components/component.js +120 -0
  196. package/dist/components/component.schema.json +271 -0
  197. package/dist/components/config-defaults.js +130 -0
  198. package/dist/components/deploy-units.js +60 -0
  199. package/dist/components/discover.d.ts.map +1 -1
  200. package/dist/components/discover.js +189 -0
  201. package/dist/components/driver-output.js +86 -0
  202. package/dist/components/driver.js +728 -0
  203. package/dist/components/fan-out-output.js +165 -0
  204. package/dist/components/fan-out-record.js +94 -0
  205. package/dist/components/fan-out-run.js +373 -0
  206. package/dist/components/fan-out-support.js +60 -0
  207. package/dist/components/fan-out.js +273 -0
  208. package/dist/components/gate-plan.js +41 -0
  209. package/dist/components/gated-wave-pipeline.js +46 -0
  210. package/dist/components/index.js +24 -0
  211. package/dist/components/layers.js +28 -0
  212. package/dist/components/manifest-persistence.js +108 -0
  213. package/dist/components/pilots/alb-ecs.pilot.js +59 -0
  214. package/dist/components/pilots/dynamodb.pilot.js +51 -0
  215. package/dist/components/pilots/jar-emr.pilot.js +65 -0
  216. package/dist/components/pilots/lambda.pilot.js +52 -0
  217. package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
  218. package/dist/components/pilots/project.js +12 -0
  219. package/dist/components/pr-pipeline.js +134 -0
  220. package/dist/components/pr-run.js +363 -0
  221. package/dist/components/presets/ecs-fargate.js +72 -0
  222. package/dist/components/presets/index.js +28 -0
  223. package/dist/components/presets/lambda.js +34 -0
  224. package/dist/components/presets/single-host-compose.js +41 -0
  225. package/dist/components/promote.js +549 -0
  226. package/dist/components/registry.js +34 -0
  227. package/dist/components/run-progress.js +33 -0
  228. package/dist/components/sandbox/driver.d.ts.map +1 -1
  229. package/dist/components/sandbox/driver.js +93 -0
  230. package/dist/components/sandbox/run.js +115 -0
  231. package/dist/components/starter-plugin.js +104 -0
  232. package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
  233. package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
  234. package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
  235. package/dist/components/verbs/bom-writer.js +287 -0
  236. package/dist/components/verbs/build-archive.js +188 -0
  237. package/dist/components/verbs/build.js +142 -0
  238. package/dist/components/verbs/cloud-executor.js +110 -0
  239. package/dist/components/verbs/component-bom.js +125 -0
  240. package/dist/components/verbs/ensure-secret.js +50 -0
  241. package/dist/components/verbs/index.js +61 -0
  242. package/dist/components/verbs/license-policy.js +75 -0
  243. package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
  244. package/dist/components/verbs/process-runner.js +78 -0
  245. package/dist/components/verbs/r2-sync.js +93 -0
  246. package/dist/components/verbs/reproducibility.js +62 -0
  247. package/dist/components/verbs/run-agent.js +577 -0
  248. package/dist/components/verbs/sbom-generator.js +119 -0
  249. package/dist/components/verbs/sbom.js +97 -0
  250. package/dist/components/verbs/shell.js +32 -0
  251. package/dist/components/verbs/sign.js +221 -0
  252. package/dist/components/verbs/stub.js +28 -0
  253. package/dist/components/verbs/tool-sbom-generator.js +154 -0
  254. package/dist/components/verbs/verify.js +112 -0
  255. package/dist/components/verbs/vex.js +131 -0
  256. package/dist/components/verbs/vuln-gate.js +152 -0
  257. package/dist/components/verbs/vuln-scan.js +288 -0
  258. package/dist/components/verbs/wait-verify.js +106 -0
  259. package/dist/components/verbs/wrangler.js +179 -0
  260. package/dist/components/wave-plan.js +102 -0
  261. package/dist/composite.js +305 -0
  262. package/dist/config-import.d.ts.map +1 -1
  263. package/dist/config-import.js +22 -0
  264. package/dist/config-sandbox.js +122 -0
  265. package/dist/config-static.js +206 -0
  266. package/dist/config.js +605 -0
  267. package/dist/content-digest.js +23 -0
  268. package/dist/declarable.js +114 -0
  269. package/dist/deep-observation.js +437 -0
  270. package/dist/detectLexicon.js +54 -0
  271. package/dist/discovery/cache.js +70 -0
  272. package/dist/discovery/collect.js +208 -0
  273. package/dist/discovery/cycles.js +95 -0
  274. package/dist/discovery/entity-wire-codec.js +391 -0
  275. package/dist/discovery/entity-wire.js +42 -0
  276. package/dist/discovery/files.js +121 -0
  277. package/dist/discovery/fold-import.d.ts.map +1 -1
  278. package/dist/discovery/fold-import.js +4178 -0
  279. package/dist/discovery/fold-rank.js +292 -0
  280. package/dist/discovery/graph.js +115 -0
  281. package/dist/discovery/import.d.ts.map +1 -1
  282. package/dist/discovery/import.js +65 -0
  283. package/dist/discovery/index.js +333 -0
  284. package/dist/discovery/param-deps.js +487 -0
  285. package/dist/discovery/resolve.js +39 -0
  286. package/dist/discovery/sandbox/bundle.js +214 -0
  287. package/dist/discovery/sandbox/child-errors.js +26 -0
  288. package/dist/discovery/sandbox/config-run.js +100 -0
  289. package/dist/discovery/sandbox/config-wire.js +183 -0
  290. package/dist/discovery/sandbox/driver.d.ts.map +1 -1
  291. package/dist/discovery/sandbox/driver.js +333 -0
  292. package/dist/discovery/sandbox/fork.js +229 -0
  293. package/dist/discovery/sandbox/policy-run.js +142 -0
  294. package/dist/discovery/sandbox/policy-wire.js +152 -0
  295. package/dist/discovery/sandbox/run.js +77 -0
  296. package/dist/discovery/specifier-resolve.js +320 -0
  297. package/dist/discovery/walk.js +284 -0
  298. package/dist/effect-receipt.js +340 -0
  299. package/dist/env.js +55 -0
  300. package/dist/errors.js +62 -0
  301. package/dist/fold/fold.js +1434 -0
  302. package/dist/fold/foldable-helpers.js +229 -0
  303. package/dist/fold/subset.js +696 -0
  304. package/dist/fold-provenance.js +414 -0
  305. package/dist/gate-decision.js +260 -0
  306. package/dist/gate-resume-run.js +154 -0
  307. package/dist/gated-waves.js +165 -0
  308. package/dist/governance.js +43 -0
  309. package/dist/graph-declared.js +45 -0
  310. package/dist/graph-detail.js +207 -0
  311. package/dist/graph-dot.js +54 -0
  312. package/dist/graph-effective.js +107 -0
  313. package/dist/graph-ir.js +623 -0
  314. package/dist/graph-layout.js +184 -0
  315. package/dist/graph-lens.js +105 -0
  316. package/dist/graph-mermaid.js +83 -0
  317. package/dist/graph-ops.js +39 -0
  318. package/dist/graph-refs.js +156 -0
  319. package/dist/held-elsewhere.js +87 -0
  320. package/dist/identity.js +251 -0
  321. package/dist/import/base-parser.js +34 -0
  322. package/dist/import/embedded.js +255 -0
  323. package/dist/import/generator.js +1 -0
  324. package/dist/import/ir-utils.js +85 -0
  325. package/dist/import/parser-options.js +45 -0
  326. package/dist/import/parser.js +1 -0
  327. package/dist/index.js +118 -0
  328. package/dist/intrinsic-interpolation.js +73 -0
  329. package/dist/intrinsic.js +31 -0
  330. package/dist/join-key.js +35 -0
  331. package/dist/kubectl-context.js +150 -0
  332. package/dist/lexicon-config.js +58 -0
  333. package/dist/lexicon-integrity.js +47 -0
  334. package/dist/lexicon-manifest.js +70 -0
  335. package/dist/lexicon-module.d.ts.map +1 -1
  336. package/dist/lexicon-module.js +241 -0
  337. package/dist/lexicon-output.js +218 -0
  338. package/dist/lexicon-plugin-helpers.js +104 -0
  339. package/dist/lexicon-schema.js +136 -0
  340. package/dist/lexicon.js +130 -0
  341. package/dist/lifecycle/affected.js +224 -0
  342. package/dist/lifecycle/assert-live.js +110 -0
  343. package/dist/lifecycle/build-ledger-store.js +160 -0
  344. package/dist/lifecycle/build-ledger.js +155 -0
  345. package/dist/lifecycle/change-set.js +356 -0
  346. package/dist/lifecycle/converge-ledger.js +161 -0
  347. package/dist/lifecycle/deep-diff.js +233 -0
  348. package/dist/lifecycle/deep-observe.js +147 -0
  349. package/dist/lifecycle/digest.js +143 -0
  350. package/dist/lifecycle/disruption.js +135 -0
  351. package/dist/lifecycle/gate-applied.js +113 -0
  352. package/dist/lifecycle/gate-audit.js +341 -0
  353. package/dist/lifecycle/gate-ledger-select.js +89 -0
  354. package/dist/lifecycle/gate-ledger.js +193 -0
  355. package/dist/lifecycle/gate-origin.js +117 -0
  356. package/dist/lifecycle/gate-pending.js +58 -0
  357. package/dist/lifecycle/git.js +1182 -0
  358. package/dist/lifecycle/identity.js +58 -0
  359. package/dist/lifecycle/index.js +26 -0
  360. package/dist/lifecycle/lease.js +283 -0
  361. package/dist/lifecycle/ledger-port.js +1 -0
  362. package/dist/lifecycle/legacy-digest.js +91 -0
  363. package/dist/lifecycle/live-diff.js +274 -0
  364. package/dist/lifecycle/local-note.js +15 -0
  365. package/dist/lifecycle/member-ledger.js +122 -0
  366. package/dist/lifecycle/observation-baseline.js +155 -0
  367. package/dist/lifecycle/observe.js +375 -0
  368. package/dist/lifecycle/oras-referrer-lookup.js +82 -0
  369. package/dist/lifecycle/override-ledger.js +54 -0
  370. package/dist/lifecycle/plan-digest.js +110 -0
  371. package/dist/lifecycle/plan-ledger.js +129 -0
  372. package/dist/lifecycle/receipt-plan.js +192 -0
  373. package/dist/lifecycle/release-ledger.js +155 -0
  374. package/dist/lifecycle/release-read.js +64 -0
  375. package/dist/lifecycle/replay.js +193 -0
  376. package/dist/lifecycle/rollback.js +102 -0
  377. package/dist/lifecycle/run-ledger.js +183 -0
  378. package/dist/lifecycle/scenario-eval.js +204 -0
  379. package/dist/lifecycle/scenario.js +214 -0
  380. package/dist/lifecycle/snapshot.js +239 -0
  381. package/dist/lifecycle/status.js +447 -0
  382. package/dist/lifecycle/symptoms.js +117 -0
  383. package/dist/lifecycle/teardown.js +255 -0
  384. package/dist/lifecycle/types.js +1 -0
  385. package/dist/lifecycle/unobserved-gate.js +33 -0
  386. package/dist/lifecycle/wave-plans.js +68 -0
  387. package/dist/lifecycle/work-item-id.js +36 -0
  388. package/dist/lifecycle/work-lease.js +393 -0
  389. package/dist/lint/component-checks.js +87 -0
  390. package/dist/lint/config.js +483 -0
  391. package/dist/lint/declarative.js +122 -0
  392. package/dist/lint/discover.d.ts.map +1 -1
  393. package/dist/lint/discover.js +138 -0
  394. package/dist/lint/engine.js +246 -0
  395. package/dist/lint/knowledge-checks.js +64 -0
  396. package/dist/lint/named-checks.js +22 -0
  397. package/dist/lint/output-checks.js +87 -0
  398. package/dist/lint/output-docs.js +163 -0
  399. package/dist/lint/parser.js +33 -0
  400. package/dist/lint/pipeline-change-gate.js +70 -0
  401. package/dist/lint/policy-import.d.ts +1 -1
  402. package/dist/lint/policy-import.d.ts.map +1 -1
  403. package/dist/lint/policy-import.js +62 -0
  404. package/dist/lint/policy-sandbox.js +86 -0
  405. package/dist/lint/policy.js +122 -0
  406. package/dist/lint/post-synth.js +87 -0
  407. package/dist/lint/presets/relaxed.json +26 -0
  408. package/dist/lint/presets/strict.json +24 -24
  409. package/dist/lint/receipt-checks.js +83 -0
  410. package/dist/lint/rule-loader.d.ts.map +1 -1
  411. package/dist/lint/rule-loader.js +89 -0
  412. package/dist/lint/rule-registry.js +86 -0
  413. package/dist/lint/rule.js +1 -0
  414. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
  415. package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
  416. package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
  417. package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
  418. package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
  419. package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
  420. package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
  421. package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
  422. package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
  423. package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
  424. package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
  425. package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
  426. package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
  427. package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
  428. package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
  429. package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
  430. package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
  431. package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
  432. package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
  433. package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
  434. package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
  435. package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
  436. package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
  437. package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
  438. package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
  439. package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
  440. package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
  441. package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
  442. package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
  443. package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
  444. package/dist/lint/rules/comp/index.js +33 -0
  445. package/dist/lint/rules/comp/support.js +129 -0
  446. package/dist/lint/rules/composite-scope.js +51 -0
  447. package/dist/lint/rules/cor017-composite-name-match.js +93 -0
  448. package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
  449. package/dist/lint/rules/cor021-env-literal-name.js +100 -0
  450. package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
  451. package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
  452. package/dist/lint/rules/declarable-naming-convention.js +62 -0
  453. package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
  454. package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
  455. package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
  456. package/dist/lint/rules/evl004-spread-non-const.js +94 -0
  457. package/dist/lint/rules/evl005-resource-block-body.js +41 -0
  458. package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
  459. package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
  460. package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
  461. package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
  462. package/dist/lint/rules/export-required.js +115 -0
  463. package/dist/lint/rules/file-declarable-limit.js +88 -0
  464. package/dist/lint/rules/flat-declarations.js +62 -0
  465. package/dist/lint/rules/index.js +90 -0
  466. package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
  467. package/dist/lint/rules/no-redundant-type-import.js +76 -0
  468. package/dist/lint/rules/no-redundant-value-cast.js +41 -0
  469. package/dist/lint/rules/no-string-ref.js +59 -0
  470. package/dist/lint/rules/no-unused-declarable-import.js +75 -0
  471. package/dist/lint/rules/no-unused-declarable.js +142 -0
  472. package/dist/lint/rules/op/index.js +28 -0
  473. package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
  474. package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
  475. package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
  476. package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
  477. package/dist/lint/rules/op/support.js +11 -0
  478. package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
  479. package/dist/lint/rules/property-kind.js +56 -0
  480. package/dist/lint/rules/single-concern-file.js +71 -0
  481. package/dist/lint/rules/sys001-no-literal-key.js +60 -0
  482. package/dist/lint/selectors.js +168 -0
  483. package/dist/lint/suppressions.js +129 -0
  484. package/dist/lint/typescript.js +17 -0
  485. package/dist/live-endpoint.js +113 -0
  486. package/dist/live-read-session.js +76 -0
  487. package/dist/lsp/lexicon-providers.js +163 -0
  488. package/dist/lsp/types.js +5 -0
  489. package/dist/managed-fields.js +293 -0
  490. package/dist/mcp/types.js +4 -0
  491. package/dist/notify-verify.js +0 -1
  492. package/dist/notify.js +0 -1
  493. package/dist/notify.schema.json +72 -0
  494. package/dist/observation.js +266 -0
  495. package/dist/okf-read.js +134 -0
  496. package/dist/okf.js +275 -0
  497. package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
  498. package/dist/op/activities/activity-contracts.js +313 -0
  499. package/dist/op/activities/apply.js +582 -0
  500. package/dist/op/activities/build.js +18 -0
  501. package/dist/op/activities/change-coverage.js +40 -0
  502. package/dist/op/activities/change-set.js +64 -0
  503. package/dist/op/activities/converge.js +492 -0
  504. package/dist/op/activities/decide.js +211 -0
  505. package/dist/op/activities/env-teardown.js +110 -0
  506. package/dist/op/activities/factory.js +591 -0
  507. package/dist/op/activities/forge-pull-request.js +82 -0
  508. package/dist/op/activities/gh-host.js +78 -0
  509. package/dist/op/activities/guard-validate.js +165 -0
  510. package/dist/op/activities/http-check.js +40 -0
  511. package/dist/op/activities/index.js +59 -0
  512. package/dist/op/activities/lexicon-upgrade.js +629 -0
  513. package/dist/op/activities/lifecycle.js +109 -0
  514. package/dist/op/activities/pipeline-audit.js +147 -0
  515. package/dist/op/activities/policy.js +26 -0
  516. package/dist/op/activities/predict-behaviour.js +341 -0
  517. package/dist/op/activities/propose-upgrade.js +165 -0
  518. package/dist/op/activities/reconcile.js +997 -0
  519. package/dist/op/activities/shell.js +118 -0
  520. package/dist/op/activities/source-release.js +97 -0
  521. package/dist/op/activities/source-rollback.js +165 -0
  522. package/dist/op/activities/teardown.js +17 -0
  523. package/dist/op/activities/util.js +6 -0
  524. package/dist/op/activities/wait.js +51 -0
  525. package/dist/op/activities/work-evidence.js +35 -0
  526. package/dist/op/activities/workflow-audit.js +133 -0
  527. package/dist/op/activity-contract-registry.js +106 -0
  528. package/dist/op/activity-contract.js +232 -0
  529. package/dist/op/activity-failure.js +31 -0
  530. package/dist/op/activity-profiles.js +129 -0
  531. package/dist/op/activity-registry.js +105 -0
  532. package/dist/op/activity-runtime.js +28 -0
  533. package/dist/op/builders.js +801 -0
  534. package/dist/op/change-signal.js +118 -0
  535. package/dist/op/composites/apply-op.js +151 -0
  536. package/dist/op/composites/behaviour-op.js +65 -0
  537. package/dist/op/composites/converge-op.js +141 -0
  538. package/dist/op/composites/index.js +19 -0
  539. package/dist/op/composites/lexicon-upgrade-op.js +107 -0
  540. package/dist/op/composites/pipeline-audit-op.js +50 -0
  541. package/dist/op/composites/reconcile-op.js +84 -0
  542. package/dist/op/composites/watch-op.js +69 -0
  543. package/dist/op/composites/workflow-audit-op.js +57 -0
  544. package/dist/op/converge-rule.js +205 -0
  545. package/dist/op/cron.js +146 -0
  546. package/dist/op/decide-backend.js +181 -0
  547. package/dist/op/decide-config.js +68 -0
  548. package/dist/op/decide-read-inputs.js +141 -0
  549. package/dist/op/discover.d.ts.map +1 -1
  550. package/dist/op/discover.js +213 -0
  551. package/dist/op/duration.js +21 -0
  552. package/dist/op/emulator-freshness.js +80 -0
  553. package/dist/op/emulator-lifecycle.js +269 -0
  554. package/dist/op/factory.js +83 -0
  555. package/dist/op/gate-approval.js +172 -0
  556. package/dist/op/gate-name.js +86 -0
  557. package/dist/op/gate-plan-context.js +167 -0
  558. package/dist/op/gate-point-run.js +67 -0
  559. package/dist/op/gate-point.js +111 -0
  560. package/dist/op/gate-resume-plan.js +155 -0
  561. package/dist/op/gate-resume.js +31 -0
  562. package/dist/op/gate-review.js +290 -0
  563. package/dist/op/gate-run-locator.js +85 -0
  564. package/dist/op/gate-summary.js +100 -0
  565. package/dist/op/gate-wait.js +56 -0
  566. package/dist/op/gate.js +449 -0
  567. package/dist/op/generate-pipeline.js +124 -0
  568. package/dist/op/index.js +51 -0
  569. package/dist/op/lifecycle-receipt-store.js +45 -0
  570. package/dist/op/local-executor.js +1164 -0
  571. package/dist/op/local-output.js +140 -0
  572. package/dist/op/op-ir.js +317 -0
  573. package/dist/op/op-verb-class.js +131 -0
  574. package/dist/op/op-waves-notify.js +136 -0
  575. package/dist/op/op-waves-run.js +1657 -0
  576. package/dist/op/op-waves.js +409 -0
  577. package/dist/op/operator.js +743 -0
  578. package/dist/op/receipt-store.js +94 -0
  579. package/dist/op/resource.js +23 -0
  580. package/dist/op/run-context.js +28 -0
  581. package/dist/op/run-live.js +256 -0
  582. package/dist/op/runtime.js +21 -0
  583. package/dist/op/runtimes/local.js +195 -0
  584. package/dist/op/source-archive.js +131 -0
  585. package/dist/op/step-output-ref.js +397 -0
  586. package/dist/op/steward-beside.js +169 -0
  587. package/dist/op/steward-points.js +138 -0
  588. package/dist/op/steward-turn.js +59 -0
  589. package/dist/op/steward.js +317 -0
  590. package/dist/op/types.js +25 -0
  591. package/dist/op/work-lease-decl.js +81 -0
  592. package/dist/op/work-lease-run.js +393 -0
  593. package/dist/override-gate.js +284 -0
  594. package/dist/owner-chain.js +74 -0
  595. package/dist/ownership.js +92 -0
  596. package/dist/params.js +61 -0
  597. package/dist/plan-summary.js +711 -0
  598. package/dist/point-decision.js +211 -0
  599. package/dist/pr-forge.js +810 -0
  600. package/dist/pr-loop.js +203 -0
  601. package/dist/project-codegen.js +191 -0
  602. package/dist/project-root.js +74 -0
  603. package/dist/project-validation.js +50 -0
  604. package/dist/provenance.js +157 -0
  605. package/dist/pseudo-parameter.js +40 -0
  606. package/dist/reconcile.js +450 -0
  607. package/dist/resource-attributes.js +33 -0
  608. package/dist/runtime-adapter.js +77 -0
  609. package/dist/runtime.js +66 -0
  610. package/dist/secret-materialization.js +153 -0
  611. package/dist/secret-provenance.js +250 -0
  612. package/dist/serializer-walker.js +112 -0
  613. package/dist/serializer.js +1 -0
  614. package/dist/sort.js +45 -0
  615. package/dist/stack-output.js +115 -0
  616. package/dist/telemetry-attribution.js +149 -0
  617. package/dist/terraform/__fixtures__/build-graph.js +63 -0
  618. package/dist/terraform/adopt-state.js +40 -0
  619. package/dist/terraform/aws-resources.js +384 -0
  620. package/dist/terraform/bridge.js +204 -0
  621. package/dist/terraform/carve-provider.js +155 -0
  622. package/dist/terraform/carve.js +138 -0
  623. package/dist/terraform/data-source-shape.js +57 -0
  624. package/dist/terraform/emit-source.js +36 -0
  625. package/dist/terraform/excise.js +123 -0
  626. package/dist/terraform/graduate.js +128 -0
  627. package/dist/terraform/graph.js +435 -0
  628. package/dist/terraform/hcl2json.js +60 -0
  629. package/dist/terraform/manifest.js +149 -0
  630. package/dist/terraform/parse.js +81 -0
  631. package/dist/terraform/providers/aws.js +146 -0
  632. package/dist/terraform/providers/gcp.js +294 -0
  633. package/dist/terraform/providers/index.js +17 -0
  634. package/dist/terraform/providers/kubernetes.js +253 -0
  635. package/dist/terraform/score.js +151 -0
  636. package/dist/terraform/state.js +67 -0
  637. package/dist/terraform/tier-map.js +74 -0
  638. package/dist/terraform/types.js +13 -0
  639. package/dist/terraform/unified-diff.js +132 -0
  640. package/dist/testing.js +295 -0
  641. package/dist/toml-emit.js +153 -0
  642. package/dist/toml-parse.js +355 -0
  643. package/dist/toml-utils.js +60 -0
  644. package/dist/toml.js +428 -0
  645. package/dist/ts-loader.d.ts +46 -0
  646. package/dist/ts-loader.d.ts.map +1 -0
  647. package/dist/ts-loader.js +103 -0
  648. package/dist/types.js +1 -0
  649. package/dist/utils.js +61 -0
  650. package/dist/validation.js +20 -0
  651. package/dist/vendor/js-yaml-load.js +1662 -0
  652. package/dist/workspace/__fixtures__/contract-repo.js +103 -0
  653. package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
  654. package/dist/workspace/__fixtures__/sessions.js +91 -0
  655. package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
  656. package/dist/workspace/agent-cli.js +99 -0
  657. package/dist/workspace/agent.schema.json +390 -0
  658. package/dist/workspace/answers-ledger.js +89 -0
  659. package/dist/workspace/box-cli.js +142 -0
  660. package/dist/workspace/box-factory-write.js +196 -0
  661. package/dist/workspace/box-factory-write.schema.json +342 -0
  662. package/dist/workspace/box-factory.js +88 -0
  663. package/dist/workspace/box-intent.js +126 -0
  664. package/dist/workspace/box-isolation.js +169 -0
  665. package/dist/workspace/box-listing-write.schema.json +204 -0
  666. package/dist/workspace/box-listing.js +298 -0
  667. package/dist/workspace/box-publish.js +352 -0
  668. package/dist/workspace/box-publish.schema.json +498 -0
  669. package/dist/workspace/box-services.js +39 -0
  670. package/dist/workspace/broker-protocol.js +359 -0
  671. package/dist/workspace/broker-protocol.schema.json +228 -0
  672. package/dist/workspace/change-set.schema.json +460 -0
  673. package/dist/workspace/changes-cli.js +56 -0
  674. package/dist/workspace/changes.js +446 -0
  675. package/dist/workspace/changes.schema.json +642 -0
  676. package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
  677. package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
  678. package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
  679. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
  680. package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
  681. package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
  682. package/dist/workspace/chant-migrations.js +113 -0
  683. package/dist/workspace/check.schema.json +433 -0
  684. package/dist/workspace/checks/box-isolation.js +62 -0
  685. package/dist/workspace/checks/boxes.js +491 -0
  686. package/dist/workspace/checks/diagrams.js +104 -0
  687. package/dist/workspace/checks/generated.js +419 -0
  688. package/dist/workspace/checks/ledgers.js +212 -0
  689. package/dist/workspace/checks/links.js +191 -0
  690. package/dist/workspace/checks/live.js +100 -0
  691. package/dist/workspace/checks/pipelines.js +188 -0
  692. package/dist/workspace/checks/records.js +169 -0
  693. package/dist/workspace/checks.js +426 -0
  694. package/dist/workspace/ci-green-cli.js +125 -0
  695. package/dist/workspace/ci-green-forge.js +83 -0
  696. package/dist/workspace/ci-green-workflow.js +199 -0
  697. package/dist/workspace/ci-green.js +325 -0
  698. package/dist/workspace/ci-last-green.schema.json +158 -0
  699. package/dist/workspace/compose-graph.js +235 -0
  700. package/dist/workspace/compose-reports.js +146 -0
  701. package/dist/workspace/composites.js +264 -0
  702. package/dist/workspace/composites.schema.json +617 -0
  703. package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
  704. package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
  705. package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
  706. package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
  707. package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
  708. package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
  709. package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
  710. package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
  711. package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
  712. package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
  713. package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
  714. package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
  715. package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
  716. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
  717. package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
  718. package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
  719. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
  720. package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
  721. package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
  722. package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
  723. package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
  724. package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
  725. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
  726. package/dist/workspace/conformance/broker.js +736 -0
  727. package/dist/workspace/conformance/index.js +673 -0
  728. package/dist/workspace/conformance/vitest.js +108 -0
  729. package/dist/workspace/conformance/writer.js +1080 -0
  730. package/dist/workspace/decide.js +879 -0
  731. package/dist/workspace/decision-points.schema.json +135 -135
  732. package/dist/workspace/declaration-write-cli.js +74 -0
  733. package/dist/workspace/declaration-write.js +238 -0
  734. package/dist/workspace/declaration.js +938 -0
  735. package/dist/workspace/declaration.schema.json +1413 -1413
  736. package/dist/workspace/declared-kinds.js +106 -0
  737. package/dist/workspace/environments.js +164 -0
  738. package/dist/workspace/evidence.schema.json +279 -0
  739. package/dist/workspace/export-cli.js +185 -0
  740. package/dist/workspace/export.js +499 -0
  741. package/dist/workspace/factory-rules.js +175 -0
  742. package/dist/workspace/generated-files.js +92 -0
  743. package/dist/workspace/glob.js +45 -0
  744. package/dist/workspace/graph-cache.js +352 -0
  745. package/dist/workspace/graph-cli.js +348 -0
  746. package/dist/workspace/graph.schema.json +1338 -0
  747. package/dist/workspace/identity-gate-rule.js +75 -0
  748. package/dist/workspace/identity.js +126 -0
  749. package/dist/workspace/import.js +283 -0
  750. package/dist/workspace/init.js +620 -0
  751. package/dist/workspace/intent-cli.js +263 -0
  752. package/dist/workspace/intent-joins.js +201 -0
  753. package/dist/workspace/intent-record.js +352 -0
  754. package/dist/workspace/intent-record.schema.json +864 -0
  755. package/dist/workspace/intent.js +1582 -0
  756. package/dist/workspace/intent.schema.json +2420 -0
  757. package/dist/workspace/json-edit.js +221 -0
  758. package/dist/workspace/jsonc.js +235 -0
  759. package/dist/workspace/kind-readers.js +103 -0
  760. package/dist/workspace/kinds.js +587 -0
  761. package/dist/workspace/lexicon-symbols.js +112 -0
  762. package/dist/workspace/lineage-adopt-cli.js +102 -0
  763. package/dist/workspace/lineage-adopt.js +360 -0
  764. package/dist/workspace/lineage-check.js +282 -0
  765. package/dist/workspace/lineage-cli.js +121 -0
  766. package/dist/workspace/lineage-hash-index.js +284 -0
  767. package/dist/workspace/lineage-init.js +507 -0
  768. package/dist/workspace/lineage-lock.js +387 -0
  769. package/dist/workspace/lineage-merge.js +45 -0
  770. package/dist/workspace/lineage-migrations.d.ts.map +1 -1
  771. package/dist/workspace/lineage-migrations.js +329 -0
  772. package/dist/workspace/lineage-provenance.js +36 -0
  773. package/dist/workspace/lineage-update.js +138 -0
  774. package/dist/workspace/lineage-upgrade-cli.js +131 -0
  775. package/dist/workspace/lineage-upgrade.js +889 -0
  776. package/dist/workspace/lineage-vendor.js +171 -0
  777. package/dist/workspace/lineage-version.js +128 -0
  778. package/dist/workspace/lineage-versions.js +275 -0
  779. package/dist/workspace/links.js +330 -0
  780. package/dist/workspace/ls-generated.js +95 -0
  781. package/dist/workspace/ls.js +277 -0
  782. package/dist/workspace/ls.schema.json +333 -0
  783. package/dist/workspace/member-commands.js +508 -0
  784. package/dist/workspace/member-handles.js +216 -0
  785. package/dist/workspace/member-pipeline.js +258 -0
  786. package/dist/workspace/member-run.js +117 -0
  787. package/dist/workspace/member-write.schema.json +193 -0
  788. package/dist/workspace/nested-graph.js +156 -0
  789. package/dist/workspace/nesting.js +38 -0
  790. package/dist/workspace/patch.js +301 -0
  791. package/dist/workspace/patch.schema.json +321 -0
  792. package/dist/workspace/pin-cli.js +55 -0
  793. package/dist/workspace/pin-integrity.js +100 -0
  794. package/dist/workspace/plan-summary.schema.json +155 -0
  795. package/dist/workspace/point-answer.schema.json +129 -129
  796. package/dist/workspace/points-cli.js +291 -0
  797. package/dist/workspace/points-write.schema.json +660 -0
  798. package/dist/workspace/points.js +521 -0
  799. package/dist/workspace/points.schema.json +916 -0
  800. package/dist/workspace/pr-report.schema.json +108 -0
  801. package/dist/workspace/principal-classes.js +245 -0
  802. package/dist/workspace/reason-codes.js +326 -0
  803. package/dist/workspace/record-assets.js +151 -0
  804. package/dist/workspace/record-decided.js +105 -0
  805. package/dist/workspace/record-sessions.js +96 -0
  806. package/dist/workspace/record-source.js +114 -0
  807. package/dist/workspace/records-amend.schema.json +284 -0
  808. package/dist/workspace/records-checkout.js +76 -0
  809. package/dist/workspace/records-cli.js +707 -0
  810. package/dist/workspace/records-close.js +116 -0
  811. package/dist/workspace/records-close.schema.json +278 -0
  812. package/dist/workspace/records-new.schema.json +202 -0
  813. package/dist/workspace/records-review.schema.json +367 -0
  814. package/dist/workspace/records-since.js +317 -0
  815. package/dist/workspace/records-since.schema.json +218 -0
  816. package/dist/workspace/records-write.js +1229 -0
  817. package/dist/workspace/records.js +1345 -0
  818. package/dist/workspace/records.schema.json +604 -0
  819. package/dist/workspace/reference-kinds/app/package.json +10 -0
  820. package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
  821. package/dist/workspace/returns.js +303 -0
  822. package/dist/workspace/root-refusal.js +75 -0
  823. package/dist/workspace/run-statement.schema.json +622 -0
  824. package/dist/workspace/runs-cli.js +584 -0
  825. package/dist/workspace/runs-write.schema.json +994 -0
  826. package/dist/workspace/runs.js +708 -0
  827. package/dist/workspace/runs.schema.json +1257 -0
  828. package/dist/workspace/runtimes.js +76 -0
  829. package/dist/workspace/session-kinds.js +83 -0
  830. package/dist/workspace/signers.schema.json +206 -0
  831. package/dist/workspace/source-block.js +125 -0
  832. package/dist/workspace/squash.js +177 -0
  833. package/dist/workspace/status-gates.js +162 -0
  834. package/dist/workspace/status-stewards.js +330 -0
  835. package/dist/workspace/status.js +514 -0
  836. package/dist/workspace/status.schema.json +998 -0
  837. package/dist/workspace/steward-index.js +191 -0
  838. package/dist/workspace/symbols.js +188 -0
  839. package/dist/workspace/template-manifest.js +227 -0
  840. package/dist/workspace/template-pins.js +115 -0
  841. package/dist/workspace/trailer-joins.js +65 -0
  842. package/dist/workspace/trailers.js +111 -0
  843. package/dist/workspace/tree.js +136 -0
  844. package/dist/workspace/trust/attestor.js +63 -0
  845. package/dist/workspace/trust/dsse.js +108 -0
  846. package/dist/workspace/trust/evidence-cli.js +175 -0
  847. package/dist/workspace/trust/evidence.js +161 -0
  848. package/dist/workspace/trust/gate-seal.js +226 -0
  849. package/dist/workspace/trust/policy.js +190 -0
  850. package/dist/workspace/trust/provenance.js +180 -0
  851. package/dist/workspace/trust/rotation.js +298 -0
  852. package/dist/workspace/trust/run-commits.js +101 -0
  853. package/dist/workspace/trust/run-statement.js +182 -0
  854. package/dist/workspace/trust/seal.js +272 -0
  855. package/dist/workspace/trust/signers-cli.js +152 -0
  856. package/dist/workspace/trust/ssh-commit.js +178 -0
  857. package/dist/workspace/trust/test-repo.js +118 -0
  858. package/dist/workspace/trust/trust-files.js +193 -0
  859. package/dist/workspace/trust/verify-cli.js +63 -0
  860. package/dist/workspace/trust/verify.js +192 -0
  861. package/dist/workspace/which-chant.js +141 -0
  862. package/dist/workspace/wip-cli.js +95 -0
  863. package/dist/workspace/wip-write.schema.json +504 -0
  864. package/dist/workspace/wip.js +631 -0
  865. package/dist/workspace/wip.schema.json +334 -0
  866. package/dist/workspace/work-cli.js +448 -0
  867. package/dist/workspace/work-evidence.js +122 -0
  868. package/dist/workspace/work-evidence.schema.json +222 -0
  869. package/dist/workspace/work-history.schema.json +421 -0
  870. package/dist/workspace/work-lease.schema.json +246 -0
  871. package/dist/workspace/work-size.js +77 -0
  872. package/dist/workspace/work.js +283 -0
  873. package/dist/workspace/workspace-kinds.schema.json +259 -259
  874. package/dist/workspace/workspace-principals.schema.json +53 -53
  875. package/dist/workspace/write-lock-cli.js +105 -0
  876. package/dist/workspace/write-lock.js +424 -0
  877. package/dist/workspace/write-lock.schema.json +172 -0
  878. package/dist/workspace/write-scope.js +484 -0
  879. package/dist/yaml.js +459 -0
  880. package/package.json +2 -2
  881. package/src/cli/commands/check-lexicon-plugin.ts +2 -0
  882. package/src/cli/commands/lint.ts +3 -0
  883. package/src/cli/commands/migrate.ts +2 -0
  884. package/src/cli/compiled-cli.e2e.test.ts +165 -0
  885. package/src/cli/main.ts +121 -27
  886. package/src/cli/mcp/workspace-tools.ts +1 -1
  887. package/src/codegen/pinned-upgrade.ts +2 -0
  888. package/src/components/discover.ts +2 -0
  889. package/src/components/sandbox/driver.ts +3 -1
  890. package/src/config-import.ts +3 -0
  891. package/src/discovery/fold-import.ts +23 -14
  892. package/src/discovery/import.ts +2 -0
  893. package/src/discovery/sandbox/driver.ts +3 -1
  894. package/src/lexicon-module.ts +3 -0
  895. package/src/lint/config.ts +1 -1
  896. package/src/lint/discover.ts +28 -8
  897. package/src/lint/policy-import.ts +4 -1
  898. package/src/lint/rule-loader.ts +2 -0
  899. package/src/op/discover.ts +3 -0
  900. package/src/ts-loader.test.ts +23 -0
  901. package/src/ts-loader.ts +122 -0
  902. package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
  903. package/src/workspace/declaration.ts +1 -1
  904. package/src/workspace/kinds.ts +1 -1
  905. package/src/workspace/lineage-migrations.ts +2 -0
  906. package/src/workspace/points.ts +1 -1
  907. package/src/workspace/principal-classes.ts +1 -1
@@ -0,0 +1,320 @@
1
+ /**
2
+ * chant#3090 — the file-system half of fold's import resolution: which file a
3
+ * relative specifier names, which file a package's `exports` map names for a
4
+ * subpath, and which file a tsconfig `paths` entry names.
5
+ *
6
+ * The rules follow TypeScript's `bundler` resolution with `noDtsResolution`,
7
+ * the resolver `tsc` and the editor use for these specifiers:
8
+ *
9
+ * - `./x.js` names `./x.ts` (or `./x.tsx`) when that file exists, and the
10
+ * `.js` file only otherwise. `.mjs` maps to `.mts`, `.cjs` to `.cts` and
11
+ * `.jsx` to `.tsx` the same way.
12
+ * - A package's `exports` map is read for the root and for subpaths, with
13
+ * one `*` per pattern key, and its condition objects are read in key order
14
+ * against the `import`, `node` and `default` conditions, as an ESM import
15
+ * in Node reads them.
16
+ * - A `paths` entry from the nearest `tsconfig.json` resolves relative to
17
+ * `baseUrl` when the config chain sets one and to the directory of the
18
+ * config that declares `paths` otherwise.
19
+ *
20
+ * Nothing here calls Node's `Module._resolveFilename`: every answer comes from
21
+ * `statSync` and `readFileSync`, which is what keeps the cold-resolution cost
22
+ * of chant#1020 off this path.
23
+ */
24
+ import * as ts from "typescript";
25
+ import { readFileSync, statSync } from "node:fs";
26
+ import { dirname, extname, isAbsolute, join, resolve as resolvePath } from "node:path";
27
+ /** True when `path` is an existing regular file. */
28
+ export function isFile(path) {
29
+ try {
30
+ return statSync(path, { throwIfNoEntry: false })?.isFile() ?? false;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ /** True when `path` is an existing directory. */
37
+ function isDirectory(path) {
38
+ try {
39
+ return statSync(path, { throwIfNoEntry: false })?.isDirectory() ?? false;
40
+ }
41
+ catch {
42
+ return false;
43
+ }
44
+ }
45
+ /** The TypeScript source extensions a JavaScript extension in a specifier stands for, in the order `tsc` tries them. */
46
+ const TS_SOURCE_FOR_JS_EXTENSION = {
47
+ ".js": [".ts", ".tsx"],
48
+ ".jsx": [".tsx"],
49
+ ".mjs": [".mts"],
50
+ ".cjs": [".cts"],
51
+ };
52
+ /**
53
+ * The file an absolute module base path names, or `undefined` when none of
54
+ * the probed files exists. A JavaScript extension is first swapped for its
55
+ * TypeScript source extension. Then the path itself, the path with `.ts`,
56
+ * `.tsx`, `.js` and `.mjs` appended, and `index.ts` and `index.js` under it
57
+ * are tried in that order.
58
+ */
59
+ export function probeModuleFile(base) {
60
+ const ext = extname(base);
61
+ const sourceExts = TS_SOURCE_FOR_JS_EXTENSION[ext];
62
+ if (sourceExts) {
63
+ const stem = base.slice(0, -ext.length);
64
+ for (const sourceExt of sourceExts) {
65
+ if (isFile(stem + sourceExt))
66
+ return stem + sourceExt;
67
+ }
68
+ }
69
+ const candidates = [
70
+ base,
71
+ `${base}.ts`,
72
+ `${base}.tsx`,
73
+ `${base}.js`,
74
+ `${base}.mjs`,
75
+ join(base, "index.ts"),
76
+ join(base, "index.js"),
77
+ ];
78
+ return candidates.find(isFile);
79
+ }
80
+ /** A bare specifier split into its package name and the subpath after it (`"."` for the root). */
81
+ export function splitBareSpecifier(specifier) {
82
+ const segments = specifier.split("/");
83
+ const nameLength = specifier.startsWith("@") ? 2 : 1;
84
+ if (segments.length < nameLength || segments.slice(0, nameLength).some((s) => s === ""))
85
+ return undefined;
86
+ const name = segments.slice(0, nameLength).join("/");
87
+ const rest = segments.slice(nameLength).join("/");
88
+ return { name, subpath: rest === "" ? "." : `./${rest}` };
89
+ }
90
+ /** The conditions an ESM import in Node matches, which is what the run path does. */
91
+ const EXPORT_CONDITIONS = new Set(["import", "node", "default"]);
92
+ /**
93
+ * The target an `exports` value selects, with `star` substituted for each `*`
94
+ * when it came from a pattern key. A string is the target; an array yields its
95
+ * first resolvable entry; a condition object is read in key order and the
96
+ * first matching condition that resolves wins. `null`, and a condition object
97
+ * with no matching condition, resolve to nothing.
98
+ */
99
+ function exportsValueTarget(value, star) {
100
+ if (typeof value === "string")
101
+ return star === undefined ? value : value.split("*").join(star);
102
+ if (Array.isArray(value)) {
103
+ for (const entry of value) {
104
+ const target = exportsValueTarget(entry, star);
105
+ if (target !== undefined)
106
+ return target;
107
+ }
108
+ return undefined;
109
+ }
110
+ if (typeof value !== "object" || value === null)
111
+ return undefined;
112
+ for (const [condition, conditional] of Object.entries(value)) {
113
+ if (!EXPORT_CONDITIONS.has(condition))
114
+ continue;
115
+ const target = exportsValueTarget(conditional, star);
116
+ if (target !== undefined)
117
+ return target;
118
+ }
119
+ return undefined;
120
+ }
121
+ /**
122
+ * The target `exportsField` gives `subpath` (`"."` or `"./x"`), relative to
123
+ * the package directory, or `undefined` when the map does not export it. An
124
+ * exact key wins over a pattern; among patterns, the longest prefix before the
125
+ * `*` wins, as in Node's own resolver.
126
+ */
127
+ export function packageExportsTarget(exportsField, subpath) {
128
+ const isSubpathMap = typeof exportsField === "object" &&
129
+ exportsField !== null &&
130
+ !Array.isArray(exportsField) &&
131
+ Object.keys(exportsField).some((k) => k.startsWith("."));
132
+ if (!isSubpathMap)
133
+ return subpath === "." ? exportsValueTarget(exportsField, undefined) : undefined;
134
+ const map = exportsField;
135
+ if (Object.prototype.hasOwnProperty.call(map, subpath) && !subpath.includes("*"))
136
+ return exportsValueTarget(map[subpath], undefined);
137
+ let bestKey;
138
+ let bestStar;
139
+ for (const key of Object.keys(map)) {
140
+ const starAt = key.indexOf("*");
141
+ if (starAt === -1 || key.indexOf("*", starAt + 1) !== -1)
142
+ continue;
143
+ const prefix = key.slice(0, starAt);
144
+ const suffix = key.slice(starAt + 1);
145
+ if (!subpath.startsWith(prefix) || subpath === prefix)
146
+ continue;
147
+ if (suffix !== "" && (!subpath.endsWith(suffix) || subpath.length < key.length))
148
+ continue;
149
+ if (bestKey === undefined || prefix.length > bestKey.indexOf("*") || (prefix.length === bestKey.indexOf("*") && key.length > bestKey.length)) {
150
+ bestKey = key;
151
+ bestStar = subpath.slice(prefix.length, subpath.length - suffix.length);
152
+ }
153
+ }
154
+ return bestKey === undefined ? undefined : exportsValueTarget(map[bestKey], bestStar);
155
+ }
156
+ /** Nearest `tsconfig.json` for a directory (`null` when there is none). */
157
+ const nearestTsconfigCache = new Map();
158
+ /** Parsed config chains by leaf config path, re-read when a file in the chain changes. */
159
+ const tsconfigCache = new Map();
160
+ function nearestTsconfig(dir) {
161
+ const cached = nearestTsconfigCache.get(dir);
162
+ if (cached !== undefined)
163
+ return cached;
164
+ const candidate = join(dir, "tsconfig.json");
165
+ let found;
166
+ if (isFile(candidate))
167
+ found = candidate;
168
+ else {
169
+ const parent = dirname(dir);
170
+ found = parent === dir ? null : nearestTsconfig(parent);
171
+ }
172
+ nearestTsconfigCache.set(dir, found);
173
+ return found;
174
+ }
175
+ function mtimeOf(path) {
176
+ try {
177
+ return statSync(path, { throwIfNoEntry: false })?.mtimeMs ?? -1;
178
+ }
179
+ catch {
180
+ return -1;
181
+ }
182
+ }
183
+ /** The config file an `extends` entry names, or `undefined` when it cannot be found. */
184
+ function resolveExtends(entry, fromConfig) {
185
+ const fromDir = dirname(fromConfig);
186
+ if (entry.startsWith(".") || isAbsolute(entry)) {
187
+ const path = resolvePath(fromDir, entry);
188
+ if (isFile(path))
189
+ return path;
190
+ if (!path.endsWith(".json") && isFile(`${path}.json`))
191
+ return `${path}.json`;
192
+ return undefined;
193
+ }
194
+ // A package's config, looked up in `node_modules` the way `tsc` does for
195
+ // the common shapes: the file itself, the file plus `.json`, or the
196
+ // package directory's `tsconfig.json`.
197
+ for (let dir = fromDir;;) {
198
+ const path = join(dir, "node_modules", entry);
199
+ if (isFile(path))
200
+ return path;
201
+ if (!path.endsWith(".json") && isFile(`${path}.json`))
202
+ return `${path}.json`;
203
+ if (isDirectory(path) && isFile(join(path, "tsconfig.json")))
204
+ return join(path, "tsconfig.json");
205
+ const parent = dirname(dir);
206
+ if (parent === dir)
207
+ return undefined;
208
+ dir = parent;
209
+ }
210
+ }
211
+ /** Read `configPath` and everything it extends, later configs overriding earlier ones. */
212
+ function readConfigChain(configPath, files, seen) {
213
+ if (seen.has(configPath))
214
+ return {};
215
+ seen.add(configPath);
216
+ files.push(configPath);
217
+ let text;
218
+ try {
219
+ text = readFileSync(configPath, "utf-8");
220
+ }
221
+ catch {
222
+ return {};
223
+ }
224
+ const { config } = ts.parseConfigFileTextToJson(configPath, text);
225
+ if (typeof config !== "object" || config === null)
226
+ return {};
227
+ const raw = config;
228
+ const merged = {};
229
+ const parents = typeof raw.extends === "string" ? [raw.extends] : Array.isArray(raw.extends) ? raw.extends : [];
230
+ for (const parent of parents) {
231
+ if (typeof parent !== "string")
232
+ continue;
233
+ const parentPath = resolveExtends(parent, configPath);
234
+ if (parentPath === undefined)
235
+ continue;
236
+ const inherited = readConfigChain(parentPath, files, seen);
237
+ if (inherited.paths)
238
+ merged.paths = inherited.paths;
239
+ if (inherited.baseUrl !== undefined)
240
+ merged.baseUrl = inherited.baseUrl;
241
+ }
242
+ const options = raw.compilerOptions;
243
+ if (options && typeof options.paths === "object" && options.paths !== null && !Array.isArray(options.paths)) {
244
+ merged.paths = { value: options.paths, declaredIn: dirname(configPath) };
245
+ }
246
+ if (options && typeof options.baseUrl === "string")
247
+ merged.baseUrl = resolvePath(dirname(configPath), options.baseUrl);
248
+ return merged;
249
+ }
250
+ function parsePaths(chain) {
251
+ if (!chain.paths)
252
+ return undefined;
253
+ const patterns = [];
254
+ for (const [key, value] of Object.entries(chain.paths.value)) {
255
+ if (!Array.isArray(value))
256
+ continue;
257
+ const substitutions = value.filter((s) => typeof s === "string");
258
+ const starAt = key.indexOf("*");
259
+ if (starAt !== -1 && key.indexOf("*", starAt + 1) !== -1)
260
+ continue;
261
+ patterns.push(starAt === -1
262
+ ? { key, prefix: key, suffix: undefined, substitutions }
263
+ : { key, prefix: key.slice(0, starAt), suffix: key.slice(starAt + 1), substitutions });
264
+ }
265
+ return { base: chain.baseUrl ?? chain.paths.declaredIn, patterns };
266
+ }
267
+ function tsconfigPathsFor(configPath) {
268
+ const cached = tsconfigCache.get(configPath);
269
+ if (cached && cached.stamps.every(([file, mtime]) => mtimeOf(file) === mtime))
270
+ return cached.paths;
271
+ const files = [];
272
+ const paths = parsePaths(readConfigChain(configPath, files, new Set()));
273
+ tsconfigCache.set(configPath, { stamps: files.map((f) => [f, mtimeOf(f)]), paths });
274
+ return paths;
275
+ }
276
+ /**
277
+ * The tsconfig `paths` entry that matches a bare `specifier` imported by
278
+ * `fromFile`, read from the nearest `tsconfig.json` above it, and the file it
279
+ * maps the specifier to (`target`, `undefined` when no substitution names an
280
+ * existing file). `undefined` when no entry matches. An exact key wins over a
281
+ * pattern, and among patterns the longest prefix wins, as in `tsc`.
282
+ * Substitutions are tried in order with {@link probeModuleFile}.
283
+ */
284
+ export function tsconfigPathsMatch(specifier, fromFile) {
285
+ const configPath = nearestTsconfig(dirname(fromFile));
286
+ if (configPath === null)
287
+ return undefined;
288
+ const paths = tsconfigPathsFor(configPath);
289
+ if (!paths)
290
+ return undefined;
291
+ let best;
292
+ for (const pattern of paths.patterns) {
293
+ if (pattern.suffix === undefined) {
294
+ if (pattern.key === specifier) {
295
+ best = pattern;
296
+ break;
297
+ }
298
+ continue;
299
+ }
300
+ if (specifier.length >= pattern.prefix.length + pattern.suffix.length &&
301
+ specifier.startsWith(pattern.prefix) &&
302
+ specifier.endsWith(pattern.suffix) &&
303
+ (best === undefined || pattern.prefix.length > best.prefix.length)) {
304
+ best = pattern;
305
+ }
306
+ }
307
+ if (!best)
308
+ return undefined;
309
+ const star = best.suffix === undefined ? "" : specifier.slice(best.prefix.length, specifier.length - best.suffix.length);
310
+ for (const substitution of best.substitutions) {
311
+ const target = probeModuleFile(resolvePath(paths.base, substitution.split("*").join(star)));
312
+ if (target !== undefined)
313
+ return { key: best.key, target };
314
+ }
315
+ return { key: best.key, target: undefined };
316
+ }
317
+ /** The file {@link tsconfigPathsMatch} maps `specifier` to, or `undefined`. */
318
+ export function tsconfigPathsTarget(specifier, fromFile) {
319
+ return tsconfigPathsMatch(specifier, fromFile)?.target;
320
+ }
@@ -0,0 +1,284 @@
1
+ /**
2
+ * The one discovery walk (chant#2527).
3
+ *
4
+ * Every command that decides which files chant reads walks the tree here:
5
+ * source discovery (`./files.ts`'s `findInfraFiles`, behind build, graph,
6
+ * list, explain and lexicon detection), `chant lint`, component discovery,
7
+ * Op discovery and the `chant audit` walk. They used to have five walkers
8
+ * with five sets of rules. v0.80.0 warned about every file whose status the
9
+ * convergence changes (#2571), and this module is that convergence. It is on
10
+ * #2525's level-0 exception list.
11
+ *
12
+ * The rules, for every walker:
13
+ *
14
+ * - `node_modules` and `.git` are never entered.
15
+ * - Dot-directories are skipped. The audit walk keeps `.github` and
16
+ * `.forgejo`, which hold the CI files it audits.
17
+ * - `dist` is skipped.
18
+ * - Git-ignored paths are skipped, nested `.gitignore` files, `.git/info/exclude`
19
+ * and the global excludes file included, the way git itself decides. Only
20
+ * paths below the scan root are asked about: when the scan root is itself
21
+ * ignored, nothing under it is dropped for being ignored, so building or
22
+ * linting an ignored directory still reads it.
23
+ * - When the scan root is inside a chant project, a child directory holding a
24
+ * project config is a boundary and is not entered. A `chant.config.json`
25
+ * holding only lint keys is a fragment, not a project config, and is not a
26
+ * boundary. A `chant.config.ts` always is one, since telling a lint-only one
27
+ * apart would mean running it. When the scan root is outside every project,
28
+ * every child project is read. Op discovery always stops at child projects
29
+ * below its root.
30
+ * - The project's `exclude` globs (#2519) drop what they match, and its
31
+ * `include` globs re-admit what `exclude` or any rule above would skip.
32
+ * `node_modules`, `.git` and workspace members are the exceptions: include
33
+ * never re-admits them.
34
+ * - Workspace members and group matches leave the root project's walk
35
+ * (#2525 rule 3), and only when a workspace declaration exists. Without one nothing is loaded and
36
+ * nothing is excluded; see {@link workspaceMemberDirs}.
37
+ *
38
+ * The walk is synchronous: the audit walk it replaced was, and the glob and
39
+ * ignore facts are gathered once before it starts.
40
+ */
41
+ import { execFileSync } from "node:child_process";
42
+ import { closeSync, existsSync, openSync, readdirSync, readSync, statSync } from "node:fs";
43
+ import { isAbsolute, join, relative, resolve, sep } from "node:path";
44
+ // @ts-ignore — picomatch has no types declaration
45
+ import picomatch from "picomatch";
46
+ import { findProjectConfig, findWorkspaceRoot } from "../project-root.js";
47
+ import { isLintOnlyFragment } from "../config.js";
48
+ /** Dot-directories the audit walk enters anyway, since they hold the CI files it audits. */
49
+ export const AUDIT_DOT_DIRS = new Set([".github", ".forgejo"]);
50
+ /** Directories no rule and no glob ever lets the walk into. */
51
+ const NEVER_ENTER = new Set(["node_modules", ".git"]);
52
+ /** Path parts below `home`, or undefined for `home` itself or a path outside it. */
53
+ function partsBelow(home, full) {
54
+ const rel = relative(home, resolve(full));
55
+ if (rel === "" || rel === ".." || rel.startsWith(`..${sep}`) || isAbsolute(rel))
56
+ return undefined;
57
+ return rel.split(sep);
58
+ }
59
+ function compileGlobs(globs) {
60
+ if (!globs || (globs.exclude.length === 0 && globs.include.length === 0))
61
+ return undefined;
62
+ const home = resolve(globs.root);
63
+ const matcher = (patterns) => {
64
+ if (patterns.length === 0)
65
+ return () => false;
66
+ const match = picomatch(patterns, { dot: true });
67
+ return (full) => {
68
+ const parts = partsBelow(home, full);
69
+ return parts !== undefined && parts.some((_, i) => match(parts.slice(0, i + 1).join("/")));
70
+ };
71
+ };
72
+ // The literal directory part of each include pattern: `.cache/keep/**`
73
+ // gives `.cache/keep`. The walk enters a skipped directory on the way to it.
74
+ const bases = globs.include.map((p) => picomatch.scan(p).base).filter((b) => b !== "");
75
+ return {
76
+ excluded: matcher(globs.exclude),
77
+ included: matcher(globs.include),
78
+ includeBelow: (full) => {
79
+ const parts = partsBelow(home, full);
80
+ if (parts === undefined)
81
+ return false;
82
+ const rel = parts.join("/");
83
+ return bases.some((b) => b.startsWith(`${rel}/`));
84
+ },
85
+ };
86
+ }
87
+ // ── Git ──────────────────────────────────────────────────────────────────────
88
+ /**
89
+ * The untracked paths git ignores under `root`, absolute, with fully ignored
90
+ * directories listed once. One `git ls-files` call. A tree outside git, a
91
+ * missing `git`, or a root that is itself ignored yields an empty set: ignore
92
+ * rules are asked only about paths below the scan root.
93
+ */
94
+ export function gitIgnoredBelow(root) {
95
+ let out;
96
+ try {
97
+ out = execFileSync("git", ["ls-files", "-z", "--others", "--ignored", "--exclude-standard", "--directory"], {
98
+ cwd: root,
99
+ encoding: "utf-8",
100
+ stdio: ["ignore", "pipe", "ignore"],
101
+ maxBuffer: 256 * 1024 * 1024,
102
+ });
103
+ }
104
+ catch {
105
+ return new Set();
106
+ }
107
+ const ignored = new Set();
108
+ const abs = resolve(root);
109
+ for (const entry of out.split("\0")) {
110
+ if (entry === "")
111
+ continue;
112
+ const rel = entry.endsWith("/") ? entry.slice(0, -1) : entry;
113
+ // `./` (or `.`): the scan root is itself ignored.
114
+ if (rel === "." || rel === "")
115
+ return new Set();
116
+ ignored.add(join(abs, rel));
117
+ }
118
+ return ignored;
119
+ }
120
+ // ── Boundaries ───────────────────────────────────────────────────────────────
121
+ /** A directory that holds a project config: `chant.config.ts`, or a `chant.config.json` that is not a lint-only fragment. */
122
+ export function isProjectBoundary(dir) {
123
+ if (existsSync(join(dir, "chant.config.ts")))
124
+ return true;
125
+ const json = join(dir, "chant.config.json");
126
+ return existsSync(json) && !isLintOnlyFragment(json);
127
+ }
128
+ /** Whether child projects end the walk from `root`: always for Ops, otherwise when `root` is inside a project. */
129
+ export function childProjectsAreBoundaries(walker, root) {
130
+ return walker === "ops" || findProjectConfig(root).configPath !== undefined;
131
+ }
132
+ // ── Workspace members ────────────────────────────────────────────────────────
133
+ /**
134
+ * The directories a workspace declaration moves out of the root project's
135
+ * discovery (#2525 rule 3), absolute and strictly below `root`, or none:
136
+ * every member's directory but the root's, and every group match
137
+ * (`rootExclusions` in `../workspace/declaration.ts`).
138
+ *
139
+ * Level 0 pays for `findWorkspaceRoot`, which only tests whether a
140
+ * `chant.workspace.json` or `.jsonc` exists from `root` up to the git root,
141
+ * and loads nothing. Only when a declaration is found are the workspace
142
+ * modules loaded to read it. A declaration that fails to read excludes
143
+ * nothing here; `chant workspace ls` is where its errors are reported. This
144
+ * is the only place discovery asks about workspaces; the walkers pass the
145
+ * result as `excludeDirs`.
146
+ */
147
+ export async function workspaceMemberDirs(root) {
148
+ const found = findWorkspaceRoot(root);
149
+ if (!found)
150
+ return [];
151
+ const start = resolve(root);
152
+ const [{ readDeclaration, resolveGroups, rootExclusions }, { workingTree }] = await Promise.all([
153
+ import("../workspace/declaration.js"),
154
+ import("../workspace/tree.js"),
155
+ ]);
156
+ let dirs;
157
+ try {
158
+ const tree = workingTree(found.dir);
159
+ const declaration = readDeclaration(tree);
160
+ dirs = rootExclusions(declaration, resolveGroups(declaration, tree)).map((e) => resolve(found.dir, e.dir));
161
+ }
162
+ catch {
163
+ return [];
164
+ }
165
+ return dirs.filter((d) => partsBelow(start, d) !== undefined);
166
+ }
167
+ // ── Markers ──────────────────────────────────────────────────────────────────
168
+ /** The first `bytes` of a file as UTF-8, or "" when it can't be read. */
169
+ export function readHead(file, bytes) {
170
+ let fd;
171
+ try {
172
+ fd = openSync(file, "r");
173
+ const buf = Buffer.alloc(bytes);
174
+ const n = readSync(fd, buf, 0, bytes, 0);
175
+ return buf.toString("utf8", 0, n);
176
+ }
177
+ catch {
178
+ return "";
179
+ }
180
+ finally {
181
+ if (fd !== undefined)
182
+ closeSync(fd);
183
+ }
184
+ }
185
+ // ── The walk ─────────────────────────────────────────────────────────────────
186
+ /** Walk `opts.root` under the rules in the module doc and return the files `accept` took. */
187
+ export function walkDiscovery(opts) {
188
+ const out = [];
189
+ const globs = compileGlobs(opts.globs);
190
+ const ignored = gitIgnoredBelow(opts.root);
191
+ const boundaries = childProjectsAreBoundaries(opts.walker, opts.root);
192
+ const excludeDirs = new Set((opts.excludeDirs ?? []).map((d) => resolve(d)));
193
+ const dotDirsKept = opts.walker === "audit" ? AUDIT_DOT_DIRS : new Set();
194
+ const limit = opts.limit;
195
+ const isIgnored = (full) => ignored.size > 0 && ignored.has(resolve(full));
196
+ /** Take a path; false once the limit is reached. */
197
+ const take = (full) => {
198
+ if (limit && out.length >= limit.max) {
199
+ limit.truncated = true;
200
+ return false;
201
+ }
202
+ out.push(full);
203
+ return true;
204
+ };
205
+ const kind = (dir, e) => {
206
+ if (e.isDirectory())
207
+ return "dir";
208
+ if (e.isFile())
209
+ return "file";
210
+ if (opts.followSymlinks && e.isSymbolicLink()) {
211
+ try {
212
+ const s = statSync(join(dir, e.name));
213
+ return s.isDirectory() ? "dir" : s.isFile() ? "file" : undefined;
214
+ }
215
+ catch {
216
+ return undefined;
217
+ }
218
+ }
219
+ return undefined;
220
+ };
221
+ /**
222
+ * Walk `dir`. `probing` is true below a directory a rule skipped that the
223
+ * walk entered only because an `include` pattern names something inside
224
+ * it: there, only what `include` matches is taken.
225
+ */
226
+ const walk = (dir, probing) => {
227
+ let entries;
228
+ try {
229
+ entries = readdirSync(dir, { withFileTypes: true });
230
+ }
231
+ catch {
232
+ return true;
233
+ }
234
+ if (opts.sorted)
235
+ entries.sort((a, b) => (a.name < b.name ? -1 : a.name > b.name ? 1 : 0));
236
+ for (const e of entries) {
237
+ if (limit?.truncated)
238
+ return false;
239
+ const full = join(dir, e.name);
240
+ const type = kind(dir, e);
241
+ if (type === "dir") {
242
+ if (NEVER_ENTER.has(e.name) || excludeDirs.has(resolve(full)))
243
+ continue;
244
+ const dotSkip = e.name.startsWith(".") && !dotDirsKept.has(e.name);
245
+ if (dotSkip && opts.takeSkippedDir?.(e.name, full)) {
246
+ if (!take(full))
247
+ return false;
248
+ continue;
249
+ }
250
+ const ruleSkip = dotSkip ||
251
+ e.name === "dist" ||
252
+ (isIgnored(full) && !opts.keepIgnored?.(full)) ||
253
+ (boundaries && isProjectBoundary(full));
254
+ if (ruleSkip || probing) {
255
+ if (globs?.included(full)) {
256
+ if (!walk(full, false))
257
+ return false;
258
+ }
259
+ else if (globs?.includeBelow(full)) {
260
+ if (!walk(full, true))
261
+ return false;
262
+ }
263
+ continue;
264
+ }
265
+ if (!walk(full, false))
266
+ return false;
267
+ }
268
+ else if (type === "file") {
269
+ const skipped = probing ||
270
+ (isIgnored(full) && !opts.keepIgnored?.(full)) ||
271
+ (globs?.excluded(full) ?? false);
272
+ if (skipped && !globs?.included(full))
273
+ continue;
274
+ if (!opts.accept(e.name, full))
275
+ continue;
276
+ if (!take(full))
277
+ return false;
278
+ }
279
+ }
280
+ return true;
281
+ };
282
+ walk(opts.root, false);
283
+ return out;
284
+ }