@intentius/chant 0.124.45 → 0.124.48

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 (772) hide show
  1. package/dist/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
  2. package/dist/__golden__/wave-loop/op-by-apply-hold.json +10 -0
  3. package/dist/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
  4. package/dist/__golden__/wave-loop/op-by-apply-pass.json +10 -0
  5. package/dist/__golden__/wave-loop/op-by-apply-skip.json +10 -0
  6. package/dist/__golden__/wave-loop/op-cost-member-clash.json +6 -0
  7. package/dist/__golden__/wave-loop/op-cost-member.json +13 -0
  8. package/dist/__golden__/wave-loop/op-denied-source.json +16 -0
  9. package/dist/__golden__/wave-loop/op-denied.json +16 -0
  10. package/dist/__golden__/wave-loop/op-discover-rest-short.json +6 -0
  11. package/dist/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
  12. package/dist/__golden__/wave-loop/op-discover-rest.json +26 -0
  13. package/dist/__golden__/wave-loop/op-discover-wide.json +26 -0
  14. package/dist/__golden__/wave-loop/op-held-on-again.json +16 -0
  15. package/dist/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
  16. package/dist/__golden__/wave-loop/op-held-on.json +16 -0
  17. package/dist/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
  18. package/dist/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
  19. package/dist/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
  20. package/dist/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
  21. package/dist/__golden__/wave-loop/op-hooks-held.json +13 -0
  22. package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
  23. package/dist/__golden__/wave-loop/op-hooks-pass.json +13 -0
  24. package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
  25. package/dist/__golden__/wave-loop/op-hooks-share.json +33 -0
  26. package/dist/__golden__/wave-loop/op-outcome-held.json +10 -0
  27. package/dist/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
  28. package/dist/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
  29. package/dist/__golden__/wave-loop/op-outcome-replan.json +10 -0
  30. package/dist/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
  31. package/dist/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
  32. package/dist/__golden__/wave-loop/op-overridden.json +16 -0
  33. package/dist/__golden__/wave-loop/op-per-run.json +20 -0
  34. package/dist/__golden__/wave-loop/op-point.json +13 -0
  35. package/dist/__golden__/wave-loop/op-pr-review.json +10 -0
  36. package/dist/__golden__/wave-loop/op-sealed.json +10 -0
  37. package/dist/__golden__/wave-loop/op-spend-change-only.json +10 -0
  38. package/dist/__golden__/wave-loop/op-spend.json +10 -0
  39. package/dist/__golden__/wave-loop/op-wave-commands.json +55 -0
  40. package/dist/__golden__/wave-loop/op-wide-refused.json +26 -0
  41. package/dist/__golden__/wave-loop/op-wide-waiting.json +29 -0
  42. package/dist/__golden__/wave-loop/op-wide.json +39 -0
  43. package/dist/action-pins.d.ts +61 -0
  44. package/dist/action-pins.d.ts.map +1 -0
  45. package/dist/action-pins.js +77 -0
  46. package/dist/capabilities/aws.paths +148 -0
  47. package/dist/capabilities/base-mappings.json +122 -0
  48. package/dist/capabilities/catalog.d.ts +89 -0
  49. package/dist/capabilities/catalog.d.ts.map +1 -0
  50. package/dist/capabilities/catalog.js +204 -0
  51. package/dist/capabilities/language.d.ts +103 -0
  52. package/dist/capabilities/language.d.ts.map +1 -0
  53. package/dist/capabilities/language.js +335 -0
  54. package/dist/capabilities/matcher.d.ts +65 -0
  55. package/dist/capabilities/matcher.d.ts.map +1 -0
  56. package/dist/capabilities/matcher.js +299 -0
  57. package/dist/capabilities/view.d.ts +207 -0
  58. package/dist/capabilities/view.d.ts.map +1 -0
  59. package/dist/capabilities/view.js +484 -0
  60. package/dist/cli/commands/carve.d.ts +3 -0
  61. package/dist/cli/commands/carve.d.ts.map +1 -1
  62. package/dist/cli/commands/carve.js +36 -7
  63. package/dist/cli/commands/import-report.d.ts +26 -0
  64. package/dist/cli/commands/import-report.d.ts.map +1 -0
  65. package/dist/cli/commands/import-report.js +65 -0
  66. package/dist/cli/commands/import.d.ts +11 -1
  67. package/dist/cli/commands/import.d.ts.map +1 -1
  68. package/dist/cli/commands/import.js +22 -3
  69. package/dist/cli/commands/lint.d.ts.map +1 -1
  70. package/dist/cli/commands/lint.js +1 -0
  71. package/dist/cli/commands/migrate.d.ts +13 -1
  72. package/dist/cli/commands/migrate.d.ts.map +1 -1
  73. package/dist/cli/commands/migrate.js +134 -10
  74. package/dist/cli/handlers/approve.d.ts.map +1 -1
  75. package/dist/cli/handlers/approve.js +21 -2
  76. package/dist/cli/handlers/build.d.ts.map +1 -1
  77. package/dist/cli/handlers/build.js +6 -1
  78. package/dist/cli/handlers/declared-graph.d.ts +44 -0
  79. package/dist/cli/handlers/declared-graph.d.ts.map +1 -0
  80. package/dist/cli/handlers/declared-graph.js +87 -0
  81. package/dist/cli/handlers/graph.d.ts +25 -0
  82. package/dist/cli/handlers/graph.d.ts.map +1 -1
  83. package/dist/cli/handlers/graph.js +93 -87
  84. package/dist/cli/handlers/ledger.d.ts +3 -0
  85. package/dist/cli/handlers/ledger.d.ts.map +1 -0
  86. package/dist/cli/handlers/ledger.js +55 -0
  87. package/dist/cli/handlers/migrate.d.ts.map +1 -1
  88. package/dist/cli/handlers/migrate.js +18 -11
  89. package/dist/cli/handlers/misc.d.ts.map +1 -1
  90. package/dist/cli/handlers/misc.js +12 -1
  91. package/dist/cli/handlers/pr-env.d.ts.map +1 -1
  92. package/dist/cli/handlers/pr-env.js +4 -3
  93. package/dist/cli/handlers/pr.d.ts +15 -1
  94. package/dist/cli/handlers/pr.d.ts.map +1 -1
  95. package/dist/cli/handlers/pr.js +143 -39
  96. package/dist/cli/handlers/query.d.ts +7 -2
  97. package/dist/cli/handlers/query.d.ts.map +1 -1
  98. package/dist/cli/handlers/query.js +16 -4
  99. package/dist/cli/handlers/release.d.ts.map +1 -1
  100. package/dist/cli/handlers/release.js +6 -3
  101. package/dist/cli/handlers/search-count.d.ts +89 -0
  102. package/dist/cli/handlers/search-count.d.ts.map +1 -0
  103. package/dist/cli/handlers/search-count.js +132 -0
  104. package/dist/cli/handlers/search.d.ts +356 -6
  105. package/dist/cli/handlers/search.d.ts.map +1 -1
  106. package/dist/cli/handlers/search.js +1039 -155
  107. package/dist/cli/main.d.ts.map +1 -1
  108. package/dist/cli/main.js +88 -17
  109. package/dist/cli/mcp/server.d.ts.map +1 -1
  110. package/dist/cli/mcp/server.js +3 -0
  111. package/dist/cli/mcp/tools/capabilities.d.ts +7 -0
  112. package/dist/cli/mcp/tools/capabilities.d.ts.map +1 -0
  113. package/dist/cli/mcp/tools/capabilities.js +27 -0
  114. package/dist/cli/mcp/workspace-tools.d.ts +3 -1
  115. package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
  116. package/dist/cli/mcp/workspace-tools.js +47 -2
  117. package/dist/cli/parse-args.d.ts.map +1 -1
  118. package/dist/cli/parse-args.js +100 -19
  119. package/dist/cli/registry.d.ts +36 -4
  120. package/dist/cli/registry.d.ts.map +1 -1
  121. package/dist/components/builders.d.ts +5 -1
  122. package/dist/components/builders.d.ts.map +1 -1
  123. package/dist/components/builders.js +5 -0
  124. package/dist/components/capability-plugin-loader.d.ts.map +1 -1
  125. package/dist/components/capability-plugin-loader.js +16 -1
  126. package/dist/components/capability-plugin.d.ts +14 -0
  127. package/dist/components/capability-plugin.d.ts.map +1 -1
  128. package/dist/components/pr-env-ports.d.ts +29 -0
  129. package/dist/components/pr-env-ports.d.ts.map +1 -0
  130. package/dist/components/pr-env-ports.js +77 -0
  131. package/dist/components/pr-env-run.d.ts +5 -21
  132. package/dist/components/pr-env-run.d.ts.map +1 -1
  133. package/dist/components/pr-env-run.js +6 -70
  134. package/dist/components/pr-environment.d.ts +2 -1
  135. package/dist/components/pr-environment.d.ts.map +1 -1
  136. package/dist/components/pr-environment.js +1 -1
  137. package/dist/components/pr-hooks.d.ts +21 -1
  138. package/dist/components/pr-hooks.d.ts.map +1 -1
  139. package/dist/components/pr-hooks.js +72 -4
  140. package/dist/components/pr-pipeline.d.ts +45 -10
  141. package/dist/components/pr-pipeline.d.ts.map +1 -1
  142. package/dist/components/pr-pipeline.js +47 -14
  143. package/dist/components/pr-policy.d.ts +36 -0
  144. package/dist/components/pr-policy.d.ts.map +1 -1
  145. package/dist/components/pr-policy.js +36 -0
  146. package/dist/components/starter-plugin.d.ts +1 -0
  147. package/dist/components/starter-plugin.d.ts.map +1 -1
  148. package/dist/components/starter-plugin.js +5 -1
  149. package/dist/components/verbs/index.d.ts +2 -0
  150. package/dist/components/verbs/index.d.ts.map +1 -1
  151. package/dist/components/verbs/index.js +2 -0
  152. package/dist/components/verbs/publish-artifact.d.ts +65 -0
  153. package/dist/components/verbs/publish-artifact.d.ts.map +1 -0
  154. package/dist/components/verbs/publish-artifact.js +74 -0
  155. package/dist/components/verbs/publish-image.d.ts +129 -0
  156. package/dist/components/verbs/publish-image.d.ts.map +1 -0
  157. package/dist/components/verbs/publish-image.js +145 -0
  158. package/dist/config-environments.d.ts +112 -0
  159. package/dist/config-environments.d.ts.map +1 -0
  160. package/dist/config-environments.js +114 -0
  161. package/dist/config.d.ts +32 -84
  162. package/dist/config.d.ts.map +1 -1
  163. package/dist/config.js +13 -96
  164. package/dist/gate-decision.d.ts +11 -2
  165. package/dist/gate-decision.d.ts.map +1 -1
  166. package/dist/gate-decision.js +15 -3
  167. package/dist/graph-detail.d.ts.map +1 -1
  168. package/dist/graph-detail.js +15 -3
  169. package/dist/graph-effective.d.ts +33 -2
  170. package/dist/graph-effective.d.ts.map +1 -1
  171. package/dist/graph-effective.js +215 -68
  172. package/dist/graph-ir.d.ts +48 -0
  173. package/dist/graph-ir.d.ts.map +1 -1
  174. package/dist/graph-ir.js +130 -0
  175. package/dist/graph-sub-template.d.ts +11 -0
  176. package/dist/graph-sub-template.d.ts.map +1 -0
  177. package/dist/graph-sub-template.js +19 -0
  178. package/dist/graph-walk.d.ts +66 -0
  179. package/dist/graph-walk.d.ts.map +1 -0
  180. package/dist/graph-walk.js +70 -0
  181. package/dist/import/parser.d.ts +19 -0
  182. package/dist/import/parser.d.ts.map +1 -1
  183. package/dist/lexicon.d.ts +80 -6
  184. package/dist/lexicon.d.ts.map +1 -1
  185. package/dist/lifecycle/gate-ledger.d.ts +11 -0
  186. package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
  187. package/dist/lifecycle/git.d.ts +2 -5
  188. package/dist/lifecycle/git.d.ts.map +1 -1
  189. package/dist/lifecycle/ledger-read.d.ts +65 -0
  190. package/dist/lifecycle/ledger-read.d.ts.map +1 -0
  191. package/dist/lifecycle/ledger-read.js +160 -0
  192. package/dist/lifecycle/observe.d.ts +28 -0
  193. package/dist/lifecycle/observe.d.ts.map +1 -1
  194. package/dist/lifecycle/observe.js +23 -1
  195. package/dist/lifecycle/release-workstation.d.ts +7 -0
  196. package/dist/lifecycle/release-workstation.d.ts.map +1 -1
  197. package/dist/lifecycle/release-workstation.js +25 -0
  198. package/dist/lifecycle/run-ledger.d.ts +4 -3
  199. package/dist/lifecycle/run-ledger.d.ts.map +1 -1
  200. package/dist/lifecycle/run-ledger.js +1 -0
  201. package/dist/lint/discover.js +3 -1
  202. package/dist/lint/post-synth.d.ts +127 -1
  203. package/dist/lint/post-synth.d.ts.map +1 -1
  204. package/dist/lint/post-synth.js +84 -2
  205. package/dist/lint/rule.d.ts +6 -0
  206. package/dist/lint/rule.d.ts.map +1 -1
  207. package/dist/lint/rules/op/index.d.ts +1 -0
  208. package/dist/lint/rules/op/index.d.ts.map +1 -1
  209. package/dist/lint/rules/op/index.js +2 -0
  210. package/dist/lint/rules/op/ops019-workspace-op-target.d.ts +32 -0
  211. package/dist/lint/rules/op/ops019-workspace-op-target.d.ts.map +1 -0
  212. package/dist/lint/rules/op/ops019-workspace-op-target.js +63 -0
  213. package/dist/live-endpoint.d.ts +1 -1
  214. package/dist/live-endpoint.d.ts.map +1 -1
  215. package/dist/live-endpoint.js +1 -1
  216. package/dist/observation.d.ts +48 -1
  217. package/dist/observation.d.ts.map +1 -1
  218. package/dist/observation.js +21 -5
  219. package/dist/op/activities/activity-contracts.d.ts +9 -6
  220. package/dist/op/activities/activity-contracts.d.ts.map +1 -1
  221. package/dist/op/activities/activity-contracts.js +5 -2
  222. package/dist/op/activities/index.d.ts +2 -2
  223. package/dist/op/activities/index.d.ts.map +1 -1
  224. package/dist/op/activities/index.js +1 -1
  225. package/dist/op/activities/review-agent.d.ts +90 -4
  226. package/dist/op/activities/review-agent.d.ts.map +1 -1
  227. package/dist/op/activities/review-agent.js +217 -19
  228. package/dist/op/activities/work-evidence.d.ts +8 -1
  229. package/dist/op/activities/work-evidence.d.ts.map +1 -1
  230. package/dist/op/activities/work-evidence.js +1 -0
  231. package/dist/op/builders.d.ts +9 -5
  232. package/dist/op/builders.d.ts.map +1 -1
  233. package/dist/op/builders.js +9 -5
  234. package/dist/op/composites/apply-op.d.ts +29 -2
  235. package/dist/op/composites/apply-op.d.ts.map +1 -1
  236. package/dist/op/composites/apply-op.js +20 -1
  237. package/dist/op/gate-approval.d.ts +11 -5
  238. package/dist/op/gate-approval.d.ts.map +1 -1
  239. package/dist/op/gate-approval.js +11 -6
  240. package/dist/op/gate-quorum.d.ts +100 -3
  241. package/dist/op/gate-quorum.d.ts.map +1 -1
  242. package/dist/op/gate-quorum.js +108 -6
  243. package/dist/op/gate-review.d.ts +9 -0
  244. package/dist/op/gate-review.d.ts.map +1 -1
  245. package/dist/op/gate-review.js +13 -0
  246. package/dist/op/gate.d.ts +44 -3
  247. package/dist/op/gate.d.ts.map +1 -1
  248. package/dist/op/gate.js +25 -4
  249. package/dist/op/index.d.ts +3 -3
  250. package/dist/op/index.d.ts.map +1 -1
  251. package/dist/op/index.js +1 -1
  252. package/dist/op/local-executor.d.ts +38 -3
  253. package/dist/op/local-executor.d.ts.map +1 -1
  254. package/dist/op/local-executor.js +48 -6
  255. package/dist/op/op-waves-run.d.ts +26 -1
  256. package/dist/op/op-waves-run.d.ts.map +1 -1
  257. package/dist/op/op-waves-run.js +259 -13
  258. package/dist/op/op-waves.d.ts +72 -5
  259. package/dist/op/op-waves.d.ts.map +1 -1
  260. package/dist/op/op-waves.js +110 -15
  261. package/dist/op/runtime.d.ts +11 -0
  262. package/dist/op/runtime.d.ts.map +1 -1
  263. package/dist/op/schedule-overdue.d.ts +16 -0
  264. package/dist/op/schedule-overdue.d.ts.map +1 -1
  265. package/dist/op/schedule-overdue.js +36 -0
  266. package/dist/op/stage-hooks.d.ts +9 -2
  267. package/dist/op/stage-hooks.d.ts.map +1 -1
  268. package/dist/op/stage-hooks.js +7 -5
  269. package/dist/op/workspace-run-env.d.ts +22 -0
  270. package/dist/op/workspace-run-env.d.ts.map +1 -0
  271. package/dist/op/workspace-run-env.js +21 -0
  272. package/dist/pr-forge.d.ts +24 -0
  273. package/dist/pr-forge.d.ts.map +1 -1
  274. package/dist/pr-forge.js +47 -0
  275. package/dist/pr-post.d.ts +42 -0
  276. package/dist/pr-post.d.ts.map +1 -1
  277. package/dist/pr-post.js +67 -1
  278. package/dist/read-filter.d.ts +65 -0
  279. package/dist/read-filter.d.ts.map +1 -0
  280. package/dist/read-filter.js +179 -0
  281. package/dist/run-event.d.ts +1 -1
  282. package/dist/run-event.d.ts.map +1 -1
  283. package/dist/terraform/carve.d.ts +24 -3
  284. package/dist/terraform/carve.d.ts.map +1 -1
  285. package/dist/terraform/carve.js +32 -14
  286. package/dist/terraform/cuts.d.ts +97 -0
  287. package/dist/terraform/cuts.d.ts.map +1 -0
  288. package/dist/terraform/cuts.js +138 -0
  289. package/dist/terraform/folds.d.ts +26 -0
  290. package/dist/terraform/folds.d.ts.map +1 -0
  291. package/dist/terraform/folds.js +38 -0
  292. package/dist/terraform/graph.d.ts.map +1 -1
  293. package/dist/terraform/graph.js +10 -0
  294. package/dist/terraform/reach.d.ts +140 -0
  295. package/dist/terraform/reach.d.ts.map +1 -0
  296. package/dist/terraform/reach.js +170 -0
  297. package/dist/terraform/score.d.ts +14 -0
  298. package/dist/terraform/score.d.ts.map +1 -1
  299. package/dist/terraform/score.js +14 -31
  300. package/dist/terraform/state.d.ts.map +1 -1
  301. package/dist/terraform/state.js +4 -2
  302. package/dist/terraform/types.d.ts +8 -0
  303. package/dist/terraform/types.d.ts.map +1 -1
  304. package/dist/wave-blocked.d.ts +10 -1
  305. package/dist/wave-blocked.d.ts.map +1 -1
  306. package/dist/wave-blocked.js +31 -3
  307. package/dist/wave-runtime.mjs +266 -256
  308. package/dist/workspace/capabilities-contract.d.ts +66 -0
  309. package/dist/workspace/capabilities-contract.d.ts.map +1 -0
  310. package/dist/workspace/capabilities-contract.js +107 -0
  311. package/dist/workspace/capabilities.schema.json +229 -0
  312. package/dist/workspace/check.schema.json +11 -2
  313. package/dist/workspace/checks/ci-branch.d.ts +44 -0
  314. package/dist/workspace/checks/ci-branch.d.ts.map +1 -0
  315. package/dist/workspace/checks/ci-branch.js +133 -0
  316. package/dist/workspace/checks/links.d.ts +3 -0
  317. package/dist/workspace/checks/links.d.ts.map +1 -1
  318. package/dist/workspace/checks/links.js +12 -1
  319. package/dist/workspace/checks/org.d.ts +48 -0
  320. package/dist/workspace/checks/org.d.ts.map +1 -0
  321. package/dist/workspace/checks/org.js +156 -0
  322. package/dist/workspace/checks.d.ts +11 -1
  323. package/dist/workspace/checks.d.ts.map +1 -1
  324. package/dist/workspace/checks.js +59 -7
  325. package/dist/workspace/ci-branches.d.ts +16 -0
  326. package/dist/workspace/ci-branches.d.ts.map +1 -1
  327. package/dist/workspace/ci-branches.js +27 -0
  328. package/dist/workspace/ci-green-cli.js +7 -7
  329. package/dist/workspace/ci-green-workflow.d.ts +1 -1
  330. package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
  331. package/dist/workspace/ci-green-workflow.js +13 -8
  332. package/dist/workspace/ci-green.d.ts +14 -0
  333. package/dist/workspace/ci-green.d.ts.map +1 -1
  334. package/dist/workspace/ci-green.js +44 -11
  335. package/dist/workspace/ci-run.d.ts +9 -1
  336. package/dist/workspace/ci-run.d.ts.map +1 -1
  337. package/dist/workspace/ci-run.js +67 -6
  338. package/dist/workspace/ci-serve.d.ts +9 -0
  339. package/dist/workspace/ci-serve.d.ts.map +1 -1
  340. package/dist/workspace/ci-serve.js +114 -76
  341. package/dist/workspace/compose-graph.d.ts +23 -0
  342. package/dist/workspace/compose-graph.d.ts.map +1 -1
  343. package/dist/workspace/compose-graph.js +3 -1
  344. package/dist/workspace/composites.d.ts +4 -1
  345. package/dist/workspace/composites.d.ts.map +1 -1
  346. package/dist/workspace/composites.js +5 -2
  347. package/dist/workspace/composites.schema.json +22 -0
  348. package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
  349. package/dist/workspace/conformance/index.d.ts +1 -1
  350. package/dist/workspace/conformance/index.d.ts.map +1 -1
  351. package/dist/workspace/conformance/index.js +39 -2
  352. package/dist/workspace/cross-root-lint.d.ts +56 -0
  353. package/dist/workspace/cross-root-lint.d.ts.map +1 -0
  354. package/dist/workspace/cross-root-lint.js +111 -0
  355. package/dist/workspace/dbt-models-reader.d.ts +44 -0
  356. package/dist/workspace/dbt-models-reader.d.ts.map +1 -0
  357. package/dist/workspace/dbt-models-reader.js +356 -0
  358. package/dist/workspace/dbt-project-common.d.ts +40 -0
  359. package/dist/workspace/dbt-project-common.d.ts.map +1 -0
  360. package/dist/workspace/dbt-project-common.js +106 -0
  361. package/dist/workspace/dbt-project-reader.d.ts +4 -3
  362. package/dist/workspace/dbt-project-reader.d.ts.map +1 -1
  363. package/dist/workspace/dbt-project-reader.js +14 -108
  364. package/dist/workspace/decision-rank.d.ts +26 -0
  365. package/dist/workspace/decision-rank.d.ts.map +1 -0
  366. package/dist/workspace/decision-rank.js +16 -0
  367. package/dist/workspace/declaration.d.ts +43 -2
  368. package/dist/workspace/declaration.d.ts.map +1 -1
  369. package/dist/workspace/declaration.js +45 -11
  370. package/dist/workspace/declaration.schema.json +133 -24
  371. package/dist/workspace/environments.d.ts +26 -2
  372. package/dist/workspace/environments.d.ts.map +1 -1
  373. package/dist/workspace/environments.js +26 -2
  374. package/dist/workspace/flyway-dir.d.ts +39 -0
  375. package/dist/workspace/flyway-dir.d.ts.map +1 -0
  376. package/dist/workspace/flyway-dir.js +104 -0
  377. package/dist/workspace/flyway-layout.d.ts +96 -0
  378. package/dist/workspace/flyway-layout.d.ts.map +1 -0
  379. package/dist/workspace/flyway-layout.js +308 -0
  380. package/dist/workspace/graph-cache.d.ts +8 -0
  381. package/dist/workspace/graph-cache.d.ts.map +1 -1
  382. package/dist/workspace/graph-cache.js +27 -3
  383. package/dist/workspace/graph-cli.d.ts +39 -2
  384. package/dist/workspace/graph-cli.d.ts.map +1 -1
  385. package/dist/workspace/graph-cli.js +92 -32
  386. package/dist/workspace/graph.schema.json +182 -0
  387. package/dist/workspace/intent.d.ts +2 -3
  388. package/dist/workspace/intent.d.ts.map +1 -1
  389. package/dist/workspace/intent.js +5 -9
  390. package/dist/workspace/kind-link-readers.d.ts +59 -2
  391. package/dist/workspace/kind-link-readers.d.ts.map +1 -1
  392. package/dist/workspace/kind-link-readers.js +17 -1
  393. package/dist/workspace/kind-readers.d.ts +3 -0
  394. package/dist/workspace/kind-readers.d.ts.map +1 -1
  395. package/dist/workspace/kind-readers.js +7 -1
  396. package/dist/workspace/kinds.d.ts +66 -2
  397. package/dist/workspace/kinds.d.ts.map +1 -1
  398. package/dist/workspace/kinds.js +98 -4
  399. package/dist/workspace/ledger.schema.json +158 -0
  400. package/dist/workspace/lexicon-outputs.d.ts +20 -1
  401. package/dist/workspace/lexicon-outputs.d.ts.map +1 -1
  402. package/dist/workspace/lexicon-outputs.js +102 -10
  403. package/dist/workspace/lineage-check.d.ts +3 -0
  404. package/dist/workspace/lineage-check.d.ts.map +1 -1
  405. package/dist/workspace/lineage-check.js +23 -4
  406. package/dist/workspace/links.d.ts +8 -1
  407. package/dist/workspace/links.d.ts.map +1 -1
  408. package/dist/workspace/links.js +25 -1
  409. package/dist/workspace/ls.d.ts +8 -0
  410. package/dist/workspace/ls.d.ts.map +1 -1
  411. package/dist/workspace/ls.js +7 -1
  412. package/dist/workspace/ls.schema.json +7 -0
  413. package/dist/workspace/member-commands.d.ts +10 -1
  414. package/dist/workspace/member-commands.d.ts.map +1 -1
  415. package/dist/workspace/member-commands.js +71 -6
  416. package/dist/workspace/migrate-links.d.ts +45 -0
  417. package/dist/workspace/migrate-links.d.ts.map +1 -0
  418. package/dist/workspace/migrate-links.js +100 -0
  419. package/dist/workspace/migration-dirs.d.ts +74 -0
  420. package/dist/workspace/migration-dirs.d.ts.map +1 -0
  421. package/dist/workspace/migration-dirs.js +254 -0
  422. package/dist/workspace/nested-graph.d.ts +2 -0
  423. package/dist/workspace/nested-graph.d.ts.map +1 -1
  424. package/dist/workspace/nested-graph.js +32 -1
  425. package/dist/workspace/reason-codes.d.ts +18 -0
  426. package/dist/workspace/reason-codes.d.ts.map +1 -1
  427. package/dist/workspace/reason-codes.js +23 -0
  428. package/dist/workspace/records-cli.d.ts +11 -0
  429. package/dist/workspace/records-cli.d.ts.map +1 -1
  430. package/dist/workspace/records-cli.js +57 -5
  431. package/dist/workspace/records.schema.json +5 -0
  432. package/dist/workspace/release-candidates.d.ts +2 -0
  433. package/dist/workspace/release-candidates.d.ts.map +1 -1
  434. package/dist/workspace/release-candidates.js +5 -2
  435. package/dist/workspace/release-train.d.ts +53 -0
  436. package/dist/workspace/release-train.d.ts.map +1 -0
  437. package/dist/workspace/release-train.js +134 -0
  438. package/dist/workspace/release-workflow.d.ts.map +1 -1
  439. package/dist/workspace/release-workflow.js +4 -3
  440. package/dist/workspace/repo-ref.d.ts +45 -0
  441. package/dist/workspace/repo-ref.d.ts.map +1 -0
  442. package/dist/workspace/repo-ref.js +114 -0
  443. package/dist/workspace/run-event.schema.json +2 -2
  444. package/dist/workspace/runs-cli.d.ts +9 -0
  445. package/dist/workspace/runs-cli.d.ts.map +1 -1
  446. package/dist/workspace/runs-cli.js +48 -3
  447. package/dist/workspace/runs.schema.json +7 -0
  448. package/dist/workspace/search-cli.d.ts +204 -0
  449. package/dist/workspace/search-cli.d.ts.map +1 -0
  450. package/dist/workspace/search-cli.js +466 -0
  451. package/dist/workspace/search-contract.d.ts +56 -0
  452. package/dist/workspace/search-contract.d.ts.map +1 -0
  453. package/dist/workspace/search-contract.js +70 -0
  454. package/dist/workspace/search.schema.json +822 -0
  455. package/dist/workspace/status-decisions.d.ts +37 -0
  456. package/dist/workspace/status-decisions.d.ts.map +1 -0
  457. package/dist/workspace/status-decisions.js +147 -0
  458. package/dist/workspace/status-gates.d.ts +9 -0
  459. package/dist/workspace/status-gates.d.ts.map +1 -1
  460. package/dist/workspace/status.d.ts +4 -0
  461. package/dist/workspace/status.d.ts.map +1 -1
  462. package/dist/workspace/status.js +14 -2
  463. package/dist/workspace/status.schema.json +6 -0
  464. package/dist/workspace/work-cli.d.ts.map +1 -1
  465. package/dist/workspace/work-cli.js +5 -3
  466. package/dist/workspace/work-evidence-ops.d.ts +83 -0
  467. package/dist/workspace/work-evidence-ops.d.ts.map +1 -0
  468. package/dist/workspace/work-evidence-ops.js +169 -0
  469. package/dist/workspace/work-evidence.d.ts +12 -2
  470. package/dist/workspace/work-evidence.d.ts.map +1 -1
  471. package/dist/workspace/work-evidence.js +21 -3
  472. package/dist/workspace/work-evidence.schema.json +49 -2
  473. package/dist/workspace/workspace-gates.d.ts +110 -0
  474. package/dist/workspace/workspace-gates.d.ts.map +1 -0
  475. package/dist/workspace/workspace-gates.js +140 -0
  476. package/dist/workspace/workspace-kinds.schema.json +58 -3
  477. package/dist/workspace/workspace-ledger.d.ts +76 -0
  478. package/dist/workspace/workspace-ledger.d.ts.map +1 -0
  479. package/dist/workspace/workspace-ledger.js +91 -0
  480. package/dist/workspace/workspace-run.d.ts +112 -0
  481. package/dist/workspace/workspace-run.d.ts.map +1 -0
  482. package/dist/workspace/workspace-run.js +432 -0
  483. package/package.json +1 -1
  484. package/src/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
  485. package/src/__golden__/wave-loop/op-by-apply-hold.json +10 -0
  486. package/src/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
  487. package/src/__golden__/wave-loop/op-by-apply-pass.json +10 -0
  488. package/src/__golden__/wave-loop/op-by-apply-skip.json +10 -0
  489. package/src/__golden__/wave-loop/op-cost-member-clash.json +6 -0
  490. package/src/__golden__/wave-loop/op-cost-member.json +13 -0
  491. package/src/__golden__/wave-loop/op-denied-source.json +16 -0
  492. package/src/__golden__/wave-loop/op-denied.json +16 -0
  493. package/src/__golden__/wave-loop/op-discover-rest-short.json +6 -0
  494. package/src/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
  495. package/src/__golden__/wave-loop/op-discover-rest.json +26 -0
  496. package/src/__golden__/wave-loop/op-discover-wide.json +26 -0
  497. package/src/__golden__/wave-loop/op-held-on-again.json +16 -0
  498. package/src/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
  499. package/src/__golden__/wave-loop/op-held-on.json +16 -0
  500. package/src/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
  501. package/src/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
  502. package/src/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
  503. package/src/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
  504. package/src/__golden__/wave-loop/op-hooks-held.json +13 -0
  505. package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
  506. package/src/__golden__/wave-loop/op-hooks-pass.json +13 -0
  507. package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
  508. package/src/__golden__/wave-loop/op-hooks-share.json +33 -0
  509. package/src/__golden__/wave-loop/op-outcome-held.json +10 -0
  510. package/src/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
  511. package/src/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
  512. package/src/__golden__/wave-loop/op-outcome-replan.json +10 -0
  513. package/src/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
  514. package/src/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
  515. package/src/__golden__/wave-loop/op-overridden.json +16 -0
  516. package/src/__golden__/wave-loop/op-per-run.json +20 -0
  517. package/src/__golden__/wave-loop/op-point.json +13 -0
  518. package/src/__golden__/wave-loop/op-pr-review.json +10 -0
  519. package/src/__golden__/wave-loop/op-sealed.json +10 -0
  520. package/src/__golden__/wave-loop/op-spend-change-only.json +10 -0
  521. package/src/__golden__/wave-loop/op-spend.json +10 -0
  522. package/src/__golden__/wave-loop/op-wave-commands.json +55 -0
  523. package/src/__golden__/wave-loop/op-wide-refused.json +26 -0
  524. package/src/__golden__/wave-loop/op-wide-waiting.json +29 -0
  525. package/src/__golden__/wave-loop/op-wide.json +39 -0
  526. package/src/__snapshots__/okf.test.ts.snap +10 -0
  527. package/src/action-pins.test.ts +78 -0
  528. package/src/action-pins.ts +92 -0
  529. package/src/capabilities/aws.paths +148 -0
  530. package/src/capabilities/base-mappings.json +122 -0
  531. package/src/capabilities/catalog.ts +230 -0
  532. package/src/capabilities/language.test.ts +191 -0
  533. package/src/capabilities/language.ts +373 -0
  534. package/src/capabilities/matcher.ts +315 -0
  535. package/src/capabilities/view-compose.test.ts +76 -0
  536. package/src/capabilities/view.ts +631 -0
  537. package/src/cli/commands/carve-score-once.test.ts +99 -0
  538. package/src/cli/commands/carve.ts +37 -6
  539. package/src/cli/commands/check-lexicon.test.ts +2 -2
  540. package/src/cli/commands/import-report.ts +71 -0
  541. package/src/cli/commands/import.ts +33 -3
  542. package/src/cli/commands/lint.ts +1 -0
  543. package/src/cli/commands/migrate-dialect.test.ts +145 -0
  544. package/src/cli/commands/migrate.ts +132 -11
  545. package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +4 -4
  546. package/src/cli/handlers/approve.ts +23 -2
  547. package/src/cli/handlers/build.ts +7 -1
  548. package/src/cli/handlers/declared-graph.ts +99 -0
  549. package/src/cli/handlers/graph.test.ts +94 -3
  550. package/src/cli/handlers/graph.ts +123 -96
  551. package/src/cli/handlers/ledger.ts +54 -0
  552. package/src/cli/handlers/migrate.ts +21 -12
  553. package/src/cli/handlers/misc.ts +10 -1
  554. package/src/cli/handlers/pr-env.ts +3 -4
  555. package/src/cli/handlers/pr.ts +138 -36
  556. package/src/cli/handlers/query.ts +16 -4
  557. package/src/cli/handlers/release.ts +6 -3
  558. package/src/cli/handlers/search-build-roots.test.ts +144 -0
  559. package/src/cli/handlers/search-count.test.ts +191 -0
  560. package/src/cli/handlers/search-count.ts +165 -0
  561. package/src/cli/handlers/search-json.test.ts +333 -0
  562. package/src/cli/handlers/search-live.test.ts +387 -0
  563. package/src/cli/handlers/search-paths.test.ts +235 -0
  564. package/src/cli/handlers/search.ts +1291 -166
  565. package/src/cli/main.test.ts +43 -3
  566. package/src/cli/main.ts +88 -17
  567. package/src/cli/mcp/server.test.ts +3 -3
  568. package/src/cli/mcp/server.ts +3 -0
  569. package/src/cli/mcp/tools/capabilities.ts +32 -0
  570. package/src/cli/mcp/workspace-tools.e2e.test.ts +21 -1
  571. package/src/cli/mcp/workspace-tools.ts +47 -2
  572. package/src/cli/parse-args.ts +79 -15
  573. package/src/cli/registry.ts +36 -4
  574. package/src/components/builders.ts +8 -0
  575. package/src/components/capability-plugin-loader.ts +13 -1
  576. package/src/components/capability-plugin.ts +16 -0
  577. package/src/components/pr-env-ports.ts +89 -0
  578. package/src/components/pr-env-run-bundle.test.ts +54 -0
  579. package/src/components/pr-env-run.ts +5 -76
  580. package/src/components/pr-environment.ts +2 -1
  581. package/src/components/pr-hooks.test.ts +73 -5
  582. package/src/components/pr-hooks.ts +95 -5
  583. package/src/components/pr-pipeline.ts +64 -16
  584. package/src/components/pr-policy.test.ts +64 -1
  585. package/src/components/pr-policy.ts +53 -0
  586. package/src/components/registry.test.ts +1 -1
  587. package/src/components/starter-plugin.ts +6 -0
  588. package/src/components/verbs/index.ts +2 -0
  589. package/src/components/verbs/publish-artifact.test.ts +60 -0
  590. package/src/components/verbs/publish-artifact.ts +122 -0
  591. package/src/components/verbs/publish-image.test.ts +101 -0
  592. package/src/components/verbs/publish-image.ts +265 -0
  593. package/src/config-environments.ts +160 -0
  594. package/src/config.ts +44 -124
  595. package/src/gate-decision-bundle.test.ts +1 -0
  596. package/src/gate-decision-identity.test.ts +9 -0
  597. package/src/gate-decision.ts +26 -3
  598. package/src/graph-detail.ts +15 -3
  599. package/src/graph-effective.ts +226 -75
  600. package/src/graph-ir.test.ts +163 -0
  601. package/src/graph-ir.ts +174 -0
  602. package/src/graph-sub-template.ts +22 -0
  603. package/src/graph-walk.test.ts +44 -0
  604. package/src/graph-walk.ts +102 -0
  605. package/src/import/parser.ts +20 -0
  606. package/src/lexicon.ts +84 -6
  607. package/src/lifecycle/gate-ledger.ts +8 -0
  608. package/src/lifecycle/git.ts +2 -2
  609. package/src/lifecycle/ledger-read.test.ts +107 -0
  610. package/src/lifecycle/ledger-read.ts +195 -0
  611. package/src/lifecycle/observe.test.ts +27 -1
  612. package/src/lifecycle/observe.ts +43 -1
  613. package/src/lifecycle/release-workstation.ts +24 -0
  614. package/src/lifecycle/run-ledger.ts +5 -2
  615. package/src/lint/cross-root.test.ts +122 -0
  616. package/src/lint/discover.ts +3 -1
  617. package/src/lint/post-synth.ts +212 -2
  618. package/src/lint/rule.ts +6 -0
  619. package/src/lint/rules/op/index.ts +2 -0
  620. package/src/lint/rules/op/ops019-workspace-op-target.ts +89 -0
  621. package/src/live-endpoint.ts +1 -1
  622. package/src/observation.test.ts +25 -0
  623. package/src/observation.ts +69 -5
  624. package/src/op/activities/activity-contracts.ts +5 -2
  625. package/src/op/activities/index.ts +2 -2
  626. package/src/op/activities/review-agent.test.ts +221 -4
  627. package/src/op/activities/review-agent.ts +265 -22
  628. package/src/op/activities/work-evidence.ts +9 -1
  629. package/src/op/builders.ts +9 -5
  630. package/src/op/composites/apply-op.test.ts +108 -0
  631. package/src/op/composites/apply-op.ts +37 -2
  632. package/src/op/gate-approval.test.ts +6 -1
  633. package/src/op/gate-approval.ts +12 -6
  634. package/src/op/gate-quorum-at-base.test.ts +211 -0
  635. package/src/op/gate-quorum.ts +156 -8
  636. package/src/op/gate-review.ts +14 -0
  637. package/src/op/gate.ts +67 -8
  638. package/src/op/index.ts +3 -2
  639. package/src/op/local-executor.ts +69 -9
  640. package/src/op/op-waves-depends-on.test.ts +81 -0
  641. package/src/op/op-waves-hook-targets.test.ts +4 -2
  642. package/src/op/op-waves-quorum-product.test.ts +158 -0
  643. package/src/op/op-waves-run.ts +288 -14
  644. package/src/op/op-waves.ts +143 -14
  645. package/src/op/runtime.ts +8 -0
  646. package/src/op/schedule-overdue.ts +33 -0
  647. package/src/op/stage-hooks.ts +13 -5
  648. package/src/op/workspace-run-env.ts +29 -0
  649. package/src/pr-forge-bundle.test.ts +2 -2
  650. package/src/pr-forge.test.ts +47 -0
  651. package/src/pr-forge.ts +68 -0
  652. package/src/pr-post-open.e2e.test.ts +36 -0
  653. package/src/pr-post.test.ts +102 -3
  654. package/src/pr-post.ts +89 -1
  655. package/src/read-filter.test.ts +54 -0
  656. package/src/read-filter.ts +193 -0
  657. package/src/run-event.ts +1 -1
  658. package/src/stage-hooks-bundle.test.ts +1 -0
  659. package/src/terraform/carve.ts +52 -15
  660. package/src/terraform/cuts.test.ts +173 -0
  661. package/src/terraform/cuts.ts +188 -0
  662. package/src/terraform/folds.ts +44 -0
  663. package/src/terraform/graph.ts +9 -0
  664. package/src/terraform/radius.test.ts +90 -0
  665. package/src/terraform/reach.test.ts +146 -0
  666. package/src/terraform/reach.ts +247 -0
  667. package/src/terraform/score.ts +27 -29
  668. package/src/terraform/state.ts +3 -1
  669. package/src/terraform/types.ts +8 -0
  670. package/src/wave-blocked.ts +28 -3
  671. package/src/wave-loop-golden.test.ts +4 -3
  672. package/src/workspace/behold-kinds.test.ts +1 -1
  673. package/src/workspace/capabilities-contract.test.ts +88 -0
  674. package/src/workspace/capabilities-contract.ts +132 -0
  675. package/src/workspace/capabilities.schema.json +229 -0
  676. package/src/workspace/check-contract.test.ts +7 -6
  677. package/src/workspace/check.schema.json +11 -2
  678. package/src/workspace/checks/ci-branch.test.ts +128 -0
  679. package/src/workspace/checks/ci-branch.ts +141 -0
  680. package/src/workspace/checks/links.ts +12 -1
  681. package/src/workspace/checks/org.ts +169 -0
  682. package/src/workspace/checks.ts +64 -7
  683. package/src/workspace/ci-branches.ts +31 -0
  684. package/src/workspace/ci-green-branches.test.ts +153 -0
  685. package/src/workspace/ci-green-cli.ts +7 -7
  686. package/src/workspace/ci-green-workflow.test.ts +4 -3
  687. package/src/workspace/ci-green-workflow.ts +13 -9
  688. package/src/workspace/ci-green.ts +49 -12
  689. package/src/workspace/ci-run.test.ts +72 -1
  690. package/src/workspace/ci-run.ts +68 -8
  691. package/src/workspace/ci-serve.test.ts +95 -0
  692. package/src/workspace/ci-serve.ts +106 -65
  693. package/src/workspace/component-environments.test.ts +25 -2
  694. package/src/workspace/compose-graph.ts +19 -3
  695. package/src/workspace/composites.schema.json +22 -0
  696. package/src/workspace/composites.test.ts +39 -8
  697. package/src/workspace/composites.ts +6 -2
  698. package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
  699. package/src/workspace/conformance/conformance.e2e.test.ts +14 -1
  700. package/src/workspace/conformance/index.ts +31 -2
  701. package/src/workspace/cross-root-lint.test.ts +90 -0
  702. package/src/workspace/cross-root-lint.ts +126 -0
  703. package/src/workspace/dbt-kind.test.ts +3 -2
  704. package/src/workspace/dbt-models-reader.ts +362 -0
  705. package/src/workspace/dbt-models.test.ts +248 -0
  706. package/src/workspace/dbt-project-common.ts +113 -0
  707. package/src/workspace/dbt-project-reader.ts +29 -112
  708. package/src/workspace/decision-rank.ts +40 -0
  709. package/src/workspace/declaration.schema.json +133 -24
  710. package/src/workspace/declaration.ts +84 -15
  711. package/src/workspace/environments.ts +40 -4
  712. package/src/workspace/flyway-dir.ts +113 -0
  713. package/src/workspace/flyway-layout.ts +337 -0
  714. package/src/workspace/graph-cache.ts +27 -3
  715. package/src/workspace/graph-cli.ts +119 -32
  716. package/src/workspace/graph-contract.test.ts +4 -2
  717. package/src/workspace/graph.schema.json +182 -0
  718. package/src/workspace/identity.test.ts +14 -2
  719. package/src/workspace/intent.ts +6 -14
  720. package/src/workspace/kind-link-readers.ts +68 -3
  721. package/src/workspace/kind-readers.e2e.test.ts +28 -0
  722. package/src/workspace/kind-readers.test.ts +1 -1
  723. package/src/workspace/kind-readers.ts +7 -1
  724. package/src/workspace/kinds.test.ts +12 -7
  725. package/src/workspace/kinds.ts +132 -7
  726. package/src/workspace/ledger.schema.json +158 -0
  727. package/src/workspace/lexicon-outputs.ts +132 -13
  728. package/src/workspace/lineage-check.ts +30 -7
  729. package/src/workspace/links.ts +24 -1
  730. package/src/workspace/ls-contract.test.ts +1 -1
  731. package/src/workspace/ls.schema.json +7 -0
  732. package/src/workspace/ls.ts +10 -1
  733. package/src/workspace/member-commands.ts +82 -3
  734. package/src/workspace/member-file-schema.test.ts +124 -0
  735. package/src/workspace/migrate-links.test.ts +99 -0
  736. package/src/workspace/migrate-links.ts +108 -0
  737. package/src/workspace/migration-dirs.test.ts +272 -0
  738. package/src/workspace/migration-dirs.ts +267 -0
  739. package/src/workspace/nested-graph.ts +32 -1
  740. package/src/workspace/org-scope.test.ts +238 -0
  741. package/src/workspace/reason-codes.test.ts +13 -1
  742. package/src/workspace/reason-codes.ts +23 -0
  743. package/src/workspace/records-cli.ts +58 -5
  744. package/src/workspace/records.schema.json +5 -0
  745. package/src/workspace/release-candidates.ts +7 -2
  746. package/src/workspace/release-train.ts +157 -0
  747. package/src/workspace/release-workflow.ts +4 -3
  748. package/src/workspace/repo-ref.ts +113 -0
  749. package/src/workspace/run-event.schema.json +2 -2
  750. package/src/workspace/runs-cli.ts +48 -4
  751. package/src/workspace/runs.schema.json +7 -0
  752. package/src/workspace/search-cli.e2e.test.ts +305 -0
  753. package/src/workspace/search-cli.ts +591 -0
  754. package/src/workspace/search-contract.ts +95 -0
  755. package/src/workspace/search.schema.json +822 -0
  756. package/src/workspace/status-contract.test.ts +46 -1
  757. package/src/workspace/status-decisions.test.ts +100 -0
  758. package/src/workspace/status-decisions.ts +151 -0
  759. package/src/workspace/status-gates.ts +9 -0
  760. package/src/workspace/status.schema.json +6 -0
  761. package/src/workspace/status.ts +17 -3
  762. package/src/workspace/where-filters.test.ts +39 -0
  763. package/src/workspace/work-cli.ts +5 -3
  764. package/src/workspace/work-evidence-ops.test.ts +176 -0
  765. package/src/workspace/work-evidence-ops.ts +189 -0
  766. package/src/workspace/work-evidence.schema.json +49 -2
  767. package/src/workspace/work-evidence.ts +22 -3
  768. package/src/workspace/workspace-gates.ts +200 -0
  769. package/src/workspace/workspace-kinds.schema.json +58 -3
  770. package/src/workspace/workspace-ledger.ts +130 -0
  771. package/src/workspace/workspace-run.test.ts +322 -0
  772. package/src/workspace/workspace-run.ts +461 -0
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAKA,OAAO,EAAkB,KAAK,UAAU,EAAmB,MAAM,YAAY,CAAC;AAa9E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAgB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AA23CzC;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBzE;AAID;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,UAAU,EAwNvC,CAAC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAKA,OAAO,EAAkB,KAAK,UAAU,EAAmB,MAAM,YAAY,CAAC;AAa9E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAgB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AA27CzC;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBzE;AAID;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,UAAU,EA+NvC,CAAC"}
package/dist/cli/main.js CHANGED
@@ -157,14 +157,27 @@ Commands:
157
157
  bundle tree, otherwise JSON path→content on stdout)
