deepline 0.3.88 → 0.3.90
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/contracts/install-commands.json +29 -0
- package/dist/bundling-sources/sdk/src/client.ts +652 -39
- package/dist/bundling-sources/sdk/src/config.ts +77 -0
- package/dist/bundling-sources/sdk/src/http.ts +76 -30
- package/dist/bundling-sources/sdk/src/index.ts +10 -0
- package/dist/bundling-sources/sdk/src/monitor-fleet-contract.ts +1 -1
- package/dist/bundling-sources/sdk/src/pagination.ts +25 -0
- package/dist/bundling-sources/sdk/src/play.ts +15 -1
- package/dist/bundling-sources/sdk/src/plays/bundle-play-file.ts +3 -3
- package/dist/bundling-sources/sdk/src/release.ts +16 -9
- package/dist/bundling-sources/sdk/src/types.ts +106 -4
- package/dist/bundling-sources/shared_libs/integration-contracts/AGENTS.md +9 -0
- package/dist/bundling-sources/shared_libs/integration-contracts/README.md +3 -0
- package/dist/bundling-sources/shared_libs/integration-contracts/index.ts +2 -0
- package/dist/bundling-sources/shared_libs/monitors/analytics-install-guides.ts +77 -0
- package/dist/bundling-sources/shared_libs/monitors/analytics-public.ts +10 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/charges.ts +125 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/policy-builders.ts +686 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/pricing.ts +54 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/public-pricing.ts +72 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/session.ts +45 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/state.ts +454 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/tamradar.ts +260 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/types.ts +215 -0
- package/dist/bundling-sources/shared_libs/monitors/callback-security.ts +333 -0
- package/dist/bundling-sources/shared_libs/monitors/cursor-page.ts +42 -0
- package/dist/bundling-sources/shared_libs/monitors/deactivation-reasons.ts +16 -0
- package/dist/bundling-sources/shared_libs/monitors/framework-managed-payload-fields.ts +71 -0
- package/dist/bundling-sources/shared_libs/monitors/generated/provider-monitor-callback-admission-targets.ts +16 -0
- package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +270 -0
- package/dist/bundling-sources/shared_libs/monitors/inbound-publish-key.ts +39 -0
- package/dist/bundling-sources/shared_libs/monitors/inbound-queue.ts +82 -0
- package/dist/bundling-sources/shared_libs/monitors/inventory-reconciliation.ts +59 -0
- package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +471 -0
- package/dist/bundling-sources/shared_libs/monitors/org-monitor-limits.ts +1 -1
- package/dist/bundling-sources/shared_libs/monitors/package.json +36 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-callback-verification.ts +1125 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-batch-operation.ts +305 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-capability.ts +964 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-consumer-health.ts +56 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-errors.ts +131 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-identity-claims.ts +535 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-legacy-aliases.ts +16 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-priority-execution.ts +56 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-public-aliases.ts +28 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-runtime-read-eligibility.ts +38 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-state.ts +122 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-status.ts +10 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-upstream-identity.ts +112 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-webhook-monitor-runtime.ts +300 -0
- package/dist/bundling-sources/shared_libs/monitors/quickstart-prompts.ts +22 -0
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-dead-letter.ts +245 -0
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-message.ts +38 -0
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue-ack-probe.ts +94 -0
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue-delivery.ts +60 -0
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-queue.ts +60 -0
- package/dist/bundling-sources/shared_libs/monitors/snitcher-install-validation.ts +93 -0
- package/dist/bundling-sources/shared_libs/monitors/snitcher-ip2company.ts +332 -0
- package/dist/bundling-sources/shared_libs/monitors/snitcher-radar.ts +221 -0
- package/dist/bundling-sources/shared_libs/monitors/starter-templates.ts +105 -0
- package/dist/bundling-sources/shared_libs/monitors/tracking-provider-guidance.ts +73 -0
- package/dist/bundling-sources/shared_libs/monitors/tracking-provider-integrations.ts +81 -0
- package/dist/bundling-sources/shared_libs/monitors/tsconfig.json +10 -0
- package/dist/bundling-sources/shared_libs/observability/build-context.ts +13 -0
- package/dist/bundling-sources/shared_libs/observability/log-metadata.ts +160 -0
- package/dist/bundling-sources/shared_libs/observability/request-context.ts +68 -0
- package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +654 -0
- package/dist/bundling-sources/shared_libs/observability/scheduled-work-manual.ts +35 -0
- package/dist/bundling-sources/shared_libs/observability/scheduled-work.ts +5 -0
- package/dist/bundling-sources/shared_libs/play-data-plane/neon-constants.ts +9 -0
- package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +272 -0
- package/dist/bundling-sources/shared_libs/play-runtime/activity-observation.ts +6 -11
- package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +135 -12
- package/dist/bundling-sources/shared_libs/play-runtime/async-operation.ts +66 -1
- package/dist/bundling-sources/shared_libs/play-runtime/async-play-invocation.ts +77 -0
- package/dist/bundling-sources/shared_libs/play-runtime/bounceban-batching.ts +137 -0
- package/dist/bundling-sources/shared_libs/play-runtime/checkpoint-boundaries.ts +70 -0
- package/dist/bundling-sources/shared_libs/play-runtime/context.ts +1159 -166
- package/dist/bundling-sources/shared_libs/play-runtime/coordinator-headers.ts +1 -32
- package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +103 -0
- package/dist/bundling-sources/shared_libs/play-runtime/daytona-payload-contract.ts +68 -0
- package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-janitor.ts +103 -0
- package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-reaper.ts +725 -0
- package/dist/bundling-sources/shared_libs/play-runtime/default-batch-strategies.ts +20 -1
- package/dist/bundling-sources/shared_libs/play-runtime/durable-call-cache.ts +29 -0
- package/dist/bundling-sources/shared_libs/play-runtime/execution-capabilities.ts +29 -0
- package/dist/bundling-sources/shared_libs/play-runtime/execution-gateway-invocation-fence.ts +442 -0
- package/dist/bundling-sources/shared_libs/play-runtime/execution-protocol.ts +7 -1
- package/dist/bundling-sources/shared_libs/play-runtime/fixture-behavior.ts +18 -0
- package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +9 -0
- package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/contracts.ts +66 -0
- package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/job.ts +145 -0
- package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/ports.ts +21 -0
- package/dist/bundling-sources/shared_libs/play-runtime/integration-operation-reader-fence/postgres-store.ts +170 -0
- package/dist/bundling-sources/shared_libs/play-runtime/internal-bootstrap-token.ts +1322 -0
- package/dist/bundling-sources/shared_libs/play-runtime/internal-step-ids.ts +2 -2
- package/dist/bundling-sources/shared_libs/play-runtime/lane-retirement-gate.ts +189 -0
- package/dist/bundling-sources/shared_libs/play-runtime/launch-source-policy.ts +112 -0
- package/dist/bundling-sources/shared_libs/play-runtime/map-execution-frame.ts +8 -0
- package/dist/bundling-sources/shared_libs/play-runtime/perf-trace.ts +127 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-artifact-runtime-contract.ts +5 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +24 -1
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/contracts.ts +56 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/index.ts +13 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/job.ts +41 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/ports.ts +17 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/admission/postgres-adapter.ts +54 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/contracts.ts +114 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/engine-suspension.ts +108 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/index.ts +36 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/job.ts +97 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/ports.ts +104 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/postgres-fence-adapter.ts +263 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/attempts/worker-terminal-projection.ts +64 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/contracts.ts +29 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/gateway-adapter.ts +56 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/index.ts +15 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/job.ts +65 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/projection/ports.ts +17 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/contracts.ts +42 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/index.ts +17 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/job.ts +142 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/ports.ts +42 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/postgres-adapter.ts +102 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/contracts.ts +60 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/index.ts +16 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/job.ts +78 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/ports.ts +54 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/terminal/postgres-adapter.ts +71 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-batching-registry.ts +4 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-semantics.ts +28 -0
- package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +4 -0
- package/dist/bundling-sources/shared_libs/play-runtime/receipt-status.ts +5 -8
- package/dist/bundling-sources/shared_libs/play-runtime/run-failure.ts +23 -2
- package/dist/bundling-sources/shared_libs/play-runtime/run-identity.ts +168 -0
- package/dist/bundling-sources/shared_libs/play-runtime/run-snapshot-stream.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +90 -13
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-payload-transport.ts +6 -12
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-start-admission.ts +68 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +21 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/bundle.ts +0 -1
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +14 -43
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +67 -213
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-authority.ts +201 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-capacity-policy.ts +20 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-contract.ts +6 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-env.ts +12 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +67 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-release-environment.ts +2 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-sandbox-contract.ts +68 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-scheduler-topology.ts +38 -2
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-telemetry.ts +108 -0
- package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +4 -0
- package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +3 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backend.ts +37 -1
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-deadline-reconciliation.ts +88 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-deploy-task.ts +124 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-play-run-task.ts +68 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-pool.ts +193 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-queue-lifecycle.ts +269 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-queue-suffix.ts +73 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +6642 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-shared.ts +897 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-metrics.ts +120 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +76 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd.ts +476 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-heavy-request-admission.ts +47 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/gateway-progress-registry.ts +147 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/index.ts +27 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/lazy.ts +50 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/play-run-recovery.ts +98 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-budget-state.ts +260 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-pool.ts +1416 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-progress.ts +1255 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres-rate-state.ts +942 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +14636 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +888 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +355 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-terminal-transition.ts +46 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runner-push.ts +60 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-api-origin.ts +33 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-receipt-gateway-health.ts +64 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-capacity.ts +835 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-ledger-reconciliation.ts +1218 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-operation.ts +207 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-scheduler-schema.ts +10 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/scheduler-capacity.ts +123 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/scheduler-launch-read-observability.ts +78 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/submit-admission.ts +169 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/terminal-contract.ts +20 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-queue-metrics.ts +34 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/worker-resource-metrics.ts +249 -0
- package/dist/bundling-sources/shared_libs/play-runtime/sheet-attempt-sql.ts +7 -0
- package/dist/bundling-sources/shared_libs/play-runtime/step-progress.ts +296 -0
- package/dist/bundling-sources/shared_libs/play-runtime/tool-call/native-batch.ts +3 -3
- package/dist/bundling-sources/shared_libs/play-runtime/tool-call/runtime-step-receipts-adapter.ts +20 -1
- package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +60 -15
- package/dist/bundling-sources/shared_libs/play-runtime/tool-execution-outcome.ts +20 -0
- package/dist/bundling-sources/shared_libs/play-runtime/tool-http-errors.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +1 -1
- package/dist/bundling-sources/shared_libs/play-runtime/transient-service-error.ts +12 -0
- package/dist/bundling-sources/shared_libs/play-runtime/vercel-protection.ts +14 -1
- package/dist/bundling-sources/shared_libs/play-runtime/work-receipt-storage-contract.ts +165 -0
- package/dist/bundling-sources/shared_libs/play-runtime/work-receipts.ts +15 -23
- package/dist/bundling-sources/shared_libs/play-runtime/workflow-executor-auth.ts +169 -0
- package/dist/bundling-sources/shared_libs/play-runtime/zerobounce-batching.ts +122 -0
- package/dist/bundling-sources/shared_libs/plays/artifact-types.ts +8 -3
- package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +454 -17
- package/dist/bundling-sources/shared_libs/plays/bundling/index.ts +19 -4
- package/dist/bundling-sources/shared_libs/plays/contracts.ts +8 -14
- package/dist/bundling-sources/shared_libs/plays/core.ts +11 -6
- package/dist/bundling-sources/shared_libs/plays/deployment-status.ts +1 -1
- package/dist/bundling-sources/shared_libs/plays/docflow-binding-owner.ts +16 -11
- package/dist/bundling-sources/shared_libs/plays/docflow.ts +1 -1
- package/dist/bundling-sources/shared_libs/plays/email-status.ts +1 -1
- package/dist/bundling-sources/shared_libs/plays/play-grep-search.ts +39 -0
- package/dist/bundling-sources/shared_libs/plays/resolve-static-pipeline.ts +1 -1
- package/dist/bundling-sources/shared_libs/plays/share/copy.ts +271 -0
- package/dist/bundling-sources/shared_libs/plays/share/metrics.ts +140 -0
- package/dist/bundling-sources/shared_libs/plays/share/public-read-model.ts +86 -0
- package/dist/bundling-sources/shared_libs/plays/share/seo-quality.ts +181 -0
- package/dist/bundling-sources/shared_libs/plays/share/static-pipeline-summary.ts +658 -0
- package/dist/bundling-sources/shared_libs/plays/share/types.ts +197 -0
- package/dist/bundling-sources/shared_libs/plays/slack-hitl-timeout-error.ts +37 -0
- package/dist/bundling-sources/shared_libs/plays/slug.ts +115 -0
- package/dist/bundling-sources/shared_libs/plays/static-pipeline.ts +50 -15
- package/dist/bundling-sources/shared_libs/plays/tool-category-descriptions.ts +2 -2
- package/dist/bundling-sources/shared_libs/plays/tool-result-types.ts +1 -1
- package/dist/bundling-sources/shared_libs/product-notifications/catalog.ts +877 -0
- package/dist/bundling-sources/shared_libs/product-notifications/configuration-draft.ts +456 -0
- package/dist/bundling-sources/shared_libs/product-notifications/configuration.ts +566 -0
- package/dist/bundling-sources/shared_libs/product-notifications/content.ts +28 -0
- package/dist/bundling-sources/shared_libs/product-notifications/default-policy.ts +60 -0
- package/dist/bundling-sources/shared_libs/product-notifications/email.ts +246 -0
- package/dist/bundling-sources/shared_libs/product-notifications/evaluation.ts +280 -0
- package/dist/bundling-sources/shared_libs/product-notifications/events.ts +433 -0
- package/dist/bundling-sources/shared_libs/product-notifications/legacy-slack.ts +80 -0
- package/dist/bundling-sources/shared_libs/product-notifications/overflow.ts +18 -0
- package/dist/bundling-sources/shared_libs/product-notifications/rolling-limit.ts +24 -0
- package/dist/bundling-sources/shared_libs/product-notifications/slack-delivery.ts +624 -0
- package/dist/bundling-sources/shared_libs/product-notifications/slack-payload.ts +140 -0
- package/dist/bundling-sources/shared_libs/product-notifications/slack-transport.ts +75 -0
- package/dist/bundling-sources/shared_libs/product-notifications/workspace.ts +38 -0
- package/dist/bundling-sources/shared_libs/runtime-env.ts +12 -0
- package/dist/bundling-sources/shared_libs/security/email-blacklist.ts +42 -0
- package/dist/bundling-sources/shared_libs/security/header-safe-env.ts +35 -0
- package/dist/bundling-sources/shared_libs/security/internal-actor.ts +50 -0
- package/dist/bundling-sources/shared_libs/security/secret-redaction.ts +267 -0
- package/dist/bundling-sources/shared_libs/security/slack-sanitize.ts +133 -0
- package/dist/cli/getting-started.d.mts +52 -0
- package/dist/cli/getting-started.d.ts +52 -0
- package/dist/cli/getting-started.js +65 -0
- package/dist/cli/getting-started.mjs +36 -0
- package/dist/cli/index.d.mts +9 -0
- package/dist/cli/index.d.ts +9 -0
- package/dist/cli/index.js +1611 -453
- package/dist/cli/index.mjs +1596 -447
- package/dist/{compiler-manifest-Dbov16F7.d.mts → compiler-manifest-BaJfE-5H.d.mts} +136 -10
- package/dist/{compiler-manifest-Dbov16F7.d.ts → compiler-manifest-BaJfE-5H.d.ts} +136 -10
- package/dist/index.d.mts +910 -155
- package/dist/index.d.ts +910 -155
- package/dist/index.js +550 -64
- package/dist/index.mjs +550 -64
- package/dist/install-integrity.json +193 -4
- package/dist/monitor-fleet-contract.d.mts +138 -0
- package/dist/monitor-fleet-contract.d.ts +138 -0
- package/dist/monitor-fleet-contract.js +404 -0
- package/dist/monitor-fleet-contract.mjs +367 -0
- package/dist/plays/bundle-play-file.d.mts +8 -3
- package/dist/plays/bundle-play-file.d.ts +8 -3
- package/dist/plays/bundle-play-file.mjs +100 -20
- package/dist/release.d.mts +255 -0
- package/dist/release.d.ts +255 -0
- package/dist/release.js +215 -0
- package/dist/release.mjs +188 -0
- package/package.json +23 -4
- /package/dist/bundling-sources/shared_libs/{integrations/bettercontact-execution-policy.ts → integration-contracts/bettercontact/execution-policy.ts} +0 -0
- /package/dist/bundling-sources/shared_libs/{integrations/theirstack-execution-policy.ts → integration-contracts/theirstack/execution-policy.ts} +0 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
import { mintWorkflowExecutorToken } from './/workflow-executor-auth';
|
|
2
|
+
import {
|
|
3
|
+
DEFAULT_RUNTIME_EXECUTION_CAPABILITIES,
|
|
4
|
+
normalizeRuntimeExecutionCapabilities,
|
|
5
|
+
type RuntimeAuthorityDescriptor,
|
|
6
|
+
type RuntimeExecutionCapability,
|
|
7
|
+
} from './/execution-capabilities';
|
|
8
|
+
import type { FixtureBehavior } from './/fixture-behavior';
|
|
9
|
+
import type { PlaySchedulerSubmitInput } from './/scheduler-backend';
|
|
10
|
+
import type { DirectCompletedTerminalContract } from './/scheduler-backends/terminal-contract';
|
|
11
|
+
|
|
12
|
+
export type RuntimeAuthority = {
|
|
13
|
+
executorToken: string;
|
|
14
|
+
descriptor: RuntimeAuthorityDescriptor;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Derive a child Run's durable authority from its admitted parent. The child
|
|
19
|
+
* owns its authored secret names and play identity; organization, actor,
|
|
20
|
+
* billing, scheduler placement, and capability policy remain parent-owned
|
|
21
|
+
* durable facts. This deliberately does not intersect secret names: a child
|
|
22
|
+
* Play resolves its own scoped declaration, where an equal name can identify
|
|
23
|
+
* a different Play-specific secret.
|
|
24
|
+
*/
|
|
25
|
+
export function deriveAsyncChildRuntimeAuthority(input: {
|
|
26
|
+
parent: RuntimeAuthorityDescriptor;
|
|
27
|
+
workflowId: string;
|
|
28
|
+
runId: string;
|
|
29
|
+
playName: string;
|
|
30
|
+
billingRunId: string;
|
|
31
|
+
allowedSecrets: readonly string[];
|
|
32
|
+
}): RuntimeAuthorityDescriptor {
|
|
33
|
+
return {
|
|
34
|
+
orgId: input.parent.orgId,
|
|
35
|
+
workflowId: input.workflowId,
|
|
36
|
+
runId: input.runId,
|
|
37
|
+
// The scheduler-owned parent launch resolves the billing owner to the
|
|
38
|
+
// root before child admission. Keep the descriptor's token claim aligned
|
|
39
|
+
// with that durable run-state fact even for a legacy intermediate parent
|
|
40
|
+
// that predates `billingRunId` on its authority descriptor.
|
|
41
|
+
billingRunId: input.billingRunId,
|
|
42
|
+
playName: input.playName,
|
|
43
|
+
allowedSecrets: [...new Set(input.allowedSecrets)],
|
|
44
|
+
maxCreditsPerRun: input.parent.maxCreditsPerRun ?? null,
|
|
45
|
+
integrationMode: input.parent.integrationMode ?? null,
|
|
46
|
+
fixtureBehavior: input.parent.fixtureBehavior ?? null,
|
|
47
|
+
synthetic: input.parent.synthetic === true,
|
|
48
|
+
actorUserId: input.parent.actorUserId ?? null,
|
|
49
|
+
actorEmail: input.parent.actorEmail ?? null,
|
|
50
|
+
schedulerSchema: input.parent.schedulerSchema ?? null,
|
|
51
|
+
docflowEnabled: input.parent.docflowEnabled === true,
|
|
52
|
+
asyncChildAdmissionAttemptRequired:
|
|
53
|
+
input.parent.asyncChildAdmissionAttemptRequired === true,
|
|
54
|
+
capabilities: normalizeRuntimeExecutionCapabilities(
|
|
55
|
+
input.parent.capabilities,
|
|
56
|
+
),
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export async function mintPlayRunRuntimeAuthorityDescriptor(input: {
|
|
61
|
+
descriptor: RuntimeAuthorityDescriptor;
|
|
62
|
+
runtimeOrigin?: string | null;
|
|
63
|
+
}): Promise<RuntimeAuthority> {
|
|
64
|
+
return {
|
|
65
|
+
descriptor: input.descriptor,
|
|
66
|
+
executorToken: await mintWorkflowExecutorToken({
|
|
67
|
+
...runtimeAuthorityMintInput(input.descriptor),
|
|
68
|
+
runtimeOrigin: input.runtimeOrigin,
|
|
69
|
+
}),
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
export async function mintPlayRunRuntimeAuthority(input: {
|
|
74
|
+
orgId: string;
|
|
75
|
+
workflowId: string;
|
|
76
|
+
runId: string;
|
|
77
|
+
billingRunId?: string | null;
|
|
78
|
+
playName: string;
|
|
79
|
+
allowedSecrets?: readonly string[] | null;
|
|
80
|
+
maxCreditsPerRun?: number | null;
|
|
81
|
+
integrationMode?: 'live' | 'eval_stub' | 'fixture' | null;
|
|
82
|
+
fixtureBehavior?: FixtureBehavior | null;
|
|
83
|
+
synthetic?: boolean | null;
|
|
84
|
+
actorUserId?: string | null;
|
|
85
|
+
actorEmail?: string | null;
|
|
86
|
+
schedulerSchema?: string | null;
|
|
87
|
+
/** Docflow rollout answer for the launching actor, resolved by the caller. */
|
|
88
|
+
docflowEnabled?: boolean | null;
|
|
89
|
+
runtimeOrigin?: string | null;
|
|
90
|
+
}): Promise<RuntimeAuthority> {
|
|
91
|
+
const descriptor: RuntimeAuthorityDescriptor = {
|
|
92
|
+
orgId: input.orgId,
|
|
93
|
+
workflowId: input.workflowId,
|
|
94
|
+
runId: input.runId,
|
|
95
|
+
billingRunId: input.billingRunId ?? null,
|
|
96
|
+
playName: input.playName,
|
|
97
|
+
allowedSecrets: [...new Set(input.allowedSecrets ?? [])],
|
|
98
|
+
maxCreditsPerRun: input.maxCreditsPerRun ?? null,
|
|
99
|
+
integrationMode: input.integrationMode ?? null,
|
|
100
|
+
fixtureBehavior: input.fixtureBehavior ?? null,
|
|
101
|
+
synthetic: input.synthetic === true,
|
|
102
|
+
actorUserId: input.actorUserId ?? null,
|
|
103
|
+
actorEmail: input.actorEmail ?? null,
|
|
104
|
+
schedulerSchema: input.schedulerSchema ?? null,
|
|
105
|
+
docflowEnabled: input.docflowEnabled === true,
|
|
106
|
+
capabilities: normalizeRuntimeExecutionCapabilities(
|
|
107
|
+
DEFAULT_RUNTIME_EXECUTION_CAPABILITIES,
|
|
108
|
+
),
|
|
109
|
+
};
|
|
110
|
+
return await mintPlayRunRuntimeAuthorityDescriptor({
|
|
111
|
+
descriptor,
|
|
112
|
+
runtimeOrigin: input.runtimeOrigin,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
export function runtimeAuthorityMintInput(
|
|
117
|
+
descriptor: RuntimeAuthorityDescriptor,
|
|
118
|
+
input: {
|
|
119
|
+
runAttempt?: number | null;
|
|
120
|
+
runLeaseToken?: string | null;
|
|
121
|
+
terminalContract?: DirectCompletedTerminalContract | null;
|
|
122
|
+
capabilities?: readonly RuntimeExecutionCapability[];
|
|
123
|
+
runtimeOrigin?: string | null;
|
|
124
|
+
} = {},
|
|
125
|
+
) {
|
|
126
|
+
return {
|
|
127
|
+
orgId: descriptor.orgId,
|
|
128
|
+
workflowId: descriptor.workflowId,
|
|
129
|
+
runId: descriptor.runId,
|
|
130
|
+
billingRunId: descriptor.billingRunId,
|
|
131
|
+
playName: descriptor.playName,
|
|
132
|
+
allowedSecrets: descriptor.allowedSecrets,
|
|
133
|
+
maxCreditsPerRun: descriptor.maxCreditsPerRun,
|
|
134
|
+
integrationMode: descriptor.integrationMode,
|
|
135
|
+
fixtureBehavior: descriptor.fixtureBehavior,
|
|
136
|
+
synthetic: descriptor.synthetic,
|
|
137
|
+
actorUserId: descriptor.actorUserId,
|
|
138
|
+
actorEmail: descriptor.actorEmail,
|
|
139
|
+
schedulerSchema: descriptor.schedulerSchema,
|
|
140
|
+
runAttempt: input.runAttempt,
|
|
141
|
+
runLeaseToken: input.runLeaseToken,
|
|
142
|
+
terminalContract: input.terminalContract,
|
|
143
|
+
capabilities: input.capabilities ?? descriptor.capabilities,
|
|
144
|
+
runtimeOrigin: input.runtimeOrigin,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export async function mintPlayRunAttemptRuntimeToken(input: {
|
|
149
|
+
descriptor: RuntimeAuthorityDescriptor;
|
|
150
|
+
runAttempt?: number | null;
|
|
151
|
+
runLeaseToken?: string | null;
|
|
152
|
+
terminalContract?: DirectCompletedTerminalContract | null;
|
|
153
|
+
capabilities?: readonly RuntimeExecutionCapability[];
|
|
154
|
+
runtimeOrigin?: string | null;
|
|
155
|
+
}): Promise<string> {
|
|
156
|
+
return await mintWorkflowExecutorToken(
|
|
157
|
+
runtimeAuthorityMintInput(input.descriptor, input),
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/**
|
|
162
|
+
* Reconstruct the smallest authority needed to settle compute billing for a
|
|
163
|
+
* terminal launch row written before runtimeAuthority became durable state.
|
|
164
|
+
*
|
|
165
|
+
* This is deliberately not a general legacy-token fallback. The caller may
|
|
166
|
+
* mint only billing.write, and every fact comes from the leased launch row
|
|
167
|
+
* selected by the scheduler rather than the worker's request body.
|
|
168
|
+
*/
|
|
169
|
+
export function requireComputeBillingDispatchRuntimeAuthority(
|
|
170
|
+
launch: Pick<
|
|
171
|
+
PlaySchedulerSubmitInput,
|
|
172
|
+
'orgId' | 'runId' | 'playName' | 'userId' | 'userEmail'
|
|
173
|
+
>,
|
|
174
|
+
): RuntimeAuthorityDescriptor {
|
|
175
|
+
const orgId = launch.orgId?.trim();
|
|
176
|
+
const runId = launch.runId?.trim();
|
|
177
|
+
const playName = launch.playName?.trim();
|
|
178
|
+
if (!orgId || !runId || !playName) {
|
|
179
|
+
throw new Error(
|
|
180
|
+
'Legacy compute-billing launch is missing orgId, runId, or playName.',
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
return {
|
|
185
|
+
orgId,
|
|
186
|
+
// Scheduler envelopes use the workflow id as the durable run id.
|
|
187
|
+
workflowId: runId,
|
|
188
|
+
runId,
|
|
189
|
+
billingRunId: runId,
|
|
190
|
+
playName,
|
|
191
|
+
allowedSecrets: [],
|
|
192
|
+
maxCreditsPerRun: null,
|
|
193
|
+
integrationMode: null,
|
|
194
|
+
fixtureBehavior: null,
|
|
195
|
+
synthetic: false,
|
|
196
|
+
actorUserId: launch.userId?.trim() || null,
|
|
197
|
+
actorEmail: launch.userEmail?.trim() || null,
|
|
198
|
+
docflowEnabled: false,
|
|
199
|
+
capabilities: ['billing.write'],
|
|
200
|
+
};
|
|
201
|
+
}
|
|
@@ -26,6 +26,14 @@ export const RUNTIME_CAPACITY_POLICY = {
|
|
|
26
26
|
claimOperationTimeoutMs: 20_000,
|
|
27
27
|
requestTimeoutMs: 30_000,
|
|
28
28
|
},
|
|
29
|
+
sandboxAcquisition: {
|
|
30
|
+
/**
|
|
31
|
+
* Starting a Daytona sandbox is a provider control-plane transition, not
|
|
32
|
+
* an Absurd execution slot. Serialize starts within each worker process;
|
|
33
|
+
* once started, all eight execution slots may run concurrently.
|
|
34
|
+
*/
|
|
35
|
+
daytonaConcurrentStartsPerProcess: 1,
|
|
36
|
+
},
|
|
29
37
|
} as const;
|
|
30
38
|
|
|
31
39
|
export const ABSURD_GLOBAL_RUN_CONCURRENCY =
|
|
@@ -96,6 +104,18 @@ function nonNegativeNumber(value: number): number {
|
|
|
96
104
|
}
|
|
97
105
|
|
|
98
106
|
export function assertRuntimeCapacityPolicy(): void {
|
|
107
|
+
if (
|
|
108
|
+
!Number.isInteger(
|
|
109
|
+
RUNTIME_CAPACITY_POLICY.sandboxAcquisition
|
|
110
|
+
.daytonaConcurrentStartsPerProcess,
|
|
111
|
+
) ||
|
|
112
|
+
RUNTIME_CAPACITY_POLICY.sandboxAcquisition
|
|
113
|
+
.daytonaConcurrentStartsPerProcess <= 0
|
|
114
|
+
) {
|
|
115
|
+
throw new Error(
|
|
116
|
+
'Daytona sandbox-start concurrency must be a positive integer.',
|
|
117
|
+
);
|
|
118
|
+
}
|
|
99
119
|
if (
|
|
100
120
|
RUNTIME_CAPACITY_POLICY.receiptGateway.requestTimeoutMs <=
|
|
101
121
|
RUNTIME_CAPACITY_POLICY.receiptGateway.admissionTimeoutMs
|
|
@@ -3,11 +3,17 @@
|
|
|
3
3
|
* receipt presentations. New operations must not use this as a version gate.
|
|
4
4
|
*/
|
|
5
5
|
export const LEGACY_RUNTIME_RECEIPT_WIRE_HEADER = 'x-deepline-runtime-contract';
|
|
6
|
+
// Frozen: production lane main-9281ae259f still sends wire format 2. Delete
|
|
7
|
+
// this and `resolveLegacyRuntimeReceiptWireFormat` after that lane retires.
|
|
6
8
|
export const LEGACY_RUNTIME_RECEIPT_WIRE_FORMAT = 3 as const;
|
|
7
9
|
/**
|
|
8
10
|
* Historical workers validate this readiness range before they claim work.
|
|
9
11
|
* It is an output-only compatibility presentation; current callers use named
|
|
10
12
|
* operation capabilities and do not treat it as a global admission contract.
|
|
13
|
+
*
|
|
14
|
+
* Frozen: a lane built before the global compatibility gate was removed calls
|
|
15
|
+
* /readyz at boot and throws when this range is absent. Delete after every such
|
|
16
|
+
* lane has retired.
|
|
11
17
|
*/
|
|
12
18
|
export const LEGACY_RUNTIME_READINESS_MIN_SUPPORTED = 1 as const;
|
|
13
19
|
export const LEGACY_RUNTIME_READINESS_CURRENT = 6 as const;
|
|
@@ -53,3 +53,15 @@ export function getRuntimeEnvInfo() {
|
|
|
53
53
|
node_env: process.env.NODE_ENV ?? null,
|
|
54
54
|
};
|
|
55
55
|
}
|
|
56
|
+
|
|
57
|
+
/** Test seams must never be reachable from a Vercel production deployment. */
|
|
58
|
+
export function isTestOnlyRuntime(): boolean {
|
|
59
|
+
if (process.env.VERCEL_ENV === 'production') return false;
|
|
60
|
+
return process.env.VERCEL_ENV === 'preview' || getRuntimeEnv() !== 'prod';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
export function shouldEnableMarketingIntegrations(): boolean {
|
|
64
|
+
return getRuntimeEnv() === 'prod';
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
export { isBuildContext } from '../observability/build-context';
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import {
|
|
2
|
+
deployed,
|
|
3
|
+
type DeployedOperationContract,
|
|
4
|
+
} from '@deepline/deployed-contracts';
|
|
5
|
+
import type { RuntimeExecutionCapability } from './execution-capabilities';
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* One declarative owner for the runtime action → authority relationship. The
|
|
9
|
+
* route still owns authentication and execution; callers can add an action in
|
|
10
|
+
* one obvious place and CI will prevent removing/changing an existing one.
|
|
11
|
+
*/
|
|
12
|
+
export const RUNTIME_OPERATION_CAPABILITIES = {
|
|
13
|
+
create_signed_artifact_url: 'artifact.read',
|
|
14
|
+
resolve_play: 'artifact.read',
|
|
15
|
+
create_signed_staged_file_url: 'file.read',
|
|
16
|
+
get_runtime_step_receipt: 'receipt.read',
|
|
17
|
+
get_runtime_step_receipts: 'receipt.read',
|
|
18
|
+
acquire_runtime_receipt_execution_lock: 'receipt.write',
|
|
19
|
+
release_runtime_receipt_execution_lock: 'receipt.write',
|
|
20
|
+
claim_runtime_step_receipt: 'receipt.write',
|
|
21
|
+
claim_runtime_step_receipts: 'receipt.write',
|
|
22
|
+
mark_runtime_step_receipt_running: 'receipt.write',
|
|
23
|
+
mark_runtime_step_receipts_running: 'receipt.write',
|
|
24
|
+
mark_runtime_step_receipts_queued: 'receipt.write',
|
|
25
|
+
complete_runtime_step_receipt: 'receipt.write',
|
|
26
|
+
complete_runtime_step_receipts: 'receipt.write',
|
|
27
|
+
release_runtime_step_receipt: 'receipt.write',
|
|
28
|
+
fail_runtime_step_receipt: 'receipt.write',
|
|
29
|
+
fail_runtime_step_receipts: 'receipt.write',
|
|
30
|
+
heartbeat_runtime_step_receipts: 'receipt.write',
|
|
31
|
+
skip_runtime_step_receipt: 'receipt.write',
|
|
32
|
+
ensure_sheet: 'sheet.write',
|
|
33
|
+
apply_row_updates: 'sheet.write',
|
|
34
|
+
create_db_session: 'db.session',
|
|
35
|
+
repair_runtime_storage_grants: 'sheet.write',
|
|
36
|
+
append_run_events: 'run.progress',
|
|
37
|
+
save_results: 'run.progress',
|
|
38
|
+
start_run: 'run.progress',
|
|
39
|
+
record_first_claim_latency: 'run.progress',
|
|
40
|
+
project_run_created: 'run.progress',
|
|
41
|
+
launch_play_async: 'run.child',
|
|
42
|
+
compute_billing_upsert: 'billing.write',
|
|
43
|
+
compute_billing_record_item: 'billing.write',
|
|
44
|
+
compute_billing_finalize: 'billing.write',
|
|
45
|
+
rate_state_acquire: 'rate.acquire',
|
|
46
|
+
rate_state_release: 'rate.acquire',
|
|
47
|
+
rate_state_penalize: 'rate.acquire',
|
|
48
|
+
get_runtime_traffic_policy: 'rate.acquire',
|
|
49
|
+
governor_budget_charge: 'budget.charge',
|
|
50
|
+
resolve_secret: 'secret.resolve',
|
|
51
|
+
} as const satisfies Readonly<Record<string, RuntimeExecutionCapability>>;
|
|
52
|
+
|
|
53
|
+
export const RUNTIME_OPERATION_CONTRACT: DeployedOperationContract =
|
|
54
|
+
deployed.operation({
|
|
55
|
+
id: 'runtime-api-actions',
|
|
56
|
+
actions: RUNTIME_OPERATION_CAPABILITIES,
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
export function runtimeOperationCapability(
|
|
60
|
+
action: string,
|
|
61
|
+
): RuntimeExecutionCapability | null {
|
|
62
|
+
return (
|
|
63
|
+
RUNTIME_OPERATION_CAPABILITIES[
|
|
64
|
+
action as keyof typeof RUNTIME_OPERATION_CAPABILITIES
|
|
65
|
+
] ?? null
|
|
66
|
+
);
|
|
67
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { deployed, readDeployedObject } from '@deepline/deployed-contracts';
|
|
2
|
+
|
|
3
|
+
export type RuntimeSandboxProviderId = 'daytona' | 'modal';
|
|
4
|
+
|
|
5
|
+
export type RuntimeSandboxRef = {
|
|
6
|
+
/** Internal normalized form; persisted writer markers are diagnostic only. */
|
|
7
|
+
schemaVersion: 1;
|
|
8
|
+
provider: RuntimeSandboxProviderId;
|
|
9
|
+
resourceId: string;
|
|
10
|
+
routingDomain: string | null;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
* This ref lives in a durable suspension. Its provider and resource identity
|
|
15
|
+
* fence cleanup; its writer marker never decides whether a known sandbox can
|
|
16
|
+
* be reconciled by a different deployment.
|
|
17
|
+
*/
|
|
18
|
+
export const RUNTIME_SANDBOX_REF_CONTRACT = deployed.object({
|
|
19
|
+
id: 'runtime-sandbox-ref',
|
|
20
|
+
unknown: 'preserve',
|
|
21
|
+
fields: {
|
|
22
|
+
provider: deployed.openEnum(),
|
|
23
|
+
resourceId: deployed.string(),
|
|
24
|
+
routingDomain: deployed.json(),
|
|
25
|
+
schemaVersion: deployed.optional(deployed.diagnostic.number(), {
|
|
26
|
+
whenAbsent: 'diagnostic unavailable',
|
|
27
|
+
}),
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
export function readPersistedRuntimeSandboxRef(input: {
|
|
32
|
+
raw: unknown;
|
|
33
|
+
expectedSandboxId: string;
|
|
34
|
+
expectedProvider?: unknown;
|
|
35
|
+
}): RuntimeSandboxRef {
|
|
36
|
+
const invalid = () =>
|
|
37
|
+
new Error(
|
|
38
|
+
`Persisted Runtime Sandbox Ref is invalid or inconsistent for sandbox ${input.expectedSandboxId}.`,
|
|
39
|
+
);
|
|
40
|
+
let value: Record<string, unknown>;
|
|
41
|
+
try {
|
|
42
|
+
value = readDeployedObject(RUNTIME_SANDBOX_REF_CONTRACT, input.raw).value;
|
|
43
|
+
} catch {
|
|
44
|
+
throw invalid();
|
|
45
|
+
}
|
|
46
|
+
const provider = value.provider;
|
|
47
|
+
const resourceId =
|
|
48
|
+
typeof value.resourceId === 'string' ? value.resourceId.trim() : '';
|
|
49
|
+
const routingDomain = value.routingDomain;
|
|
50
|
+
if (
|
|
51
|
+
(provider !== 'daytona' && provider !== 'modal') ||
|
|
52
|
+
!resourceId ||
|
|
53
|
+
resourceId !== input.expectedSandboxId.trim() ||
|
|
54
|
+
(routingDomain !== null && typeof routingDomain !== 'string') ||
|
|
55
|
+
(typeof routingDomain === 'string' && !routingDomain.trim()) ||
|
|
56
|
+
(input.expectedProvider !== undefined &&
|
|
57
|
+
input.expectedProvider !== provider)
|
|
58
|
+
) {
|
|
59
|
+
throw invalid();
|
|
60
|
+
}
|
|
61
|
+
return {
|
|
62
|
+
schemaVersion: 1,
|
|
63
|
+
provider,
|
|
64
|
+
resourceId,
|
|
65
|
+
routingDomain:
|
|
66
|
+
typeof routingDomain === 'string' ? routingDomain.trim() : null,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Runtime-scheduler topology predicate shared by the app-side lane helpers
|
|
3
|
-
* (`
|
|
3
|
+
* (`packages/play-runtime/scheduler-backends/absurd-shared.ts`) and the runner
|
|
4
4
|
* backends (`runner-backends/backends/daytona-lifecycle.ts`).
|
|
5
5
|
*
|
|
6
6
|
* ONE distinction drives several guards: a run whose scheduler schema is the
|
|
@@ -8,10 +8,34 @@
|
|
|
8
8
|
* production egress policy), while any other schema is an ISOLATED topology —
|
|
9
9
|
* a per-PR preview fleet or a per-worktree dev fleet running synthetic
|
|
10
10
|
* internal test plays. Keeping the predicate here (dependency-free) lets
|
|
11
|
-
*
|
|
11
|
+
* package code uses it without importing the app-side scheduler stack.
|
|
12
12
|
*/
|
|
13
13
|
export const PROD_DEFAULT_RUNTIME_SCHEDULER_SCHEMA = 'runtime_scheduler';
|
|
14
14
|
|
|
15
|
+
/** A wire-safe Postgres schema name that identifies one runtime topology. */
|
|
16
|
+
export const RUNTIME_SCHEDULER_SCHEMA_RE = /^[a-z_][a-z0-9_]{0,62}$/;
|
|
17
|
+
|
|
18
|
+
export function normalizeRuntimeSchedulerSchema(value: unknown): string | null {
|
|
19
|
+
if (typeof value !== 'string') return null;
|
|
20
|
+
const schema = value.trim();
|
|
21
|
+
return RUNTIME_SCHEDULER_SCHEMA_RE.test(schema) ? schema : null;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* The one release-id shape. A release id is minted by the release controller
|
|
26
|
+
* and doubles as the lane's queue suffix (`runs_<releaseId>`) and the
|
|
27
|
+
* `DEEPLINE_RUNTIME_DEPLOY_VERSION` on every Machine in the lane, so it must be
|
|
28
|
+
* a stable lowercase engine-safe slug: no uppercase, no underscore, no repeated
|
|
29
|
+
* or trailing hyphen, 6 to 64 characters.
|
|
30
|
+
*
|
|
31
|
+
* It lives here, dependency-free, because the Fly lane operator, the release
|
|
32
|
+
* controller, the internal registry route, and the admin routes must all agree
|
|
33
|
+
* on it — a second copy is how one surface silently starts accepting an id the
|
|
34
|
+
* queue cannot name.
|
|
35
|
+
*/
|
|
36
|
+
export const ABSURD_RELEASE_ID_RE =
|
|
37
|
+
/^[a-z0-9](?:[a-z0-9]|-(?=[a-z0-9])){5,63}$/;
|
|
38
|
+
|
|
15
39
|
/**
|
|
16
40
|
* True when the scheduler schema names an isolated (preview CI / worktree)
|
|
17
41
|
* topology. Null/empty/prod-default => false (production topology). Callers
|
|
@@ -24,3 +48,15 @@ export function isIsolatedRuntimeSchedulerSchema(
|
|
|
24
48
|
const schema = schedulerSchema?.trim();
|
|
25
49
|
return Boolean(schema) && schema !== PROD_DEFAULT_RUNTIME_SCHEDULER_SCHEMA;
|
|
26
50
|
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* PostgreSQL LISTEN only improves wake-up latency; durable polling owns
|
|
54
|
+
* correctness. Isolated schemas deliberately share a small direct-connection
|
|
55
|
+
* budget across preview workers, so they use that polling path and leave
|
|
56
|
+
* direct sessions to the production topology.
|
|
57
|
+
*/
|
|
58
|
+
export function shouldUseRuntimeSchedulerDirectNotify(
|
|
59
|
+
schedulerSchema: string | null | undefined,
|
|
60
|
+
): boolean {
|
|
61
|
+
return !isIsolatedRuntimeSchedulerSchema(schedulerSchema);
|
|
62
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { createTelemetry } from '../observability/telemetry';
|
|
2
|
+
|
|
3
|
+
type PlayRuntimeTelemetryInput = {
|
|
4
|
+
phase: string;
|
|
5
|
+
status: string;
|
|
6
|
+
orgId?: string | null;
|
|
7
|
+
runId?: string | null;
|
|
8
|
+
playName?: string | null;
|
|
9
|
+
graphHash?: string | null;
|
|
10
|
+
triggerSource?: string | null;
|
|
11
|
+
ms?: number;
|
|
12
|
+
errorCode?: string;
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
const playRuntimeTelemetry = createTelemetry({
|
|
16
|
+
service: 'deepline-api',
|
|
17
|
+
component: 'play-runtime',
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
type PlayTelemetryLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
21
|
+
|
|
22
|
+
function stringField(
|
|
23
|
+
fields: Record<string, unknown>,
|
|
24
|
+
...keys: readonly string[]
|
|
25
|
+
): string | null {
|
|
26
|
+
for (const key of keys) {
|
|
27
|
+
const value = fields[key];
|
|
28
|
+
if (typeof value === 'string' && value.trim()) return value.trim();
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
export function emitPlayTelemetry(input: {
|
|
34
|
+
level: PlayTelemetryLevel;
|
|
35
|
+
event: string;
|
|
36
|
+
tag: string;
|
|
37
|
+
fields?: Record<string, unknown>;
|
|
38
|
+
error?: unknown;
|
|
39
|
+
}): void {
|
|
40
|
+
const fields = input.fields ?? {};
|
|
41
|
+
const telemetry = playRuntimeTelemetry.child({
|
|
42
|
+
context: {
|
|
43
|
+
orgId: stringField(fields, 'orgId', 'org_id'),
|
|
44
|
+
orgName: stringField(fields, 'orgName', 'org_name'),
|
|
45
|
+
requestId: stringField(fields, 'requestId', 'request_id'),
|
|
46
|
+
runId: stringField(fields, 'runId', 'run_id'),
|
|
47
|
+
workflowId: stringField(fields, 'workflowId', 'workflow_id', 'runId'),
|
|
48
|
+
playName: stringField(fields, 'playName', 'play_name'),
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
const options = { tag: input.tag };
|
|
52
|
+
if (input.level === 'error') {
|
|
53
|
+
void telemetry.error(input.event, input.error, fields, options);
|
|
54
|
+
} else {
|
|
55
|
+
void telemetry[input.level](input.event, fields, options);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Emit the stable play.runtime.span event consumed by Axiom dashboards.
|
|
61
|
+
* Domain fields stay unchanged while the shared telemetry envelope supplies
|
|
62
|
+
* consistent service, context, severity, and schema metadata.
|
|
63
|
+
*/
|
|
64
|
+
export function emitPlayRuntimeSpan(input: PlayRuntimeTelemetryInput): void {
|
|
65
|
+
emitPlayTelemetry({
|
|
66
|
+
level: 'info',
|
|
67
|
+
event: 'play.runtime.span',
|
|
68
|
+
tag: '[play.runtime.span]',
|
|
69
|
+
fields: {
|
|
70
|
+
orgId: input.orgId,
|
|
71
|
+
runId: input.runId,
|
|
72
|
+
workflowId: input.runId,
|
|
73
|
+
playName: input.playName,
|
|
74
|
+
phase: input.phase,
|
|
75
|
+
status: input.status,
|
|
76
|
+
graphHash: input.graphHash,
|
|
77
|
+
triggerSource: input.triggerSource,
|
|
78
|
+
ms: input.ms,
|
|
79
|
+
errorCode: input.errorCode,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
export function emitRecoveredSecretResolutionRetry(input: {
|
|
85
|
+
orgId: string;
|
|
86
|
+
runId?: string | null;
|
|
87
|
+
playName?: string | null;
|
|
88
|
+
requestId: string;
|
|
89
|
+
operationId: string;
|
|
90
|
+
attempt: number;
|
|
91
|
+
httpStatus: number;
|
|
92
|
+
}): void {
|
|
93
|
+
emitPlayTelemetry({
|
|
94
|
+
level: 'warn',
|
|
95
|
+
event: 'play.runtime.secret_resolution_retry_recovered',
|
|
96
|
+
tag: '[play.runtime.secret_resolution_retry_recovered]',
|
|
97
|
+
fields: {
|
|
98
|
+
orgId: input.orgId,
|
|
99
|
+
runId: input.runId,
|
|
100
|
+
workflowId: input.runId,
|
|
101
|
+
playName: input.playName,
|
|
102
|
+
requestId: input.requestId,
|
|
103
|
+
operationId: input.operationId,
|
|
104
|
+
attempt: input.attempt,
|
|
105
|
+
httpStatus: input.httpStatus,
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
@@ -230,6 +230,8 @@ export type SandboxExecutionAdmission = {
|
|
|
230
230
|
leaseId: string;
|
|
231
231
|
/** Stable provider correlation for operation-first managed creates. */
|
|
232
232
|
providerOperationToken?: string | null;
|
|
233
|
+
/** Resume the existing durable provider operation before any new create. */
|
|
234
|
+
resumeExistingProviderOperation?: boolean;
|
|
233
235
|
}
|
|
234
236
|
| { kind: 'pre_code_deferred'; reason: SandboxPreCodeDeferralReason }
|
|
235
237
|
>;
|
|
@@ -293,6 +295,8 @@ export type SandboxExecutionLifecycle = {
|
|
|
293
295
|
leaseId: string;
|
|
294
296
|
/** Stable provider correlation for operation-first managed creates. */
|
|
295
297
|
providerOperationToken?: string | null;
|
|
298
|
+
/** Resume the existing durable provider operation before any new create. */
|
|
299
|
+
resumeExistingProviderOperation?: boolean;
|
|
296
300
|
}
|
|
297
301
|
| { kind: 'pre_code_deferred'; reason: SandboxPreCodeDeferralReason }
|
|
298
302
|
>;
|
package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts
CHANGED
|
@@ -180,6 +180,9 @@ function createRunnerCallbacks(input: {
|
|
|
180
180
|
return {
|
|
181
181
|
leaseId: outcome.leaseId,
|
|
182
182
|
providerOperationToken: outcome.providerOperationToken ?? null,
|
|
183
|
+
...(outcome.resumeExistingProviderOperation === true
|
|
184
|
+
? { resumeExistingProviderOperation: true }
|
|
185
|
+
: {}),
|
|
183
186
|
};
|
|
184
187
|
},
|
|
185
188
|
releaseSandboxCapacity: async (leaseId) => {
|
|
@@ -41,10 +41,43 @@ export type { PlayRunInputPayload };
|
|
|
41
41
|
|
|
42
42
|
export type PlaySchedulerSubmitInput = {
|
|
43
43
|
runId: string;
|
|
44
|
+
/** First-class async-child lineage. Absent for root launches. */
|
|
45
|
+
parentRunId?: string | null;
|
|
46
|
+
rootRunId?: string | null;
|
|
47
|
+
asyncLaunchKey?: string | null;
|
|
48
|
+
asyncInvocationKey?: string | null;
|
|
49
|
+
asyncRequestFingerprint?: string | null;
|
|
50
|
+
/**
|
|
51
|
+
* Ephemeral proof carried only into atomic async-child admission. It is never
|
|
52
|
+
* persisted on the child launch; the child receives its own authority.
|
|
53
|
+
*/
|
|
54
|
+
asyncParentRunAttempt?: number | null;
|
|
55
|
+
asyncParentRunLeaseToken?: string | null;
|
|
56
|
+
asyncParentAttemptRequired?: boolean | null;
|
|
57
|
+
/** Full play ancestry for a scheduled child, including this play. */
|
|
58
|
+
asyncAncestryPlayIds?: string[] | null;
|
|
44
59
|
playId: string;
|
|
45
60
|
playName: string;
|
|
61
|
+
playReference?: string | null;
|
|
62
|
+
/**
|
|
63
|
+
* Immutable scheduler namespace for this admission. The durable
|
|
64
|
+
* `run.created` projector persists it onto the Play Run so replay/control
|
|
65
|
+
* paths stay on the original runtime lane instead of falling back to a host
|
|
66
|
+
* default.
|
|
67
|
+
*/
|
|
68
|
+
schedulerSchema?: string | null;
|
|
69
|
+
definitionScope?: 'org' | 'system' | null;
|
|
70
|
+
revisionId?: string | null;
|
|
46
71
|
workflowFamilyKey?: string | null;
|
|
47
72
|
artifactStorageKey: string;
|
|
73
|
+
/**
|
|
74
|
+
* The runtime PostgreSQL admission path committed this launch before its
|
|
75
|
+
* Convex `run.created` projection exists. The worker must deliver that
|
|
76
|
+
* causal fact before it can claim an execution attempt.
|
|
77
|
+
*
|
|
78
|
+
* Omitted for legacy launches whose Play Run row was persisted synchronously.
|
|
79
|
+
*/
|
|
80
|
+
requiresRunCreatedProjection?: boolean;
|
|
48
81
|
/** Optional inline artifact for the Node scheduler. */
|
|
49
82
|
runtimeArtifact?: unknown;
|
|
50
83
|
artifactHash: string;
|
|
@@ -52,6 +85,9 @@ export type PlaySchedulerSubmitInput = {
|
|
|
52
85
|
/** Immutable scheduler/worker/runner ABI snapshot (not a Git SHA). */
|
|
53
86
|
runtimeProtocolVersion?: PlayRuntimeProtocolVersion | null;
|
|
54
87
|
input: PlayRunInputPayload;
|
|
88
|
+
/** Bounded launch metadata used only by the asynchronous ledger projector. */
|
|
89
|
+
staticPipeline?: unknown;
|
|
90
|
+
inputSummary?: Record<string, unknown>;
|
|
55
91
|
/** Convex metadata for the exact input saved before scheduler submission. */
|
|
56
92
|
inputFileId?: string;
|
|
57
93
|
inputBytes?: number;
|
|
@@ -127,7 +163,7 @@ export type PlaySchedulerSubmitInput = {
|
|
|
127
163
|
userId?: string | null;
|
|
128
164
|
source?: 'published' | 'ad_hoc' | 'draft';
|
|
129
165
|
/** Invocation origin, distinct from the artifact source above. */
|
|
130
|
-
triggerSource?: 'api' | 'webhook' | 'cron' | 'sql_listener';
|
|
166
|
+
triggerSource?: 'api' | 'webhook' | 'cron' | 'sql_listener' | 'async_child';
|
|
131
167
|
/** Null lets a durable trigger wait for capacity; a number bounds queue delay. */
|
|
132
168
|
queueMaxDelaySeconds?: number | null;
|
|
133
169
|
/**
|