@intentius/chant 0.124.27 → 0.124.29
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/README.md +1 -1
- package/dist/__golden__/wave-loop/fan-out-gated.json +8 -0
- package/dist/__golden__/wave-loop/fan-out-no-members.json +4 -0
- package/dist/__golden__/wave-loop/fan-out-only.json +6 -0
- package/dist/__golden__/wave-loop/op-by-apply-hold.json +2 -0
- package/dist/__golden__/wave-loop/op-cost-member.json +3 -0
- package/dist/__golden__/wave-loop/op-held-on-before-apply.json +1 -0
- package/dist/__golden__/wave-loop/op-held-on.json +2 -0
- package/dist/__golden__/wave-loop/op-hooks-held.json +2 -0
- package/dist/__golden__/wave-loop/op-hooks-hold-before-apply.json +2 -0
- package/dist/__golden__/wave-loop/op-hooks-refused-at-base.json +3 -0
- package/dist/__golden__/wave-loop/op-hooks-share.json +3 -0
- package/dist/__golden__/wave-loop/op-per-run.json +7 -0
- package/dist/__golden__/wave-loop/op-pr-review.json +7 -0
- package/dist/__golden__/wave-loop/op-sealed.json +3 -0
- package/dist/__golden__/wave-loop/op-spend.json +3 -0
- package/dist/__golden__/wave-loop/op-wave-commands.json +7 -0
- package/dist/__golden__/wave-loop/op-wide-waiting.json +4 -0
- package/dist/build-params.d.ts +34 -1
- package/dist/build-params.d.ts.map +1 -1
- package/dist/build-params.js +31 -1
- package/dist/change-set-graph.d.ts +63 -0
- package/dist/change-set-graph.d.ts.map +1 -0
- package/dist/change-set-graph.js +130 -0
- package/dist/change-set.d.ts +62 -3
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +36 -4
- package/dist/chant-version.d.ts +9 -0
- package/dist/chant-version.d.ts.map +1 -0
- package/dist/chant-version.js +16 -0
- package/dist/cli/build-params-cli.d.ts +7 -1
- package/dist/cli/build-params-cli.d.ts.map +1 -1
- package/dist/cli/build-params-cli.js +17 -8
- package/dist/cli/commands/build.d.ts +8 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +15 -11
- package/dist/cli/commands/check-lexicon-docs.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-docs.js +30 -2
- package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon.js +13 -2
- package/dist/cli/commands/init-lexicon/templates/docs.d.ts +4 -1
- package/dist/cli/commands/init-lexicon/templates/docs.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon/templates/docs.js +6 -6
- package/dist/cli/commands/init-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon.js +17 -8
- package/dist/cli/handlers/approve.d.ts.map +1 -1
- package/dist/cli/handlers/approve.js +64 -4
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +43 -4
- package/dist/cli/handlers/change-set.d.ts +10 -0
- package/dist/cli/handlers/change-set.d.ts.map +1 -1
- package/dist/cli/handlers/change-set.js +51 -1
- package/dist/cli/handlers/fan-out.d.ts +10 -1
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +54 -6
- package/dist/cli/handlers/lifecycle-gc.d.ts +19 -0
- package/dist/cli/handlers/lifecycle-gc.d.ts.map +1 -0
- package/dist/cli/handlers/lifecycle-gc.js +143 -0
- package/dist/cli/handlers/pr.d.ts +16 -2
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +269 -37
- package/dist/cli/handlers/promote.d.ts +7 -0
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +440 -28
- package/dist/cli/handlers/release.d.ts +91 -0
- package/dist/cli/handlers/release.d.ts.map +1 -0
- package/dist/cli/handlers/release.js +589 -0
- package/dist/cli/handlers/run.d.ts +38 -2
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/run.js +234 -16
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +143 -17
- package/dist/cli/mcp/workspace-tools.js +1 -1
- package/dist/cli/parse-args.d.ts.map +1 -1
- package/dist/cli/parse-args.js +73 -5
- package/dist/cli/registry.d.ts +43 -5
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/run-events.d.ts +30 -0
- package/dist/cli/run-events.d.ts.map +1 -0
- package/dist/cli/run-events.js +49 -0
- package/dist/cli/version.d.ts +3 -5
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +3 -13
- package/dist/codegen/docs-in-site.d.ts +71 -0
- package/dist/codegen/docs-in-site.d.ts.map +1 -0
- package/dist/codegen/docs-in-site.js +177 -0
- package/dist/codegen/docs-types.d.ts +14 -1
- package/dist/codegen/docs-types.d.ts.map +1 -1
- package/dist/codegen/docs.d.ts +18 -1
- package/dist/codegen/docs.d.ts.map +1 -1
- package/dist/codegen/docs.js +40 -7
- package/dist/codegen/rehype-base-url.mjs +15 -9
- package/dist/components/auto-release.d.ts +6 -1
- package/dist/components/auto-release.d.ts.map +1 -1
- package/dist/components/auto-release.js +3 -0
- package/dist/components/capability.d.ts +9 -0
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/cli-support.d.ts +6 -0
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/cli-support.js +10 -9
- package/dist/components/driver.d.ts +50 -9
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +116 -54
- package/dist/components/fan-out-inputs.d.ts +69 -0
- package/dist/components/fan-out-inputs.d.ts.map +1 -0
- package/dist/components/fan-out-inputs.js +169 -0
- package/dist/components/fan-out-record.d.ts +13 -0
- package/dist/components/fan-out-record.d.ts.map +1 -1
- package/dist/components/fan-out-record.js +16 -0
- package/dist/components/fan-out-run.d.ts +7 -0
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-run.js +85 -26
- package/dist/components/fan-out.d.ts +4 -0
- package/dist/components/fan-out.d.ts.map +1 -1
- package/dist/components/pr-pipeline.d.ts +25 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +22 -4
- package/dist/components/pr-run.d.ts +11 -0
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +20 -1
- package/dist/components/promote-order.d.ts +38 -0
- package/dist/components/promote-order.d.ts.map +1 -0
- package/dist/components/promote-order.js +62 -0
- package/dist/components/promote.d.ts +38 -2
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +77 -2
- package/dist/components/release-compile.d.ts +142 -0
- package/dist/components/release-compile.d.ts.map +1 -0
- package/dist/components/release-compile.js +382 -0
- package/dist/components/release-gate.d.ts +135 -0
- package/dist/components/release-gate.d.ts.map +1 -0
- package/dist/components/release-gate.js +288 -0
- package/dist/components/release-promote.d.ts +96 -0
- package/dist/components/release-promote.d.ts.map +1 -0
- package/dist/components/release-promote.js +204 -0
- package/dist/components/run-progress.d.ts +7 -0
- package/dist/components/run-progress.d.ts.map +1 -1
- package/dist/components/wave-plan.d.ts +8 -1
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +11 -3
- package/dist/config.d.ts +45 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +3 -0
- package/dist/flag-params.d.ts +54 -0
- package/dist/flag-params.d.ts.map +1 -0
- package/dist/flag-params.js +130 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/lifecycle/__fixtures__/publish-fakes.d.ts +120 -0
- package/dist/lifecycle/__fixtures__/publish-fakes.d.ts.map +1 -0
- package/dist/lifecycle/__fixtures__/publish-fakes.js +304 -0
- package/dist/lifecycle/change-set-store.d.ts +68 -0
- package/dist/lifecycle/change-set-store.d.ts.map +1 -0
- package/dist/lifecycle/change-set-store.js +97 -0
- package/dist/lifecycle/commit-sha.d.ts +13 -0
- package/dist/lifecycle/commit-sha.d.ts.map +1 -0
- package/dist/lifecycle/commit-sha.js +21 -0
- package/dist/lifecycle/delivery-metrics.d.ts +139 -0
- package/dist/lifecycle/delivery-metrics.d.ts.map +1 -0
- package/dist/lifecycle/delivery-metrics.js +145 -0
- package/dist/lifecycle/deploy-outcome.d.ts +81 -0
- package/dist/lifecycle/deploy-outcome.d.ts.map +1 -0
- package/dist/lifecycle/deploy-outcome.js +101 -0
- package/dist/lifecycle/gate-change-set.d.ts +78 -0
- package/dist/lifecycle/gate-change-set.d.ts.map +1 -0
- package/dist/lifecycle/gate-change-set.js +138 -0
- package/dist/lifecycle/gate-ledger.d.ts +51 -4
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +18 -0
- package/dist/lifecycle/git.d.ts +30 -1
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/git.js +31 -5
- package/dist/lifecycle/index.d.ts +4 -0
- package/dist/lifecycle/index.d.ts.map +1 -1
- package/dist/lifecycle/index.js +4 -0
- package/dist/lifecycle/mixed-environment.d.ts +95 -0
- package/dist/lifecycle/mixed-environment.d.ts.map +1 -0
- package/dist/lifecycle/mixed-environment.js +154 -0
- package/dist/lifecycle/publish-attachments.d.ts +79 -0
- package/dist/lifecycle/publish-attachments.d.ts.map +1 -0
- package/dist/lifecycle/publish-attachments.js +179 -0
- package/dist/lifecycle/publish-credentials.d.ts +37 -0
- package/dist/lifecycle/publish-credentials.d.ts.map +1 -0
- package/dist/lifecycle/publish-credentials.js +69 -0
- package/dist/lifecycle/publish-declaration.d.ts +97 -0
- package/dist/lifecycle/publish-declaration.d.ts.map +1 -0
- package/dist/lifecycle/publish-declaration.js +83 -0
- package/dist/lifecycle/publish-forge.d.ts +53 -0
- package/dist/lifecycle/publish-forge.d.ts.map +1 -0
- package/dist/lifecycle/publish-forge.js +298 -0
- package/dist/lifecycle/publish-npm.d.ts +61 -0
- package/dist/lifecycle/publish-npm.d.ts.map +1 -0
- package/dist/lifecycle/publish-npm.js +242 -0
- package/dist/lifecycle/publish-oci.d.ts +64 -0
- package/dist/lifecycle/publish-oci.d.ts.map +1 -0
- package/dist/lifecycle/publish-oci.js +383 -0
- package/dist/lifecycle/publish-record.d.ts +66 -0
- package/dist/lifecycle/publish-record.d.ts.map +1 -0
- package/dist/lifecycle/publish-record.js +84 -0
- package/dist/lifecycle/publish-targets.d.ts +45 -0
- package/dist/lifecycle/publish-targets.d.ts.map +1 -0
- package/dist/lifecycle/publish-targets.js +85 -0
- package/dist/lifecycle/release-cut.d.ts +154 -0
- package/dist/lifecycle/release-cut.d.ts.map +1 -0
- package/dist/lifecycle/release-cut.js +366 -0
- package/dist/lifecycle/release-join.d.ts +95 -0
- package/dist/lifecycle/release-join.d.ts.map +1 -0
- package/dist/lifecycle/release-join.js +139 -0
- package/dist/lifecycle/release-ledger.d.ts +54 -0
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.js +53 -20
- package/dist/lifecycle/release-publish.d.ts +312 -0
- package/dist/lifecycle/release-publish.d.ts.map +1 -0
- package/dist/lifecycle/release-publish.js +335 -0
- package/dist/lifecycle/release-revocation.d.ts +80 -0
- package/dist/lifecycle/release-revocation.d.ts.map +1 -0
- package/dist/lifecycle/release-revocation.js +123 -0
- package/dist/lifecycle/release-store.d.ts +200 -0
- package/dist/lifecycle/release-store.d.ts.map +1 -0
- package/dist/lifecycle/release-store.js +320 -0
- package/dist/lifecycle/release-verify.d.ts +61 -0
- package/dist/lifecycle/release-verify.d.ts.map +1 -0
- package/dist/lifecycle/release-verify.js +92 -0
- package/dist/lifecycle/release-workstation.d.ts +91 -0
- package/dist/lifecycle/release-workstation.d.ts.map +1 -0
- package/dist/lifecycle/release-workstation.js +180 -0
- package/dist/lifecycle/retention-policy.d.ts +45 -0
- package/dist/lifecycle/retention-policy.d.ts.map +1 -0
- package/dist/lifecycle/retention-policy.js +43 -0
- package/dist/lifecycle/retention.d.ts +185 -0
- package/dist/lifecycle/retention.d.ts.map +1 -0
- package/dist/lifecycle/retention.js +400 -0
- package/dist/lifecycle/run-ledger.d.ts +4 -0
- package/dist/lifecycle/run-ledger.d.ts.map +1 -1
- package/dist/lifecycle/run-ledger.js +2 -0
- package/dist/op/activities/change-coverage.d.ts.map +1 -1
- package/dist/op/activities/change-coverage.js +4 -2
- package/dist/op/activities/source-release.d.ts.map +1 -1
- package/dist/op/activities/source-release.js +7 -3
- package/dist/op/activities/source-rollback.d.ts.map +1 -1
- package/dist/op/activities/source-rollback.js +7 -3
- package/dist/op/gate-name.d.ts +11 -2
- package/dist/op/gate-name.d.ts.map +1 -1
- package/dist/op/gate-name.js +12 -3
- package/dist/op/gate-run-locator.d.ts +22 -0
- package/dist/op/gate-run-locator.d.ts.map +1 -1
- package/dist/op/gate-run-locator.js +31 -0
- package/dist/op/gate.d.ts +27 -3
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/gate.js +57 -3
- package/dist/op/local-executor.d.ts +36 -1
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +158 -52
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +4 -0
- package/dist/op/run-live.d.ts +2 -0
- package/dist/op/run-live.d.ts.map +1 -1
- package/dist/op/run-live.js +1 -1
- package/dist/op/runtime.d.ts +46 -0
- package/dist/op/runtime.d.ts.map +1 -1
- package/dist/op/runtimes/local.d.ts.map +1 -1
- package/dist/op/runtimes/local.js +8 -0
- package/dist/plan-summary.d.ts.map +1 -1
- package/dist/plan-summary.js +8 -2
- package/dist/point-decision.d.ts +2 -0
- package/dist/point-decision.d.ts.map +1 -1
- package/dist/point-decision.js +9 -2
- package/dist/pr-loop.d.ts +7 -0
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +23 -4
- package/dist/pr-report-url.d.ts +82 -0
- package/dist/pr-report-url.d.ts.map +1 -0
- package/dist/pr-report-url.js +174 -0
- package/dist/provenance.d.ts +2 -2
- package/dist/provenance.d.ts.map +1 -1
- package/dist/run-event-store.d.ts +104 -0
- package/dist/run-event-store.d.ts.map +1 -0
- package/dist/run-event-store.js +251 -0
- package/dist/run-event-stream.d.ts +133 -0
- package/dist/run-event-stream.d.ts.map +1 -0
- package/dist/run-event-stream.js +242 -0
- package/dist/run-event.d.ts +285 -0
- package/dist/run-event.d.ts.map +1 -0
- package/dist/run-event.js +209 -0
- package/dist/wave-runtime.mjs +262 -226
- package/dist/workspace/__fixtures__/flag-workspace.d.ts +31 -0
- package/dist/workspace/__fixtures__/flag-workspace.d.ts.map +1 -0
- package/dist/workspace/__fixtures__/flag-workspace.js +114 -0
- package/dist/workspace/__fixtures__/run-event-check.d.ts +19 -0
- package/dist/workspace/__fixtures__/run-event-check.d.ts.map +1 -0
- package/dist/workspace/__fixtures__/run-event-check.js +59 -0
- package/dist/workspace/change-set-show.d.ts +56 -0
- package/dist/workspace/change-set-show.d.ts.map +1 -0
- package/dist/workspace/change-set-show.js +54 -0
- package/dist/workspace/change-set-show.schema.json +102 -0
- package/dist/workspace/change-set.schema.json +32 -1
- package/dist/workspace/changes-cli.d.ts.map +1 -1
- package/dist/workspace/changes-cli.js +10 -1
- package/dist/workspace/changes.d.ts +37 -0
- package/dist/workspace/changes.d.ts.map +1 -1
- package/dist/workspace/changes.js +49 -2
- package/dist/workspace/changes.schema.json +135 -0
- package/dist/workspace/check.schema.json +4 -2
- package/dist/workspace/checks/records.d.ts +9 -1
- package/dist/workspace/checks/records.d.ts.map +1 -1
- package/dist/workspace/checks/records.js +35 -1
- package/dist/workspace/checks.d.ts +1 -0
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/checks.js +2 -1
- package/dist/workspace/ci-green-cli.d.ts +19 -4
- package/dist/workspace/ci-green-cli.d.ts.map +1 -1
- package/dist/workspace/ci-green-cli.js +75 -12
- package/dist/workspace/ci-green-forge.d.ts +20 -3
- package/dist/workspace/ci-green-forge.d.ts.map +1 -1
- package/dist/workspace/ci-green-forge.js +6 -4
- package/dist/workspace/ci-green-workflow.d.ts +11 -0
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +6 -0
- package/dist/workspace/ci-green.d.ts +281 -13
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +456 -38
- package/dist/workspace/ci-last-green.schema.json +32 -2
- package/dist/workspace/ci-list.schema.json +525 -0
- package/dist/workspace/commit-links.d.ts +85 -0
- package/dist/workspace/commit-links.d.ts.map +1 -0
- package/dist/workspace/commit-links.js +163 -0
- package/dist/workspace/declaration.d.ts +35 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +27 -1
- package/dist/workspace/declaration.schema.json +76 -0
- package/dist/workspace/declared-kinds.d.ts +16 -0
- package/dist/workspace/declared-kinds.d.ts.map +1 -1
- package/dist/workspace/declared-kinds.js +25 -0
- package/dist/workspace/delivery-metrics.d.ts +91 -0
- package/dist/workspace/delivery-metrics.d.ts.map +1 -0
- package/dist/workspace/delivery-metrics.js +217 -0
- package/dist/workspace/delivery-metrics.schema.json +519 -0
- package/dist/workspace/flags-read.d.ts +37 -0
- package/dist/workspace/flags-read.d.ts.map +1 -0
- package/dist/workspace/flags-read.js +103 -0
- package/dist/workspace/flags.d.ts +100 -0
- package/dist/workspace/flags.d.ts.map +1 -0
- package/dist/workspace/flags.js +98 -0
- package/dist/workspace/graph-cli.js +1 -1
- package/dist/workspace/identity-gate-rule.d.ts +37 -0
- package/dist/workspace/identity-gate-rule.d.ts.map +1 -1
- package/dist/workspace/identity-gate-rule.js +72 -7
- package/dist/workspace/identity.d.ts +12 -0
- package/dist/workspace/identity.d.ts.map +1 -1
- package/dist/workspace/identity.js +13 -1
- package/dist/workspace/intent-cli.d.ts +11 -2
- package/dist/workspace/intent-cli.d.ts.map +1 -1
- package/dist/workspace/intent-cli.js +54 -5
- package/dist/workspace/intent-trace.d.ts +219 -0
- package/dist/workspace/intent-trace.d.ts.map +1 -0
- package/dist/workspace/intent-trace.js +314 -0
- package/dist/workspace/intent.d.ts +36 -7
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +192 -22
- package/dist/workspace/intent.schema.json +702 -6
- package/dist/workspace/ls.d.ts +4 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/ls.js +2 -0
- package/dist/workspace/ls.schema.json +3 -1
- package/dist/workspace/member-pipeline.d.ts +6 -0
- package/dist/workspace/member-pipeline.d.ts.map +1 -1
- package/dist/workspace/member-pipeline.js +6 -0
- package/dist/workspace/overlap.d.ts +146 -0
- package/dist/workspace/overlap.d.ts.map +1 -0
- package/dist/workspace/overlap.js +276 -0
- package/dist/workspace/promotion-order.d.ts +41 -0
- package/dist/workspace/promotion-order.d.ts.map +1 -0
- package/dist/workspace/promotion-order.js +95 -0
- package/dist/workspace/reason-codes.d.ts +4 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +7 -1
- package/dist/workspace/records.d.ts +15 -2
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/records.js +32 -0
- package/dist/workspace/records.schema.json +21 -2
- package/dist/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
- package/dist/workspace/reference-kinds/flag/flag.schema.json +53 -0
- package/dist/workspace/releases.d.ts +81 -0
- package/dist/workspace/releases.d.ts.map +1 -0
- package/dist/workspace/releases.js +103 -0
- package/dist/workspace/releases.schema.json +513 -0
- package/dist/workspace/run-event.schema.json +295 -0
- package/dist/workspace/status-gates.d.ts +34 -1
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status-gates.js +31 -2
- package/dist/workspace/status-stewards.d.ts +4 -0
- package/dist/workspace/status-stewards.d.ts.map +1 -1
- package/dist/workspace/status-stewards.js +2 -0
- package/dist/workspace/status.d.ts +117 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +218 -4
- package/dist/workspace/status.schema.json +268 -2
- package/dist/workspace/trust/ci-tag-statement.d.ts +102 -0
- package/dist/workspace/trust/ci-tag-statement.d.ts.map +1 -0
- package/dist/workspace/trust/ci-tag-statement.js +123 -0
- package/dist/workspace/trust/op-run-statement.d.ts +91 -0
- package/dist/workspace/trust/op-run-statement.d.ts.map +1 -0
- package/dist/workspace/trust/op-run-statement.js +143 -0
- package/dist/workspace/trust/rotation.d.ts +18 -2
- package/dist/workspace/trust/rotation.d.ts.map +1 -1
- package/dist/workspace/trust/rotation.js +65 -16
- package/dist/workspace/trust/seal.d.ts +11 -0
- package/dist/workspace/trust/seal.d.ts.map +1 -1
- package/dist/workspace/trust/seal.js +9 -0
- package/dist/workspace/trust/ssh-commit.d.ts.map +1 -1
- package/dist/workspace/trust/ssh-commit.js +10 -10
- package/dist/workspace/wip.d.ts.map +1 -1
- package/dist/workspace/wip.js +11 -3
- package/package.json +1 -1
- package/src/__golden__/wave-loop/fan-out-gated.json +8 -0
- package/src/__golden__/wave-loop/fan-out-no-members.json +4 -0
- package/src/__golden__/wave-loop/fan-out-only.json +6 -0
- package/src/__golden__/wave-loop/op-by-apply-hold.json +2 -0
- package/src/__golden__/wave-loop/op-cost-member.json +3 -0
- package/src/__golden__/wave-loop/op-held-on-before-apply.json +1 -0
- package/src/__golden__/wave-loop/op-held-on.json +2 -0
- package/src/__golden__/wave-loop/op-hooks-held.json +2 -0
- package/src/__golden__/wave-loop/op-hooks-hold-before-apply.json +2 -0
- package/src/__golden__/wave-loop/op-hooks-refused-at-base.json +3 -0
- package/src/__golden__/wave-loop/op-hooks-share.json +3 -0
- package/src/__golden__/wave-loop/op-per-run.json +7 -0
- package/src/__golden__/wave-loop/op-pr-review.json +7 -0
- package/src/__golden__/wave-loop/op-sealed.json +3 -0
- package/src/__golden__/wave-loop/op-spend.json +3 -0
- package/src/__golden__/wave-loop/op-wave-commands.json +7 -0
- package/src/__golden__/wave-loop/op-wide-waiting.json +4 -0
- package/src/build-params.test.ts +46 -0
- package/src/build-params.ts +55 -1
- package/src/change-set-graph.test.ts +72 -0
- package/src/change-set-graph.ts +141 -0
- package/src/change-set.ts +87 -6
- package/src/chant-version.ts +16 -0
- package/src/cli/build-params-cli.ts +22 -9
- package/src/cli/commands/build.ts +25 -11
- package/src/cli/commands/check-lexicon-docs.test.ts +51 -0
- package/src/cli/commands/check-lexicon-docs.ts +39 -2
- package/src/cli/commands/check-lexicon.ts +14 -2
- package/src/cli/commands/init-lexicon/templates/docs.ts +7 -6
- package/src/cli/commands/init-lexicon.test.ts +25 -0
- package/src/cli/commands/init-lexicon.ts +18 -8
- package/src/cli/handlers/approve-release.test.ts +84 -0
- package/src/cli/handlers/approve-revoked.test.ts +155 -0
- package/src/cli/handlers/approve.ts +65 -2
- package/src/cli/handlers/build.test.ts +67 -0
- package/src/cli/handlers/build.ts +46 -4
- package/src/cli/handlers/change-set.ts +49 -1
- package/src/cli/handlers/fan-out.test.ts +228 -1
- package/src/cli/handlers/fan-out.ts +53 -6
- package/src/cli/handlers/intent-trace.e2e.test.ts +201 -0
- package/src/cli/handlers/lifecycle-gc.test.ts +126 -0
- package/src/cli/handlers/lifecycle-gc.ts +146 -0
- package/src/cli/handlers/operator.test.ts +37 -0
- package/src/cli/handlers/pr.test.ts +341 -0
- package/src/cli/handlers/pr.ts +292 -47
- package/src/cli/handlers/promote.test.ts +669 -7
- package/src/cli/handlers/promote.ts +464 -29
- package/src/cli/handlers/release-implicit.e2e.test.ts +161 -0
- package/src/cli/handlers/release-join.e2e.test.ts +185 -0
- package/src/cli/handlers/release-publish-targets.e2e.test.ts +295 -0
- package/src/cli/handlers/release-verify.e2e.test.ts +117 -0
- package/src/cli/handlers/release-workstation-ci.e2e.test.ts +135 -0
- package/src/cli/handlers/release.e2e.test.ts +199 -0
- package/src/cli/handlers/release.ts +593 -0
- package/src/cli/handlers/run-auto-release.test.ts +80 -0
- package/src/cli/handlers/run-events-cmd.test.ts +92 -0
- package/src/cli/handlers/run-release.test.ts +55 -0
- package/src/cli/handlers/run.test.ts +30 -0
- package/src/cli/handlers/run.ts +243 -18
- package/src/cli/main.test.ts +8 -0
- package/src/cli/main.ts +143 -17
- package/src/cli/mcp/never-over-mcp.test.ts +2 -0
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/cli/parse-args.ts +56 -5
- package/src/cli/registry.ts +43 -5
- package/src/cli/run-events.ts +57 -0
- package/src/cli/version.ts +3 -13
- package/src/codegen/docs-in-site.test.ts +166 -0
- package/src/codegen/docs-in-site.ts +182 -0
- package/src/codegen/docs-site/AgentPrompt.astro +26 -1
- package/src/codegen/docs-types.ts +14 -1
- package/src/codegen/docs.ts +60 -7
- package/src/codegen/rehype-base-url.d.mts +3 -1
- package/src/codegen/rehype-base-url.mjs +15 -9
- package/src/codegen/rehype-base-url.test.ts +34 -0
- package/src/components/auto-release.test.ts +30 -0
- package/src/components/auto-release.ts +9 -1
- package/src/components/capability.ts +9 -0
- package/src/components/cli-support.test.ts +82 -0
- package/src/components/cli-support.ts +16 -9
- package/src/components/driver.test.ts +24 -0
- package/src/components/driver.ts +165 -56
- package/src/components/fan-out-inputs.test.ts +85 -0
- package/src/components/fan-out-inputs.ts +192 -0
- package/src/components/fan-out-record.test.ts +10 -0
- package/src/components/fan-out-record.ts +19 -0
- package/src/components/fan-out-run.ts +104 -35
- package/src/components/fan-out.ts +4 -0
- package/src/components/pr-pipeline.ts +35 -4
- package/src/components/pr-run.ts +30 -1
- package/src/components/promote-order.test.ts +90 -0
- package/src/components/promote-order.ts +75 -0
- package/src/components/promote.test.ts +10 -1
- package/src/components/promote.ts +94 -3
- package/src/components/release-compile.test.ts +147 -0
- package/src/components/release-compile.ts +459 -0
- package/src/components/release-gate.test.ts +215 -0
- package/src/components/release-gate.ts +355 -0
- package/src/components/release-promote.test.ts +159 -0
- package/src/components/release-promote.ts +232 -0
- package/src/components/run-progress.ts +7 -0
- package/src/components/wave-plan.ts +16 -3
- package/src/config.ts +15 -1
- package/src/flag-params.test.ts +144 -0
- package/src/flag-params.ts +134 -0
- package/src/index.ts +2 -0
- package/src/lifecycle/__fixtures__/publish-fakes.ts +351 -0
- package/src/lifecycle/change-set-store.test.ts +217 -0
- package/src/lifecycle/change-set-store.ts +113 -0
- package/src/lifecycle/commit-sha.ts +23 -0
- package/src/lifecycle/delivery-metrics.ts +263 -0
- package/src/lifecycle/deploy-outcome.ts +147 -0
- package/src/lifecycle/gate-change-set.e2e.test.ts +122 -0
- package/src/lifecycle/gate-change-set.ts +164 -0
- package/src/lifecycle/gate-ledger.test.ts +33 -0
- package/src/lifecycle/gate-ledger.ts +68 -3
- package/src/lifecycle/git.ts +61 -8
- package/src/lifecycle/index.ts +4 -0
- package/src/lifecycle/mixed-environment.test.ts +97 -0
- package/src/lifecycle/mixed-environment.ts +204 -0
- package/src/lifecycle/publish-attachments.ts +196 -0
- package/src/lifecycle/publish-credentials.ts +84 -0
- package/src/lifecycle/publish-declaration.ts +95 -0
- package/src/lifecycle/publish-forge.ts +325 -0
- package/src/lifecycle/publish-npm.ts +259 -0
- package/src/lifecycle/publish-oci.ts +396 -0
- package/src/lifecycle/publish-record.ts +113 -0
- package/src/lifecycle/publish-resume.test.ts +168 -0
- package/src/lifecycle/publish-targets.test.ts +494 -0
- package/src/lifecycle/publish-targets.ts +100 -0
- package/src/lifecycle/release-cut-signed.test.ts +180 -0
- package/src/lifecycle/release-cut.test.ts +483 -0
- package/src/lifecycle/release-cut.ts +503 -0
- package/src/lifecycle/release-flag.test.ts +112 -0
- package/src/lifecycle/release-join.test.ts +68 -0
- package/src/lifecycle/release-join.ts +182 -0
- package/src/lifecycle/release-ledger.test.ts +14 -0
- package/src/lifecycle/release-ledger.ts +85 -17
- package/src/lifecycle/release-publish.test.ts +225 -0
- package/src/lifecycle/release-publish.ts +568 -0
- package/src/lifecycle/release-revocation.ts +147 -0
- package/src/lifecycle/release-store.ts +434 -0
- package/src/lifecycle/release-verify.test.ts +110 -0
- package/src/lifecycle/release-verify.ts +120 -0
- package/src/lifecycle/release-workstation.test.ts +204 -0
- package/src/lifecycle/release-workstation.ts +216 -0
- package/src/lifecycle/retention-growth.e2e.test.ts +279 -0
- package/src/lifecycle/retention-policy.ts +63 -0
- package/src/lifecycle/retention.test.ts +363 -0
- package/src/lifecycle/retention.ts +508 -0
- package/src/lifecycle/run-ledger.test.ts +10 -0
- package/src/lifecycle/run-ledger.ts +6 -0
- package/src/op/activities/change-coverage.ts +4 -1
- package/src/op/activities/source-release.ts +8 -3
- package/src/op/activities/source-rollback.ts +8 -4
- package/src/op/commit-run-gate-deploy-join.test.ts +117 -0
- package/src/op/gate-name.ts +13 -3
- package/src/op/gate-release.test.ts +126 -0
- package/src/op/gate-run-locator.test.ts +110 -0
- package/src/op/gate-run-locator.ts +35 -0
- package/src/op/gate.ts +88 -6
- package/src/op/local-executor.ts +207 -52
- package/src/op/op-waves-run.ts +4 -0
- package/src/op/run-events.test.ts +166 -0
- package/src/op/run-live.ts +1 -1
- package/src/op/runtime.ts +39 -0
- package/src/op/runtimes/local.test.ts +16 -0
- package/src/op/runtimes/local.ts +9 -0
- package/src/plan-summary.test.ts +20 -0
- package/src/plan-summary.ts +8 -1
- package/src/point-decision.ts +12 -2
- package/src/pr-loop.ts +25 -4
- package/src/pr-report-url.test.ts +131 -0
- package/src/pr-report-url.ts +209 -0
- package/src/provenance.ts +2 -2
- package/src/run-event-store.test.ts +144 -0
- package/src/run-event-store.ts +273 -0
- package/src/run-event-stream.test.ts +175 -0
- package/src/run-event-stream.ts +309 -0
- package/src/run-event.test.ts +277 -0
- package/src/run-event.ts +471 -0
- package/src/wave-loop-golden.test.ts +9 -0
- package/src/workspace/__fixtures__/flag-workspace.ts +132 -0
- package/src/workspace/__fixtures__/older-records/change-set-984534ea9.json +100 -0
- package/src/workspace/__fixtures__/older-records/older-records.json +326 -0
- package/src/workspace/__fixtures__/run-event-check.ts +58 -0
- package/src/workspace/ancestry-index.test.ts +93 -0
- package/src/workspace/change-set-show.schema.json +102 -0
- package/src/workspace/change-set-show.ts +72 -0
- package/src/workspace/change-set.schema.json +32 -1
- package/src/workspace/changes-cli.ts +10 -1
- package/src/workspace/changes.schema.json +135 -0
- package/src/workspace/changes.test.ts +1 -1
- package/src/workspace/changes.ts +84 -2
- package/src/workspace/check.schema.json +4 -2
- package/src/workspace/checks/records.ts +35 -1
- package/src/workspace/checks.ts +2 -1
- package/src/workspace/ci-green-cli.ts +75 -13
- package/src/workspace/ci-green-forge.ts +24 -4
- package/src/workspace/ci-green-runs.test.ts +242 -0
- package/src/workspace/ci-green-signed.test.ts +302 -0
- package/src/workspace/ci-green-workflow.test.ts +16 -0
- package/src/workspace/ci-green-workflow.ts +12 -0
- package/src/workspace/ci-green.test.ts +131 -2
- package/src/workspace/ci-green.ts +635 -42
- package/src/workspace/ci-last-green.schema.json +32 -2
- package/src/workspace/ci-list.schema.json +525 -0
- package/src/workspace/commit-links.test.ts +279 -0
- package/src/workspace/commit-links.ts +183 -0
- package/src/workspace/declaration.schema.json +76 -0
- package/src/workspace/declaration.test.ts +28 -0
- package/src/workspace/declaration.ts +60 -2
- package/src/workspace/declared-kinds.ts +40 -1
- package/src/workspace/delivery-metrics.schema.json +519 -0
- package/src/workspace/delivery-metrics.test.ts +236 -0
- package/src/workspace/delivery-metrics.ts +286 -0
- package/src/workspace/flags-read.ts +121 -0
- package/src/workspace/flags.test.ts +141 -0
- package/src/workspace/flags.ts +157 -0
- package/src/workspace/graph-cli.ts +1 -1
- package/src/workspace/identity-gate-rule.ts +91 -7
- package/src/workspace/identity.ts +14 -1
- package/src/workspace/intent-cli.ts +46 -5
- package/src/workspace/intent-trace.test.ts +173 -0
- package/src/workspace/intent-trace.ts +484 -0
- package/src/workspace/intent.schema.json +702 -6
- package/src/workspace/intent.ts +196 -26
- package/src/workspace/ls.schema.json +3 -1
- package/src/workspace/ls.ts +6 -0
- package/src/workspace/member-pipeline.test.ts +17 -0
- package/src/workspace/member-pipeline.ts +9 -0
- package/src/workspace/older-records.test.ts +412 -0
- package/src/workspace/overlap.test.ts +165 -0
- package/src/workspace/overlap.ts +340 -0
- package/src/workspace/promotion-order.ts +97 -0
- package/src/workspace/read-contract.e2e.test.ts +5 -1
- package/src/workspace/reason-codes.test.ts +7 -1
- package/src/workspace/reason-codes.ts +7 -1
- package/src/workspace/record-assets.test.ts +2 -1
- package/src/workspace/records-contract.e2e.test.ts +2 -1
- package/src/workspace/records.schema.json +21 -2
- package/src/workspace/records.ts +36 -2
- package/src/workspace/reference-kinds/flag/flag.kind.mjs +32 -0
- package/src/workspace/reference-kinds/flag/flag.schema.json +53 -0
- package/src/workspace/releases.schema.json +513 -0
- package/src/workspace/releases.test.ts +108 -0
- package/src/workspace/releases.ts +133 -0
- package/src/workspace/run-event.schema.json +295 -0
- package/src/workspace/status-contract.test.ts +81 -1
- package/src/workspace/status-gates.ts +64 -1
- package/src/workspace/status-mixed.test.ts +152 -0
- package/src/workspace/status-revoked.test.ts +153 -0
- package/src/workspace/status-stewards.ts +6 -0
- package/src/workspace/status.schema.json +268 -2
- package/src/workspace/status.ts +334 -4
- package/src/workspace/trust/ci-tag-statement.ts +151 -0
- package/src/workspace/trust/op-run-statement.ts +148 -0
- package/src/workspace/trust/rotation.ts +61 -14
- package/src/workspace/trust/seal.ts +10 -0
- package/src/workspace/trust/ssh-commit.ts +10 -9
- package/src/workspace/wip.ts +11 -2
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/astro.config.mjs +0 -14
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/package.json +0 -16
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/src/content/docs/index.mdx +0 -8
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/src/content.config.ts +0 -15
- package/src/cli/commands/__fixtures__/init-lexicon-output/docs/tsconfig.json +0 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAkD,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAU1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/handlers/run.ts"],"names":[],"mappings":"AAMA,OAAO,EAAmB,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,EAAkD,KAAK,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAU1G,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAWlD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAErE,OAAO,EAAgB,KAAK,aAAa,EAAE,KAAK,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAIlG;;;;;GAKG;AACH,eAAO,MAAM,eAAe,IAAI,CAAC;AA+BjC;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,GAAG,OAAO,CAMjF;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAChC,eAAe,EAAE,OAAO,GAAG,SAAS,EACpC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,SAAS,GACzC,MAAM,CAQR;AAuLD,wBAAsB,SAAS,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAGpE;AAuED,wBAAsB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAetE;AA8BD,wBAAsB,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAenE;AA2CD,0FAA0F;AAC1F,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,GAAG,MAAM,CAWrD;AAOD;;;;;;;;;;;GAWG;AACH,wBAAsB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA+CtE;AAOD;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA6CvE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAQvE;AAID,iGAAiG;AACjG,wBAAsB,WAAW,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBtE;AAsMD,wBAAsB,KAAK,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CA4BhE;AAID;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,CAEvF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,qBAAqB,EAAE,EAChC,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,OAAO,EACjB,SAAS,GAAE,SAA8B,EACzC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,aAAa,EAAE,CAAC,CA+C1B;AAID;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAEpE;AAuCD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;;;;GAe5E;AA8MD;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAEnE;AAyPD,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAMjE"}
|
package/dist/cli/handlers/run.js
CHANGED
|
@@ -13,7 +13,7 @@ import { pointAnswerCommand, renderHuman, renderJson } from "../../op/local-outp
|
|
|
13
13
|
import { loadPlugins } from "../plugins.js";
|
|
14
14
|
import { recordGateApproval } from "./operator.js";
|
|
15
15
|
import { formatError, formatWarning, formatSuccess, formatBold, formatInfo } from "../format.js";
|
|
16
|
-
import {
|
|
16
|
+
import { parseParamFlags } from "../build-params-cli.js";
|
|
17
17
|
import { stewardBesideFor, stewardFormFor, stewardTurnLeaseName, DEFAULT_STEWARD_ENV } from "../../op/steward.js";
|
|
18
18
|
import { holdBesideLease } from "../../op/steward-beside.js";
|
|
19
19
|
import { acquireStewardTurn, STEWARD_TURN_WAIT_MS } from "../../op/operator.js";
|
|
@@ -23,9 +23,13 @@ import { LIFECYCLE_LOCAL_NOTE, isLifecycleLocalNote } from "../../lifecycle/loca
|
|
|
23
23
|
import { ledgerRecordingOff, noRecordEndNote, noRecordStartNote, resetNoRecordLedger, NO_RECORD_ENV } from "../../lifecycle/no-record.js";
|
|
24
24
|
import { renderDriverHuman, renderDriverJson } from "../../components/driver-output.js";
|
|
25
25
|
import { ndjsonProgressSink } from "../../components/run-progress.js";
|
|
26
|
+
import { findStoredRun, readRunEvents } from "../../run-event-store.js";
|
|
27
|
+
import { openCliRunEvents, refusesBothStreams, stdoutLine } from "../run-events.js";
|
|
26
28
|
import { maybeRecordAutoRelease } from "../../components/auto-release.js";
|
|
27
29
|
import { maybePersistBuildManifest } from "../../components/manifest-persistence.js";
|
|
28
30
|
import { isComponentList } from "../../components/cli-support.js";
|
|
31
|
+
import { resolveCiRun } from "../../lifecycle/release-ledger.js";
|
|
32
|
+
import { gateAdmission, gateApprover } from "../../components/promote.js";
|
|
29
33
|
import { runOpGenerate } from "./run-generate.js";
|
|
30
34
|
/**
|
|
31
35
|
* The exit code a run that stopped at an unapproved gate uses (#2119).
|
|
@@ -396,6 +400,84 @@ async function runOpLogOnRuntime(ctx, name) {
|
|
|
396
400
|
}
|
|
397
401
|
return 0;
|
|
398
402
|
}
|
|
403
|
+
// ── chant run events <run> ───────────────────────────────────────────────────
|
|
404
|
+
/** One event as a line for a person: its time, its type, where it is and how it ended. */
|
|
405
|
+
export function humanRunEventLine(e) {
|
|
406
|
+
const x = e;
|
|
407
|
+
const where = [x.component, x.phase, x.step].filter((v) => typeof v === "string").join("/");
|
|
408
|
+
const detail = [
|
|
409
|
+
where,
|
|
410
|
+
typeof x.status === "string" ? x.status : "",
|
|
411
|
+
// A blocked component (#4007) names what held it back.
|
|
412
|
+
typeof x.blockedBy === "string" ? `by ${x.blockedBy}` : "",
|
|
413
|
+
typeof x.error === "string" ? x.error : "",
|
|
414
|
+
].filter(Boolean).join(" ");
|
|
415
|
+
return `${String(x.at ?? "")} ${String(x.type).padEnd(16)}${detail}`.trimEnd();
|
|
416
|
+
}
|
|
417
|
+
/** The exit code a run's verdict maps to: `chant run`'s own (0 ok, 1 failed, 3 waiting on a person). */
|
|
418
|
+
function exitOfSettle(status) {
|
|
419
|
+
return status === "ok" ? 0 : status === "gated" || status === "waiting" ? 3 : 1;
|
|
420
|
+
}
|
|
421
|
+
/**
|
|
422
|
+
* `chant run events <run> [--json] [--follow]` (#4042): the events a run on
|
|
423
|
+
* this host kept, replayed. `<run>` is a run id, or the name of an Op or a
|
|
424
|
+
* component selection, for which the newest stored run stands. A settled run
|
|
425
|
+
* and a run in progress both replay what is in the file; `--follow` goes on
|
|
426
|
+
* from there until the run settles. `--json` prints the stored lines as they
|
|
427
|
+
* were written; without it each event is one line for a person.
|
|
428
|
+
*
|
|
429
|
+
* The exit code is the replayed run's verdict (0, 1, or 3 for a run waiting
|
|
430
|
+
* on a person). A replay of a run still going, and a follow cut short by
|
|
431
|
+
* Ctrl-C, exit 0.
|
|
432
|
+
*/
|
|
433
|
+
export async function runOpEvents(ctx) {
|
|
434
|
+
const ref = ctx.args.extraPositional;
|
|
435
|
+
if (!ref) {
|
|
436
|
+
console.error(formatError({ message: "A run id or an Op name is required: chant run events <run>" }));
|
|
437
|
+
return 1;
|
|
438
|
+
}
|
|
439
|
+
if (ctx.args.on !== undefined && ctx.args.on !== "local") {
|
|
440
|
+
console.error(formatError({
|
|
441
|
+
message: `run events reads the events kept on this host, so --on ${ctx.args.on} has none to read`,
|
|
442
|
+
hint: "A run hosted off this host is read once its in-flight state is off-host (#3990).",
|
|
443
|
+
}));
|
|
444
|
+
return 1;
|
|
445
|
+
}
|
|
446
|
+
const cwd = resolve(".");
|
|
447
|
+
let stored = await findStoredRun(cwd, ref);
|
|
448
|
+
if (!stored && ctx.args.follow) {
|
|
449
|
+
// The run may be starting: give it a moment to open its file.
|
|
450
|
+
const deadline = Date.now() + RUN_EVENTS_WAIT_MS;
|
|
451
|
+
while (!stored && Date.now() < deadline) {
|
|
452
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
453
|
+
stored = await findStoredRun(cwd, ref);
|
|
454
|
+
}
|
|
455
|
+
}
|
|
456
|
+
if (!stored) {
|
|
457
|
+
console.error(formatError({
|
|
458
|
+
message: `No events are kept for "${ref}" on this host`,
|
|
459
|
+
hint: "A run keeps its events when it records to the ledger (not under --no-record), and a command other than `chant run <op>` keeps them under --events-json. Chant 0.124.28 and newer write them.",
|
|
460
|
+
}));
|
|
461
|
+
return 1;
|
|
462
|
+
}
|
|
463
|
+
const controller = new AbortController();
|
|
464
|
+
const onSigint = () => controller.abort();
|
|
465
|
+
process.on("SIGINT", onSigint);
|
|
466
|
+
try {
|
|
467
|
+
const settle = await readRunEvents(stored.file, (event, line) => {
|
|
468
|
+
if (ctx.args.json)
|
|
469
|
+
process.stdout.write(line);
|
|
470
|
+
else
|
|
471
|
+
console.log(humanRunEventLine(event));
|
|
472
|
+
}, { follow: ctx.args.follow === true, signal: controller.signal });
|
|
473
|
+
return settle ? exitOfSettle(settle.status) : 0;
|
|
474
|
+
}
|
|
475
|
+
finally {
|
|
476
|
+
process.removeListener("SIGINT", onSigint);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
/** How long `--follow` waits for a run's file to appear. */
|
|
480
|
+
const RUN_EVENTS_WAIT_MS = 5000;
|
|
399
481
|
// ── chant run approve <op> <gate> ────────────────────────────────────────────
|
|
400
482
|
/**
|
|
401
483
|
* `chant run approve <op> <gate> [--approver] [--url] [--note]` (#2121) — the
|
|
@@ -688,6 +770,8 @@ export async function runOp(ctx) {
|
|
|
688
770
|
}));
|
|
689
771
|
return 1;
|
|
690
772
|
}
|
|
773
|
+
if (refusesBothStreams(ctx.args))
|
|
774
|
+
return 1;
|
|
691
775
|
if (ctx.args.components)
|
|
692
776
|
return runOpComponents(ctx);
|
|
693
777
|
if (ctx.args.report) {
|
|
@@ -700,6 +784,15 @@ export async function runOp(ctx) {
|
|
|
700
784
|
return runOpOnRuntime(ctx);
|
|
701
785
|
}
|
|
702
786
|
// ── Auto-release recording post-run (#597) ──────────────────────────────────
|
|
787
|
+
/**
|
|
788
|
+
* The run id and origin an auto-recorded release names (#4020): the CI run
|
|
789
|
+
* when the process is in CI, so the release and the gate it passed (which
|
|
790
|
+
* records the CI run id) name the same run, else `localId` with the `local`
|
|
791
|
+
* origin.
|
|
792
|
+
*/
|
|
793
|
+
export function autoReleaseRun(localId) {
|
|
794
|
+
return resolveCiRun() ?? { runId: localId, runOrigin: { forge: "local" } };
|
|
795
|
+
}
|
|
703
796
|
/**
|
|
704
797
|
* After a successful `chant run --components` (local executor), auto-emit
|
|
705
798
|
* one release record per successfully deployed component that published a
|
|
@@ -735,7 +828,7 @@ export async function runOp(ctx) {
|
|
|
735
828
|
*
|
|
736
829
|
* Returns the records it wrote, for `--digest-file` (#2602).
|
|
737
830
|
*/
|
|
738
|
-
export async function recordAutoReleasesForRun(results, env, runId, disabled) {
|
|
831
|
+
export async function recordAutoReleasesForRun(results, env, runId, disabled, runOrigin = { forge: "local" }, releaseDigest) {
|
|
739
832
|
const recorded = [];
|
|
740
833
|
for (const componentResult of results) {
|
|
741
834
|
if (!componentResult.ok)
|
|
@@ -746,8 +839,13 @@ export async function recordAutoReleasesForRun(results, env, runId, disabled) {
|
|
|
746
839
|
success: true,
|
|
747
840
|
records: componentResult.records,
|
|
748
841
|
runId,
|
|
749
|
-
// A local-executor id resolves nowhere
|
|
750
|
-
runOrigin
|
|
842
|
+
// A local-executor id resolves nowhere, and says so in a field (#2045). A run in CI names the CI run.
|
|
843
|
+
runOrigin,
|
|
844
|
+
// #1035, #4020: who approved at the gate and which resolution admitted the deploy.
|
|
845
|
+
...(gateApprover(componentResult) ? { approver: gateApprover(componentResult) } : {}),
|
|
846
|
+
...(gateAdmission(componentResult) ? { admission: gateAdmission(componentResult) } : {}),
|
|
847
|
+
// #4043: the release the deploy was made under, when `--release` named one.
|
|
848
|
+
...(releaseDigest !== undefined ? { releaseDigest } : {}),
|
|
751
849
|
}, { disabled });
|
|
752
850
|
if (!outcome.recorded && outcome.reason === "error") {
|
|
753
851
|
console.error(formatWarning({
|
|
@@ -850,6 +948,42 @@ function refusesNoRecordOn(runtime) {
|
|
|
850
948
|
}));
|
|
851
949
|
return true;
|
|
852
950
|
}
|
|
951
|
+
/**
|
|
952
|
+
* Resolve the release `chant run --components --release` names (#4043), or the
|
|
953
|
+
* reason it can't be used. The run builds from the checked-out commit, so the
|
|
954
|
+
* release's commit must be HEAD, and the release needs a target for `env`.
|
|
955
|
+
*/
|
|
956
|
+
export async function resolveRunRelease(ref, env, cwd) {
|
|
957
|
+
const { fetchLifecycle, getHeadCommit } = await import("../../lifecycle/git.js");
|
|
958
|
+
const { resolveRelease } = await import("../../lifecycle/release-store.js");
|
|
959
|
+
const { targetFor } = await import("../../components/release-promote.js");
|
|
960
|
+
await fetchLifecycle({ cwd }).catch(() => false);
|
|
961
|
+
const found = await resolveRelease(ref, { cwd });
|
|
962
|
+
if (!found)
|
|
963
|
+
return `no release is labelled or digested "${ref}" in this member`;
|
|
964
|
+
const name = found.label ?? found.release.releaseDigest;
|
|
965
|
+
const head = await getHeadCommit({ cwd });
|
|
966
|
+
if (found.release.commit !== head) {
|
|
967
|
+
return `release ${name} was cut from ${found.release.commit.slice(0, 12)} and this checkout is at ${head.slice(0, 12)}; run builds from the checkout, so check out the release's commit, or deploy it with \`chant components promote --release\``;
|
|
968
|
+
}
|
|
969
|
+
const target = targetFor(found.release, env);
|
|
970
|
+
if ("error" in target)
|
|
971
|
+
return target.error;
|
|
972
|
+
return { releaseDigest: found.release.releaseDigest, label: found.label, release: found.release };
|
|
973
|
+
}
|
|
974
|
+
/** A rebuilt image need not digest as the release's own did; say so, as promote does. Never fails the run. */
|
|
975
|
+
async function warnOnArtifactMismatch(release, recorded) {
|
|
976
|
+
try {
|
|
977
|
+
const { releaseArtifactMismatches } = await import("../../components/release-promote.js");
|
|
978
|
+
const { readBuildManifest } = await import("../../lifecycle/build-ledger-store.js");
|
|
979
|
+
const mismatches = await releaseArtifactMismatches(release, recorded.map((r) => ({ component: r.component, source: r })), (digest) => readBuildManifest(digest).catch(() => null));
|
|
980
|
+
for (const message of mismatches)
|
|
981
|
+
console.error(formatWarning({ message }));
|
|
982
|
+
}
|
|
983
|
+
catch {
|
|
984
|
+
// The record is written; a manifest that can't be read is not worth failing the run for.
|
|
985
|
+
}
|
|
986
|
+
}
|
|
853
987
|
async function runComponentSelection(ctx) {
|
|
854
988
|
const selector = ctx.args.path;
|
|
855
989
|
if (!selector || selector === ".") {
|
|
@@ -864,11 +998,13 @@ async function runComponentSelection(ctx) {
|
|
|
864
998
|
return 1;
|
|
865
999
|
const projectPath = resolve(".");
|
|
866
1000
|
const { config } = await loadChantConfig(projectPath).catch(() => ({ config: {} }));
|
|
867
|
-
|
|
1001
|
+
// #4024: with --env, a workspace member's flag records back their parameters.
|
|
1002
|
+
const { resolveFlaggedBuildParams } = await import("../../flag-params.js");
|
|
1003
|
+
const paramsResolution = await resolveFlaggedBuildParams(projectPath, config.buildParams, {
|
|
868
1004
|
cli: parseParamFlags(ctx.args.param),
|
|
869
1005
|
paramsFile: ctx.args.paramsFile,
|
|
870
1006
|
verbose: ctx.args.verbose,
|
|
871
|
-
});
|
|
1007
|
+
}, ctx.args.env);
|
|
872
1008
|
if (!paramsResolution.success) {
|
|
873
1009
|
for (const message of paramsResolution.errors)
|
|
874
1010
|
console.error(message);
|
|
@@ -887,6 +1023,19 @@ async function runComponentSelection(ctx) {
|
|
|
887
1023
|
return 1;
|
|
888
1024
|
}
|
|
889
1025
|
const env = ctx.args.env ?? "local";
|
|
1026
|
+
// #4043: `--release <label|digest>` says this run deploys that release. The
|
|
1027
|
+
// run builds from the checked-out commit, so the release must have been cut
|
|
1028
|
+
// from it, and must have a target for the environment. Both are checked
|
|
1029
|
+
// before anything deploys; nothing is inferred when the flag is absent.
|
|
1030
|
+
let underRelease;
|
|
1031
|
+
if (ctx.args.release) {
|
|
1032
|
+
const refused = await resolveRunRelease(ctx.args.release, env, projectPath);
|
|
1033
|
+
if (typeof refused === "string") {
|
|
1034
|
+
console.error(formatError({ message: refused, hint: "List the releases with: chant release list" }));
|
|
1035
|
+
return 1;
|
|
1036
|
+
}
|
|
1037
|
+
underRelease = refused;
|
|
1038
|
+
}
|
|
890
1039
|
// Seed cross-component/cross-stack outputs from upstream jobs' dumped files
|
|
891
1040
|
// (`--seed-outputs`), so a single-component run resolves references to a
|
|
892
1041
|
// component that ran in an earlier CI job.
|
|
@@ -909,6 +1058,10 @@ async function runComponentSelection(ctx) {
|
|
|
909
1058
|
// `undefined` and every `onProgress?.(...)` call in the driver is a no-op —
|
|
910
1059
|
// behavior is byte-for-byte unchanged from before this flag existed.
|
|
911
1060
|
const onProgress = ctx.args.progressJson ? ndjsonProgressSink() : undefined;
|
|
1061
|
+
// `--events-json` (#4041): the run-event stream instead. The run is named by
|
|
1062
|
+
// the id its release records carry, so the two join.
|
|
1063
|
+
const release = autoReleaseRun(`local-${Date.now()}`);
|
|
1064
|
+
const events = await openCliRunEvents(ctx.args, { kind: "component", name: selector, runId: release.runId, cwd: projectPath });
|
|
912
1065
|
// A list (#3950) pulls in what its components depend on; say which ones and
|
|
913
1066
|
// in what order before the first one runs. stderr, so --json and
|
|
914
1067
|
// --progress-json keep stdout to themselves.
|
|
@@ -919,14 +1072,29 @@ async function runComponentSelection(ctx) {
|
|
|
919
1072
|
console.error(formatInfo(`added as dependencies: ${plan.added.join(", ")}`));
|
|
920
1073
|
}
|
|
921
1074
|
: undefined;
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
1075
|
+
let result;
|
|
1076
|
+
try {
|
|
1077
|
+
result = await runtime.runComponents(projectPath, selector, {
|
|
1078
|
+
env: ctx.args.env,
|
|
1079
|
+
componentOutputs: seededOutputs,
|
|
1080
|
+
onProgress,
|
|
1081
|
+
...(events ? { onRunEvent: events.emit } : {}),
|
|
1082
|
+
sandbox: ctx.args.sandbox,
|
|
1083
|
+
buildParams: paramsResolution.provenance,
|
|
1084
|
+
...(onPlan ? { onPlan } : {}),
|
|
1085
|
+
});
|
|
1086
|
+
}
|
|
1087
|
+
catch (err) {
|
|
1088
|
+
events?.settle("failed", err instanceof Error ? err.message : String(err));
|
|
1089
|
+
throw err;
|
|
1090
|
+
}
|
|
1091
|
+
// A run that never reached its components (a bad selector, a cycle) still ends its stream.
|
|
1092
|
+
if (result.success)
|
|
1093
|
+
events?.settle("ok");
|
|
1094
|
+
else if (result.gated)
|
|
1095
|
+
events?.settle("gated");
|
|
1096
|
+
else
|
|
1097
|
+
events?.settle("failed", result.error);
|
|
930
1098
|
// Dump the accumulated outputs for a downstream job to seed from. Written
|
|
931
1099
|
// even on failure (partial outputs) so a resumed run still has what completed.
|
|
932
1100
|
if (ctx.args.dumpOutputs && result.run) {
|
|
@@ -990,7 +1158,9 @@ async function runComponentSelection(ctx) {
|
|
|
990
1158
|
if (result.success && result.run) {
|
|
991
1159
|
// #3955: a run that records nothing has no release to report either.
|
|
992
1160
|
const disabled = resolveAutoReleaseDisabled(config, ctx.args.noReleaseRecord) || ledgerRecordingOff();
|
|
993
|
-
const recorded = await recordAutoReleasesForRun(result.run.results, env,
|
|
1161
|
+
const recorded = await recordAutoReleasesForRun(result.run.results, env, release.runId, disabled, release.runOrigin, underRelease?.releaseDigest);
|
|
1162
|
+
if (underRelease)
|
|
1163
|
+
await warnOnArtifactMismatch(underRelease.release, recorded);
|
|
994
1164
|
// `--digest-file` (#2602): the releases this run recorded, one
|
|
995
1165
|
// `<component>=<digest>` line each, the form `chant components promote
|
|
996
1166
|
// --digest` takes. A generated promote job reads it to promote exactly
|
|
@@ -1069,6 +1239,14 @@ async function runOpOnResolvedRuntime(ctx) {
|
|
|
1069
1239
|
await stewardGate?.release?.();
|
|
1070
1240
|
return 1;
|
|
1071
1241
|
}
|
|
1242
|
+
// #4044: a runner key signs the run's record as it settles, so `ci tick`
|
|
1243
|
+
// can count the run. `--key` must be a runner key; the PEM in
|
|
1244
|
+
// CHANT_RUNNER_KEY that is not one leaves the run unsigned, with a warning.
|
|
1245
|
+
const signRecord = await runSignerFor(ctx);
|
|
1246
|
+
if (signRecord === null) {
|
|
1247
|
+
await stewardGate?.release?.();
|
|
1248
|
+
return 1;
|
|
1249
|
+
}
|
|
1072
1250
|
// `--progress-json` streams one NDJSON StepRecord per settled step, fed by
|
|
1073
1251
|
// whatever the runtime reports through `progress`.
|
|
1074
1252
|
const progress = ctx.args.progressJson ? ndjsonProgressSink() : undefined;
|
|
@@ -1103,6 +1281,10 @@ async function runOpOnResolvedRuntime(ctx) {
|
|
|
1103
1281
|
...(params ? { params } : {}),
|
|
1104
1282
|
...(ctx.args.profile !== undefined ? { profile: ctx.args.profile } : {}),
|
|
1105
1283
|
progress,
|
|
1284
|
+
// `--events-json` (#4041): the runtime writes the run's events itself,
|
|
1285
|
+
// since it is the one that knows the run's id and where it ran.
|
|
1286
|
+
...(ctx.args.eventsJson ? { runEvents: stdoutLine } : {}),
|
|
1287
|
+
...(signRecord ? { signRecord } : {}),
|
|
1106
1288
|
signal: controller.signal,
|
|
1107
1289
|
...(work ? { work } : {}),
|
|
1108
1290
|
});
|
|
@@ -1249,7 +1431,43 @@ async function resolveRunWork(ctx, config, provider) {
|
|
|
1249
1431
|
export function runOpUnknown(ctx) {
|
|
1250
1432
|
console.error(formatError({
|
|
1251
1433
|
message: `Unknown run subcommand: ${ctx.args.extraPositional ?? ctx.args.path}`,
|
|
1252
|
-
hint: "Available: chant run <name>, run list, run status, run approve, run cancel, run log",
|
|
1434
|
+
hint: "Available: chant run <name>, run list, run status, run approve, run cancel, run log, run events",
|
|
1253
1435
|
}));
|
|
1254
1436
|
return Promise.resolve(1);
|
|
1255
1437
|
}
|
|
1438
|
+
/** The variable a runner key is read from, as PEM, as `chant ci tick` reads it (`RUNNER_KEY_ENV` in ../../workspace/ci-green.ts). */
|
|
1439
|
+
const RUNNER_KEY_ENV = "CHANT_RUNNER_KEY";
|
|
1440
|
+
/**
|
|
1441
|
+
* What signs the run's record (#4044): the runner key `--key` names, or the
|
|
1442
|
+
* PEM in `CHANT_RUNNER_KEY`, checked against `.chant/trust.json` at `HEAD`.
|
|
1443
|
+
* Undefined when neither is given. Null, after printing why, when `--key`
|
|
1444
|
+
* is not a runner key; an unusable `CHANT_RUNNER_KEY` only warns, since the
|
|
1445
|
+
* variable may be set for `ci tick` in a job that also runs Ops.
|
|
1446
|
+
*/
|
|
1447
|
+
async function runSignerFor(ctx) {
|
|
1448
|
+
const fromFlag = ctx.args.key !== undefined;
|
|
1449
|
+
let pem;
|
|
1450
|
+
try {
|
|
1451
|
+
pem = fromFlag ? readFileSync(resolve(ctx.args.key), "utf-8") : process.env[RUNNER_KEY_ENV] || undefined;
|
|
1452
|
+
}
|
|
1453
|
+
catch (err) {
|
|
1454
|
+
console.error(formatError({ message: `--key ${ctx.args.key}: ${err instanceof Error ? err.message : String(err)}` }));
|
|
1455
|
+
return null;
|
|
1456
|
+
}
|
|
1457
|
+
if (pem === undefined)
|
|
1458
|
+
return undefined;
|
|
1459
|
+
try {
|
|
1460
|
+
// Loaded only when a key is given, so a run without one loads no workspace code (level 0, #2525).
|
|
1461
|
+
const { opRunSigner } = await import("../../workspace/ci-green.js");
|
|
1462
|
+
return opRunSigner(process.cwd(), pem);
|
|
1463
|
+
}
|
|
1464
|
+
catch (err) {
|
|
1465
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
1466
|
+
if (fromFlag) {
|
|
1467
|
+
console.error(formatError({ message: `the run would not be signed: ${message}` }));
|
|
1468
|
+
return null;
|
|
1469
|
+
}
|
|
1470
|
+
console.error(formatWarning({ message: `${RUNNER_KEY_ENV} is set, and the run will not be signed: ${message}` }));
|
|
1471
|
+
return undefined;
|
|
1472
|
+
}
|
|
1473
|
+
}
|
package/dist/cli/main.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAKA,OAAO,EAAkB,KAAK,UAAU,EAAmB,MAAM,YAAY,CAAC;AAa9E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAgB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAKA,OAAO,EAAkB,KAAK,UAAU,EAAmB,MAAM,YAAY,CAAC;AAa9E,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAgB,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAE3D,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC;AAorCzC;;;;;;;;;;GAUG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAuBzE;AAID;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,EAAE,UAAU,EA+LvC,CAAC"}
|