158
158
  search "<query>" Answer an estate question with a few matching rows
159
159
  instead of a graph dump (kind:, tag:, attr:, ->/<- edge
160
- terms; --live or --at <ref> with --env <name> reads the
161
- estate or a recorded snapshot; --show <attr>,
162
- --check-live, --check-snapshot, --fail-on-drift)
160
+ terms, ->* / ->{1,3} for depth, ->[via=attr] / [to=attr]
161
+ by attribute; --live or --snapshot <ref> (also --at
162
+ <ref>) with --env <name> reads the estate or a
163
+ recorded snapshot; --show <attr>,
164
+ --count-by kind|module|attr:<name>, --explain prints
165
+ paths, --json, --check-live,
166
+ --check-snapshot, --fail-on-drift; cap:<name> and
167
+ ->[cap=<name>] ask with a capability, and
168
+ --capabilities prints the catalog)
163
169
  query "<sql>" [dir] Run one read-only SQL statement over chant/lifecycle:
164
170
  the resources and snapshots each lexicon observed, Op
165
171
  runs, gates, deploys, releases and cuts, loaded into
166
172
  node:sqlite (schema v1, listed in chant_schema).
167
- --member <name> keeps members; --json prints rows
173
+ --member <name> keeps members; --json prints rows.
174
+ For a read contract, use chant ledger
175
+ ledger <table> [dir] One ledger's rows from chant/lifecycle as a read
176
+ contract (resources, snapshots, runs, gates, deploys,
177
+ releases, cuts; the columns chant query loads).
178
+ --where <field><op><value> (= != < <= > >= ~,
179
+ repeatable), --since <time|7d>, --at <rev> of
180
+ chant/lifecycle, --member <name>, --json
168
181
  generate Generate typed code from sources chant.config declares
