@intentius/chant 0.124.52 → 0.124.54
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/audit/discover.d.ts.map +1 -1
- package/dist/audit/discover.js +3 -1
- package/dist/behaviour.d.ts +1 -1
- package/dist/behaviour.d.ts.map +1 -1
- package/dist/capabilities/templates.d.ts +65 -0
- package/dist/capabilities/templates.d.ts.map +1 -0
- package/dist/capabilities/templates.js +193 -0
- package/dist/capabilities/templates.json +145 -0
- package/dist/change-set-graph.d.ts +35 -3
- package/dist/change-set-graph.d.ts.map +1 -1
- package/dist/change-set-graph.js +60 -9
- package/dist/change-set.d.ts +65 -7
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +23 -12
- package/dist/ci-identity.d.ts +7 -2
- package/dist/ci-identity.d.ts.map +1 -1
- package/dist/ci-identity.js +4 -1
- package/dist/cli/commands/import-index.d.ts +52 -0
- package/dist/cli/commands/import-index.d.ts.map +1 -0
- package/dist/cli/commands/import-index.js +226 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +4 -2
- package/dist/cli/handlers/components.d.ts.map +1 -1
- package/dist/cli/handlers/components.js +11 -2
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.js +16 -3
- package/dist/cli/handlers/graph.d.ts.map +1 -1
- package/dist/cli/handlers/graph.js +22 -4
- package/dist/cli/handlers/index-cloud.d.ts +14 -0
- package/dist/cli/handlers/index-cloud.d.ts.map +1 -0
- package/dist/cli/handlers/index-cloud.js +22 -0
- package/dist/cli/handlers/index-diff.d.ts +18 -0
- package/dist/cli/handlers/index-diff.d.ts.map +1 -0
- package/dist/cli/handlers/index-diff.js +142 -0
- package/dist/cli/handlers/lifecycle-drift.d.ts +25 -0
- package/dist/cli/handlers/lifecycle-drift.d.ts.map +1 -0
- package/dist/cli/handlers/lifecycle-drift.js +64 -0
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.js +188 -28
- package/dist/cli/handlers/misc.d.ts +9 -0
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/misc.js +77 -0
- package/dist/cli/handlers/pr.d.ts.map +1 -1
- package/dist/cli/handlers/pr.js +15 -2
- package/dist/cli/handlers/promote.d.ts.map +1 -1
- package/dist/cli/handlers/promote.js +89 -15
- package/dist/cli/handlers/query.d.ts.map +1 -1
- package/dist/cli/handlers/query.js +28 -4
- package/dist/cli/handlers/scenario.d.ts.map +1 -1
- package/dist/cli/handlers/scenario.js +8 -7
- package/dist/cli/handlers/search.d.ts +34 -4
- package/dist/cli/handlers/search.d.ts.map +1 -1
- package/dist/cli/handlers/search.js +216 -36
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +55 -1
- package/dist/cli/mcp/lifecycle-tools.d.ts.map +1 -1
- package/dist/cli/mcp/lifecycle-tools.js +3 -2
- package/dist/cli/mcp/resource-handlers.d.ts.map +1 -1
- package/dist/cli/mcp/resource-handlers.js +4 -3
- 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 +55 -2
- package/dist/cli/registry.d.ts +19 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cloud-lister/aws.d.ts +35 -0
- package/dist/cloud-lister/aws.d.ts.map +1 -0
- package/dist/cloud-lister/aws.js +203 -0
- package/dist/cloud-lister/azure.d.ts +34 -0
- package/dist/cloud-lister/azure.d.ts.map +1 -0
- package/dist/cloud-lister/azure.js +129 -0
- package/dist/cloud-lister/common.d.ts +40 -0
- package/dist/cloud-lister/common.d.ts.map +1 -0
- package/dist/cloud-lister/common.js +83 -0
- package/dist/cloud-lister/credentials.d.ts +50 -0
- package/dist/cloud-lister/credentials.d.ts.map +1 -0
- package/dist/cloud-lister/credentials.js +86 -0
- package/dist/cloud-lister/fakes.d.ts +27 -0
- package/dist/cloud-lister/fakes.d.ts.map +1 -0
- package/dist/cloud-lister/fakes.js +50 -0
- package/dist/cloud-lister/gcp.d.ts +42 -0
- package/dist/cloud-lister/gcp.d.ts.map +1 -0
- package/dist/cloud-lister/gcp.js +143 -0
- package/dist/cloud-lister/guard.d.ts +49 -0
- package/dist/cloud-lister/guard.d.ts.map +1 -0
- package/dist/cloud-lister/guard.js +103 -0
- package/dist/cloud-lister/ids.d.ts +23 -0
- package/dist/cloud-lister/ids.d.ts.map +1 -0
- package/dist/cloud-lister/ids.js +42 -0
- package/dist/cloud-lister/index.d.ts +67 -0
- package/dist/cloud-lister/index.d.ts.map +1 -0
- package/dist/cloud-lister/index.js +102 -0
- package/dist/cloud-lister/kubernetes.d.ts +64 -0
- package/dist/cloud-lister/kubernetes.d.ts.map +1 -0
- package/dist/cloud-lister/kubernetes.js +276 -0
- package/dist/cloud-lister/markers.d.ts +31 -0
- package/dist/cloud-lister/markers.d.ts.map +1 -0
- package/dist/cloud-lister/markers.js +73 -0
- package/dist/cloud-lister/mask.d.ts +31 -0
- package/dist/cloud-lister/mask.d.ts.map +1 -0
- package/dist/cloud-lister/mask.js +74 -0
- package/dist/cloud-lister/sigv4.d.ts +29 -0
- package/dist/cloud-lister/sigv4.d.ts.map +1 -0
- package/dist/cloud-lister/sigv4.js +54 -0
- package/dist/cloud-lister/transport.d.ts +55 -0
- package/dist/cloud-lister/transport.d.ts.map +1 -0
- package/dist/cloud-lister/transport.js +86 -0
- package/dist/cloud-lister/types.d.ts +121 -0
- package/dist/cloud-lister/types.d.ts.map +1 -0
- package/dist/cloud-lister/types.js +24 -0
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.js +6 -0
- package/dist/components/capability-plugin.d.ts +9 -0
- package/dist/components/capability-plugin.d.ts.map +1 -1
- package/dist/components/capability.d.ts +215 -0
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/cli-support.d.ts +21 -0
- package/dist/components/cli-support.d.ts.map +1 -1
- package/dist/components/cli-support.js +58 -14
- package/dist/components/declared-reads.d.ts +38 -0
- package/dist/components/declared-reads.d.ts.map +1 -0
- package/dist/components/declared-reads.js +131 -0
- package/dist/components/deploy-units.d.ts.map +1 -1
- package/dist/components/deploy-units.js +4 -0
- package/dist/components/driver.d.ts +34 -1
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/driver.js +66 -3
- package/dist/components/fan-out-run.d.ts +23 -1
- package/dist/components/fan-out-run.d.ts.map +1 -1
- package/dist/components/fan-out-run.js +82 -14
- package/dist/components/fan-out-support.d.ts +6 -0
- package/dist/components/fan-out-support.d.ts.map +1 -1
- package/dist/components/fan-out-support.js +4 -1
- package/dist/components/fan-out.d.ts +28 -0
- package/dist/components/fan-out.d.ts.map +1 -1
- package/dist/components/groups.d.ts +229 -0
- package/dist/components/groups.d.ts.map +1 -0
- package/dist/components/groups.js +760 -0
- package/dist/components/index.d.ts +6 -2
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -0
- package/dist/components/plan-shape-conformance.d.ts +48 -0
- package/dist/components/plan-shape-conformance.d.ts.map +1 -0
- package/dist/components/plan-shape-conformance.js +122 -0
- package/dist/components/pr-run.d.ts +41 -4
- package/dist/components/pr-run.d.ts.map +1 -1
- package/dist/components/pr-run.js +209 -39
- package/dist/components/promote-rounds.d.ts +9 -0
- package/dist/components/promote-rounds.d.ts.map +1 -1
- package/dist/components/promote-rounds.js +23 -2
- package/dist/components/promote.d.ts +17 -0
- package/dist/components/promote.d.ts.map +1 -1
- package/dist/components/promote.js +36 -6
- package/dist/components/release-gate.d.ts +23 -1
- package/dist/components/release-gate.d.ts.map +1 -1
- package/dist/components/release-gate.js +97 -33
- package/dist/components/run-groups.d.ts +58 -0
- package/dist/components/run-groups.d.ts.map +1 -0
- package/dist/components/run-groups.js +78 -0
- package/dist/components/starter-plugin.d.ts +1 -0
- package/dist/components/starter-plugin.d.ts.map +1 -1
- package/dist/components/starter-plugin.js +6 -1
- package/dist/components/verbs/index.d.ts +1 -0
- package/dist/components/verbs/index.d.ts.map +1 -1
- package/dist/components/verbs/index.js +1 -0
- package/dist/components/verbs/member-outputs.d.ts +187 -0
- package/dist/components/verbs/member-outputs.d.ts.map +1 -0
- package/dist/components/verbs/member-outputs.js +218 -0
- package/dist/config.d.ts +60 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +27 -0
- package/dist/deep-observation.d.ts +1 -13
- package/dist/deep-observation.d.ts.map +1 -1
- package/dist/deep-observation.js +5 -22
- package/dist/drift-record.d.ts +542 -0
- package/dist/drift-record.d.ts.map +1 -0
- package/dist/drift-record.js +886 -0
- package/dist/engine-facts.d.ts +144 -0
- package/dist/engine-facts.d.ts.map +1 -0
- package/dist/engine-facts.js +14 -0
- package/dist/graph-ir.d.ts +153 -2
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-ir.js +224 -6
- package/dist/graph-refs.d.ts +145 -0
- package/dist/graph-refs.d.ts.map +1 -1
- package/dist/graph-refs.js +305 -0
- package/dist/graph-schema/fixtures/adopt.json +15 -0
- package/dist/graph-schema/fixtures/choudoufu.engine-graph.json +169 -0
- package/dist/graph-schema/fixtures/index.json +68 -0
- package/dist/graph-schema/fixtures/plunge.engine-graph.json +158 -0
- package/dist/graph-schema/fixtures.d.ts +23 -0
- package/dist/graph-schema/fixtures.d.ts.map +1 -0
- package/dist/graph-schema/fixtures.js +246 -0
- package/dist/graph-schema/generate.d.ts +15 -0
- package/dist/graph-schema/generate.d.ts.map +1 -0
- package/dist/graph-schema/generate.js +267 -0
- package/dist/graph-schema/graph.schema.json +1387 -0
- package/dist/health.schema.json +2 -1
- package/dist/identity.d.ts.map +1 -1
- package/dist/identity.js +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/instance-nodes.d.ts +159 -0
- package/dist/instance-nodes.d.ts.map +1 -0
- package/dist/instance-nodes.js +231 -0
- package/dist/lexicon.d.ts +72 -0
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/adoption-file.d.ts +56 -0
- package/dist/lifecycle/adoption-file.d.ts.map +1 -0
- package/dist/lifecycle/adoption-file.js +123 -0
- package/dist/lifecycle/cloud-index.d.ts +186 -0
- package/dist/lifecycle/cloud-index.d.ts.map +1 -0
- package/dist/lifecycle/cloud-index.js +618 -0
- package/dist/lifecycle/derive-edges.d.ts +59 -0
- package/dist/lifecycle/derive-edges.d.ts.map +1 -0
- package/dist/lifecycle/derive-edges.js +126 -0
- package/dist/lifecycle/git.d.ts +10 -9
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/git.js +7 -1
- package/dist/lifecycle/identity-match.d.ts +133 -0
- package/dist/lifecycle/identity-match.d.ts.map +1 -0
- package/dist/lifecycle/identity-match.js +147 -0
- package/dist/lifecycle/index-diff.d.ts +224 -0
- package/dist/lifecycle/index-diff.d.ts.map +1 -0
- package/dist/lifecycle/index-diff.js +327 -0
- package/dist/lifecycle/index-document.d.ts +130 -0
- package/dist/lifecycle/index-document.d.ts.map +1 -0
- package/dist/lifecycle/index-document.js +189 -0
- package/dist/lifecycle/index-drift.d.ts +121 -0
- package/dist/lifecycle/index-drift.d.ts.map +1 -0
- package/dist/lifecycle/index-drift.js +178 -0
- package/dist/lifecycle/index-import.d.ts +168 -0
- package/dist/lifecycle/index-import.d.ts.map +1 -0
- package/dist/lifecycle/index-import.js +515 -0
- package/dist/lifecycle/index-join.d.ts +129 -0
- package/dist/lifecycle/index-join.d.ts.map +1 -0
- package/dist/lifecycle/index-join.js +248 -0
- 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/observation-baseline.d.ts +61 -21
- package/dist/lifecycle/observation-baseline.d.ts.map +1 -1
- package/dist/lifecycle/observation-baseline.js +144 -19
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/observe.js +6 -1
- package/dist/lifecycle/query.d.ts +45 -4
- package/dist/lifecycle/query.d.ts.map +1 -1
- package/dist/lifecycle/query.js +89 -7
- package/dist/lifecycle/replay.d.ts +10 -3
- package/dist/lifecycle/replay.d.ts.map +1 -1
- package/dist/lifecycle/replay.js +10 -6
- package/dist/lifecycle/scenario.d.ts +4 -3
- package/dist/lifecycle/scenario.d.ts.map +1 -1
- package/dist/lifecycle/snapshot-store-fake.d.ts +9 -0
- package/dist/lifecycle/snapshot-store-fake.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store-fake.js +21 -0
- package/dist/lifecycle/snapshot-store-s3.d.ts +102 -0
- package/dist/lifecycle/snapshot-store-s3.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store-s3.js +254 -0
- package/dist/lifecycle/snapshot-store.d.ts +170 -0
- package/dist/lifecycle/snapshot-store.d.ts.map +1 -0
- package/dist/lifecycle/snapshot-store.js +832 -0
- package/dist/lifecycle/snapshot.d.ts +11 -0
- package/dist/lifecycle/snapshot.d.ts.map +1 -1
- package/dist/lifecycle/snapshot.js +18 -5
- package/dist/lifecycle/type-listing.d.ts +148 -0
- package/dist/lifecycle/type-listing.d.ts.map +1 -0
- package/dist/lifecycle/type-listing.js +166 -0
- package/dist/lint/component-checks.d.ts +15 -1
- package/dist/lint/component-checks.d.ts.map +1 -1
- package/dist/lint/component-checks.js +1 -0
- package/dist/lint/presets/relaxed.json +2 -1
- package/dist/lint/presets/strict.json +2 -1
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.d.ts +4 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.d.ts.map +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/fail/dns.component.js +13 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.d.ts +4 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.d.ts.map +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp008/pass/dns.component.js +8 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.d.ts +33 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.d.ts.map +1 -0
- package/dist/lint/rules/comp/comp008-applies-signal-only-root.js +123 -0
- package/dist/lint/rules/comp/index.d.ts +2 -1
- package/dist/lint/rules/comp/index.d.ts.map +1 -1
- package/dist/lint/rules/comp/index.js +4 -1
- package/dist/observation.d.ts +19 -2
- package/dist/observation.d.ts.map +1 -1
- package/dist/observation.js +18 -1
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +1 -1
- package/dist/op/activities/change-set.d.ts +6 -4
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +4 -2
- package/dist/op/activity-failure.d.ts +27 -0
- package/dist/op/activity-failure.d.ts.map +1 -1
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/index.d.ts +2 -1
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/index.js +1 -1
- package/dist/op/local-executor.d.ts +5 -1
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/local-executor.js +22 -8
- package/dist/pr-loop.d.ts +56 -1
- package/dist/pr-loop.d.ts.map +1 -1
- package/dist/pr-loop.js +51 -1
- package/dist/pulumi-urn.d.ts +101 -0
- package/dist/pulumi-urn.d.ts.map +1 -0
- package/dist/pulumi-urn.js +131 -0
- package/dist/release-floors.d.ts +23 -0
- package/dist/release-floors.d.ts.map +1 -0
- package/dist/release-floors.js +22 -0
- package/dist/sensitive-key.d.ts +23 -0
- package/dist/sensitive-key.d.ts.map +1 -0
- package/dist/sensitive-key.js +31 -0
- package/dist/wave-runtime.mjs +234 -234
- package/dist/workspace/adoption-report.d.ts +53 -0
- package/dist/workspace/adoption-report.d.ts.map +1 -0
- package/dist/workspace/adoption-report.js +76 -0
- package/dist/workspace/capabilities-contract.d.ts +7 -0
- package/dist/workspace/capabilities-contract.d.ts.map +1 -1
- package/dist/workspace/capabilities-contract.js +2 -1
- package/dist/workspace/capabilities.schema.json +98 -0
- package/dist/workspace/change-set.schema.json +42 -3
- package/dist/workspace/ci-cloud-identity.d.ts +13 -1
- package/dist/workspace/ci-cloud-identity.d.ts.map +1 -1
- package/dist/workspace/ci-cloud-identity.js +30 -1
- package/dist/workspace/compose-graph.d.ts +10 -1
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/compose-graph.js +6 -1
- package/dist/workspace/conformance/index.d.ts +1 -1
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/conformance/index.js +6 -1
- package/dist/workspace/drift-cli.d.ts +81 -0
- package/dist/workspace/drift-cli.d.ts.map +1 -0
- package/dist/workspace/drift-cli.js +317 -0
- package/dist/workspace/drift.schema.json +672 -0
- package/dist/workspace/graph-cli.d.ts +2 -0
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/graph-cli.js +3 -0
- package/dist/workspace/graph.schema.json +72 -0
- package/dist/workspace/init.d.ts +5 -1
- package/dist/workspace/init.d.ts.map +1 -1
- package/dist/workspace/init.js +55 -9
- package/dist/workspace/ledger.schema.json +1 -1
- package/dist/workspace/nested-graph.d.ts.map +1 -1
- package/dist/workspace/nested-graph.js +2 -0
- package/dist/workspace/pr-report.schema.json +51 -2
- package/dist/workspace/promote-waves.d.ts +112 -0
- package/dist/workspace/promote-waves.d.ts.map +1 -0
- package/dist/workspace/promote-waves.js +290 -0
- package/dist/workspace/promote.d.ts +84 -2
- package/dist/workspace/promote.d.ts.map +1 -1
- package/dist/workspace/promote.js +347 -61
- package/dist/workspace/reason-codes.d.ts +12 -0
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/reason-codes.js +14 -0
- package/dist/workspace/search-contract.d.ts +3 -3
- package/dist/workspace/search-contract.d.ts.map +1 -1
- package/dist/workspace/search-contract.js +2 -0
- package/dist/workspace/search.schema.json +103 -5
- package/package.json +14 -1
- package/src/__fixtures__/drift-record/README.md +58 -0
- package/src/__fixtures__/drift-record/choudoufu-cone.ndjson +4 -0
- package/src/__fixtures__/drift-record/choudoufu-resource.ndjson +3 -0
- package/src/__fixtures__/drift-record/component-status-ledger.json +65 -0
- package/src/__fixtures__/drift-record/component-status.json +91 -0
- package/src/__fixtures__/drift-record/deep-diff.json +259 -0
- package/src/__fixtures__/drift-record/lifecycle-diff-live.json +825 -0
- package/src/__fixtures__/drift-record/live-diff.json +125 -0
- package/src/audit/discover.e2e.test.ts +14 -0
- package/src/audit/discover.ts +3 -1
- package/src/behaviour.ts +1 -1
- package/src/capabilities/templates.json +145 -0
- package/src/capabilities/templates.test.ts +212 -0
- package/src/capabilities/templates.ts +204 -0
- package/src/change-set-bundle.test.ts +83 -0
- package/src/change-set-graph.ts +80 -9
- package/src/change-set.test.ts +24 -0
- package/src/change-set.ts +77 -14
- package/src/ci-identity-targets.test.ts +23 -0
- package/src/ci-identity.ts +10 -4
- package/src/cli/commands/import-index.test.ts +117 -0
- package/src/cli/commands/import-index.ts +265 -0
- package/src/cli/commands/lint.ts +4 -2
- package/src/cli/handlers/components.test.ts +9 -0
- package/src/cli/handlers/components.ts +12 -2
- package/src/cli/handlers/fan-out.ts +17 -3
- package/src/cli/handlers/graph.test.ts +42 -0
- package/src/cli/handlers/graph.ts +26 -4
- package/src/cli/handlers/index-cloud.ts +32 -0
- package/src/cli/handlers/index-diff.test.ts +68 -0
- package/src/cli/handlers/index-diff.ts +146 -0
- package/src/cli/handlers/ledger-root-member.test.ts +161 -0
- package/src/cli/handlers/lifecycle-drift.ts +68 -0
- package/src/cli/handlers/lifecycle.test.ts +33 -11
- package/src/cli/handlers/lifecycle.ts +205 -30
- package/src/cli/handlers/misc.ts +73 -0
- package/src/cli/handlers/pr-waves-blocked.test.ts +37 -2
- package/src/cli/handlers/pr.ts +14 -2
- package/src/cli/handlers/promote.test.ts +64 -0
- package/src/cli/handlers/promote.ts +81 -6
- package/src/cli/handlers/query.ts +27 -4
- package/src/cli/handlers/run-declared-reads-cli.test.ts +187 -0
- package/src/cli/handlers/run-groups-cli.test.ts +229 -0
- package/src/cli/handlers/scenario.test.ts +13 -0
- package/src/cli/handlers/scenario.ts +8 -7
- package/src/cli/handlers/search-index.test.ts +255 -0
- package/src/cli/handlers/search-json.test.ts +1 -1
- package/src/cli/handlers/search-ownership.test.ts +194 -0
- package/src/cli/handlers/search.ts +271 -38
- package/src/cli/main.test.ts +7 -0
- package/src/cli/main.ts +56 -1
- package/src/cli/mcp/lifecycle-tools.ts +3 -2
- package/src/cli/mcp/resource-handlers.ts +4 -3
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/cli/parse-args.ts +40 -2
- package/src/cli/registry.ts +19 -1
- package/src/cloud-lister/aws.test.ts +202 -0
- package/src/cloud-lister/aws.ts +226 -0
- package/src/cloud-lister/azure.test.ts +132 -0
- package/src/cloud-lister/azure.ts +142 -0
- package/src/cloud-lister/common.ts +115 -0
- package/src/cloud-lister/credentials.ts +110 -0
- package/src/cloud-lister/fakes.ts +66 -0
- package/src/cloud-lister/gcp.test.ts +121 -0
- package/src/cloud-lister/gcp.ts +159 -0
- package/src/cloud-lister/guard.test.ts +198 -0
- package/src/cloud-lister/guard.ts +111 -0
- package/src/cloud-lister/ids.ts +54 -0
- package/src/cloud-lister/index.ts +134 -0
- package/src/cloud-lister/kubernetes.test.ts +160 -0
- package/src/cloud-lister/kubernetes.ts +284 -0
- package/src/cloud-lister/markers.ts +74 -0
- package/src/cloud-lister/mask.ts +77 -0
- package/src/cloud-lister/shape.test.ts +81 -0
- package/src/cloud-lister/sigv4.ts +70 -0
- package/src/cloud-lister/transport.ts +118 -0
- package/src/cloud-lister/types.ts +135 -0
- package/src/components/capability-plugin-loader.ts +4 -0
- package/src/components/capability-plugin.ts +10 -0
- package/src/components/capability.ts +229 -0
- package/src/components/cli-support.ts +70 -14
- package/src/components/declared-reads.test.ts +103 -0
- package/src/components/declared-reads.ts +134 -0
- package/src/components/deploy-units.ts +4 -0
- package/src/components/driver.ts +89 -4
- package/src/components/fan-out-run.ts +95 -15
- package/src/components/fan-out-support.ts +10 -1
- package/src/components/fan-out.ts +30 -0
- package/src/components/groups.test.ts +320 -0
- package/src/components/groups.ts +880 -0
- package/src/components/index.ts +42 -0
- package/src/components/plan-shape-conformance.ts +130 -0
- package/src/components/pr-env-run-bundle.test.ts +2 -0
- package/src/components/pr-run.test.ts +516 -3
- package/src/components/pr-run.ts +231 -41
- package/src/components/promote-rounds.ts +25 -2
- package/src/components/promote.ts +55 -5
- package/src/components/registry.test.ts +1 -1
- package/src/components/release-gate.ts +115 -30
- package/src/components/release-groups.test.ts +362 -0
- package/src/components/run-groups.ts +113 -0
- package/src/components/starter-plugin.ts +6 -0
- package/src/components/verbs/index.ts +1 -0
- package/src/components/verbs/member-outputs.test.ts +205 -0
- package/src/components/verbs/member-outputs.ts +308 -0
- package/src/config.ts +44 -0
- package/src/deep-observation.ts +5 -23
- package/src/drift-record.test.ts +596 -0
- package/src/drift-record.ts +1206 -0
- package/src/engine-facts.guard.test.ts +111 -0
- package/src/engine-facts.test.ts +178 -0
- package/src/engine-facts.ts +154 -0
- package/src/gated-waves-bundle.test.ts +2 -0
- package/src/graph-ir-live.test.ts +92 -0
- package/src/graph-ir.ts +317 -7
- package/src/graph-refs.ts +416 -0
- package/src/graph-schema/fixtures/adopt.json +15 -0
- package/src/graph-schema/fixtures/choudoufu.engine-graph.json +169 -0
- package/src/graph-schema/fixtures/index.json +68 -0
- package/src/graph-schema/fixtures/plunge.engine-graph.json +158 -0
- package/src/graph-schema/fixtures.ts +267 -0
- package/src/graph-schema/generate.ts +263 -0
- package/src/graph-schema/graph-schema.test.ts +153 -0
- package/src/graph-schema/graph.schema.json +1387 -0
- package/src/health.schema.json +2 -1
- package/src/identity.ts +2 -0
- package/src/index.ts +2 -0
- package/src/instance-nodes.ts +288 -0
- package/src/lexicon.ts +76 -0
- package/src/lifecycle/__fixtures__/index-diff/20261026T120000Z-aaaaaaaaaaaa.json +149 -0
- package/src/lifecycle/__fixtures__/index-diff/20261026T130000Z-bbbbbbbbbbbb.json +127 -0
- package/src/lifecycle/adoption-file.test.ts +100 -0
- package/src/lifecycle/adoption-file.ts +154 -0
- package/src/lifecycle/cloud-index.test.ts +517 -0
- package/src/lifecycle/cloud-index.ts +736 -0
- package/src/lifecycle/derive-edges.test.ts +193 -0
- package/src/lifecycle/derive-edges.ts +182 -0
- package/src/lifecycle/git.ts +10 -4
- package/src/lifecycle/identity-match.test.ts +308 -0
- package/src/lifecycle/identity-match.ts +257 -0
- package/src/lifecycle/index-diff.test.ts +198 -0
- package/src/lifecycle/index-diff.ts +476 -0
- package/src/lifecycle/index-document.test.ts +64 -0
- package/src/lifecycle/index-document.ts +299 -0
- package/src/lifecycle/index-drift.test.ts +191 -0
- package/src/lifecycle/index-drift.ts +304 -0
- package/src/lifecycle/index-import.test.ts +255 -0
- package/src/lifecycle/index-import.ts +634 -0
- package/src/lifecycle/index-join.test.ts +250 -0
- package/src/lifecycle/index-join.ts +304 -0
- package/src/lifecycle/index-store-load-bearing.test.ts +187 -0
- package/src/lifecycle/index.ts +4 -0
- package/src/lifecycle/member-ledger.test.ts +25 -7
- package/src/lifecycle/observation-baseline.test.ts +72 -1
- package/src/lifecycle/observation-baseline.ts +190 -27
- package/src/lifecycle/observe.ts +6 -1
- package/src/lifecycle/query.test.ts +69 -1
- package/src/lifecycle/query.ts +103 -10
- package/src/lifecycle/replay.test.ts +9 -5
- package/src/lifecycle/replay.ts +9 -5
- package/src/lifecycle/scenario.ts +4 -3
- package/src/lifecycle/snapshot-store-fake.ts +29 -0
- package/src/lifecycle/snapshot-store-s3.ts +316 -0
- package/src/lifecycle/snapshot-store.test.ts +385 -0
- package/src/lifecycle/snapshot-store.ts +981 -0
- package/src/lifecycle/snapshot.test.ts +13 -0
- package/src/lifecycle/snapshot.ts +23 -6
- package/src/lifecycle/type-listing.test.ts +166 -0
- package/src/lifecycle/type-listing.ts +309 -0
- package/src/lint/component-checks.ts +17 -1
- package/src/lint/config.test.ts +3 -0
- package/src/lint/presets/relaxed.json +2 -1
- package/src/lint/presets/strict.json +2 -1
- package/src/lint/rules/__fixtures__/comp/comp008/fail/dns.component.ts +15 -0
- package/src/lint/rules/__fixtures__/comp/comp008/pass/dns.component.ts +10 -0
- package/src/lint/rules/comp/comp.test.ts +2 -1
- package/src/lint/rules/comp/comp008-applies-signal-only-root.ts +121 -0
- package/src/lint/rules/comp/comp008.test.ts +77 -0
- package/src/lint/rules/comp/index.ts +4 -1
- package/src/observation-edges.test.ts +33 -0
- package/src/observation.ts +36 -1
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +8 -5
- package/src/op/activity-failure.ts +36 -0
- package/src/op/index.ts +2 -1
- package/src/op/local-executor.test.ts +80 -0
- package/src/op/local-executor.ts +27 -9
- package/src/pr-loop-bundle.test.ts +5 -2
- package/src/pr-loop.test.ts +43 -0
- package/src/pr-loop.ts +111 -2
- package/src/pulumi-urn.ts +151 -0
- package/src/release-floors.ts +22 -0
- package/src/sensitive-key.ts +34 -0
- package/src/workspace/adoption-report.test.ts +61 -0
- package/src/workspace/adoption-report.ts +103 -0
- package/src/workspace/capabilities-contract.test.ts +4 -0
- package/src/workspace/capabilities-contract.ts +9 -1
- package/src/workspace/capabilities.schema.json +98 -0
- package/src/workspace/change-set.schema.json +42 -3
- package/src/workspace/ci-cloud-identity.ts +31 -1
- package/src/workspace/compose-graph.test.ts +12 -0
- package/src/workspace/compose-graph.ts +12 -1
- package/src/workspace/conformance/conformance.e2e.test.ts +2 -1
- package/src/workspace/conformance/index.ts +6 -1
- package/src/workspace/drift-cli.test.ts +65 -0
- package/src/workspace/drift-cli.ts +365 -0
- package/src/workspace/drift.schema.json +672 -0
- package/src/workspace/graph-cli.ts +5 -0
- package/src/workspace/graph.schema.json +72 -0
- package/src/workspace/init.test.ts +38 -1
- package/src/workspace/init.ts +50 -8
- package/src/workspace/intent-gaps.test.ts +18 -2
- package/src/workspace/ledger.schema.json +1 -1
- package/src/workspace/nested-graph.ts +1 -0
- package/src/workspace/pr-report.schema.json +51 -2
- package/src/workspace/promote-waves.test.ts +296 -0
- package/src/workspace/promote-waves.ts +340 -0
- package/src/workspace/promote.test.ts +158 -4
- package/src/workspace/promote.ts +398 -57
- package/src/workspace/reason-codes.test.ts +4 -1
- package/src/workspace/reason-codes.ts +14 -0
- package/src/workspace/search-contract.ts +2 -0
- package/src/workspace/search.schema.json +103 -5
|
@@ -40,7 +40,8 @@
|
|
|
40
40
|
import { parseWiringRef } from "../lint/rules/comp/support.js";
|
|
41
41
|
import { isApplyRecord, latestPerComponent } from "../lifecycle/release-ledger.js";
|
|
42
42
|
import { CapabilityRegistry } from "./capability.js";
|
|
43
|
-
import { runInterpretDriver, DriverRunFailure, } from "./driver.js";
|
|
43
|
+
import { runInterpretDriver, DriverRunFailure, deployContext, } from "./driver.js";
|
|
44
|
+
import { planAndRunComponentGroup, runComponentGroup } from "./groups.js";
|
|
44
45
|
/**
|
|
45
46
|
* Step kinds that produce an artifact at build time: the build family, and the
|
|
46
47
|
* SBOM steps that read the freshly built archive. A promote removes them.
|
|
@@ -532,6 +533,11 @@ export function checkPublishedDigest(registry, expected) {
|
|
|
532
533
|
}
|
|
533
534
|
return checked;
|
|
534
535
|
}
|
|
536
|
+
/** The run in `runs` that plans exactly the members of `group`. */
|
|
537
|
+
function approvedRunOf(runs, group) {
|
|
538
|
+
const want = [...group.components].sort().join("\n");
|
|
539
|
+
return runs?.find((r) => Object.keys(r.plans).sort().join("\n") === want);
|
|
540
|
+
}
|
|
535
541
|
/**
|
|
536
542
|
* Deploy the plan's components to `plan.to`, in dependency order. A
|
|
537
543
|
* `dependsOn` edge to a component outside the promotion is dropped, the same
|
|
@@ -546,18 +552,42 @@ export async function runPromotion(options) {
|
|
|
546
552
|
.filter((c) => names.has(c.name))
|
|
547
553
|
.map((c) => ({ ...c, dependsOn: (c.dependsOn ?? []).filter((d) => names.has(d)) }));
|
|
548
554
|
const expected = new Map(plan.items.map((i) => [i.component, i.digest]));
|
|
555
|
+
const registry = checkPublishedDigest(options.registry, expected);
|
|
556
|
+
const releaseIdentity = (component) => {
|
|
557
|
+
const item = plan.items.find((i) => i.component === component);
|
|
558
|
+
return item ? { version: item.digest, revision: item.source.gitSha } : undefined;
|
|
559
|
+
};
|
|
560
|
+
// ws-107 (#4465): a group applies as one, through its approved plan.
|
|
561
|
+
const grouped = options.grouped?.groups?.length ? options.grouped : undefined;
|
|
562
|
+
const byName = new Map(targets.map((c) => [c.name, c]));
|
|
563
|
+
const groups = grouped
|
|
564
|
+
? {
|
|
565
|
+
waves: grouped.waves,
|
|
566
|
+
groups: grouped.groups,
|
|
567
|
+
run: (group, componentOutputs) => {
|
|
568
|
+
const each = {
|
|
569
|
+
group,
|
|
570
|
+
components: byName,
|
|
571
|
+
registry,
|
|
572
|
+
env: plan.to,
|
|
573
|
+
ctxOf: (name) => deployContext({ env: plan.to, releaseIdentity }, name),
|
|
574
|
+
componentOutputs,
|
|
575
|
+
};
|
|
576
|
+
const approved = approvedRunOf(options.groupRuns, group);
|
|
577
|
+
return approved === undefined && options.planGroupsAtWave ? planAndRunComponentGroup(each) : runComponentGroup({ ...each, run: approved });
|
|
578
|
+
},
|
|
579
|
+
}
|
|
580
|
+
: undefined;
|
|
549
581
|
try {
|
|
550
|
-
return await runInterpretDriver(targets,
|
|
582
|
+
return await runInterpretDriver(targets, registry, {
|
|
551
583
|
env: plan.to,
|
|
552
584
|
componentOutputs: options.componentOutputs ?? {},
|
|
553
585
|
// #2574: a gate approval for this promote or rollback is bound to the
|
|
554
586
|
// release it deploys, as well as the environment and composition.
|
|
555
587
|
releases: expected,
|
|
556
588
|
// #3061: the workload's service.version and vcs.ref.head.revision are the earlier release's own.
|
|
557
|
-
releaseIdentity
|
|
558
|
-
|
|
559
|
-
return item ? { version: item.digest, revision: item.source.gitSha } : undefined;
|
|
560
|
-
},
|
|
589
|
+
releaseIdentity,
|
|
590
|
+
...(groups ? { groups } : {}),
|
|
561
591
|
...(options.onProgress ? { onProgress: options.onProgress } : {}),
|
|
562
592
|
...(options.onRunEvent ? { onRunEvent: options.onRunEvent } : {}),
|
|
563
593
|
...(options.gates ? { gates: options.gates } : {}),
|
|
@@ -59,7 +59,8 @@
|
|
|
59
59
|
* component a promote, rollback or redeploy left failed or gated with nothing
|
|
60
60
|
* recorded since (#4035): its record names what ran before that run.
|
|
61
61
|
*/
|
|
62
|
-
import type { CapabilityRegistry } from "./capability.js";
|
|
62
|
+
import type { CapabilityRegistry, GroupRun } from "./capability.js";
|
|
63
|
+
import type { FanOutGroup, FanOutGroupFallback, FanOutPlan } from "./fan-out.js";
|
|
63
64
|
import { type DriverComponent } from "./driver.js";
|
|
64
65
|
import { RELEASE_GATE_OP } from "../op/gate-name.js";
|
|
65
66
|
import { type ChangeSetDocument, type ChangeSetPart } from "../change-set.js";
|
|
@@ -105,6 +106,23 @@ export interface ReleaseChangeSetInput {
|
|
|
105
106
|
* `seededOutputs`, which then holds what the run left. Default: every one.
|
|
106
107
|
*/
|
|
107
108
|
only?: ReadonlySet<string>;
|
|
109
|
+
/**
|
|
110
|
+
* The promote's grouped fan-out (ws-107, #4465, `formRunGroups`). Each of
|
|
111
|
+
* its groups plans with one `planGroup` call in the wave it places it in,
|
|
112
|
+
* and the group digest is folded into each member's part, so the release
|
|
113
|
+
* gate's digest binds the composition. Absent, or without `groups`: every
|
|
114
|
+
* component plans by itself, wave by wave.
|
|
115
|
+
*/
|
|
116
|
+
grouped?: FanOutPlan;
|
|
117
|
+
}
|
|
118
|
+
/** A group the release gate's plan planned as one (ws-107, #4465). */
|
|
119
|
+
export interface ReleasePlanGroup extends FanOutGroup {
|
|
120
|
+
/** The group digest folded into each member's `planDigest`; `null` when the group failed to plan. */
|
|
121
|
+
digest: string | null;
|
|
122
|
+
/** Why the group failed to plan. Every member is then a failed member. */
|
|
123
|
+
error?: string;
|
|
124
|
+
/** What `runGroup` gets back. It lives in the process that planned, as the promote that applies it is. */
|
|
125
|
+
run?: GroupRun;
|
|
108
126
|
}
|
|
109
127
|
/** A release's change set for an environment, and what each component was planned against. */
|
|
110
128
|
export interface ReleasePlan {
|
|
@@ -115,6 +133,10 @@ export interface ReleasePlan {
|
|
|
115
133
|
plannedOutputs?: Record<string, string[]>;
|
|
116
134
|
/** Per component, the references to a promoted upstream that no value stands for until it applies, sorted. Absent when none. */
|
|
117
135
|
unknownInputs?: Record<string, string[]>;
|
|
136
|
+
/** The groups planned as one (#4465), in the order they planned. Absent when none. */
|
|
137
|
+
groups?: ReleasePlanGroup[];
|
|
138
|
+
/** The components that could have grouped and did not, with why: `grouped.fallbacks`. Absent when none. */
|
|
139
|
+
fallbacks?: FanOutGroupFallback[];
|
|
118
140
|
}
|
|
119
141
|
/**
|
|
120
142
|
* A component no capability plans, as a `chant` member: what the release
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"release-gate.d.ts","sourceRoot":"","sources":["../../src/components/release-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAkB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"release-gate.d.ts","sourceRoot":"","sources":["../../src/components/release-gate.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
* component a promote, rollback or redeploy left failed or gated with nothing
|
|
60
60
|
* recorded since (#4035): its record names what ran before that run.
|
|
61
61
|
*/
|
|
62
|
+
import { groupsByComponent, planComponentGroup } from "./groups.js";
|
|
62
63
|
import { deployContext, resolveComponentGraph, resolveStepInput, unresolvedWiringReferences } from "./driver.js";
|
|
63
64
|
import { componentPlanDigest } from "./gate-plan.js";
|
|
64
65
|
import { gateName, RELEASE_GATE_OP } from "../op/gate-name.js";
|
|
@@ -215,10 +216,100 @@ export async function planReleaseSet(input) {
|
|
|
215
216
|
const reads = {};
|
|
216
217
|
const inPlan = (name) => input.only === undefined || input.only.has(name);
|
|
217
218
|
const isPlannable = (c) => capabilitySteps(c.deploy).some((s) => registry.has(s.kind) && registry.resolve(s.kind).plan !== undefined);
|
|
218
|
-
const
|
|
219
|
+
const failedPart = (member, err) => ({
|
|
220
|
+
member: {
|
|
221
|
+
member,
|
|
222
|
+
lexicon: "chant",
|
|
223
|
+
planner: "chant",
|
|
224
|
+
status: "failed",
|
|
225
|
+
error: err instanceof Error ? err.message : String(err),
|
|
226
|
+
planDigest: null,
|
|
227
|
+
holes: [],
|
|
228
|
+
},
|
|
229
|
+
entries: [],
|
|
230
|
+
});
|
|
231
|
+
/** Read each dependency of `component` once, leaving out `mates`, its own group (#4465), and keep what it read. */
|
|
232
|
+
const readDependencies = async (component, mates) => {
|
|
233
|
+
for (const dep of component.dependsOn ?? []) {
|
|
234
|
+
if (mates.has(dep) || read.has(dep) || !byName.has(dep))
|
|
235
|
+
continue;
|
|
236
|
+
read.add(dep);
|
|
237
|
+
// A dependency this promote plans exposes what its plan says (#3999).
|
|
238
|
+
if (plannedBy.has(dep) && isPlannable(byName.get(dep))) {
|
|
239
|
+
const known = plannedBy.get(dep)?.known ?? {};
|
|
240
|
+
outputs[dep] = { ...known };
|
|
241
|
+
planned[dep] = Object.keys(known).sort();
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
const found = await readComponentOutputs(byName.get(dep), registry, deployContext({ env }, dep), outputs);
|
|
245
|
+
if (found)
|
|
246
|
+
outputs[dep] = found;
|
|
247
|
+
}
|
|
248
|
+
reads[component.name] = Object.fromEntries((component.dependsOn ?? []).filter((d) => !mates.has(d) && d in outputs).map((d) => [d, structuredClone(outputs[d])]));
|
|
249
|
+
};
|
|
250
|
+
/** The references of `component`'s plannable steps to a promoted upstream outside `mates` that its plan can't say yet. */
|
|
251
|
+
const unknownOf = (component, mates) => {
|
|
252
|
+
const unknown = new Set();
|
|
253
|
+
for (const step of capabilitySteps(component.deploy)) {
|
|
254
|
+
if (!registry.has(step.kind) || registry.resolve(step.kind).plan === undefined)
|
|
255
|
+
continue;
|
|
256
|
+
const { kind: _kind, ...rest } = step;
|
|
257
|
+
for (const r of unresolvedWiringReferences(rest, outputs))
|
|
258
|
+
if (plannedBy.has(r.source) && !r.publish && !mates.has(r.source))
|
|
259
|
+
unknown.add(r.ref);
|
|
260
|
+
}
|
|
261
|
+
return unknown;
|
|
262
|
+
};
|
|
263
|
+
// ws-107 (#4465): a group plans once, in the wave the grouped fan-out places it in.
|
|
264
|
+
const grouped = input.grouped?.groups?.length ? input.grouped : undefined;
|
|
265
|
+
const groupOf = grouped ? groupsByComponent(grouped) : new Map();
|
|
266
|
+
const groups = [];
|
|
267
|
+
const planGroupAt = async (group) => {
|
|
268
|
+
const mates = new Set(group.components);
|
|
269
|
+
try {
|
|
270
|
+
for (const name of group.components)
|
|
271
|
+
await readDependencies(byName.get(name), mates);
|
|
272
|
+
}
|
|
273
|
+
catch (err) {
|
|
274
|
+
for (const name of group.components) {
|
|
275
|
+
plannedBy.set(name, undefined);
|
|
276
|
+
parts.push(failedPart(name, err));
|
|
277
|
+
}
|
|
278
|
+
groups.push({ ...group, digest: null, error: err instanceof Error ? err.message : String(err) });
|
|
279
|
+
return;
|
|
280
|
+
}
|
|
281
|
+
const g = await planComponentGroup({ group, components: byName, registry, env, ctxOf: (name) => deployContext({ env }, name), outputs });
|
|
282
|
+
const error = g.plans.find((p) => "error" in p)?.error;
|
|
283
|
+
groups.push({ ...group, digest: g.digest ?? null, ...(error !== undefined ? { error } : {}), ...(g.run ? { run: g.run } : {}) });
|
|
284
|
+
for (const p of g.plans) {
|
|
285
|
+
if ("error" in p) {
|
|
286
|
+
plannedBy.set(p.component, undefined);
|
|
287
|
+
parts.push(failedPart(p.component, p.error));
|
|
288
|
+
continue;
|
|
289
|
+
}
|
|
290
|
+
plannedBy.set(p.component, p.outputs);
|
|
291
|
+
parts.push(...p.parts);
|
|
292
|
+
const unknown = unknownOf(byName.get(p.component), mates);
|
|
293
|
+
if (unknown.size > 0)
|
|
294
|
+
unknownInputs[p.component] = [...unknown].sort();
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
const waves = grouped
|
|
298
|
+
? grouped.waves.map((w) => w.filter((name) => byName.has(name)))
|
|
299
|
+
: resolveComponentGraph(components.map((c) => ({ ...c, dependsOn: (c.dependsOn ?? []).filter((d) => byName.has(d)) }))).waves;
|
|
219
300
|
for (const wave of waves) {
|
|
220
301
|
const planning = wave.filter(inPlan);
|
|
302
|
+
const inWave = new Set(planning);
|
|
303
|
+
// What is left of a group in this plan; one member alone plans by itself.
|
|
304
|
+
const groupsHere = [...new Set(planning.map((name) => groupOf.get(name)).filter((g) => g !== undefined))]
|
|
305
|
+
.map((g) => ({ ...g, components: g.components.filter((c) => inWave.has(c)) }))
|
|
306
|
+
.filter((g) => g.components.length > 1);
|
|
307
|
+
const grouping = new Set(groupsHere.flatMap((g) => g.components));
|
|
308
|
+
for (const group of groupsHere)
|
|
309
|
+
await planGroupAt(group);
|
|
221
310
|
for (const name of planning) {
|
|
311
|
+
if (grouping.has(name))
|
|
312
|
+
continue;
|
|
222
313
|
const component = byName.get(name);
|
|
223
314
|
const digest = input.digests.get(name) ?? "";
|
|
224
315
|
const plannable = capabilitySteps(component.deploy).filter((s) => registry.has(s.kind) && registry.resolve(s.kind).plan !== undefined);
|
|
@@ -228,29 +319,11 @@ export async function planReleaseSet(input) {
|
|
|
228
319
|
}
|
|
229
320
|
const ctx = deployContext({ env }, name);
|
|
230
321
|
try {
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
continue;
|
|
234
|
-
read.add(dep);
|
|
235
|
-
// A dependency this promote plans exposes what its plan says (#3999).
|
|
236
|
-
if (plannedBy.has(dep) && isPlannable(byName.get(dep))) {
|
|
237
|
-
const known = plannedBy.get(dep)?.known ?? {};
|
|
238
|
-
outputs[dep] = { ...known };
|
|
239
|
-
planned[dep] = Object.keys(known).sort();
|
|
240
|
-
continue;
|
|
241
|
-
}
|
|
242
|
-
const found = await readComponentOutputs(byName.get(dep), registry, deployContext({ env }, dep), outputs);
|
|
243
|
-
if (found)
|
|
244
|
-
outputs[dep] = found;
|
|
245
|
-
}
|
|
246
|
-
reads[name] = Object.fromEntries((component.dependsOn ?? []).filter((d) => d in outputs).map((d) => [d, structuredClone(outputs[d])]));
|
|
247
|
-
const unknown = new Set();
|
|
322
|
+
await readDependencies(component, new Set());
|
|
323
|
+
const unknown = unknownOf(component, new Set());
|
|
248
324
|
let exposes;
|
|
249
325
|
for (const step of plannable) {
|
|
250
326
|
const { kind, ...rest } = step;
|
|
251
|
-
for (const r of unresolvedWiringReferences(rest, outputs))
|
|
252
|
-
if (plannedBy.has(r.source) && !r.publish)
|
|
253
|
-
unknown.add(r.ref);
|
|
254
327
|
const result = await registry.resolve(kind).plan(planContext(ctx, rest, outputs), resolveStepInput(rest, {}, outputs));
|
|
255
328
|
if (result.outputs)
|
|
256
329
|
exposes = { known: { ...(exposes?.known ?? {}), ...result.outputs.known }, unknown: [...new Set([...(exposes?.unknown ?? []), ...result.outputs.unknown])].sort() };
|
|
@@ -272,18 +345,7 @@ export async function planReleaseSet(input) {
|
|
|
272
345
|
}
|
|
273
346
|
catch (err) {
|
|
274
347
|
plannedBy.set(name, undefined);
|
|
275
|
-
parts.push(
|
|
276
|
-
member: {
|
|
277
|
-
member: name,
|
|
278
|
-
lexicon: "chant",
|
|
279
|
-
planner: "chant",
|
|
280
|
-
status: "failed",
|
|
281
|
-
error: err instanceof Error ? err.message : String(err),
|
|
282
|
-
planDigest: null,
|
|
283
|
-
holes: [],
|
|
284
|
-
},
|
|
285
|
-
entries: [],
|
|
286
|
-
});
|
|
348
|
+
parts.push(failedPart(name, err));
|
|
287
349
|
}
|
|
288
350
|
}
|
|
289
351
|
}
|
|
@@ -296,6 +358,8 @@ export async function planReleaseSet(input) {
|
|
|
296
358
|
reads,
|
|
297
359
|
...(Object.keys(planned).length > 0 ? { plannedOutputs: planned } : {}),
|
|
298
360
|
...(Object.keys(unknownInputs).length > 0 ? { unknownInputs } : {}),
|
|
361
|
+
...(groups.length > 0 ? { groups } : {}),
|
|
362
|
+
...(input.grouped?.fallbacks?.length ? { fallbacks: input.grouped.fallbacks } : {}),
|
|
299
363
|
};
|
|
300
364
|
}
|
|
301
365
|
/** The members a release gate refuses: provisional ones, which no approval of the document covers (`change-set.mdx`). */
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a promote under a release, `components fan-out` and `run --components`
|
|
3
|
+
* say about the groups they applied as one (ws-107, #4465), as `pr-report`
|
|
4
|
+
* says it for a pull request since #4446: each group with its members, the
|
|
5
|
+
* wave it ran in, its digest and the reads its apply computes, how each
|
|
6
|
+
* member ended, and why each component that could have grouped did not.
|
|
7
|
+
*/
|
|
8
|
+
import type { ChangeSetDocument } from "../change-set.js";
|
|
9
|
+
import type { GroupMemberStatus } from "./capability.js";
|
|
10
|
+
import type { FanOutGroup, FanOutGroupFallback, FanOutPlan } from "./fan-out.js";
|
|
11
|
+
/** One group a run applied as one. */
|
|
12
|
+
export interface RunGroupReport {
|
|
13
|
+
/** The kind of the capability every member's one step names. */
|
|
14
|
+
capability: string;
|
|
15
|
+
/** The members, in apply order: upstreams first. */
|
|
16
|
+
components: string[];
|
|
17
|
+
/** The 1-based wave of the grouped fan-out it ran in. */
|
|
18
|
+
wave: number;
|
|
19
|
+
/** The group digest folded into each member's `planDigest`; `null` when it failed to plan. Absent when the run planned it in its wave. */
|
|
20
|
+
digest?: string | null;
|
|
21
|
+
/** Why the group failed to plan. */
|
|
22
|
+
error?: string;
|
|
23
|
+
/** Each read of another member its plan did not know, by change-set member, which the group's apply computes. Absent when none. */
|
|
24
|
+
reads?: Array<{
|
|
25
|
+
member: string;
|
|
26
|
+
ref: string;
|
|
27
|
+
}>;
|
|
28
|
+
/** How each member's part ended, as the capability said. Absent when the group did not run. */
|
|
29
|
+
outcomes?: Record<string, GroupMemberStatus>;
|
|
30
|
+
}
|
|
31
|
+
export interface RunGroupsReport {
|
|
32
|
+
groups?: RunGroupReport[];
|
|
33
|
+
fallbacks?: FanOutGroupFallback[];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* The report of `grouped`'s groups. `planned` are the groups a release gate's
|
|
37
|
+
* plan planned (`ReleasePlan.groups`), with their digests; `doc` is the
|
|
38
|
+
* change set they are in, which names each member's reads; `outcomes` is the
|
|
39
|
+
* run's `groupOutcomes`.
|
|
40
|
+
*/
|
|
41
|
+
export declare function runGroupsReport(input: {
|
|
42
|
+
grouped: FanOutPlan | undefined;
|
|
43
|
+
planned?: ReadonlyArray<FanOutGroup & {
|
|
44
|
+
digest: string | null;
|
|
45
|
+
error?: string;
|
|
46
|
+
}>;
|
|
47
|
+
doc?: ChangeSetDocument;
|
|
48
|
+
outcomes?: Record<string, GroupMemberStatus>;
|
|
49
|
+
}): RunGroupsReport;
|
|
50
|
+
/**
|
|
51
|
+
* The report as lines for a person: one per group naming its members, wave,
|
|
52
|
+
* digest and the reads its apply computes, then how each member ended, and,
|
|
53
|
+
* when the apply stopped part way, what `again` (the command to run again)
|
|
54
|
+
* plans next. Then why the components that could have grouped did not; a
|
|
55
|
+
* fallback of kind `off` is not printed.
|
|
56
|
+
*/
|
|
57
|
+
export declare function renderRunGroups(report: RunGroupsReport, again: string): string[];
|
|
58
|
+
//# sourceMappingURL=run-groups.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-groups.d.ts","sourceRoot":"","sources":["../../src/components/run-groups.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE9E,sCAAsC;AACtC,MAAM,WAAW,cAAc;IAC7B,gEAAgE;IAChE,UAAU,EAAE,MAAM,CAAC;IACnB,oDAAoD;IACpD,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,0IAA0I;IAC1I,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mIAAmI;IACnI,KAAK,CAAC,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/C,+FAA+F;IAC/F,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC9C;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,SAAS,CAAC,EAAE,mBAAmB,EAAE,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE;IACrC,OAAO,EAAE,UAAU,GAAG,SAAS,CAAC;IAChC,OAAO,CAAC,EAAE,aAAa,CAAC,WAAW,GAAG;QAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,GAAG,CAAC,EAAE,iBAAiB,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC9C,GAAG,eAAe,CAqBlB;AAaD;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAyBhF"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What a promote under a release, `components fan-out` and `run --components`
|
|
3
|
+
* say about the groups they applied as one (ws-107, #4465), as `pr-report`
|
|
4
|
+
* says it for a pull request since #4446: each group with its members, the
|
|
5
|
+
* wave it ran in, its digest and the reads its apply computes, how each
|
|
6
|
+
* member ended, and why each component that could have grouped did not.
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* The report of `grouped`'s groups. `planned` are the groups a release gate's
|
|
10
|
+
* plan planned (`ReleasePlan.groups`), with their digests; `doc` is the
|
|
11
|
+
* change set they are in, which names each member's reads; `outcomes` is the
|
|
12
|
+
* run's `groupOutcomes`.
|
|
13
|
+
*/
|
|
14
|
+
export function runGroupsReport(input) {
|
|
15
|
+
const waves = input.grouped?.waves ?? [];
|
|
16
|
+
const waveOf = new Map(waves.flatMap((w, i) => w.map((name) => [name, i + 1])));
|
|
17
|
+
const groups = input.planned?.length ? [...input.planned] : [...(input.grouped?.groups ?? [])];
|
|
18
|
+
const out = groups.map((g) => {
|
|
19
|
+
const reads = g.digest
|
|
20
|
+
? (input.doc?.members ?? []).filter((m) => m.group?.digest === g.digest).flatMap((m) => m.group.reads.map((ref) => ({ member: m.member, ref })))
|
|
21
|
+
: [];
|
|
22
|
+
const outcomes = Object.fromEntries(g.components.filter((c) => input.outcomes?.[c] !== undefined).map((c) => [c, input.outcomes[c]]));
|
|
23
|
+
return {
|
|
24
|
+
capability: g.capability,
|
|
25
|
+
components: [...g.components],
|
|
26
|
+
wave: waveOf.get(g.components[0]) ?? 0,
|
|
27
|
+
...(g.digest !== undefined ? { digest: g.digest } : {}),
|
|
28
|
+
...(g.error !== undefined ? { error: g.error } : {}),
|
|
29
|
+
...(reads.length > 0 ? { reads } : {}),
|
|
30
|
+
...(Object.keys(outcomes).length > 0 ? { outcomes } : {}),
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
const fallbacks = input.grouped?.fallbacks ?? [];
|
|
34
|
+
return { ...(out.length > 0 ? { groups: out } : {}), ...(fallbacks.length > 0 ? { fallbacks: [...fallbacks] } : {}) };
|
|
35
|
+
}
|
|
36
|
+
/** `a`, `b` and `c`. */
|
|
37
|
+
const listed = (items) => (items.length > 1 ? `${items.slice(0, -1).join(", ")} and ${items.at(-1)}` : (items[0] ?? ""));
|
|
38
|
+
const OUTCOME_WORDS = {
|
|
39
|
+
applied: "applied",
|
|
40
|
+
"no-changes": "had no changes",
|
|
41
|
+
partial: "applied in part, and what applied stays",
|
|
42
|
+
failed: "failed",
|
|
43
|
+
"not-started": "did not start",
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* The report as lines for a person: one per group naming its members, wave,
|
|
47
|
+
* digest and the reads its apply computes, then how each member ended, and,
|
|
48
|
+
* when the apply stopped part way, what `again` (the command to run again)
|
|
49
|
+
* plans next. Then why the components that could have grouped did not; a
|
|
50
|
+
* fallback of kind `off` is not printed.
|
|
51
|
+
*/
|
|
52
|
+
export function renderRunGroups(report, again) {
|
|
53
|
+
const out = [];
|
|
54
|
+
for (const g of report.groups ?? []) {
|
|
55
|
+
const reads = (g.reads ?? []).map((r) => `${r.member} reads ${r.ref}`);
|
|
56
|
+
out.push(`${listed(g.components)} plan and apply as one (${g.capability}, wave ${g.wave}${g.digest ? `, group ${g.digest}` : ""})` +
|
|
57
|
+
(g.error ? `; the group failed to plan, so nothing of it applied: ${g.error}` : reads.length > 0 ? `; ${listed(reads)}, known when the group applies` : ""));
|
|
58
|
+
const outcomes = g.outcomes ?? {};
|
|
59
|
+
const ran = g.components.filter((c) => outcomes[c] !== undefined);
|
|
60
|
+
if (ran.length === 0)
|
|
61
|
+
continue;
|
|
62
|
+
out.push(` ${ran.map((c) => `${c} ${OUTCOME_WORDS[outcomes[c]]}`).join("; ")}`);
|
|
63
|
+
const left = ran.filter((c) => outcomes[c] !== "applied" && outcomes[c] !== "no-changes");
|
|
64
|
+
if (left.length > 0) {
|
|
65
|
+
out.push(` the group's apply stopped part way and nothing that applied is undone; ${again} plans ${listed(left)} again, as one group where they still join`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const byWhy = new Map();
|
|
69
|
+
for (const f of report.fallbacks ?? []) {
|
|
70
|
+
if (f.kind === "off")
|
|
71
|
+
continue;
|
|
72
|
+
const why = `(${f.kind}): ${f.reason}`;
|
|
73
|
+
byWhy.set(why, [...(byWhy.get(why) ?? []), f.component]);
|
|
74
|
+
}
|
|
75
|
+
for (const [why, names] of byWhy)
|
|
76
|
+
out.push(`planned one by one, not as a group: ${names.join(", ")} ${why}`);
|
|
77
|
+
return out;
|
|
78
|
+
}
|
|
@@ -44,6 +44,7 @@ export declare const STARTER_VERB_FAMILIES: {
|
|
|
44
44
|
readonly secrets: readonly ["ensure-secret"];
|
|
45
45
|
readonly escapeHatch: readonly ["shell"];
|
|
46
46
|
readonly cloudflare: readonly ["wrangler-deploy", "wrangler-versions-promote", "r2-sync"];
|
|
47
|
+
readonly engineOutputs: readonly ["member-outputs"];
|
|
47
48
|
};
|
|
48
49
|
/**
|
|
49
50
|
* The built-in capability plugin carrying the entire Phase 1 starter verb
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"starter-plugin.d.ts","sourceRoot":"","sources":["../../src/components/starter-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;
|
|
1
|
+
{"version":3,"file":"starter-plugin.d.ts","sourceRoot":"","sources":["../../src/components/starter-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAyBH,OAAO,EAAqB,KAAK,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE/E;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB;aAChC,KAAK,YAAG,cAAc,EAAE,aAAa,EAAE,WAAW;aAIlD,IAAI,YAAG,eAAe;aAEtB,OAAO,YAAG,eAAe,EAAE,kBAAkB;aAC7C,mBAAmB,YAAG,MAAM,EAAE,mBAAmB,EAAE,QAAQ;aAC3D,iBAAiB,YAAG,sBAAsB,EAAE,WAAW;aAIvD,UAAU,YAAG,sBAAsB,EAAE,eAAe,EAAE,aAAa;aAGnE,OAAO,YAAG,eAAe;aACzB,WAAW,YAAG,OAAO;aAMrB,UAAU,YAAG,iBAAiB,EAAE,2BAA2B,EAAE,SAAS;aAItE,aAAa,YAAG,gBAAgB;CACxB,CAAC;AAkCX;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,EAAE,gBAUrC,CAAC"}
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
* from verb modules, so neither needed to change for this migration —
|
|
26
26
|
* the compatibility guarantee #559 asks for.
|
|
27
27
|
*/
|
|
28
|
-
import { dockerBuildCapability, zipPackageCapability, jvmBuildCapability, generateSbomCapability, publishImageCapability, publishArtifactCapability, signCapability, attestProvenanceCapability, verifyCapability, scanVulnerabilitiesCapability, vulnGateCapability, waitClusterHealthyCapability, waitEndpointCapability, healthGateCapability, shellCapability, ensureSecretCapability, wranglerDeployCapability, wranglerVersionsPromoteCapability, r2SyncCapability, } from "./verbs/index.js";
|
|
28
|
+
import { dockerBuildCapability, zipPackageCapability, jvmBuildCapability, generateSbomCapability, publishImageCapability, publishArtifactCapability, signCapability, attestProvenanceCapability, verifyCapability, scanVulnerabilitiesCapability, vulnGateCapability, waitClusterHealthyCapability, waitEndpointCapability, healthGateCapability, shellCapability, ensureSecretCapability, wranglerDeployCapability, wranglerVersionsPromoteCapability, r2SyncCapability, memberOutputsStarterCapability, } from "./verbs/index.js";
|
|
29
29
|
import { ownPackageVersion } from "./capability-plugin.js";
|
|
30
30
|
/**
|
|
31
31
|
* Every `kind` in the starter verb set, grouped by family, per epic #551 and
|
|
@@ -59,6 +59,10 @@ export const STARTER_VERB_FAMILIES = {
|
|
|
59
59
|
// there is no cloudflare lexicon for these three verbs to live in. Revisit
|
|
60
60
|
// if/when the zone-plane lexicon (#1294) lands.
|
|
61
61
|
cloudflare: ["wrangler-deploy", "wrangler-versions-promote", "r2-sync"],
|
|
62
|
+
// Another workspace member's outputs, read through the engine it runs on
|
|
63
|
+
// (#4455). One agnostic verb; each engine's lexicon contributes a source
|
|
64
|
+
// (`CapabilityPlugin.engineOutputSources`).
|
|
65
|
+
engineOutputs: ["member-outputs"],
|
|
62
66
|
};
|
|
63
67
|
/**
|
|
64
68
|
* Every starter-set verb, in the same registration order Phase 1's
|
|
@@ -88,6 +92,7 @@ function starterCapabilities() {
|
|
|
88
92
|
wranglerDeployCapability,
|
|
89
93
|
wranglerVersionsPromoteCapability,
|
|
90
94
|
r2SyncCapability,
|
|
95
|
+
memberOutputsStarterCapability,
|
|
91
96
|
];
|
|
92
97
|
}
|
|
93
98
|
/**
|
|
@@ -52,6 +52,7 @@ export * from "./verify.js";
|
|
|
52
52
|
export * from "./run-agent.js";
|
|
53
53
|
export * from "./wrangler.js";
|
|
54
54
|
export * from "./r2-sync.js";
|
|
55
|
+
export * from "./member-outputs.js";
|
|
55
56
|
export * from "./vuln-scan.js";
|
|
56
57
|
export * from "./vex.js";
|
|
57
58
|
export * from "./license-policy.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/verbs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/verbs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AAEH,cAAc,iBAAiB,CAAC;AAChC,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC;AACjC,cAAc,QAAQ,CAAC;AACvB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,OAAO,CAAC;AACtB,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,kBAAkB,CAAC"}
|
|
@@ -52,6 +52,7 @@ export * from "./verify.js";
|
|
|
52
52
|
export * from "./run-agent.js";
|
|
53
53
|
export * from "./wrangler.js";
|
|
54
54
|
export * from "./r2-sync.js";
|
|
55
|
+
export * from "./member-outputs.js";
|
|
55
56
|
export * from "./vuln-scan.js";
|
|
56
57
|
export * from "./vex.js";
|
|
57
58
|
export * from "./license-policy.js";
|