@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.
- package/dist/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/dist/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/dist/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/dist/__golden__/wave-loop/op-cost-member.json +13 -0
- package/dist/__golden__/wave-loop/op-denied-source.json +16 -0
- package/dist/__golden__/wave-loop/op-denied.json +16 -0
- package/dist/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/dist/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/dist/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/dist/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/dist/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/dist/__golden__/wave-loop/op-held-on.json +16 -0
- package/dist/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/dist/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/dist/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/dist/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/dist/__golden__/wave-loop/op-overridden.json +16 -0
- package/dist/__golden__/wave-loop/op-per-run.json +20 -0
- package/dist/__golden__/wave-loop/op-point.json +13 -0
- package/dist/__golden__/wave-loop/op-pr-review.json +10 -0
- package/dist/__golden__/wave-loop/op-sealed.json +10 -0
- package/dist/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/dist/__golden__/wave-loop/op-spend.json +10 -0
- package/dist/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/dist/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/dist/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/dist/__golden__/wave-loop/op-wide.json +39 -0
- package/dist/action-pins.d.ts +61 -0
- package/dist/action-pins.d.ts.map +1 -0
- package/dist/action-pins.js +77 -0
- package/dist/capabilities/aws.paths +148 -0
- package/dist/capabilities/base-mappings.json +122 -0
- package/dist/capabilities/catalog.d.ts +89 -0
- package/dist/capabilities/catalog.d.ts.map +1 -0
- package/dist/capabilities/catalog.js +204 -0
- package/dist/capabilities/language.d.ts +103 -0
- package/dist/capabilities/language.d.ts.map +1 -0
- package/dist/capabilities/language.js +335 -0
- package/dist/capabilities/matcher.d.ts +65 -0
- package/dist/capabilities/matcher.d.ts.map +1 -0
- package/dist/capabilities/matcher.js +299 -0
- package/dist/capabilities/view.d.ts +207 -0
- package/dist/capabilities/view.d.ts.map +1 -0
- package/dist/capabilities/view.js +484 -0
- package/dist/cli/commands/carve.d.ts +3 -0
- package/dist/cli/commands/carve.d.ts.map +1 -1
- package/dist/cli/commands/carve.js +36 -7
- package/dist/cli/commands/import-report.d.ts +26 -0
- package/dist/cli/commands/import-report.d.ts.map +1 -0
- package/dist/cli/commands/import-report.js +65 -0
- package/dist/cli/commands/import.d.ts +11 -1
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/import.js +22 -3
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +1 -0
- package/dist/cli/commands/migrate.d.ts +13 -1
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +134 -10
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +21 -2
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +6 -1
- package/dist/cli/handlers/declared-graph.d.ts +44 -0
- package/dist/cli/handlers/declared-graph.d.ts.map +1 -0
- package/dist/cli/handlers/declared-graph.js +87 -0
- package/dist/cli/handlers/graph.d.ts +25 -0
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +93 -87
- package/dist/cli/handlers/ledger.d.ts +3 -0
- package/dist/cli/handlers/ledger.d.ts.map +1 -0
- package/dist/cli/handlers/ledger.js +55 -0
- package/dist/cli/handlers/migrate.d.ts.map +1 -1
- package/dist/cli/handlers/migrate.js +18 -11
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/misc.js +12 -1
- package/dist/cli/handlers/pr-env.d.ts.map +1 -1
- package/dist/cli/handlers/pr-env.js +4 -3
- package/dist/cli/handlers/pr.d.ts +15 -1
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +143 -39
- package/dist/cli/handlers/query.d.ts +7 -2
- package/dist/cli/handlers/query.d.ts.map +1 -1
- package/dist/cli/handlers/query.js +16 -4
- package/dist/cli/handlers/release.d.ts.map +1 -1
- package/dist/cli/handlers/release.js +6 -3
- package/dist/cli/handlers/search-count.d.ts +89 -0
- package/dist/cli/handlers/search-count.d.ts.map +1 -0
- package/dist/cli/handlers/search-count.js +132 -0
- package/dist/cli/handlers/search.d.ts +356 -6
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +1039 -155
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +88 -17
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/server.js +3 -0
- package/dist/cli/mcp/tools/capabilities.d.ts +7 -0
- package/dist/cli/mcp/tools/capabilities.d.ts.map +1 -0
- package/dist/cli/mcp/tools/capabilities.js +27 -0
- package/dist/cli/mcp/workspace-tools.d.ts +3 -1
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.js +47 -2
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +100 -19
- package/dist/cli/registry.d.ts +36 -4
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/components/builders.d.ts +5 -1
- package/dist/components/builders.d.ts.map +1 -1
- package/dist/components/builders.js +5 -0
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.js +16 -1
- package/dist/components/capability-plugin.d.ts +14 -0
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/pr-env-ports.d.ts +29 -0
- package/dist/components/pr-env-ports.d.ts.map +1 -0
- package/dist/components/pr-env-ports.js +77 -0
- package/dist/components/pr-env-run.d.ts +5 -21
- package/dist/components/pr-env-run.d.ts.map +1 -1
- package/dist/components/pr-env-run.js +6 -70
- package/dist/components/pr-environment.d.ts +2 -1
- package/dist/components/pr-environment.d.ts.map +1 -1
- package/dist/components/pr-environment.js +1 -1
- package/dist/components/pr-hooks.d.ts +21 -1
- package/dist/components/pr-hooks.d.ts.map +1 -1
- package/dist/components/pr-hooks.js +72 -4
- package/dist/components/pr-pipeline.d.ts +45 -10
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +47 -14
- package/dist/components/pr-policy.d.ts +36 -0
- package/dist/components/pr-policy.d.ts.map +1 -1
- package/dist/components/pr-policy.js +36 -0
- package/dist/components/starter-plugin.d.ts +1 -0
- package/dist/components/starter-plugin.d.ts.map +1 -1
- package/dist/components/starter-plugin.js +5 -1
- package/dist/components/verbs/index.d.ts +2 -0
- package/dist/components/verbs/index.d.ts.map +1 -1
- package/dist/components/verbs/index.js +2 -0
- package/dist/components/verbs/publish-artifact.d.ts +65 -0
- package/dist/components/verbs/publish-artifact.d.ts.map +1 -0
- package/dist/components/verbs/publish-artifact.js +74 -0
- package/dist/components/verbs/publish-image.d.ts +129 -0
- package/dist/components/verbs/publish-image.d.ts.map +1 -0
- package/dist/components/verbs/publish-image.js +145 -0
- package/dist/config-environments.d.ts +112 -0
- package/dist/config-environments.d.ts.map +1 -0
- package/dist/config-environments.js +114 -0
- package/dist/config.d.ts +32 -84
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +13 -96
- package/dist/gate-decision.d.ts +11 -2
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +15 -3
- package/dist/graph-detail.d.ts.map +1 -1
- package/dist/graph-detail.js +15 -3
- package/dist/graph-effective.d.ts +33 -2
- package/dist/graph-effective.d.ts.map +1 -1
- package/dist/graph-effective.js +215 -68
- package/dist/graph-ir.d.ts +48 -0
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-ir.js +130 -0
- package/dist/graph-sub-template.d.ts +11 -0
- package/dist/graph-sub-template.d.ts.map +1 -0
- package/dist/graph-sub-template.js +19 -0
- package/dist/graph-walk.d.ts +66 -0
- package/dist/graph-walk.d.ts.map +1 -0
- package/dist/graph-walk.js +70 -0
- package/dist/import/parser.d.ts +19 -0
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/lexicon.d.ts +80 -6
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +11 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/git.d.ts +2 -5
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/ledger-read.d.ts +65 -0
- package/dist/lifecycle/ledger-read.d.ts.map +1 -0
- package/dist/lifecycle/ledger-read.js +160 -0
- package/dist/lifecycle/observe.d.ts +28 -0
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/observe.js +23 -1
- package/dist/lifecycle/release-workstation.d.ts +7 -0
- package/dist/lifecycle/release-workstation.d.ts.map +1 -1
- package/dist/lifecycle/release-workstation.js +25 -0
- package/dist/lifecycle/run-ledger.d.ts +4 -3
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +1 -0
- package/dist/lint/discover.js +3 -1
- package/dist/lint/post-synth.d.ts +127 -1
- package/dist/lint/post-synth.d.ts.map +1 -1
- package/dist/lint/post-synth.js +84 -2
- package/dist/lint/rule.d.ts +6 -0
- package/dist/lint/rule.d.ts.map +1 -1
- package/dist/lint/rules/op/index.d.ts +1 -0
- package/dist/lint/rules/op/index.d.ts.map +1 -1
- package/dist/lint/rules/op/index.js +2 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts +32 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.d.ts.map +1 -0
- package/dist/lint/rules/op/ops019-workspace-op-target.js +63 -0
- package/dist/live-endpoint.d.ts +1 -1
- package/dist/live-endpoint.d.ts.map +1 -1
- package/dist/live-endpoint.js +1 -1
- package/dist/observation.d.ts +48 -1
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +21 -5
- package/dist/op/activities/activity-contracts.d.ts +9 -6
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.js +5 -2
- package/dist/op/activities/index.d.ts +2 -2
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/index.js +1 -1
- package/dist/op/activities/review-agent.d.ts +90 -4
- package/dist/op/activities/review-agent.d.ts.map +1 -1
- package/dist/op/activities/review-agent.js +217 -19
- package/dist/op/activities/work-evidence.d.ts +8 -1
- package/dist/op/activities/work-evidence.d.ts.map +1 -1
- package/dist/op/activities/work-evidence.js +1 -0
- package/dist/op/builders.d.ts +9 -5
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +9 -5
- package/dist/op/composites/apply-op.d.ts +29 -2
- package/dist/op/composites/apply-op.d.ts.map +1 -1
- package/dist/op/composites/apply-op.js +20 -1
- package/dist/op/gate-approval.d.ts +11 -5
- package/dist/op/gate-approval.d.ts.map +1 -1
- package/dist/op/gate-approval.js +11 -6
- package/dist/op/gate-quorum.d.ts +100 -3
- package/dist/op/gate-quorum.d.ts.map +1 -1
- package/dist/op/gate-quorum.js +108 -6
- package/dist/op/gate-review.d.ts +9 -0
- package/dist/op/gate-review.d.ts.map +1 -1
- package/dist/op/gate-review.js +13 -0
- package/dist/op/gate.d.ts +44 -3
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +25 -4
- package/dist/op/index.d.ts +3 -3
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +1 -1
- package/dist/op/local-executor.d.ts +38 -3
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +48 -6
- package/dist/op/op-waves-run.d.ts +26 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +259 -13
- package/dist/op/op-waves.d.ts +72 -5
- package/dist/op/op-waves.d.ts.map +1 -1
- package/dist/op/op-waves.js +110 -15
- package/dist/op/runtime.d.ts +11 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/schedule-overdue.d.ts +16 -0
- package/dist/op/schedule-overdue.d.ts.map +1 -1
- package/dist/op/schedule-overdue.js +36 -0
- package/dist/op/stage-hooks.d.ts +9 -2
- package/dist/op/stage-hooks.d.ts.map +1 -1
- package/dist/op/stage-hooks.js +7 -5
- package/dist/op/workspace-run-env.d.ts +22 -0
- package/dist/op/workspace-run-env.d.ts.map +1 -0
- package/dist/op/workspace-run-env.js +21 -0
- package/dist/pr-forge.d.ts +24 -0
- package/dist/pr-forge.d.ts.map +1 -1
- package/dist/pr-forge.js +47 -0
- package/dist/pr-post.d.ts +42 -0
- package/dist/pr-post.d.ts.map +1 -1
- package/dist/pr-post.js +67 -1
- package/dist/read-filter.d.ts +65 -0
- package/dist/read-filter.d.ts.map +1 -0
- package/dist/read-filter.js +179 -0
- package/dist/run-event.d.ts +1 -1
- package/dist/run-event.d.ts.map +1 -1
- package/dist/terraform/carve.d.ts +24 -3
- package/dist/terraform/carve.d.ts.map +1 -1
- package/dist/terraform/carve.js +32 -14
- package/dist/terraform/cuts.d.ts +97 -0
- package/dist/terraform/cuts.d.ts.map +1 -0
- package/dist/terraform/cuts.js +138 -0
- package/dist/terraform/folds.d.ts +26 -0
- package/dist/terraform/folds.d.ts.map +1 -0
- package/dist/terraform/folds.js +38 -0
- package/dist/terraform/graph.d.ts.map +1 -1
- package/dist/terraform/graph.js +10 -0
- package/dist/terraform/reach.d.ts +140 -0
- package/dist/terraform/reach.d.ts.map +1 -0
- package/dist/terraform/reach.js +170 -0
- package/dist/terraform/score.d.ts +14 -0
- package/dist/terraform/score.d.ts.map +1 -1
- package/dist/terraform/score.js +14 -31
- package/dist/terraform/state.d.ts.map +1 -1
- package/dist/terraform/state.js +4 -2
- package/dist/terraform/types.d.ts +8 -0
- package/dist/terraform/types.d.ts.map +1 -1
- package/dist/wave-blocked.d.ts +10 -1
- package/dist/wave-blocked.d.ts.map +1 -1
- package/dist/wave-blocked.js +31 -3
- package/dist/wave-runtime.mjs +266 -256
- package/dist/workspace/capabilities-contract.d.ts +66 -0
- package/dist/workspace/capabilities-contract.d.ts.map +1 -0
- package/dist/workspace/capabilities-contract.js +107 -0
- package/dist/workspace/capabilities.schema.json +229 -0
- package/dist/workspace/check.schema.json +11 -2
- package/dist/workspace/checks/ci-branch.d.ts +44 -0
- package/dist/workspace/checks/ci-branch.d.ts.map +1 -0
- package/dist/workspace/checks/ci-branch.js +133 -0
- package/dist/workspace/checks/links.d.ts +3 -0
- package/dist/workspace/checks/links.d.ts.map +1 -1
- package/dist/workspace/checks/links.js +12 -1
- package/dist/workspace/checks/org.d.ts +48 -0
- package/dist/workspace/checks/org.d.ts.map +1 -0
- package/dist/workspace/checks/org.js +156 -0
- package/dist/workspace/checks.d.ts +11 -1
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +59 -7
- package/dist/workspace/ci-branches.d.ts +16 -0
- package/dist/workspace/ci-branches.d.ts.map +1 -1
- package/dist/workspace/ci-branches.js +27 -0
- package/dist/workspace/ci-green-cli.js +7 -7
- package/dist/workspace/ci-green-workflow.d.ts +1 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +13 -8
- package/dist/workspace/ci-green.d.ts +14 -0
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +44 -11
- package/dist/workspace/ci-run.d.ts +9 -1
- package/dist/workspace/ci-run.d.ts.map +1 -1
- package/dist/workspace/ci-run.js +67 -6
- package/dist/workspace/ci-serve.d.ts +9 -0
- package/dist/workspace/ci-serve.d.ts.map +1 -1
- package/dist/workspace/ci-serve.js +114 -76
- package/dist/workspace/compose-graph.d.ts +23 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/compose-graph.js +3 -1
- package/dist/workspace/composites.d.ts +4 -1
- package/dist/workspace/composites.d.ts.map +1 -1
- package/dist/workspace/composites.js +5 -2
- package/dist/workspace/composites.schema.json +22 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/dist/workspace/conformance/index.d.ts +1 -1
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/conformance/index.js +39 -2
- package/dist/workspace/cross-root-lint.d.ts +56 -0
- package/dist/workspace/cross-root-lint.d.ts.map +1 -0
- package/dist/workspace/cross-root-lint.js +111 -0
- package/dist/workspace/dbt-models-reader.d.ts +44 -0
- package/dist/workspace/dbt-models-reader.d.ts.map +1 -0
- package/dist/workspace/dbt-models-reader.js +356 -0
- package/dist/workspace/dbt-project-common.d.ts +40 -0
- package/dist/workspace/dbt-project-common.d.ts.map +1 -0
- package/dist/workspace/dbt-project-common.js +106 -0
- package/dist/workspace/dbt-project-reader.d.ts +4 -3
- package/dist/workspace/dbt-project-reader.d.ts.map +1 -1
- package/dist/workspace/dbt-project-reader.js +14 -108
- package/dist/workspace/decision-rank.d.ts +26 -0
- package/dist/workspace/decision-rank.d.ts.map +1 -0
- package/dist/workspace/decision-rank.js +16 -0
- package/dist/workspace/declaration.d.ts +43 -2
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +45 -11
- package/dist/workspace/declaration.schema.json +133 -24
- package/dist/workspace/environments.d.ts +26 -2
- package/dist/workspace/environments.d.ts.map +1 -1
- package/dist/workspace/environments.js +26 -2
- package/dist/workspace/flyway-dir.d.ts +39 -0
- package/dist/workspace/flyway-dir.d.ts.map +1 -0
- package/dist/workspace/flyway-dir.js +104 -0
- package/dist/workspace/flyway-layout.d.ts +96 -0
- package/dist/workspace/flyway-layout.d.ts.map +1 -0
- package/dist/workspace/flyway-layout.js +308 -0
- package/dist/workspace/graph-cache.d.ts +8 -0
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cache.js +27 -3
- package/dist/workspace/graph-cli.d.ts +39 -2
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +92 -32
- package/dist/workspace/graph.schema.json +182 -0
- package/dist/workspace/intent.d.ts +2 -3
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +5 -9
- package/dist/workspace/kind-link-readers.d.ts +59 -2
- package/dist/workspace/kind-link-readers.d.ts.map +1 -1
- package/dist/workspace/kind-link-readers.js +17 -1
- package/dist/workspace/kind-readers.d.ts +3 -0
- package/dist/workspace/kind-readers.d.ts.map +1 -1
- package/dist/workspace/kind-readers.js +7 -1
- package/dist/workspace/kinds.d.ts +66 -2
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +98 -4
- package/dist/workspace/ledger.schema.json +158 -0
- package/dist/workspace/lexicon-outputs.d.ts +20 -1
- package/dist/workspace/lexicon-outputs.d.ts.map +1 -1
- package/dist/workspace/lexicon-outputs.js +102 -10
- package/dist/workspace/lineage-check.d.ts +3 -0
- package/dist/workspace/lineage-check.d.ts.map +1 -1
- package/dist/workspace/lineage-check.js +23 -4
- package/dist/workspace/links.d.ts +8 -1
- package/dist/workspace/links.d.ts.map +1 -1
- package/dist/workspace/links.js +25 -1
- package/dist/workspace/ls.d.ts +8 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +7 -1
- package/dist/workspace/ls.schema.json +7 -0
- package/dist/workspace/member-commands.d.ts +10 -1
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/member-commands.js +71 -6
- package/dist/workspace/migrate-links.d.ts +45 -0
- package/dist/workspace/migrate-links.d.ts.map +1 -0
- package/dist/workspace/migrate-links.js +100 -0
- package/dist/workspace/migration-dirs.d.ts +74 -0
- package/dist/workspace/migration-dirs.d.ts.map +1 -0
- package/dist/workspace/migration-dirs.js +254 -0
- package/dist/workspace/nested-graph.d.ts +2 -0
- package/dist/workspace/nested-graph.d.ts.map +1 -1
- package/dist/workspace/nested-graph.js +32 -1
- package/dist/workspace/reason-codes.d.ts +18 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +23 -0
- package/dist/workspace/records-cli.d.ts +11 -0
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-cli.js +57 -5
- package/dist/workspace/records.schema.json +5 -0
- package/dist/workspace/release-candidates.d.ts +2 -0
- package/dist/workspace/release-candidates.d.ts.map +1 -1
- package/dist/workspace/release-candidates.js +5 -2
- package/dist/workspace/release-train.d.ts +53 -0
- package/dist/workspace/release-train.d.ts.map +1 -0
- package/dist/workspace/release-train.js +134 -0
- package/dist/workspace/release-workflow.d.ts.map +1 -1
- package/dist/workspace/release-workflow.js +4 -3
- package/dist/workspace/repo-ref.d.ts +45 -0
- package/dist/workspace/repo-ref.d.ts.map +1 -0
- package/dist/workspace/repo-ref.js +114 -0
- package/dist/workspace/run-event.schema.json +2 -2
- package/dist/workspace/runs-cli.d.ts +9 -0
- package/dist/workspace/runs-cli.d.ts.map +1 -1
- package/dist/workspace/runs-cli.js +48 -3
- package/dist/workspace/runs.schema.json +7 -0
- package/dist/workspace/search-cli.d.ts +204 -0
- package/dist/workspace/search-cli.d.ts.map +1 -0
- package/dist/workspace/search-cli.js +466 -0
- package/dist/workspace/search-contract.d.ts +56 -0
- package/dist/workspace/search-contract.d.ts.map +1 -0
- package/dist/workspace/search-contract.js +70 -0
- package/dist/workspace/search.schema.json +822 -0
- package/dist/workspace/status-decisions.d.ts +37 -0
- package/dist/workspace/status-decisions.d.ts.map +1 -0
- package/dist/workspace/status-decisions.js +147 -0
- package/dist/workspace/status-gates.d.ts +9 -0
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status.d.ts +4 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +14 -2
- package/dist/workspace/status.schema.json +6 -0
- package/dist/workspace/work-cli.d.ts.map +1 -1
- package/dist/workspace/work-cli.js +5 -3
- package/dist/workspace/work-evidence-ops.d.ts +83 -0
- package/dist/workspace/work-evidence-ops.d.ts.map +1 -0
- package/dist/workspace/work-evidence-ops.js +169 -0
- package/dist/workspace/work-evidence.d.ts +12 -2
- package/dist/workspace/work-evidence.d.ts.map +1 -1
- package/dist/workspace/work-evidence.js +21 -3
- package/dist/workspace/work-evidence.schema.json +49 -2
- package/dist/workspace/workspace-gates.d.ts +110 -0
- package/dist/workspace/workspace-gates.d.ts.map +1 -0
- package/dist/workspace/workspace-gates.js +140 -0
- package/dist/workspace/workspace-kinds.schema.json +58 -3
- package/dist/workspace/workspace-ledger.d.ts +76 -0
- package/dist/workspace/workspace-ledger.d.ts.map +1 -0
- package/dist/workspace/workspace-ledger.js +91 -0
- package/dist/workspace/workspace-run.d.ts +112 -0
- package/dist/workspace/workspace-run.d.ts.map +1 -0
- package/dist/workspace/workspace-run.js +432 -0
- package/package.json +1 -1
- package/src/__golden__/wave-loop/op-by-apply-after-fails.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-hold.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-ignored.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-pass.json +10 -0
- package/src/__golden__/wave-loop/op-by-apply-skip.json +10 -0
- package/src/__golden__/wave-loop/op-cost-member-clash.json +6 -0
- package/src/__golden__/wave-loop/op-cost-member.json +13 -0
- package/src/__golden__/wave-loop/op-denied-source.json +16 -0
- package/src/__golden__/wave-loop/op-denied.json +16 -0
- package/src/__golden__/wave-loop/op-discover-rest-short.json +6 -0
- package/src/__golden__/wave-loop/op-discover-rest-stops.json +13 -0
- package/src/__golden__/wave-loop/op-discover-rest.json +26 -0
- package/src/__golden__/wave-loop/op-discover-wide.json +26 -0
- package/src/__golden__/wave-loop/op-held-on-again.json +16 -0
- package/src/__golden__/wave-loop/op-held-on-before-apply.json +16 -0
- package/src/__golden__/wave-loop/op-held-on.json +16 -0
- package/src/__golden__/wave-loop/op-hooks-apply-fails.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-after-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-fail-before-plan.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-held.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-pass.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +13 -0
- package/src/__golden__/wave-loop/op-hooks-share.json +33 -0
- package/src/__golden__/wave-loop/op-outcome-held.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-approved.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan-forever.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-replan.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-stood-down.json +10 -0
- package/src/__golden__/wave-loop/op-outcome-unreadable.json +10 -0
- package/src/__golden__/wave-loop/op-overridden.json +16 -0
- package/src/__golden__/wave-loop/op-per-run.json +20 -0
- package/src/__golden__/wave-loop/op-point.json +13 -0
- package/src/__golden__/wave-loop/op-pr-review.json +10 -0
- package/src/__golden__/wave-loop/op-sealed.json +10 -0
- package/src/__golden__/wave-loop/op-spend-change-only.json +10 -0
- package/src/__golden__/wave-loop/op-spend.json +10 -0
- package/src/__golden__/wave-loop/op-wave-commands.json +55 -0
- package/src/__golden__/wave-loop/op-wide-refused.json +26 -0
- package/src/__golden__/wave-loop/op-wide-waiting.json +29 -0
- package/src/__golden__/wave-loop/op-wide.json +39 -0
- package/src/__snapshots__/okf.test.ts.snap +10 -0
- package/src/action-pins.test.ts +78 -0
- package/src/action-pins.ts +92 -0
- package/src/capabilities/aws.paths +148 -0
- package/src/capabilities/base-mappings.json +122 -0
- package/src/capabilities/catalog.ts +230 -0
- package/src/capabilities/language.test.ts +191 -0
- package/src/capabilities/language.ts +373 -0
- package/src/capabilities/matcher.ts +315 -0
- package/src/capabilities/view-compose.test.ts +76 -0
- package/src/capabilities/view.ts +631 -0
- package/src/cli/commands/carve-score-once.test.ts +99 -0
- package/src/cli/commands/carve.ts +37 -6
- package/src/cli/commands/check-lexicon.test.ts +2 -2
- package/src/cli/commands/import-report.ts +71 -0
- package/src/cli/commands/import.ts +33 -3
- package/src/cli/commands/lint.ts +1 -0
- package/src/cli/commands/migrate-dialect.test.ts +145 -0
- package/src/cli/commands/migrate.ts +132 -11
- package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +4 -4
- package/src/cli/handlers/approve.ts +23 -2
- package/src/cli/handlers/build.ts +7 -1
- package/src/cli/handlers/declared-graph.ts +99 -0
- package/src/cli/handlers/graph.test.ts +94 -3
- package/src/cli/handlers/graph.ts +123 -96
- package/src/cli/handlers/ledger.ts +54 -0
- package/src/cli/handlers/migrate.ts +21 -12
- package/src/cli/handlers/misc.ts +10 -1
- package/src/cli/handlers/pr-env.ts +3 -4
- package/src/cli/handlers/pr.ts +138 -36
- package/src/cli/handlers/query.ts +16 -4
- package/src/cli/handlers/release.ts +6 -3
- package/src/cli/handlers/search-build-roots.test.ts +144 -0
- package/src/cli/handlers/search-count.test.ts +191 -0
- package/src/cli/handlers/search-count.ts +165 -0
- package/src/cli/handlers/search-json.test.ts +333 -0
- package/src/cli/handlers/search-live.test.ts +387 -0
- package/src/cli/handlers/search-paths.test.ts +235 -0
- package/src/cli/handlers/search.ts +1291 -166
- package/src/cli/main.test.ts +43 -3
- package/src/cli/main.ts +88 -17
- package/src/cli/mcp/server.test.ts +3 -3
- package/src/cli/mcp/server.ts +3 -0
- package/src/cli/mcp/tools/capabilities.ts +32 -0
- package/src/cli/mcp/workspace-tools.e2e.test.ts +21 -1
- package/src/cli/mcp/workspace-tools.ts +47 -2
- package/src/cli/parse-args.ts +79 -15
- package/src/cli/registry.ts +36 -4
- package/src/components/builders.ts +8 -0
- package/src/components/capability-plugin-loader.ts +13 -1
- package/src/components/capability-plugin.ts +16 -0
- package/src/components/pr-env-ports.ts +89 -0
- package/src/components/pr-env-run-bundle.test.ts +54 -0
- package/src/components/pr-env-run.ts +5 -76
- package/src/components/pr-environment.ts +2 -1
- package/src/components/pr-hooks.test.ts +73 -5
- package/src/components/pr-hooks.ts +95 -5
- package/src/components/pr-pipeline.ts +64 -16
- package/src/components/pr-policy.test.ts +64 -1
- package/src/components/pr-policy.ts +53 -0
- package/src/components/registry.test.ts +1 -1
- package/src/components/starter-plugin.ts +6 -0
- package/src/components/verbs/index.ts +2 -0
- package/src/components/verbs/publish-artifact.test.ts +60 -0
- package/src/components/verbs/publish-artifact.ts +122 -0
- package/src/components/verbs/publish-image.test.ts +101 -0
- package/src/components/verbs/publish-image.ts +265 -0
- package/src/config-environments.ts +160 -0
- package/src/config.ts +44 -124
- package/src/gate-decision-bundle.test.ts +1 -0
- package/src/gate-decision-identity.test.ts +9 -0
- package/src/gate-decision.ts +26 -3
- package/src/graph-detail.ts +15 -3
- package/src/graph-effective.ts +226 -75
- package/src/graph-ir.test.ts +163 -0
- package/src/graph-ir.ts +174 -0
- package/src/graph-sub-template.ts +22 -0
- package/src/graph-walk.test.ts +44 -0
- package/src/graph-walk.ts +102 -0
- package/src/import/parser.ts +20 -0
- package/src/lexicon.ts +84 -6
- package/src/lifecycle/gate-ledger.ts +8 -0
- package/src/lifecycle/git.ts +2 -2
- package/src/lifecycle/ledger-read.test.ts +107 -0
- package/src/lifecycle/ledger-read.ts +195 -0
- package/src/lifecycle/observe.test.ts +27 -1
- package/src/lifecycle/observe.ts +43 -1
- package/src/lifecycle/release-workstation.ts +24 -0
- package/src/lifecycle/run-ledger.ts +5 -2
- package/src/lint/cross-root.test.ts +122 -0
- package/src/lint/discover.ts +3 -1
- package/src/lint/post-synth.ts +212 -2
- package/src/lint/rule.ts +6 -0
- package/src/lint/rules/op/index.ts +2 -0
- package/src/lint/rules/op/ops019-workspace-op-target.ts +89 -0
- package/src/live-endpoint.ts +1 -1
- package/src/observation.test.ts +25 -0
- package/src/observation.ts +69 -5
- package/src/op/activities/activity-contracts.ts +5 -2
- package/src/op/activities/index.ts +2 -2
- package/src/op/activities/review-agent.test.ts +221 -4
- package/src/op/activities/review-agent.ts +265 -22
- package/src/op/activities/work-evidence.ts +9 -1
- package/src/op/builders.ts +9 -5
- package/src/op/composites/apply-op.test.ts +108 -0
- package/src/op/composites/apply-op.ts +37 -2
- package/src/op/gate-approval.test.ts +6 -1
- package/src/op/gate-approval.ts +12 -6
- package/src/op/gate-quorum-at-base.test.ts +211 -0
- package/src/op/gate-quorum.ts +156 -8
- package/src/op/gate-review.ts +14 -0
- package/src/op/gate.ts +67 -8
- package/src/op/index.ts +3 -2
- package/src/op/local-executor.ts +69 -9
- package/src/op/op-waves-depends-on.test.ts +81 -0
- package/src/op/op-waves-hook-targets.test.ts +4 -2
- package/src/op/op-waves-quorum-product.test.ts +158 -0
- package/src/op/op-waves-run.ts +288 -14
- package/src/op/op-waves.ts +143 -14
- package/src/op/runtime.ts +8 -0
- package/src/op/schedule-overdue.ts +33 -0
- package/src/op/stage-hooks.ts +13 -5
- package/src/op/workspace-run-env.ts +29 -0
- package/src/pr-forge-bundle.test.ts +2 -2
- package/src/pr-forge.test.ts +47 -0
- package/src/pr-forge.ts +68 -0
- package/src/pr-post-open.e2e.test.ts +36 -0
- package/src/pr-post.test.ts +102 -3
- package/src/pr-post.ts +89 -1
- package/src/read-filter.test.ts +54 -0
- package/src/read-filter.ts +193 -0
- package/src/run-event.ts +1 -1
- package/src/stage-hooks-bundle.test.ts +1 -0
- package/src/terraform/carve.ts +52 -15
- package/src/terraform/cuts.test.ts +173 -0
- package/src/terraform/cuts.ts +188 -0
- package/src/terraform/folds.ts +44 -0
- package/src/terraform/graph.ts +9 -0
- package/src/terraform/radius.test.ts +90 -0
- package/src/terraform/reach.test.ts +146 -0
- package/src/terraform/reach.ts +247 -0
- package/src/terraform/score.ts +27 -29
- package/src/terraform/state.ts +3 -1
- package/src/terraform/types.ts +8 -0
- package/src/wave-blocked.ts +28 -3
- package/src/wave-loop-golden.test.ts +4 -3
- package/src/workspace/behold-kinds.test.ts +1 -1
- package/src/workspace/capabilities-contract.test.ts +88 -0
- package/src/workspace/capabilities-contract.ts +132 -0
- package/src/workspace/capabilities.schema.json +229 -0
- package/src/workspace/check-contract.test.ts +7 -6
- package/src/workspace/check.schema.json +11 -2
- package/src/workspace/checks/ci-branch.test.ts +128 -0
- package/src/workspace/checks/ci-branch.ts +141 -0
- package/src/workspace/checks/links.ts +12 -1
- package/src/workspace/checks/org.ts +169 -0
- package/src/workspace/checks.ts +64 -7
- package/src/workspace/ci-branches.ts +31 -0
- package/src/workspace/ci-green-branches.test.ts +153 -0
- package/src/workspace/ci-green-cli.ts +7 -7
- package/src/workspace/ci-green-workflow.test.ts +4 -3
- package/src/workspace/ci-green-workflow.ts +13 -9
- package/src/workspace/ci-green.ts +49 -12
- package/src/workspace/ci-run.test.ts +72 -1
- package/src/workspace/ci-run.ts +68 -8
- package/src/workspace/ci-serve.test.ts +95 -0
- package/src/workspace/ci-serve.ts +106 -65
- package/src/workspace/component-environments.test.ts +25 -2
- package/src/workspace/compose-graph.ts +19 -3
- package/src/workspace/composites.schema.json +22 -0
- package/src/workspace/composites.test.ts +39 -8
- package/src/workspace/composites.ts +6 -2
- package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +105 -1
- package/src/workspace/conformance/conformance.e2e.test.ts +14 -1
- package/src/workspace/conformance/index.ts +31 -2
- package/src/workspace/cross-root-lint.test.ts +90 -0
- package/src/workspace/cross-root-lint.ts +126 -0
- package/src/workspace/dbt-kind.test.ts +3 -2
- package/src/workspace/dbt-models-reader.ts +362 -0
- package/src/workspace/dbt-models.test.ts +248 -0
- package/src/workspace/dbt-project-common.ts +113 -0
- package/src/workspace/dbt-project-reader.ts +29 -112
- package/src/workspace/decision-rank.ts +40 -0
- package/src/workspace/declaration.schema.json +133 -24
- package/src/workspace/declaration.ts +84 -15
- package/src/workspace/environments.ts +40 -4
- package/src/workspace/flyway-dir.ts +113 -0
- package/src/workspace/flyway-layout.ts +337 -0
- package/src/workspace/graph-cache.ts +27 -3
- package/src/workspace/graph-cli.ts +119 -32
- package/src/workspace/graph-contract.test.ts +4 -2
- package/src/workspace/graph.schema.json +182 -0
- package/src/workspace/identity.test.ts +14 -2
- package/src/workspace/intent.ts +6 -14
- package/src/workspace/kind-link-readers.ts +68 -3
- package/src/workspace/kind-readers.e2e.test.ts +28 -0
- package/src/workspace/kind-readers.test.ts +1 -1
- package/src/workspace/kind-readers.ts +7 -1
- package/src/workspace/kinds.test.ts +12 -7
- package/src/workspace/kinds.ts +132 -7
- package/src/workspace/ledger.schema.json +158 -0
- package/src/workspace/lexicon-outputs.ts +132 -13
- package/src/workspace/lineage-check.ts +30 -7
- package/src/workspace/links.ts +24 -1
- package/src/workspace/ls-contract.test.ts +1 -1
- package/src/workspace/ls.schema.json +7 -0
- package/src/workspace/ls.ts +10 -1
- package/src/workspace/member-commands.ts +82 -3
- package/src/workspace/member-file-schema.test.ts +124 -0
- package/src/workspace/migrate-links.test.ts +99 -0
- package/src/workspace/migrate-links.ts +108 -0
- package/src/workspace/migration-dirs.test.ts +272 -0
- package/src/workspace/migration-dirs.ts +267 -0
- package/src/workspace/nested-graph.ts +32 -1
- package/src/workspace/org-scope.test.ts +238 -0
- package/src/workspace/reason-codes.test.ts +13 -1
- package/src/workspace/reason-codes.ts +23 -0
- package/src/workspace/records-cli.ts +58 -5
- package/src/workspace/records.schema.json +5 -0
- package/src/workspace/release-candidates.ts +7 -2
- package/src/workspace/release-train.ts +157 -0
- package/src/workspace/release-workflow.ts +4 -3
- package/src/workspace/repo-ref.ts +113 -0
- package/src/workspace/run-event.schema.json +2 -2
- package/src/workspace/runs-cli.ts +48 -4
- package/src/workspace/runs.schema.json +7 -0
- package/src/workspace/search-cli.e2e.test.ts +305 -0
- package/src/workspace/search-cli.ts +591 -0
- package/src/workspace/search-contract.ts +95 -0
- package/src/workspace/search.schema.json +822 -0
- package/src/workspace/status-contract.test.ts +46 -1
- package/src/workspace/status-decisions.test.ts +100 -0
- package/src/workspace/status-decisions.ts +151 -0
- package/src/workspace/status-gates.ts +9 -0
- package/src/workspace/status.schema.json +6 -0
- package/src/workspace/status.ts +17 -3
- package/src/workspace/where-filters.test.ts +39 -0
- package/src/workspace/work-cli.ts +5 -3
- package/src/workspace/work-evidence-ops.test.ts +176 -0
- package/src/workspace/work-evidence-ops.ts +189 -0
- package/src/workspace/work-evidence.schema.json +49 -2
- package/src/workspace/work-evidence.ts +22 -3
- package/src/workspace/workspace-gates.ts +200 -0
- package/src/workspace/workspace-kinds.schema.json +58 -3
- package/src/workspace/workspace-ledger.ts +130 -0
- package/src/workspace/workspace-run.test.ts +322 -0
- package/src/workspace/workspace-run.ts +461 -0
package/src/cli/main.test.ts
CHANGED
|
@@ -208,9 +208,33 @@ describe("parseArgs", () => {
|
|
|
208
208
|
expect(() => parseArgs(["build", "--unknown=value"])).toThrow(/Unknown flag: --unknown/);
|
|
209
209
|
});
|
|
210
210
|
|
|
211
|
-
test("unknown short
|
|
212
|
-
|
|
213
|
-
|
|
211
|
+
test("an unknown short flag is refused like an unknown long one (#4369)", () => {
|
|
212
|
+
// Was "unknown short flags are still silently ignored": `-x` vanished and
|
|
213
|
+
// the next token became the path. #4369 refuses it with the #1127 message.
|
|
214
|
+
expect(() => parseArgs(["build", "-x", "value"])).toThrow(/Unknown flag: -x\nRun "chant --help"/);
|
|
215
|
+
expect(() => parseArgs(["search", "kind:X", "-q"])).toThrow(/Unknown flag: -q/);
|
|
216
|
+
});
|
|
217
|
+
|
|
218
|
+
test("a search query that opens with -> is the positional, not a dropped flag (#4369)", () => {
|
|
219
|
+
expect(parseArgs(["search", "->kind:Bucket"]).path).toBe("->kind:Bucket");
|
|
220
|
+
const explained = parseArgs(["search", "->kind:Bucket", "--explain"]);
|
|
221
|
+
expect(explained.path).toBe("->kind:Bucket");
|
|
222
|
+
expect(explained.explain).toBe(true);
|
|
223
|
+
expect(parseArgs(["search", "--explain", "->*[via=subnet_id]kind:aws_vpc"]).path).toBe("->*[via=subnet_id]kind:aws_vpc");
|
|
224
|
+
// Unchanged: the in-edge spelling and a leading space always worked.
|
|
225
|
+
expect(parseArgs(["search", "<-kind:Bucket"]).path).toBe("<-kind:Bucket");
|
|
226
|
+
expect(parseArgs(["search", " ->kind:Bucket"]).path).toBe(" ->kind:Bucket");
|
|
227
|
+
// A known short flag still parses as one.
|
|
228
|
+
expect(parseArgs(["search", "->kind:Bucket", "-v"]).verbose).toBe(true);
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
test("-- ends flag parsing: what follows is positional, unsplit (#4369)", () => {
|
|
232
|
+
const r = parseArgs(["search", "--json", "--", "-kind:X", "--explain"]);
|
|
233
|
+
expect(r.path).toBe("-kind:X");
|
|
234
|
+
expect(r.extraPositional).toBe("--explain");
|
|
235
|
+
expect(r.explain).toBeUndefined();
|
|
236
|
+
expect(r.json).toBe(true);
|
|
237
|
+
expect(parseArgs(["search", "--", "--x=y"]).path).toBe("--x=y");
|
|
214
238
|
});
|
|
215
239
|
|
|
216
240
|
test("parses --watch flag", () => {
|
|
@@ -845,9 +869,12 @@ describe("workspace init and ls (#2534)", () => {
|
|
|
845
869
|
"workspace pin",
|
|
846
870
|
"workspace points",
|
|
847
871
|
"workspace records",
|
|
872
|
+
"workspace run",
|
|
848
873
|
"workspace runs",
|
|
874
|
+
"workspace search",
|
|
849
875
|
"workspace signers",
|
|
850
876
|
"workspace status",
|
|
877
|
+
"workspace train",
|
|
851
878
|
"workspace trust",
|
|
852
879
|
"workspace upgrade",
|
|
853
880
|
"workspace verify",
|
|
@@ -857,6 +884,19 @@ describe("workspace init and ls (#2534)", () => {
|
|
|
857
884
|
]);
|
|
858
885
|
});
|
|
859
886
|
|
|
887
|
+
test("run and train take their targets and flags (#2554)", () => {
|
|
888
|
+
const run = parseArgs(["workspace", "run", "api/deploy", "web/deploy", "--gate", "release", "--env", "prod"]);
|
|
889
|
+
expect(run).toMatchObject({ command: "workspace", path: "run", positionals: ["run", "api/deploy", "web/deploy"], gate: "release", env: "prod" });
|
|
890
|
+
expect(resolveCommand(run, commandRegistry)?.def.name).toBe("workspace run");
|
|
891
|
+
expect(parseArgs(["workspace", "run", "--dependents-of", "network", "--op", "deploy"])).toMatchObject({ dependentsOf: "network", op: "deploy" });
|
|
892
|
+
expect(() => parseArgs(["workspace", "run", "--dependents-of"])).toThrow(/--dependents-of needs a member/);
|
|
893
|
+
const train = parseArgs(["workspace", "train", "prod", "--pin", "api=v2", "--pin", "web=v1"]);
|
|
894
|
+
expect(train).toMatchObject({ positionals: ["train", "prod"], pins: ["api=v2", "web=v1"] });
|
|
895
|
+
expect(resolveCommand(train, commandRegistry)?.def.name).toBe("workspace train");
|
|
896
|
+
expect(() => parseArgs(["workspace", "train", "prod", "--pin", "api"])).toThrow(/--pin needs a member and a release/);
|
|
897
|
+
expect(parseArgs(["workspace", "lint", "--cross-root", "--format", "json"])).toMatchObject({ path: "lint", crossRoot: true, format: "json" });
|
|
898
|
+
});
|
|
899
|
+
|
|
860
900
|
test("adopt-lineage, hash-index, versions and upgrade --source take their flags (#2551)", () => {
|
|
861
901
|
const adopt = parseArgs(["workspace", "adopt-lineage", "app", "--from", "acme/starter#svc", "--tags", "v*", "--index", "i.json", "--param", "name=x", "--dry-run"]);
|
|
862
902
|
expect(adopt).toMatchObject({ command: "workspace", path: "adopt-lineage", extraPositional: "app", migrateFrom: "acme/starter#svc", tags: "v*", index: "i.json", param: ["name=x"], dryRun: true });
|
package/src/cli/main.ts
CHANGED
|
@@ -170,14 +170,27 @@ Commands:
|
|
|
170
170
|
bundle tree, otherwise JSON path→content on stdout)
|
|
171
171
|
search "<query>" Answer an estate question with a few matching rows
|
|
172
172
|
instead of a graph dump (kind:, tag:, attr:, ->/<- edge
|
|
173
|
-
terms
|
|
174
|
-
|
|
175
|
-
|
|
173
|
+
terms, ->* / ->{1,3} for depth, ->[via=attr] / [to=attr]
|
|
174
|
+
by attribute; --live or --snapshot <ref> (also --at
|
|
175
|
+
<ref>) with --env <name> reads the estate or a
|
|
176
|
+
recorded snapshot; --show <attr>,
|
|
177
|
+
--count-by kind|module|attr:<name>, --explain prints
|
|
178
|
+
paths, --json, --check-live,
|
|
179
|
+
--check-snapshot, --fail-on-drift; cap:<name> and
|
|
180
|
+
->[cap=<name>] ask with a capability, and
|
|
181
|
+
--capabilities prints the catalog)
|
|
176
182
|
query "<sql>" [dir] Run one read-only SQL statement over chant/lifecycle:
|
|
177
183
|
the resources and snapshots each lexicon observed, Op
|
|
178
184
|
runs, gates, deploys, releases and cuts, loaded into
|
|
179
185
|
node:sqlite (schema v1, listed in chant_schema).
|
|
180
|
-
--member <name> keeps members; --json prints rows
|
|
186
|
+
--member <name> keeps members; --json prints rows.
|
|
187
|
+
For a read contract, use chant ledger
|
|
188
|
+
ledger <table> [dir] One ledger's rows from chant/lifecycle as a read
|
|
189
|
+
contract (resources, snapshots, runs, gates, deploys,
|
|
190
|
+
releases, cuts; the columns chant query loads).
|
|
191
|
+
--where <field><op><value> (= != < <= > >= ~,
|
|
192
|
+
repeatable), --since <time|7d>, --at <rev> of
|
|
193
|
+
chant/lifecycle, --member <name>, --json
|
|
181
194
|
generate Generate typed code from sources chant.config declares
|
|
182
195
|
(k8s.crds, helm.charts) into src/generated/<lexicon>/
|
|
183
196
|
(codegen.outDir); --check exits 1 when the committed
|
|
@@ -580,6 +593,9 @@ Ops:
|
|
|
580
593
|
--layout-engine graphviz to use dot instead;
|
|
581
594
|
--detail 0..3: stacks|composites|declarables|attributes;
|
|
582
595
|
--lens lexicon:<n>|stack:<n>|blast:<node> (--up/--down))
|
|
596
|
+
--format ir --capability-view: add the lexicon-neutral
|
|
597
|
+
view capability rules read, as this project's lexicons
|
|
598
|
+
map it, to the IR as capabilityView (#4378)
|
|
583
599
|
--components --format ir --projection gitlab|github|forgejo:
|
|
584
600
|
add the CI/pipeline projection (stages/jobs/needs) to
|
|
585
601
|
the component-graph IR, from the same generator
|
|
@@ -617,7 +633,7 @@ Workspace (level 1, #2524):
|
|
|
617
633
|
restore, from the deploy records, releases and ci
|
|
618
634
|
revoked tags. Eight weeks back by default. Read only;
|
|
619
635
|
never fetches. --json prints the read-contract document
|
|
620
|
-
workspace records [--kind <kind file>] [--current] [--uncommitted | --at <rev>] [--base <rev>] [--require attested] [--json]
|
|
636
|
+
workspace records [--kind <kind file>] [--current] [--uncommitted | --at <rev>] [--base <rev>] [--require attested] [--where <field><op><value>]... [--json]
|
|
621
637
|
Without --kind, every record kind the declaration
|
|
622
638
|
names. Read the records a record kind locates, validated
|
|
623
639
|
against its schema, with reason codes for invalid
|
|
@@ -630,7 +646,9 @@ Workspace (level 1, #2524):
|
|
|
630
646
|
asset-drift or asset-missing. In the working tree,
|
|
631
647
|
each record says whether it is committed, modified
|
|
632
648
|
or new against HEAD, with the branch and base;
|
|
633
|
-
--uncommitted lists only the modified and new ones
|
|
649
|
+
--uncommitted lists only the modified and new ones;
|
|
650
|
+
--where keeps the records a typed filter matches
|
|
651
|
+
(id, path, state, valid, data.<key>, ...)
|
|
634
652
|
workspace records [--kind <kind file>] --since <rev|session id> [--at <rev>] [--json]
|
|
635
653
|
What changed in the records between <rev> and --at
|
|
636
654
|
(default: the working tree): new and removed records,
|
|
@@ -700,14 +718,16 @@ Workspace (level 1, #2524):
|
|
|
700
718
|
a url or a path pinned by hash) is appended to the
|
|
701
719
|
item's pins through records amend. Prints the
|
|
702
720
|
work-evidence document and never commits
|
|
703
|
-
workspace runs [--unit <id>] [--decision <id>] [--by <principal>] [--since <rev>] [--follow-squash] [--json]
|
|
721
|
+
workspace runs [--unit <id>] [--decision <id>] [--by <principal>] [--since <rev>] [--where <field><op><value>]... [--follow-squash] [--json]
|
|
704
722
|
The agent runs in the run ledger on chant/lifecycle, each
|
|
705
723
|
with its model, tokens, cost and the commits it made,
|
|
706
724
|
and totals per work item, decision and principal; a run
|
|
707
725
|
that reports no cost is listed as unpriced, never zero.
|
|
708
726
|
Read-only, never fetches; --follow-squash joins each
|
|
709
727
|
squash merge to its pull request's runs, fetching a
|
|
710
|
-
missing refs/pull/<n>/head from origin
|
|
728
|
+
missing refs/pull/<n>/head from origin; --where keeps
|
|
729
|
+
the runs a typed filter matches (state, model,
|
|
730
|
+
startedAt, cost.amount, ...) before the totals
|
|
711
731
|
workspace runs start --from <file|->
|
|
712
732
|
Record that an agent run started: who it worked for,
|
|
713
733
|
its harness, model, work item and lease. Prints the run
|
|
@@ -879,7 +899,7 @@ Workspace (level 1, #2524):
|
|
|
879
899
|
workspace admit <return id> [--note <text>] [--dry-run] [--json]
|
|
880
900
|
Admit the signers of a return in .chant/trust.json, so
|
|
881
901
|
its signed work reads as attested once merged
|
|
882
|
-
workspace check [--at <rev>] [--json] [--format stylish|json|sarif] [--generated] [--kind <kind file>] [--live --env <env>]
|
|
902
|
+
workspace check [--at <rev>] [--json] [--format stylish|json|sarif] [--generated] [--kind <kind file>] [--live --env <env>] [--forge-repos <file>]
|
|
883
903
|
Fail on an unreadable lineage lock or an open manual
|
|
884
904
|
step, and, in a declared workspace, on a WSP check of
|
|
885
905
|
the declaration, member ledgers, pipelines or
|
|
@@ -891,7 +911,10 @@ Workspace (level 1, #2524):
|
|
|
891
911
|
resolves each declared member link against the live
|
|
892
912
|
graph of <env> (each chant member runs chant graph
|
|
893
913
|
--live, which reaches the account) and reports
|
|
894
|
-
WSP141 and WSP142
|
|
914
|
+
WSP141 and WSP142. --forge-repos reads a forge's
|
|
915
|
+
repository list from a file and reports repos an
|
|
916
|
+
org workspace lacks (WSP014) or names that the
|
|
917
|
+
forge no longer has (WSP015)
|
|
895
918
|
workspace check --changes <base>..<head> [--work <id>] [--severity off|warn|fail] [--kind <kind file>...] [--json]
|
|
896
919
|
Map each path the diff changes to the current records
|
|
897
920
|
whose constrains cover it: change-uncovered when none
|
|
@@ -919,9 +942,12 @@ Workspace (level 1, #2524):
|
|
|
919
942
|
its own chant, one process per toolchain. -o <dir>
|
|
920
943
|
writes <dir>/<member>.json; --member narrows the run;
|
|
921
944
|
--dry-run prints which chant runs which project
|
|
922
|
-
workspace lint [dir] [--format stylish|json|sarif] [--member <name>]
|
|
945
|
+
workspace lint [dir] [--format stylish|json|sarif] [--member <name>] [--cross-root]
|
|
923
946
|
Lint every chant member and example project with its
|
|
924
|
-
own chant; sarif writes one run per member
|
|
947
|
+
own chant; sarif writes one run per member.
|
|
948
|
+
--cross-root adds the disagreement lint (LNK001 and
|
|
949
|
+
the lexicons' cross-root checks) over every member's
|
|
950
|
+
graph, where declared links and the graphs disagree
|
|
925
951
|
workspace audit [dir] [--json] [--member <name>]
|
|
926
952
|
Audit each chant member with its own .chant-audit.json;
|
|
927
953
|
every finding carries a member field
|
|
@@ -934,6 +960,15 @@ Workspace (level 1, #2524):
|
|
|
934
960
|
source and toolchain are unchanged is served from
|
|
935
961
|
the cache in $CHANT_CACHE_DIR or ~/.cache/chant;
|
|
936
962
|
--no-cache reads every member
|
|
963
|
+
--capability-view: each member's chant adds its
|
|
964
|
+
capability view, mapped by its own lexicons
|
|
965
|
+
workspace search "<query>" [--member <name>] [--env <name>] [--snapshot <ref> | --live] [--at <rev>] [--explain] [--count-by ...] [--json]
|
|
966
|
+
chant search in every chant member, each under its own
|
|
967
|
+
chant, as one read-contract document: ids are
|
|
968
|
+
<member>/<id> as workspace graph prints them, each
|
|
969
|
+
member is searched alone, and a member that can't be
|
|
970
|
+
searched has a reason code. --at <rev> is the git
|
|
971
|
+
revision; --snapshot <ref> replays a recorded snapshot
|
|
937
972
|
workspace graph --composites [--at <rev>] [--member <name>] [-o <file>]
|
|
938
973
|
Each composite instance the members declare, with the
|
|
939
974
|
components whose contract can deploy it; an instance
|
|
@@ -949,6 +984,29 @@ Workspace (level 1, #2524):
|
|
|
949
984
|
One decision's intent walk over every path: and member:
|
|
950
985
|
entry it constrains: the commits in its window, each
|
|
951
986
|
own, worked, within-other or unexplained, with counts
|
|
987
|
+
workspace run <member>/<op>... [--env <env>] [--gate <name>] [--on <lexicon>] [--dry-run] [--json]
|
|
988
|
+
Run Ops that span members (#2554): each target's chant
|
|
989
|
+
run <op> in the member's directory, under its own
|
|
990
|
+
chant, producers before the members that link to them.
|
|
991
|
+
OPS019 checks every target against the composed graph
|
|
992
|
+
first. Member run records cite the workspace run,
|
|
993
|
+
whose record goes under _members/_workspace/<env>/.
|
|
994
|
+
Exits 3 when a step stops at a gate
|
|
995
|
+
workspace run --dependents-of <member> --op <op> [--env <env>] [--gate <name>] [--dry-run] [--json]
|
|
996
|
+
Run <op> in every member that links to <member>,
|
|
997
|
+
directly or not, nearest first; members without the
|
|
998
|
+
Op are listed as skipped
|
|
999
|
+
workspace run approve <gate> [--plan <digest>] [--approver <principal>]
|
|
1000
|
+
Approve a workspace gate's pending fact. It stands in
|
|
1001
|
+
for a member gate only when it covers that member's
|
|
1002
|
+
plan and the member sets acceptWorkspaceGates at base
|
|
1003
|
+
workspace train <env> [--pin <member>=<label|digest>]... [--dry-run] [--json]
|
|
1004
|
+
Record a release train: one cut release of every
|
|
1005
|
+
chant member (the newest, unless --pin picks one),
|
|
1006
|
+
under _members/_workspace/<env>/trains.jsonl. Refuses
|
|
1007
|
+
when a member has no release
|
|
1008
|
+
workspace train list <env> [--json]
|
|
1009
|
+
The release trains recorded for <env>, oldest first
|
|
952
1010
|
|
|
953
1011
|
Lifecycle (alias: lc):
|
|
954
1012
|
lifecycle snapshot <env> Query API, save metadata to orphan branch
|
|
@@ -1022,7 +1080,9 @@ Component release ledger + status:
|
|
|
1022
1080
|
from the report pr-plan --no-status wrote
|
|
1023
1081
|
(--pr <n> --head <sha> --env <env> --forge
|
|
1024
1082
|
<kind>), in a job that runs none of the
|
|
1025
|
-
change's code (#4295)
|
|
1083
|
+
change's code (#4295); --open posts every
|
|
1084
|
+
open merge request's from a GitLab pipeline
|
|
1085
|
+
of the target branch (#4328)
|
|
1026
1086
|
components pr-record On merge (#4168): plan the same members again,
|
|
1027
1087
|
store the change set and write the merge record
|
|
1028
1088
|
_merges/<commit>.json; applies and refuses
|
|
@@ -1180,12 +1240,16 @@ Options:
|
|
|
1180
1240
|
JSON (lifecycle plan)
|
|
1181
1241
|
OR '--report markdown': emit a reviewer-facing markdown
|
|
1182
1242
|
render, holes and disruption included (lifecycle plan)
|
|
1183
|
-
--from <name> Source
|
|
1184
|
-
|
|
1185
|
-
--
|
|
1243
|
+
--from <name> Source for migrate: a lexicon, or lexicon/dialect such
|
|
1244
|
+
as sql/postgres (default: github)
|
|
1245
|
+
--to <name> Target for migrate, same form, such as sql/clickhouse
|
|
1246
|
+
(default: gitlab)
|
|
1247
|
+
--emit <fmt> Migration output format: yaml (default), ts, or sql;
|
|
1248
|
+
sql/clickhouse defaults to ts
|
|
1186
1249
|
--strict Escalate needs-review/validation to errors (migrate);
|
|
1187
1250
|
exit nonzero on an unresolved identity (lifecycle whoami)
|
|
1188
|
-
--validate Run external validator
|
|
1251
|
+
--validate Run external validator after migrate: glci/glab, or the
|
|
1252
|
+
ClickHouse emulator for sql/clickhouse
|
|
1189
1253
|
--use-composites Rewrite to composite calls when patterns match (migrate)
|
|
1190
1254
|
--components Target discovered Component declarations instead of
|
|
1191
1255
|
lexicon resources (list, describe, graph, build, run)
|
|
@@ -1480,6 +1544,7 @@ export const commandRegistry: CommandDef[] = [
|
|
|
1480
1544
|
{ name: "search", handler: runSearch },
|
|
1481
1545
|
// #4297 — SQL over the snapshots, runs, gates, deploys and releases on chant/lifecycle. Imported on first use.
|
|
1482
1546
|
{ name: "query", runsNoConfig: true, handler: async (ctx) => (await import("./handlers/query")).runQueryCommand(ctx) },
|
|
1547
|
+
{ name: "ledger", runsNoConfig: true, handler: async (ctx) => (await import("./handlers/ledger")).runLedgerCommand(ctx) },
|
|
1483
1548
|
// chant#2591 — `import --agents` and `audit` read chant.config statically
|
|
1484
1549
|
// and never evaluate it (chant#2589 for audit, which audits code it must not run).
|
|
1485
1550
|
{ name: "import", handler: runImport, runsNoConfig: (args) => args.agents === true },
|
|
@@ -1610,6 +1675,12 @@ export const commandRegistry: CommandDef[] = [
|
|
|
1610
1675
|
// chant#2618 — audit runs no project code, at the workspace level too.
|
|
1611
1676
|
{ name: "workspace audit", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/member-commands")).runWorkspaceMembers(ctx, "audit") },
|
|
1612
1677
|
{ name: "workspace graph", handler: async (ctx) => (await import("../workspace/member-commands")).runWorkspaceMembers(ctx, "graph") },
|
|
1678
|
+
// #4374 — chant search in every member, under its own chant, composed with workspace graph's ids: the search document.
|
|
1679
|
+
// #2554 — Ops that span members, as <member>/<op> targets, each run under its member's own chant.
|
|
1680
|
+
{ name: "workspace run", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/workspace-run")).runWorkspaceRun(ctx) },
|
|
1681
|
+
// #2554 — a release train: one release of every chant member, pinned in the workspace ledger.
|
|
1682
|
+
{ name: "workspace train", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/release-train")).runWorkspaceTrain(ctx) },
|
|
1683
|
+
{ name: "workspace search", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/search-cli")).runWorkspaceSearch(ctx) },
|
|
1613
1684
|
// Each unit decides for itself whether its config is loaded (runCommandInProcess).
|
|
1614
1685
|
{ name: "workspace member-run", runsNoConfig: true, handler: async (ctx) => (await import("../workspace/member-run")).runWorkspaceMemberRun(ctx, runCommandInProcess) },
|
|
1615
1686
|
// #3308 — a box's listing, written through chant so a tool never edits the declaration itself (ws-074).
|
|
@@ -1630,9 +1630,9 @@ describe("McpServer", () => {
|
|
|
1630
1630
|
|
|
1631
1631
|
const toolsRes = await s.handleRequest({ jsonrpc: "2.0", id: 2, method: "tools/list" });
|
|
1632
1632
|
const tools = (toolsRes.result as { tools: Array<{ name: string }> }).tools;
|
|
1633
|
-
expect(tools).toHaveLength(
|
|
1633
|
+
expect(tools).toHaveLength(15);
|
|
1634
1634
|
expect(tools.map((t) => t.name).sort()).toEqual([
|
|
1635
|
-
"build", "composites", "explain", "import", "lifecycle-diff", "lifecycle-snapshot", "lint",
|
|
1635
|
+
"build", "capabilities", "composites", "explain", "import", "lifecycle-diff", "lifecycle-snapshot", "lint",
|
|
1636
1636
|
"op-approve", "op-list", "op-report", "op-run", "op-status",
|
|
1637
1637
|
"scaffold", "search",
|
|
1638
1638
|
]);
|
|
@@ -1646,7 +1646,7 @@ describe("McpServer", () => {
|
|
|
1646
1646
|
const s = new McpServer([]);
|
|
1647
1647
|
const toolsRes = await s.handleRequest({ jsonrpc: "2.0", id: 1, method: "tools/list" });
|
|
1648
1648
|
const tools = (toolsRes.result as { tools: Array<{ name: string }> }).tools;
|
|
1649
|
-
expect(tools).toHaveLength(
|
|
1649
|
+
expect(tools).toHaveLength(15);
|
|
1650
1650
|
});
|
|
1651
1651
|
});
|
|
1652
1652
|
});
|
package/src/cli/mcp/server.ts
CHANGED
|
@@ -7,6 +7,7 @@ import { explainTool, handleExplain } from "./tools/explain";
|
|
|
7
7
|
import { scaffoldTool, createScaffoldHandler } from "./tools/scaffold";
|
|
8
8
|
import { searchTool, createSearchHandler } from "./tools/search";
|
|
9
9
|
import { compositesTool, createCompositesHandler } from "./tools/composites";
|
|
10
|
+
import { capabilitiesTool, createCapabilitiesHandler } from "./tools/capabilities";
|
|
10
11
|
import type { LexiconPlugin } from "../../lexicon";
|
|
11
12
|
import type { McpClientInfo, McpRequest, McpResponse, McpRequestMeta, ToolDefinition, ToolHandler, ResourceDefinition } from "./types";
|
|
12
13
|
import { findWorkspaceRoot } from "../../project-root";
|
|
@@ -126,6 +127,8 @@ export class McpServer {
|
|
|
126
127
|
this.registerTool(scaffoldTool, createScaffoldHandler(plugins ?? []));
|
|
127
128
|
this.registerTool(searchTool, createSearchHandler(plugins ?? []));
|
|
128
129
|
this.registerTool(compositesTool, createCompositesHandler(plugins ?? []));
|
|
130
|
+
// The capability catalog (#4375), the read contract's capabilities document.
|
|
131
|
+
this.registerTool(capabilitiesTool, createCapabilitiesHandler(options.workspace?.cwd ?? process.cwd(), options.workspace?.chantCommand));
|
|
129
132
|
|
|
130
133
|
// Register state tools
|
|
131
134
|
const snapshot = createSnapshotTool(plugins ?? []);
|
|
@@ -0,0 +1,32 @@
|
|
|
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";
|
|
13
|
+
import type { ToolDefinition, ToolHandler } from "../types";
|
|
14
|
+
import { ownChantCommand, runRead, type ChantCommand } from "../workspace-tools";
|
|
15
|
+
|
|
16
|
+
export const capabilitiesTool: ToolDefinition = {
|
|
17
|
+
name: "capabilities",
|
|
18
|
+
description:
|
|
19
|
+
"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. " +
|
|
20
|
+
"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. " +
|
|
21
|
+
"Returns the document chant search --capabilities --json prints (chant workspace search --capabilities --json inside a declared workspace), unchanged.",
|
|
22
|
+
inputSchema: { type: "object", properties: {} },
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** The argv the tool runs in `cwd`: the workspace form inside a declared workspace. */
|
|
26
|
+
export function capabilitiesArgv(cwd: string): string[] {
|
|
27
|
+
return findWorkspaceRoot(cwd) ? ["workspace", "search", "--capabilities", "--json"] : ["search", "--capabilities", "--json"];
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export function createCapabilitiesHandler(cwd: string, command: ChantCommand = ownChantCommand()): ToolHandler {
|
|
31
|
+
return async () => runRead(command, capabilitiesArgv(cwd), cwd);
|
|
32
|
+
}
|
|
@@ -85,7 +85,7 @@ describe("which servers have the workspace tools", () => {
|
|
|
85
85
|
const { tools } = (await rpc(server(cwd), "tools/list")) as { tools: { name: string }[] };
|
|
86
86
|
expect(tools.map((t) => t.name)).toEqual(expect.arrayContaining(names));
|
|
87
87
|
}
|
|
88
|
-
expect(names).toEqual(["workspace-ls", "workspace-status", "workspace-graph", "workspace-changes", "workspace-records", "workspace-points", "workspace-agent", "workspace-work-history", "workspace-runs", "records-new", "records-amend", "records-review", "records-close", "points-answer", "points-retract", "points-withdraw"]);
|
|
88
|
+
expect(names).toEqual(["workspace-ls", "workspace-status", "workspace-graph", "workspace-search", "workspace-changes", "workspace-records", "workspace-points", "workspace-agent", "workspace-work-history", "workspace-runs", "records-new", "records-amend", "records-review", "records-close", "points-answer", "points-retract", "points-withdraw"]);
|
|
89
89
|
});
|
|
90
90
|
|
|
91
91
|
test("a server outside any workspace, or given none, does not", async () => {
|
|
@@ -159,7 +159,27 @@ describe("reads", () => {
|
|
|
159
159
|
expect(flag.content[0].text).toMatch(/at may not start with -/);
|
|
160
160
|
}, 120_000);
|
|
161
161
|
|
|
162
|
+
test("workspace-search returns exactly the document chant workspace search --json prints (#4374)", async () => {
|
|
163
|
+
const s = server();
|
|
164
|
+
const res = await call(s, "workspace-search", { query: "app" });
|
|
165
|
+
expect(res.isError).toBeUndefined();
|
|
166
|
+
expect(res.structuredContent).toEqual(cli(["workspace", "search", "app", "--json"]));
|
|
167
|
+
expect(res.structuredContent).toMatchObject({ contract: 1, query: "app", at: null, source: { kind: "declared" } });
|
|
168
|
+
// A query that opens with an edge term is passed after --, and a refusal is a document.
|
|
169
|
+
const edge = await call(s, "workspace-search", { query: "->kind:Nothing", countBy: "kind" });
|
|
170
|
+
expect(edge.structuredContent).toEqual(cli(["workspace", "search", "--count-by", "kind", "--json", "--", "->kind:Nothing"]));
|
|
171
|
+
const refused = await call(s, "workspace-search", { query: "app", at: "latest" });
|
|
172
|
+
expect(refused.structuredContent).toMatchObject({ error: { code: "revision-unknown", hint: expect.stringContaining("--snapshot latest") } });
|
|
173
|
+
}, 240_000);
|
|
174
|
+
|
|
162
175
|
test("the conformance suite's argv maps to the tool that answers it", () => {
|
|
176
|
+
expect(mcpToolCall(["workspace", "search", "app", "--member", "delivery", "--snapshot", "latest", "--env", "dev", "--json"])).toEqual({
|
|
177
|
+
name: "workspace-search",
|
|
178
|
+
arguments: { query: "app", member: ["delivery"], snapshot: "latest", env: "dev" },
|
|
179
|
+
});
|
|
180
|
+
expect(readArgv("workspace-search", { query: "->kind:X", member: ["delivery"], snapshot: "latest", env: "dev" })).toEqual([
|
|
181
|
+
"workspace", "search", "--member", "delivery", "--env", "dev", "--snapshot", "latest", "--json", "--", "->kind:X",
|
|
182
|
+
]);
|
|
163
183
|
expect(mcpToolCall(["workspace", "records", "--kind", KIND, "--json"])).toEqual({ name: "workspace-records", arguments: { kind: KIND } });
|
|
164
184
|
expect(mcpToolCall(["workspace", "records", "--uncommitted", "--kind", KIND, "--json"])).toEqual({ name: "workspace-records", arguments: { uncommitted: true, kind: KIND } });
|
|
165
185
|
expect(readArgv("workspace-records", { kind: KIND, uncommitted: true })).toEqual(["workspace", "records", "--kind", KIND, "--uncommitted", "--json"]);
|
|
@@ -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
|
|
@@ -123,6 +123,27 @@ export const workspaceReadTools: ToolDefinition[] = [
|
|
|
123
123
|
},
|
|
124
124
|
},
|
|
125
125
|
},
|
|
126
|
+
{
|
|
127
|
+
name: "workspace-search",
|
|
128
|
+
description:
|
|
129
|
+
"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. " +
|
|
130
|
+
"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. " +
|
|
131
|
+
"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.",
|
|
132
|
+
inputSchema: {
|
|
133
|
+
type: "object",
|
|
134
|
+
properties: {
|
|
135
|
+
query: { type: "string", description: "The search terms. May start with -> or <-." },
|
|
136
|
+
member: { type: "array", items: { type: "string" }, description: "Only these members (--member)." },
|
|
137
|
+
env: { type: "string", description: "The environment a snapshot was recorded for (--env)." },
|
|
138
|
+
snapshot: { type: "string", description: "Answer from this recorded lifecycle snapshot, such as latest (--snapshot). Needs env." },
|
|
139
|
+
countBy: { type: "string", description: "Group the matches: kind, module or attr:<name> (--count-by). The query may then be empty." },
|
|
140
|
+
show: { type: "string", description: "Comma-separated attributes to carry on each row (--show)." },
|
|
141
|
+
explain: { type: "boolean", description: "Add each member's universe and near misses (--explain)." },
|
|
142
|
+
at: atProp,
|
|
143
|
+
},
|
|
144
|
+
required: ["query"],
|
|
145
|
+
},
|
|
146
|
+
},
|
|
126
147
|
{
|
|
127
148
|
name: "workspace-changes",
|
|
128
149
|
description:
|
|
@@ -417,6 +438,30 @@ export function readArgv(tool: string, params: Record<string, unknown>): string[
|
|
|
417
438
|
"--json",
|
|
418
439
|
];
|
|
419
440
|
}
|
|
441
|
+
case "workspace-search": {
|
|
442
|
+
// The query is one argument after `--`, so one that opens with -> stays a query.
|
|
443
|
+
const query = params.query;
|
|
444
|
+
if (typeof query !== "string") throw new ToolInputError("query must be a string");
|
|
445
|
+
const members = params.member === undefined || params.member === null ? [] : Array.isArray(params.member) ? params.member : [params.member];
|
|
446
|
+
const memberArgs = members.flatMap((m, i) => ["--member", str({ [`member[${i}]`]: m }, `member[${i}]`, true)!]);
|
|
447
|
+
const flags = (["env", "snapshot", "show"] as const).flatMap((f) => {
|
|
448
|
+
const v = str(params, f);
|
|
449
|
+
return v !== undefined ? [`--${f}`, v] : [];
|
|
450
|
+
});
|
|
451
|
+
const countBy = str(params, "countBy");
|
|
452
|
+
return [
|
|
453
|
+
"workspace",
|
|
454
|
+
"search",
|
|
455
|
+
...memberArgs,
|
|
456
|
+
...flags,
|
|
457
|
+
...(countBy !== undefined ? ["--count-by", countBy] : []),
|
|
458
|
+
...(bool(params, "explain") ? ["--explain"] : []),
|
|
459
|
+
...atArgs,
|
|
460
|
+
"--json",
|
|
461
|
+
"--",
|
|
462
|
+
query,
|
|
463
|
+
];
|
|
464
|
+
}
|
|
420
465
|
case "workspace-agent": {
|
|
421
466
|
const name = str(params, "name", true)!;
|
|
422
467
|
return ["workspace", "agent", name, "--json"];
|
|
@@ -458,7 +503,7 @@ export function readArgv(tool: string, params: Record<string, unknown>): string[
|
|
|
458
503
|
}
|
|
459
504
|
|
|
460
505
|
/** Run chant and parse the one JSON document it printed. The exit code does not matter: an error document is a document. */
|
|
461
|
-
function runRead(command: ChantCommand, argv: string[], cwd: string): Promise<unknown> {
|
|
506
|
+
export function runRead(command: ChantCommand, argv: string[], cwd: string): Promise<unknown> {
|
|
462
507
|
return new Promise((settle, fail) => {
|
|
463
508
|
const child = spawn(command[0], [...command.slice(1), ...argv], { cwd, env: { ...process.env, NO_COLOR: "1" }, stdio: ["ignore", "pipe", "pipe"] });
|
|
464
509
|
let stdout = "";
|