@intentius/chant 0.124.26 → 0.124.28
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/change-set-graph.d.ts +56 -0
- package/dist/change-set-graph.d.ts.map +1 -0
- package/dist/change-set-graph.js +128 -0
- package/dist/change-set.d.ts +52 -3
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +35 -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/commands/build.d.ts +8 -0
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +9 -8
- 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 +19 -4
- package/dist/cli/handlers/build.d.ts.map +1 -1
- package/dist/cli/handlers/build.js +28 -0
- 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 +1 -1
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +14 -3
- package/dist/cli/handlers/pr.d.ts +8 -2
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +148 -24
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +256 -21
- package/dist/cli/handlers/release.d.ts +34 -0
- package/dist/cli/handlers/release.d.ts.map +1 -0
- package/dist/cli/handlers/release.js +203 -0
- package/dist/cli/handlers/run.d.ts +28 -2
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/handlers/run.js +170 -13
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +88 -13
- 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 +49 -3
- package/dist/cli/registry.d.ts +29 -3
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/run-events.d.ts +29 -0
- package/dist/cli/run-events.d.ts.map +1 -0
- package/dist/cli/run-events.js +47 -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 +4 -1
- package/dist/components/auto-release.d.ts.map +1 -1
- package/dist/components/auto-release.js +2 -0
- 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 +42 -9
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +81 -54
- 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 +35 -26
- 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 +15 -2
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +17 -0
- package/dist/components/release-compile.d.ts +133 -0
- package/dist/components/release-compile.d.ts.map +1 -0
- package/dist/components/release-compile.js +376 -0
- package/dist/components/release-gate.d.ts +125 -0
- package/dist/components/release-gate.d.ts.map +1 -0
- package/dist/components/release-gate.js +282 -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 +3 -1
- package/dist/components/wave-plan.d.ts.map +1 -1
- package/dist/components/wave-plan.js +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -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/change-set-store.d.ts +67 -0
- package/dist/lifecycle/change-set-store.d.ts.map +1 -0
- package/dist/lifecycle/change-set-store.js +96 -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/gate-change-set.d.ts +69 -0
- package/dist/lifecycle/gate-change-set.d.ts.map +1 -0
- package/dist/lifecycle/gate-change-set.js +106 -0
- package/dist/lifecycle/gate-ledger.d.ts +49 -1
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +18 -0
- package/dist/lifecycle/release-cut.d.ts +107 -0
- package/dist/lifecycle/release-cut.d.ts.map +1 -0
- package/dist/lifecycle/release-cut.js +273 -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-store.d.ts +190 -0
- package/dist/lifecycle/release-store.d.ts.map +1 -0
- package/dist/lifecycle/release-store.js +318 -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/activity-registry.d.ts +6 -3
- package/dist/op/activity-registry.d.ts.map +1 -1
- package/dist/op/activity-registry.js +7 -5
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +14 -7
- 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 +12 -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/run-event-store.d.ts +77 -0
- package/dist/run-event-store.d.ts.map +1 -0
- package/dist/run-event-store.js +204 -0
- package/dist/run-event-stream.d.ts +132 -0
- package/dist/run-event-stream.d.ts.map +1 -0
- package/dist/run-event-stream.js +238 -0
- package/dist/run-event.d.ts +267 -0
- package/dist/run-event.d.ts.map +1 -0
- package/dist/run-event.js +207 -0
- package/dist/wave-runtime.mjs +225 -242
- 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 +28 -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/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 +273 -13
- package/dist/workspace/ci-green.d.ts.map +1 -1
- package/dist/workspace/ci-green.js +449 -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 +19 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.js +1 -1
- package/dist/workspace/declaration.schema.json +12 -0
- 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.d.ts +6 -1
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/intent.js +51 -1
- 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/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 +2 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +4 -1
- package/dist/workspace/releases.d.ts +72 -0
- package/dist/workspace/releases.d.ts.map +1 -0
- package/dist/workspace/releases.js +94 -0
- package/dist/workspace/releases.schema.json +391 -0
- package/dist/workspace/run-event.schema.json +288 -0
- package/dist/workspace/status-gates.d.ts +26 -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 +39 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/status.js +48 -1
- package/dist/workspace/status.schema.json +70 -1
- 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/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/change-set-graph.test.ts +72 -0
- package/src/change-set-graph.ts +133 -0
- package/src/change-set.ts +76 -6
- package/src/chant-version.ts +16 -0
- package/src/cli/commands/build.ts +19 -8
- 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/compiled-cli.e2e.test.ts +31 -6
- package/src/cli/handlers/approve-release.test.ts +80 -0
- package/src/cli/handlers/approve.ts +18 -2
- package/src/cli/handlers/build.test.ts +52 -0
- package/src/cli/handlers/build.ts +29 -0
- package/src/cli/handlers/change-set.ts +49 -1
- package/src/cli/handlers/fan-out.test.ts +48 -0
- package/src/cli/handlers/fan-out.ts +15 -3
- package/src/cli/handlers/operator.test.ts +37 -0
- package/src/cli/handlers/pr.test.ts +194 -0
- package/src/cli/handlers/pr.ts +168 -34
- package/src/cli/handlers/promote.test.ts +389 -5
- package/src/cli/handlers/promote.ts +279 -20
- package/src/cli/handlers/release-implicit.e2e.test.ts +153 -0
- package/src/cli/handlers/release.e2e.test.ts +85 -0
- package/src/cli/handlers/release.ts +206 -0
- package/src/cli/handlers/run-auto-release.test.ts +71 -0
- package/src/cli/handlers/run-events-cmd.test.ts +92 -0
- package/src/cli/handlers/run.test.ts +30 -0
- package/src/cli/handlers/run.ts +176 -15
- package/src/cli/main.test.ts +7 -0
- package/src/cli/main.ts +88 -13
- 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 +37 -3
- package/src/cli/registry.ts +29 -3
- package/src/cli/run-events.ts +54 -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 +21 -0
- package/src/components/auto-release.ts +6 -1
- package/src/components/cli-support.test.ts +82 -0
- package/src/components/cli-support.ts +16 -9
- package/src/components/driver.ts +129 -56
- package/src/components/fan-out-run.ts +56 -35
- 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 +26 -1
- package/src/components/release-compile.test.ts +147 -0
- package/src/components/release-compile.ts +445 -0
- package/src/components/release-gate.test.ts +215 -0
- package/src/components/release-gate.ts +341 -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 +1 -1
- package/src/config.ts +7 -1
- package/src/index.ts +2 -0
- package/src/lifecycle/change-set-store.test.ts +217 -0
- package/src/lifecycle/change-set-store.ts +112 -0
- package/src/lifecycle/commit-sha.ts +23 -0
- package/src/lifecycle/gate-change-set.e2e.test.ts +122 -0
- package/src/lifecycle/gate-change-set.ts +133 -0
- package/src/lifecycle/gate-ledger.test.ts +33 -0
- package/src/lifecycle/gate-ledger.ts +66 -1
- package/src/lifecycle/release-cut-signed.test.ts +180 -0
- package/src/lifecycle/release-cut.test.ts +411 -0
- package/src/lifecycle/release-cut.ts +367 -0
- package/src/lifecycle/release-ledger.test.ts +14 -0
- package/src/lifecycle/release-ledger.ts +85 -17
- package/src/lifecycle/release-store.ts +423 -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/activity-registry.ts +7 -5
- package/src/op/commit-run-gate-deploy-join.test.ts +117 -0
- package/src/op/discover-root.test.ts +39 -0
- package/src/op/discover.ts +15 -8
- 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 +13 -2
- package/src/point-decision.ts +12 -2
- package/src/run-event-store.test.ts +144 -0
- package/src/run-event-store.ts +213 -0
- package/src/run-event-stream.test.ts +175 -0
- package/src/run-event-stream.ts +306 -0
- package/src/run-event.test.ts +277 -0
- package/src/run-event.ts +451 -0
- package/src/wave-loop-golden.test.ts +9 -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 +28 -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/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 +624 -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 +12 -0
- package/src/workspace/declaration.ts +22 -2
- package/src/workspace/identity-gate-rule.ts +91 -7
- package/src/workspace/identity.ts +14 -1
- package/src/workspace/intent.ts +48 -1
- 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/promotion-order.ts +97 -0
- package/src/workspace/read-contract.e2e.test.ts +4 -1
- package/src/workspace/reason-codes.test.ts +2 -1
- package/src/workspace/reason-codes.ts +4 -1
- package/src/workspace/releases.schema.json +391 -0
- package/src/workspace/releases.test.ts +108 -0
- package/src/workspace/releases.ts +122 -0
- package/src/workspace/run-event.schema.json +288 -0
- package/src/workspace/status-contract.test.ts +52 -1
- package/src/workspace/status-gates.ts +56 -1
- package/src/workspace/status-stewards.ts +6 -0
- package/src/workspace/status.schema.json +70 -1
- package/src/workspace/status.ts +80 -1
- 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/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
package/dist/op/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/op/runtime.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../../src/op/runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/op/runtimes/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/op/runtimes/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAYH,OAAO,EAML,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AA0CpB;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,GAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,iBAAiB,CA0K3F"}
|
|
@@ -24,7 +24,6 @@ import { runOpLocally, OpRunFailure } from "../local-executor.js";
|
|
|
24
24
|
import { loadActivityContracts } from "../activity-contract-registry.js";
|
|
25
25
|
import { resumeGatesOf } from "../gate-checkpoint.js";
|
|
26
26
|
import { stepHeartbeatMs } from "../step-console.js";
|
|
27
|
-
import { runComponents } from "../../components/cli-support.js";
|
|
28
27
|
import { discoverOps } from "../discover.js";
|
|
29
28
|
import { readRunLedger, runEnvOf, DEFAULT_RUN_ENV } from "../../lifecycle/run-ledger.js";
|
|
30
29
|
import { runStateOf, } from "../runtime.js";
|
|
@@ -147,6 +146,14 @@ export function createLocalOpRuntime(opts = {}) {
|
|
|
147
146
|
onLedgerError: (err) => process.stderr.write(`warning: run "${runId}" of "${op.name}" finished, but its record could not be ` +
|
|
148
147
|
`appended to the run ledger: ${err instanceof Error ? err.message : String(err)}\n`),
|
|
149
148
|
...(startOpts.progress ? { onRecord: startOpts.progress } : {}),
|
|
149
|
+
...(startOpts.runEvents ? { runEvents: { write: startOpts.runEvents } } : {}),
|
|
150
|
+
// #4044: a runner key signs the record as the run settles.
|
|
151
|
+
...(startOpts.signRecord
|
|
152
|
+
? {
|
|
153
|
+
signRecord: startOpts.signRecord,
|
|
154
|
+
onSignError: (err) => process.stderr.write(`warning: run "${runId}" of "${op.name}" was not signed: ${err instanceof Error ? err.message : String(err)}\n`),
|
|
155
|
+
}
|
|
156
|
+
: {}),
|
|
150
157
|
// #3956: a running step's output, and a still-running line while
|
|
151
158
|
// it is quiet, on stderr as they happen; stdout stays the
|
|
152
159
|
// `--json` record's and `--progress-json`'s.
|
|
@@ -199,7 +206,10 @@ export function createLocalOpRuntime(opts = {}) {
|
|
|
199
206
|
throw new Error(`the local runtime runs "${op}" in the foreground — there is no detached run to cancel. ` +
|
|
200
207
|
`Press Ctrl-C in the terminal running it, or pass --on <lexicon> for a hosted run.`);
|
|
201
208
|
},
|
|
202
|
-
runComponents(path, selector, options) {
|
|
209
|
+
async runComponents(path, selector, options) {
|
|
210
|
+
// Imported here, not at the top: the components driver is most of core's components tree, and this module is
|
|
211
|
+
// re-exported by `@intentius/chant/op`, which every `*.op.ts` imports (#3982).
|
|
212
|
+
const { runComponents } = await import("../../components/cli-support.js");
|
|
203
213
|
return runComponents(path, selector, options);
|
|
204
214
|
},
|
|
205
215
|
};
|
package/dist/point-decision.d.ts
CHANGED
|
@@ -87,6 +87,8 @@ export interface PointGateInput {
|
|
|
87
87
|
description?: string;
|
|
88
88
|
timeout?: string;
|
|
89
89
|
runId?: string;
|
|
90
|
+
/** The commit the run is at (#4020). Default: the commit the CI job started for, when it runs in CI. */
|
|
91
|
+
gitSha?: string;
|
|
90
92
|
planDigest?: string;
|
|
91
93
|
/** The environment the run was started for: the `gate.env` input. Op gate facts on the ledger record none. */
|
|
92
94
|
env?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"point-decision.d.ts","sourceRoot":"","sources":["../src/point-decision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAMH,OAAO,KAAK,EAAE,aAAa,EAAE,oBAAoB,EAAoB,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAExH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAgF,KAAK,SAAS,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACzK,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,
|
|
1
|
+
{"version":3,"file":"point-decision.d.ts","sourceRoot":"","sources":["../src/point-decision.ts"],"names":[],"mappings":"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"}
|
package/dist/point-decision.js
CHANGED
|
@@ -32,10 +32,16 @@ import { DEFAULT_GATE_EXPIRY, resolveApprovalUrl } from "./lifecycle/gate-pendin
|
|
|
32
32
|
import { samePlanDigest } from "./lifecycle/plan-digest.js";
|
|
33
33
|
import { parseDuration } from "./op/duration.js";
|
|
34
34
|
import { DEFAULT_GATE_POINT_PASS, defaultGatePointStore, gatePointInputs, gateSubject } from "./op/gate-point.js";
|
|
35
|
-
import { resolveGateRunLocator } from "./op/gate-run-locator.js";
|
|
35
|
+
import { ciCommitFromEnv, ciRunIdFromEnv, resolveGateRunLocator } from "./op/gate-run-locator.js";
|
|
36
36
|
import { refuseGateWithoutRecording } from "./lifecycle/no-record.js";
|
|
37
37
|
export { DEFAULT_GATE_POINT_PASS, GATE_POINT_INPUTS, defaultGatePointStore, gatePointInputs, gatePointOf, gatePointProblems, gateSubject, parseGateSubject, } from "./op/gate-point.js";
|
|
38
38
|
export { isGateRunLocator, resolveGateRunLocator } from "./op/gate-run-locator.js";
|
|
39
|
+
/** The run and commit a gate record names (#4020): the input's own, else the CI job's. */
|
|
40
|
+
function runStamp(input) {
|
|
41
|
+
const runId = input.runId || ciRunIdFromEnv();
|
|
42
|
+
const gitSha = input.gitSha || ciCommitFromEnv();
|
|
43
|
+
return { ...(runId ? { runId } : {}), ...(gitSha ? { gitSha } : {}) };
|
|
44
|
+
}
|
|
39
45
|
/** Who a resolution written for an answer is by: the people who answered, or the decider that did. */
|
|
40
46
|
function resolvedByOf(q) {
|
|
41
47
|
return q.answeredBy.length > 0 ? q.answeredBy.join(", ") : q.decider;
|
|
@@ -71,6 +77,7 @@ export async function evaluatePointGate(port, asker, input) {
|
|
|
71
77
|
resolvedBy: resolvedByOf(q),
|
|
72
78
|
timestamp: now,
|
|
73
79
|
note: `answered through decision point ${q.point} (${q.id})`,
|
|
80
|
+
...runStamp(input),
|
|
74
81
|
...(input.planDigest !== undefined ? { planDigest: input.planDigest } : {}),
|
|
75
82
|
approver: { kind: q.decider === "quorum" || q.answeredBy.length > 0 ? "human" : "agent" },
|
|
76
83
|
answer,
|
|
@@ -94,7 +101,7 @@ export async function evaluatePointGate(port, asker, input) {
|
|
|
94
101
|
timestamp: now,
|
|
95
102
|
expiresAt: new Date(new Date(now).getTime() + parseDuration(input.timeout ?? DEFAULT_GATE_EXPIRY)).toISOString(),
|
|
96
103
|
...(input.description ? { description: input.description } : {}),
|
|
97
|
-
...(input
|
|
104
|
+
...runStamp(input),
|
|
98
105
|
...(url ? { url } : {}),
|
|
99
106
|
...(input.planDigest !== undefined ? { planDigest: input.planDigest } : {}),
|
|
100
107
|
...(resume ? { resume } : {}),
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a run's events are kept on this host, and how to read them back
|
|
3
|
+
* (#4042). `chant run events <run>` replays a run from here and `--follow`
|
|
4
|
+
* tails it.
|
|
5
|
+
*
|
|
6
|
+
* Each run gets one file, `<git-common-dir>/chant/run-events/<run id>.jsonl`,
|
|
7
|
+
* holding the lines the one writer (`./run-event.ts`) produced, byte for byte
|
|
8
|
+
* as `--events-json` prints them. It sits beside the in-flight records
|
|
9
|
+
* (`./op/run-live.ts`), outside the working tree and off `chant/lifecycle`:
|
|
10
|
+
* the run ledger's growth is #4036's concern and these files add none to it.
|
|
11
|
+
* Unlike the in-flight record they are kept after the run settles. They are
|
|
12
|
+
* never pruned here; retention is #4036's.
|
|
13
|
+
*
|
|
14
|
+
* Every write is best-effort. A run whose events cannot be kept still runs.
|
|
15
|
+
*/
|
|
16
|
+
import type { RunEvent } from "./run-event.js";
|
|
17
|
+
/** The directory name under `<git-common-dir>/chant/` that holds the files. */
|
|
18
|
+
export declare const RUN_EVENTS_DIR = "run-events";
|
|
19
|
+
/** The file name a run id is kept under: anything that is not a plain file-name character becomes `_`. */
|
|
20
|
+
export declare function runEventFileName(runId: string): string;
|
|
21
|
+
/**
|
|
22
|
+
* The environment variable that names the directory run events are kept in,
|
|
23
|
+
* in place of the checkout's. The test suite sets it to a per-run temp
|
|
24
|
+
* directory, so no test writes to the real repository's store (worktrees
|
|
25
|
+
* share one git directory).
|
|
26
|
+
*/
|
|
27
|
+
export declare const RUN_EVENTS_DIR_ENV = "CHANT_RUN_EVENTS_DIR";
|
|
28
|
+
/** The directory the checkout at `cwd` keeps run events in (`CHANT_RUN_EVENTS_DIR` when set), or null outside a checkout. */
|
|
29
|
+
export declare function runEventsDir(cwd: string): Promise<string | null>;
|
|
30
|
+
/** An open file a run's lines are appended to. */
|
|
31
|
+
export interface RunEventStore {
|
|
32
|
+
readonly path: string;
|
|
33
|
+
/** Append one line (it already ends with a newline). Never throws. */
|
|
34
|
+
write(line: string): void;
|
|
35
|
+
}
|
|
36
|
+
/** Open the file for `runId`, or undefined outside a checkout or where it cannot be created. */
|
|
37
|
+
export declare function openRunEventStore(cwd: string, runId: string): Promise<RunEventStore | undefined>;
|
|
38
|
+
/** A write function that hands each line to every function given, or undefined when none is. */
|
|
39
|
+
export declare function teeLines(...writes: Array<((line: string) => void) | undefined>): ((line: string) => void) | undefined;
|
|
40
|
+
/** The events in `text`, one per whole line. Returns what is left of an unfinished last line. */
|
|
41
|
+
export declare function parseRunEventLines(text: string): {
|
|
42
|
+
events: RunEvent[];
|
|
43
|
+
rest: string;
|
|
44
|
+
};
|
|
45
|
+
/** A stored run, as far as its first line says. */
|
|
46
|
+
export interface StoredRun {
|
|
47
|
+
runId: string;
|
|
48
|
+
name: string;
|
|
49
|
+
file: string;
|
|
50
|
+
/** The file's last write, in ms. */
|
|
51
|
+
mtimeMs: number;
|
|
52
|
+
}
|
|
53
|
+
/** The runs stored for the checkout at `cwd`, newest first. */
|
|
54
|
+
export declare function listStoredRuns(cwd: string): Promise<StoredRun[]>;
|
|
55
|
+
/**
|
|
56
|
+
* The file for `ref`: a run id, else the name of an Op or a component
|
|
57
|
+
* selection, for which the newest stored run of that name stands. Null when
|
|
58
|
+
* nothing matches (a run that has not written its first line yet included).
|
|
59
|
+
*/
|
|
60
|
+
export declare function findStoredRun(cwd: string, ref: string): Promise<StoredRun | null>;
|
|
61
|
+
/** Whether `event` ends a stream. */
|
|
62
|
+
export declare const isRunSettle: (event: RunEvent) => boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Read `file` from the start and hand each event to `onEvent` (with its raw
|
|
65
|
+
* line). Without `follow` it stops at the end of the file. With it, it keeps
|
|
66
|
+
* reading what is appended, by polling every `pollMs`, until `run-settle` is
|
|
67
|
+
* read, `signal` aborts, or `idleMs` passes with nothing new (when given).
|
|
68
|
+
* Resolves with the `run-settle` event, or undefined when the stream had
|
|
69
|
+
* none (a replay of a run still going, or a follow that was cut short).
|
|
70
|
+
*/
|
|
71
|
+
export declare function readRunEvents(file: string, onEvent: (event: RunEvent, line: string) => void, opts?: {
|
|
72
|
+
follow?: boolean;
|
|
73
|
+
pollMs?: number;
|
|
74
|
+
idleMs?: number;
|
|
75
|
+
signal?: AbortSignal;
|
|
76
|
+
}): Promise<RunEvent | undefined>;
|
|
77
|
+
//# sourceMappingURL=run-event-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-event-store.d.ts","sourceRoot":"","sources":["../src/run-event-store.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,+EAA+E;AAC/E,eAAO,MAAM,cAAc,eAAe,CAAC;AAE3C,0GAA0G;AAC1G,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,yBAAyB,CAAC;AAEzD,6HAA6H;AAC7H,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAKtE;AAED,kDAAkD;AAClD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,sEAAsE;IACtE,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,gGAAgG;AAChG,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,GAAG,SAAS,CAAC,CA0BtG;AAED,gGAAgG;AAChG,wBAAgB,QAAQ,CAAC,GAAG,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAAG,SAAS,CAOrH;AAED,iGAAiG;AACjG,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAarF;AAED,mDAAmD;AACnD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,+DAA+D;AAC/D,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC,CAkBtE;AAED;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC,CASvF;AAED,qCAAqC;AACrC,eAAO,MAAM,WAAW,UAAW,QAAQ,KAAG,OAAsC,CAAC;AAErF;;;;;;;GAOG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,EAChD,IAAI,GAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACtF,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CA4C/B"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Where a run's events are kept on this host, and how to read them back
|
|
3
|
+
* (#4042). `chant run events <run>` replays a run from here and `--follow`
|
|
4
|
+
* tails it.
|
|
5
|
+
*
|
|
6
|
+
* Each run gets one file, `<git-common-dir>/chant/run-events/<run id>.jsonl`,
|
|
7
|
+
* holding the lines the one writer (`./run-event.ts`) produced, byte for byte
|
|
8
|
+
* as `--events-json` prints them. It sits beside the in-flight records
|
|
9
|
+
* (`./op/run-live.ts`), outside the working tree and off `chant/lifecycle`:
|
|
10
|
+
* the run ledger's growth is #4036's concern and these files add none to it.
|
|
11
|
+
* Unlike the in-flight record they are kept after the run settles. They are
|
|
12
|
+
* never pruned here; retention is #4036's.
|
|
13
|
+
*
|
|
14
|
+
* Every write is best-effort. A run whose events cannot be kept still runs.
|
|
15
|
+
*/
|
|
16
|
+
import { appendFileSync, existsSync, mkdirSync, readFileSync, readdirSync, statSync, writeFileSync } from "node:fs";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { gitCommonDir } from "./op/run-live.js";
|
|
19
|
+
/** The directory name under `<git-common-dir>/chant/` that holds the files. */
|
|
20
|
+
export const RUN_EVENTS_DIR = "run-events";
|
|
21
|
+
/** The file name a run id is kept under: anything that is not a plain file-name character becomes `_`. */
|
|
22
|
+
export function runEventFileName(runId) {
|
|
23
|
+
return `${runId.replace(/[^A-Za-z0-9._@-]/g, "_")}.jsonl`;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* The environment variable that names the directory run events are kept in,
|
|
27
|
+
* in place of the checkout's. The test suite sets it to a per-run temp
|
|
28
|
+
* directory, so no test writes to the real repository's store (worktrees
|
|
29
|
+
* share one git directory).
|
|
30
|
+
*/
|
|
31
|
+
export const RUN_EVENTS_DIR_ENV = "CHANT_RUN_EVENTS_DIR";
|
|
32
|
+
/** The directory the checkout at `cwd` keeps run events in (`CHANT_RUN_EVENTS_DIR` when set), or null outside a checkout. */
|
|
33
|
+
export async function runEventsDir(cwd) {
|
|
34
|
+
const override = process.env[RUN_EVENTS_DIR_ENV];
|
|
35
|
+
if (override)
|
|
36
|
+
return override;
|
|
37
|
+
const common = await gitCommonDir(cwd);
|
|
38
|
+
return common ? join(common, "chant", RUN_EVENTS_DIR) : null;
|
|
39
|
+
}
|
|
40
|
+
/** Open the file for `runId`, or undefined outside a checkout or where it cannot be created. */
|
|
41
|
+
export async function openRunEventStore(cwd, runId) {
|
|
42
|
+
let dir;
|
|
43
|
+
try {
|
|
44
|
+
dir = await runEventsDir(cwd);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
if (!dir)
|
|
50
|
+
return undefined;
|
|
51
|
+
const path = join(dir, runEventFileName(runId));
|
|
52
|
+
try {
|
|
53
|
+
mkdirSync(dir, { recursive: true });
|
|
54
|
+
// A run id used again (a re-run of the same CI run) replaces the earlier stream.
|
|
55
|
+
writeFileSync(path, "");
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return undefined;
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
path,
|
|
62
|
+
write(line) {
|
|
63
|
+
try {
|
|
64
|
+
appendFileSync(path, line);
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
// The directory is gone or unwritable: the line is dropped.
|
|
68
|
+
}
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
/** A write function that hands each line to every function given, or undefined when none is. */
|
|
73
|
+
export function teeLines(...writes) {
|
|
74
|
+
const live = writes.filter((w) => w !== undefined);
|
|
75
|
+
if (live.length === 0)
|
|
76
|
+
return undefined;
|
|
77
|
+
if (live.length === 1)
|
|
78
|
+
return live[0];
|
|
79
|
+
return (line) => {
|
|
80
|
+
for (const w of live)
|
|
81
|
+
w(line);
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
/** The events in `text`, one per whole line. Returns what is left of an unfinished last line. */
|
|
85
|
+
export function parseRunEventLines(text) {
|
|
86
|
+
const events = [];
|
|
87
|
+
const parts = text.split("\n");
|
|
88
|
+
const rest = parts.pop() ?? "";
|
|
89
|
+
for (const part of parts) {
|
|
90
|
+
if (part.trim() === "")
|
|
91
|
+
continue;
|
|
92
|
+
try {
|
|
93
|
+
events.push(JSON.parse(part));
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// A line that is not JSON is not an event: skipped.
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return { events, rest };
|
|
100
|
+
}
|
|
101
|
+
/** The runs stored for the checkout at `cwd`, newest first. */
|
|
102
|
+
export async function listStoredRuns(cwd) {
|
|
103
|
+
const dir = await runEventsDir(cwd);
|
|
104
|
+
if (!dir || !existsSync(dir))
|
|
105
|
+
return [];
|
|
106
|
+
const runs = [];
|
|
107
|
+
for (const entry of readdirSync(dir)) {
|
|
108
|
+
if (!entry.endsWith(".jsonl"))
|
|
109
|
+
continue;
|
|
110
|
+
const file = join(dir, entry);
|
|
111
|
+
try {
|
|
112
|
+
const first = readFileSync(file, "utf8").split("\n", 1)[0] ?? "";
|
|
113
|
+
if (first === "")
|
|
114
|
+
continue;
|
|
115
|
+
const head = JSON.parse(first);
|
|
116
|
+
if (typeof head.runId !== "string")
|
|
117
|
+
continue;
|
|
118
|
+
runs.push({ runId: head.runId, name: String(head.name ?? ""), file, mtimeMs: statSync(file).mtimeMs });
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Unreadable or not an event file: not listed.
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return runs.sort((a, b) => b.mtimeMs - a.mtimeMs);
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* The file for `ref`: a run id, else the name of an Op or a component
|
|
128
|
+
* selection, for which the newest stored run of that name stands. Null when
|
|
129
|
+
* nothing matches (a run that has not written its first line yet included).
|
|
130
|
+
*/
|
|
131
|
+
export async function findStoredRun(cwd, ref) {
|
|
132
|
+
const dir = await runEventsDir(cwd);
|
|
133
|
+
if (!dir)
|
|
134
|
+
return null;
|
|
135
|
+
const direct = join(dir, runEventFileName(ref));
|
|
136
|
+
if (existsSync(direct)) {
|
|
137
|
+
const byId = (await listStoredRuns(cwd)).find((r) => r.file === direct);
|
|
138
|
+
return byId ?? { runId: ref, name: "", file: direct, mtimeMs: statSync(direct).mtimeMs };
|
|
139
|
+
}
|
|
140
|
+
return (await listStoredRuns(cwd)).find((r) => r.name === ref) ?? null;
|
|
141
|
+
}
|
|
142
|
+
/** Whether `event` ends a stream. */
|
|
143
|
+
export const isRunSettle = (event) => event.type === "run-settle";
|
|
144
|
+
/**
|
|
145
|
+
* Read `file` from the start and hand each event to `onEvent` (with its raw
|
|
146
|
+
* line). Without `follow` it stops at the end of the file. With it, it keeps
|
|
147
|
+
* reading what is appended, by polling every `pollMs`, until `run-settle` is
|
|
148
|
+
* read, `signal` aborts, or `idleMs` passes with nothing new (when given).
|
|
149
|
+
* Resolves with the `run-settle` event, or undefined when the stream had
|
|
150
|
+
* none (a replay of a run still going, or a follow that was cut short).
|
|
151
|
+
*/
|
|
152
|
+
export async function readRunEvents(file, onEvent, opts = {}) {
|
|
153
|
+
const pollMs = opts.pollMs ?? 100;
|
|
154
|
+
let offset = 0;
|
|
155
|
+
let rest = "";
|
|
156
|
+
let lastGrowth = Date.now();
|
|
157
|
+
for (;;) {
|
|
158
|
+
let size = 0;
|
|
159
|
+
try {
|
|
160
|
+
size = statSync(file).size;
|
|
161
|
+
}
|
|
162
|
+
catch {
|
|
163
|
+
// Not there yet (a follow started before the run opened its file).
|
|
164
|
+
}
|
|
165
|
+
if (size > offset) {
|
|
166
|
+
const buf = readFileSync(file);
|
|
167
|
+
const chunk = buf.subarray(offset, size).toString("utf8");
|
|
168
|
+
offset = size;
|
|
169
|
+
lastGrowth = Date.now();
|
|
170
|
+
const text = rest + chunk;
|
|
171
|
+
const parts = text.split("\n");
|
|
172
|
+
rest = parts.pop() ?? "";
|
|
173
|
+
for (const part of parts) {
|
|
174
|
+
if (part.trim() === "")
|
|
175
|
+
continue;
|
|
176
|
+
let event;
|
|
177
|
+
try {
|
|
178
|
+
event = JSON.parse(part);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
onEvent(event, `${part}\n`);
|
|
184
|
+
if (isRunSettle(event))
|
|
185
|
+
return event;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
else if (!opts.follow) {
|
|
189
|
+
return undefined;
|
|
190
|
+
}
|
|
191
|
+
else if (opts.signal?.aborted) {
|
|
192
|
+
return undefined;
|
|
193
|
+
}
|
|
194
|
+
else if (opts.idleMs !== undefined && Date.now() - lastGrowth > opts.idleMs) {
|
|
195
|
+
return undefined;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
await new Promise((resolve) => {
|
|
199
|
+
const timer = setTimeout(resolve, pollMs);
|
|
200
|
+
opts.signal?.addEventListener("abort", () => { clearTimeout(timer); resolve(); }, { once: true });
|
|
201
|
+
});
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The emitters' side of the run-event contract (#4041): what a runtime or a
|
|
3
|
+
* command needs to print a run's stream through the one writer in
|
|
4
|
+
* `./run-event.ts`.
|
|
5
|
+
*
|
|
6
|
+
* Every emitter hands bodies to a {@link RunEventSink}. The CLI opens a
|
|
7
|
+
* {@link RunEventStream} over a run's identity, which stamps each body
|
|
8
|
+
* through `createRunEventWriter` and makes sure the stream opens with
|
|
9
|
+
* `run-start` and ends with one `run-settle`, even when the run threw before
|
|
10
|
+
* it said so itself. The components driver emits bodies only, and
|
|
11
|
+
* {@link progressOfRunEvent} turns them back into the older
|
|
12
|
+
* `RunProgressEvent` lines that `--progress-json` still prints.
|
|
13
|
+
*
|
|
14
|
+
* Kept apart from `./run-event.ts`, which a level-0 import loads: this
|
|
15
|
+
* module reads git and the CI environment.
|
|
16
|
+
*/
|
|
17
|
+
import type { RunProgressEvent } from "./components/run-progress.js";
|
|
18
|
+
import type { GateCheck } from "./op/gate.js";
|
|
19
|
+
import { type RunOrigin } from "./lifecycle/release-ledger.js";
|
|
20
|
+
import { type RunEventBody, type RunEventKind, type RunEventRun, type RunEventRuntime, type RunEventSettleStatus } from "./run-event.js";
|
|
21
|
+
/** Where an emitter hands a run's events, before the writer stamps them. */
|
|
22
|
+
export type RunEventSink = (body: RunEventBody) => void;
|
|
23
|
+
/** One sink that hands each body to every sink given, or undefined when none is. */
|
|
24
|
+
export declare function joinRunEventSinks(...sinks: Array<RunEventSink | undefined>): RunEventSink | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* A run-event body as the older `RunProgressEvent`, or undefined when that
|
|
27
|
+
* stream had no such event. It never printed a gate step, a skipped step,
|
|
28
|
+
* a phase outside a component or a gate's decision, so those map to nothing
|
|
29
|
+
* and `--progress-json` prints what it printed before #4041.
|
|
30
|
+
*/
|
|
31
|
+
export declare function progressOfRunEvent(body: RunEventBody): RunProgressEvent | undefined;
|
|
32
|
+
/** A `RunProgressEvent` callback as a sink of run-event bodies, through {@link progressOfRunEvent}. */
|
|
33
|
+
export declare function progressSinkOf(onProgress: ((event: RunProgressEvent) => void) | undefined): RunEventSink | undefined;
|
|
34
|
+
/** The CI run the environment names, as `resolveCiRun` gives it. */
|
|
35
|
+
type CiRun = {
|
|
36
|
+
runId: string;
|
|
37
|
+
runOrigin: RunOrigin;
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* A run's identity from what the emitter already knows. The runtime is `ci`
|
|
41
|
+
* inside a CI job, `steward` in a steward's turn and `local` otherwise; the
|
|
42
|
+
* origin is the CI run's, `op` for a steward's run, and `local` otherwise. An
|
|
43
|
+
* Op run keeps its own run id in CI, as its run record does (#4020).
|
|
44
|
+
*/
|
|
45
|
+
export declare function runEventRunOf(input: {
|
|
46
|
+
kind: RunEventKind;
|
|
47
|
+
name: string;
|
|
48
|
+
runId: string;
|
|
49
|
+
gitSha?: string;
|
|
50
|
+
ci?: CiRun;
|
|
51
|
+
steward?: boolean;
|
|
52
|
+
runtime?: RunEventRuntime;
|
|
53
|
+
runOrigin?: RunOrigin;
|
|
54
|
+
}): RunEventRun;
|
|
55
|
+
/**
|
|
56
|
+
* A run's identity, resolved: the commit from `resolveCommitSha` and the CI
|
|
57
|
+
* run from `resolveCiRun` (#4020). Without `runId`, a CI run is named by its
|
|
58
|
+
* CI run id and any other by a locally minted `local-<ms>` id, the spelling
|
|
59
|
+
* `resolveRunId` uses for a release record.
|
|
60
|
+
*/
|
|
61
|
+
export declare function resolveRunEventRun(input: {
|
|
62
|
+
kind: RunEventKind;
|
|
63
|
+
name: string;
|
|
64
|
+
runId?: string;
|
|
65
|
+
cwd?: string;
|
|
66
|
+
env?: NodeJS.ProcessEnv;
|
|
67
|
+
}): Promise<RunEventRun>;
|
|
68
|
+
/** One run's stream: the writer, held to the shape the contract promises. */
|
|
69
|
+
export interface RunEventStream {
|
|
70
|
+
/** The run every event names. */
|
|
71
|
+
readonly run: RunEventRun;
|
|
72
|
+
/** Write a body. */
|
|
73
|
+
emit: RunEventSink;
|
|
74
|
+
/**
|
|
75
|
+
* A sink for a part of the run that frames itself as a whole run, such as
|
|
76
|
+
* the fan-out a pull request's apply runs: its `run-start` and
|
|
77
|
+
* `run-settle` are dropped, and the caller settles the run.
|
|
78
|
+
*/
|
|
79
|
+
nested: RunEventSink;
|
|
80
|
+
/** End the stream with `run-settle`, unless it has ended. */
|
|
81
|
+
settle(status: RunEventSettleStatus, error?: string): void;
|
|
82
|
+
/** Whether `run-settle` has been written. */
|
|
83
|
+
readonly settled: boolean;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Open a run's stream over `write`. The first event is always `run-start`
|
|
87
|
+
* (one with `waves: null` is written first when the emitter starts with
|
|
88
|
+
* something else), a second `run-start` is dropped, `run-settle` gets the
|
|
89
|
+
* time since `run-start` when the emitter did not time it, and nothing is
|
|
90
|
+
* written after `run-settle`.
|
|
91
|
+
*/
|
|
92
|
+
export declare function openRunEventStream(run: RunEventRun, write: (line: string) => void, opts?: {
|
|
93
|
+
now?: () => Date;
|
|
94
|
+
chant?: string;
|
|
95
|
+
}): RunEventStream;
|
|
96
|
+
/** Where a gate step sits, for {@link gateEventsOf}. */
|
|
97
|
+
export interface GateStepAt {
|
|
98
|
+
component: string | null;
|
|
99
|
+
phase: string;
|
|
100
|
+
/** `gate:<name>`. */
|
|
101
|
+
step: string;
|
|
102
|
+
index?: number;
|
|
103
|
+
/** The op the gate is recorded under. */
|
|
104
|
+
op: string;
|
|
105
|
+
gate: string;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* A decided gate as events: `gate-resolved` and an `ok` settle when an
|
|
109
|
+
* approval stands, `gate-waiting` and a `gated` settle when none does.
|
|
110
|
+
* `message` says why it did not pass, for a person.
|
|
111
|
+
*/
|
|
112
|
+
export declare function gateEventsOf(check: GateCheck, at: GateStepAt, opts: {
|
|
113
|
+
durationMs: number | null;
|
|
114
|
+
message?: string;
|
|
115
|
+
}): RunEventBody[];
|
|
116
|
+
/** The phase a gate outside any component is the one step of: a fan-out's, a wave's or a pull request's. */
|
|
117
|
+
export declare const GATE_PHASE = "gate";
|
|
118
|
+
/**
|
|
119
|
+
* Decide a gate that stands outside any component, and emit it as the one
|
|
120
|
+
* step of a {@link GATE_PHASE} phase: `phase-start`, `step-start`, the
|
|
121
|
+
* decision through {@link gateEventsOf}, the settle and `phase-settle`. A
|
|
122
|
+
* decision that throws settles the step `failed` and is rethrown. `message`
|
|
123
|
+
* says, for a person, why a gate that did not pass did not.
|
|
124
|
+
*/
|
|
125
|
+
export declare function emitGateStep(emit: RunEventSink | undefined, at: {
|
|
126
|
+
op: string;
|
|
127
|
+
gate: string;
|
|
128
|
+
}, decide: () => Promise<GateCheck>, message?: (check: Extract<GateCheck, {
|
|
129
|
+
satisfied: false;
|
|
130
|
+
}>) => string | undefined): Promise<GateCheck>;
|
|
131
|
+
export {};
|
|
132
|
+
//# sourceMappingURL=run-event-stream.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-event-stream.d.ts","sourceRoot":"","sources":["../src/run-event-stream.ts"],"names":[],"mappings":"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"}
|