@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/parse-args.ts
CHANGED
|
@@ -47,6 +47,7 @@ const BOOLEAN_FLAGS = new Set([
|
|
|
47
47
|
"--up",
|
|
48
48
|
"--down",
|
|
49
49
|
"--include-dependents",
|
|
50
|
+
"--cross-root",
|
|
50
51
|
"--local",
|
|
51
52
|
"--json",
|
|
52
53
|
"--progress-json",
|
|
@@ -153,13 +154,36 @@ export function parseArgs(args: string[]): ParsedArgs {
|
|
|
153
154
|
// whose own value legitimately contains `=` (`--param=tier=production`
|
|
154
155
|
// splits to flag `--param`, value `tier=production`, not further split on
|
|
155
156
|
// the second `=`).
|
|
156
|
-
|
|
157
|
+
//
|
|
158
|
+
// Tokens after a bare `--` are positionals (#4369), so they are not split.
|
|
159
|
+
const end = args.indexOf("--");
|
|
160
|
+
args = end < 0 ? splitJoinedFlags(args, BOOLEAN_FLAGS) : [...splitJoinedFlags(args.slice(0, end), BOOLEAN_FLAGS), ...args.slice(end)];
|
|
161
|
+
|
|
162
|
+
// chant #4369 — every token after a bare `--` is a positional, whatever it
|
|
163
|
+
// starts with: `chant search -- "-kind:X"` is the spelling that always works.
|
|
164
|
+
let onlyPositionals = false;
|
|
165
|
+
const positional = (arg: string): void => {
|
|
166
|
+
if (result.command) (result.positionals ??= []).push(arg);
|
|
167
|
+
if (!result.command) {
|
|
168
|
+
result.command = arg;
|
|
169
|
+
} else if (result.path === ".") {
|
|
170
|
+
result.path = arg;
|
|
171
|
+
} else if (!result.extraPositional) {
|
|
172
|
+
result.extraPositional = arg;
|
|
173
|
+
} else {
|
|
174
|
+
result.extraPositional2 = arg;
|
|
175
|
+
}
|
|
176
|
+
};
|
|
157
177
|
|
|
158
178
|
let i = 0;
|
|
159
179
|
while (i < args.length) {
|
|
160
180
|
const arg = args[i];
|
|
161
181
|
|
|
162
|
-
if (
|
|
182
|
+
if (onlyPositionals) {
|
|
183
|
+
positional(arg);
|
|
184
|
+
} else if (arg === "--") {
|
|
185
|
+
onlyPositionals = true;
|
|
186
|
+
} else if (arg === "--help" || arg === "-h") {
|
|
163
187
|
result.help = true;
|
|
164
188
|
} else if (arg === "--version" || arg === "-V") {
|
|
165
189
|
result.version = true;
|
|
@@ -339,6 +363,10 @@ export function parseArgs(args: string[]): ParsedArgs {
|
|
|
339
363
|
result.explain = true;
|
|
340
364
|
} else if (arg === "--show") {
|
|
341
365
|
result.show = args[++i];
|
|
366
|
+
} else if (arg === "--count-by") {
|
|
367
|
+
// `chant search --count-by kind|module|attr:<name>` (#4360)
|
|
368
|
+
result.countBy = args[++i];
|
|
369
|
+
if (!result.countBy || result.countBy.startsWith("-")) throw new Error("--count-by needs a grouping: --count-by kind, --count-by module or --count-by attr:<name>");
|
|
342
370
|
} else if (arg === "--up") {
|
|
343
371
|
result.up = true;
|
|
344
372
|
} else if (arg === "--down") {
|
|
@@ -353,6 +381,19 @@ export function parseArgs(args: string[]): ParsedArgs {
|
|
|
353
381
|
result.head = args[++i];
|
|
354
382
|
} else if (arg === "--include-dependents") {
|
|
355
383
|
result.includeDependents = true;
|
|
384
|
+
} else if (arg === "--cross-root") {
|
|
385
|
+
// `chant workspace lint --cross-root` (#2549): the disagreement lint over every member's graph.
|
|
386
|
+
result.crossRoot = true;
|
|
387
|
+
} else if (arg === "--dependents-of") {
|
|
388
|
+
// `chant workspace run --dependents-of <member> --op <op>` (#2554).
|
|
389
|
+
const value = args[++i];
|
|
390
|
+
if (!value || value.startsWith("-")) throw new Error("--dependents-of needs a member name: --dependents-of <member>");
|
|
391
|
+
result.dependentsOf = value;
|
|
392
|
+
} else if (arg === "--pin") {
|
|
393
|
+
// `chant workspace train <env> --pin <member>=<label|digest>` (#2554), repeatable.
|
|
394
|
+
const value = args[++i];
|
|
395
|
+
if (!value || value.startsWith("-") || !value.includes("=")) throw new Error("--pin needs a member and a release: --pin <member>=<label|digest>");
|
|
396
|
+
(result.pins ??= []).push(value);
|
|
356
397
|
} else if (arg === "--from-affected") {
|
|
357
398
|
result.fromAffected = args[++i];
|
|
358
399
|
} else if (arg === "--gate") {
|
|
@@ -508,6 +549,16 @@ export function parseArgs(args: string[]): ParsedArgs {
|
|
|
508
549
|
result.deep = true;
|
|
509
550
|
} else if (arg === "--at") {
|
|
510
551
|
result.at = args[++i];
|
|
552
|
+
} else if (arg === "--capability-view") {
|
|
553
|
+
// `chant graph --format ir --capability-view` and `chant workspace graph --capability-view` (#4378)
|
|
554
|
+
result.capabilityView = true;
|
|
555
|
+
} else if (arg === "--capabilities") {
|
|
556
|
+
// `chant search --capabilities` and `chant workspace search --capabilities` (#4375)
|
|
557
|
+
result.capabilities = true;
|
|
558
|
+
} else if (arg === "--snapshot") {
|
|
559
|
+
// `chant search` and `chant workspace search --snapshot <ref>` (#4374)
|
|
560
|
+
result.snapshot = args[++i];
|
|
561
|
+
if (!result.snapshot || result.snapshot.startsWith("-")) throw new Error("--snapshot needs a snapshot ref: --snapshot latest");
|
|
511
562
|
} else if (arg === "--kind") {
|
|
512
563
|
// `chant workspace records|graph|check --kind <kind file>` (#2546, #2549)
|
|
513
564
|
result.kind = args[++i];
|
|
@@ -895,8 +946,8 @@ export function parseArgs(args: string[]): ParsedArgs {
|
|
|
895
946
|
} else if (arg === "--expire") {
|
|
896
947
|
result.expire = true;
|
|
897
948
|
} else if (arg === "--role") {
|
|
898
|
-
// #2508 — a role the approver claims,
|
|
899
|
-
//
|
|
949
|
+
// #2508 — a role the approver claims, recorded on the approval. A quorum
|
|
950
|
+
// (#4290) and a gate policy (#4324) read roles from .chant/trust.json at base.
|
|
900
951
|
// Repeatable, and a comma list works too.
|
|
901
952
|
const value = args[++i] ?? "";
|
|
902
953
|
result.roles = [...(result.roles ?? []), ...value.split(",").map((r) => r.trim()).filter(Boolean)];
|
|
@@ -934,6 +985,12 @@ export function parseArgs(args: string[]): ParsedArgs {
|
|
|
934
985
|
// #2537 — `chant build` and `chant lint` at a declared workspace root
|
|
935
986
|
// run on the root project alone instead of refusing with WSP000.
|
|
936
987
|
result.rootOnly = true;
|
|
988
|
+
} else if (arg === "--forge-repos") {
|
|
989
|
+
// #3168 — `chant workspace check --forge-repos <file>`: the forge's
|
|
990
|
+
// repository list, as a warden reads it, for an org workspace's checks.
|
|
991
|
+
const value = args[++i];
|
|
992
|
+
if (!value || value.startsWith("-")) throw new Error("--forge-repos needs a file: --forge-repos <repos.json>");
|
|
993
|
+
result.forgeRepos = value;
|
|
937
994
|
} else if (arg === "--generated") {
|
|
938
995
|
// #2641 — `chant workspace check --generated` runs each declared
|
|
939
996
|
// generator and compares its output with the file in the tree.
|
|
@@ -954,6 +1011,11 @@ export function parseArgs(args: string[]): ParsedArgs {
|
|
|
954
1011
|
result.url = args[++i];
|
|
955
1012
|
} else if (arg === "--op") {
|
|
956
1013
|
result.op = args[++i];
|
|
1014
|
+
} else if (arg === "--where") {
|
|
1015
|
+
// #4363 — a typed filter on a contract read; repeatable, every clause has to hold.
|
|
1016
|
+
const value = args[++i];
|
|
1017
|
+
if (value === undefined || value.startsWith("--")) throw new Error("--where needs a clause: --where <field><op><value>");
|
|
1018
|
+
result.where = [...(result.where ?? []), value];
|
|
957
1019
|
} else if (arg === "--since") {
|
|
958
1020
|
result.since = args[++i];
|
|
959
1021
|
} else if (arg === "--limit") {
|
|
@@ -972,17 +1034,19 @@ export function parseArgs(args: string[]): ParsedArgs {
|
|
|
972
1034
|
// every command, not scoped per-command, so "the command's known
|
|
973
1035
|
// flags" isn't something this loop can name in isolation.
|
|
974
1036
|
throw new Error(`Unknown flag: ${arg}\nRun "chant --help" to see supported flags.`);
|
|
975
|
-
} else if (
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
}
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
1037
|
+
} else if (/^-[A-Za-z]/.test(arg)) {
|
|
1038
|
+
// chant #4369 — an unrecognised short flag (`-x`) is refused like an
|
|
1039
|
+
// unrecognised `--flag` (#1127). It used to be dropped without a word,
|
|
1040
|
+
// the same silent misparse #1127 closed for long flags. A lexicon's own
|
|
1041
|
+
// mounted command still gets its short flags: `main` tries the plugin
|
|
1042
|
+
// commands before rethrowing a parse error.
|
|
1043
|
+
throw new Error(`Unknown flag: ${arg}\nRun "chant --help" to see supported flags.`);
|
|
1044
|
+
} else {
|
|
1045
|
+
// Anything else is a positional, including a token that starts with `-`
|
|
1046
|
+
// but is not flag-shaped (#4369): `->kind:Bucket` is a search query that
|
|
1047
|
+
// opens with an outgoing edge term, and dropping it made `chant search`
|
|
1048
|
+
// answer for "." instead. A bare `-` is a positional too.
|
|
1049
|
+
positional(arg);
|
|
986
1050
|
}
|
|
987
1051
|
|
|
988
1052
|
i++;
|
package/src/cli/registry.ts
CHANGED
|
@@ -83,7 +83,7 @@ export interface ParsedArgs {
|
|
|
83
83
|
/** `chant run events <run> --follow` (#4042) — stream the run's events as they happen, until `run-settle`. */
|
|
84
84
|
follow?: boolean;
|
|
85
85
|
live: boolean;
|
|
86
|
-
/** `chant migrate --from <name>` (default "github") */
|
|
86
|
+
/** `chant migrate --from <name>` (default "github"); `lexicon/dialect` for the sql lexicon */
|
|
87
87
|
migrateFrom?: string;
|
|
88
88
|
/** `chant import --kustomize <dir>` — render the kustomization, then import (#1548) */
|
|
89
89
|
kustomize?: string;
|
|
@@ -103,9 +103,9 @@ export interface ParsedArgs {
|
|
|
103
103
|
write?: boolean;
|
|
104
104
|
/** `chant carve apply --write-source` — stamp the ownership marker into the emitted source */
|
|
105
105
|
writeSource?: boolean;
|
|
106
|
-
/** `chant migrate --to <name>` (default "gitlab") */
|
|
106
|
+
/** `chant migrate --to <name>` (default "gitlab"); `lexicon/dialect` for the sql lexicon */
|
|
107
107
|
migrateTo?: string;
|
|
108
|
-
/** `chant migrate --emit yaml|ts` */
|
|
108
|
+
/** `chant migrate --emit yaml|ts|sql` */
|
|
109
109
|
emit?: string;
|
|
110
110
|
/** Escalate needs-review diagnostics to errors (migrate command) */
|
|
111
111
|
strict?: boolean;
|
|
@@ -246,6 +246,8 @@ export interface ParsedArgs {
|
|
|
246
246
|
show?: string;
|
|
247
247
|
/** `chant search --explain` — append a footer: universe count + why non-matches were excluded (#1139). */
|
|
248
248
|
explain?: boolean;
|
|
249
|
+
/** `chant search --count-by kind|module|attr:<name>`: print one count per group instead of one row per match (#4360). */
|
|
250
|
+
countBy?: string;
|
|
249
251
|
/** `chant graph --lens blast:<node> --up` — include upstream producers */
|
|
250
252
|
up?: boolean;
|
|
251
253
|
/** `chant graph --lens blast:<node> --down` — include downstream dependents */
|
|
@@ -261,6 +263,12 @@ export interface ParsedArgs {
|
|
|
261
263
|
head?: string;
|
|
262
264
|
/** `chant lifecycle affected --include-dependents` — add downstream consumers */
|
|
263
265
|
includeDependents?: boolean;
|
|
266
|
+
/** `chant workspace run --dependents-of <member> --op <op>` (#2554): run the Op in every member that links to this one, directly or not. */
|
|
267
|
+
dependentsOf?: string;
|
|
268
|
+
/** `chant workspace lint --cross-root` (#2549): also run the disagreement lint and the lexicons' cross-root checks over every member's graph. */
|
|
269
|
+
crossRoot?: boolean;
|
|
270
|
+
/** `chant workspace train <env> --pin <member>=<label|digest>` (#2554), repeatable: the release a train pins for that member instead of its newest. */
|
|
271
|
+
pins?: string[];
|
|
264
272
|
/**
|
|
265
273
|
* `chant components fan-out --from-affected <file>` (#2420) — read the
|
|
266
274
|
* stack-level change signal from the JSON `chant lifecycle affected --json`
|
|
@@ -446,6 +454,26 @@ export interface ParsedArgs {
|
|
|
446
454
|
* should win.
|
|
447
455
|
*/
|
|
448
456
|
at?: string;
|
|
457
|
+
/**
|
|
458
|
+
* `chant search "<q>" --snapshot <ref> --env <name>` and `chant workspace
|
|
459
|
+
* search "<q>" --snapshot <ref>` (#4374): the recorded snapshot to answer
|
|
460
|
+
* from. Plain search also takes it as `--at <ref>`, for compatibility;
|
|
461
|
+
* everywhere else in the read contract `--at` is a git revision.
|
|
462
|
+
*/
|
|
463
|
+
snapshot?: string;
|
|
464
|
+
/**
|
|
465
|
+
* `chant search --capabilities` and `chant workspace search --capabilities`
|
|
466
|
+
* (#4375): print the capability catalog, the `capabilities` document of the
|
|
467
|
+
* read contract, instead of answering a query.
|
|
468
|
+
*/
|
|
469
|
+
capabilities?: boolean;
|
|
470
|
+
/**
|
|
471
|
+
* `chant graph --format ir --capability-view` (#4378): add the lexicon-neutral
|
|
472
|
+
* view capability rules read, mapped by this chant's lexicons, to the IR as
|
|
473
|
+
* `capabilityView`. `chant workspace graph --capability-view` asks each
|
|
474
|
+
* member's chant for it and carries it on the member.
|
|
475
|
+
*/
|
|
476
|
+
capabilityView?: boolean;
|
|
449
477
|
/** `chant workspace records --kind <path>` (#2546): the record kind file to read records through. */
|
|
450
478
|
kind?: string;
|
|
451
479
|
/** Every `--kind` given, in order: `chant workspace graph --intent` reads each (#2651). */
|
|
@@ -618,6 +646,8 @@ export interface ParsedArgs {
|
|
|
618
646
|
* generators run member code.
|
|
619
647
|
*/
|
|
620
648
|
generated?: boolean;
|
|
649
|
+
/** `chant workspace check --forge-repos <file>` (#3168): the forge's repository list, checked against an org workspace's repo members (WSP014, WSP015). */
|
|
650
|
+
forgeRepos?: string;
|
|
621
651
|
/**
|
|
622
652
|
* `chant workspace build|lint|audit|graph --member <name>` (#2537): run only
|
|
623
653
|
* the named members or example groups. Repeatable, and a comma list works too.
|
|
@@ -766,7 +796,7 @@ export interface ParsedArgs {
|
|
|
766
796
|
* on a model-authored channel.
|
|
767
797
|
*/
|
|
768
798
|
allowSameOrigin?: boolean;
|
|
769
|
-
/** `chant approve --role <name>` (#2508) — roles the approver claims,
|
|
799
|
+
/** `chant approve --role <name>` (#2508) — roles the approver claims, recorded on the approval. Nothing trusts them: a quorum (#4290) and a gate policy (#4324) read roles from `.chant/trust.json` at base, for a sealed approval. Repeatable; a comma list also works. */
|
|
770
800
|
roles?: string[];
|
|
771
801
|
/** `chant approve --agent` (#2508) — record the approval as an agent's. An agent never counts toward a quorum; it passes a gate only through a policy permit in `enforce` mode. */
|
|
772
802
|
agent?: boolean;
|
|
@@ -776,6 +806,8 @@ export interface ParsedArgs {
|
|
|
776
806
|
op?: string;
|
|
777
807
|
/** `chant operator log --since <iso>` (#2029) — only entries at or after this ISO-8601 instant. `chant workspace records --since <rev>` (#2673) — the revision to compare the records with. `chant workspace metrics --since <date>` (#4039) — the start of the window the metrics count. */
|
|
778
808
|
since?: string;
|
|
809
|
+
/** `chant ledger`, `chant workspace records` and `chant workspace runs --where <field><op><value>` (#4363): typed filters, repeatable, all of which have to hold. */
|
|
810
|
+
where?: string[];
|
|
779
811
|
/** `chant operator log --limit <n>` (#2029) — keep only the newest n entries (still printed oldest-first). */
|
|
780
812
|
limit?: number;
|
|
781
813
|
/** `chant approve <op> <gate> --url <url>` (#2028) — the address this resolution happened at (the PR/MR that carried the change), recorded typed on the gate-resolution fact so a reader is not sniffing `--note` for something link-shaped. Defaults to the PR/MR the surrounding CI job is for, when there is one. Must be an absolute http/https URL. */
|
|
@@ -19,6 +19,8 @@ import type {
|
|
|
19
19
|
ZipPackageInput,
|
|
20
20
|
JvmBuildInput,
|
|
21
21
|
GenerateSbomInput,
|
|
22
|
+
PublishImageInput,
|
|
23
|
+
PublishArtifactInput,
|
|
22
24
|
SignInput,
|
|
23
25
|
AttestProvenanceInput,
|
|
24
26
|
VerifyInput,
|
|
@@ -64,6 +66,12 @@ export const vulnGate = step<VulnGateInput>("vuln-gate");
|
|
|
64
66
|
// The cloud-specific waits (`wait-for-stack`/`wait-steady-state`/`wait-job`)
|
|
65
67
|
// ship as builders from the aws lexicon, alongside their capabilities.
|
|
66
68
|
export const waitClusterHealthy = step<WaitClusterHealthyInput>("wait-cluster-healthy");
|
|
69
|
+
// ── publish (core owns the verb; each cloud lexicon contributes a registry login backend) ──
|
|
70
|
+
export const publishImage = step<PublishImageInput>("publish-image");
|
|
71
|
+
export const publishArtifact = step<PublishArtifactInput>("publish-artifact");
|
|
72
|
+
/** Alias for {@link publishArtifact}. */
|
|
73
|
+
export const publishAsset = publishArtifact;
|
|
74
|
+
|
|
67
75
|
export const waitEndpoint = step<WaitEndpointInput>("wait-endpoint");
|
|
68
76
|
export const healthGate = step<HealthGateInput>("health-gate");
|
|
69
77
|
|
|
@@ -26,6 +26,8 @@ import { lexiconModulePath, importLexiconPackage } from "../lexicon-module";
|
|
|
26
26
|
import type { CapabilityPlugin } from "./capability-plugin";
|
|
27
27
|
import { isCapabilityPlugin } from "./capability-plugin";
|
|
28
28
|
import { starterCapabilityPlugin } from "./starter-plugin";
|
|
29
|
+
import { isRegistryBackendConsumer, type RegistryLoginBackend } from "./verbs/publish-image";
|
|
30
|
+
import { isStorageBackendConsumer, type ArtifactStorageBackend } from "./verbs/publish-artifact";
|
|
29
31
|
|
|
30
32
|
/** Thrown when a dynamically-imported capability package does not satisfy `CapabilityPlugin` — the "malformed capability package" case #559 asks doctor/validation to detect. */
|
|
31
33
|
export class MalformedCapabilityPluginError extends Error {
|
|
@@ -165,9 +167,19 @@ export function registerCapabilityPlugins(
|
|
|
165
167
|
}
|
|
166
168
|
}
|
|
167
169
|
|
|
170
|
+
const backends: RegistryLoginBackend[] = [];
|
|
171
|
+
for (const plugin of plugins) backends.push(...(plugin.registryBackends?.() ?? []));
|
|
172
|
+
const storage: ArtifactStorageBackend[] = [];
|
|
173
|
+
for (const plugin of plugins) storage.push(...(plugin.storageBackends?.() ?? []));
|
|
174
|
+
|
|
168
175
|
for (const plugin of plugins) {
|
|
169
176
|
for (const capability of plugin.capabilities()) {
|
|
170
|
-
registry
|
|
177
|
+
// A capability that consumes registry login backends (`publish-image`)
|
|
178
|
+
// is re-bound to the backends of the plugins loaded for this registry.
|
|
179
|
+
let bound = capability;
|
|
180
|
+
if (isRegistryBackendConsumer(bound)) bound = bound.withRegistryBackends(backends) as typeof bound;
|
|
181
|
+
if (isStorageBackendConsumer(bound)) bound = bound.withStorageBackends(storage) as typeof bound;
|
|
182
|
+
registry.register(bound);
|
|
171
183
|
}
|
|
172
184
|
}
|
|
173
185
|
return registry;
|
|
@@ -32,6 +32,8 @@ import { readFileSync } from "node:fs";
|
|
|
32
32
|
import { dirname, join } from "node:path";
|
|
33
33
|
import { fileURLToPath } from "node:url";
|
|
34
34
|
import type { Capability } from "./capability";
|
|
35
|
+
import type { RegistryLoginBackend } from "./verbs/publish-image";
|
|
36
|
+
import type { ArtifactStorageBackend } from "./verbs/publish-artifact";
|
|
35
37
|
|
|
36
38
|
/**
|
|
37
39
|
* Manifest for a packaged capability plugin — the capability-side analogue
|
|
@@ -88,6 +90,20 @@ export interface CapabilityPlugin {
|
|
|
88
90
|
/** Capability kinds grouped by family, informational — mirrors `STARTER_VERB_FAMILIES` (./registry.ts) shape for third-party plugins that want to publish the same grouping. */
|
|
89
91
|
families?(): Record<string, readonly string[]>;
|
|
90
92
|
|
|
93
|
+
/**
|
|
94
|
+
* Registry login backends this plugin contributes to core's `publish-image`
|
|
95
|
+
* verb (aws: ECR, azure: ACR, gcp: Artifact Registry). Not capabilities, so
|
|
96
|
+
* several plugins may contribute without a duplicate-kind clash.
|
|
97
|
+
*/
|
|
98
|
+
registryBackends?(): RegistryLoginBackend[];
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Object-storage backends this plugin contributes to core's
|
|
102
|
+
* `publish-artifact` verb (aws: S3, azure: Blob, gcp: GCS). Like
|
|
103
|
+
* `registryBackends`, not capabilities, so several plugins may contribute.
|
|
104
|
+
*/
|
|
105
|
+
storageBackends?(): ArtifactStorageBackend[];
|
|
106
|
+
|
|
91
107
|
/** Optional initialization hook, called once after load (mirrors `LexiconPlugin.init`). */
|
|
92
108
|
init?(): void | Promise<void>;
|
|
93
109
|
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The ports `chant components pr-env` runs ./pr-env-run.ts with: the records
|
|
3
|
+
* on chant/lifecycle (`_pr-envs/records.jsonl`), the gate ledger there, and
|
|
4
|
+
* the note and status on the forge. They sit apart from ./pr-env-run.ts
|
|
5
|
+
* because the gate port loads ./pr-run.ts and ../op/gate.ts, which bring
|
|
6
|
+
* Ajv, js-yaml and the component driver. A product with its own ports
|
|
7
|
+
* imports `@intentius/chant/components/pr-env-run` and never loads these.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { PrForge } from "../pr-forge";
|
|
11
|
+
import type { PrEnvPorts } from "./pr-env-run";
|
|
12
|
+
import {
|
|
13
|
+
PR_ENV_LEDGER_DIR,
|
|
14
|
+
PR_ENV_LEDGER_FILE,
|
|
15
|
+
parsePrEnvRecords,
|
|
16
|
+
prEnvNoteMarker,
|
|
17
|
+
prEnvStatusContext,
|
|
18
|
+
prEnvStatusDescription,
|
|
19
|
+
prEnvStatusState,
|
|
20
|
+
renderPrEnvNote,
|
|
21
|
+
type PrEnvReport,
|
|
22
|
+
} from "./pr-environment";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The note and the `chant/pr-env` status on the forge. A refusal from the
|
|
26
|
+
* forge warns and never fails the run.
|
|
27
|
+
*/
|
|
28
|
+
export function forgePrEnvPublisher(forge: PrForge, warn: (message: string) => void = () => {}): (report: PrEnvReport) => Promise<void> {
|
|
29
|
+
return async (report) => {
|
|
30
|
+
const { forgePrincipalOf } = await import("../pr-forge");
|
|
31
|
+
const note = renderPrEnvNote(report, forgePrincipalOf(forge.kind, forge.host, "<your-login>"));
|
|
32
|
+
if (report.head) {
|
|
33
|
+
try {
|
|
34
|
+
await forge.setStatus(report.head, { context: prEnvStatusContext(report.member), state: prEnvStatusState(report), description: prEnvStatusDescription(report), ...(forge.runUrl ? { url: forge.runUrl } : {}) });
|
|
35
|
+
} catch (err) {
|
|
36
|
+
warn(`could not set the ${prEnvStatusContext(report.member)} status: ${messageOf(err)}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
await forge.upsertNote(report.pr, prEnvNoteMarker(report.env, report.member), note);
|
|
41
|
+
} catch (err) {
|
|
42
|
+
warn(`could not post the note on #${report.pr}: ${messageOf(err)}`);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The ports over chant/lifecycle in `cwd` (default the working directory):
|
|
49
|
+
* the records at `_pr-envs/records.jsonl`, appended and pushed, and the gate
|
|
50
|
+
* ledger read without writing a pending fact. With `forge`, the note and
|
|
51
|
+
* status are posted and the sweep asks it whether a pull request is open.
|
|
52
|
+
*/
|
|
53
|
+
export function lifecyclePrEnvPorts(opts: { cwd?: string; forge?: PrForge; log?: (line: string) => void; warn?: (message: string) => void } = {}): PrEnvPorts {
|
|
54
|
+
const at = opts.cwd ? { cwd: opts.cwd } : undefined;
|
|
55
|
+
const warn = opts.warn ?? (() => {});
|
|
56
|
+
const forge = opts.forge;
|
|
57
|
+
return {
|
|
58
|
+
async readRecords() {
|
|
59
|
+
const { fetchLifecycle, readBlobFromPath } = await import("../lifecycle/git");
|
|
60
|
+
await fetchLifecycle(at).catch(() => false);
|
|
61
|
+
return parsePrEnvRecords(await readBlobFromPath(PR_ENV_LEDGER_DIR, PR_ENV_LEDGER_FILE, at));
|
|
62
|
+
},
|
|
63
|
+
async appendRecord(record) {
|
|
64
|
+
const { appendLedgerLine, fetchLifecycle, pushLifecycleReport } = await import("../lifecycle/git");
|
|
65
|
+
try {
|
|
66
|
+
await fetchLifecycle(at).catch(() => false);
|
|
67
|
+
await appendLedgerLine(PR_ENV_LEDGER_DIR, PR_ENV_LEDGER_FILE, JSON.stringify(record), `Pull request environment ${record.env} ${record.kind} (${record.result})`, at);
|
|
68
|
+
const pushed = await pushLifecycleReport(at);
|
|
69
|
+
if (pushed.pushWarning) warn(pushed.pushWarning);
|
|
70
|
+
} catch (err) {
|
|
71
|
+
warn(`could not record ${record.env}'s ${record.kind} on chant/lifecycle: ${messageOf(err)}`);
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
async decideGate(input) {
|
|
75
|
+
const { approvalOf, decidePrGate, readOnlyLedger } = await import("./pr-run");
|
|
76
|
+
const { gitGateLedgerPort } = await import("../op/gate");
|
|
77
|
+
const approval = approvalOf(await decidePrGate(readOnlyLedger(gitGateLedgerPort(at)), input));
|
|
78
|
+
return { status: approval.status, ...(approval.approvedBy ? { approvedBy: approval.approvedBy } : {}) };
|
|
79
|
+
},
|
|
80
|
+
...(forge ? { publish: forgePrEnvPublisher(forge, warn) } : {}),
|
|
81
|
+
...(forge?.pullRequestState ? { pullRequestState: (pr: number) => forge.pullRequestState!(pr) } : {}),
|
|
82
|
+
...(opts.log ? { log: opts.log } : {}),
|
|
83
|
+
warn,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function messageOf(err: unknown): string {
|
|
88
|
+
return err instanceof Error ? err.message : String(err);
|
|
89
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pull request environment runs bundle alone (#4330 follow-up): a
|
|
3
|
+
* product that brings its own adapter and ports imports
|
|
4
|
+
* `@intentius/chant/components/pr-env-run` into one bundled file, without the
|
|
5
|
+
* gate, Ajv, js-yaml or the config loader. The ports chant uses live in
|
|
6
|
+
* ./pr-env-ports.ts. This bundles the module and reads esbuild's list of what
|
|
7
|
+
* went in.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
import { build } from "esbuild";
|
|
12
|
+
import { describe, expect, test } from "vitest";
|
|
13
|
+
import { REPO } from "../workspace/__fixtures__/contract-repo";
|
|
14
|
+
|
|
15
|
+
describe("the pr-env-run bundle", () => {
|
|
16
|
+
test("holds the runs and the records, and no gate, schema checks, YAML or config loader", async () => {
|
|
17
|
+
const result = await build({
|
|
18
|
+
entryPoints: [join(REPO, "packages", "core", "src", "components", "pr-env-run.ts")],
|
|
19
|
+
bundle: true,
|
|
20
|
+
platform: "node",
|
|
21
|
+
format: "esm",
|
|
22
|
+
write: false,
|
|
23
|
+
metafile: true,
|
|
24
|
+
outdir: "out",
|
|
25
|
+
logLevel: "silent",
|
|
26
|
+
});
|
|
27
|
+
const inputs = Object.keys(result.metafile.inputs).map((i) => i.replace(/^.*?packages\//, "packages/")).sort();
|
|
28
|
+
expect(inputs).toEqual([
|
|
29
|
+
"packages/core/src/change-set.ts",
|
|
30
|
+
"packages/core/src/ci-handover.ts",
|
|
31
|
+
"packages/core/src/ci-jobs.ts",
|
|
32
|
+
"packages/core/src/components/changed-files.ts",
|
|
33
|
+
"packages/core/src/components/pr-env-run.ts",
|
|
34
|
+
"packages/core/src/components/pr-environment.ts",
|
|
35
|
+
"packages/core/src/components/pr-pipeline.ts",
|
|
36
|
+
"packages/core/src/config-environments.ts",
|
|
37
|
+
"packages/core/src/content-digest.ts",
|
|
38
|
+
"packages/core/src/declarable.ts",
|
|
39
|
+
"packages/core/src/effect-receipt.ts",
|
|
40
|
+
"packages/core/src/gated-waves.ts",
|
|
41
|
+
"packages/core/src/intrinsic.ts",
|
|
42
|
+
"packages/core/src/lifecycle/plan-digest.ts",
|
|
43
|
+
"packages/core/src/lifecycle/teardown.ts",
|
|
44
|
+
"packages/core/src/live-endpoint.ts",
|
|
45
|
+
"packages/core/src/observation.ts",
|
|
46
|
+
"packages/core/src/op/activity-runtime.ts",
|
|
47
|
+
"packages/core/src/op/emulator-lifecycle.ts",
|
|
48
|
+
"packages/core/src/plan-summary.ts",
|
|
49
|
+
"packages/core/src/pr-loop.ts",
|
|
50
|
+
]);
|
|
51
|
+
expect(inputs.some((i) => /node_modules\/(ajv|js-yaml)\//.test(i) || i.endsWith("/op/gate.ts") || i.endsWith("/src/config.ts") || i.endsWith("/ts-loader.ts"))).toBe(false);
|
|
52
|
+
expect(result.outputFiles.reduce((n, f) => n + f.contents.byteLength, 0)).toBeLessThan(40 * 1024);
|
|
53
|
+
});
|
|
54
|
+
});
|
|
@@ -16,9 +16,11 @@
|
|
|
16
16
|
* - the report and the note ({@link renderPrEnvNote}).
|
|
17
17
|
*
|
|
18
18
|
* `chant components pr-env` (../cli/handlers/pr-env.ts) runs these with the
|
|
19
|
-
* components adapter and the lexicons' teardown
|
|
20
|
-
* chant/lifecycle
|
|
21
|
-
* (
|
|
19
|
+
* components adapter and the lexicons' teardown, and the ports over
|
|
20
|
+
* chant/lifecycle and the gate ledger in ./pr-env-ports.ts
|
|
21
|
+
* (`lifecyclePrEnvPorts`). Those ports load the gate and its schema checks,
|
|
22
|
+
* so they live apart: a product that brings its own ports bundles this
|
|
23
|
+
* module without them (pr-env-run-bundle.test.ts).
|
|
22
24
|
*/
|
|
23
25
|
|
|
24
26
|
import { spawnSync } from "node:child_process";
|
|
@@ -29,19 +31,11 @@ import { withoutForgeTokens } from "../ci-handover";
|
|
|
29
31
|
import type { ChantConfig } from "../config";
|
|
30
32
|
import type { TeardownCandidate, TeardownHole, TeardownOutcome } from "../lexicon";
|
|
31
33
|
import type { ObservationLexicon } from "../lexicon";
|
|
32
|
-
import type { PrForge } from "../pr-forge";
|
|
33
34
|
import {
|
|
34
35
|
PR_ENV_EXIT,
|
|
35
36
|
PR_ENV_GATE,
|
|
36
|
-
PR_ENV_LEDGER_DIR,
|
|
37
|
-
PR_ENV_LEDGER_FILE,
|
|
38
37
|
expired,
|
|
39
38
|
livePrEnvironments,
|
|
40
|
-
parsePrEnvRecords,
|
|
41
|
-
prEnvNoteMarker,
|
|
42
|
-
prEnvStatusContext,
|
|
43
|
-
prEnvStatusDescription,
|
|
44
|
-
prEnvStatusState,
|
|
45
39
|
prEnvironmentName,
|
|
46
40
|
renderPrEnvNote,
|
|
47
41
|
teardownComplete,
|
|
@@ -425,71 +419,6 @@ export async function prEnvSweep(input: PrEnvSweepInput): Promise<{ exit: number
|
|
|
425
419
|
return { exit, results };
|
|
426
420
|
}
|
|
427
421
|
|
|
428
|
-
// ── the ports chant itself uses ────────────────────────────────────────────
|
|
429
|
-
|
|
430
|
-
/**
|
|
431
|
-
* The note and the `chant/pr-env` status on the forge. A refusal from the
|
|
432
|
-
* forge warns and never fails the run.
|
|
433
|
-
*/
|
|
434
|
-
export function forgePrEnvPublisher(forge: PrForge, warn: (message: string) => void = () => {}): (report: PrEnvReport) => Promise<void> {
|
|
435
|
-
return async (report) => {
|
|
436
|
-
const { forgePrincipalOf } = await import("../pr-forge");
|
|
437
|
-
const note = renderPrEnvNote(report, forgePrincipalOf(forge.kind, forge.host, "<your-login>"));
|
|
438
|
-
if (report.head) {
|
|
439
|
-
try {
|
|
440
|
-
await forge.setStatus(report.head, { context: prEnvStatusContext(report.member), state: prEnvStatusState(report), description: prEnvStatusDescription(report), ...(forge.runUrl ? { url: forge.runUrl } : {}) });
|
|
441
|
-
} catch (err) {
|
|
442
|
-
warn(`could not set the ${prEnvStatusContext(report.member)} status: ${messageOf(err)}`);
|
|
443
|
-
}
|
|
444
|
-
}
|
|
445
|
-
try {
|
|
446
|
-
await forge.upsertNote(report.pr, prEnvNoteMarker(report.env, report.member), note);
|
|
447
|
-
} catch (err) {
|
|
448
|
-
warn(`could not post the note on #${report.pr}: ${messageOf(err)}`);
|
|
449
|
-
}
|
|
450
|
-
};
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
/**
|
|
454
|
-
* The ports over chant/lifecycle in `cwd` (default the working directory):
|
|
455
|
-
* the records at `_pr-envs/records.jsonl`, appended and pushed, and the gate
|
|
456
|
-
* ledger read without writing a pending fact. With `forge`, the note and
|
|
457
|
-
* status are posted and the sweep asks it whether a pull request is open.
|
|
458
|
-
*/
|
|
459
|
-
export function lifecyclePrEnvPorts(opts: { cwd?: string; forge?: PrForge; log?: (line: string) => void; warn?: (message: string) => void } = {}): PrEnvPorts {
|
|
460
|
-
const at = opts.cwd ? { cwd: opts.cwd } : undefined;
|
|
461
|
-
const warn = opts.warn ?? (() => {});
|
|
462
|
-
const forge = opts.forge;
|
|
463
|
-
return {
|
|
464
|
-
async readRecords() {
|
|
465
|
-
const { fetchLifecycle, readBlobFromPath } = await import("../lifecycle/git");
|
|
466
|
-
await fetchLifecycle(at).catch(() => false);
|
|
467
|
-
return parsePrEnvRecords(await readBlobFromPath(PR_ENV_LEDGER_DIR, PR_ENV_LEDGER_FILE, at));
|
|
468
|
-
},
|
|
469
|
-
async appendRecord(record) {
|
|
470
|
-
const { appendLedgerLine, fetchLifecycle, pushLifecycleReport } = await import("../lifecycle/git");
|
|
471
|
-
try {
|
|
472
|
-
await fetchLifecycle(at).catch(() => false);
|
|
473
|
-
await appendLedgerLine(PR_ENV_LEDGER_DIR, PR_ENV_LEDGER_FILE, JSON.stringify(record), `Pull request environment ${record.env} ${record.kind} (${record.result})`, at);
|
|
474
|
-
const pushed = await pushLifecycleReport(at);
|
|
475
|
-
if (pushed.pushWarning) warn(pushed.pushWarning);
|
|
476
|
-
} catch (err) {
|
|
477
|
-
warn(`could not record ${record.env}'s ${record.kind} on chant/lifecycle: ${messageOf(err)}`);
|
|
478
|
-
}
|
|
479
|
-
},
|
|
480
|
-
async decideGate(input) {
|
|
481
|
-
const { approvalOf, decidePrGate, readOnlyLedger } = await import("./pr-run");
|
|
482
|
-
const { gitGateLedgerPort } = await import("../op/gate");
|
|
483
|
-
const approval = approvalOf(await decidePrGate(readOnlyLedger(gitGateLedgerPort(at)), input));
|
|
484
|
-
return { status: approval.status, ...(approval.approvedBy ? { approvedBy: approval.approvedBy } : {}) };
|
|
485
|
-
},
|
|
486
|
-
...(forge ? { publish: forgePrEnvPublisher(forge, warn) } : {}),
|
|
487
|
-
...(forge?.pullRequestState ? { pullRequestState: (pr: number) => forge.pullRequestState!(pr) } : {}),
|
|
488
|
-
...(opts.log ? { log: opts.log } : {}),
|
|
489
|
-
warn,
|
|
490
|
-
};
|
|
491
|
-
}
|
|
492
|
-
|
|
493
422
|
// ── a teardown command ─────────────────────────────────────────────────────
|
|
494
423
|
|
|
495
424
|
/** `ci.prEnvironment.teardown` (#4330): a command that tears down what no lexicon does. */
|
|
@@ -39,7 +39,8 @@
|
|
|
39
39
|
* as a lexicon does.
|
|
40
40
|
*/
|
|
41
41
|
|
|
42
|
-
import {
|
|
42
|
+
import type { ChantConfig } from "../config";
|
|
43
|
+
import { environmentEndpoint, environmentName, isEnvironmentPattern, isOwnershipParamRef, matchesDeclaredEnvironment, resolveOwnershipStack, type EnvironmentDeclaration } from "../config-environments";
|
|
43
44
|
import type { OwnershipMarker } from "../ownership";
|
|
44
45
|
import { executeTeardown, planTeardown, type TeardownPlan, type TeardownPlanEntry, type TeardownReport } from "../lifecycle/teardown";
|
|
45
46
|
import type { ObservationLexicon, TeardownCandidate, TeardownEnumeration, TeardownExecution } from "../lexicon";
|