@mysten-incubation/devstack 0.0.1 → 0.1.1
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 +8 -4
- package/dashboard-ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
- package/dashboard-ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
- package/dashboard-ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
- package/dashboard-ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
- package/dashboard-ui/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
- package/dashboard-ui/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
- package/dashboard-ui/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
- package/dashboard-ui/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
- package/dashboard-ui/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
- package/dashboard-ui/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
- package/dashboard-ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
- package/dashboard-ui/assets/index-Bmi1UtAg.js +1356 -0
- package/dashboard-ui/assets/index-D5EShVt4.js +3 -0
- package/dashboard-ui/assets/index-Deml9drg.css +1 -0
- package/dashboard-ui/index.html +13 -0
- package/dist/api/define-capabilities.d.mts +14 -3
- package/dist/api/define-capabilities.mjs +18 -1
- package/dist/api/define-capabilities.mjs.map +1 -1
- package/dist/api/define-devstack.d.mts +1 -1
- package/dist/api/define-devstack.mjs +6 -26
- package/dist/api/define-devstack.mjs.map +1 -1
- package/dist/api/define-plugin.d.mts +1 -0
- package/dist/api/define-plugin.mjs +2 -0
- package/dist/api/inference-network.d.mts +132 -0
- package/dist/api/inference-network.mjs +105 -16
- package/dist/api/inference-network.mjs.map +1 -1
- package/dist/api/plugin-errors.d.mts +7 -0
- package/dist/api/run-stack.d.mts +20 -9
- package/dist/api/run-stack.mjs +56 -29
- package/dist/api/run-stack.mjs.map +1 -1
- package/dist/build-integrations/playwright/config.d.mts +6 -4
- package/dist/build-integrations/playwright/config.mjs +5 -3
- package/dist/build-integrations/playwright/config.mjs.map +1 -1
- package/dist/build-integrations/playwright/errors.d.mts +1 -1
- package/dist/build-integrations/playwright/global-setup.d.mts +43 -17
- package/dist/build-integrations/playwright/global-setup.mjs +250 -13
- package/dist/build-integrations/playwright/global-setup.mjs.map +1 -1
- package/dist/build-integrations/playwright/index.d.mts +5 -3
- package/dist/build-integrations/playwright/index.mjs +4 -2
- package/dist/build-integrations/playwright/stack-context.d.mts +0 -1
- package/dist/build-integrations/playwright/stack-context.mjs +24 -63
- package/dist/build-integrations/playwright/stack-context.mjs.map +1 -1
- package/dist/build-integrations/playwright/wallet-context.d.mts +7 -10
- package/dist/build-integrations/playwright/wallet-context.mjs +8 -13
- package/dist/build-integrations/playwright/wallet-context.mjs.map +1 -1
- package/dist/build-integrations/runtime/cold-start-url.d.mts +5 -0
- package/dist/build-integrations/runtime/cold-start-url.mjs +4 -3
- package/dist/build-integrations/runtime/cold-start-url.mjs.map +1 -1
- package/dist/build-integrations/runtime/conventional-routes.d.mts +51 -0
- package/dist/build-integrations/runtime/conventional-routes.mjs +92 -0
- package/dist/build-integrations/runtime/conventional-routes.mjs.map +1 -0
- package/dist/build-integrations/runtime/discover.d.mts +38 -30
- package/dist/build-integrations/runtime/discover.mjs +73 -70
- package/dist/build-integrations/runtime/discover.mjs.map +1 -1
- package/dist/build-integrations/runtime/endpoint-registry.d.mts +3 -1
- package/dist/build-integrations/runtime/endpoint-registry.mjs +3 -1
- package/dist/build-integrations/runtime/endpoint-registry.mjs.map +1 -1
- package/dist/build-integrations/runtime/index.d.mts +7 -2
- package/dist/build-integrations/runtime/index.mjs +9 -2
- package/dist/build-integrations/runtime/manifest-types.d.mts +2 -0
- package/dist/build-integrations/runtime/manifest-types.mjs +3 -0
- package/dist/build-integrations/runtime/playwright-stack-context-slot.d.mts +29 -0
- package/dist/build-integrations/runtime/playwright-stack-context-slot.mjs +10 -0
- package/dist/build-integrations/runtime/playwright-stack-context-slot.mjs.map +1 -0
- package/dist/build-integrations/runtime/read-stack-context.d.mts +1 -1
- package/dist/build-integrations/runtime/read-stack-context.mjs +10 -4
- package/dist/build-integrations/runtime/read-stack-context.mjs.map +1 -1
- package/dist/build-integrations/runtime/resolve-discovery-env.d.mts +48 -0
- package/dist/build-integrations/runtime/resolve-discovery-env.mjs +42 -0
- package/dist/build-integrations/runtime/resolve-discovery-env.mjs.map +1 -0
- package/dist/build-integrations/runtime/stack-context.d.mts +1 -1
- package/dist/build-integrations/runtime/wallet-paths.mjs +2 -0
- package/dist/build-integrations/vite/index.d.mts +51 -0
- package/dist/build-integrations/vite/index.mjs +73 -0
- package/dist/build-integrations/vite/index.mjs.map +1 -0
- package/dist/build-integrations/vitest/env.d.mts +4 -3
- package/dist/build-integrations/vitest/env.mjs +6 -4
- package/dist/build-integrations/vitest/env.mjs.map +1 -1
- package/dist/build-integrations/vitest/errors.d.mts +25 -4
- package/dist/build-integrations/vitest/errors.mjs +15 -2
- package/dist/build-integrations/vitest/errors.mjs.map +1 -1
- package/dist/build-integrations/vitest/index.d.mts +2 -2
- package/dist/build-integrations/vitest/index.mjs +3 -3
- package/dist/build-integrations/vitest/setup.d.mts +4 -2
- package/dist/build-integrations/vitest/setup.mjs +2 -2
- package/dist/build-integrations/vitest/setup.mjs.map +1 -1
- package/dist/build-integrations/vitest/stack-context.d.mts +0 -1
- package/dist/build-integrations/vitest/stack-context.mjs +33 -13
- package/dist/build-integrations/vitest/stack-context.mjs.map +1 -1
- package/dist/cli/bail.mjs +23 -0
- package/dist/cli/bail.mjs.map +1 -0
- package/dist/{surfaces/cli/commands → cli}/doctor-probes.mjs +26 -16
- package/dist/cli/doctor-probes.mjs.map +1 -0
- package/dist/cli/main.d.mts +15 -1
- package/dist/cli/main.mjs +166 -482
- package/dist/cli/main.mjs.map +1 -1
- package/dist/cli/prune-direct.mjs +31 -201
- package/dist/cli/prune-direct.mjs.map +1 -1
- package/dist/cli/snapshot-reader.mjs +14 -11
- package/dist/cli/snapshot-reader.mjs.map +1 -1
- package/dist/cli/up-lifecycle.mjs +4 -1
- package/dist/cli/up-lifecycle.mjs.map +1 -1
- package/dist/cli/wirings/apply.mjs +95 -0
- package/dist/cli/wirings/apply.mjs.map +1 -0
- package/dist/cli/wirings/build-verb-layers.mjs +42 -0
- package/dist/cli/wirings/build-verb-layers.mjs.map +1 -0
- package/dist/cli/wirings/config-loader.mjs +69 -0
- package/dist/cli/wirings/config-loader.mjs.map +1 -0
- package/dist/cli/wirings/engine-command.mjs +30 -0
- package/dist/cli/wirings/engine-command.mjs.map +1 -0
- package/dist/cli/wirings/identity.mjs +72 -0
- package/dist/cli/wirings/identity.mjs.map +1 -0
- package/dist/cli/wirings/provide-file-system.mjs +7 -0
- package/dist/cli/wirings/provide-file-system.mjs.map +1 -0
- package/dist/cli/wirings/snapshot.mjs +177 -0
- package/dist/cli/wirings/snapshot.mjs.map +1 -0
- package/dist/cli/wirings/up.mjs +287 -0
- package/dist/cli/wirings/up.mjs.map +1 -0
- package/dist/cli/wirings/wipe.mjs +40 -0
- package/dist/cli/wirings/wipe.mjs.map +1 -0
- package/dist/contracts/capability-decl.d.mts +0 -2
- package/dist/contracts/codegenable.d.mts +43 -0
- package/dist/contracts/container-runtime.d.mts +26 -1
- package/dist/contracts/faucet-strategy.d.mts +25 -0
- package/dist/contracts/funding-strategy.d.mts +42 -0
- package/dist/contracts/plugin-expander.mjs +60 -0
- package/dist/contracts/plugin-expander.mjs.map +1 -0
- package/dist/contracts/projection.d.mts +5 -3
- package/dist/contracts/renderer.d.mts +23 -0
- package/dist/contracts/routable.d.mts +14 -1
- package/dist/contracts/snapshotable.d.mts +25 -3
- package/dist/contracts/wallet-protocol.d.mts +52 -0
- package/dist/contracts/wallet-protocol.mjs +52 -0
- package/dist/contracts/wallet-protocol.mjs.map +1 -0
- package/dist/index.d.mts +26 -25
- package/dist/index.mjs +20 -13
- package/dist/{runtime → orchestrators}/built-in-plugin-layers.mjs +10 -5
- package/dist/orchestrators/built-in-plugin-layers.mjs.map +1 -0
- package/dist/orchestrators/codegen/bindings.d.mts +1 -2
- package/dist/orchestrators/codegen/bindings.mjs +52 -186
- package/dist/orchestrators/codegen/bindings.mjs.map +1 -1
- package/dist/orchestrators/codegen/emit.mjs +19 -1
- package/dist/orchestrators/codegen/emit.mjs.map +1 -1
- package/dist/orchestrators/codegen/errors.mjs +8 -3
- package/dist/orchestrators/codegen/errors.mjs.map +1 -1
- package/dist/orchestrators/codegen/format.mjs +47 -39
- package/dist/orchestrators/codegen/format.mjs.map +1 -1
- package/dist/orchestrators/codegen/gitignore.mjs +3 -1
- package/dist/orchestrators/codegen/gitignore.mjs.map +1 -1
- package/dist/orchestrators/codegen/output-location.mjs +41 -0
- package/dist/orchestrators/codegen/output-location.mjs.map +1 -0
- package/dist/orchestrators/codegen/paths.d.mts +1 -1
- package/dist/orchestrators/codegen/paths.mjs +40 -14
- package/dist/orchestrators/codegen/paths.mjs.map +1 -1
- package/dist/orchestrators/codegen/permissions.mjs +3 -1
- package/dist/orchestrators/codegen/permissions.mjs.map +1 -1
- package/dist/orchestrators/codegen/service.mjs +157 -105
- package/dist/orchestrators/codegen/service.mjs.map +1 -1
- package/dist/orchestrators/lifecycle-prune/errors.mjs +31 -0
- package/dist/orchestrators/lifecycle-prune/errors.mjs.map +1 -0
- package/dist/orchestrators/lifecycle-prune/index.mjs +350 -0
- package/dist/orchestrators/lifecycle-prune/index.mjs.map +1 -0
- package/dist/orchestrators/router/cleanup.mjs +26 -27
- package/dist/orchestrators/router/cleanup.mjs.map +1 -1
- package/dist/orchestrators/router/entrypoints.mjs +2 -2
- package/dist/orchestrators/router/entrypoints.mjs.map +1 -1
- package/dist/orchestrators/router/file-provider.mjs +14 -5
- package/dist/orchestrators/router/file-provider.mjs.map +1 -1
- package/dist/orchestrators/router/hostname.mjs +19 -55
- package/dist/orchestrators/router/hostname.mjs.map +1 -1
- package/dist/orchestrators/router/index.mjs +11 -0
- package/dist/orchestrators/router/profile.mjs +2 -2
- package/dist/orchestrators/router/sentinels.mjs +26 -0
- package/dist/orchestrators/router/sentinels.mjs.map +1 -0
- package/dist/orchestrators/router/service.mjs +40 -37
- package/dist/orchestrators/router/service.mjs.map +1 -1
- package/dist/orchestrators/router/traefik-container.mjs +27 -16
- package/dist/orchestrators/router/traefik-container.mjs.map +1 -1
- package/dist/{substrate/runtime → orchestrators}/run.mjs +26 -21
- package/dist/orchestrators/run.mjs.map +1 -0
- package/dist/orchestrators/runtime-composition.d.mts +1 -1
- package/dist/orchestrators/runtime-composition.mjs +123 -39
- package/dist/orchestrators/runtime-composition.mjs.map +1 -1
- package/dist/orchestrators/snapshot/capture-command.d.mts +1 -0
- package/dist/orchestrators/snapshot/capture-command.mjs +25 -0
- package/dist/orchestrators/snapshot/capture-command.mjs.map +1 -0
- package/dist/orchestrators/snapshot/capture.mjs +42 -28
- package/dist/orchestrators/snapshot/capture.mjs.map +1 -1
- package/dist/orchestrators/snapshot/descriptor.mjs +35 -10
- package/dist/orchestrators/snapshot/descriptor.mjs.map +1 -1
- package/dist/orchestrators/snapshot/identity-guard.mjs +1 -1
- package/dist/orchestrators/snapshot/index.mjs +13 -0
- package/dist/orchestrators/snapshot/integrity.d.mts +1 -1
- package/dist/orchestrators/snapshot/integrity.mjs +73 -17
- package/dist/orchestrators/snapshot/integrity.mjs.map +1 -1
- package/dist/orchestrators/snapshot/pending-marker.d.mts +1 -0
- package/dist/orchestrators/snapshot/pending-marker.mjs +99 -0
- package/dist/orchestrators/snapshot/pending-marker.mjs.map +1 -0
- package/dist/orchestrators/snapshot/phase-error.mjs +23 -0
- package/dist/orchestrators/snapshot/phase-error.mjs.map +1 -0
- package/dist/orchestrators/snapshot/prune.mjs +20 -55
- package/dist/orchestrators/snapshot/prune.mjs.map +1 -1
- package/dist/orchestrators/snapshot/recover-pending.d.mts +1 -0
- package/dist/orchestrators/snapshot/recover-pending.mjs +223 -0
- package/dist/orchestrators/snapshot/recover-pending.mjs.map +1 -0
- package/dist/orchestrators/snapshot/restore.mjs +118 -84
- package/dist/orchestrators/snapshot/restore.mjs.map +1 -1
- package/dist/orchestrators/snapshot/service.mjs +53 -56
- package/dist/orchestrators/snapshot/service.mjs.map +1 -1
- package/dist/orchestrators/snapshot/state-document.d.mts +1 -0
- package/dist/orchestrators/snapshot/state-document.mjs +47 -7
- package/dist/orchestrators/snapshot/state-document.mjs.map +1 -1
- package/dist/orchestrators/snapshot/wipe.mjs +67 -10
- package/dist/orchestrators/snapshot/wipe.mjs.map +1 -1
- package/dist/plugins/account/codegen.mjs +9 -8
- package/dist/plugins/account/codegen.mjs.map +1 -1
- package/dist/plugins/account/errors.d.mts +33 -6
- package/dist/plugins/account/errors.mjs.map +1 -1
- package/dist/plugins/account/funding.d.mts +29 -19
- package/dist/plugins/account/funding.mjs +84 -66
- package/dist/plugins/account/funding.mjs.map +1 -1
- package/dist/plugins/account/index.d.mts +2 -4
- package/dist/plugins/account/index.mjs +64 -31
- package/dist/plugins/account/index.mjs.map +1 -1
- package/dist/plugins/account/keypair.mjs +6 -9
- package/dist/plugins/account/keypair.mjs.map +1 -1
- package/dist/plugins/account/lease.mjs +1 -0
- package/dist/plugins/account/lease.mjs.map +1 -1
- package/dist/plugins/account/registry.d.mts +14 -1
- package/dist/plugins/account/registry.mjs +18 -18
- package/dist/plugins/account/registry.mjs.map +1 -1
- package/dist/plugins/account/service.d.mts +23 -4
- package/dist/plugins/account/service.mjs +83 -45
- package/dist/plugins/account/service.mjs.map +1 -1
- package/dist/plugins/account/snapshot.mjs +2 -5
- package/dist/plugins/account/snapshot.mjs.map +1 -1
- package/dist/plugins/account/spans.mjs +16 -0
- package/dist/plugins/account/spans.mjs.map +1 -0
- package/dist/plugins/account/variants/keystore.mjs +6 -8
- package/dist/plugins/account/variants/keystore.mjs.map +1 -1
- package/dist/plugins/action/build-context.d.mts +3 -2
- package/dist/plugins/action/errors.d.mts +16 -12
- package/dist/plugins/action/errors.mjs.map +1 -1
- package/dist/plugins/action/execute.mjs +65 -103
- package/dist/plugins/action/execute.mjs.map +1 -1
- package/dist/plugins/action/index.d.mts +0 -2
- package/dist/plugins/action/index.mjs +17 -13
- package/dist/plugins/action/index.mjs.map +1 -1
- package/dist/plugins/action/service.mjs +38 -35
- package/dist/plugins/action/service.mjs.map +1 -1
- package/dist/plugins/action/spans.mjs +11 -0
- package/dist/plugins/action/spans.mjs.map +1 -0
- package/dist/plugins/coin/codegen.mjs +9 -8
- package/dist/plugins/coin/codegen.mjs.map +1 -1
- package/dist/plugins/coin/discovery.mjs +8 -4
- package/dist/plugins/coin/discovery.mjs.map +1 -1
- package/dist/plugins/coin/index.d.mts +11 -29
- package/dist/plugins/coin/index.mjs +56 -27
- package/dist/plugins/coin/index.mjs.map +1 -1
- package/dist/plugins/coin/metadata.mjs +8 -15
- package/dist/plugins/coin/metadata.mjs.map +1 -1
- package/dist/plugins/coin/mint.d.mts +30 -11
- package/dist/plugins/coin/mint.mjs +78 -74
- package/dist/plugins/coin/mint.mjs.map +1 -1
- package/dist/plugins/coin/registry.mjs +4 -7
- package/dist/plugins/coin/registry.mjs.map +1 -1
- package/dist/plugins/coin/service.d.mts +39 -1
- package/dist/plugins/coin/service.mjs +11 -4
- package/dist/plugins/coin/service.mjs.map +1 -1
- package/dist/plugins/coin/spans.mjs +20 -0
- package/dist/plugins/coin/spans.mjs.map +1 -0
- package/dist/plugins/dashboard/domain.mjs +402 -0
- package/dist/plugins/dashboard/domain.mjs.map +1 -0
- package/dist/plugins/dashboard/index.d.mts +29 -0
- package/dist/plugins/dashboard/index.mjs +91 -0
- package/dist/plugins/dashboard/index.mjs.map +1 -0
- package/dist/plugins/dashboard/origin-policy.mjs +36 -0
- package/dist/plugins/dashboard/origin-policy.mjs.map +1 -0
- package/dist/plugins/dashboard/routable.mjs +27 -0
- package/dist/plugins/dashboard/routable.mjs.map +1 -0
- package/dist/plugins/dashboard/schema/builder.mjs +21 -0
- package/dist/plugins/dashboard/schema/builder.mjs.map +1 -0
- package/dist/plugins/dashboard/schema/enums.mjs +72 -0
- package/dist/plugins/dashboard/schema/enums.mjs.map +1 -0
- package/dist/plugins/dashboard/schema/root.mjs +351 -0
- package/dist/plugins/dashboard/schema/root.mjs.map +1 -0
- package/dist/plugins/dashboard/schema/types.mjs +508 -0
- package/dist/plugins/dashboard/schema/types.mjs.map +1 -0
- package/dist/plugins/dashboard/schema.mjs +11 -0
- package/dist/plugins/dashboard/schema.mjs.map +1 -0
- package/dist/plugins/dashboard/server.mjs +166 -0
- package/dist/plugins/dashboard/server.mjs.map +1 -0
- package/dist/plugins/deepbook/deploy.mjs +53 -115
- package/dist/plugins/deepbook/deploy.mjs.map +1 -1
- package/dist/plugins/deepbook/errors.mjs +1 -0
- package/dist/plugins/deepbook/errors.mjs.map +1 -1
- package/dist/plugins/deepbook/faucet-strategy.mjs +47 -34
- package/dist/plugins/deepbook/faucet-strategy.mjs.map +1 -1
- package/dist/plugins/deepbook/hash.mjs +9 -0
- package/dist/plugins/deepbook/hash.mjs.map +1 -0
- package/dist/plugins/deepbook/index.d.mts +1 -10
- package/dist/plugins/deepbook/index.mjs +25 -22
- package/dist/plugins/deepbook/index.mjs.map +1 -1
- package/dist/plugins/deepbook/pyth/index.mjs +26 -55
- package/dist/plugins/deepbook/pyth/index.mjs.map +1 -1
- package/dist/plugins/deepbook/snapshot.mjs +17 -29
- package/dist/plugins/deepbook/snapshot.mjs.map +1 -1
- package/dist/plugins/deepbook/spans.mjs +18 -0
- package/dist/plugins/deepbook/spans.mjs.map +1 -0
- package/dist/plugins/deepbook/type-strings.mjs +65 -0
- package/dist/plugins/deepbook/type-strings.mjs.map +1 -0
- package/dist/plugins/deepbook/types.d.mts +2 -3
- package/dist/plugins/deepbook/types.mjs.map +1 -1
- package/dist/plugins/faucet/dispatcher.d.mts +21 -2
- package/dist/plugins/faucet/dispatcher.mjs +1 -2
- package/dist/plugins/faucet/dispatcher.mjs.map +1 -1
- package/dist/plugins/faucet/errors.d.mts +11 -24
- package/dist/plugins/faucet/errors.mjs.map +1 -1
- package/dist/plugins/faucet/http.mjs +33 -14
- package/dist/plugins/faucet/http.mjs.map +1 -1
- package/dist/plugins/faucet/index.d.mts +15 -5
- package/dist/plugins/faucet/index.mjs +3 -0
- package/dist/plugins/faucet/index.mjs.map +1 -1
- package/dist/plugins/faucet/spans.mjs +12 -0
- package/dist/plugins/faucet/spans.mjs.map +1 -0
- package/dist/plugins/host-service/errors.d.mts +1 -1
- package/dist/plugins/host-service/index.mjs +34 -8
- package/dist/plugins/host-service/index.mjs.map +1 -1
- package/dist/plugins/host-service/routable.mjs +2 -1
- package/dist/plugins/host-service/routable.mjs.map +1 -1
- package/dist/plugins/host-service/service.d.mts +21 -0
- package/dist/plugins/host-service/service.mjs +136 -81
- package/dist/plugins/host-service/service.mjs.map +1 -1
- package/dist/plugins/internal/acquire-on-chain-artifact.mjs +23 -0
- package/dist/plugins/internal/acquire-on-chain-artifact.mjs.map +1 -0
- package/dist/plugins/internal/codegen-helpers.mjs +18 -0
- package/dist/plugins/internal/codegen-helpers.mjs.map +1 -0
- package/dist/plugins/internal/funding-failure-error.mjs +32 -0
- package/dist/plugins/internal/funding-failure-error.mjs.map +1 -0
- package/dist/plugins/package/build.mjs +1 -1
- package/dist/plugins/package/build.mjs.map +1 -1
- package/dist/plugins/package/codegen.mjs +26 -0
- package/dist/plugins/package/codegen.mjs.map +1 -1
- package/dist/plugins/package/errors.d.mts +16 -6
- package/dist/plugins/package/errors.mjs.map +1 -1
- package/dist/plugins/package/index.d.mts +0 -4
- package/dist/plugins/package/index.mjs +27 -21
- package/dist/plugins/package/index.mjs.map +1 -1
- package/dist/plugins/package/mode-known.mjs +26 -12
- package/dist/plugins/package/mode-known.mjs.map +1 -1
- package/dist/plugins/package/mode-local.mjs +47 -41
- package/dist/plugins/package/mode-local.mjs.map +1 -1
- package/dist/plugins/package/publish-executor.mjs +55 -114
- package/dist/plugins/package/publish-executor.mjs.map +1 -1
- package/dist/plugins/package/registry.mjs +2 -1
- package/dist/plugins/package/registry.mjs.map +1 -1
- package/dist/plugins/package/service.mjs.map +1 -1
- package/dist/plugins/package/spans.mjs +14 -0
- package/dist/plugins/package/spans.mjs.map +1 -0
- package/dist/plugins/postgres/db-ensure.mjs +19 -12
- package/dist/plugins/postgres/db-ensure.mjs.map +1 -1
- package/dist/plugins/postgres/errors.d.mts +5 -0
- package/dist/plugins/postgres/errors.mjs.map +1 -1
- package/dist/plugins/postgres/index.mjs +10 -17
- package/dist/plugins/postgres/index.mjs.map +1 -1
- package/dist/plugins/postgres/service.mjs +58 -24
- package/dist/plugins/postgres/service.mjs.map +1 -1
- package/dist/plugins/postgres/snapshot.mjs.map +1 -1
- package/dist/plugins/postgres/spans.mjs +11 -0
- package/dist/plugins/postgres/spans.mjs.map +1 -0
- package/dist/plugins/router-entrypoints.mjs +4 -4
- package/dist/plugins/router-entrypoints.mjs.map +1 -1
- package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs +15 -13
- package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs.map +1 -1
- package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs +15 -19
- package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs.map +1 -1
- package/dist/plugins/seal/codegen.d.mts +2 -3
- package/dist/plugins/seal/codegen.mjs.map +1 -1
- package/dist/plugins/seal/config-render.mjs +35 -8
- package/dist/plugins/seal/config-render.mjs.map +1 -1
- package/dist/plugins/seal/deploy.mjs +31 -39
- package/dist/plugins/seal/deploy.mjs.map +1 -1
- package/dist/plugins/seal/errors.d.mts +1 -3
- package/dist/plugins/seal/errors.mjs +7 -1
- package/dist/plugins/seal/errors.mjs.map +1 -1
- package/dist/plugins/seal/index.d.mts +1 -6
- package/dist/plugins/seal/index.mjs +40 -14
- package/dist/plugins/seal/index.mjs.map +1 -1
- package/dist/plugins/seal/key-manager.d.mts +1 -9
- package/dist/plugins/seal/key-manager.mjs +2 -18
- package/dist/plugins/seal/key-manager.mjs.map +1 -1
- package/dist/plugins/seal/key-server.mjs +37 -36
- package/dist/plugins/seal/key-server.mjs.map +1 -1
- package/dist/plugins/seal/keygen.mjs +16 -17
- package/dist/plugins/seal/keygen.mjs.map +1 -1
- package/dist/plugins/seal/mode/fork-known.mjs +36 -14
- package/dist/plugins/seal/mode/fork-known.mjs.map +1 -1
- package/dist/plugins/seal/mode/live.d.mts +6 -4
- package/dist/plugins/seal/mode/live.mjs +14 -21
- package/dist/plugins/seal/mode/live.mjs.map +1 -1
- package/dist/plugins/seal/mode/local-keygen.mjs +57 -21
- package/dist/plugins/seal/mode/local-keygen.mjs.map +1 -1
- package/dist/plugins/seal/registry-publish.mjs +1 -0
- package/dist/plugins/seal/registry-publish.mjs.map +1 -1
- package/dist/plugins/seal/routable.mjs.map +1 -1
- package/dist/plugins/seal/service.mjs.map +1 -1
- package/dist/plugins/seal/spans.mjs +18 -0
- package/dist/plugins/seal/spans.mjs.map +1 -0
- package/dist/plugins/sui/auto-tick.mjs +17 -23
- package/dist/plugins/sui/auto-tick.mjs.map +1 -1
- package/dist/plugins/sui/chain-build-container.mjs +18 -0
- package/dist/plugins/sui/chain-build-container.mjs.map +1 -0
- package/dist/plugins/sui/chain-probe.d.mts +5 -5
- package/dist/plugins/sui/chain-probe.mjs +28 -58
- package/dist/plugins/sui/chain-probe.mjs.map +1 -1
- package/dist/plugins/sui/codegen.mjs +26 -0
- package/dist/plugins/sui/codegen.mjs.map +1 -1
- package/dist/plugins/sui/errors.d.mts +2 -29
- package/dist/plugins/sui/errors.mjs +1 -3
- package/dist/plugins/sui/errors.mjs.map +1 -1
- package/dist/plugins/sui/fork-faucet-strategy.d.mts +1 -0
- package/dist/plugins/sui/fork-faucet-strategy.mjs +55 -0
- package/dist/plugins/sui/fork-faucet-strategy.mjs.map +1 -0
- package/dist/plugins/sui/fork-orchestration.d.mts +1 -0
- package/dist/plugins/sui/fork-orchestration.mjs +170 -2
- package/dist/plugins/sui/fork-orchestration.mjs.map +1 -1
- package/dist/plugins/sui/fork-transaction.d.mts +2 -0
- package/dist/plugins/sui/fork-transaction.mjs +92 -28
- package/dist/plugins/sui/fork-transaction.mjs.map +1 -1
- package/dist/plugins/sui/index.d.mts +33 -70
- package/dist/plugins/sui/index.mjs +58 -35
- package/dist/plugins/sui/index.mjs.map +1 -1
- package/dist/plugins/{faucet/strategies/sui-local.mjs → sui/local-faucet-strategy.mjs} +10 -7
- package/dist/plugins/sui/local-faucet-strategy.mjs.map +1 -0
- package/dist/plugins/sui/mode/external.mjs +7 -13
- package/dist/plugins/sui/mode/external.mjs.map +1 -1
- package/dist/plugins/sui/mode/fork.mjs +136 -59
- package/dist/plugins/sui/mode/fork.mjs.map +1 -1
- package/dist/plugins/sui/mode/live.mjs +10 -16
- package/dist/plugins/sui/mode/live.mjs.map +1 -1
- package/dist/plugins/sui/mode/local.mjs +37 -36
- package/dist/plugins/sui/mode/local.mjs.map +1 -1
- package/dist/plugins/sui/mode/shared-boot.mjs +38 -115
- package/dist/plugins/sui/mode/shared-boot.mjs.map +1 -1
- package/dist/plugins/sui/mode/shared.d.mts +1 -5
- package/dist/plugins/sui/mode/shared.mjs.map +1 -1
- package/dist/plugins/sui/mode/spec.d.mts +18 -0
- package/dist/plugins/sui/move-summary-runner.mjs +207 -0
- package/dist/plugins/sui/move-summary-runner.mjs.map +1 -0
- package/dist/plugins/sui/network-resolver.d.mts +4 -3
- package/dist/plugins/sui/service.mjs.map +1 -1
- package/dist/plugins/sui/snapshot.mjs +3 -0
- package/dist/plugins/sui/snapshot.mjs.map +1 -1
- package/dist/plugins/sui/spans.mjs +17 -0
- package/dist/plugins/sui/spans.mjs.map +1 -0
- package/dist/plugins/wallet/codegen.d.mts +0 -1
- package/dist/plugins/wallet/codegen.mjs +8 -9
- package/dist/plugins/wallet/codegen.mjs.map +1 -1
- package/dist/plugins/wallet/index.d.mts +6 -8
- package/dist/plugins/wallet/index.mjs +46 -35
- package/dist/plugins/wallet/index.mjs.map +1 -1
- package/dist/plugins/wallet/origin-policy.mjs +12 -28
- package/dist/plugins/wallet/origin-policy.mjs.map +1 -1
- package/dist/plugins/wallet/pairing.mjs +6 -4
- package/dist/plugins/wallet/pairing.mjs.map +1 -1
- package/dist/plugins/wallet/protocol.d.mts +1 -0
- package/dist/plugins/wallet/protocol.mjs +5 -44
- package/dist/plugins/wallet/protocol.mjs.map +1 -1
- package/dist/plugins/wallet/routable.mjs +2 -8
- package/dist/plugins/wallet/routable.mjs.map +1 -1
- package/dist/plugins/wallet/server.mjs +36 -44
- package/dist/plugins/wallet/server.mjs.map +1 -1
- package/dist/plugins/wallet/service.d.mts +1 -5
- package/dist/plugins/wallet/service.mjs +22 -18
- package/dist/plugins/wallet/service.mjs.map +1 -1
- package/dist/plugins/wallet/spans.mjs +22 -0
- package/dist/plugins/wallet/spans.mjs.map +1 -0
- package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs +33 -8
- package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs.map +1 -1
- package/dist/plugins/walrus/codegen.d.mts +3 -3
- package/dist/plugins/walrus/codegen.mjs.map +1 -1
- package/dist/plugins/walrus/deploy-paths.mjs +21 -5
- package/dist/plugins/walrus/deploy-paths.mjs.map +1 -1
- package/dist/plugins/walrus/deploy.mjs +67 -69
- package/dist/plugins/walrus/deploy.mjs.map +1 -1
- package/dist/plugins/walrus/errors.mjs +1 -0
- package/dist/plugins/walrus/errors.mjs.map +1 -1
- package/dist/plugins/walrus/faucet-strategy.mjs +12 -7
- package/dist/plugins/walrus/faucet-strategy.mjs.map +1 -1
- package/dist/plugins/walrus/index.d.mts +2 -13
- package/dist/plugins/walrus/index.mjs +18 -23
- package/dist/plugins/walrus/index.mjs.map +1 -1
- package/dist/plugins/walrus/mode/known-deploy.mjs +7 -5
- package/dist/plugins/walrus/mode/known-deploy.mjs.map +1 -1
- package/dist/plugins/walrus/mode/local-cluster.mjs +26 -7
- package/dist/plugins/walrus/mode/local-cluster.mjs.map +1 -1
- package/dist/plugins/walrus/registry-publish.mjs.map +1 -1
- package/dist/plugins/walrus/routable.mjs +7 -23
- package/dist/plugins/walrus/routable.mjs.map +1 -1
- package/dist/plugins/walrus/service.mjs.map +1 -1
- package/dist/plugins/walrus/spans.mjs +18 -0
- package/dist/plugins/walrus/spans.mjs.map +1 -0
- package/dist/plugins/walrus/storage-nodes.d.mts +6 -2
- package/dist/plugins/walrus/storage-nodes.mjs +15 -8
- package/dist/plugins/walrus/storage-nodes.mjs.map +1 -1
- package/dist/plugins/walrus/wal-swap.mjs +58 -15
- package/dist/plugins/walrus/wal-swap.mjs.map +1 -1
- package/dist/primitives/artifact-publisher.d.mts +1 -1
- package/dist/primitives/artifact-publisher.mjs +15 -0
- package/dist/primitives/artifact-publisher.mjs.map +1 -0
- package/dist/runtime/docker/client.mjs +17 -4
- package/dist/runtime/docker/client.mjs.map +1 -1
- package/dist/runtime/docker/container.mjs +219 -132
- package/dist/runtime/docker/container.mjs.map +1 -1
- package/dist/runtime/docker/errors.mjs +0 -6
- package/dist/runtime/docker/errors.mjs.map +1 -1
- package/dist/runtime/docker/exec.mjs +21 -18
- package/dist/runtime/docker/exec.mjs.map +1 -1
- package/dist/runtime/docker/image.mjs +36 -13
- package/dist/runtime/docker/image.mjs.map +1 -1
- package/dist/runtime/docker/index.mjs +14 -0
- package/dist/runtime/docker/inspect-and-decode.mjs +51 -0
- package/dist/runtime/docker/inspect-and-decode.mjs.map +1 -0
- package/dist/runtime/docker/inventory.mjs +14 -11
- package/dist/runtime/docker/inventory.mjs.map +1 -1
- package/dist/runtime/docker/labels.mjs +38 -5
- package/dist/runtime/docker/labels.mjs.map +1 -1
- package/dist/runtime/docker/logs.d.mts +1 -1
- package/dist/runtime/docker/logs.mjs.map +1 -1
- package/dist/runtime/docker/network.mjs +83 -47
- package/dist/runtime/docker/network.mjs.map +1 -1
- package/dist/runtime/docker/render-run-args.mjs +82 -0
- package/dist/runtime/docker/render-run-args.mjs.map +1 -0
- package/dist/runtime/docker/service.d.mts +1 -1
- package/dist/runtime/docker/service.mjs +12 -7
- package/dist/runtime/docker/service.mjs.map +1 -1
- package/dist/runtime/docker/sweep.mjs +118 -43
- package/dist/runtime/docker/sweep.mjs.map +1 -1
- package/dist/runtime/docker/volume.mjs +2 -0
- package/dist/runtime/docker/volume.mjs.map +1 -1
- package/dist/runtime/docker/wrap.mjs +30 -1
- package/dist/runtime/docker/wrap.mjs.map +1 -1
- package/dist/substrate/cross-process.mjs +14 -8
- package/dist/substrate/cross-process.mjs.map +1 -1
- package/dist/substrate/event-time.mjs +33 -0
- package/dist/substrate/event-time.mjs.map +1 -0
- package/dist/substrate/events.d.mts +28 -8
- package/dist/substrate/identity.d.mts +2 -1
- package/dist/substrate/manifest.d.mts +68 -5
- package/dist/substrate/manifest.mjs +34 -5
- package/dist/substrate/manifest.mjs.map +1 -1
- package/dist/substrate/network.d.mts +3 -5
- package/dist/substrate/options.d.mts +0 -2
- package/dist/substrate/plugin.d.mts +13 -0
- package/dist/substrate/plugin.mjs +4 -2
- package/dist/substrate/plugin.mjs.map +1 -1
- package/dist/substrate/projection.d.mts +35 -3
- package/dist/substrate/runtime/artifact-publisher/index.mjs +19 -9
- package/dist/substrate/runtime/artifact-publisher/index.mjs.map +1 -1
- package/dist/substrate/runtime/atomic-write.mjs +97 -32
- package/dist/substrate/runtime/atomic-write.mjs.map +1 -1
- package/dist/substrate/runtime/cache/index.mjs +3 -0
- package/dist/substrate/runtime/cache/schema.mjs +2 -2
- package/dist/substrate/runtime/cache/schema.mjs.map +1 -1
- package/dist/substrate/runtime/cache/service.mjs +9 -7
- package/dist/substrate/runtime/cache/service.mjs.map +1 -1
- package/dist/substrate/runtime/capability-sinks/index.d.mts +1 -1
- package/dist/substrate/runtime/capability-sinks/index.mjs +3 -0
- package/dist/substrate/runtime/capability-sinks/layer.mjs +1 -1
- package/dist/substrate/runtime/capability-sinks/service.d.mts +61 -2
- package/dist/substrate/runtime/capability-sinks/service.mjs +21 -26
- package/dist/substrate/runtime/capability-sinks/service.mjs.map +1 -1
- package/dist/substrate/runtime/config-validation.d.mts +1 -13
- package/dist/substrate/runtime/config-validation.mjs +2 -91
- package/dist/substrate/runtime/config-validation.mjs.map +1 -1
- package/dist/substrate/runtime/container-runtime.d.mts +1 -0
- package/dist/substrate/runtime/container-runtime.mjs +2 -0
- package/dist/substrate/runtime/control-plane/domain.mjs +101 -0
- package/dist/substrate/runtime/control-plane/domain.mjs.map +1 -0
- package/dist/substrate/runtime/control-plane/service.mjs +7 -0
- package/dist/substrate/runtime/control-plane/service.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/command-channel/channel.mjs +46 -19
- package/dist/substrate/runtime/cross-process/command-channel/channel.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs +30 -12
- package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/command-channel/index.mjs +5 -0
- package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs +11 -2
- package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs +1 -1
- package/dist/substrate/runtime/cross-process/index.mjs +11 -0
- package/dist/substrate/runtime/cross-process/live-clock.mjs +34 -0
- package/dist/substrate/runtime/cross-process/live-clock.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/liveness.mjs +52 -10
- package/dist/substrate/runtime/cross-process/liveness.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/lock.d.mts +1 -0
- package/dist/substrate/runtime/cross-process/lock.mjs +23 -0
- package/dist/substrate/runtime/cross-process/lock.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/reclaim-stale-file.mjs +64 -0
- package/dist/substrate/runtime/cross-process/reclaim-stale-file.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/roster.mjs +97 -83
- package/dist/substrate/runtime/cross-process/roster.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/self-pid.mjs +8 -0
- package/dist/substrate/runtime/cross-process/self-pid.mjs.map +1 -0
- package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs +24 -28
- package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/stack-lock.mjs +41 -20
- package/dist/substrate/runtime/cross-process/stack-lock.mjs.map +1 -1
- package/dist/substrate/runtime/current-plugin.mjs +2 -2
- package/dist/substrate/runtime/current-plugin.mjs.map +1 -1
- package/dist/substrate/runtime/errors.mjs +12 -6
- package/dist/substrate/runtime/errors.mjs.map +1 -1
- package/dist/substrate/runtime/format-unknown-error.mjs +30 -0
- package/dist/substrate/runtime/format-unknown-error.mjs.map +1 -0
- package/dist/substrate/runtime/host-bind-mount-owner.mjs +10 -0
- package/dist/substrate/runtime/host-bind-mount-owner.mjs.map +1 -0
- package/dist/substrate/runtime/host-gateway.mjs +20 -0
- package/dist/substrate/runtime/host-gateway.mjs.map +1 -0
- package/dist/substrate/runtime/host-tree-tar/index.mjs +61 -50
- package/dist/substrate/runtime/host-tree-tar/index.mjs.map +1 -1
- package/dist/substrate/runtime/http-probe.d.mts +1 -1
- package/dist/substrate/runtime/index.mjs +14 -0
- package/dist/substrate/runtime/lease-broker/index.d.mts +1 -1
- package/dist/substrate/runtime/lease-broker/index.mjs +2 -0
- package/dist/substrate/runtime/lease-broker/service.d.mts +1 -64
- package/dist/substrate/runtime/lease-broker/service.mjs +1 -1
- package/dist/substrate/runtime/lease-broker/service.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/dep-graph.mjs +22 -3
- package/dist/substrate/runtime/lifecycle/dep-graph.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/index.mjs +9 -0
- package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/plugin-registry.mjs +20 -3
- package/dist/substrate/runtime/lifecycle/plugin-registry.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/selective-restart.mjs +1 -1
- package/dist/substrate/runtime/lifecycle/signals.mjs +5 -5
- package/dist/substrate/runtime/lifecycle/signals.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/state-machine.mjs +1 -1
- package/dist/substrate/runtime/managed-container.d.mts +19 -1
- package/dist/substrate/runtime/managed-container.mjs +20 -1
- package/dist/substrate/runtime/managed-container.mjs.map +1 -1
- package/dist/substrate/runtime/manifest/index.mjs +3 -0
- package/dist/substrate/runtime/manifest/manifest.mjs +15 -11
- package/dist/substrate/runtime/manifest/manifest.mjs.map +1 -1
- package/dist/substrate/runtime/mode-errors.mjs +20 -0
- package/dist/substrate/runtime/mode-errors.mjs.map +1 -0
- package/dist/substrate/runtime/observability/cascade-formatter.mjs +9 -13
- package/dist/substrate/runtime/observability/cascade-formatter.mjs.map +1 -1
- package/dist/substrate/runtime/observability/formatter-registry.mjs +19 -36
- package/dist/substrate/runtime/observability/formatter-registry.mjs.map +1 -1
- package/dist/substrate/runtime/observability/ignore-with-log.d.mts +1 -0
- package/dist/substrate/runtime/observability/ignore-with-log.mjs +17 -0
- package/dist/substrate/runtime/observability/ignore-with-log.mjs.map +1 -0
- package/dist/substrate/runtime/observability/index.d.mts +1 -1
- package/dist/substrate/runtime/observability/index.mjs +13 -0
- package/dist/substrate/runtime/observability/log-store.d.mts +1 -0
- package/dist/substrate/runtime/observability/log-store.mjs +175 -0
- package/dist/substrate/runtime/observability/log-store.mjs.map +1 -0
- package/dist/substrate/runtime/observability/logger.d.mts +2 -1
- package/dist/substrate/runtime/observability/logger.mjs +5 -9
- package/dist/substrate/runtime/observability/logger.mjs.map +1 -1
- package/dist/substrate/runtime/observability/output-truncate.mjs +35 -0
- package/dist/substrate/runtime/observability/output-truncate.mjs.map +1 -0
- package/dist/substrate/runtime/observability/pretty-error.mjs +9 -12
- package/dist/substrate/runtime/observability/pretty-error.mjs.map +1 -1
- package/dist/substrate/runtime/observability/redaction.d.mts +2 -13
- package/dist/substrate/runtime/observability/redaction.mjs +8 -14
- package/dist/substrate/runtime/observability/redaction.mjs.map +1 -1
- package/dist/substrate/runtime/observability/span-store.d.mts +1 -0
- package/dist/substrate/runtime/observability/span-store.mjs +110 -0
- package/dist/substrate/runtime/observability/span-store.mjs.map +1 -0
- package/dist/substrate/runtime/observability/spans.mjs +14 -14
- package/dist/substrate/runtime/observability/spans.mjs.map +1 -1
- package/dist/substrate/runtime/observability/subprocess-capture.mjs +1 -1
- package/dist/substrate/runtime/passthrough-or-wrap.mjs +33 -0
- package/dist/substrate/runtime/passthrough-or-wrap.mjs.map +1 -0
- package/dist/substrate/runtime/paths.d.mts +1 -1
- package/dist/substrate/runtime/paths.mjs +4 -3
- package/dist/substrate/runtime/paths.mjs.map +1 -1
- package/dist/substrate/runtime/phase-preserving-produce.mjs +40 -0
- package/dist/substrate/runtime/phase-preserving-produce.mjs.map +1 -0
- package/dist/substrate/runtime/port-broker/index.mjs +3 -0
- package/dist/substrate/runtime/port-broker/service.mjs +170 -126
- package/dist/substrate/runtime/port-broker/service.mjs.map +1 -1
- package/dist/substrate/runtime/post-acquire-tasks.mjs +1 -1
- package/dist/substrate/runtime/post-acquire-tasks.mjs.map +1 -1
- package/dist/substrate/runtime/probes.d.mts +7 -5
- package/dist/substrate/runtime/probes.mjs +3 -1
- package/dist/substrate/runtime/probes.mjs.map +1 -1
- package/dist/substrate/runtime/projection/index.mjs +4 -0
- package/dist/substrate/runtime/projection/operational-endpoints.mjs +1 -2
- package/dist/substrate/runtime/projection/operational-endpoints.mjs.map +1 -1
- package/dist/substrate/runtime/projection/persisted.mjs +33 -15
- package/dist/substrate/runtime/projection/persisted.mjs.map +1 -1
- package/dist/substrate/runtime/projection/state-ref.mjs +26 -2
- package/dist/substrate/runtime/projection/state-ref.mjs.map +1 -1
- package/dist/substrate/runtime/projection/update.mjs +88 -24
- package/dist/substrate/runtime/projection/update.mjs.map +1 -1
- package/dist/substrate/runtime/random-suffix.mjs +11 -0
- package/dist/substrate/runtime/random-suffix.mjs.map +1 -0
- package/dist/substrate/runtime/retry-policy.d.mts +59 -1
- package/dist/substrate/runtime/retry-policy.mjs +66 -1
- package/dist/substrate/runtime/retry-policy.mjs.map +1 -1
- package/dist/substrate/runtime/routed-url.d.mts +1 -0
- package/dist/substrate/runtime/routed-url.mjs +79 -0
- package/dist/substrate/runtime/routed-url.mjs.map +1 -0
- package/dist/substrate/runtime/runtime-decode.d.mts +1 -1
- package/dist/substrate/runtime/runtime-decode.mjs.map +1 -1
- package/dist/substrate/runtime/scoped-http-server.mjs +2 -3
- package/dist/substrate/runtime/scoped-http-server.mjs.map +1 -1
- package/dist/substrate/runtime/scoped-multimap/index.mjs +2 -0
- package/dist/substrate/runtime/scoped-multimap/service.mjs +52 -0
- package/dist/substrate/runtime/scoped-multimap/service.mjs.map +1 -0
- package/dist/substrate/runtime/scoped-ref-map/index.mjs +2 -0
- package/dist/substrate/runtime/scoped-ref-map/service.mjs +2 -2
- package/dist/substrate/runtime/scoped-ref-map/service.mjs.map +1 -1
- package/dist/substrate/runtime/stage-and-swap/index.mjs +72 -4
- package/dist/substrate/runtime/stage-and-swap/index.mjs.map +1 -1
- package/dist/substrate/runtime/state-store/index.d.mts +1 -0
- package/dist/substrate/runtime/state-store/index.mjs +3 -0
- package/dist/substrate/runtime/state-store/schema.d.mts +1 -0
- package/dist/substrate/runtime/state-store/schema.mjs +19 -14
- package/dist/substrate/runtime/state-store/schema.mjs.map +1 -1
- package/dist/substrate/runtime/state-store/service.d.mts +1 -0
- package/dist/substrate/runtime/state-store/service.mjs +145 -0
- package/dist/substrate/runtime/state-store/service.mjs.map +1 -0
- package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.d.mts +1 -0
- package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.mjs +33 -0
- package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.mjs.map +1 -0
- package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs +1 -1
- package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs.map +1 -1
- package/dist/substrate/runtime/strategy-registry/index.mjs +4 -0
- package/dist/substrate/runtime/strategy-registry/service.mjs +19 -33
- package/dist/substrate/runtime/strategy-registry/service.mjs.map +1 -1
- package/dist/substrate/runtime/subnet-broker.mjs +60 -0
- package/dist/substrate/runtime/subnet-broker.mjs.map +1 -0
- package/dist/substrate/runtime/sui-execute/index.d.mts +21 -1
- package/dist/substrate/runtime/sui-execute/index.mjs +84 -20
- package/dist/substrate/runtime/sui-execute/index.mjs.map +1 -1
- package/dist/substrate/runtime/sui-execute/sign-and-dispatch.d.mts +1 -0
- package/dist/substrate/runtime/sui-execute/sign-and-dispatch.mjs +32 -0
- package/dist/substrate/runtime/sui-execute/sign-and-dispatch.mjs.map +1 -0
- package/dist/substrate/runtime/sui-ledger/object-ref.mjs +32 -0
- package/dist/substrate/runtime/sui-ledger/object-ref.mjs.map +1 -0
- package/dist/substrate/runtime/sui-move-build/index.mjs +93 -19
- package/dist/substrate/runtime/sui-move-build/index.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/acquire-node.mjs +181 -0
- package/dist/substrate/runtime/supervisor/acquire-node.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/background-tasks.mjs +144 -0
- package/dist/substrate/runtime/supervisor/background-tasks.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/command-loop.mjs +68 -0
- package/dist/substrate/runtime/supervisor/command-loop.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/dispatch-contributions.mjs +151 -0
- package/dist/substrate/runtime/supervisor/dispatch-contributions.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/errors.d.mts +1 -0
- package/dist/substrate/runtime/supervisor/errors.mjs +9 -0
- package/dist/substrate/runtime/supervisor/errors.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/index.d.mts +1 -0
- package/dist/substrate/runtime/supervisor/index.mjs +3 -0
- package/dist/substrate/runtime/supervisor/shutdown.mjs +51 -0
- package/dist/substrate/runtime/supervisor/shutdown.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/start-supervisor.d.mts +1 -0
- package/dist/substrate/runtime/supervisor/start-supervisor.mjs +250 -0
- package/dist/substrate/runtime/supervisor/start-supervisor.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/state.d.mts +1 -0
- package/dist/substrate/runtime/supervisor/state.mjs +22 -0
- package/dist/substrate/runtime/supervisor/state.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/teardown.mjs +57 -0
- package/dist/substrate/runtime/supervisor/teardown.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/types.d.mts +1 -0
- package/dist/substrate/runtime/supervisor/wiring.mjs +133 -0
- package/dist/substrate/runtime/supervisor/wiring.mjs.map +1 -0
- package/dist/substrate/runtime/typed-env.mjs +8 -0
- package/dist/substrate/runtime/typed-env.mjs.map +1 -0
- package/dist/substrate/state-store.d.mts +1 -0
- package/dist/substrate/versioned-doc-schema.mjs +17 -0
- package/dist/substrate/versioned-doc-schema.mjs.map +1 -0
- package/dist/substrate/versioned-doc-sync.mjs +94 -0
- package/dist/substrate/versioned-doc-sync.mjs.map +1 -0
- package/dist/surfaces/cli/command-tree.mjs.map +1 -1
- package/dist/surfaces/cli/commands/index.mjs +9 -0
- package/dist/surfaces/cli/commands/prune-picker-entry.mjs +13 -0
- package/dist/surfaces/cli/commands/prune-picker-entry.mjs.map +1 -0
- package/dist/surfaces/cli/commands/prune-picker.mjs +3 -2
- package/dist/surfaces/cli/commands/prune-picker.mjs.map +1 -1
- package/dist/surfaces/cli/commands/prune.mjs +34 -17
- package/dist/surfaces/cli/commands/prune.mjs.map +1 -1
- package/dist/surfaces/cli/commands/status.mjs +2 -2
- package/dist/surfaces/cli/commands/status.mjs.map +1 -1
- package/dist/surfaces/cli/commands/supervisor-presence.mjs +5 -3
- package/dist/surfaces/cli/commands/supervisor-presence.mjs.map +1 -1
- package/dist/surfaces/cli/commands/wipe.mjs +38 -4
- package/dist/surfaces/cli/commands/wipe.mjs.map +1 -1
- package/dist/surfaces/cli/errors.mjs +1 -1
- package/dist/surfaces/cli/errors.mjs.map +1 -1
- package/dist/surfaces/cli/flags.mjs +0 -1
- package/dist/surfaces/cli/flags.mjs.map +1 -1
- package/dist/surfaces/cli/index.mjs +98 -18
- package/dist/surfaces/cli/index.mjs.map +1 -1
- package/dist/surfaces/cli/output.mjs +1 -0
- package/dist/surfaces/cli/output.mjs.map +1 -1
- package/dist/surfaces/cli/sysexits.mjs +2 -1
- package/dist/surfaces/cli/sysexits.mjs.map +1 -1
- package/dist/surfaces/tui/app.mjs +25 -3
- package/dist/surfaces/tui/app.mjs.map +1 -1
- package/dist/surfaces/tui/display-derivation.mjs +23 -74
- package/dist/surfaces/tui/display-derivation.mjs.map +1 -1
- package/dist/surfaces/tui/event-log.mjs +35 -23
- package/dist/surfaces/tui/event-log.mjs.map +1 -1
- package/dist/surfaces/tui/input.mjs +5 -1
- package/dist/surfaces/tui/input.mjs.map +1 -1
- package/dist/surfaces/tui/plain-renderer.mjs +70 -34
- package/dist/surfaces/tui/plain-renderer.mjs.map +1 -1
- package/package.json +24 -4
- package/dist/contracts/liveness-classifier.d.mts +0 -19
- package/dist/contracts/network-resolver.d.mts +0 -15
- package/dist/contracts/network-resolver.mjs +0 -7
- package/dist/contracts/network-resolver.mjs.map +0 -1
- package/dist/orchestrators/codegen/extras.mjs +0 -16
- package/dist/orchestrators/codegen/extras.mjs.map +0 -1
- package/dist/plugins/deepbook/routable.mjs +0 -21
- package/dist/plugins/deepbook/routable.mjs.map +0 -1
- package/dist/plugins/faucet/service.d.mts +0 -20
- package/dist/plugins/faucet/strategies/sui-local.d.mts +0 -23
- package/dist/plugins/faucet/strategies/sui-local.mjs.map +0 -1
- package/dist/plugins/sui/seed-objects.d.mts +0 -18
- package/dist/plugins/sui/seed-objects.mjs +0 -25
- package/dist/plugins/sui/seed-objects.mjs.map +0 -1
- package/dist/runtime/built-in-plugin-layers.mjs.map +0 -1
- package/dist/substrate/runtime/context-helpers.mjs +0 -32
- package/dist/substrate/runtime/context-helpers.mjs.map +0 -1
- package/dist/substrate/runtime/run.mjs.map +0 -1
- package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs +0 -30
- package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs.map +0 -1
- package/dist/substrate/runtime/supervisor.d.mts +0 -1
- package/dist/substrate/runtime/supervisor.mjs +0 -831
- package/dist/substrate/runtime/supervisor.mjs.map +0 -1
- package/dist/surfaces/cli/commands/doctor-probes.mjs.map +0 -1
- /package/dist/{substrate/runtime/strategy-registry/faucet-capability-for.d.mts → plugins/faucet/http.d.mts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.mjs","names":["Logger"],"sources":["../../src/orchestrators/run.ts"],"sourcesContent":["// Default-stack Layer composition + supervise() entrypoint.\n//\n// Single seam consumed by both the CLI bin entry (`cli/main.ts`) and the\n// library-facing programmatic surface (`api/run-stack.ts`). Composes the\n// substrate Layer stack (L0) + the Docker `ContainerRuntime` adapter\n// (L1), yields the substrate services into a `Context.Context<never>`\n// pluginContext, builds the projection ref, and runs `supervise()`\n// inside a scope.\n//\n// The CLI augments the supervised body with cross-process command\n// channel forwarding; the library surface passes a no-op augmentation\n// and exposes the handle's events / state / awaitShutdown directly.\n//\n// Architecture: this is L3 (orchestrator-level). Layer composition that\n// assembles L0+L1 stacks belongs at L3/L4 — it can't live in `substrate/`\n// because it imports a concrete L1 adapter (Docker) by definition. See\n// ARCHITECTURE.md § \"Layer composition belongs at L3/L4, not L0\".\n\nimport { Context, Effect, Layer, Logger as EffectLogger, Scope, SubscriptionRef } from 'effect';\nimport * as NodeFileSystem from '@effect/platform-node/NodeFileSystem';\nimport * as NodePath from '@effect/platform-node/NodePath';\nimport * as NodeChildProcessSpawner from '@effect/platform-node/NodeChildProcessSpawner';\nimport { ChildProcessSpawner } from 'effect/unstable/process/ChildProcessSpawner';\n\nimport type { Identity } from '../substrate/identity.ts';\nimport { CacheService, layerCache } from '../substrate/runtime/cache/index.ts';\nimport { LeaseBrokerService, layerLeaseBroker } from '../substrate/runtime/lease-broker/index.ts';\nimport {\n\tArtifactPublisherService,\n\tlayerArtifactPublisher,\n} from '../substrate/runtime/artifact-publisher/index.ts';\nimport {\n\tIdentityContext,\n\tRuntimeRoot,\n\tStackPathsService,\n\tlayerIdentity,\n\tlayerRuntimeRoot,\n\tlayerStackPaths,\n} from '../substrate/runtime/paths.ts';\nimport { PortBrokerService, layerPortBroker } from '../substrate/runtime/port-broker/index.ts';\nimport {\n\tStrategyRegistryService,\n\tlayerStrategyRegistry,\n} from '../substrate/runtime/strategy-registry/index.ts';\nimport {\n\tContainerRuntimeService,\n\tDockerSpawner,\n\tlayerContainerRuntimeDocker,\n\tlayerDockerCycleInitial,\n\tlayerDockerHostDefault,\n} from '../runtime/docker/index.ts';\nimport { awaitAll } from '../substrate/runtime/lifecycle/index.ts';\nimport { makeProjectionRef } from '../substrate/runtime/projection/index.ts';\nimport { Logger, layerLogger } from '../substrate/runtime/observability/index.ts';\nimport {\n\tPostAcquireTasksService,\n\tlayerPostAcquireTasks,\n} from '../substrate/runtime/post-acquire-tasks.ts';\nimport {\n\tstartSupervisor,\n\ttype OrchestratorSinks,\n\ttype SupervisedStack,\n\ttype SupervisorCommandHandler,\n\ttype SupervisorHandle,\n\ttype SupervisorPostAcquireHook,\n} from '../substrate/runtime/supervisor/index.ts';\n\n/** Substrate Layer stack for a single supervised run. Composes every L0\n * service the supervisor yields from its R-channel, plus the L1 Docker\n * `ContainerRuntime`. Built-in plugin services are layered outside\n * substrate and added through `extendContext`. */\nexport const buildSubstrateLayers = (identity: Identity, runtimeRoot: string) => {\n\t// DockerSpawner adapts platform-node's ChildProcessSpawner tag onto\n\t// the docker subsystem's local DockerSpawner tag (same shape; the\n\t// indirection only lets tests inject a stub).\n\tconst layerDockerSpawnerFromNode: Layer.Layer<DockerSpawner, never, ChildProcessSpawner> =\n\t\tLayer.effect(\n\t\t\tDockerSpawner,\n\t\t\tEffect.gen(function* () {\n\t\t\t\treturn yield* ChildProcessSpawner;\n\t\t\t}),\n\t\t);\n\n\tconst platformBase = Layer.mergeAll(\n\t\tlayerIdentity(identity),\n\t\tlayerRuntimeRoot(runtimeRoot),\n\t\tNodePath.layer,\n\t\tNodeFileSystem.layer,\n\t\tlayerDockerHostDefault,\n\t\tlayerDockerCycleInitial,\n\t\tlayerStrategyRegistry,\n\t);\n\n\tconst childProcessSpawnerWired = NodeChildProcessSpawner.layer.pipe(\n\t\tLayer.provideMerge(platformBase),\n\t);\n\tconst withStackPaths = layerStackPaths.pipe(Layer.provideMerge(childProcessSpawnerWired));\n\tconst withCache = layerCache.pipe(Layer.provideMerge(withStackPaths));\n\tconst withArtifactPublisher = layerArtifactPublisher.pipe(Layer.provideMerge(withCache));\n\tconst withPortBroker = layerPortBroker.pipe(Layer.provideMerge(withArtifactPublisher));\n\tconst withLeaseBroker = layerLeaseBroker.pipe(Layer.provideMerge(withPortBroker));\n\tconst withSpawnerAdapter = layerDockerSpawnerFromNode.pipe(Layer.provideMerge(withLeaseBroker));\n\tconst withContainerRuntime = layerContainerRuntimeDocker.pipe(\n\t\tLayer.provideMerge(withSpawnerAdapter),\n\t);\n\tconst withPostAcquireTasks = layerPostAcquireTasks.pipe(Layer.provideMerge(withContainerRuntime));\n\treturn layerLogger.pipe(Layer.provideMerge(withPostAcquireTasks));\n};\n\n/** Build the opaque `Context.Context<never>` the supervisor hands to\n * every plugin's `acquire` body. Yields every substrate service the\n * Docker-backed substrate layer stack provides; downstream callers\n * may extend the context (e.g. layering a Logger or a\n * `CapabilitySinksService`) before passing it to `supervise()`. */\nconst buildPluginContext = (): Effect.Effect<\n\tContext.Context<never>,\n\tnever,\n\t| IdentityContext\n\t| RuntimeRoot\n\t| StackPathsService\n\t| CacheService\n\t| StrategyRegistryService\n\t| ContainerRuntimeService\n\t| ArtifactPublisherService\n\t| PortBrokerService\n\t| LeaseBrokerService\n\t| PostAcquireTasksService\n\t| Logger\n> =>\n\tEffect.gen(function* () {\n\t\tconst identityCtx = yield* IdentityContext;\n\t\tconst runtimeRootResolved = yield* RuntimeRoot;\n\t\tconst stackPaths = yield* StackPathsService;\n\t\tconst cache = yield* CacheService;\n\t\tconst registry = yield* StrategyRegistryService;\n\t\tconst containerRuntime = yield* ContainerRuntimeService;\n\t\tconst publisher = yield* ArtifactPublisherService;\n\t\tconst portBroker = yield* PortBrokerService;\n\t\tconst leaseBroker = yield* LeaseBrokerService;\n\t\tconst postAcquireTasks = yield* PostAcquireTasksService;\n\t\tconst logger = yield* Logger;\n\n\t\treturn Context.empty().pipe(\n\t\t\tContext.add(IdentityContext, identityCtx),\n\t\t\tContext.add(RuntimeRoot, runtimeRootResolved),\n\t\t\tContext.add(StackPathsService, stackPaths),\n\t\t\tContext.add(CacheService, cache),\n\t\t\tContext.add(StrategyRegistryService, registry),\n\t\t\tContext.add(ContainerRuntimeService, containerRuntime),\n\t\t\tContext.add(ArtifactPublisherService, publisher),\n\t\t\tContext.add(PortBrokerService, portBroker),\n\t\t\tContext.add(LeaseBrokerService, leaseBroker),\n\t\t\tContext.add(PostAcquireTasksService, postAcquireTasks),\n\t\t\tContext.add(Logger, logger),\n\t\t) as Context.Context<never>;\n\t});\n\n/** Options accepted by the supervised-run entrypoint. `lifetime`\n * selects long-running supervision versus a one-shot acquire/codegen\n * cycle. The `beforeInitialAcquire` hook runs inside the supervised\n * scope before the first acquire starts; live renderers use it to\n * subscribe to startup projection changes. The `withinScope` hook\n * runs after the first acquire completes.\n *\n * Generic `R` widens the hook R-channel so callers can yield\n * substrate services (e.g. `StackPathsService`) that are in scope at\n * the supervisor-boot site. */\nexport interface SuperviseStackOptions<R = Scope.Scope, ExtendR = never, HookE = never> {\n\treadonly lifetime?: 'long-running' | 'one-shot';\n\treadonly beforeInitialAcquire?: (handle: SupervisorHandle) => Effect.Effect<void, HookE, R>;\n\treadonly withinScope?: (handle: SupervisorHandle) => Effect.Effect<void, HookE, R>;\n\treadonly commandHandler?: SupervisorCommandHandler;\n\treadonly orchestratorSinks?: OrchestratorSinks;\n\treadonly postAcquireHook?: SupervisorPostAcquireHook;\n\t/** Caller-supplied extension layered into `pluginContext` after the\n\t * default substrate context is built. Used by plugin-author Layer\n\t * composition (ARCHITECTURE.md § Plugin-author extension) and by\n\t * the CLI when it wants to inject a custom Logger / CapabilitySinks\n\t * override. */\n\treadonly extendContext?: (\n\t\tctx: Context.Context<never>,\n\t) => Effect.Effect<Context.Context<never>, never, ExtendR>;\n}\n\n/** Effect that boots the supervisor for `stack` and blocks on the\n * supervisor's shutdown latch. Returns the final `SubscribableState`\n * snapshot so callers (CLI, library handle) can inspect post-shutdown\n * state. */\nexport const superviseStackEffect = <R = Scope.Scope, ExtendR = never, HookE = never>(\n\tstack: SupervisedStack,\n\tidentity: Identity,\n\tstate: SubscriptionRef.SubscriptionRef<import('../substrate/projection.ts').SubscribableState>,\n\topts: SuperviseStackOptions<R, ExtendR, HookE> = {},\n) =>\n\tEffect.gen(function* () {\n\t\treturn yield* Effect.scoped(\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst baseContext = yield* buildPluginContext();\n\t\t\t\tconst pluginContext =\n\t\t\t\t\topts.extendContext === undefined ? baseContext : yield* opts.extendContext(baseContext);\n\n\t\t\t\tconst startup = yield* startSupervisor(\n\t\t\t\t\tstack,\n\t\t\t\t\tidentity,\n\t\t\t\t\tstate,\n\t\t\t\t\tpluginContext,\n\t\t\t\t\topts.orchestratorSinks ?? [],\n\t\t\t\t\topts.commandHandler,\n\t\t\t\t\topts.postAcquireHook,\n\t\t\t\t\t{ commandLoop: opts.lifetime !== 'one-shot' },\n\t\t\t\t);\n\t\t\t\tconst { handle } = startup;\n\t\t\t\tif (opts.beforeInitialAcquire !== undefined) {\n\t\t\t\t\tyield* opts.beforeInitialAcquire(handle);\n\t\t\t\t}\n\t\t\t\tif (opts.lifetime === 'one-shot') {\n\t\t\t\t\tyield* startup.runInitialAcquire;\n\t\t\t\t\tyield* awaitAll(startup.handle.registry, [...startup.handle.graph.nodes.keys()]);\n\t\t\t\t\tif (opts.withinScope !== undefined) {\n\t\t\t\t\t\tyield* opts.withinScope(handle);\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tconst outcome = yield* Effect.raceFirst(\n\t\t\t\t\tstartup.runInitialAcquire.pipe(Effect.as('booted' as const)),\n\t\t\t\t\thandle.awaitShutdown.pipe(Effect.as('shutdown' as const)),\n\t\t\t\t);\n\t\t\t\tif (outcome === 'shutdown') {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif (opts.withinScope !== undefined) {\n\t\t\t\t\tyield* opts.withinScope(handle);\n\t\t\t\t}\n\t\t\t\tyield* handle.awaitShutdown;\n\t\t\t}),\n\t\t);\n\t});\n\n/** End-to-end run: builds the substrate Layer stack, provides it to\n * `superviseStackEffect`, applies a quiet Logger by default unless the\n * caller passes one in `opts.loggerLayer`. The returned Effect has\n * type `Effect<void, ..., never>` — all requirements are discharged\n * by the layer stack composed here.\n *\n * Callers that need to capture intermediate state (errors, terminal\n * snapshot, etc.) supply `opts.withinScope` and read off the\n * supervisor handle directly. */\nexport interface RunStackEffectOptions<\n\tR = Scope.Scope,\n\tExtendR = never,\n\tHookE = never,\n> extends SuperviseStackOptions<R, ExtendR, HookE> {\n\treadonly runtimeRoot: string;\n\treadonly loggerLayer?: Layer.Layer<never>;\n}\n\nexport const runStackEffect = <R = Scope.Scope, ExtendR = never, HookE = never>(\n\tstack: SupervisedStack,\n\tidentity: Identity,\n\topts: RunStackEffectOptions<R, ExtendR, HookE>,\n) => {\n\tconst substrate = buildSubstrateLayers(identity, opts.runtimeRoot);\n\tconst program = Effect.gen(function* () {\n\t\tconst state = yield* makeProjectionRef();\n\t\tyield* superviseStackEffect(stack, identity, state, opts);\n\t});\n\n\treturn program.pipe(\n\t\tEffect.provide(substrate),\n\t\tEffect.provide(opts.loggerLayer ?? EffectLogger.layer([])),\n\t);\n};\n"],"mappings":"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"}
|
|
@@ -1,30 +1,69 @@
|
|
|
1
|
-
import { StackPathsService } from "../substrate/runtime/paths.mjs";
|
|
2
1
|
import { endpointKey } from "../substrate/brand.mjs";
|
|
2
|
+
import { StackPathsService } from "../substrate/runtime/paths.mjs";
|
|
3
3
|
import { readResolvedSync } from "../substrate/runtime/lifecycle/plugin-registry.mjs";
|
|
4
|
+
import { SnapshotOrchestratorService, layerSnapshotOrchestrator } from "./snapshot/service.mjs";
|
|
5
|
+
import "../substrate/runtime/lifecycle/index.mjs";
|
|
6
|
+
import { operationalEndpointEventsFromResolvedValue } from "../substrate/runtime/projection/operational-endpoints.mjs";
|
|
4
7
|
import { PostAcquireTasksService } from "../substrate/runtime/post-acquire-tasks.mjs";
|
|
5
|
-
import { MoveCodegenService, MoveSummaryRunnerService,
|
|
8
|
+
import { MoveCodegenService, MoveSummaryRunnerService, layerMystenMoveCodegen } from "./codegen/bindings.mjs";
|
|
9
|
+
import { layerSuiMoveSummaryRunnerDocker } from "../plugins/sui/move-summary-runner.mjs";
|
|
6
10
|
import { CodegenPathsService, layerCodegenPaths, layerCodegenRoot } from "./codegen/paths.mjs";
|
|
7
11
|
import { CodegenOrchestratorService, layerCodegenOrchestrator } from "./codegen/service.mjs";
|
|
8
|
-
import { makeExtrasCodegenable } from "./codegen/extras.mjs";
|
|
9
12
|
import { layerTraefikContainerOpsDocker } from "./router/traefik-container.mjs";
|
|
10
13
|
import { makeDefaultRouterProfile } from "./router/profile.mjs";
|
|
11
14
|
import { layerEntrypointRegistry } from "./router/entrypoints.mjs";
|
|
12
15
|
import { RouterService, layerDockerUpstreamResolver, layerRouterConfigLiteral, layerRouterService } from "./router/service.mjs";
|
|
16
|
+
import "./router/index.mjs";
|
|
13
17
|
import { BUILT_IN_ENTRYPOINTS } from "../plugins/router-entrypoints.mjs";
|
|
14
|
-
import
|
|
15
|
-
import { resolveManifestExtras } from "../substrate/manifest.mjs";
|
|
18
|
+
import "./snapshot/index.mjs";
|
|
19
|
+
import { ManifestExtrasLookupError, resolveManifestExtras } from "../substrate/manifest.mjs";
|
|
16
20
|
import { buildEnvelope, writeManifest } from "../substrate/runtime/manifest/manifest.mjs";
|
|
17
|
-
import
|
|
21
|
+
import "../substrate/runtime/manifest/index.mjs";
|
|
22
|
+
import { Context, Effect, FileSystem, Layer, Ref } from "effect";
|
|
18
23
|
import { isAbsolute, join, resolve } from "node:path";
|
|
19
24
|
//#region src/orchestrators/runtime-composition.ts
|
|
25
|
+
var ManifestEndpointRegistryService = class extends Context.Service()("@devstack/orchestrators/ManifestEndpointRegistry") {};
|
|
26
|
+
const layerManifestEndpointRegistry = Layer.effect(ManifestEndpointRegistryService, Effect.gen(function* () {
|
|
27
|
+
const entriesRef = yield* Ref.make([]);
|
|
28
|
+
const seqRef = yield* Ref.make(0);
|
|
29
|
+
const register = (entry) => Effect.gen(function* () {
|
|
30
|
+
const seq = yield* Ref.updateAndGet(seqRef, (n) => n + 1);
|
|
31
|
+
yield* Ref.update(entriesRef, (entries) => [...entries, {
|
|
32
|
+
...entry,
|
|
33
|
+
seq
|
|
34
|
+
}]);
|
|
35
|
+
yield* Effect.addFinalizer(() => Ref.update(entriesRef, (entries) => entries.filter((candidate) => candidate.seq !== seq)));
|
|
36
|
+
});
|
|
37
|
+
return ManifestEndpointRegistryService.of({
|
|
38
|
+
register,
|
|
39
|
+
entries: Ref.get(entriesRef).pipe(Effect.map((entries) => entries.map((entryWithSeq) => {
|
|
40
|
+
const { seq, ...entry } = entryWithSeq;
|
|
41
|
+
return entry;
|
|
42
|
+
})))
|
|
43
|
+
});
|
|
44
|
+
}));
|
|
20
45
|
const productionRouterProfile = (options = {}) => makeDefaultRouterProfile(options);
|
|
21
46
|
const productionCodegenOutputDir = (appRoot, outputDir) => {
|
|
22
47
|
const target = outputDir ?? "src/generated";
|
|
23
48
|
return isAbsolute(target) ? target : resolve(appRoot, target);
|
|
24
49
|
};
|
|
50
|
+
/** Codegenable wrapping the resolved manifest-extras blob into a
|
|
51
|
+
* generated `extras.ts` for app-side consumption. Single-callsite
|
|
52
|
+
* helper — declared here to keep the orchestrator's view of the
|
|
53
|
+
* contribution self-contained. */
|
|
54
|
+
const makeExtrasCodegenable = (extras) => ({
|
|
55
|
+
kind: "codegenable",
|
|
56
|
+
emitterName: "app-extras",
|
|
57
|
+
outputPath: "extras.ts",
|
|
58
|
+
sensitive: true,
|
|
59
|
+
emit: (ctx) => Effect.sync(() => {
|
|
60
|
+
ctx.exportConst("extras", extras);
|
|
61
|
+
return ctx.done();
|
|
62
|
+
})
|
|
63
|
+
});
|
|
25
64
|
const layerProductionOrchestrators = (router = {}) => {
|
|
26
65
|
const profile = router.profile ?? productionRouterProfile();
|
|
27
|
-
return Layer.mergeAll(layerSnapshotOrchestrator, layerRouterService.pipe(Layer.provideMerge(Layer.mergeAll(layerEntrypointRegistry(BUILT_IN_ENTRYPOINTS), layerTraefikContainerOpsDocker, layerDockerUpstreamResolver(profile), layerRouterConfigLiteral({
|
|
66
|
+
return Layer.mergeAll(layerSnapshotOrchestrator, layerManifestEndpointRegistry, layerRouterService.pipe(Layer.provideMerge(Layer.mergeAll(layerEntrypointRegistry(BUILT_IN_ENTRYPOINTS), layerTraefikContainerOpsDocker, layerDockerUpstreamResolver(profile), layerRouterConfigLiteral({
|
|
28
67
|
disabled: router.disabled ?? false,
|
|
29
68
|
profile,
|
|
30
69
|
image: router.image ?? "traefik:v3.5",
|
|
@@ -32,40 +71,64 @@ const layerProductionOrchestrators = (router = {}) => {
|
|
|
32
71
|
})))), layerCodegenOrchestrator, layerCodegenPaths.pipe(Layer.provideMerge(layerCodegenRoot({
|
|
33
72
|
outputDir: productionCodegenOutputDir(router.codegen?.appRoot ?? process.cwd(), router.codegen?.outputDir),
|
|
34
73
|
stackSubdir: router.codegen?.stackSubdir ?? null
|
|
35
|
-
}))),
|
|
74
|
+
}))), layerSuiMoveSummaryRunnerDocker, layerMystenMoveCodegen);
|
|
36
75
|
};
|
|
37
76
|
Effect.gen(function* () {
|
|
38
77
|
yield* (yield* RouterService).boot().pipe(Effect.orDie);
|
|
39
78
|
});
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
79
|
+
/** Project a `(pluginKey, EndpointUrl)` pair into the field-set both
|
|
80
|
+
* the engine event and the manifest entry stamp identically. Callers
|
|
81
|
+
* spread this and then add their output-specific fields (the engine
|
|
82
|
+
* event's branded `endpointKey` + `registeredAt`; the manifest
|
|
83
|
+
* entry's stringified `endpointKey` + `pluginKey`). */
|
|
84
|
+
const routableToEndpointFields = (pluginKey, endpoint) => ({
|
|
85
|
+
name: endpoint.endpointName,
|
|
86
|
+
url: endpoint.url,
|
|
87
|
+
displayUrl: null,
|
|
88
|
+
wireProtocol: endpoint.wireProtocol,
|
|
89
|
+
endpointKeyString: `${pluginKey}:${endpoint.endpointName}`
|
|
90
|
+
});
|
|
91
|
+
const endpointEventFromRoutable = (pluginKey, endpoint, registeredAt = Date.now()) => {
|
|
92
|
+
const { endpointKeyString, ...common } = routableToEndpointFields(pluginKey, endpoint);
|
|
93
|
+
return {
|
|
94
|
+
tag: "endpoint.registered",
|
|
95
|
+
endpoint: {
|
|
96
|
+
...common,
|
|
97
|
+
endpointKey: endpointKey(endpointKeyString),
|
|
98
|
+
pluginKey,
|
|
99
|
+
registeredAt
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
};
|
|
103
|
+
const manifestEndpointEntryFromRoutable = (pluginKey, endpoint) => {
|
|
104
|
+
const { endpointKeyString, ...common } = routableToEndpointFields(pluginKey, endpoint);
|
|
105
|
+
return {
|
|
106
|
+
...common,
|
|
107
|
+
endpointKey: endpointKeyString,
|
|
108
|
+
pluginKey: String(pluginKey)
|
|
109
|
+
};
|
|
110
|
+
};
|
|
111
|
+
const manifestEndpointEntryFromOperationalEndpoint = (endpoint) => ({
|
|
112
|
+
endpointKey: String(endpoint.endpointKey),
|
|
113
|
+
name: endpoint.name,
|
|
114
|
+
url: endpoint.url,
|
|
115
|
+
displayUrl: endpoint.displayUrl,
|
|
116
|
+
wireProtocol: endpoint.wireProtocol,
|
|
117
|
+
pluginKey: String(endpoint.pluginKey)
|
|
50
118
|
});
|
|
51
119
|
const orchestratorSink = (sink) => sink;
|
|
52
120
|
const makeProjectionCapabilitySink = () => orchestratorSink({
|
|
53
121
|
kind: "projection",
|
|
54
122
|
accept: (decl, ctx) => Effect.gen(function* () {
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
} : {
|
|
123
|
+
const payload = decl.event.payload;
|
|
124
|
+
const payloadWithRowKey = payload !== null && typeof payload === "object" && "rowKey" in payload && payload.rowKey === null ? {
|
|
125
|
+
...payload,
|
|
126
|
+
rowKey: ctx.pluginKey
|
|
127
|
+
} : payload;
|
|
128
|
+
yield* ctx.publish({
|
|
62
129
|
...decl.event,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
rowKey: decl.event.package.rowKey ?? ctx.pluginKey
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
yield* ctx.publish(event);
|
|
130
|
+
payload: payloadWithRowKey
|
|
131
|
+
});
|
|
69
132
|
})
|
|
70
133
|
});
|
|
71
134
|
const makeStrategyContributorCapabilitySink = () => orchestratorSink({
|
|
@@ -90,20 +153,18 @@ const buildProductionOrchestratorSinks = (observers = {}) => Effect.gen(function
|
|
|
90
153
|
const snapshot = yield* SnapshotOrchestratorService;
|
|
91
154
|
const router = yield* RouterService;
|
|
92
155
|
const codegen = yield* CodegenOrchestratorService;
|
|
156
|
+
const manifestEndpoints = yield* ManifestEndpointRegistryService;
|
|
93
157
|
return [
|
|
94
158
|
orchestratorSink({
|
|
95
159
|
kind: "snapshotable",
|
|
96
160
|
accept: (decl, ctx) => snapshot.registerParticipant(ctx.pluginKey, decl)
|
|
97
161
|
}),
|
|
98
|
-
orchestratorSink({
|
|
99
|
-
kind: "liveness-classifier",
|
|
100
|
-
accept: (decl, ctx) => snapshot.registerClassifier(ctx.pluginKey, decl)
|
|
101
|
-
}),
|
|
102
162
|
orchestratorSink({
|
|
103
163
|
kind: "routable",
|
|
104
164
|
accept: (decl, ctx) => router.boot().pipe(Effect.andThen(router.contributeRoute(decl)), Effect.flatMap((endpoint) => {
|
|
105
165
|
const event = endpointEventFromRoutable(ctx.pluginKey, endpoint);
|
|
106
|
-
|
|
166
|
+
const manifestEntry = manifestEndpointEntryFromRoutable(ctx.pluginKey, endpoint);
|
|
167
|
+
return manifestEndpoints.register(manifestEntry).pipe(Effect.andThen(ctx.publish(event)), Effect.andThen(observers.routable ? observers.routable(ctx.pluginKey, endpoint, event) : Effect.void));
|
|
107
168
|
}))
|
|
108
169
|
}),
|
|
109
170
|
orchestratorSink({
|
|
@@ -119,13 +180,31 @@ const makeManifestExtrasContext = (ctx) => {
|
|
|
119
180
|
for (const [key, node] of ctx.graph.nodes) resourceIdToKey.set(node.member.id, key);
|
|
120
181
|
const lookup = (resourceId) => {
|
|
121
182
|
const key = resourceIdToKey.get(resourceId);
|
|
122
|
-
if (key === void 0) throw new
|
|
183
|
+
if (key === void 0) throw new ManifestExtrasLookupError({
|
|
184
|
+
kind: "unknown-resource",
|
|
185
|
+
resourceId
|
|
186
|
+
});
|
|
123
187
|
const resolved = readResolvedSync(ctx.registry, key);
|
|
124
|
-
if (resolved === void 0) throw new
|
|
188
|
+
if (resolved === void 0) throw new ManifestExtrasLookupError({
|
|
189
|
+
kind: "unresolved-resource",
|
|
190
|
+
resourceId
|
|
191
|
+
});
|
|
125
192
|
return resolved;
|
|
126
193
|
};
|
|
127
194
|
return { value: (resource) => lookup(resource.id) };
|
|
128
195
|
};
|
|
196
|
+
const operationalManifestEndpointEntries = (ctx, routableEntries) => {
|
|
197
|
+
const routablePluginKeys = new Set(routableEntries.map((entry) => entry.pluginKey));
|
|
198
|
+
const registeredAt = Date.now();
|
|
199
|
+
const entries = [];
|
|
200
|
+
for (const [key] of ctx.graph.nodes) {
|
|
201
|
+
if (routablePluginKeys.has(String(key))) continue;
|
|
202
|
+
const resolved = readResolvedSync(ctx.registry, key);
|
|
203
|
+
if (resolved === void 0) continue;
|
|
204
|
+
for (const event of operationalEndpointEventsFromResolvedValue(key, resolved, registeredAt)) entries.push(manifestEndpointEntryFromOperationalEndpoint(event.endpoint));
|
|
205
|
+
}
|
|
206
|
+
return entries;
|
|
207
|
+
};
|
|
129
208
|
const buildProductionPostAcquireHook = (options = {}) => Effect.gen(function* () {
|
|
130
209
|
const codegen = yield* CodegenOrchestratorService;
|
|
131
210
|
const paths = yield* CodegenPathsService;
|
|
@@ -134,8 +213,11 @@ const buildProductionPostAcquireHook = (options = {}) => Effect.gen(function* ()
|
|
|
134
213
|
const fs = yield* FileSystem.FileSystem;
|
|
135
214
|
const stackPaths = yield* StackPathsService;
|
|
136
215
|
const postAcquireTasks = yield* PostAcquireTasksService;
|
|
216
|
+
const manifestEndpoints = yield* ManifestEndpointRegistryService;
|
|
137
217
|
return (ctx) => Effect.gen(function* () {
|
|
138
218
|
const extras = yield* resolveManifestExtras(options.extras, makeManifestExtrasContext(ctx));
|
|
219
|
+
const routableEndpoints = yield* manifestEndpoints.entries;
|
|
220
|
+
const endpoints = [...routableEndpoints, ...operationalManifestEndpointEntries(ctx, routableEndpoints)];
|
|
139
221
|
yield* writeManifest(yield* buildEnvelope({
|
|
140
222
|
identity: {
|
|
141
223
|
app: ctx.identity.app,
|
|
@@ -143,7 +225,9 @@ const buildProductionPostAcquireHook = (options = {}) => Effect.gen(function* ()
|
|
|
143
225
|
chain: ctx.identity.chain
|
|
144
226
|
},
|
|
145
227
|
contributions: [],
|
|
146
|
-
|
|
228
|
+
endpoints,
|
|
229
|
+
extras,
|
|
230
|
+
codegen: { generatedDir: paths.outputDir }
|
|
147
231
|
}), join(stackPaths.stackRoot, "manifest.json")).pipe(Effect.provideService(FileSystem.FileSystem, fs));
|
|
148
232
|
const result = yield* codegen.runCycle({ extraContributions: [makeExtrasCodegenable(extras)] }).pipe(Effect.provideService(CodegenPathsService, paths), Effect.provideService(MoveSummaryRunnerService, summaryRunner), Effect.provideService(MoveCodegenService, moveCodegen), Effect.provideService(FileSystem.FileSystem, fs));
|
|
149
233
|
yield* postAcquireTasks.runAll;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-composition.mjs","names":[],"sources":["../../src/orchestrators/runtime-composition.ts"],"sourcesContent":["// Shared production orchestrator composition.\n//\n// CLI, programmatic runStack, and the e2e boot harness all use this\n// module for capability delivery. Tests may swap service\n// implementations (Traefik ops, upstream resolver, codegen paths), but\n// the sink registrations and router boot step stay shared.\n\nimport { Effect, FileSystem, Layer, Scope } from 'effect';\nimport { isAbsolute, join, resolve } from 'node:path';\n\nimport {\n\tlayerDockerMoveSummaryRunner,\n\tlayerMystenMoveCodegen,\n\tMoveCodegenService,\n\tMoveSummaryRunnerService,\n} from './codegen/bindings.ts';\nimport { CodegenPathsService, layerCodegenPaths, layerCodegenRoot } from './codegen/paths.ts';\nimport {\n\tCodegenOrchestratorService,\n\tlayerCodegenOrchestrator,\n\ttype Codegenable,\n} from './codegen/service.ts';\nimport { makeExtrasCodegenable } from './codegen/extras.ts';\nimport {\n\tDEFAULT_TRAEFIK_IMAGE,\n\tlayerDockerUpstreamResolver,\n\tlayerEntrypointRegistry,\n\tlayerRouterConfigLiteral,\n\tlayerRouterService,\n\tlayerTraefikContainerOpsDocker,\n\tRouterService,\n\ttype EndpointUrl,\n\ttype ResolvedRoute,\n} from './router/index.ts';\nimport { BUILT_IN_ENTRYPOINTS } from '../plugins/router-entrypoints.ts';\nimport {\n\tmakeDefaultRouterProfile,\n\ttype DefaultRouterProfileOptions,\n\ttype RouterProfile,\n} from './router/profile.ts';\nimport { layerSnapshotOrchestrator, SnapshotOrchestratorService } from './snapshot/index.ts';\nimport type { LivenessClassifierDecl } from '../contracts/liveness-classifier.ts';\nimport type { ProjectionDecl } from '../contracts/projection.ts';\nimport type { RoutableDecl } from '../contracts/routable.ts';\nimport type { SnapshotableDecl } from '../contracts/snapshotable.ts';\nimport type { StrategyContributorDecl } from '../contracts/strategy-contributor.ts';\nimport { endpointKey, type PluginKey } from '../substrate/brand.ts';\nimport type { EngineEvent } from '../substrate/events.ts';\nimport {\n\tbuildEnvelope,\n\tCURRENT_MANIFEST_VERSION,\n\twriteManifest,\n} from '../substrate/runtime/manifest/index.ts';\nimport { readResolvedSync } from '../substrate/runtime/lifecycle/index.ts';\nimport { resolveManifestExtras, type ManifestExtrasInput } from '../substrate/manifest.ts';\nimport { StackPathsService } from '../substrate/runtime/paths.ts';\nimport { PostAcquireTasksService } from '../substrate/runtime/post-acquire-tasks.ts';\nimport type {\n\tCapabilitySink,\n\tContributionKind,\n\tHarvestContext,\n\tOrchestratorSinks,\n} from '../substrate/runtime/capability-sinks/index.ts';\nimport type {\n\tSupervisorPostAcquireContext,\n\tSupervisorPostAcquireHook,\n} from '../substrate/runtime/supervisor.ts';\n\nexport interface ProductionCodegenOptions {\n\treadonly appRoot?: string;\n\treadonly outputDir?: string;\n\treadonly stackSubdir?: string | null;\n}\n\nexport interface ProductionRouterOptions {\n\treadonly codegen?: ProductionCodegenOptions;\n\treadonly disabled?: boolean;\n\treadonly image?: string;\n\treadonly profile?: RouterProfile;\n}\n\nexport interface ProductionPostAcquireOptions {\n\treadonly extras?: ManifestExtrasInput;\n}\n\nexport interface CapabilityDeliveryObservers {\n\treadonly routable?: (\n\t\tpluginKey: PluginKey,\n\t\tendpoint: EndpointUrl,\n\t\tevent: Extract<EngineEvent, { readonly tag: 'endpoint.registered' }>,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n\treadonly codegenable?: (\n\t\tpluginKey: PluginKey,\n\t\tdecl: Codegenable,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n}\n\nexport const productionRouterProfile = (options: DefaultRouterProfileOptions = {}): RouterProfile =>\n\tmakeDefaultRouterProfile(options);\n\nconst productionCodegenOutputDir = (appRoot: string, outputDir: string | undefined): string => {\n\tconst target = outputDir ?? 'src/generated';\n\treturn isAbsolute(target) ? target : resolve(appRoot, target);\n};\n\nexport const layerProductionOrchestrators = (router: ProductionRouterOptions = {}) => {\n\tconst profile = router.profile ?? productionRouterProfile();\n\treturn Layer.mergeAll(\n\t\tlayerSnapshotOrchestrator,\n\t\tlayerRouterService.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tLayer.mergeAll(\n\t\t\t\t\tlayerEntrypointRegistry(BUILT_IN_ENTRYPOINTS),\n\t\t\t\t\tlayerTraefikContainerOpsDocker,\n\t\t\t\t\tlayerDockerUpstreamResolver(profile),\n\t\t\t\t\tlayerRouterConfigLiteral({\n\t\t\t\t\t\tdisabled: router.disabled ?? false,\n\t\t\t\t\t\tprofile,\n\t\t\t\t\t\timage: router.image ?? DEFAULT_TRAEFIK_IMAGE,\n\t\t\t\t\t\trouteReadinessProbe: {\n\t\t\t\t\t\t\tenabled: router.disabled !== true,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t\tlayerCodegenOrchestrator,\n\t\tlayerCodegenPaths.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tlayerCodegenRoot({\n\t\t\t\t\toutputDir: productionCodegenOutputDir(\n\t\t\t\t\t\trouter.codegen?.appRoot ?? process.cwd(),\n\t\t\t\t\t\trouter.codegen?.outputDir,\n\t\t\t\t\t),\n\t\t\t\t\tstackSubdir: router.codegen?.stackSubdir ?? null,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\tlayerDockerMoveSummaryRunner,\n\t\tlayerMystenMoveCodegen,\n\t);\n};\n\nexport const bootRouterOrchestrator: Effect.Effect<void, never, RouterService> = Effect.gen(\n\tfunction* () {\n\t\tconst router = yield* RouterService;\n\t\tyield* router.boot().pipe(Effect.orDie);\n\t},\n);\n\nexport const endpointEventFromRoutable = (\n\tpluginKey: PluginKey,\n\tendpoint: EndpointUrl,\n\tregisteredAt = Date.now(),\n): Extract<EngineEvent, { readonly tag: 'endpoint.registered' }> => ({\n\ttag: 'endpoint.registered',\n\tendpoint: {\n\t\tendpointKey: endpointKey(`${pluginKey}:${endpoint.endpointName}`),\n\t\tname: endpoint.endpointName,\n\t\turl: endpoint.url,\n\t\tdisplayUrl: null,\n\t\twireProtocol: endpoint.wireProtocol,\n\t\tregisteredAt,\n\t},\n});\n\nconst orchestratorSink = <K extends ContributionKind, TDecl>(\n\tsink: CapabilitySink<K, TDecl>,\n): OrchestratorSinks[number] => sink as OrchestratorSinks[number];\n\nexport const makeProjectionCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'projection', ProjectionDecl>({\n\t\tkind: 'projection',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst event =\n\t\t\t\t\tdecl.event.tag === 'account.updated'\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\t...decl.event,\n\t\t\t\t\t\t\t\taccount: {\n\t\t\t\t\t\t\t\t\t...decl.event.account,\n\t\t\t\t\t\t\t\t\trowKey: decl.event.account.rowKey ?? ctx.pluginKey,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\t...decl.event,\n\t\t\t\t\t\t\t\tpackage: {\n\t\t\t\t\t\t\t\t\t...decl.event.package,\n\t\t\t\t\t\t\t\t\trowKey: decl.event.package.rowKey ?? ctx.pluginKey,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t};\n\t\t\t\tyield* ctx.publish(event);\n\t\t\t}),\n\t});\n\nexport const makeStrategyContributorCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'strategy-contributor', StrategyContributorDecl<string, unknown>>({\n\t\tkind: 'strategy-contributor',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tyield* ctx.registerStrategy(decl);\n\t\t\t\tconst at = Date.now();\n\t\t\t\tyield* ctx.publish({\n\t\t\t\t\ttag: 'strategy.registered',\n\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\tautoMounted: decl.autoMounted,\n\t\t\t\t\tat,\n\t\t\t\t});\n\t\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\t\tctx.publish({\n\t\t\t\t\t\ttag: 'strategy.unregistered',\n\t\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}),\n\t});\n\nexport const buildProductionOrchestratorSinks = (\n\tobservers: CapabilityDeliveryObservers = {},\n): Effect.Effect<\n\tOrchestratorSinks,\n\tnever,\n\tSnapshotOrchestratorService | RouterService | CodegenOrchestratorService\n> =>\n\tEffect.gen(function* () {\n\t\tconst snapshot = yield* SnapshotOrchestratorService;\n\t\tconst router = yield* RouterService;\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\treturn [\n\t\t\torchestratorSink<'snapshotable', SnapshotableDecl>({\n\t\t\t\tkind: 'snapshotable',\n\t\t\t\taccept: (decl, ctx) => snapshot.registerParticipant(ctx.pluginKey, decl),\n\t\t\t}),\n\t\t\torchestratorSink<'liveness-classifier', LivenessClassifierDecl>({\n\t\t\t\tkind: 'liveness-classifier',\n\t\t\t\taccept: (decl, ctx) => snapshot.registerClassifier(ctx.pluginKey, decl),\n\t\t\t}),\n\t\t\torchestratorSink<'routable', RoutableDecl>({\n\t\t\t\tkind: 'routable',\n\t\t\t\taccept: (decl, ctx: HarvestContext) =>\n\t\t\t\t\trouter.boot().pipe(\n\t\t\t\t\t\tEffect.andThen(router.contributeRoute(decl)),\n\t\t\t\t\t\tEffect.flatMap((endpoint) => {\n\t\t\t\t\t\t\tconst event = endpointEventFromRoutable(ctx.pluginKey, endpoint);\n\t\t\t\t\t\t\treturn ctx\n\t\t\t\t\t\t\t\t.publish(event)\n\t\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\t\tEffect.andThen(\n\t\t\t\t\t\t\t\t\t\tobservers.routable\n\t\t\t\t\t\t\t\t\t\t\t? observers.routable(ctx.pluginKey, endpoint, event)\n\t\t\t\t\t\t\t\t\t\t\t: Effect.void,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t}),\n\t\t\torchestratorSink<'codegenable', Codegenable>({\n\t\t\t\tkind: 'codegenable',\n\t\t\t\taccept: (decl, ctx) =>\n\t\t\t\t\tcodegen\n\t\t\t\t\t\t.registerContribution(ctx.pluginKey, decl)\n\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\tEffect.flatMap(() =>\n\t\t\t\t\t\t\t\tobservers.codegenable ? observers.codegenable(ctx.pluginKey, decl) : Effect.void,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t}),\n\t\t\tmakeProjectionCapabilitySink(),\n\t\t\tmakeStrategyContributorCapabilitySink(),\n\t\t];\n\t});\n\nconst makeManifestExtrasContext = (ctx: SupervisorPostAcquireContext) => {\n\tconst resourceIdToKey = new Map<string, PluginKey>();\n\tfor (const [key, node] of ctx.graph.nodes) {\n\t\tresourceIdToKey.set(node.member.id, key);\n\t}\n\tconst lookup = (resourceId: string): unknown => {\n\t\tconst key = resourceIdToKey.get(resourceId);\n\t\tif (key === undefined) {\n\t\t\tthrow new Error(`manifest extras requested unknown resource '${resourceId}'`);\n\t\t}\n\t\tconst resolved = readResolvedSync(ctx.registry, key);\n\t\tif (resolved === undefined) {\n\t\t\tthrow new Error(`manifest extras requested unresolved resource '${resourceId}'`);\n\t\t}\n\t\treturn resolved;\n\t};\n\treturn {\n\t\tvalue: (resource: { readonly id: string }) => lookup(resource.id),\n\t};\n};\n\nexport const buildProductionPostAcquireHook = (\n\toptions: ProductionPostAcquireOptions = {},\n): Effect.Effect<\n\tSupervisorPostAcquireHook,\n\tnever,\n\t| CodegenOrchestratorService\n\t| CodegenPathsService\n\t| MoveSummaryRunnerService\n\t| MoveCodegenService\n\t| FileSystem.FileSystem\n\t| StackPathsService\n\t| PostAcquireTasksService\n> =>\n\tEffect.gen(function* () {\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\tconst paths = yield* CodegenPathsService;\n\t\tconst summaryRunner = yield* MoveSummaryRunnerService;\n\t\tconst moveCodegen = yield* MoveCodegenService;\n\t\tconst fs = yield* FileSystem.FileSystem;\n\t\tconst stackPaths = yield* StackPathsService;\n\t\tconst postAcquireTasks = yield* PostAcquireTasksService;\n\t\treturn (ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst extras = yield* resolveManifestExtras(options.extras, makeManifestExtrasContext(ctx));\n\t\t\t\tconst envelope = yield* buildEnvelope({\n\t\t\t\t\tidentity: {\n\t\t\t\t\t\tapp: ctx.identity.app,\n\t\t\t\t\t\tstack: ctx.identity.stack,\n\t\t\t\t\t\tchain: ctx.identity.chain,\n\t\t\t\t\t},\n\t\t\t\t\tcontributions: [],\n\t\t\t\t\textras,\n\t\t\t\t});\n\t\t\t\tconst manifestPath = join(stackPaths.stackRoot, 'manifest.json');\n\t\t\t\tyield* writeManifest(envelope, manifestPath).pipe(\n\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t);\n\t\t\t\tconst result = yield* codegen\n\t\t\t\t\t.runCycle({ extraContributions: [makeExtrasCodegenable(extras)] })\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\tEffect.provideService(CodegenPathsService, paths),\n\t\t\t\t\t\tEffect.provideService(MoveSummaryRunnerService, summaryRunner),\n\t\t\t\t\t\tEffect.provideService(MoveCodegenService, moveCodegen),\n\t\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t\t);\n\t\t\t\tyield* postAcquireTasks.runAll;\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'manifest.flushed' as const,\n\t\t\t\t\t\tmanifestVersion: CURRENT_MANIFEST_VERSION,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'codegen.emitted' as const,\n\t\t\t\t\t\tfiles: [\n\t\t\t\t\t\t\t...result.filesWritten,\n\t\t\t\t\t\t\t...result.filesChmod,\n\t\t\t\t\t\t\t...(result.bindings?.filesWritten ?? []),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t});\n\t});\n\nexport type { EndpointUrl, ResolvedRoute };\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"runtime-composition.mjs","names":[],"sources":["../../src/orchestrators/runtime-composition.ts"],"sourcesContent":["// Shared production orchestrator composition.\n//\n// CLI, programmatic runStack, and the e2e boot harness all use this\n// module for capability delivery. Tests may swap service\n// implementations (Traefik ops, upstream resolver, codegen paths), but\n// the sink registrations and router boot step stay shared.\n\nimport { Context, Effect, FileSystem, Layer, Ref, Scope } from 'effect';\nimport { isAbsolute, join, resolve } from 'node:path';\n\nimport {\n\tlayerMystenMoveCodegen,\n\tMoveCodegenService,\n\tMoveSummaryRunnerService,\n} from './codegen/bindings.ts';\nimport { layerSuiMoveSummaryRunnerDocker } from '../plugins/sui/move-summary-runner.ts';\nimport { CodegenPathsService, layerCodegenPaths, layerCodegenRoot } from './codegen/paths.ts';\nimport {\n\tCodegenOrchestratorService,\n\tlayerCodegenOrchestrator,\n\ttype Codegenable,\n} from './codegen/service.ts';\nimport type { CodegenableDecl } from '../contracts/codegenable.ts';\nimport {\n\tDEFAULT_TRAEFIK_IMAGE,\n\tlayerDockerUpstreamResolver,\n\tlayerEntrypointRegistry,\n\tlayerRouterConfigLiteral,\n\tlayerRouterService,\n\tlayerTraefikContainerOpsDocker,\n\tRouterService,\n\ttype EndpointUrl,\n\ttype ResolvedRoute,\n} from './router/index.ts';\nimport { BUILT_IN_ENTRYPOINTS } from '../plugins/router-entrypoints.ts';\nimport {\n\tmakeDefaultRouterProfile,\n\ttype DefaultRouterProfileOptions,\n\ttype RouterProfile,\n} from './router/profile.ts';\nimport { layerSnapshotOrchestrator, SnapshotOrchestratorService } from './snapshot/index.ts';\nimport type { ProjectionDecl } from '../contracts/projection.ts';\nimport type { RoutableDecl } from '../contracts/routable.ts';\nimport type { SnapshotableDecl } from '../contracts/snapshotable.ts';\nimport type { StrategyContributorDecl } from '../contracts/strategy-contributor.ts';\nimport { endpointKey, type PluginKey } from '../substrate/brand.ts';\nimport type { EngineEvent } from '../substrate/events.ts';\nimport {\n\tbuildEnvelope,\n\tCURRENT_MANIFEST_VERSION,\n\twriteManifest,\n} from '../substrate/runtime/manifest/index.ts';\nimport { readResolvedSync } from '../substrate/runtime/lifecycle/index.ts';\nimport { operationalEndpointEventsFromResolvedValue } from '../substrate/runtime/projection/operational-endpoints.ts';\nimport {\n\tManifestExtrasLookupError,\n\tresolveManifestExtras,\n\ttype EndpointEntry,\n\ttype ManifestExtras,\n\ttype ManifestExtrasInput,\n} from '../substrate/manifest.ts';\nimport { StackPathsService } from '../substrate/runtime/paths.ts';\nimport { PostAcquireTasksService } from '../substrate/runtime/post-acquire-tasks.ts';\nimport type {\n\tCapabilitySink,\n\tContributionKind,\n\tHarvestContext,\n\tOrchestratorSinks,\n} from '../substrate/runtime/capability-sinks/index.ts';\nimport type {\n\tSupervisorPostAcquireContext,\n\tSupervisorPostAcquireHook,\n} from '../substrate/runtime/supervisor/index.ts';\n\nexport interface ProductionCodegenOptions {\n\treadonly appRoot?: string;\n\treadonly outputDir?: string;\n\treadonly stackSubdir?: string | null;\n}\n\nexport interface ProductionRouterOptions {\n\treadonly codegen?: ProductionCodegenOptions;\n\treadonly disabled?: boolean;\n\treadonly image?: string;\n\treadonly profile?: RouterProfile;\n}\n\nexport interface ProductionPostAcquireOptions {\n\treadonly extras?: ManifestExtrasInput;\n}\n\nexport interface ManifestEndpointRegistry {\n\treadonly register: (entry: EndpointEntry) => Effect.Effect<void, never, Scope.Scope>;\n\treadonly entries: Effect.Effect<ReadonlyArray<EndpointEntry>>;\n}\n\nexport class ManifestEndpointRegistryService extends Context.Service<\n\tManifestEndpointRegistryService,\n\tManifestEndpointRegistry\n>()('@devstack/orchestrators/ManifestEndpointRegistry') {}\n\nexport const layerManifestEndpointRegistry: Layer.Layer<ManifestEndpointRegistryService> =\n\tLayer.effect(\n\t\tManifestEndpointRegistryService,\n\t\tEffect.gen(function* () {\n\t\t\tconst entriesRef = yield* Ref.make<ReadonlyArray<EndpointEntry & { readonly seq: number }>>(\n\t\t\t\t[],\n\t\t\t);\n\t\t\tconst seqRef = yield* Ref.make(0);\n\n\t\t\tconst register = (entry: EndpointEntry): Effect.Effect<void, never, Scope.Scope> =>\n\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\tconst seq = yield* Ref.updateAndGet(seqRef, (n) => n + 1);\n\t\t\t\t\tyield* Ref.update(entriesRef, (entries) => [...entries, { ...entry, seq }]);\n\t\t\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\t\t\tRef.update(entriesRef, (entries) =>\n\t\t\t\t\t\t\tentries.filter((candidate) => candidate.seq !== seq),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t});\n\n\t\t\treturn ManifestEndpointRegistryService.of({\n\t\t\t\tregister,\n\t\t\t\tentries: Ref.get(entriesRef).pipe(\n\t\t\t\t\tEffect.map((entries) =>\n\t\t\t\t\t\tentries.map((entryWithSeq) => {\n\t\t\t\t\t\t\tconst { seq, ...entry } = entryWithSeq;\n\t\t\t\t\t\t\tvoid seq;\n\t\t\t\t\t\t\treturn entry;\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t});\n\t\t}),\n\t);\n\nexport interface CapabilityDeliveryObservers {\n\treadonly routable?: (\n\t\tpluginKey: PluginKey,\n\t\tendpoint: EndpointUrl,\n\t\tevent: Extract<EngineEvent, { readonly tag: 'endpoint.registered' }>,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n\treadonly codegenable?: (\n\t\tpluginKey: PluginKey,\n\t\tdecl: Codegenable,\n\t) => Effect.Effect<void, never, Scope.Scope>;\n}\n\nexport const productionRouterProfile = (options: DefaultRouterProfileOptions = {}): RouterProfile =>\n\tmakeDefaultRouterProfile(options);\n\nconst productionCodegenOutputDir = (appRoot: string, outputDir: string | undefined): string => {\n\tconst target = outputDir ?? 'src/generated';\n\treturn isAbsolute(target) ? target : resolve(appRoot, target);\n};\n\n/** Codegenable wrapping the resolved manifest-extras blob into a\n * generated `extras.ts` for app-side consumption. Single-callsite\n * helper — declared here to keep the orchestrator's view of the\n * contribution self-contained. */\nconst makeExtrasCodegenable = (extras: ManifestExtras): CodegenableDecl<'app-extras'> => ({\n\tkind: 'codegenable',\n\temitterName: 'app-extras',\n\toutputPath: 'extras.ts',\n\tsensitive: true,\n\temit: (ctx) =>\n\t\tEffect.sync(() => {\n\t\t\tctx.exportConst('extras', extras);\n\t\t\treturn ctx.done();\n\t\t}),\n});\n\nexport const layerProductionOrchestrators = (router: ProductionRouterOptions = {}) => {\n\tconst profile = router.profile ?? productionRouterProfile();\n\treturn Layer.mergeAll(\n\t\tlayerSnapshotOrchestrator,\n\t\tlayerManifestEndpointRegistry,\n\t\tlayerRouterService.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tLayer.mergeAll(\n\t\t\t\t\tlayerEntrypointRegistry(BUILT_IN_ENTRYPOINTS),\n\t\t\t\t\tlayerTraefikContainerOpsDocker,\n\t\t\t\t\tlayerDockerUpstreamResolver(profile),\n\t\t\t\t\tlayerRouterConfigLiteral({\n\t\t\t\t\t\tdisabled: router.disabled ?? false,\n\t\t\t\t\t\tprofile,\n\t\t\t\t\t\timage: router.image ?? DEFAULT_TRAEFIK_IMAGE,\n\t\t\t\t\t\trouteReadinessProbe: {\n\t\t\t\t\t\t\tenabled: router.disabled !== true,\n\t\t\t\t\t\t},\n\t\t\t\t\t}),\n\t\t\t\t),\n\t\t\t),\n\t\t),\n\t\tlayerCodegenOrchestrator,\n\t\tlayerCodegenPaths.pipe(\n\t\t\tLayer.provideMerge(\n\t\t\t\tlayerCodegenRoot({\n\t\t\t\t\toutputDir: productionCodegenOutputDir(\n\t\t\t\t\t\trouter.codegen?.appRoot ?? process.cwd(),\n\t\t\t\t\t\trouter.codegen?.outputDir,\n\t\t\t\t\t),\n\t\t\t\t\tstackSubdir: router.codegen?.stackSubdir ?? null,\n\t\t\t\t}),\n\t\t\t),\n\t\t),\n\t\tlayerSuiMoveSummaryRunnerDocker,\n\t\tlayerMystenMoveCodegen,\n\t);\n};\n\nexport const bootRouterOrchestrator: Effect.Effect<void, never, RouterService> = Effect.gen(\n\tfunction* () {\n\t\tconst router = yield* RouterService;\n\t\tyield* router.boot().pipe(Effect.orDie);\n\t},\n);\n\n/** Project a `(pluginKey, EndpointUrl)` pair into the field-set both\n * the engine event and the manifest entry stamp identically. Callers\n * spread this and then add their output-specific fields (the engine\n * event's branded `endpointKey` + `registeredAt`; the manifest\n * entry's stringified `endpointKey` + `pluginKey`). */\nconst routableToEndpointFields = (\n\tpluginKey: PluginKey,\n\tendpoint: EndpointUrl,\n): {\n\treadonly name: string;\n\treadonly url: string;\n\treadonly displayUrl: null;\n\treadonly wireProtocol: EndpointUrl['wireProtocol'];\n\treadonly endpointKeyString: string;\n} => ({\n\tname: endpoint.endpointName,\n\turl: endpoint.url,\n\tdisplayUrl: null,\n\twireProtocol: endpoint.wireProtocol,\n\tendpointKeyString: `${pluginKey}:${endpoint.endpointName}`,\n});\n\nexport const endpointEventFromRoutable = (\n\tpluginKey: PluginKey,\n\tendpoint: EndpointUrl,\n\tregisteredAt = Date.now(),\n): Extract<EngineEvent, { readonly tag: 'endpoint.registered' }> => {\n\tconst { endpointKeyString, ...common } = routableToEndpointFields(pluginKey, endpoint);\n\treturn {\n\t\ttag: 'endpoint.registered',\n\t\tendpoint: {\n\t\t\t...common,\n\t\t\tendpointKey: endpointKey(endpointKeyString),\n\t\t\tpluginKey,\n\t\t\tregisteredAt,\n\t\t},\n\t};\n};\n\nexport const manifestEndpointEntryFromRoutable = (\n\tpluginKey: PluginKey,\n\tendpoint: EndpointUrl,\n): EndpointEntry => {\n\tconst { endpointKeyString, ...common } = routableToEndpointFields(pluginKey, endpoint);\n\treturn {\n\t\t...common,\n\t\tendpointKey: endpointKeyString,\n\t\tpluginKey: String(pluginKey),\n\t};\n};\n\nconst manifestEndpointEntryFromOperationalEndpoint = (\n\tendpoint: Extract<EngineEvent, { readonly tag: 'endpoint.registered' }>['endpoint'],\n): EndpointEntry => ({\n\tendpointKey: String(endpoint.endpointKey),\n\tname: endpoint.name,\n\turl: endpoint.url,\n\tdisplayUrl: endpoint.displayUrl,\n\twireProtocol: endpoint.wireProtocol,\n\tpluginKey: String(endpoint.pluginKey),\n});\n\nconst orchestratorSink = <K extends ContributionKind, TDecl>(\n\tsink: CapabilitySink<K, TDecl>,\n): OrchestratorSinks[number] => sink as OrchestratorSinks[number];\n\nexport const makeProjectionCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'projection', ProjectionDecl>({\n\t\tkind: 'projection',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\t// Stamp `rowKey` (when absent) so projection consumers can\n\t\t\t\t// attribute the row to the contributing plugin. The payload\n\t\t\t\t// stays opaque from the substrate's POV; we project just\n\t\t\t\t// enough to set the row-key field if the payload exposes it.\n\t\t\t\tconst payload = decl.event.payload;\n\t\t\t\tconst payloadWithRowKey =\n\t\t\t\t\tpayload !== null &&\n\t\t\t\t\ttypeof payload === 'object' &&\n\t\t\t\t\t'rowKey' in payload &&\n\t\t\t\t\t(payload as { rowKey: unknown }).rowKey === null\n\t\t\t\t\t\t? { ...payload, rowKey: ctx.pluginKey }\n\t\t\t\t\t\t: payload;\n\t\t\t\tyield* ctx.publish({\n\t\t\t\t\t...decl.event,\n\t\t\t\t\tpayload: payloadWithRowKey,\n\t\t\t\t});\n\t\t\t}),\n\t});\n\nexport const makeStrategyContributorCapabilitySink = (): OrchestratorSinks[number] =>\n\torchestratorSink<'strategy-contributor', StrategyContributorDecl<string, unknown>>({\n\t\tkind: 'strategy-contributor',\n\t\taccept: (decl, ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tyield* ctx.registerStrategy(decl);\n\t\t\t\tconst at = Date.now();\n\t\t\t\tyield* ctx.publish({\n\t\t\t\t\ttag: 'strategy.registered',\n\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\tautoMounted: decl.autoMounted,\n\t\t\t\t\tat,\n\t\t\t\t});\n\t\t\t\tyield* Effect.addFinalizer(() =>\n\t\t\t\t\tctx.publish({\n\t\t\t\t\t\ttag: 'strategy.unregistered',\n\t\t\t\t\t\tcapabilityKey: decl.capabilityKey,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}),\n\t});\n\nexport const buildProductionOrchestratorSinks = (\n\tobservers: CapabilityDeliveryObservers = {},\n): Effect.Effect<\n\tOrchestratorSinks,\n\tnever,\n\t| SnapshotOrchestratorService\n\t| RouterService\n\t| CodegenOrchestratorService\n\t| ManifestEndpointRegistryService\n> =>\n\tEffect.gen(function* () {\n\t\tconst snapshot = yield* SnapshotOrchestratorService;\n\t\tconst router = yield* RouterService;\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\tconst manifestEndpoints = yield* ManifestEndpointRegistryService;\n\t\treturn [\n\t\t\torchestratorSink<'snapshotable', SnapshotableDecl>({\n\t\t\t\tkind: 'snapshotable',\n\t\t\t\taccept: (decl, ctx) => snapshot.registerParticipant(ctx.pluginKey, decl),\n\t\t\t}),\n\t\t\torchestratorSink<'routable', RoutableDecl>({\n\t\t\t\tkind: 'routable',\n\t\t\t\taccept: (decl, ctx: HarvestContext) =>\n\t\t\t\t\trouter.boot().pipe(\n\t\t\t\t\t\tEffect.andThen(router.contributeRoute(decl)),\n\t\t\t\t\t\tEffect.flatMap((endpoint) => {\n\t\t\t\t\t\t\tconst event = endpointEventFromRoutable(ctx.pluginKey, endpoint);\n\t\t\t\t\t\t\tconst manifestEntry = manifestEndpointEntryFromRoutable(ctx.pluginKey, endpoint);\n\t\t\t\t\t\t\treturn manifestEndpoints\n\t\t\t\t\t\t\t\t.register(manifestEntry)\n\t\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\t\tEffect.andThen(ctx.publish(event)),\n\t\t\t\t\t\t\t\t\tEffect.andThen(\n\t\t\t\t\t\t\t\t\t\tobservers.routable\n\t\t\t\t\t\t\t\t\t\t\t? observers.routable(ctx.pluginKey, endpoint, event)\n\t\t\t\t\t\t\t\t\t\t\t: Effect.void,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t}),\n\t\t\torchestratorSink<'codegenable', Codegenable>({\n\t\t\t\tkind: 'codegenable',\n\t\t\t\taccept: (decl, ctx) =>\n\t\t\t\t\tcodegen\n\t\t\t\t\t\t.registerContribution(ctx.pluginKey, decl)\n\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\tEffect.flatMap(() =>\n\t\t\t\t\t\t\t\tobservers.codegenable ? observers.codegenable(ctx.pluginKey, decl) : Effect.void,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t}),\n\t\t\tmakeProjectionCapabilitySink(),\n\t\t\tmakeStrategyContributorCapabilitySink(),\n\t\t];\n\t});\n\nconst makeManifestExtrasContext = (ctx: SupervisorPostAcquireContext) => {\n\tconst resourceIdToKey = new Map<string, PluginKey>();\n\tfor (const [key, node] of ctx.graph.nodes) {\n\t\tresourceIdToKey.set(node.member.id, key);\n\t}\n\t// `lookup` throws `ManifestExtrasLookupError` synchronously from\n\t// inside the user-supplied `extras` factory.\n\t// `resolveManifestExtras` invokes that factory under `Effect.try`\n\t// with a typed `catch` mapper, so the throw promotes to the typed\n\t// failure channel — callers `catchTag('ManifestExtrasLookupError',\n\t// ...)` rather than reading the die-cause. Non-tagged throws stay\n\t// defects, preserving the previous semantics for genuine\n\t// programmer errors inside the factory body.\n\tconst lookup = (resourceId: string): unknown => {\n\t\tconst key = resourceIdToKey.get(resourceId);\n\t\tif (key === undefined) {\n\t\t\tthrow new ManifestExtrasLookupError({\n\t\t\t\tkind: 'unknown-resource',\n\t\t\t\tresourceId,\n\t\t\t});\n\t\t}\n\t\tconst resolved = readResolvedSync(ctx.registry, key);\n\t\tif (resolved === undefined) {\n\t\t\tthrow new ManifestExtrasLookupError({\n\t\t\t\tkind: 'unresolved-resource',\n\t\t\t\tresourceId,\n\t\t\t});\n\t\t}\n\t\treturn resolved;\n\t};\n\treturn {\n\t\tvalue: (resource: { readonly id: string }) => lookup(resource.id),\n\t};\n};\n\nconst operationalManifestEndpointEntries = (\n\tctx: SupervisorPostAcquireContext,\n\troutableEntries: ReadonlyArray<EndpointEntry>,\n): ReadonlyArray<EndpointEntry> => {\n\tconst routablePluginKeys = new Set(routableEntries.map((entry) => entry.pluginKey));\n\tconst registeredAt = Date.now();\n\tconst entries: EndpointEntry[] = [];\n\tfor (const [key] of ctx.graph.nodes) {\n\t\tif (routablePluginKeys.has(String(key))) continue;\n\t\tconst resolved = readResolvedSync(ctx.registry, key);\n\t\tif (resolved === undefined) continue;\n\t\tfor (const event of operationalEndpointEventsFromResolvedValue(key, resolved, registeredAt)) {\n\t\t\tentries.push(manifestEndpointEntryFromOperationalEndpoint(event.endpoint));\n\t\t}\n\t}\n\treturn entries;\n};\n\nexport const buildProductionPostAcquireHook = (\n\toptions: ProductionPostAcquireOptions = {},\n): Effect.Effect<\n\tSupervisorPostAcquireHook,\n\tnever,\n\t| CodegenOrchestratorService\n\t| CodegenPathsService\n\t| MoveSummaryRunnerService\n\t| MoveCodegenService\n\t| FileSystem.FileSystem\n\t| StackPathsService\n\t| PostAcquireTasksService\n\t| ManifestEndpointRegistryService\n> =>\n\tEffect.gen(function* () {\n\t\tconst codegen = yield* CodegenOrchestratorService;\n\t\tconst paths = yield* CodegenPathsService;\n\t\tconst summaryRunner = yield* MoveSummaryRunnerService;\n\t\tconst moveCodegen = yield* MoveCodegenService;\n\t\tconst fs = yield* FileSystem.FileSystem;\n\t\tconst stackPaths = yield* StackPathsService;\n\t\tconst postAcquireTasks = yield* PostAcquireTasksService;\n\t\tconst manifestEndpoints = yield* ManifestEndpointRegistryService;\n\t\treturn (ctx) =>\n\t\t\tEffect.gen(function* () {\n\t\t\t\tconst extras = yield* resolveManifestExtras(options.extras, makeManifestExtrasContext(ctx));\n\t\t\t\tconst routableEndpoints = yield* manifestEndpoints.entries;\n\t\t\t\tconst endpoints = [\n\t\t\t\t\t...routableEndpoints,\n\t\t\t\t\t...operationalManifestEndpointEntries(ctx, routableEndpoints),\n\t\t\t\t];\n\t\t\t\tconst envelope = yield* buildEnvelope({\n\t\t\t\t\tidentity: {\n\t\t\t\t\t\tapp: ctx.identity.app,\n\t\t\t\t\t\tstack: ctx.identity.stack,\n\t\t\t\t\t\tchain: ctx.identity.chain,\n\t\t\t\t\t},\n\t\t\t\t\tcontributions: [],\n\t\t\t\t\tendpoints,\n\t\t\t\t\textras,\n\t\t\t\t\t// Record the EXACT dir codegen emits into for this stack so\n\t\t\t\t\t// the read-side `@generated` alias (the Vite plugin) points\n\t\t\t\t\t// where the files actually are — one decision, one source of\n\t\t\t\t\t// truth (notes/per-stack-codegen-design.md §\"Resolved: read\n\t\t\t\t\t// and write share one gate\"). `paths.outputDir` is already\n\t\t\t\t\t// the resolved, stack-subdir-applied absolute path the emit\n\t\t\t\t\t// pipeline writes to.\n\t\t\t\t\tcodegen: { generatedDir: paths.outputDir },\n\t\t\t\t});\n\t\t\t\tconst manifestPath = join(stackPaths.stackRoot, 'manifest.json');\n\t\t\t\tyield* writeManifest(envelope, manifestPath).pipe(\n\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t);\n\t\t\t\tconst result = yield* codegen\n\t\t\t\t\t.runCycle({ extraContributions: [makeExtrasCodegenable(extras)] })\n\t\t\t\t\t.pipe(\n\t\t\t\t\t\tEffect.provideService(CodegenPathsService, paths),\n\t\t\t\t\t\tEffect.provideService(MoveSummaryRunnerService, summaryRunner),\n\t\t\t\t\t\tEffect.provideService(MoveCodegenService, moveCodegen),\n\t\t\t\t\t\tEffect.provideService(FileSystem.FileSystem, fs),\n\t\t\t\t\t);\n\t\t\t\tyield* postAcquireTasks.runAll;\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'manifest.flushed' as const,\n\t\t\t\t\t\tmanifestVersion: CURRENT_MANIFEST_VERSION,\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttag: 'codegen.emitted' as const,\n\t\t\t\t\t\tfiles: [\n\t\t\t\t\t\t\t...result.filesWritten,\n\t\t\t\t\t\t\t...result.filesChmod,\n\t\t\t\t\t\t\t...(result.bindings?.filesWritten ?? []),\n\t\t\t\t\t\t],\n\t\t\t\t\t\tat: Date.now(),\n\t\t\t\t\t},\n\t\t\t\t];\n\t\t\t});\n\t});\n\nexport type { EndpointUrl, ResolvedRoute };\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { Effect, FileSystem } from "effect";
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { SnapshotOrchestratorService } from "./service.mjs";
|
|
2
|
+
import { Effect } from "effect";
|
|
3
|
+
//#region src/orchestrators/snapshot/capture-command.ts
|
|
4
|
+
/** Capture a snapshot via the registered `SnapshotOrchestratorService`.
|
|
5
|
+
* Returns the orchestrator's typed `SnapshotMetadata` on success;
|
|
6
|
+
* fails with the orchestrator's tagged `SnapshotOrchestratorError`
|
|
7
|
+
* union (callers `catchTags` on the precise tags they care about).
|
|
8
|
+
*
|
|
9
|
+
* The required context — `SnapshotOrchestratorService` and the
|
|
10
|
+
* `FileSystem` service the orchestrator's `capture` call consumes —
|
|
11
|
+
* flows in through the ambient Effect Context (NOT closure args);
|
|
12
|
+
* identity and stack-paths come transitively from the orchestrator
|
|
13
|
+
* layer's own requirements.
|
|
14
|
+
*/
|
|
15
|
+
const captureSnapshot = (args) => Effect.gen(function* () {
|
|
16
|
+
return yield* (yield* SnapshotOrchestratorService).capture({
|
|
17
|
+
id: args.snapshotId,
|
|
18
|
+
label: args.name,
|
|
19
|
+
onProgress: args.onProgress
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
//#endregion
|
|
23
|
+
export { captureSnapshot };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=capture-command.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capture-command.mjs","names":[],"sources":["../../../src/orchestrators/snapshot/capture-command.ts"],"sourcesContent":["// Shared `captureSnapshot` command primitive.\n//\n// This is the hoisted core of `EngineCommand` `snapshot.capture` —\n// the single Effect both publishers reach for:\n//\n// - The supervisor's command handler in `cli/wirings/up.ts`\n// consumes a queued `snapshot.capture` EngineCommand and forwards\n// its `{ snapshotId, name }` payload here (with `onProgress`\n// wired to `handlerCtx.publish` so progress lands on the engine\n// event stream).\n//\n// - The CLI's direct/offline `snapshot save` path in\n// `cli/wirings/snapshot.ts` calls this from inside its one-shot\n// `superviseStackEffect` scope (no supervisor alive).\n//\n// - A future web-dashboard command receiver lands here too — it\n// only needs the `SnapshotOrchestratorService` + `FileSystem` in\n// its layer stack, with no CLI wiring imported.\n//\n// The primitive's contract is intentionally narrow: it owns the\n// EngineCommand-payload → orchestrator-call shape and nothing else.\n// CLI-specific concerns (logger config, exit codes, ack/event\n// shaping, error narration) stay at the call sites — this file\n// MUST NOT bake them in.\n\nimport { Effect, FileSystem } from 'effect';\n\nimport type { SnapshotProgressReporter } from './capture.ts';\nimport type { SnapshotMetadata } from './descriptor.ts';\nimport {\n\tSnapshotOrchestratorService,\n\ttype SnapshotOrchestratorError,\n} from './service.ts';\n\n/** Inputs mirror the `snapshot.capture` EngineCommand payload\n * (`{ snapshotId?, name? }`) plus the optional progress reporter\n * the supervisor wires into its event-publish bridge. The offline\n * CLI path passes the same payload (from CLI flags) and omits\n * `onProgress` (no engine stream to publish to). */\nexport interface CaptureSnapshotArgs {\n\treadonly snapshotId?: string;\n\treadonly name?: string;\n\treadonly onProgress?: SnapshotProgressReporter;\n}\n\n/** Capture a snapshot via the registered `SnapshotOrchestratorService`.\n * Returns the orchestrator's typed `SnapshotMetadata` on success;\n * fails with the orchestrator's tagged `SnapshotOrchestratorError`\n * union (callers `catchTags` on the precise tags they care about).\n *\n * The required context — `SnapshotOrchestratorService` and the\n * `FileSystem` service the orchestrator's `capture` call consumes —\n * flows in through the ambient Effect Context (NOT closure args);\n * identity and stack-paths come transitively from the orchestrator\n * layer's own requirements.\n */\nexport const captureSnapshot = (\n\targs: CaptureSnapshotArgs,\n): Effect.Effect<\n\tSnapshotMetadata,\n\tSnapshotOrchestratorError,\n\tSnapshotOrchestratorService | FileSystem.FileSystem\n> =>\n\tEffect.gen(function* () {\n\t\tconst snapshot = yield* SnapshotOrchestratorService;\n\t\treturn yield* snapshot.capture({\n\t\t\tid: args.snapshotId,\n\t\t\tlabel: args.name,\n\t\t\tonProgress: args.onProgress,\n\t\t});\n\t});\n"],"mappings":";;;;;;;;;;;;;;AAwDA,MAAa,mBACZ,SAMA,OAAO,IAAI,aAAa;AAEvB,QAAO,QAAO,OADU,6BACD,QAAQ;EAC9B,IAAI,KAAK;EACT,OAAO,KAAK;EACZ,YAAY,KAAK;EACjB,CAAC;EACD"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { tarHostTree } from "../../substrate/runtime/host-tree-tar/index.mjs";
|
|
2
|
-
import { SnapshotLayout, containerImagesBundlePath, contributionPath, isRestorableContainerImageName, isSafeSnapshotPathSegment } from "./descriptor.mjs";
|
|
2
|
+
import { DEPLOY_CACHE_NAMESPACES, SnapshotLayout, containerImagesBundlePath, contributionPath, isRestorableContainerImageName, isSafeSnapshotPathSegment } from "./descriptor.mjs";
|
|
3
|
+
import { makePhaseFailer } from "./phase-error.mjs";
|
|
4
|
+
import { CACHE_DIR_NAME } from "./wipe.mjs";
|
|
3
5
|
import { readImageBundleTags, verifyImageBundleTags } from "./image-bundle-tags.mjs";
|
|
4
6
|
import { writeArtifactIntegrity } from "./integrity.mjs";
|
|
5
|
-
import { requireIdentity } from "./identity-guard.mjs";
|
|
7
|
+
import { mergeContributions, requireIdentity } from "./identity-guard.mjs";
|
|
6
8
|
import { readSnapshotStateDocument, writeSnapshotStateDocument } from "./state-document.mjs";
|
|
7
9
|
import { Effect, Exit, FileSystem, Schema, Stream } from "effect";
|
|
8
10
|
//#region src/orchestrators/snapshot/capture.ts
|
|
@@ -28,12 +30,7 @@ var CapturePhaseError = class extends Schema.TaggedErrorClass()("SnapshotCapture
|
|
|
28
30
|
detail: Schema.String,
|
|
29
31
|
cause: Schema.optional(Schema.Defect)
|
|
30
32
|
}) {};
|
|
31
|
-
const failPhase = (
|
|
32
|
-
phase,
|
|
33
|
-
plugin,
|
|
34
|
-
detail,
|
|
35
|
-
cause
|
|
36
|
-
}));
|
|
33
|
+
const failPhase = makePhaseFailer(CapturePhaseError);
|
|
37
34
|
const failImageBundleTagScan = (cause) => Effect.fail(new CapturePhaseError({
|
|
38
35
|
phase: "save-images",
|
|
39
36
|
detail: cause.detail,
|
|
@@ -188,15 +185,16 @@ const runCapture = (inputs) => Effect.gen(function* () {
|
|
|
188
185
|
const report = (progress) => inputs.onProgress?.(progress) ?? Effect.void;
|
|
189
186
|
return yield* Effect.scoped(Effect.gen(function* () {
|
|
190
187
|
const capturedContainers = [];
|
|
191
|
-
const
|
|
188
|
+
const pauseIntended = [];
|
|
189
|
+
const pauseConfirmed = [];
|
|
192
190
|
yield* Effect.addFinalizer(() => Effect.gen(function* () {
|
|
193
|
-
if (
|
|
191
|
+
if (pauseIntended.length > 0) yield* report({
|
|
194
192
|
phase: "resuming",
|
|
195
|
-
detail: `unpausing ${
|
|
196
|
-
pausedContainers:
|
|
197
|
-
totalContainers:
|
|
193
|
+
detail: `unpausing ${pauseIntended.length} container${pauseIntended.length === 1 ? "" : "s"}`,
|
|
194
|
+
pausedContainers: pauseConfirmed.length,
|
|
195
|
+
totalContainers: pauseIntended.length
|
|
198
196
|
});
|
|
199
|
-
yield* Effect.forEach(
|
|
197
|
+
yield* Effect.forEach(pauseIntended, (handle) => inputs.runtime.unpause(handle).pipe(Effect.catch((cause) => Effect.logWarning(`unpause(${handle.name}) failed during snapshot capture: ${String(cause)}`))), { concurrency: "unbounded" });
|
|
200
198
|
}).pipe(Effect.asVoid));
|
|
201
199
|
const plannedContainers = [];
|
|
202
200
|
const committedRefs = [];
|
|
@@ -229,8 +227,9 @@ const runCapture = (inputs) => Effect.gen(function* () {
|
|
|
229
227
|
for (const entry of plannedContainers) {
|
|
230
228
|
const { handle, unpauseAfterCapture } = entry;
|
|
231
229
|
if (unpauseAfterCapture) {
|
|
230
|
+
pauseIntended.push(handle);
|
|
232
231
|
yield* inputs.runtime.pause(handle).pipe(Effect.catch(failPhase("pause", `pause failed for ${handle.name}`, entry.participant.plugin)));
|
|
233
|
-
|
|
232
|
+
pauseConfirmed.push(handle);
|
|
234
233
|
}
|
|
235
234
|
readyContainers.push({
|
|
236
235
|
...entry,
|
|
@@ -242,15 +241,15 @@ const runCapture = (inputs) => Effect.gen(function* () {
|
|
|
242
241
|
}
|
|
243
242
|
if (runningContainers.length > 0) yield* report({
|
|
244
243
|
phase: "paused",
|
|
245
|
-
detail: `stack paused for snapshot (${
|
|
246
|
-
pausedContainers:
|
|
244
|
+
detail: `stack paused for snapshot (${pauseConfirmed.length}/${runningContainers.length} containers)`,
|
|
245
|
+
pausedContainers: pauseConfirmed.length,
|
|
247
246
|
totalContainers: runningContainers.length
|
|
248
247
|
});
|
|
249
248
|
const committedContainers = [];
|
|
250
249
|
if (readyContainers.length > 0) yield* report({
|
|
251
250
|
phase: "capturing-containers",
|
|
252
251
|
detail: `committing ${readyContainers.length} container${readyContainers.length === 1 ? "" : "s"}`,
|
|
253
|
-
pausedContainers:
|
|
252
|
+
pausedContainers: pauseConfirmed.length,
|
|
254
253
|
totalContainers: runningContainers.length
|
|
255
254
|
});
|
|
256
255
|
for (const { commitHandle, labels, participant } of readyContainers) {
|
|
@@ -263,22 +262,27 @@ const runCapture = (inputs) => Effect.gen(function* () {
|
|
|
263
262
|
if (committedContainers.length > 0) yield* report({
|
|
264
263
|
phase: "saving-images",
|
|
265
264
|
detail: `saving ${committedContainers.length} committed image${committedContainers.length === 1 ? "" : "s"}`,
|
|
266
|
-
pausedContainers:
|
|
265
|
+
pausedContainers: pauseConfirmed.length,
|
|
267
266
|
totalContainers: runningContainers.length
|
|
268
267
|
});
|
|
269
268
|
yield* saveCommittedImages(committedContainers, inputs.stagingDir, inputs.runtime);
|
|
270
|
-
const subtrees = yield* resolveCapturedSubtrees(inputs.participants.flatMap((p) => p.decl.subtrees.map((relPath) => ({
|
|
269
|
+
const subtrees = yield* resolveCapturedSubtrees([...inputs.participants.flatMap((p) => p.decl.subtrees.map((relPath) => ({
|
|
271
270
|
plugin: p.plugin,
|
|
272
271
|
relPath,
|
|
273
272
|
missingTolerance: p.decl.missingTolerance,
|
|
274
273
|
secretMaterial: p.decl.secretMaterial ?? false
|
|
275
|
-
}))),
|
|
274
|
+
}))), ...DEPLOY_CACHE_NAMESPACES.map((ns) => ({
|
|
275
|
+
plugin: "snapshot/deploy-cache",
|
|
276
|
+
relPath: `${CACHE_DIR_NAME}/${ns}`,
|
|
277
|
+
missingTolerance: "fine",
|
|
278
|
+
secretMaterial: false
|
|
279
|
+
}))], inputs.runtimeStackRoot);
|
|
276
280
|
const hostTreeIncluded = subtrees.length > 0;
|
|
277
281
|
if (hostTreeIncluded) {
|
|
278
282
|
yield* report({
|
|
279
283
|
phase: "capturing-host-tree",
|
|
280
284
|
detail: `archiving ${subtrees.length} host subtree${subtrees.length === 1 ? "" : "s"}`,
|
|
281
|
-
pausedContainers:
|
|
285
|
+
pausedContainers: pauseConfirmed.length,
|
|
282
286
|
totalContainers: runningContainers.length
|
|
283
287
|
});
|
|
284
288
|
yield* writeHostTreeTar(inputs.runtimeStackRoot, subtrees, `${inputs.stagingDir}/${SnapshotLayout.hostTreeTar}`);
|
|
@@ -287,7 +291,7 @@ const runCapture = (inputs) => Effect.gen(function* () {
|
|
|
287
291
|
yield* report({
|
|
288
292
|
phase: "saving-state",
|
|
289
293
|
detail: "copying runtime state",
|
|
290
|
-
pausedContainers:
|
|
294
|
+
pausedContainers: pauseConfirmed.length,
|
|
291
295
|
totalContainers: runningContainers.length
|
|
292
296
|
});
|
|
293
297
|
const stateDoc = yield* readSnapshotStateDocument(inputs.stateFilePath).pipe(Effect.catch(failPhase("read-state", `state.json failed schema validation`)));
|
|
@@ -296,16 +300,26 @@ const runCapture = (inputs) => Effect.gen(function* () {
|
|
|
296
300
|
yield* report({
|
|
297
301
|
phase: "saving-contributions",
|
|
298
302
|
detail: `writing ${inputs.participants.length} contribution document${inputs.participants.length === 1 ? "" : "s"}`,
|
|
299
|
-
pausedContainers:
|
|
303
|
+
pausedContainers: pauseConfirmed.length,
|
|
300
304
|
totalContainers: runningContainers.length
|
|
301
305
|
});
|
|
302
306
|
yield* fs.makeDirectory(`${inputs.stagingDir}/${SnapshotLayout.contributionsDir}`, { recursive: true }).pipe(Effect.catch(failPhase("write-contribution", `mkdir contributions dir failed`)));
|
|
303
|
-
const
|
|
307
|
+
const identityContributions = [];
|
|
308
|
+
const stateByParticipant = /* @__PURE__ */ new Map();
|
|
304
309
|
const participantKeys = [];
|
|
305
310
|
for (const participant of inputs.participants) {
|
|
306
311
|
const identity = yield* participant.captureIdentity;
|
|
307
|
-
|
|
312
|
+
identityContributions.push({
|
|
313
|
+
plugin: participant.plugin,
|
|
314
|
+
slice: identity
|
|
315
|
+
});
|
|
308
316
|
const state = yield* participant.captureContribution;
|
|
317
|
+
stateByParticipant.set(participant.plugin, state);
|
|
318
|
+
}
|
|
319
|
+
const identityMerged = yield* mergeContributions(identityContributions);
|
|
320
|
+
for (const participant of inputs.participants) {
|
|
321
|
+
const identity = identityContributions.find((c) => c.plugin === participant.plugin)?.slice ?? {};
|
|
322
|
+
const state = stateByParticipant.get(participant.plugin);
|
|
309
323
|
const doc = {
|
|
310
324
|
version: 1,
|
|
311
325
|
plugin: participant.plugin,
|
|
@@ -322,7 +336,7 @@ const runCapture = (inputs) => Effect.gen(function* () {
|
|
|
322
336
|
yield* report({
|
|
323
337
|
phase: "writing-metadata",
|
|
324
338
|
detail: "finalizing snapshot artifact",
|
|
325
|
-
pausedContainers:
|
|
339
|
+
pausedContainers: pauseConfirmed.length,
|
|
326
340
|
totalContainers: runningContainers.length
|
|
327
341
|
});
|
|
328
342
|
const meta = {
|
|
@@ -345,6 +359,6 @@ const runCapture = (inputs) => Effect.gen(function* () {
|
|
|
345
359
|
}));
|
|
346
360
|
}).pipe(Effect.withSpan("orchestrator.snapshot.capture"));
|
|
347
361
|
//#endregion
|
|
348
|
-
export { runCapture };
|
|
362
|
+
export { CapturePhaseError, runCapture };
|
|
349
363
|
|
|
350
364
|
//# sourceMappingURL=capture.mjs.map
|