169
182
  (k8s.crds, helm.charts) into src/generated/<lexicon>/
170
183
  (codegen.outDir); --check exits 1 when the committed
@@ -567,6 +580,9 @@ Ops:
567
580
  --layout-engine graphviz to use dot instead;
568
581
  --detail 0..3: stacks|composites|declarables|attributes;
569
582
  --lens lexicon:<n>|stack:<n>|blast:<node> (--up/--down))
583
+ --format ir --capability-view: add the lexicon-neutral
584
+ view capability rules read, as this project's lexicons
585
+ map it, to the IR as capabilityView (#4378)
570
586
  --components --format ir --projection gitlab|github|forgejo:
571
587
  add the CI/pipeline projection (stages/jobs/needs) to
572
588
  the component-graph IR, from the same generator
@@ -604,7 +620,7 @@ Workspace (level 1, #2524):
604
620
  restore, from the deploy records, releases and ci
605
621
  revoked tags. Eight weeks back by default. Read only;
606
622
  never fetches. --json prints the read-contract document
607
- workspace records [--kind <kind file>] [--current] [--uncommitted | --at <rev>] [--base <rev>] [--require attested] [--json]
623
+ workspace records [--kind <kind file>] [--current] [--uncommitted | --at <rev>] [--base <rev>] [--require attested] [--where <field><op><value>]... [--json]
608
624
  Without --kind, every record kind the declaration
609
625
  names. Read the records a record kind locates, validated
610
626
  against its schema, with reason codes for invalid
@@ -617,7 +633,9 @@ Workspace (level 1, #2524):
617
633
  asset-drift or asset-missing. In the working tree,
618
634
  each record says whether it is committed, modified
619
635
  or new against HEAD, with the branch and base;
620
- --uncommitted lists only the modified and new ones
636
+ --uncommitted lists only the modified and new ones;
637
+ --where keeps the records a typed filter matches
638
+ (id, path, state, valid, data.<key>, ...)
621
639
  workspace records [--kind <kind file>] --since <rev|session id> [--at <rev>] [--json]
622
640
  What changed in the records between <rev> and --at
623
641
  (default: the working tree): new and removed records,
@@ -687,14 +705,16 @@ Workspace (level 1, #2524):
687
705
  a url or a path pinned by hash) is appended to the
688
706
  item's pins through records amend. Prints the
689
707
  work-evidence document and never commits
690
- workspace runs [--unit <id>] [--decision <id>] [--by <principal>] [--since <rev>] [--follow-squash] [--json]
708
+ workspace runs [--unit <id>] [--decision <id>] [--by <principal>] [--since <rev>] [--where <field><op><value>]... [--follow-squash] [--json]
691
709
  The agent runs in the run ledger on chant/lifecycle, each
692
710
  with its model, tokens, cost and the commits it made,
693
711
  and totals per work item, decision and principal; a run
694
712
  that reports no cost is listed as unpriced, never zero.
695
713
  Read-only, never fetches; --follow-squash joins each
696
714
  squash merge to its pull request's runs, fetching a
697
- missing refs/pull/<n>/head from origin
715
+ missing refs/pull/<n>/head from origin; --where keeps
716
+ the runs a typed filter matches (state, model,
717
+ startedAt, cost.amount, ...) before the totals
698
718
  workspace runs start --from <file|->
699
719
  Record that an agent run started: who it worked for,
700
720
  its harness, model, work item and lease. Prints the run
@@ -866,7 +886,7 @@ Workspace (level 1, #2524):
866
886
  workspace admit <return id> [--note <text>] [--dry-run] [--json]
867
887
  Admit the signers of a return in .chant/trust.json, so
868
888
  its signed work reads as attested once merged
869
- workspace check [--at <rev>] [--json] [--format stylish|json|sarif] [--generated] [--kind <kind file>] [--live --env <env>]
889
+ workspace check [--at <rev>] [--json] [--format stylish|json|sarif] [--generated] [--kind <kind file>] [--live --env <env>] [--forge-repos <file>]
870
890
  Fail on an unreadable lineage lock or an open manual
871
891
  step, and, in a declared workspace, on a WSP check of
872
892
  the declaration, member ledgers, pipelines or
@@ -878,7 +898,10 @@ Workspace (level 1, #2524):
878
898
  resolves each declared member link against the live
879
899
  graph of <env> (each chant member runs chant graph
880
900
  --live, which reaches the account) and reports
881
- WSP141 and WSP142
901
+ WSP141 and WSP142. --forge-repos reads a forge's
902
+ repository list from a file and reports repos an
903
+ org workspace lacks (WSP014) or names that the
904
+ forge no longer has (WSP015)
882
905
  workspace check --changes <base>..<head> [--work <id>] [--severity off|warn|fail] [--kind <kind file>...] [--json]
883
906
  Map each path the diff changes to the current records
884
907
  whose constrains cover it: change-uncovered when none
@@ -906,9 +929,12 @@ Workspace (level 1, #2524):
906
929
  its own chant, one process per toolchain. -o <dir>
907
930
  writes <dir>/<member>.json; --member narrows the run;
908
931
  --dry-run prints which chant runs which project
909
- workspace lint [dir] [--format stylish|json|sarif] [--member <name>]
932
+ workspace lint [dir] [--format stylish|json|sarif] [--member <name>] [--cross-root]
910
933
  Lint every chant member and example project with its
911
- own chant; sarif writes one run per member
934
+ own chant; sarif writes one run per member.
935
+ --cross-root adds the disagreement lint (LNK001 and
936
+ the lexicons' cross-root checks) over every member's
937
+ graph, where declared links and the graphs disagree
912
938
  workspace audit [dir] [--json] [--member <name>]
913
939
  Audit each chant member with its own .chant-audit.json;
914
940
  every finding carries a member field
@@ -921,6 +947,15 @@ Workspace (level 1, #2524):
921
947
  source and toolchain are unchanged is served from
922
948
  the cache in $CHANT_CACHE_DIR or ~/.cache/chant;
923
949
  --no-cache reads every member
950
+ --capability-view: each member's chant adds its
951
+ capability view, mapped by its own lexicons
952
+ workspace search "<query>" [--member <name>] [--env <name>] [--snapshot <ref> | --live] [--at <rev>] [--explain] [--count-by ...] [--json]
953
+ chant search in every chant member, each under its own
954
+ chant, as one read-contract document: ids are
955
+ <member>/<id> as workspace graph prints them, each
956
+ member is searched alone, and a member that can't be
957
+ searched has a reason code. --at <rev> is the git
958
+ revision; --snapshot <ref> replays a recorded snapshot
924
959
  workspace graph --composites [--at <rev>] [--member <name>] [-o <file>]
925
960
  Each composite instance the members declare, with the
926
961
  components whose contract can deploy it; an instance
@@ -936,6 +971,29 @@ Workspace (level 1, #2524):
936
971
  One decision's intent walk over every path: and member:
937
972
  entry it constrains: the commits in its window, each
938
973
  own, worked, within-other or unexplained, with counts
974
+ workspace run <member>/<op>... [--env <env>] [--gate <name>] [--on <lexicon>] [--dry-run] [--json]
975
+ Run Ops that span members (#2554): each target's chant
976
+ run <op> in the member's directory, under its own
977
+ chant, producers before the members that link to them.
978
+ OPS019 checks every target against the composed graph
979
+ first. Member run records cite the workspace run,
980
+ whose record goes under _members/_workspace/<env>/.
981
+ Exits 3 when a step stops at a gate
982
+ workspace run --dependents-of <member> --op <op> [--env <env>] [--gate <name>] [--dry-run] [--json]
983
+ Run <op> in every member that links to <member>,
984
+ directly or not, nearest first; members without the
985
+ Op are listed as skipped
986
+ workspace run approve <gate> [--plan <digest>] [--approver <principal>]
987
+ Approve a workspace gate's pending fact. It stands in
988
+ for a member gate only when it covers that member's
989
+ plan and the member sets acceptWorkspaceGates at base
990
+ workspace train <env> [--pin <member>=<label|digest>]... [--dry-run] [--json]
991
+ Record a release train: one cut release of every
992
+ chant member (the newest, unless --pin picks one),
993
+ under _members/_workspace/<env>/trains.jsonl. Refuses
994
+ when a member has no release
995
+ workspace train list <env> [--json]
996
+ The release trains recorded for <env>, oldest first
939
997
 
940
998
  Lifecycle (alias: lc):
941
999
  lifecycle snapshot <env> Query API, save metadata to orphan branch
@@ -1009,7 +1067,9 @@ Component release ledger + status:
1009
1067
  from the report pr-plan --no-status wrote
1010
1068
  (--pr <n> --head <sha> --env <env> --forge
1011
1069
  <kind>), in a job that runs none of the
1012
- change's code (#4295)
1070
+ change's code (#4295); --open posts every
1071
+ open merge request's from a GitLab pipeline
1072
+ of the target branch (#4328)
1013
1073
  components pr-record On merge (#4168): plan the same members again,
1014
1074
  store the change set and write the merge record
1015
1075
  _merges/<commit>.json; applies and refuses
@@ -1167,12 +1227,16 @@ Options:
1167
1227
  JSON (lifecycle plan)
1168
1228
  OR '--report markdown': emit a reviewer-facing markdown
1169
1229
  render, holes and disruption included (lifecycle plan)
1170
- --from <name> Source lexicon for migrate (default: github)
1171
- --to <name> Target lexicon for migrate (default: gitlab)
1172
- --emit <fmt> Migration output format: yaml (default) or ts
1230
+ --from <name> Source for migrate: a lexicon, or lexicon/dialect such
1231
+ as sql/postgres (default: github)
1232
+ --to <name> Target for migrate, same form, such as sql/clickhouse
1233
+ (default: gitlab)
1234
+ --emit <fmt> Migration output format: yaml (default), ts, or sql;
1235
+ sql/clickhouse defaults to ts
1173
1236
  --strict Escalate needs-review/validation to errors (migrate);
1174
1237
  exit nonzero on an unresolved identity (lifecycle whoami)
1175
- --validate Run external validator (glci/glab) after migrate
1238
+ --validate Run external validator after migrate: glci/glab, or the
1239
+ ClickHouse emulator for sql/clickhouse
1176
1240
  --use-composites Rewrite to composite calls when patterns match (migrate)
1177
1241
  --components Target discovered Component declarations instead of
1178
1242
  lexicon resources (list, describe, graph, build, run)
@@ -1463,6 +1527,7 @@ export const commandRegistry = [
1463
1527
  { name: "search", handler: runSearch },
1464
1528
  // #4297 — SQL over the snapshots, runs, gates, deploys and releases on chant/lifecycle. Imported on first use.
1465
1529
  { name: "query", runsNoConfig: true, handler: async (ctx) => (await import("./handlers/query.js")).runQueryCommand(ctx) },
1530
+ { name: "ledger", runsNoConfig: true, handler: async (ctx) => (await import("./handlers/ledger.js")).runLedgerCommand(ctx) },
1466
1531
  // chant#2591 — `import --agents` and `audit` read chant.config statically
1467
1532
  // and never evaluate it (chant#2589 for audit, which audits code it must not run).
1468
1533
  { name: "import", handler: runImport, runsNoConfig: (args) => args.agents === true },
@@ -1588,6 +1653,12 @@ export const commandRegistry = [
1588
1653
  // chant#2618 — audit runs no project code, at the workspace level too.
1589
1654
  { name: "workspace audit", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/member-commands.js")).runWorkspaceMembers(ctx, "audit") },
1590
1655
  { name: "workspace graph", handler: async (ctx) => (await import("../workspace/member-commands.js")).runWorkspaceMembers(ctx, "graph") },
1656
+ // #4374 — chant search in every member, under its own chant, composed with workspace graph's ids: the search document.
1657
+ // #2554 — Ops that span members, as <member>/<op> targets, each run under its member's own chant.
1658
+ { name: "workspace run", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/workspace-run.js")).runWorkspaceRun(ctx) },
1659
+ // #2554 — a release train: one release of every chant member, pinned in the workspace ledger.
1660
+ { name: "workspace train", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/release-train.js")).runWorkspaceTrain(ctx) },
1661
+ { name: "workspace search", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/search-cli.js")).runWorkspaceSearch(ctx) },
1591
1662
  // Each unit decides for itself whether its config is loaded (runCommandInProcess).
1592
1663
  { name: "workspace member-run", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/member-run.js")).runWorkspaceMemberRun(ctx, runCommandInProcess) },
1593
1664
  // #3308 — a box's listing, written through chant so a tool never edits the declaration itself (ws-074).
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/server.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAmE,MAAM,SAAS,CAAC;AAEvI,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAOrF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,YAAI,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAU,CAAC;AAG3H;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK9E;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,aAAa,CAAA;CAAE,CASnH;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO1E;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,eAAe,CAA8F;IACrH,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAqB;IACzC,4GAA4G;IAC5G,OAAO,CAAC,UAAU,CAA4B;IAE9C;;;;;;;;;OASG;IACH,YAAY,OAAO,CAAC,EAAE,aAAa,EAAE,EAAE,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,qBAAqB,CAAA;KAAO,EAqChH;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;;;;;;OAOG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACnF,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAwBtE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;YACW,QAAQ;IAmCtB;;OAEG;YACW,eAAe;IA2C7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC3B;CACF;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAYpD"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/server.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,WAAW,EAAmE,MAAM,SAAS,CAAC;AAEvI,OAAO,EAAwB,KAAK,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAOrF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,2BAA2B,YAAI,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,CAAU,CAAC;AAG3H;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAK9E;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,eAAe,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,aAAa,CAAA;CAAE,CASnH;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAGxE;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAO1E;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,eAAe,CAA8F;IACrH,OAAO,CAAC,OAAO,CAAkB;IACjC,OAAO,CAAC,YAAY,CAAqB;IACzC,4GAA4G;IAC5G,OAAO,CAAC,UAAU,CAA4B;IAE9C;;;;;;;;;OASG;IACH,YAAY,OAAO,CAAC,EAAE,aAAa,EAAE,EAAE,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,qBAAqB,CAAA;KAAO,EAuChH;IAED;;;;;;;;;;OAUG;IACH,OAAO,CAAC,mBAAmB;IAc3B;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAQpB;;;;;;;OAOG;IACG,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG;QAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACnF,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAwBtE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAW7B;;OAEG;YACW,QAAQ;IAmCtB;;OAEG;YACW,eAAe;IA2C7B;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAqC3B;CACF;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAYpD"}
@@ -7,6 +7,7 @@ import { explainTool, handleExplain } from "./tools/explain.js";
7
7
  import { scaffoldTool, createScaffoldHandler } from "./tools/scaffold.js";
8
8
  import { searchTool, createSearchHandler } from "./tools/search.js";
9
9
  import { compositesTool, createCompositesHandler } from "./tools/composites.js";
10
+ import { capabilitiesTool, createCapabilitiesHandler } from "./tools/capabilities.js";
10
11
  import { findWorkspaceRoot } from "../../project-root.js";
11
12
  import { createWorkspaceTools } from "./workspace-tools.js";
12
13
  import { createSnapshotTool, createDiffTool } from "./lifecycle-tools.js";
@@ -113,6 +114,8 @@ export class McpServer {
113
114
  this.registerTool(scaffoldTool, createScaffoldHandler(plugins ?? []));
114
115
  this.registerTool(searchTool, createSearchHandler(plugins ?? []));
115
116
  this.registerTool(compositesTool, createCompositesHandler(plugins ?? []));
117
+ // The capability catalog (#4375), the read contract's capabilities document.
118
+ this.registerTool(capabilitiesTool, createCapabilitiesHandler(options.workspace?.cwd ?? process.cwd(), options.workspace?.chantCommand));
116
119
  // Register state tools
117
120
  const snapshot = createSnapshotTool(plugins ?? []);
118
121
  this.registerTool(snapshot.definition, snapshot.handler);
@@ -0,0 +1,7 @@
1
+ import type { ToolDefinition, ToolHandler } from "../types.js";
2
+ import { type ChantCommand } from "../workspace-tools.js";
3
+ export declare const capabilitiesTool: ToolDefinition;
4
+ /** The argv the tool runs in `cwd`: the workspace form inside a declared workspace. */
5
+ export declare function capabilitiesArgv(cwd: string): string[];
6
+ export declare function createCapabilitiesHandler(cwd: string, command?: ChantCommand): ToolHandler;
7
+ //# sourceMappingURL=capabilities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capabilities.d.ts","sourceRoot":"","sources":["../../../../src/cli/mcp/tools/capabilities.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAA4B,KAAK,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEjF,eAAO,MAAM,gBAAgB,EAAE,cAO9B,CAAC;AAEF,uFAAuF;AACvF,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAEtD;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,GAAE,YAAgC,GAAG,WAAW,CAE7G"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The `capabilities` tool of `chant serve mcp` (#4375): the capability
3
+ * catalog `chant search` answers `cap:` terms with, as the read contract's
4
+ * `capabilities` document (capabilities.schema.json).
5
+ *
6
+ * Like the workspace reads, it runs the command and returns the document it
7
+ * printed, unchanged: `chant workspace search --capabilities --json` inside a
8
+ * declared workspace, where the workspace's chant runs the rules, and `chant
9
+ * search --capabilities --json` anywhere else. It is served everywhere, since
10
+ * a plain project's agent asks the same questions.
11
+ */
12
+ import { findWorkspaceRoot } from "../../../project-root.js";
13
+ import { ownChantCommand, runRead } from "../workspace-tools.js";
14
+ export const capabilitiesTool = {
15
+ name: "capabilities",
16
+ description: "The capability catalog for chant search (capabilities.schema.json, #4375): each capability's name, meaning, parameters, the search term that asks for it (cap:<name> for a set, ->[cap=<name>] for an edge), the questions it answers, whether each lexicon can supply it, what it does not evaluate, and its rule. " +
17
+ "Read it once per session, then ask estate questions with those terms, such as cap:internet-reachable(22) or cap:stores-data <-[cap=reaches]<role>. Not the resource-type catalog: that is the search tool. " +
18
+ "Returns the document chant search --capabilities --json prints (chant workspace search --capabilities --json inside a declared workspace), unchanged.",
19
+ inputSchema: { type: "object", properties: {} },
20
+ };
21
+ /** The argv the tool runs in `cwd`: the workspace form inside a declared workspace. */
22
+ export function capabilitiesArgv(cwd) {
23
+ return findWorkspaceRoot(cwd) ? ["workspace", "search", "--capabilities", "--json"] : ["search", "--capabilities", "--json"];
24
+ }
25
+ export function createCapabilitiesHandler(cwd, command = ownChantCommand()) {
26
+ return async () => runRead(command, capabilitiesArgv(cwd), cwd);
27
+ }
@@ -5,7 +5,7 @@
5
5
  * Served when the server starts at or inside a declared workspace. Each tool
6
6
  * is a thin call into the code the CLI runs:
7
7
  *
8
- * - The reads (`workspace-ls`, `workspace-status`, `workspace-graph`,
8
+ * - The reads (`workspace-ls`, `workspace-status`, `workspace-graph`, `workspace-search`,
9
9
  * `workspace-changes`, `workspace-records`, `workspace-points`,
10
10
  * `workspace-work-history`, `workspace-runs`) run `chant workspace <command>
11
11
  * ... --json` with the chant this server runs as, in the server's
@@ -60,6 +60,8 @@ export declare const workspaceReadTools: ToolDefinition[];
60
60
  export declare const workspaceWriteTools: ToolDefinition[];
61
61
  /** The `chant` arguments each read tool runs, from its input. Exported for the conformance suite's MCP transport. */
62
62
  export declare function readArgv(tool: string, params: Record<string, unknown>): string[];
63
+ /** Run chant and parse the one JSON document it printed. The exit code does not matter: an error document is a document. */
64
+ export declare function runRead(command: ChantCommand, argv: string[], cwd: string): Promise<unknown>;
63
65
  export interface WorkspaceTool {
64
66
  definition: ToolDefinition;
65
67
  handler: ToolHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-tools.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/workspace-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAGH,OAAO,KAAK,EAAe,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKxE,oEAAoE;AACpE,MAAM,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED,MAAM,WAAW,qBAAqB;IACpC,qFAAqF;IACrF,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmBD,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAkI9C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAAc,EA+H/C,CAAC;AAsCF,qHAAqH;AACrH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAyEhF;AA6CD,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,EAAE,CA+GpF"}
1
+ {"version":3,"file":"workspace-tools.d.ts","sourceRoot":"","sources":["../../../src/cli/mcp/workspace-tools.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAGH,OAAO,KAAK,EAAe,cAAc,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKxE,oEAAoE;AACpE,MAAM,MAAM,YAAY,GAAG,MAAM,EAAE,CAAC;AAEpC;;;GAGG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C;AAED,MAAM,WAAW,qBAAqB;IACpC,qFAAqF;IACrF,GAAG,EAAE,MAAM,CAAC;IACZ,oEAAoE;IACpE,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAmBD,eAAO,MAAM,kBAAkB,EAAE,cAAc,EAuJ9C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,cAAc,EA+H/C,CAAC;AAsCF,qHAAqH;AACrH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAiGhF;AAED,4HAA4H;AAC5H,wBAAgB,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAiB5F;AAyBD,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,+EAA+E;AAC/E,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,aAAa,EAAE,CA+GpF"}
@@ -5,7 +5,7 @@
5
5
  * Served when the server starts at or inside a declared workspace. Each tool
6
6
  * is a thin call into the code the CLI runs:
7
7
  *
8
- * - The reads (`workspace-ls`, `workspace-status`, `workspace-graph`,
8
+ * - The reads (`workspace-ls`, `workspace-status`, `workspace-graph`, `workspace-search`,
9
9
  * `workspace-changes`, `workspace-records`, `workspace-points`,
10
10
  * `workspace-work-history`, `workspace-runs`) run `chant workspace <command>
11
11
  * ... --json` with the chant this server runs as, in the server's
@@ -98,6 +98,26 @@ export const workspaceReadTools = [
98
98
  },
99
99
  },
100
100
  },
101
+ {
102
+ name: "workspace-search",
103
+ description: "Answer an estate question over every chant member of the workspace with a few rows instead of the whole graph: chant workspace search <query> --json (search.schema.json, #4374). Returns that document unchanged. Each member is searched under its own chant and alone, ids are <member>/<id> as workspace-graph names the same nodes, and a member that can't be searched is listed with a reason code, never as zero matches. " +
104
+ "The query is space-separated terms that must all match: a bare word (substring of id, kind or attributes), kind:<substr> (a Terraform resource matches its type, kind:aws_instance), attr:<name>=<value>, tag:<key>=<value>, and edge terms ->X (this node references a node matching X) and <-X (referenced by one); ->*X is any depth, ->{2}X or ->{1,3}X a number of hops, ->[via=attr]X and ->[to=attr]X pick the edge by attribute, and !term negates. " +
105
+ "at is the git revision of the source; snapshot (with env) answers from a recorded lifecycle snapshot such as latest. They are two different times, and at refuses a snapshot ref.",
106
+ inputSchema: {
107
+ type: "object",
108
+ properties: {
109
+ query: { type: "string", description: "The search terms. May start with -> or <-." },
110
+ member: { type: "array", items: { type: "string" }, description: "Only these members (--member)." },
111
+ env: { type: "string", description: "The environment a snapshot was recorded for (--env)." },
112
+ snapshot: { type: "string", description: "Answer from this recorded lifecycle snapshot, such as latest (--snapshot). Needs env." },
113
+ countBy: { type: "string", description: "Group the matches: kind, module or attr:<name> (--count-by). The query may then be empty." },
114
+ show: { type: "string", description: "Comma-separated attributes to carry on each row (--show)." },
115
+ explain: { type: "boolean", description: "Add each member's universe and near misses (--explain)." },
116
+ at: atProp,
117
+ },
118
+ required: ["query"],
119
+ },
120
+ },
101
121
  {
102
122
  name: "workspace-changes",
103
123
  description: "The forward coverage check over a diff: chant workspace check --changes <range> --json (changes.schema.json, #2773). Each changed path with the current records whose constrains cover it, and a change-uncovered or change-out-of-scope finding for each gap, at the severity the declaration's changes block sets. links says whether each trunk commit of the range names its work item, with commit-unlinked and commit-wrongly-linked findings at the same severity. Returns the document unchanged.",
@@ -384,6 +404,31 @@ export function readArgv(tool, params) {
384
404
  "--json",
385
405
  ];
386
406
  }
407
+ case "workspace-search": {
408
+ // The query is one argument after `--`, so one that opens with -> stays a query.
409
+ const query = params.query;
410
+ if (typeof query !== "string")
411
+ throw new ToolInputError("query must be a string");
412
+ const members = params.member === undefined || params.member === null ? [] : Array.isArray(params.member) ? params.member : [params.member];
413
+ const memberArgs = members.flatMap((m, i) => ["--member", str({ [`member[${i}]`]: m }, `member[${i}]`, true)]);
414
+ const flags = ["env", "snapshot", "show"].flatMap((f) => {
415
+ const v = str(params, f);
416
+ return v !== undefined ? [`--${f}`, v] : [];
417
+ });
418
+ const countBy = str(params, "countBy");
419
+ return [
420
+ "workspace",
421
+ "search",
422
+ ...memberArgs,
423
+ ...flags,
424
+ ...(countBy !== undefined ? ["--count-by", countBy] : []),
425
+ ...(bool(params, "explain") ? ["--explain"] : []),
426
+ ...atArgs,
427
+ "--json",
428
+ "--",
429
+ query,
430
+ ];
431
+ }
387
432
  case "workspace-agent": {
388
433
  const name = str(params, "name", true);
389
434
  return ["workspace", "agent", name, "--json"];
@@ -425,7 +470,7 @@ export function readArgv(tool, params) {
425
470
  }
426
471
  }
427
472
  /** Run chant and parse the one JSON document it printed. The exit code does not matter: an error document is a document. */
428
- function runRead(command, argv, cwd) {
473
+ export function runRead(command, argv, cwd) {
429
474
  return new Promise((settle, fail) => {
430
475
  const child = spawn(command[0], [...command.slice(1), ...argv], { cwd, env: { ...process.env, NO_COLOR: "1" }, stdio: ["ignore", "pipe", "pipe"] });
431
476
  let stdout = "";
@@ -1 +1 @@
1
- {"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../../src/cli/parse-args.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA4F7C;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAu4BpD"}
1
+ {"version":3,"file":"parse-args.d.ts","sourceRoot":"","sources":["../../src/cli/parse-args.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AA6F7C;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAs8BpD"}
@@ -45,6 +45,7 @@ const BOOLEAN_FLAGS = new Set([
45
45
  "--up",
46
46
  "--down",
47
47
  "--include-dependents",
48
+ "--cross-root",
48
49
  "--local",
49
50
  "--json",
50
51
  "--progress-json",
@@ -148,11 +149,39 @@ export function parseArgs(args) {
148
149
  // whose own value legitimately contains `=` (`--param=tier=production`
149
150
  // splits to flag `--param`, value `tier=production`, not further split on
150
151
  // the second `=`).
151
- args = splitJoinedFlags(args, BOOLEAN_FLAGS);
152
+ //
153
+ // Tokens after a bare `--` are positionals (#4369), so they are not split.
154
+ const end = args.indexOf("--");
155
+ args = end < 0 ? splitJoinedFlags(args, BOOLEAN_FLAGS) : [...splitJoinedFlags(args.slice(0, end), BOOLEAN_FLAGS), ...args.slice(end)];
156
+ // chant #4369 — every token after a bare `--` is a positional, whatever it
157
+ // starts with: `chant search -- "-kind:X"` is the spelling that always works.
158
+ let onlyPositionals = false;
159
+ const positional = (arg) => {
160
+ if (result.command)
161
+ (result.positionals ?? (result.positionals = [])).push(arg);
162
+ if (!result.command) {
163
+ result.command = arg;
164
+ }
165
+ else if (result.path === ".") {
166
+ result.path = arg;
167
+ }
168
+ else if (!result.extraPositional) {
169
+ result.extraPositional = arg;
170
+ }
171
+ else {
172
+ result.extraPositional2 = arg;
173
+ }
174
+ };
152
175
  let i = 0;
153
176
  while (i < args.length) {
154
177
  const arg = args[i];
155
- if (arg === "--help" || arg === "-h") {
178
+ if (onlyPositionals) {
179
+ positional(arg);
180
+ }
181
+ else if (arg === "--") {
182
+ onlyPositionals = true;
183
+ }
184
+ else if (arg === "--help" || arg === "-h") {
156
185
  result.help = true;
157
186
  }
158
187
  else if (arg === "--version" || arg === "-V") {
@@ -414,6 +443,12 @@ export function parseArgs(args) {
414
443
  else if (arg === "--show") {
415
444
  result.show = args[++i];
416
445
  }
446
+ else if (arg === "--count-by") {
447
+ // `chant search --count-by kind|module|attr:<name>` (#4360)
448
+ result.countBy = args[++i];
449
+ if (!result.countBy || result.countBy.startsWith("-"))
450
+ throw new Error("--count-by needs a grouping: --count-by kind, --count-by module or --count-by attr:<name>");
451
+ }
417
452
  else if (arg === "--up") {
418
453
  result.up = true;
419
454
  }
@@ -435,6 +470,24 @@ export function parseArgs(args) {
435
470
  else if (arg === "--include-dependents") {
436
471
  result.includeDependents = true;
437
472
  }
473
+ else if (arg === "--cross-root") {
474
+ // `chant workspace lint --cross-root` (#2549): the disagreement lint over every member's graph.
475
+ result.crossRoot = true;
476
+ }
477
+ else if (arg === "--dependents-of") {
478
+ // `chant workspace run --dependents-of <member> --op <op>` (#2554).
479
+ const value = args[++i];
480
+ if (!value || value.startsWith("-"))
481
+ throw new Error("--dependents-of needs a member name: --dependents-of <member>");
482
+ result.dependentsOf = value;
483
+ }
484
+ else if (arg === "--pin") {
485
+ // `chant workspace train <env> --pin <member>=<label|digest>` (#2554), repeatable.
486
+ const value = args[++i];
487
+ if (!value || value.startsWith("-") || !value.includes("="))
488
+ throw new Error("--pin needs a member and a release: --pin <member>=<label|digest>");
489
+ (result.pins ?? (result.pins = [])).push(value);
490
+ }
438
491
  else if (arg === "--from-affected") {
439
492
  result.fromAffected = args[++i];
440
493
  }
@@ -655,6 +708,20 @@ export function parseArgs(args) {
655
708
  else if (arg === "--at") {
656
709
  result.at = args[++i];
657
710
  }
711
+ else if (arg === "--capability-view") {
712
+ // `chant graph --format ir --capability-view` and `chant workspace graph --capability-view` (#4378)
713
+ result.capabilityView = true;
714
+ }
715
+ else if (arg === "--capabilities") {
716
+ // `chant search --capabilities` and `chant workspace search --capabilities` (#4375)
717
+ result.capabilities = true;
718
+ }
719
+ else if (arg === "--snapshot") {
720
+ // `chant search` and `chant workspace search --snapshot <ref>` (#4374)
721
+ result.snapshot = args[++i];
722
+ if (!result.snapshot || result.snapshot.startsWith("-"))
723
+ throw new Error("--snapshot needs a snapshot ref: --snapshot latest");
724
+ }
658
725
  else if (arg === "--kind") {
659
726
  // `chant workspace records|graph|check --kind <kind file>` (#2546, #2549)
660
727
  result.kind = args[++i];
@@ -1203,8 +1270,8 @@ export function parseArgs(args) {
1203
1270
  result.expire = true;
1204
1271
  }
1205
1272
  else if (arg === "--role") {
1206
- // #2508 — a role the approver claims, which a gate's policy sees. A
1207
- // quorum reads roles from .chant/trust.json at base instead (#4290).
1273
+ // #2508 — a role the approver claims, recorded on the approval. A quorum
1274
+ // (#4290) and a gate policy (#4324) read roles from .chant/trust.json at base.
1208
1275
  // Repeatable, and a comma list works too.
1209
1276
  const value = args[++i] ?? "";
1210
1277
  result.roles = [...(result.roles ?? []), ...value.split(",").map((r) => r.trim()).filter(Boolean)];
@@ -1255,6 +1322,14 @@ export function parseArgs(args) {
1255
1322
  // run on the root project alone instead of refusing with WSP000.
1256
1323
  result.rootOnly = true;
1257
1324
  }
1325
+ else if (arg === "--forge-repos") {
1326
+ // #3168 — `chant workspace check --forge-repos <file>`: the forge's
1327
+ // repository list, as a warden reads it, for an org workspace's checks.
1328
+ const value = args[++i];
1329
+ if (!value || value.startsWith("-"))
1330
+ throw new Error("--forge-repos needs a file: --forge-repos <repos.json>");
1331
+ result.forgeRepos = value;
1332
+ }
1258
1333
  else if (arg === "--generated") {
1259
1334
  // #2641 — `chant workspace check --generated` runs each declared
1260
1335
  // generator and compares its output with the file in the tree.
@@ -1282,6 +1357,13 @@ export function parseArgs(args) {
1282
1357
  else if (arg === "--op") {
1283
1358
  result.op = args[++i];
1284
1359
  }
1360
+ else if (arg === "--where") {
1361
+ // #4363 — a typed filter on a contract read; repeatable, every clause has to hold.
1362
+ const value = args[++i];
1363
+ if (value === undefined || value.startsWith("--"))
1364
+ throw new Error("--where needs a clause: --where <field><op><value>");
1365
+ result.where = [...(result.where ?? []), value];
1366
+ }
1285
1367
  else if (arg === "--since") {
1286
1368
  result.since = args[++i];
1287
1369
  }
@@ -1303,21 +1385,20 @@ export function parseArgs(args) {
1303
1385
  // flags" isn't something this loop can name in isolation.
1304
1386
  throw new Error(`Unknown flag: ${arg}\nRun "chant --help" to see supported flags.`);
1305
1387
  }
1306
- else if (!arg.startsWith("-")) {
1307
- if (result.command)
1308
- (result.positionals ?? (result.positionals = [])).push(arg);
1309
- if (!result.command) {
1310
- result.command = arg;
1311
- }
1312
- else if (result.path === ".") {
1313
- result.path = arg;
1314
- }
1315
- else if (!result.extraPositional) {
1316
- result.extraPositional = arg;
1317
- }
1318
- else {
1319
- result.extraPositional2 = arg;
1320
- }
1388
+ else if (/^-[A-Za-z]/.test(arg)) {
1389
+ // chant #4369 — an unrecognised short flag (`-x`) is refused like an
1390
+ // unrecognised `--flag` (#1127). It used to be dropped without a word,
1391
+ // the same silent misparse #1127 closed for long flags. A lexicon's own
1392
+ // mounted command still gets its short flags: `main` tries the plugin
1393
+ // commands before rethrowing a parse error.
1394
+ throw new Error(`Unknown flag: ${arg}\nRun "chant --help" to see supported flags.`);
1395
+ }
1396
+ else {
1397
+ // Anything else is a positional, including a token that starts with `-`
1398
+ // but is not flag-shaped (#4369): `->kind:Bucket` is a search query that
1399
+ // opens with an outgoing edge term, and dropping it made `chant search`
1400
+ // answer for "." instead. A bare `-` is a positional too.
1401
+ positional(arg);
1321
1402
  }
1322
1403
  i++;
1323
1404
  }