deepline 0.3.460 → 0.3.462
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundling-sources/sdk/src/client-core.ts +7593 -0
- package/dist/bundling-sources/sdk/src/client.ts +8 -7366
- package/dist/bundling-sources/sdk/src/http-core.ts +1239 -0
- package/dist/bundling-sources/sdk/src/http.ts +6 -1231
- package/dist/bundling-sources/sdk/src/index.ts +4 -1
- package/dist/bundling-sources/sdk/src/play.ts +5 -5
- package/dist/bundling-sources/sdk/src/plays/client-core.ts +437 -0
- package/dist/bundling-sources/sdk/src/plays/client.ts +4 -421
- package/dist/bundling-sources/sdk/src/plays/input-example.ts +3 -4
- package/dist/bundling-sources/sdk/src/plays/play-description.ts +1 -1
- package/dist/bundling-sources/sdk/src/plays/run-request.ts +1 -1
- package/dist/bundling-sources/sdk/src/release.ts +1 -1
- package/dist/bundling-sources/sdk/src/server.ts +43 -0
- package/dist/bundling-sources/sdk/src/types.ts +15 -5
- package/dist/bundling-sources/shared_libs/integration-contracts/billing-entitlements.ts +15 -0
- package/dist/bundling-sources/shared_libs/monitors/billing/state.ts +28 -0
- package/dist/bundling-sources/shared_libs/monitors/callback-security.ts +0 -307
- package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +3 -0
- package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +3 -2
- package/dist/bundling-sources/shared_libs/monitors/package.json +2 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-callback-verification.ts +34 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-batch-operation.ts +59 -0
- package/dist/bundling-sources/shared_libs/monitors/provider-monitor-upstream-identity.ts +94 -1
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-dead-letter.ts +35 -1
- package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-failure-codes.ts +24 -0
- package/dist/bundling-sources/shared_libs/observability/dlq.ts +32 -0
- package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +57 -3
- package/dist/bundling-sources/shared_libs/observability/scheduled-work.ts +1 -0
- package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +66 -1
- package/dist/bundling-sources/shared_libs/play-data-plane/sheet-column-storage.ts +36 -7
- package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +250 -11
- package/dist/bundling-sources/shared_libs/play-runtime/array-input-store.ts +319 -0
- package/dist/bundling-sources/shared_libs/play-runtime/context.ts +991 -359
- package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +17 -0
- package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-janitor.ts +13 -0
- package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-reaper.ts +110 -0
- package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-machines.ts +155 -6
- package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-registry.ts +110 -6
- package/dist/bundling-sources/shared_libs/play-runtime/durable-receipt-execution.ts +127 -13
- package/dist/bundling-sources/shared_libs/play-runtime/execution-capabilities.ts +14 -1
- package/dist/bundling-sources/shared_libs/play-runtime/fixture-behavior.ts +57 -1
- package/dist/bundling-sources/shared_libs/play-runtime/free-company-lookup-batching.ts +218 -0
- package/dist/bundling-sources/shared_libs/play-runtime/gateway-postgres-admission.ts +42 -5
- package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-budget-state-backend.ts +6 -1
- package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +92 -31
- package/dist/bundling-sources/shared_libs/play-runtime/governor/block-reserving-budget-state-backend.ts +69 -14
- package/dist/bundling-sources/shared_libs/play-runtime/governor/governor.ts +93 -23
- package/dist/bundling-sources/shared_libs/play-runtime/governor/in-memory-rate-state-backend.ts +15 -4
- package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +22 -18
- package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +5 -0
- package/dist/bundling-sources/shared_libs/play-runtime/launch-identity.ts +2 -0
- package/dist/bundling-sources/shared_libs/play-runtime/map-memory-limits.ts +190 -14
- package/dist/bundling-sources/shared_libs/play-runtime/memory-ledger.ts +131 -0
- package/dist/bundling-sources/shared_libs/play-runtime/modal-runtime-config.ts +77 -2
- package/dist/bundling-sources/shared_libs/play-runtime/output-size-limits.ts +271 -2
- package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +51 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/contracts.ts +2 -0
- package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/job.ts +27 -1
- package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-batching-registry.ts +2 -0
- package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +3 -0
- package/dist/bundling-sources/shared_libs/play-runtime/provider-text-for-log.ts +63 -0
- package/dist/bundling-sources/shared_libs/play-runtime/resource-governor.ts +19 -0
- package/dist/bundling-sources/shared_libs/play-runtime/run-ledger-event-transport.ts +112 -16
- package/dist/bundling-sources/shared_libs/play-runtime/run-ledger.ts +104 -2
- package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +265 -151
- package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-gateway-transport.ts +17 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-progress-push.ts +35 -14
- package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-sheet-persistence-retry.ts +12 -1
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-control-transport.ts +4 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-labels.ts +36 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-launch-transport.ts +136 -70
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +237 -36
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-runtime-watchdog.ts +148 -4
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-session-execution.ts +6 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +285 -32
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/modal.ts +251 -56
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +29 -4
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/sandbox-create-outcome.ts +27 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/types.ts +22 -1
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +1397 -382
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-array-input-receipts.ts +920 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-constants.ts +16 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-environment.ts +38 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-flow.ts +6 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-incident-drills.ts +26 -1
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +30 -0
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-store-adapter.ts +14 -3
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-writer.ts +31 -4
- package/dist/bundling-sources/shared_libs/play-runtime/runtime-sheet-row-transition.ts +47 -0
- package/dist/bundling-sources/shared_libs/play-runtime/sandbox-compute-usage.ts +20 -7
- package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +12 -0
- package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/index.ts +9 -0
- package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +10 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backend.ts +4 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +1496 -320
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +31 -1
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +1389 -129
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +36 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-dispatch-authority.ts +4 -0
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +162 -23
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-event-search.ts +499 -115
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-capacity.ts +377 -9
- package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-ledger-reconciliation.ts +117 -8
- package/dist/bundling-sources/shared_libs/play-runtime/secret-resolution-retry-policy.ts +25 -0
- package/dist/bundling-sources/shared_libs/play-runtime/terminal-runtime-performance.ts +391 -0
- package/dist/bundling-sources/shared_libs/play-runtime/test-runtime-seams.ts +40 -0
- package/dist/bundling-sources/shared_libs/play-runtime/tool-call/index.ts +6 -0
- package/dist/bundling-sources/shared_libs/play-runtime/tool-call/mapped-calls.ts +171 -0
- package/dist/bundling-sources/shared_libs/play-runtime/tool-call/receipt-cohort.ts +16 -1
- package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +26 -3
- package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +16 -2
- package/dist/bundling-sources/shared_libs/play-runtime/transport-error-diagnostics.ts +28 -0
- package/dist/bundling-sources/shared_libs/play-runtime/work-receipt-storage-contract.ts +55 -5
- package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +41 -1
- package/dist/bundling-sources/shared_libs/plays/contracts.ts +4 -0
- package/dist/bundling-sources/shared_libs/plays/dataset.ts +9 -3
- package/dist/bundling-sources/shared_libs/plays/deploy/manifest-contract.ts +2 -0
- package/dist/bundling-sources/shared_libs/plays/deploy/manifest.ts +3 -2
- package/dist/bundling-sources/shared_libs/plays/deploy/project-serializer.ts +2 -2
- package/dist/bundling-sources/shared_libs/plays/run-output-summary.ts +66 -0
- package/dist/bundling-sources/shared_libs/plays/script-entry.ts +1 -1
- package/dist/bundling-sources/shared_libs/product-notifications/catalog.ts +43 -1
- package/dist/bundling-sources/shared_libs/product-notifications/content.ts +9 -0
- package/dist/bundling-sources/shared_libs/product-notifications/email.ts +91 -13
- package/dist/bundling-sources/shared_libs/product-notifications/events.ts +3 -0
- package/dist/bundling-sources/shared_libs/product-notifications/slack-delivery.ts +41 -24
- package/dist/bundling-sources/shared_libs/security/attested-client-ip.ts +91 -0
- package/dist/bundling-sources/shared_libs/security/internal-actor.ts +0 -11
- package/dist/cli/{auth-HKA6ZVHQ.mjs → auth-JDLEY7VU.mjs} +5 -4
- package/dist/cli/auth-UXKY6TCC.js +41 -0
- package/dist/cli/{billing-MTO2ZZ3G.js → billing-HXAXB3XZ.js} +152 -78
- package/dist/cli/{billing-26G44S5N.mjs → billing-SDHLBLMV.mjs} +84 -10
- package/dist/cli/{chunk-BHGII2D6.js → chunk-3ACMRZRV.js} +8 -6
- package/dist/cli/{chunk-S4Q2XCGM.mjs → chunk-3KZCFOZ6.mjs} +1 -1
- package/dist/cli/chunk-4KQ6SIBC.mjs +1038 -0
- package/dist/cli/{chunk-Z2GUFYT6.js → chunk-5LEAXRHV.js} +11 -11
- package/dist/cli/{chunk-XAYO3Q2X.mjs → chunk-6NNVJDVR.mjs} +7 -5
- package/dist/cli/{chunk-NMJ4D2WO.js → chunk-6PMCRYDA.js} +216 -91
- package/dist/cli/{chunk-OMM54B3X.mjs → chunk-6RNQGWFD.mjs} +16 -806
- package/dist/cli/{chunk-EBU7LQ64.js → chunk-6V7KVRR5.js} +3 -3
- package/dist/cli/{chunk-RDPTDDKX.js → chunk-7LFIMWMW.js} +2 -2
- package/dist/cli/chunk-7MJ6VI2T.mjs +19 -0
- package/dist/cli/chunk-7SWNPNML.js +1039 -0
- package/dist/cli/{chunk-CTRPCARW.mjs → chunk-7U3XNPOA.mjs} +267 -38
- package/dist/cli/{chunk-RBTTUYZZ.js → chunk-7VZHXVOQ.js} +1 -1
- package/dist/cli/{chunk-YVBWO647.mjs → chunk-AT636LLU.mjs} +2 -2
- package/dist/cli/{chunk-VTODQWQA.js → chunk-BGTPIMSM.js} +392 -261
- package/dist/cli/{chunk-KADIT5NV.mjs → chunk-CKSOY47X.mjs} +2 -2
- package/dist/cli/{chunk-7DH2FD7Y.mjs → chunk-D464JW3N.mjs} +5 -85
- package/dist/cli/chunk-D6DXOUTO.mjs +827 -0
- package/dist/cli/{describe-QW54QQNB.js → chunk-EM4TXCCI.js} +27 -44
- package/dist/cli/chunk-F6QV42MC.mjs +91 -0
- package/dist/cli/chunk-FKVYR3QA.mjs +1039 -0
- package/dist/cli/{chunk-LMAULZLF.js → chunk-GEGW5HPZ.js} +29 -27
- package/dist/cli/{chunk-M52JQSLK.js → chunk-HUB3CCM2.js} +13 -4
- package/dist/cli/{chunk-YHTQM5XI.js → chunk-I6VHOU5O.js} +27 -27
- package/dist/cli/{chunk-Z2XUZC34.js → chunk-IAYSWZDJ.js} +188 -76
- package/dist/cli/chunk-JF3TLIMQ.js +19 -0
- package/dist/cli/{chunk-HDFRJ4IT.mjs → chunk-JVHOS3K3.mjs} +177 -65
- package/dist/cli/{chunk-LAWEURCT.mjs → chunk-LFXLQEZN.mjs} +1 -1
- package/dist/cli/{chunk-2PBN4SZE.js → chunk-LROWFPGN.js} +16 -16
- package/dist/cli/{chunk-SLEUWLJE.mjs → chunk-MSY22NQW.mjs} +5 -5
- package/dist/cli/{chunk-LVJOFUU7.mjs → chunk-MUUQZIOF.mjs} +23 -49
- package/dist/cli/{chunk-2XHWOQF4.js → chunk-NBLSCHKK.js} +52 -50
- package/dist/cli/{chunk-526R2HON.mjs → chunk-NHRWZPWZ.mjs} +4 -2
- package/dist/cli/{chunk-KXMNM4AQ.js → chunk-NMU3VR5U.js} +4 -5
- package/dist/cli/{chunk-W3BE3CHK.mjs → chunk-O2RX5A66.mjs} +14 -12
- package/dist/cli/{chunk-UKFZT7RF.js → chunk-OMQ23IXL.js} +2 -2
- package/dist/cli/{chunk-LJTFZOHU.js → chunk-OPJAJBD4.js} +28 -54
- package/dist/cli/{chunk-MLFR6DVF.mjs → chunk-PHSEINNH.mjs} +5 -5
- package/dist/cli/{chunk-3DNKFH2G.mjs → chunk-PKHVSIJG.mjs} +19 -1
- package/dist/cli/{chunk-WIYWSYDS.mjs → chunk-Q2EIZKVX.mjs} +3 -3
- package/dist/cli/{chunk-VJAEA4CS.js → chunk-QJZ6WNWD.js} +8 -8
- package/dist/cli/{chunk-EIMG75BT.mjs → chunk-S3A4IXBQ.mjs} +4 -5
- package/dist/cli/{chunk-RZSTT45F.mjs → chunk-S42YIQNE.mjs} +13 -8
- package/dist/cli/{chunk-YULBYKAK.mjs → chunk-S6UAJR6V.mjs} +3 -3
- package/dist/cli/{chunk-G7L27KZB.mjs → chunk-TKAQR3IB.mjs} +31 -21
- package/dist/cli/{chunk-QWRHGGUH.js → chunk-UAJFWWZE.js} +20 -2
- package/dist/cli/{chunk-ZR2RLI4O.mjs → chunk-UDRPEZ5F.mjs} +223 -92
- package/dist/cli/{chunk-QGAWTBIR.js → chunk-ULK7JGGI.js} +511 -282
- package/dist/cli/chunk-V335HGX5.js +1038 -0
- package/dist/cli/{chunk-NH6JSJW6.mjs → chunk-V3MEA7NB.mjs} +7 -5
- package/dist/cli/{chunk-NRGGFVVB.js → chunk-VFGVXXZP.js} +37 -35
- package/dist/cli/chunk-VLEVVDWG.js +91 -0
- package/dist/cli/{chunk-R2GLGLDR.mjs → chunk-VPHN2HAL.mjs} +216 -91
- package/dist/cli/{chunk-CFUTOWE4.js → chunk-WG3KGAII.js} +8 -88
- package/dist/cli/{describe-TOMIAT37.mjs → chunk-WIY6U6GD.mjs} +19 -36
- package/dist/cli/{chunk-YS2YBSJB.js → chunk-XANRM3QA.js} +6 -6
- package/dist/cli/{chunk-KGQNIA37.js → chunk-XQCTG5OO.js} +44 -34
- package/dist/cli/{chunk-EJGBLXDZ.mjs → chunk-XZAFIOUQ.mjs} +1 -1
- package/dist/cli/chunk-Y4DPU4OM.js +827 -0
- package/dist/cli/chunk-YT5EODJO.js +920 -0
- package/dist/cli/{chunk-2WRO2UJ5.js → chunk-ZGQSFYD2.js} +56 -51
- package/dist/cli/{chunk-OJ6RUKVT.mjs → chunk-ZUK6LIJB.mjs} +10 -1
- package/dist/cli/command-docs.d.mts +5 -0
- package/dist/cli/command-docs.d.ts +5 -0
- package/dist/cli/command-docs.js +2 -2
- package/dist/cli/command-docs.mjs +1 -1
- package/dist/cli/{csv-6FNFYJUC.js → csv-C56GSCEU.js} +13 -12
- package/dist/cli/{csv-MDHT4BKK.mjs → csv-L54JS7TF.mjs} +4 -3
- package/dist/cli/{db-D6AMVOEW.js → db-MOGRMZTA.js} +30 -27
- package/dist/cli/{db-74O3RFWY.mjs → db-YVBUW2DX.mjs} +10 -7
- package/dist/cli/describe-KYEULWPG.js +48 -0
- package/dist/cli/describe-NLZKKT7C.mjs +48 -0
- package/dist/cli/describe-core.d.mts +153 -5
- package/dist/cli/describe-core.d.ts +153 -5
- package/dist/cli/describe-core.js +9 -5
- package/dist/cli/describe-core.mjs +10 -6
- package/dist/cli/{executions-N4FMGVSC.js → executions-A7L4ULPP.js} +9 -7
- package/dist/cli/{executions-PVSF4HUF.mjs → executions-ZBGSTT37.mjs} +7 -5
- package/dist/cli/{feedback-OB7NANZW.mjs → feedback-G6GU37FD.mjs} +6 -5
- package/dist/cli/{feedback-WFSPCAI2.js → feedback-OHLY7RYD.js} +10 -9
- package/dist/cli/getting-started.d.mts +6 -6
- package/dist/cli/getting-started.d.ts +6 -6
- package/dist/cli/getting-started.js +2 -2
- package/dist/cli/getting-started.mjs +1 -1
- package/dist/cli/git-P76N4NDQ.js +25 -0
- package/dist/cli/{git-FHUSPAEU.mjs → git-PKZW3QD5.mjs} +5 -4
- package/dist/cli/index.js +152 -142
- package/dist/cli/index.mjs +56 -46
- package/dist/cli/{legacy-noops-ECHNA5HN.js → legacy-noops-5LM3D724.js} +8 -7
- package/dist/cli/{legacy-noops-HMK4BSCI.mjs → legacy-noops-LJJYG6YA.mjs} +5 -4
- package/dist/cli/{monitors-U7VQ3EZM.mjs → monitors-72QV4ALO.mjs} +19 -6
- package/dist/cli/{monitors-XLLFNENH.js → monitors-UX3H5DC2.js} +103 -90
- package/dist/cli/{org-6H3USO5M.mjs → org-6RRRKOCP.mjs} +9 -6
- package/dist/cli/{org-QX6ER2HN.js → org-IF7ISUVB.js} +70 -67
- package/dist/cli/pages-3SU3HKL7.js +252 -0
- package/dist/cli/pages-DXDYYKEK.mjs +252 -0
- package/dist/cli/{play-MOB2WYOR.mjs → play-AHASKRLA.mjs} +512 -1508
- package/dist/cli/{play-WNB7HBZK.js → play-EUIUVLUH.js} +1090 -2086
- package/dist/cli/{providers-CXEZ23E2.mjs → providers-GWGE3WY3.mjs} +7 -5
- package/dist/cli/{providers-7M3DISKX.js → providers-V5WU4VXJ.js} +10 -8
- package/dist/cli/{quickstart-ZFCHKHF6.mjs → quickstart-OXKQ5ZST.mjs} +5 -4
- package/dist/cli/{quickstart-CLJT4AZL.js → quickstart-QP65I5PF.js} +13 -12
- package/dist/cli/run-6MM72IGL.mjs +443 -0
- package/dist/cli/run-F3FTYS56.js +443 -0
- package/dist/cli/search-OYKOOI7A.js +32 -0
- package/dist/cli/{search-FVYWYIC3.mjs → search-ZMEBVJZB.mjs} +8 -6
- package/dist/cli/{secrets-YRLKZQS5.js → secrets-ACND5N6A.js} +16 -14
- package/dist/cli/{secrets-WAMPTQFC.mjs → secrets-XRCJFF3L.mjs} +7 -5
- package/dist/cli/{sessions-IQ332BJH.mjs → sessions-RTK3CEW6.mjs} +5 -4
- package/dist/cli/{sessions-44J6WIVU.js → sessions-ZGRJPCFF.js} +6 -5
- package/dist/cli/{settings-4IJR2I2T.js → settings-PD5KWQQZ.js} +80 -77
- package/dist/cli/{settings-22S6NIFQ.mjs → settings-XDRBPRDE.mjs} +14 -11
- package/dist/cli/{setup-OZUPKKPW.mjs → setup-3HPYAOCC.mjs} +12 -10
- package/dist/cli/{setup-3FWSRNOX.js → setup-E2Q6PXHC.js} +53 -51
- package/dist/cli/{skills-5CW3NFP3.mjs → skills-OOQFMPOV.mjs} +7 -6
- package/dist/cli/skills-XYWV52KB.js +31 -0
- package/dist/cli/tools-ASCDZJCK.js +55 -0
- package/dist/cli/tools-C5ZT3UIC.mjs +55 -0
- package/dist/cli/update-5RQSEIFM.js +33 -0
- package/dist/cli/{update-IBULOV7P.mjs → update-ZWJTADIW.mjs} +9 -8
- package/dist/cli/{workflow-MVZT7MWT.mjs → workflow-23NMPAJ7.mjs} +10 -8
- package/dist/cli/{workflow-Z7FW6GT2.js → workflow-TCXU5YJV.js} +20 -18
- package/dist/client-DS2IWYZF.d.ts +10 -0
- package/dist/client-DTwnz_AW.d.mts +10 -0
- package/dist/{client-CYqG23K1.d.ts → client-core-B_6HAIBy.d.ts} +385 -12
- package/dist/{client-BbU5_j7n.d.mts → client-core-DzBSlY1U.d.mts} +385 -12
- package/dist/{compiler-manifest-CWz_sNOQ.d.mts → compiler-manifest-Dcyd3-Zd.d.mts} +43 -1
- package/dist/{compiler-manifest-CWz_sNOQ.d.ts → compiler-manifest-Dcyd3-Zd.d.ts} +43 -1
- package/dist/errors-d-sTrZhe.d.mts +142 -0
- package/dist/errors-yQwfgrcX.d.ts +142 -0
- package/dist/{index-BF2JB_Ug.d.mts → index-C6oXchjN.d.mts} +1 -1
- package/dist/{index-4NPXDzlD.d.ts → index-P56zy_z5.d.ts} +1 -1
- package/dist/index.d.mts +11 -147
- package/dist/index.d.ts +11 -147
- package/dist/index.js +15 -11
- package/dist/index.mjs +14 -10
- package/dist/install-integrity.json +141 -104
- package/dist/plays/bundle-play-file.d.mts +3 -3
- package/dist/plays/bundle-play-file.d.ts +3 -3
- package/dist/plays/bundle-play-file.mjs +2 -1
- package/dist/plays/play-description.d.mts +2 -2
- package/dist/plays/play-description.d.ts +2 -2
- package/dist/plays/play-description.js +2 -2
- package/dist/plays/play-description.mjs +1 -1
- package/dist/plays/run-request.d.mts +2 -2
- package/dist/plays/run-request.d.ts +2 -2
- package/dist/release.d.mts +1 -1
- package/dist/release.d.ts +1 -1
- package/dist/release.js +2 -2
- package/dist/release.mjs +1 -1
- package/dist/server.d.mts +17 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.js +76 -0
- package/dist/server.mjs +76 -0
- package/package.json +6 -1
- package/dist/cli/auth-VDOCNR7H.js +0 -40
- package/dist/cli/chunk-PQUUWFXY.js +0 -95
- package/dist/cli/chunk-QJLKYYPX.js +0 -1710
- package/dist/cli/chunk-YBWAG72P.mjs +0 -95
- package/dist/cli/git-4PMBJSH5.js +0 -24
- package/dist/cli/search-4CCQCTVD.js +0 -30
- package/dist/cli/skills-LMNM6B5F.js +0 -30
- package/dist/cli/tools-AGBBDJ7P.js +0 -45
- package/dist/cli/tools-NOPBDRGW.mjs +0 -45
- package/dist/cli/update-U3W6USVD.js +0 -32
|
@@ -76,6 +76,7 @@ function schemaTables(options?: Pick<PostgresSchedulerOptions, 'schema'>) {
|
|
|
76
76
|
operations: `${schema}."runtime_sandbox_operations"`,
|
|
77
77
|
cleanup: `${schema}."sandbox_cleanup_jobs_v2"`,
|
|
78
78
|
runs: `${schema}."runs"`,
|
|
79
|
+
attempts: `${schema}."attempts"`,
|
|
79
80
|
};
|
|
80
81
|
}
|
|
81
82
|
|
|
@@ -286,6 +287,7 @@ export async function reserveRuntimeSandboxCapacityLease(
|
|
|
286
287
|
activeLeases: number;
|
|
287
288
|
wouldDefer: boolean;
|
|
288
289
|
resumeExistingProviderOperation: boolean;
|
|
290
|
+
resumePendingDelete?: boolean;
|
|
289
291
|
/**
|
|
290
292
|
* Database-clock age of a resumed operation. Absent on a same-key race and
|
|
291
293
|
* once the lease expires, when a new sandbox could no longer be promoted.
|
|
@@ -296,7 +298,8 @@ export async function reserveRuntimeSandboxCapacityLease(
|
|
|
296
298
|
> {
|
|
297
299
|
const orgId = assertId(input.orgId, 'orgId');
|
|
298
300
|
const runId = assertId(input.runId, 'runId');
|
|
299
|
-
const { cache, leases, operations, runs } =
|
|
301
|
+
const { cache, leases, operations, runs, attempts, cleanup } =
|
|
302
|
+
schemaTables(options);
|
|
300
303
|
const leaseId = input.leaseId?.trim() || randomUUID();
|
|
301
304
|
const unsentProviderOperationToken = unsentReservationInputs.get(input);
|
|
302
305
|
const providerOperationToken =
|
|
@@ -321,6 +324,9 @@ export async function reserveRuntimeSandboxCapacityLease(
|
|
|
321
324
|
provider_operation_token: string | null;
|
|
322
325
|
attempt: number;
|
|
323
326
|
environment: 'preview' | 'production';
|
|
327
|
+
operation_state: RuntimeSandboxOperationState;
|
|
328
|
+
sandbox_id: string | null;
|
|
329
|
+
routing_domain: string | null;
|
|
324
330
|
age_ms: number | null;
|
|
325
331
|
}>;
|
|
326
332
|
existing_operation: {
|
|
@@ -368,6 +374,8 @@ export async function reserveRuntimeSandboxCapacityLease(
|
|
|
368
374
|
FROM (
|
|
369
375
|
SELECT lease.lease_id, operation.provider_operation_token,
|
|
370
376
|
operation.attempt, operation.environment,
|
|
377
|
+
operation.state AS operation_state,
|
|
378
|
+
operation.sandbox_id, operation.routing_domain,
|
|
371
379
|
CASE WHEN lease.expires_at > clock_timestamp() THEN
|
|
372
380
|
extract(epoch FROM clock_timestamp() - operation.created_at) * 1000
|
|
373
381
|
END AS age_ms
|
|
@@ -377,9 +385,44 @@ export async function reserveRuntimeSandboxCapacityLease(
|
|
|
377
385
|
AND operation.org_id = $1
|
|
378
386
|
AND operation.run_id = $3
|
|
379
387
|
AND operation.provider = $4
|
|
380
|
-
AND
|
|
388
|
+
AND (
|
|
389
|
+
(operation.state = $7 AND lease.sandbox_id IS NULL)
|
|
390
|
+
OR (
|
|
391
|
+
operation.state = 'deleting'
|
|
392
|
+
AND operation.sandbox_id IS NOT NULL
|
|
393
|
+
AND lease.sandbox_id = operation.sandbox_id
|
|
394
|
+
AND lease.routing_domain IS NOT DISTINCT FROM operation.routing_domain
|
|
395
|
+
AND EXISTS (
|
|
396
|
+
SELECT 1
|
|
397
|
+
FROM ${attempts} AS owner_attempt
|
|
398
|
+
CROSS JOIN LATERAL jsonb_array_elements(
|
|
399
|
+
CASE
|
|
400
|
+
WHEN jsonb_typeof(owner_attempt.resource_json) = 'array'
|
|
401
|
+
THEN owner_attempt.resource_json
|
|
402
|
+
WHEN owner_attempt.resource_json IS NULL THEN '[]'::jsonb
|
|
403
|
+
ELSE jsonb_build_array(owner_attempt.resource_json)
|
|
404
|
+
END
|
|
405
|
+
) AS resource
|
|
406
|
+
WHERE owner_attempt.run_id = operation.run_id
|
|
407
|
+
AND owner_attempt.attempt = operation.attempt
|
|
408
|
+
AND resource->>'sandboxCapacityLeaseId' = operation.operation_key
|
|
409
|
+
AND resource->>'sandboxId' = operation.sandbox_id
|
|
410
|
+
AND resource->>'lateAcquired' = 'true'
|
|
411
|
+
AND (
|
|
412
|
+
resource->'billingEndedAt' IS NULL
|
|
413
|
+
OR resource->'billingEndedAt' = 'null'::jsonb
|
|
414
|
+
)
|
|
415
|
+
)
|
|
416
|
+
AND EXISTS (
|
|
417
|
+
SELECT 1 FROM ${cleanup} AS cleanup_job
|
|
418
|
+
WHERE cleanup_job.provider = operation.provider
|
|
419
|
+
AND cleanup_job.sandbox_id = operation.sandbox_id
|
|
420
|
+
AND cleanup_job.routing_domain IS NOT DISTINCT FROM operation.routing_domain
|
|
421
|
+
AND cleanup_job.status <> 'deleted'
|
|
422
|
+
)
|
|
423
|
+
)
|
|
424
|
+
)
|
|
381
425
|
AND lease.released_at IS NULL
|
|
382
|
-
AND lease.sandbox_id IS NULL
|
|
383
426
|
ORDER BY operation.created_at ASC
|
|
384
427
|
LIMIT 2
|
|
385
428
|
) AS pending
|
|
@@ -512,9 +555,15 @@ export async function reserveRuntimeSandboxCapacityLease(
|
|
|
512
555
|
activeLeases,
|
|
513
556
|
wouldDefer,
|
|
514
557
|
resumeExistingProviderOperation: true,
|
|
558
|
+
...(pendingOperation.operation_state ===
|
|
559
|
+
RuntimeSandboxOperationState.Deleting
|
|
560
|
+
? { resumePendingDelete: true }
|
|
561
|
+
: {}),
|
|
515
562
|
...(pendingOperation.age_ms === null
|
|
516
563
|
? {}
|
|
517
|
-
: {
|
|
564
|
+
: {
|
|
565
|
+
existingProviderOperationAgeMs: Number(pendingOperation.age_ms),
|
|
566
|
+
}),
|
|
518
567
|
};
|
|
519
568
|
}
|
|
520
569
|
}
|
|
@@ -887,14 +936,19 @@ export async function releaseRuntimeSandboxCapacityLease(
|
|
|
887
936
|
export async function abandonRuntimeSandboxOperationReservation(
|
|
888
937
|
client: PostgresSchedulerQueryClient,
|
|
889
938
|
/** With `attempt`, an operation a newer attempt has adopted is left alone. */
|
|
890
|
-
input: {
|
|
939
|
+
input: {
|
|
940
|
+
operationKey: string;
|
|
941
|
+
attempt?: number;
|
|
942
|
+
/** A lookup 404 must not retire a terminal Run's unresolved creation. */
|
|
943
|
+
onlyWhileRunActive?: boolean;
|
|
944
|
+
},
|
|
891
945
|
options?: Pick<PostgresSchedulerOptions, 'schema'>,
|
|
892
946
|
): Promise<boolean> {
|
|
893
947
|
const { leases, operations, runs } = schemaTables(options);
|
|
894
948
|
const result = await client.query<{ operation_key: string }>(
|
|
895
949
|
`
|
|
896
950
|
WITH custody_run AS MATERIALIZED (
|
|
897
|
-
SELECT run_id FROM ${runs}
|
|
951
|
+
SELECT run_id, status FROM ${runs}
|
|
898
952
|
WHERE run_id = (SELECT run_id FROM ${operations} WHERE operation_key = $1)
|
|
899
953
|
FOR NO KEY UPDATE
|
|
900
954
|
), custody_attempts AS MATERIALIZED (
|
|
@@ -914,6 +968,12 @@ export async function abandonRuntimeSandboxOperationReservation(
|
|
|
914
968
|
AND operation.state = $3
|
|
915
969
|
AND ($4::integer IS NULL OR operation.attempt <= $4)
|
|
916
970
|
AND EXISTS (SELECT 1 FROM eligible_lease)
|
|
971
|
+
AND (
|
|
972
|
+
NOT $5::boolean OR EXISTS (
|
|
973
|
+
SELECT 1 FROM custody_run
|
|
974
|
+
WHERE status IN ('queued', 'running', 'waiting')
|
|
975
|
+
)
|
|
976
|
+
)
|
|
917
977
|
RETURNING operation.operation_key
|
|
918
978
|
), released AS (
|
|
919
979
|
UPDATE ${leases} AS lease
|
|
@@ -930,11 +990,13 @@ export async function abandonRuntimeSandboxOperationReservation(
|
|
|
930
990
|
RuntimeSandboxOperationState.Abandoned,
|
|
931
991
|
RuntimeSandboxOperationState.Reserved,
|
|
932
992
|
input.attempt ?? null,
|
|
993
|
+
input.onlyWhileRunActive ?? false,
|
|
933
994
|
],
|
|
934
995
|
);
|
|
935
996
|
return result.rows.length === 1;
|
|
936
997
|
}
|
|
937
998
|
|
|
999
|
+
/** A run's terminal outcome must not strand a create that has not been bound yet. */
|
|
938
1000
|
export async function readReservedDaytonaCancellationOperation(
|
|
939
1001
|
client: PostgresSchedulerQueryClient,
|
|
940
1002
|
environment: 'preview' | 'production',
|
|
@@ -942,23 +1004,32 @@ export async function readReservedDaytonaCancellationOperation(
|
|
|
942
1004
|
): Promise<{
|
|
943
1005
|
operationKey: string;
|
|
944
1006
|
providerOperationToken: string;
|
|
1007
|
+
orgId: string;
|
|
1008
|
+
runId: string;
|
|
945
1009
|
createdAtMs: number;
|
|
946
1010
|
} | null> {
|
|
947
|
-
const { operations } = schemaTables(options);
|
|
1011
|
+
const { operations, runs } = schemaTables(options);
|
|
948
1012
|
const schema = quoteIdent(options?.schema ?? 'runtime_scheduler');
|
|
949
1013
|
const rows = await client.query<{
|
|
950
1014
|
operation_key: string;
|
|
951
1015
|
provider_operation_token: string | null;
|
|
1016
|
+
org_id: string;
|
|
1017
|
+
run_id: string;
|
|
952
1018
|
created_at_ms: number;
|
|
953
1019
|
}>(
|
|
954
1020
|
`WITH candidate AS (
|
|
955
1021
|
SELECT operation.operation_key
|
|
956
1022
|
FROM ${operations} AS operation
|
|
957
|
-
JOIN ${
|
|
1023
|
+
JOIN ${runs} AS run ON run.run_id = operation.run_id
|
|
1024
|
+
LEFT JOIN ${schema}."control" AS request
|
|
958
1025
|
ON request.key = 'runtime_cancel:' || operation.run_id
|
|
959
1026
|
WHERE operation.provider = 'daytona'
|
|
960
1027
|
AND operation.environment = $1
|
|
961
1028
|
AND operation.state = 'reserved'
|
|
1029
|
+
AND (
|
|
1030
|
+
run.status IN ('completed', 'failed', 'cancelled')
|
|
1031
|
+
OR request.key IS NOT NULL
|
|
1032
|
+
)
|
|
962
1033
|
ORDER BY operation.updated_at ASC, operation.operation_key ASC
|
|
963
1034
|
LIMIT 1
|
|
964
1035
|
FOR UPDATE OF operation SKIP LOCKED
|
|
@@ -967,7 +1038,8 @@ export async function readReservedDaytonaCancellationOperation(
|
|
|
967
1038
|
SET updated_at = clock_timestamp()
|
|
968
1039
|
FROM candidate
|
|
969
1040
|
WHERE operation.operation_key = candidate.operation_key
|
|
970
|
-
|
|
1041
|
+
RETURNING operation.operation_key, operation.provider_operation_token,
|
|
1042
|
+
operation.org_id, operation.run_id,
|
|
971
1043
|
floor(extract(epoch FROM operation.created_at) * 1000)::bigint AS created_at_ms`,
|
|
972
1044
|
[environment],
|
|
973
1045
|
);
|
|
@@ -981,6 +1053,8 @@ export async function readReservedDaytonaCancellationOperation(
|
|
|
981
1053
|
return {
|
|
982
1054
|
operationKey: row.operation_key,
|
|
983
1055
|
providerOperationToken: row.provider_operation_token,
|
|
1056
|
+
orgId: row.org_id,
|
|
1057
|
+
runId: row.run_id,
|
|
984
1058
|
createdAtMs: Number(row.created_at_ms),
|
|
985
1059
|
};
|
|
986
1060
|
}
|
|
@@ -1071,6 +1145,165 @@ export async function recordRecoveredDaytonaCancellationSandbox(
|
|
|
1071
1145
|
return recorded.rows.length === 1;
|
|
1072
1146
|
}
|
|
1073
1147
|
|
|
1148
|
+
export async function recordDaytonaSandboxCleanupIntent(
|
|
1149
|
+
client: PostgresSchedulerQueryClient,
|
|
1150
|
+
input: {
|
|
1151
|
+
operationKey: string;
|
|
1152
|
+
providerOperationToken: string;
|
|
1153
|
+
orgId: string;
|
|
1154
|
+
runId: string;
|
|
1155
|
+
sandboxId: string;
|
|
1156
|
+
routingDomain: string;
|
|
1157
|
+
},
|
|
1158
|
+
options?: Pick<PostgresSchedulerOptions, 'schema'>,
|
|
1159
|
+
): Promise<boolean> {
|
|
1160
|
+
const { operations, leases, cleanup } = schemaTables(options);
|
|
1161
|
+
const schema = quoteIdent(options?.schema ?? 'runtime_scheduler');
|
|
1162
|
+
const recorded = await client.query<{ operation_key: string }>(
|
|
1163
|
+
`WITH custody_run AS MATERIALIZED (
|
|
1164
|
+
SELECT run.run_id FROM ${schema}."runs" AS run
|
|
1165
|
+
WHERE run.run_id = $1
|
|
1166
|
+
FOR NO KEY UPDATE
|
|
1167
|
+
), custody_attempts AS MATERIALIZED (
|
|
1168
|
+
SELECT attempt.* FROM ${schema}."attempts" AS attempt
|
|
1169
|
+
WHERE attempt.run_id IN (SELECT run_id FROM custody_run)
|
|
1170
|
+
ORDER BY attempt.attempt FOR UPDATE
|
|
1171
|
+
), custody_lease AS MATERIALIZED (
|
|
1172
|
+
SELECT lease.lease_id FROM ${leases} AS lease
|
|
1173
|
+
CROSS JOIN (SELECT count(*) FROM custody_attempts) AS attempt_locks
|
|
1174
|
+
WHERE lease.lease_id = $2 FOR UPDATE OF lease
|
|
1175
|
+
), custody_operation AS MATERIALIZED (
|
|
1176
|
+
SELECT operation.operation_key FROM ${operations} AS operation
|
|
1177
|
+
CROSS JOIN (SELECT count(*) FROM custody_lease) AS lease_locks
|
|
1178
|
+
WHERE operation.operation_key = $2 FOR UPDATE OF operation
|
|
1179
|
+
), eligible AS MATERIALIZED (
|
|
1180
|
+
SELECT operation.operation_key, operation.run_id, operation.attempt,
|
|
1181
|
+
operation.environment, operation.created_at
|
|
1182
|
+
FROM ${operations} AS operation
|
|
1183
|
+
JOIN custody_operation
|
|
1184
|
+
ON custody_operation.operation_key = operation.operation_key
|
|
1185
|
+
JOIN custody_lease ON custody_lease.lease_id = operation.operation_key
|
|
1186
|
+
JOIN ${leases} AS lease ON lease.lease_id = operation.operation_key
|
|
1187
|
+
JOIN custody_attempts AS attempt
|
|
1188
|
+
ON attempt.run_id = operation.run_id
|
|
1189
|
+
AND attempt.attempt = operation.attempt
|
|
1190
|
+
WHERE operation.operation_key = $2
|
|
1191
|
+
AND operation.run_id = $1
|
|
1192
|
+
AND operation.org_id = $3
|
|
1193
|
+
AND operation.provider_operation_token = $4
|
|
1194
|
+
AND operation.provider = 'daytona'
|
|
1195
|
+
AND operation.state = 'reserved'
|
|
1196
|
+
AND lease.released_at IS NULL
|
|
1197
|
+
AND lease.sandbox_id IS NULL
|
|
1198
|
+
), queued AS (
|
|
1199
|
+
INSERT INTO ${cleanup} AS job (
|
|
1200
|
+
provider, sandbox_id, run_id, attempt, environment, routing_domain
|
|
1201
|
+
)
|
|
1202
|
+
SELECT 'daytona', $5, eligible.run_id, eligible.attempt,
|
|
1203
|
+
eligible.environment, $6
|
|
1204
|
+
FROM eligible
|
|
1205
|
+
ON CONFLICT (provider, sandbox_id, routing_domain_key)
|
|
1206
|
+
DO UPDATE SET updated_at = job.updated_at
|
|
1207
|
+
WHERE job.status <> 'deleted'
|
|
1208
|
+
AND job.run_id = EXCLUDED.run_id
|
|
1209
|
+
AND job.attempt = EXCLUDED.attempt
|
|
1210
|
+
AND job.environment = EXCLUDED.environment
|
|
1211
|
+
AND job.routing_domain IS NOT DISTINCT FROM EXCLUDED.routing_domain
|
|
1212
|
+
RETURNING job.provider, job.sandbox_id, job.run_id, job.attempt,
|
|
1213
|
+
job.environment, job.routing_domain
|
|
1214
|
+
), promoted AS (
|
|
1215
|
+
UPDATE ${operations} AS operation
|
|
1216
|
+
SET state = 'deleting',
|
|
1217
|
+
sandbox_id = $5,
|
|
1218
|
+
routing_domain = $6,
|
|
1219
|
+
provider_created_at = clock_timestamp(),
|
|
1220
|
+
updated_at = clock_timestamp()
|
|
1221
|
+
FROM eligible
|
|
1222
|
+
JOIN queued ON queued.run_id = eligible.run_id
|
|
1223
|
+
AND queued.attempt = eligible.attempt
|
|
1224
|
+
AND queued.environment = eligible.environment
|
|
1225
|
+
WHERE operation.operation_key = eligible.operation_key
|
|
1226
|
+
AND operation.state = 'reserved'
|
|
1227
|
+
RETURNING operation.operation_key, operation.run_id, operation.attempt,
|
|
1228
|
+
operation.environment, operation.created_at
|
|
1229
|
+
), resource AS (
|
|
1230
|
+
SELECT promoted.*,
|
|
1231
|
+
jsonb_build_object(
|
|
1232
|
+
'kind', 'daytona_sandbox',
|
|
1233
|
+
'sandboxId', $5::text,
|
|
1234
|
+
'runtimeEnvironment', promoted.environment,
|
|
1235
|
+
'daytonaOrganizationId', $6::text,
|
|
1236
|
+
'billingStartedAt', extract(epoch FROM promoted.created_at) * 1000,
|
|
1237
|
+
'sandboxCapacityLeaseId', promoted.operation_key,
|
|
1238
|
+
'lateAcquired', true
|
|
1239
|
+
) AS value
|
|
1240
|
+
FROM promoted
|
|
1241
|
+
), recorded_attempt AS (
|
|
1242
|
+
UPDATE ${schema}."attempts" AS attempt
|
|
1243
|
+
SET resource_json = CASE
|
|
1244
|
+
WHEN attempt.resource_json IS NULL THEN jsonb_build_array(resource.value)
|
|
1245
|
+
WHEN jsonb_typeof(attempt.resource_json) = 'array'
|
|
1246
|
+
THEN attempt.resource_json || jsonb_build_array(resource.value)
|
|
1247
|
+
ELSE jsonb_build_array(attempt.resource_json, resource.value)
|
|
1248
|
+
END,
|
|
1249
|
+
updated_at = clock_timestamp()
|
|
1250
|
+
FROM resource
|
|
1251
|
+
WHERE attempt.run_id = resource.run_id
|
|
1252
|
+
AND attempt.attempt = resource.attempt
|
|
1253
|
+
RETURNING attempt.run_id
|
|
1254
|
+
), bound AS (
|
|
1255
|
+
UPDATE ${leases} AS lease
|
|
1256
|
+
SET sandbox_id = $5, routing_domain = $6
|
|
1257
|
+
FROM promoted
|
|
1258
|
+
WHERE lease.lease_id = promoted.operation_key
|
|
1259
|
+
AND lease.released_at IS NULL
|
|
1260
|
+
RETURNING lease.lease_id
|
|
1261
|
+
)
|
|
1262
|
+
SELECT promoted.operation_key FROM promoted
|
|
1263
|
+
JOIN recorded_attempt ON recorded_attempt.run_id = promoted.run_id
|
|
1264
|
+
JOIN bound ON bound.lease_id = promoted.operation_key
|
|
1265
|
+
JOIN queued ON queued.provider = 'daytona'
|
|
1266
|
+
AND queued.sandbox_id = $5
|
|
1267
|
+
AND queued.run_id = promoted.run_id
|
|
1268
|
+
AND queued.attempt = promoted.attempt
|
|
1269
|
+
AND queued.environment = promoted.environment
|
|
1270
|
+
AND queued.routing_domain IS NOT DISTINCT FROM $6
|
|
1271
|
+
UNION ALL
|
|
1272
|
+
SELECT operation.operation_key
|
|
1273
|
+
FROM ${operations} AS operation
|
|
1274
|
+
JOIN ${leases} AS lease ON lease.lease_id = operation.operation_key
|
|
1275
|
+
JOIN ${cleanup} AS job
|
|
1276
|
+
ON job.provider = operation.provider
|
|
1277
|
+
AND job.sandbox_id = operation.sandbox_id
|
|
1278
|
+
AND job.routing_domain IS NOT DISTINCT FROM operation.routing_domain
|
|
1279
|
+
AND job.run_id = operation.run_id
|
|
1280
|
+
AND job.attempt = operation.attempt
|
|
1281
|
+
AND job.environment = operation.environment
|
|
1282
|
+
WHERE operation.operation_key = $2
|
|
1283
|
+
AND operation.run_id = $1
|
|
1284
|
+
AND operation.org_id = $3
|
|
1285
|
+
AND operation.provider_operation_token = $4
|
|
1286
|
+
AND operation.provider = 'daytona'
|
|
1287
|
+
AND operation.state = 'deleting'
|
|
1288
|
+
AND operation.sandbox_id = $5
|
|
1289
|
+
AND operation.routing_domain IS NOT DISTINCT FROM $6
|
|
1290
|
+
AND lease.sandbox_id = operation.sandbox_id
|
|
1291
|
+
AND lease.routing_domain IS NOT DISTINCT FROM operation.routing_domain
|
|
1292
|
+
AND lease.released_at IS NULL
|
|
1293
|
+
AND job.status <> 'deleted'
|
|
1294
|
+
LIMIT 1`,
|
|
1295
|
+
[
|
|
1296
|
+
input.runId,
|
|
1297
|
+
input.operationKey,
|
|
1298
|
+
input.orgId,
|
|
1299
|
+
input.providerOperationToken,
|
|
1300
|
+
input.sandboxId,
|
|
1301
|
+
input.routingDomain,
|
|
1302
|
+
],
|
|
1303
|
+
);
|
|
1304
|
+
return recorded.rows.length === 1;
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1074
1307
|
/** Release only after the provider confirms deletion (or already absent). */
|
|
1075
1308
|
export async function releaseRuntimeSandboxCapacityLeaseForSandbox(
|
|
1076
1309
|
client: PostgresSchedulerQueryClient,
|
|
@@ -1178,3 +1411,138 @@ export async function readRuntimeSandboxCapacitySummaryViaRuntimeScheduler(input
|
|
|
1178
1411
|
),
|
|
1179
1412
|
);
|
|
1180
1413
|
}
|
|
1414
|
+
|
|
1415
|
+
/** Fixed-size Preview test evidence from the existing capacity/cleanup owners. */
|
|
1416
|
+
export type RuntimeSandboxCapacityTestEvidence = {
|
|
1417
|
+
observedAtMs: number;
|
|
1418
|
+
mirror:
|
|
1419
|
+
| null
|
|
1420
|
+
| (Pick<
|
|
1421
|
+
RuntimeOrgSandboxLimitCacheRow,
|
|
1422
|
+
'limit' | 'expiresAt' | 'sourceRevision'
|
|
1423
|
+
> & { effectiveLimit: number });
|
|
1424
|
+
org: {
|
|
1425
|
+
unreleasedLeases: number;
|
|
1426
|
+
};
|
|
1427
|
+
run: null | {
|
|
1428
|
+
runId: string;
|
|
1429
|
+
status: string;
|
|
1430
|
+
capacityDeferrals: number;
|
|
1431
|
+
acquired: number;
|
|
1432
|
+
unresolvedOperations: number;
|
|
1433
|
+
confirmedDeleted: number;
|
|
1434
|
+
unreleasedLeases: number;
|
|
1435
|
+
releasedBoundLeases: number;
|
|
1436
|
+
invalidReleasedLeases: number;
|
|
1437
|
+
cleanupJobs: number;
|
|
1438
|
+
confirmedCleanupJobs: number;
|
|
1439
|
+
pendingCleanup: number;
|
|
1440
|
+
computeJobStatus: string | null;
|
|
1441
|
+
hasComputeIntent: boolean;
|
|
1442
|
+
recordedResources: number;
|
|
1443
|
+
firstAcquiredAtMs: number | null;
|
|
1444
|
+
lastDeleteConfirmedAtMs: number | null;
|
|
1445
|
+
};
|
|
1446
|
+
};
|
|
1447
|
+
|
|
1448
|
+
/**
|
|
1449
|
+
* Read-only, caller-owned evidence for a small Preview contract fixture. The
|
|
1450
|
+
* API chooses the namespace-derived schema; no SQL or connection override is
|
|
1451
|
+
* accepted. Every row projection is an aggregate, so response size never
|
|
1452
|
+
* depends on attempts, resources, leases or cleanup history.
|
|
1453
|
+
*
|
|
1454
|
+
* Deleted means the existing lifecycle owner recorded provider-confirmed
|
|
1455
|
+
* deletion. Lease expiry is deliberately never consulted by this reader.
|
|
1456
|
+
*/
|
|
1457
|
+
export async function readRuntimeSandboxCapacityTestEvidence(
|
|
1458
|
+
client: PostgresSchedulerQueryClient,
|
|
1459
|
+
input: { orgId: string; runId?: string; releaseId: string },
|
|
1460
|
+
options: Pick<PostgresSchedulerOptions, 'schema'>,
|
|
1461
|
+
): Promise<RuntimeSandboxCapacityTestEvidence | null> {
|
|
1462
|
+
if (!options.schema?.startsWith('runtime_scheduler_preview_')) {
|
|
1463
|
+
throw new Error(
|
|
1464
|
+
'Sandbox capacity test evidence requires an isolated Preview schema.',
|
|
1465
|
+
);
|
|
1466
|
+
}
|
|
1467
|
+
const schema = quoteIdent(options.schema);
|
|
1468
|
+
const { cache, leases, operations, cleanup, runs } = schemaTables(options);
|
|
1469
|
+
const result = await client.query<{
|
|
1470
|
+
evidence: RuntimeSandboxCapacityTestEvidence;
|
|
1471
|
+
}>(
|
|
1472
|
+
`WITH owned_run AS (
|
|
1473
|
+
SELECT run_id, status FROM ${runs}
|
|
1474
|
+
WHERE org_id = $1 AND run_id = $2
|
|
1475
|
+
AND launch_json->>'absurdReleaseId' = $3
|
|
1476
|
+
), owned_operations AS (
|
|
1477
|
+
SELECT operation.* FROM ${operations} AS operation
|
|
1478
|
+
JOIN owned_run ON owned_run.run_id = operation.run_id
|
|
1479
|
+
WHERE operation.org_id = $1
|
|
1480
|
+
), owned_leases AS (
|
|
1481
|
+
SELECT lease.* FROM owned_operations AS operation
|
|
1482
|
+
JOIN ${leases} AS lease ON lease.lease_id = operation.operation_key
|
|
1483
|
+
WHERE lease.org_id = $1 AND lease.run_id = operation.run_id
|
|
1484
|
+
), owned_cleanup AS (
|
|
1485
|
+
SELECT job.* FROM owned_operations AS operation
|
|
1486
|
+
JOIN ${cleanup} AS job ON job.provider = operation.provider
|
|
1487
|
+
AND job.sandbox_id = operation.sandbox_id
|
|
1488
|
+
AND job.routing_domain_key = operation.routing_domain_key
|
|
1489
|
+
AND job.run_id = operation.run_id
|
|
1490
|
+
)
|
|
1491
|
+
SELECT jsonb_build_object(
|
|
1492
|
+
'observedAtMs', floor(extract(epoch FROM clock_timestamp()) * 1000)::bigint,
|
|
1493
|
+
'mirror', (SELECT jsonb_build_object(
|
|
1494
|
+
'limit', "limit", 'effectiveLimit', CASE WHEN expires_at IS NOT NULL AND expires_at <= clock_timestamp()
|
|
1495
|
+
THEN ${DEFAULT_PLAY_SANDBOX_CONCURRENCY} ELSE "limit" END,
|
|
1496
|
+
'expiresAt', floor(extract(epoch FROM expires_at) * 1000)::bigint,
|
|
1497
|
+
'sourceRevision', source_revision
|
|
1498
|
+
) FROM ${cache} WHERE org_id = $1),
|
|
1499
|
+
'org', jsonb_build_object(
|
|
1500
|
+
'unreleasedLeases', (SELECT count(*)::integer FROM ${leases} WHERE org_id = $1 AND released_at IS NULL)
|
|
1501
|
+
),
|
|
1502
|
+
'run', (SELECT jsonb_build_object(
|
|
1503
|
+
'runId', run_id, 'status', status,
|
|
1504
|
+
'capacityDeferrals', (SELECT count(*)::integer FROM ${schema}."attempts" AS attempt
|
|
1505
|
+
WHERE attempt.run_id = owned_run.run_id AND attempt.error_json->>'kind' = 'scheduler_capacity'
|
|
1506
|
+
AND starts_with(attempt.error_json->>'message', 'Runtime scheduler sandbox capacity is full for organization ')),
|
|
1507
|
+
'acquired', (SELECT count(*)::integer FROM owned_operations WHERE sandbox_id IS NOT NULL AND provider_created_at IS NOT NULL),
|
|
1508
|
+
'unresolvedOperations', (SELECT count(*)::integer FROM owned_operations WHERE state NOT IN ('deleted', 'abandoned')),
|
|
1509
|
+
'confirmedDeleted', (SELECT count(*)::integer FROM owned_operations WHERE state = 'deleted' AND delete_confirmed_at IS NOT NULL),
|
|
1510
|
+
'unreleasedLeases', (SELECT count(*)::integer FROM owned_leases WHERE released_at IS NULL),
|
|
1511
|
+
'releasedBoundLeases', (SELECT count(*)::integer FROM owned_leases WHERE sandbox_id IS NOT NULL AND released_at IS NOT NULL),
|
|
1512
|
+
'invalidReleasedLeases', (SELECT count(*)::integer FROM owned_leases AS lease
|
|
1513
|
+
WHERE lease.sandbox_id IS NOT NULL AND lease.released_at IS NOT NULL AND NOT EXISTS (
|
|
1514
|
+
SELECT 1 FROM owned_operations AS operation WHERE operation.operation_key = lease.lease_id
|
|
1515
|
+
AND operation.provider = lease.provider AND operation.sandbox_id = lease.sandbox_id
|
|
1516
|
+
AND operation.routing_domain_key = coalesce(lease.routing_domain, '')
|
|
1517
|
+
AND operation.state = 'deleted' AND operation.delete_confirmed_at IS NOT NULL)),
|
|
1518
|
+
'cleanupJobs', (SELECT count(*)::integer FROM owned_cleanup),
|
|
1519
|
+
'confirmedCleanupJobs', (SELECT count(*)::integer FROM owned_cleanup WHERE status = 'deleted' AND deleted_at IS NOT NULL),
|
|
1520
|
+
'pendingCleanup', (SELECT count(*)::integer FROM owned_cleanup WHERE status <> 'deleted' OR blocked_at IS NOT NULL),
|
|
1521
|
+
'hasComputeIntent', EXISTS (SELECT 1 FROM ${schema}."attempts" AS attempt
|
|
1522
|
+
CROSS JOIN LATERAL jsonb_array_elements(CASE
|
|
1523
|
+
WHEN jsonb_typeof(attempt.resource_json) = 'array' THEN attempt.resource_json
|
|
1524
|
+
WHEN attempt.resource_json IS NULL THEN '[]'::jsonb ELSE jsonb_build_array(attempt.resource_json) END) AS resource
|
|
1525
|
+
WHERE attempt.run_id = owned_run.run_id AND resource->>'kind' = 'compute_session'),
|
|
1526
|
+
'recordedResources', (SELECT count(DISTINCT (resource->>'kind', resource->>'sandboxId'))::integer
|
|
1527
|
+
FROM ${schema}."attempts" AS attempt
|
|
1528
|
+
CROSS JOIN LATERAL jsonb_array_elements(CASE
|
|
1529
|
+
WHEN jsonb_typeof(attempt.resource_json) = 'array' THEN attempt.resource_json
|
|
1530
|
+
WHEN attempt.resource_json IS NULL THEN '[]'::jsonb ELSE jsonb_build_array(attempt.resource_json) END) AS resource
|
|
1531
|
+
WHERE attempt.run_id = owned_run.run_id AND resource->>'kind' IN ('daytona_sandbox', 'modal_sandbox')
|
|
1532
|
+
AND NULLIF(resource->>'sandboxId', '') IS NOT NULL),
|
|
1533
|
+
'computeJobStatus', (SELECT status FROM ${schema}."compute_billing_jobs_v2" AS job WHERE job.run_id = owned_run.run_id),
|
|
1534
|
+
'firstAcquiredAtMs', (SELECT floor(extract(epoch FROM min(provider_created_at)) * 1000)::bigint FROM owned_operations),
|
|
1535
|
+
'lastDeleteConfirmedAtMs', (SELECT floor(extract(epoch FROM max(delete_confirmed_at)) * 1000)::bigint FROM owned_operations)
|
|
1536
|
+
) FROM owned_run)
|
|
1537
|
+
) AS evidence`,
|
|
1538
|
+
[
|
|
1539
|
+
assertId(input.orgId, 'orgId'),
|
|
1540
|
+
input.runId ? assertId(input.runId, 'runId') : null,
|
|
1541
|
+
assertId(input.releaseId, 'releaseId'),
|
|
1542
|
+
],
|
|
1543
|
+
);
|
|
1544
|
+
const evidence = result.rows[0]?.evidence;
|
|
1545
|
+
if (!evidence)
|
|
1546
|
+
throw new Error('Sandbox capacity evidence query returned no snapshot.');
|
|
1547
|
+
return input.runId && evidence.run === null ? null : evidence;
|
|
1548
|
+
}
|