deepline 0.3.461 → 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/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 +11 -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-6HJXNWUG.mjs → auth-JDLEY7VU.mjs} +5 -4
- package/dist/cli/auth-UXKY6TCC.js +41 -0
- package/dist/cli/{billing-6P5HO6QG.js → billing-HXAXB3XZ.js} +152 -78
- package/dist/cli/{billing-MJ42N7YF.mjs → billing-SDHLBLMV.mjs} +84 -10
- package/dist/cli/{chunk-5MDIZX7M.js → chunk-3ACMRZRV.js} +8 -6
- package/dist/cli/{chunk-FGLKOWSC.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-MEAIOXJL.mjs → chunk-6NNVJDVR.mjs} +7 -5
- package/dist/cli/{chunk-NMJ4D2WO.js → chunk-6PMCRYDA.js} +216 -91
- package/dist/cli/{chunk-RY4IVOU3.mjs → chunk-6RNQGWFD.mjs} +16 -806
- package/dist/cli/{chunk-EBU7LQ64.js → chunk-6V7KVRR5.js} +3 -3
- package/dist/cli/{chunk-OZBWRICM.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-IHHLTHE7.mjs → chunk-7U3XNPOA.mjs} +267 -38
- package/dist/cli/{chunk-5FDKJQZE.js → chunk-7VZHXVOQ.js} +1 -1
- package/dist/cli/{chunk-R64BGGRQ.mjs → chunk-AT636LLU.mjs} +2 -2
- package/dist/cli/{chunk-MDJPEGVN.js → chunk-BGTPIMSM.js} +392 -261
- package/dist/cli/{chunk-KVJ5VHW5.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-2WQY7ZCY.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-FGMX4HUZ.js → chunk-GEGW5HPZ.js} +29 -27
- package/dist/cli/{chunk-TNMBPMMC.js → chunk-HUB3CCM2.js} +13 -4
- package/dist/cli/{chunk-ACCR7POB.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-V7REJRDZ.mjs → chunk-LFXLQEZN.mjs} +1 -1
- package/dist/cli/{chunk-CRYOUPEB.js → chunk-LROWFPGN.js} +16 -16
- package/dist/cli/{chunk-SLEUWLJE.mjs → chunk-MSY22NQW.mjs} +5 -5
- package/dist/cli/{chunk-BGY2PLP7.mjs → chunk-MUUQZIOF.mjs} +23 -49
- package/dist/cli/{chunk-FCAZQ7WV.js → chunk-NBLSCHKK.js} +52 -50
- package/dist/cli/{chunk-QAJAJPKK.mjs → chunk-NHRWZPWZ.mjs} +4 -2
- package/dist/cli/{chunk-KXMNM4AQ.js → chunk-NMU3VR5U.js} +4 -5
- package/dist/cli/{chunk-QIW7TVV6.mjs → chunk-O2RX5A66.mjs} +14 -12
- package/dist/cli/{chunk-SAZFZQRI.js → chunk-OMQ23IXL.js} +2 -2
- package/dist/cli/{chunk-5IYOUBFZ.js → chunk-OPJAJBD4.js} +28 -54
- package/dist/cli/{chunk-FJZILBL7.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-5FY72YOV.js → chunk-QJZ6WNWD.js} +8 -8
- package/dist/cli/{chunk-EIMG75BT.mjs → chunk-S3A4IXBQ.mjs} +4 -5
- package/dist/cli/{chunk-3BMLICF7.mjs → chunk-S42YIQNE.mjs} +13 -8
- package/dist/cli/{chunk-RFONC4WJ.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-VZBCEA5S.mjs → chunk-UDRPEZ5F.mjs} +223 -92
- package/dist/cli/{chunk-KCCOQ5G5.js → chunk-ULK7JGGI.js} +511 -282
- package/dist/cli/chunk-V335HGX5.js +1038 -0
- package/dist/cli/{chunk-MGXEUZHL.mjs → chunk-V3MEA7NB.mjs} +7 -5
- package/dist/cli/{chunk-O6QOMHCH.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-FRAVCY5F.mjs → chunk-WIY6U6GD.mjs} +19 -36
- package/dist/cli/{chunk-PNATXKLP.js → chunk-XANRM3QA.js} +6 -6
- package/dist/cli/{chunk-KGQNIA37.js → chunk-XQCTG5OO.js} +44 -34
- package/dist/cli/{chunk-T3MVIPHG.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-SCIR5JXW.js → chunk-ZGQSFYD2.js} +56 -51
- package/dist/cli/{chunk-QEYHTIV4.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-NX7NO3O6.js → csv-C56GSCEU.js} +13 -12
- package/dist/cli/{csv-DQ6GW5B5.mjs → csv-L54JS7TF.mjs} +4 -3
- package/dist/cli/{db-R72DFMP6.js → db-MOGRMZTA.js} +30 -27
- package/dist/cli/{db-2YP33M4K.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-ZLHD4QIT.js → executions-A7L4ULPP.js} +9 -7
- package/dist/cli/{executions-WFBU7L2Q.mjs → executions-ZBGSTT37.mjs} +7 -5
- package/dist/cli/{feedback-CN3HJFVF.mjs → feedback-G6GU37FD.mjs} +6 -5
- package/dist/cli/{feedback-NDV6TPHG.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-QAD6E3HW.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-KVC5QJ74.js → legacy-noops-5LM3D724.js} +8 -7
- package/dist/cli/{legacy-noops-TPTKNBI2.mjs → legacy-noops-LJJYG6YA.mjs} +5 -4
- package/dist/cli/{monitors-SV57JFLO.mjs → monitors-72QV4ALO.mjs} +19 -6
- package/dist/cli/{monitors-KCROV6PJ.js → monitors-UX3H5DC2.js} +103 -90
- package/dist/cli/{org-KX6QIR7A.mjs → org-6RRRKOCP.mjs} +9 -6
- package/dist/cli/{org-NJYX5743.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-IQQ57L7Z.mjs → play-AHASKRLA.mjs} +512 -1508
- package/dist/cli/{play-32L7EQN4.js → play-EUIUVLUH.js} +1090 -2086
- package/dist/cli/{providers-4WEC2EQN.mjs → providers-GWGE3WY3.mjs} +7 -5
- package/dist/cli/{providers-ZQV6QLVQ.js → providers-V5WU4VXJ.js} +10 -8
- package/dist/cli/{quickstart-RQ76RIUE.mjs → quickstart-OXKQ5ZST.mjs} +5 -4
- package/dist/cli/{quickstart-HKUSFADF.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-ZRAVFBZC.mjs → search-ZMEBVJZB.mjs} +8 -6
- package/dist/cli/{secrets-J3G5Y43U.js → secrets-ACND5N6A.js} +16 -14
- package/dist/cli/{secrets-CMJOVNVH.mjs → secrets-XRCJFF3L.mjs} +7 -5
- package/dist/cli/{sessions-MDQYY5CB.mjs → sessions-RTK3CEW6.mjs} +5 -4
- package/dist/cli/{sessions-WY7VN4AE.js → sessions-ZGRJPCFF.js} +6 -5
- package/dist/cli/{settings-HTNTFKCE.js → settings-PD5KWQQZ.js} +80 -77
- package/dist/cli/{settings-4RWZPCT5.mjs → settings-XDRBPRDE.mjs} +14 -11
- package/dist/cli/{setup-P3GYYZWG.mjs → setup-3HPYAOCC.mjs} +12 -10
- package/dist/cli/{setup-QGCAP62X.js → setup-E2Q6PXHC.js} +53 -51
- package/dist/cli/{skills-7NAE4ICL.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-GODLRKNB.mjs → update-ZWJTADIW.mjs} +9 -8
- package/dist/cli/{workflow-4BXOUVEO.mjs → workflow-23NMPAJ7.mjs} +10 -8
- package/dist/cli/{workflow-AO3A6LXN.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.ts → compiler-manifest-Dcyd3-Zd.d.mts} +43 -1
- package/dist/{compiler-manifest-CWz_sNOQ.d.mts → 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-IACERYQH.js +0 -40
- package/dist/cli/chunk-PQUUWFXY.js +0 -95
- package/dist/cli/chunk-YBWAG72P.mjs +0 -95
- package/dist/cli/chunk-YQDUODZW.js +0 -1710
- package/dist/cli/git-JVI36ZFV.js +0 -24
- package/dist/cli/search-75X5LTDE.js +0 -30
- package/dist/cli/skills-BKJ53JOQ.js +0 -30
- package/dist/cli/tools-COWMIEJ6.mjs +0 -45
- package/dist/cli/tools-TASOCE7I.js +0 -45
- package/dist/cli/update-SJIKVME6.js +0 -32
|
@@ -17,7 +17,7 @@ import { RUNTIME_RUNNER_TERMINAL_PROGRESS_MAX_EVENTS } from '../runtime-contract
|
|
|
17
17
|
* Progress is best-effort observability: the authoritative terminal result still
|
|
18
18
|
* flows through the runner's stdout `result` event and the gateway's receipt
|
|
19
19
|
* terminal. A push failure must therefore never fail the play — it is logged and
|
|
20
|
-
*
|
|
20
|
+
* retained for the next cadence or the terminal handoff.
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
export const RUNNER_PROGRESS_PUSH_BATCH_MS = 1_000;
|
|
@@ -70,6 +70,16 @@ export interface RunnerProgressPushOptions {
|
|
|
70
70
|
stopTimeoutMs?: number;
|
|
71
71
|
}
|
|
72
72
|
|
|
73
|
+
class RunnerProgressHttpError extends Error {
|
|
74
|
+
readonly retryable: boolean;
|
|
75
|
+
|
|
76
|
+
constructor(status: number, body: string) {
|
|
77
|
+
super(`runner_progress_events failed (${status}): ${body}`);
|
|
78
|
+
this.retryable =
|
|
79
|
+
status === 408 || status === 429 || (status >= 500 && status <= 599);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
73
83
|
async function defaultSendBatch(input: {
|
|
74
84
|
gatewayBaseUrl: string;
|
|
75
85
|
executorToken: string;
|
|
@@ -98,9 +108,7 @@ async function defaultSendBatch(input: {
|
|
|
98
108
|
});
|
|
99
109
|
if (!response.ok) {
|
|
100
110
|
const body = await response.text().catch(() => '');
|
|
101
|
-
throw new
|
|
102
|
-
`runner_progress_events failed (${response.status}): ${body}`,
|
|
103
|
-
);
|
|
111
|
+
throw new RunnerProgressHttpError(response.status, body);
|
|
104
112
|
}
|
|
105
113
|
await response.text().catch(() => '');
|
|
106
114
|
}
|
|
@@ -142,7 +150,7 @@ export function createRunnerProgressPusher(
|
|
|
142
150
|
let omittedEvents = 0;
|
|
143
151
|
let stopped = false;
|
|
144
152
|
let abandoned = false;
|
|
145
|
-
let
|
|
153
|
+
let deliveryRefused = false;
|
|
146
154
|
let controller: AbortController | null = null;
|
|
147
155
|
let inFlight: Promise<void> | null = null;
|
|
148
156
|
|
|
@@ -151,7 +159,7 @@ export function createRunnerProgressPusher(
|
|
|
151
159
|
};
|
|
152
160
|
const enforceBudget = () => {
|
|
153
161
|
let dropped = 0;
|
|
154
|
-
// Never evict
|
|
162
|
+
// Never evict an active or failed request: its ambiguous outcome must remain owned.
|
|
155
163
|
// Evict only a prefix, preserving absolute log offsets for the existing
|
|
156
164
|
// durable ingestion gap marker.
|
|
157
165
|
while (
|
|
@@ -159,7 +167,7 @@ export function createRunnerProgressPusher(
|
|
|
159
167
|
active.length + failed.length + pending.length >
|
|
160
168
|
RUNNER_PROGRESS_MAX_RETAINED_EVENTS
|
|
161
169
|
) {
|
|
162
|
-
const entry =
|
|
170
|
+
const entry = pending.shift();
|
|
163
171
|
if (!entry) break;
|
|
164
172
|
retainedBytes -= entry.bytes;
|
|
165
173
|
dropped++;
|
|
@@ -174,9 +182,14 @@ export function createRunnerProgressPusher(
|
|
|
174
182
|
}
|
|
175
183
|
};
|
|
176
184
|
|
|
177
|
-
const flush = (): Promise<void> => {
|
|
185
|
+
const flush = (retryFailed = false): Promise<void> => {
|
|
178
186
|
if (inFlight) return inFlight;
|
|
179
|
-
if (
|
|
187
|
+
if (
|
|
188
|
+
abandoned ||
|
|
189
|
+
deliveryRefused ||
|
|
190
|
+
(failed.length > 0 && !retryFailed) ||
|
|
191
|
+
(!failed.length && !pending.length)
|
|
192
|
+
)
|
|
180
193
|
return Promise.resolve();
|
|
181
194
|
let bytes = 0;
|
|
182
195
|
let count = 0;
|
|
@@ -193,7 +206,9 @@ export function createRunnerProgressPusher(
|
|
|
193
206
|
bytes += next.bytes;
|
|
194
207
|
count++;
|
|
195
208
|
}
|
|
196
|
-
|
|
209
|
+
// A lost acknowledgement must replay the same batch before later offsets.
|
|
210
|
+
// Only the existing cadence retries failures, never enqueue or this pump.
|
|
211
|
+
active = failed.length ? failed.splice(0) : pending.splice(0, count);
|
|
197
212
|
const batch = active;
|
|
198
213
|
const requestController = new AbortController();
|
|
199
214
|
controller = requestController;
|
|
@@ -222,7 +237,8 @@ export function createRunnerProgressPusher(
|
|
|
222
237
|
} catch (error) {
|
|
223
238
|
if (!abandoned) {
|
|
224
239
|
failed = batch;
|
|
225
|
-
|
|
240
|
+
deliveryRefused =
|
|
241
|
+
error instanceof RunnerProgressHttpError && !error.retryable;
|
|
226
242
|
warn('batch_failed', {
|
|
227
243
|
runId: options.runId,
|
|
228
244
|
count: batch.length,
|
|
@@ -235,13 +251,14 @@ export function createRunnerProgressPusher(
|
|
|
235
251
|
controller = null;
|
|
236
252
|
inFlight = null;
|
|
237
253
|
enforceBudget();
|
|
238
|
-
if (!stopped && pending.length >= maxBatch)
|
|
254
|
+
if (!stopped && failed.length === 0 && pending.length >= maxBatch)
|
|
255
|
+
void flush();
|
|
239
256
|
}
|
|
240
257
|
});
|
|
241
258
|
return inFlight;
|
|
242
259
|
};
|
|
243
260
|
const timer = setIntervalImpl(() => {
|
|
244
|
-
void flush();
|
|
261
|
+
void flush(true);
|
|
245
262
|
}, options.batchMs ?? RUNNER_PROGRESS_PUSH_BATCH_MS);
|
|
246
263
|
timer.unref?.();
|
|
247
264
|
|
|
@@ -320,7 +337,11 @@ export function createRunnerProgressPusher(
|
|
|
320
337
|
clearIntervalImpl(timer);
|
|
321
338
|
let timeout: ReturnType<typeof setTimeout> | undefined;
|
|
322
339
|
const drain = async () => {
|
|
323
|
-
while (
|
|
340
|
+
while (
|
|
341
|
+
!abandoned &&
|
|
342
|
+
failed.length === 0 &&
|
|
343
|
+
(pending.length || inFlight)
|
|
344
|
+
)
|
|
324
345
|
await flush();
|
|
325
346
|
};
|
|
326
347
|
const outcome = await Promise.race([
|
package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-sheet-persistence-retry.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { isAppRuntimeApiCapacityError } from '../app-runtime-api';
|
|
|
2
2
|
import { isRuntimeApiCapacityError } from '../runtime-api';
|
|
3
3
|
|
|
4
4
|
const RUNTIME_SHEET_CONTENTION_MAX_ATTEMPTS = 4;
|
|
5
|
+
const RUNTIME_SHEET_CAPACITY_BACKOFF_MAX_MS = 8_000;
|
|
5
6
|
|
|
6
7
|
function persistenceCapacityRetryAfterMs(error: unknown): number | null {
|
|
7
8
|
if (isAppRuntimeApiCapacityError(error) || isRuntimeApiCapacityError(error)) {
|
|
@@ -71,6 +72,7 @@ export async function retryRuntimeSheetPersistence<T>(input: {
|
|
|
71
72
|
const sleep = input.sleep ?? abortableSleep;
|
|
72
73
|
let contentionAttempt = 0;
|
|
73
74
|
let capacityAttempt = 0;
|
|
75
|
+
let capacityBackoffMs = 0;
|
|
74
76
|
|
|
75
77
|
for (;;) {
|
|
76
78
|
throwIfAborted(input.signal);
|
|
@@ -81,7 +83,16 @@ export async function retryRuntimeSheetPersistence<T>(input: {
|
|
|
81
83
|
const retryAfterMs = persistenceCapacityRetryAfterMs(error);
|
|
82
84
|
if (retryAfterMs !== null) {
|
|
83
85
|
capacityAttempt += 1;
|
|
84
|
-
|
|
86
|
+
// Repeated refusals must not resend a frozen large write every second.
|
|
87
|
+
// Cap client-added growth, while always honoring a longer server hint.
|
|
88
|
+
capacityBackoffMs = Math.max(
|
|
89
|
+
retryAfterMs,
|
|
90
|
+
Math.min(
|
|
91
|
+
RUNTIME_SHEET_CAPACITY_BACKOFF_MAX_MS,
|
|
92
|
+
capacityBackoffMs > 0 ? capacityBackoffMs * 2 : retryAfterMs,
|
|
93
|
+
),
|
|
94
|
+
);
|
|
95
|
+
const delayMs = capacityRetryDelayMs(capacityBackoffMs, random);
|
|
85
96
|
input.log(
|
|
86
97
|
`[warn] ${input.description} waiting for persistence capacity attempt=${capacityAttempt} delay_ms=${delayMs}: ${
|
|
87
98
|
error instanceof Error ? error.message : String(error)
|
|
@@ -124,6 +124,10 @@ export function createDaytonaControlClient(
|
|
|
124
124
|
sandboxData.set(sandbox, data);
|
|
125
125
|
return sandbox;
|
|
126
126
|
},
|
|
127
|
+
/** The provider's own record, including fields the SDK class drops. */
|
|
128
|
+
providerData(sandbox: Sandbox): SandboxData | undefined {
|
|
129
|
+
return sandboxData.get(sandbox);
|
|
130
|
+
},
|
|
127
131
|
/**
|
|
128
132
|
* Full captured stdout is a legacy data-plane artifact, not fixed-size
|
|
129
133
|
* metadata. Preserve its SDK file-download timeout independently of this
|
package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-labels.ts
CHANGED
|
@@ -1,2 +1,38 @@
|
|
|
1
1
|
/** Label that identifies sandboxes owned by the play runner fleet. */
|
|
2
2
|
export const DAYTONA_PLAY_RUNNER_LABEL_SOURCE = 'deepline-play-runner';
|
|
3
|
+
|
|
4
|
+
function normalizeDaytonaLabelValue(value: string | null | undefined): string | null {
|
|
5
|
+
const trimmed = value?.trim();
|
|
6
|
+
return trimmed ? trimmed.slice(0, 63) : null;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Confirm a named Daytona sandbox belongs to the exact reserved Play operation
|
|
11
|
+
* before adopting it or recording cleanup against it.
|
|
12
|
+
*/
|
|
13
|
+
export function daytonaSandboxMatchesOperationIdentity(input: {
|
|
14
|
+
sandbox: {
|
|
15
|
+
name?: string | null;
|
|
16
|
+
organizationId?: string | null;
|
|
17
|
+
labels?: Record<string, string | undefined> | null;
|
|
18
|
+
};
|
|
19
|
+
sandboxName: string;
|
|
20
|
+
providerOperationToken: string;
|
|
21
|
+
orgId: string;
|
|
22
|
+
runId?: string | null;
|
|
23
|
+
configuredOrganizationId?: string | null;
|
|
24
|
+
}): boolean {
|
|
25
|
+
const organizationId = input.sandbox.organizationId?.trim();
|
|
26
|
+
const configuredOrganizationId = input.configuredOrganizationId?.trim();
|
|
27
|
+
const runId = normalizeDaytonaLabelValue(input.runId);
|
|
28
|
+
return (
|
|
29
|
+
input.sandbox.name === input.sandboxName &&
|
|
30
|
+
input.sandbox.labels?.source === DAYTONA_PLAY_RUNNER_LABEL_SOURCE &&
|
|
31
|
+
input.sandbox.labels?.operationKey === input.providerOperationToken &&
|
|
32
|
+
input.sandbox.labels?.orgId === normalizeDaytonaLabelValue(input.orgId) &&
|
|
33
|
+
(!runId || input.sandbox.labels?.runId === runId) &&
|
|
34
|
+
Boolean(organizationId) &&
|
|
35
|
+
(!configuredOrganizationId ||
|
|
36
|
+
organizationId === configuredOrganizationId)
|
|
37
|
+
);
|
|
38
|
+
}
|
|
@@ -23,6 +23,10 @@ import {
|
|
|
23
23
|
DAYTONA_CONTROL_TIMEOUT_MS,
|
|
24
24
|
DaytonaControlTimeoutError,
|
|
25
25
|
} from './daytona-control-transport';
|
|
26
|
+
import {
|
|
27
|
+
boundedProviderTextForLog as boundedDaytonaProviderTextForLog,
|
|
28
|
+
redactProviderErrorDetail as redactDaytonaErrorDetail,
|
|
29
|
+
} from '../../provider-text-for-log';
|
|
26
30
|
|
|
27
31
|
// Diagnostics below are log-only. They never select an error, a retry, or a
|
|
28
32
|
// recovery decision, and they stay out of every persisted run document.
|
|
@@ -63,7 +67,6 @@ const DAYTONA_LOGGED_ERROR_NAMES: ReadonlySet<string> = new Set([
|
|
|
63
67
|
'TypeError',
|
|
64
68
|
'Error',
|
|
65
69
|
]);
|
|
66
|
-
const DAYTONA_LOGGED_PROVIDER_TEXT_MAX_CHARS = 160;
|
|
67
70
|
// Deliberately unanchored: `insufficient_credits` and `billingError` must match,
|
|
68
71
|
// and withholding an innocent word costs only one message. `suspended` is a
|
|
69
72
|
// sandbox state and `load balancer` is infrastructure, so they stay readable.
|
|
@@ -98,6 +101,50 @@ export function daytonaSandboxStateForLog(state: unknown): string | null {
|
|
|
98
101
|
: 'unrecognized';
|
|
99
102
|
}
|
|
100
103
|
|
|
104
|
+
const DAYTONA_INFRASTRUCTURE_ID_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* A Daytona id is only useful whole: free-text redaction turns every id into
|
|
108
|
+
* the same value, which cannot be grouped or quoted back to Daytona. Anything
|
|
109
|
+
* that is not plainly an id is dropped rather than logged.
|
|
110
|
+
*/
|
|
111
|
+
function daytonaInfrastructureIdForLog(value: unknown): string | null {
|
|
112
|
+
return typeof value === 'string' &&
|
|
113
|
+
DAYTONA_INFRASTRUCTURE_ID_PATTERN.test(value)
|
|
114
|
+
? value
|
|
115
|
+
: null;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Where a sandbox runs and what Daytona believes it is doing. Grouping failures
|
|
120
|
+
* by host is the only way to tell one bad machine from many unrelated faults,
|
|
121
|
+
* and these facts are gone once the sandbox is deleted.
|
|
122
|
+
*/
|
|
123
|
+
export function daytonaSandboxPlacementForLog(
|
|
124
|
+
data: Partial<SandboxData> | undefined,
|
|
125
|
+
): Record<string, string | boolean | null> {
|
|
126
|
+
// Newer API versions add these. The pinned client has no types for them, but
|
|
127
|
+
// they arrive in the same JSON and are exactly what a host fault would change.
|
|
128
|
+
const newerFields = (data ?? {}) as Record<string, unknown>;
|
|
129
|
+
return {
|
|
130
|
+
target: boundedDaytonaProviderTextForLog(data?.target),
|
|
131
|
+
runnerId: daytonaInfrastructureIdForLog(data?.runnerId),
|
|
132
|
+
desiredState: daytonaSandboxStateForLog(data?.desiredState),
|
|
133
|
+
backupState: boundedDaytonaProviderTextForLog(data?.backupState),
|
|
134
|
+
backupCreatedAt: boundedDaytonaProviderTextForLog(data?.backupCreatedAt),
|
|
135
|
+
errorReason: boundedDaytonaProviderTextForLog(data?.errorReason),
|
|
136
|
+
recoverable: data?.recoverable ?? null,
|
|
137
|
+
lastActivityAt: boundedDaytonaProviderTextForLog(data?.lastActivityAt),
|
|
138
|
+
updatedAt: boundedDaytonaProviderTextForLog(data?.updatedAt),
|
|
139
|
+
daemonVersion: boundedDaytonaProviderTextForLog(newerFields.daemonVersion),
|
|
140
|
+
sandboxClass: boundedDaytonaProviderTextForLog(newerFields.sandboxClass),
|
|
141
|
+
kvm: typeof newerFields.kvm === 'boolean' ? newerFields.kvm : null,
|
|
142
|
+
warmPoolId: daytonaInfrastructureIdForLog(newerFields.warmPoolId),
|
|
143
|
+
spot: typeof newerFields.spot === 'boolean' ? newerFields.spot : null,
|
|
144
|
+
spotEvictedAt: boundedDaytonaProviderTextForLog(newerFields.spotEvictedAt),
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
|
|
101
148
|
/** A known error class name, or `other`; never a provider-authored string. */
|
|
102
149
|
export function daytonaErrorClassForLog(error: unknown): string {
|
|
103
150
|
const name = error instanceof Error ? error.name : null;
|
|
@@ -130,69 +177,7 @@ export function daytonaErrorCodeForLog(error: unknown): string | null {
|
|
|
130
177
|
: null;
|
|
131
178
|
}
|
|
132
179
|
|
|
133
|
-
|
|
134
|
-
* Credential redaction for a Daytona control-plane error message. Shared by
|
|
135
|
-
* the backend's lookup-failure description and the provider text below.
|
|
136
|
-
*/
|
|
137
|
-
export function redactDaytonaErrorDetail(value: string): string {
|
|
138
|
-
return value
|
|
139
|
-
.replace(
|
|
140
|
-
/authorization\s*[=:]\s*bearer\s+[^\s,;]+/gi,
|
|
141
|
-
'Authorization=Bearer [redacted]',
|
|
142
|
-
)
|
|
143
|
-
.replace(
|
|
144
|
-
/(authorization\s*[=:]\s*)(?!bearer\s+\[redacted\])[^\s,;]+/gi,
|
|
145
|
-
'$1[redacted]',
|
|
146
|
-
)
|
|
147
|
-
.replace(/(bearer\s+)[^\s,;]+/gi, '$1[redacted]')
|
|
148
|
-
.replace(/((?:api[_-]?key|token)\s*[=:]\s*)[^\s,;]+/gi, '$1[redacted]')
|
|
149
|
-
.replace(/\s+/g, ' ')
|
|
150
|
-
.trim()
|
|
151
|
-
.slice(0, 1_000);
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
/**
|
|
155
|
-
* Provider free text (for example a sandbox `errorReason`) for logs. This
|
|
156
|
-
* field is written by the provider, so it is redacted more strictly than the
|
|
157
|
-
* shared function alone: URL userinfo, any authorization scheme, password,
|
|
158
|
-
* secret, token, signature, credential and key pairs in query, header or JSON
|
|
159
|
-
* form, email addresses, and opaque identifiers such as organization ids. It
|
|
160
|
-
* is then cut to one short fixed bound so an upstream response is never
|
|
161
|
-
* copied wholesale.
|
|
162
|
-
*/
|
|
163
|
-
export function boundedDaytonaProviderTextForLog(
|
|
164
|
-
value: unknown,
|
|
165
|
-
): string | null {
|
|
166
|
-
if (typeof value !== 'string') return null;
|
|
167
|
-
const strict = value
|
|
168
|
-
.replace(/(\b[a-z][a-z0-9+.-]*:\/\/)[^\s/@]+@/gi, '$1[redacted]@')
|
|
169
|
-
.replace(
|
|
170
|
-
/(authorization\s*[=:]\s*["']?)(?:[a-z]+\s+)?[^\s,;"']+/gi,
|
|
171
|
-
'$1[redacted]',
|
|
172
|
-
)
|
|
173
|
-
.replace(/\b(basic|bearer)\s+[A-Za-z0-9+/=._~-]{8,}/gi, '$1 [redacted]')
|
|
174
|
-
.replace(
|
|
175
|
-
/(["']?[\w.-]*(?:password|passwd|secret|token|signature|credential|api[_-]?key|access[_-]?key)[\w.-]*["']?\s*[=:]\s*)(?:"[^"]*"|'[^']*'|[^\s&,;"'}\]]+)/gi,
|
|
176
|
-
'$1[redacted]',
|
|
177
|
-
)
|
|
178
|
-
.replace(
|
|
179
|
-
/[A-Za-z0-9._%+-]+@[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)+/g,
|
|
180
|
-
'[redacted-email]',
|
|
181
|
-
)
|
|
182
|
-
.replace(
|
|
183
|
-
/\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi,
|
|
184
|
-
'[redacted-id]',
|
|
185
|
-
)
|
|
186
|
-
.replace(
|
|
187
|
-
/\b(?=[A-Za-z0-9_-]*\d)(?=[A-Za-z0-9_-]*[A-Za-z])[A-Za-z0-9_-]{24,}\b/g,
|
|
188
|
-
'[redacted-id]',
|
|
189
|
-
);
|
|
190
|
-
const bounded = redactDaytonaErrorDetail(strict).slice(
|
|
191
|
-
0,
|
|
192
|
-
DAYTONA_LOGGED_PROVIDER_TEXT_MAX_CHARS,
|
|
193
|
-
);
|
|
194
|
-
return bounded || null;
|
|
195
|
-
}
|
|
180
|
+
export { boundedDaytonaProviderTextForLog, redactDaytonaErrorDetail };
|
|
196
181
|
|
|
197
182
|
/**
|
|
198
183
|
* Provider text for a run's error, which customers read. Same bounds as the
|
|
@@ -325,7 +310,9 @@ function providerError(error: unknown): unknown {
|
|
|
325
310
|
? data
|
|
326
311
|
: typeof data?.message === 'string'
|
|
327
312
|
? data.message
|
|
328
|
-
:
|
|
313
|
+
: status === undefined
|
|
314
|
+
? error.message
|
|
315
|
+
: '';
|
|
329
316
|
// Not axios's "Request failed with status code" wording: retry classification
|
|
330
317
|
// matches that text, and this change only explains the failure.
|
|
331
318
|
const message =
|
|
@@ -477,15 +464,73 @@ export function createDaytonaLaunchClient(
|
|
|
477
464
|
},
|
|
478
465
|
});
|
|
479
466
|
const api = new SandboxApi(scopedConfiguration);
|
|
467
|
+
const transport = createTransport(signal);
|
|
480
468
|
const sandbox = new Sandbox(
|
|
481
469
|
data,
|
|
482
470
|
new Configuration({
|
|
483
471
|
basePath: configuration.basePath,
|
|
484
472
|
baseOptions: { ...configuration.baseOptions },
|
|
485
473
|
}),
|
|
486
|
-
|
|
474
|
+
transport,
|
|
487
475
|
api,
|
|
488
476
|
);
|
|
477
|
+
const sdkUploadFile = sandbox.fs.uploadFile.bind(sandbox.fs);
|
|
478
|
+
sandbox.fs.uploadFile = async (source, destination, timeout = 30 * 60) => {
|
|
479
|
+
// The SDK's serverless upload path uses fetch but does not inspect
|
|
480
|
+
// Response.ok. Keep Buffer uploads on the scoped Axios transport so
|
|
481
|
+
// provider HTTP failures reach the same Daytona error classifier as
|
|
482
|
+
// create, read and delete calls. File-path uploads retain the SDK's
|
|
483
|
+
// streaming implementation.
|
|
484
|
+
if (typeof source === 'string') {
|
|
485
|
+
await sdkUploadFile(source, destination, timeout);
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
const form = new FormData();
|
|
490
|
+
form.append('files[0].path', destination);
|
|
491
|
+
form.append(
|
|
492
|
+
'files[0].file',
|
|
493
|
+
new Blob([source.slice()], { type: 'application/octet-stream' }),
|
|
494
|
+
destination,
|
|
495
|
+
);
|
|
496
|
+
const toolboxBase = data.toolboxProxyUrl.endsWith('/')
|
|
497
|
+
? data.toolboxProxyUrl
|
|
498
|
+
: `${data.toolboxProxyUrl}/`;
|
|
499
|
+
const response = await transport.post<unknown>(
|
|
500
|
+
`${toolboxBase}${encodeURIComponent(data.id)}/files/bulk-upload`,
|
|
501
|
+
form,
|
|
502
|
+
{
|
|
503
|
+
headers: configuration.baseOptions.headers,
|
|
504
|
+
maxRedirects: 0,
|
|
505
|
+
timeout: timeout * 1_000,
|
|
506
|
+
signal: signal(),
|
|
507
|
+
},
|
|
508
|
+
);
|
|
509
|
+
const responseData = response.data;
|
|
510
|
+
const errors =
|
|
511
|
+
responseData &&
|
|
512
|
+
typeof responseData === 'object' &&
|
|
513
|
+
'errors' in responseData &&
|
|
514
|
+
Array.isArray(responseData.errors)
|
|
515
|
+
? responseData.errors.filter(
|
|
516
|
+
(value): value is string => typeof value === 'string',
|
|
517
|
+
)
|
|
518
|
+
: [];
|
|
519
|
+
if (errors.length > 0) {
|
|
520
|
+
const details = errors
|
|
521
|
+
.map(boundedDaytonaProviderTextForLog)
|
|
522
|
+
.filter((value): value is string => value !== null)
|
|
523
|
+
.join('; ');
|
|
524
|
+
throw new DaytonaError(
|
|
525
|
+
details
|
|
526
|
+
? `Daytona upload failed: ${details}`
|
|
527
|
+
: 'Daytona reported a partial upload failure.',
|
|
528
|
+
response.status,
|
|
529
|
+
undefined,
|
|
530
|
+
'DAYTONA_UPLOAD_FAILED',
|
|
531
|
+
);
|
|
532
|
+
}
|
|
533
|
+
};
|
|
489
534
|
dataBySandbox.set(sandbox, data);
|
|
490
535
|
return sandbox;
|
|
491
536
|
};
|
|
@@ -541,6 +586,7 @@ export function createDaytonaLaunchClient(
|
|
|
541
586
|
onCreateStage?.('create:response', {
|
|
542
587
|
createRequestMs: performance.now() - requestStartedAt,
|
|
543
588
|
initialState: daytonaSandboxStateForLog(data.state),
|
|
589
|
+
...daytonaSandboxPlacementForLog(data),
|
|
544
590
|
});
|
|
545
591
|
} catch {
|
|
546
592
|
// An advisory observer cannot select provider recovery or skip readiness.
|
|
@@ -605,6 +651,9 @@ export function createDaytonaLaunchClient(
|
|
|
605
651
|
phase.dispose();
|
|
606
652
|
}
|
|
607
653
|
},
|
|
654
|
+
placementForLog(sandbox: Sandbox) {
|
|
655
|
+
return daytonaSandboxPlacementForLog(dataBySandbox.get(sandbox));
|
|
656
|
+
},
|
|
608
657
|
async delete(
|
|
609
658
|
sandbox: Pick<Sandbox, 'id'>,
|
|
610
659
|
timeoutSeconds = 30,
|
|
@@ -626,11 +675,19 @@ export function createDaytonaLaunchClient(
|
|
|
626
675
|
phase.signal.throwIfAborted();
|
|
627
676
|
if (!absenceOnlyConflict) {
|
|
628
677
|
try {
|
|
629
|
-
await api.deleteSandbox(sandbox.id
|
|
630
|
-
timeout: timeoutSeconds * 1_000,
|
|
631
|
-
});
|
|
678
|
+
await api.deleteSandbox(sandbox.id);
|
|
632
679
|
return;
|
|
633
680
|
} catch (caught) {
|
|
681
|
+
// The phase signal is the authoritative local deadline. Axios
|
|
682
|
+
// reports its cancellation as ERR_CANCELED, which loses the
|
|
683
|
+
// distinction between an ambiguous local timeout and a provider
|
|
684
|
+
// rejection unless we preserve the signal's typed reason here.
|
|
685
|
+
if (
|
|
686
|
+
phase.signal.aborted &&
|
|
687
|
+
phase.signal.reason instanceof DaytonaControlTimeoutError
|
|
688
|
+
) {
|
|
689
|
+
throw phase.signal.reason;
|
|
690
|
+
}
|
|
634
691
|
const error = providerError(caught);
|
|
635
692
|
// A prior accepted delete can already have removed this exact ID.
|
|
636
693
|
if (retry && error instanceof DaytonaNotFoundError) return;
|
|
@@ -660,7 +717,10 @@ export function createDaytonaLaunchClient(
|
|
|
660
717
|
// backoff before observing absence, so a closed resource need not
|
|
661
718
|
// be re-reported just to learn that deletion succeeded.
|
|
662
719
|
await delay(backoffMs, undefined, { signal: phase.signal });
|
|
663
|
-
backoffMs = Math.min(
|
|
720
|
+
backoffMs = Math.min(
|
|
721
|
+
backoffMs * 2,
|
|
722
|
+
DAYTONA_RETIREMENT_BACKOFF_MAX_MS,
|
|
723
|
+
);
|
|
664
724
|
// Reconcile only the acquired ID. Never resolve a name, start it, or
|
|
665
725
|
// infer absence from a failed/ambiguous provider read.
|
|
666
726
|
try {
|
|
@@ -693,6 +753,12 @@ export function createDaytonaLaunchClient(
|
|
|
693
753
|
// Absence never arrived, so the provider's conflict is the real cause.
|
|
694
754
|
if (absenceOnlyConflict && phase.signal.aborted)
|
|
695
755
|
throw absenceOnlyConflict;
|
|
756
|
+
if (
|
|
757
|
+
phase.signal.aborted &&
|
|
758
|
+
phase.signal.reason instanceof DaytonaControlTimeoutError
|
|
759
|
+
) {
|
|
760
|
+
throw phase.signal.reason;
|
|
761
|
+
}
|
|
696
762
|
throw providerError(error);
|
|
697
763
|
} finally {
|
|
698
764
|
phase.dispose();
|