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
|
@@ -85,6 +85,11 @@ const RUNTIME_TEST_POLICY_WORK_BUDGET_KEYS = new Set([
|
|
|
85
85
|
|
|
86
86
|
const MAX_RUNTIME_TEST_POLICY_MS = 10 * 60_000;
|
|
87
87
|
const MAX_RUNTIME_TEST_POLICY_YIELD_LIMIT = 1_000_000;
|
|
88
|
+
/**
|
|
89
|
+
* A heartbeat is also the runner's cancellation channel, so silence blinds it
|
|
90
|
+
* too. A drill may hold that, but only briefly.
|
|
91
|
+
*/
|
|
92
|
+
export const MAX_RUNNER_HEARTBEAT_SILENCE_MS = 10 * 60_000;
|
|
88
93
|
|
|
89
94
|
function testRuntimeSeamsEnabled(): boolean {
|
|
90
95
|
return process.env.DEEPLINE_TEST_RUNTIME_SEAMS === '1';
|
|
@@ -143,6 +148,14 @@ function parseRuntimeTestFaultHeader(
|
|
|
143
148
|
error: `Runtime test fault "${name}" count must be 1.`,
|
|
144
149
|
};
|
|
145
150
|
}
|
|
151
|
+
if (
|
|
152
|
+
name === 'runner_heartbeat_silence_ms' &&
|
|
153
|
+
total > MAX_RUNNER_HEARTBEAT_SILENCE_MS
|
|
154
|
+
) {
|
|
155
|
+
return {
|
|
156
|
+
error: `Runtime test fault "${name}" must be at most ${MAX_RUNNER_HEARTBEAT_SILENCE_MS}ms.`,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
146
159
|
faults.set(name, total);
|
|
147
160
|
}
|
|
148
161
|
return faults;
|
|
@@ -189,6 +202,33 @@ export function shouldInjectModalSandboxCreateResourceExhausted(input: {
|
|
|
189
202
|
);
|
|
190
203
|
}
|
|
191
204
|
|
|
205
|
+
/**
|
|
206
|
+
* How long a detached runner's watchdog withholds heartbeats, or 0 for never.
|
|
207
|
+
*
|
|
208
|
+
* Like the Modal fault, the header is admitted only through
|
|
209
|
+
* `parseRuntimeTestFaultCounts` and this is the second production guard: a
|
|
210
|
+
* persisted historical header can never silence a live runner. It reads the
|
|
211
|
+
* Preview marker as well because the Fly worker image sets NODE_ENV=production
|
|
212
|
+
* everywhere, so `getRuntimeEnv()` is `prod` on a Preview worker too. Only the
|
|
213
|
+
* Preview worker config sets that marker. Each attempt is silenced, because a
|
|
214
|
+
* failed sandbox start can make the attempt that reaches customer code a later
|
|
215
|
+
* one.
|
|
216
|
+
*/
|
|
217
|
+
export function resolveRunnerHeartbeatSilenceMs(
|
|
218
|
+
runtimeTestFaultHeader: string | null | undefined,
|
|
219
|
+
): number {
|
|
220
|
+
if (
|
|
221
|
+
getRuntimeEnv() === 'prod' &&
|
|
222
|
+
process.env.DEEPLINE_RUNTIME_ENVIRONMENT !== 'preview'
|
|
223
|
+
) {
|
|
224
|
+
return 0;
|
|
225
|
+
}
|
|
226
|
+
return recognizedRuntimeTestFaultCount(
|
|
227
|
+
runtimeTestFaultHeader,
|
|
228
|
+
'runner_heartbeat_silence_ms',
|
|
229
|
+
);
|
|
230
|
+
}
|
|
231
|
+
|
|
192
232
|
export function runtimeSheetPageTailRowsContainTarget(
|
|
193
233
|
rows: readonly unknown[],
|
|
194
234
|
): boolean {
|
|
@@ -30,6 +30,12 @@ export {
|
|
|
30
30
|
type NativeBatchToolCallJob,
|
|
31
31
|
type NativeBatchToolCallMember,
|
|
32
32
|
} from './native-batch';
|
|
33
|
+
export {
|
|
34
|
+
createMappedToolCallJob,
|
|
35
|
+
type MappedToolCallDependencies,
|
|
36
|
+
type MappedToolCallJob,
|
|
37
|
+
type MappedToolCallMember,
|
|
38
|
+
} from './mapped-calls';
|
|
33
39
|
export {
|
|
34
40
|
createAlwaysFreshToolCallAdapter,
|
|
35
41
|
type AlwaysFreshToolCall,
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import { dispatchBoundedSettled } from '../bounded-dispatch';
|
|
2
|
+
import { toolExecutionMetadataForOutcome } from '../tool-execution-outcome';
|
|
3
|
+
import {
|
|
4
|
+
cloneToolExecuteResultWithExecution,
|
|
5
|
+
type ToolExecuteResult,
|
|
6
|
+
} from '../tool-result';
|
|
7
|
+
import type { ToolResultReceipts } from './contract';
|
|
8
|
+
import type {
|
|
9
|
+
ToolCallReceiptCohortJob,
|
|
10
|
+
ToolCallReceiptCohortMember,
|
|
11
|
+
} from './receipt-cohort';
|
|
12
|
+
|
|
13
|
+
export type MappedToolCallMember<Request> = ToolCallReceiptCohortMember & {
|
|
14
|
+
cacheKey: string;
|
|
15
|
+
receiptKey: string;
|
|
16
|
+
/** Runtime transport and row fields belong to their Adapters. */
|
|
17
|
+
request: Request;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type MappedToolCallJob<Request> = {
|
|
21
|
+
call(input: {
|
|
22
|
+
owner: { runId: string; attempt: number };
|
|
23
|
+
members: readonly MappedToolCallMember<Request>[];
|
|
24
|
+
}): Promise<{ successfulMemberIds: string[] }>;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
export type MappedToolCallDependencies<Request> = {
|
|
28
|
+
receiptCohort: ToolCallReceiptCohortJob;
|
|
29
|
+
admission: {
|
|
30
|
+
parallelism(): Promise<number>;
|
|
31
|
+
assertDispatchAllowed(): void;
|
|
32
|
+
};
|
|
33
|
+
execution: {
|
|
34
|
+
call(input: {
|
|
35
|
+
member: MappedToolCallMember<Request>;
|
|
36
|
+
receipts: ToolResultReceipts;
|
|
37
|
+
retainToolSlot(release: () => void): void;
|
|
38
|
+
}): Promise<ToolExecuteResult>;
|
|
39
|
+
};
|
|
40
|
+
delivery: {
|
|
41
|
+
complete(input: {
|
|
42
|
+
member: MappedToolCallMember<Request>;
|
|
43
|
+
result: ToolExecuteResult;
|
|
44
|
+
source: 'cache' | 'owner';
|
|
45
|
+
}): Promise<void>;
|
|
46
|
+
fail(input: {
|
|
47
|
+
member: MappedToolCallMember<Request>;
|
|
48
|
+
error: unknown;
|
|
49
|
+
}): Promise<void>;
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Deliver receipt-backed scalar map calls independently. The Job owns result
|
|
55
|
+
* presentation and transient member/slot release; its Projection retains IDs
|
|
56
|
+
* only. Native batches and always-fresh calls have separate Jobs.
|
|
57
|
+
*/
|
|
58
|
+
export function createMappedToolCallJob<Request>(
|
|
59
|
+
dependencies: MappedToolCallDependencies<Request>,
|
|
60
|
+
): MappedToolCallJob<Request> {
|
|
61
|
+
return {
|
|
62
|
+
async call({ owner, members }) {
|
|
63
|
+
if (members.length === 0) return { successfulMemberIds: [] };
|
|
64
|
+
const cohort = await dependencies.receiptCohort.acquire({
|
|
65
|
+
owner,
|
|
66
|
+
members: members.map(
|
|
67
|
+
({
|
|
68
|
+
request: _request,
|
|
69
|
+
cacheKey: _cacheKey,
|
|
70
|
+
receiptKey: _receiptKey,
|
|
71
|
+
...receipt
|
|
72
|
+
}) => receipt,
|
|
73
|
+
),
|
|
74
|
+
});
|
|
75
|
+
const successfulMemberIds: string[] = [];
|
|
76
|
+
const cached: Promise<void>[] = [];
|
|
77
|
+
const owned: Array<{
|
|
78
|
+
member: MappedToolCallMember<Request>;
|
|
79
|
+
receipts: ToolResultReceipts;
|
|
80
|
+
}> = [];
|
|
81
|
+
const deliver = async (
|
|
82
|
+
member: MappedToolCallMember<Request>,
|
|
83
|
+
result: ToolExecuteResult,
|
|
84
|
+
source: 'cache' | 'owner',
|
|
85
|
+
) => {
|
|
86
|
+
const presented = cloneToolExecuteResultWithExecution(result, {
|
|
87
|
+
...toolExecutionMetadataForOutcome({
|
|
88
|
+
kind: source === 'owner' ? 'live' : source,
|
|
89
|
+
cacheKey: member.cacheKey,
|
|
90
|
+
receiptKey: member.receiptKey,
|
|
91
|
+
...(source === 'owner'
|
|
92
|
+
? {}
|
|
93
|
+
: { attachedToReceiptKey: member.receiptKey }),
|
|
94
|
+
}),
|
|
95
|
+
resultReceiptKey: member.resultReceiptKey,
|
|
96
|
+
});
|
|
97
|
+
await dependencies.delivery.complete({
|
|
98
|
+
member,
|
|
99
|
+
result: presented,
|
|
100
|
+
source,
|
|
101
|
+
});
|
|
102
|
+
successfulMemberIds.push(member.memberId);
|
|
103
|
+
};
|
|
104
|
+
|
|
105
|
+
// Presence is separate from value: JavaScript permits throw undefined.
|
|
106
|
+
let failure: { error: unknown } | undefined;
|
|
107
|
+
try {
|
|
108
|
+
for (const member of members) {
|
|
109
|
+
const state = cohort.member(member.memberId);
|
|
110
|
+
if (state.kind === 'completed') {
|
|
111
|
+
const delivery = deliver(
|
|
112
|
+
member,
|
|
113
|
+
state.result,
|
|
114
|
+
state.source,
|
|
115
|
+
).finally(() => {
|
|
116
|
+
cohort.releaseDeliveredMember(member.memberId);
|
|
117
|
+
});
|
|
118
|
+
// Observe immediately; parallelism/setup can await or fail before
|
|
119
|
+
// the final join. Keep the original rejecting promise for custody.
|
|
120
|
+
void delivery.catch(() => undefined);
|
|
121
|
+
cached.push(delivery);
|
|
122
|
+
} else if (state.kind === 'owned') {
|
|
123
|
+
owned.push({ member, receipts: state.receipts });
|
|
124
|
+
} else {
|
|
125
|
+
throw new Error(
|
|
126
|
+
'A completed-result cache cannot own a pending invocation.',
|
|
127
|
+
);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
const width = await dependencies.admission.parallelism();
|
|
131
|
+
const dispatched = await dispatchBoundedSettled(
|
|
132
|
+
owned,
|
|
133
|
+
width,
|
|
134
|
+
async ({ member, receipts }) => {
|
|
135
|
+
let releaseToolSlot: () => void = () => undefined;
|
|
136
|
+
try {
|
|
137
|
+
dependencies.admission.assertDispatchAllowed();
|
|
138
|
+
const result = await dependencies.execution.call({
|
|
139
|
+
member,
|
|
140
|
+
receipts,
|
|
141
|
+
retainToolSlot: (release) => {
|
|
142
|
+
releaseToolSlot = release;
|
|
143
|
+
},
|
|
144
|
+
});
|
|
145
|
+
await deliver(member, result, 'owner');
|
|
146
|
+
} catch (error) {
|
|
147
|
+
await dependencies.delivery.fail({ member, error });
|
|
148
|
+
} finally {
|
|
149
|
+
try {
|
|
150
|
+
cohort.releaseDeliveredMember(member.memberId);
|
|
151
|
+
} finally {
|
|
152
|
+
releaseToolSlot();
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
},
|
|
156
|
+
);
|
|
157
|
+
const rejected = dispatched.find((entry) => 'error' in entry);
|
|
158
|
+
if (rejected) failure = { error: rejected.error };
|
|
159
|
+
} catch (error) {
|
|
160
|
+
failure = { error };
|
|
161
|
+
}
|
|
162
|
+
// All exits join deliveries already started, including setup failures.
|
|
163
|
+
for (const result of await Promise.allSettled(cached)) {
|
|
164
|
+
if (result.status === 'rejected' && !failure)
|
|
165
|
+
failure = { error: result.reason };
|
|
166
|
+
}
|
|
167
|
+
if (failure) throw failure.error;
|
|
168
|
+
return { successfulMemberIds };
|
|
169
|
+
},
|
|
170
|
+
};
|
|
171
|
+
}
|
|
@@ -92,6 +92,8 @@ export type ToolCallReceiptCohortMemberState =
|
|
|
92
92
|
|
|
93
93
|
export type ToolCallReceiptCohort = {
|
|
94
94
|
member(memberId: string): ToolCallReceiptCohortMemberState;
|
|
95
|
+
/** Drop this cohort's result reference after its consumer owns delivery. */
|
|
96
|
+
releaseDeliveredMember(memberId: string): 'released' | 'not_completed';
|
|
95
97
|
complete(
|
|
96
98
|
input: Array<{ memberId: string; result: ToolExecuteResult }>,
|
|
97
99
|
): Promise<Map<string, ToolExecuteResult>>;
|
|
@@ -254,6 +256,7 @@ export function createToolCallReceiptCohortJob(input: {
|
|
|
254
256
|
if (settlement.status === 'stored') {
|
|
255
257
|
for (const entry of matching) {
|
|
256
258
|
owned.delete(entry.member.memberId);
|
|
259
|
+
if (!states.has(entry.member.memberId)) continue;
|
|
257
260
|
states.set(entry.member.memberId, {
|
|
258
261
|
kind: 'completed',
|
|
259
262
|
result: entry.result,
|
|
@@ -396,10 +399,22 @@ export function createToolCallReceiptCohortJob(input: {
|
|
|
396
399
|
const state = states.get(memberId);
|
|
397
400
|
if (!state)
|
|
398
401
|
throw new Error(
|
|
399
|
-
|
|
402
|
+
normalized.has(memberId)
|
|
403
|
+
? `Tool Call Receipt Cohort member ${memberId} was released after delivery.`
|
|
404
|
+
: `Unknown Tool Call Receipt Cohort member ${memberId}.`,
|
|
400
405
|
);
|
|
401
406
|
return state;
|
|
402
407
|
},
|
|
408
|
+
releaseDeliveredMember(memberId) {
|
|
409
|
+
if (!normalized.has(memberId))
|
|
410
|
+
throw new Error(
|
|
411
|
+
`Unknown Tool Call Receipt Cohort member ${memberId}.`,
|
|
412
|
+
);
|
|
413
|
+
const state = states.get(memberId);
|
|
414
|
+
if (state && state.kind !== 'completed') return 'not_completed';
|
|
415
|
+
states.delete(memberId);
|
|
416
|
+
return 'released';
|
|
417
|
+
},
|
|
403
418
|
complete: publish,
|
|
404
419
|
async fail(entries) {
|
|
405
420
|
for (const entry of entries) {
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { RUNNER_GATEWAY_CONNECTION_RETRY_BUDGET_MS } from './runtime-constants';
|
|
1
2
|
import {
|
|
2
3
|
isHardBillingToolHttpError,
|
|
3
4
|
isHtmlErrorBody,
|
|
@@ -73,6 +74,12 @@ export const TOOL_EXECUTE_RUNTIME_SCHEDULER_CAPACITY_MAX_ATTEMPTS = 65;
|
|
|
73
74
|
export const TOOL_EXECUTE_PROVIDER_PACING_WAIT_MAX_ATTEMPTS = 65;
|
|
74
75
|
export const TOOL_EXECUTE_TRANSPORT_MAX_ATTEMPTS = 3;
|
|
75
76
|
export const TOOL_EXECUTE_TRANSPORT_RETRY_DELAY_MS = 1_000;
|
|
77
|
+
// A sandbox lost new connections for about 97 seconds on 2026-10-30, and each
|
|
78
|
+
// attempt spends a 10-second connect timeout, so three attempts cannot cover it.
|
|
79
|
+
// Daytona network cuts then lasted up to 621 seconds, so the window covers the
|
|
80
|
+
// whole cut. Nothing was sent, so waiting is always safe.
|
|
81
|
+
export const TOOL_EXECUTE_CONNECT_RETRY_WINDOW_MS =
|
|
82
|
+
RUNNER_GATEWAY_CONNECTION_RETRY_BUDGET_MS;
|
|
76
83
|
export const TOOL_EXECUTE_RETRY_DELAY_FALLBACK_MS = 1_000;
|
|
77
84
|
export const TOOL_EXECUTE_RETRY_DELAY_MAX_MS = 5_000;
|
|
78
85
|
export const TOOL_EXECUTE_RATE_LIMIT_RETRY_DELAY_MAX_MS = 30_000;
|
|
@@ -416,10 +423,14 @@ function isRuntimeSchedulerCapacityResponse(input: {
|
|
|
416
423
|
bodyText: string;
|
|
417
424
|
}): boolean {
|
|
418
425
|
// This is a scheduler pre-admission outcome. Do not extend this exemption to
|
|
419
|
-
// generic 503s: they can arrive after a non-idempotent provider call.
|
|
426
|
+
// generic 503s: they can arrive after a non-idempotent provider call. The
|
|
427
|
+
// relay's routing failure qualifies only with its explicit no-dispatch proof.
|
|
428
|
+
if (input.status !== 503) return false;
|
|
429
|
+
const body = parseJsonObject(input.bodyText);
|
|
420
430
|
return (
|
|
421
|
-
|
|
422
|
-
|
|
431
|
+
body?.code === 'scheduler_capacity' ||
|
|
432
|
+
(body?.code === 'RUNTIME_SCHEDULER_UNAVAILABLE' &&
|
|
433
|
+
body.provider_request_dispatched === false)
|
|
423
434
|
);
|
|
424
435
|
}
|
|
425
436
|
|
|
@@ -626,6 +637,18 @@ function decideToolExecuteHttpRetry(input: {
|
|
|
626
637
|
};
|
|
627
638
|
}
|
|
628
639
|
|
|
640
|
+
/** The next wait after a connection failed to open, or null once the window closes. */
|
|
641
|
+
export function toolExecuteConnectRetryDelayMs(input: {
|
|
642
|
+
failures: number;
|
|
643
|
+
elapsedMs: number;
|
|
644
|
+
}): number | null {
|
|
645
|
+
if (input.elapsedMs >= TOOL_EXECUTE_CONNECT_RETRY_WINDOW_MS) return null;
|
|
646
|
+
return Math.min(
|
|
647
|
+
TOOL_EXECUTE_RETRY_DELAY_MAX_MS,
|
|
648
|
+
TOOL_EXECUTE_TRANSPORT_RETRY_DELAY_MS * input.failures,
|
|
649
|
+
);
|
|
650
|
+
}
|
|
651
|
+
|
|
629
652
|
export function createToolExecuteHttpFailureAttemptTracker(): ToolExecuteHttpFailureAttemptTracker {
|
|
630
653
|
const attemptsByReason: Record<
|
|
631
654
|
ToolExecuteHttpRetryDecision['reason'],
|
|
@@ -60,6 +60,7 @@ import {
|
|
|
60
60
|
import {
|
|
61
61
|
normalizeTableNamespace,
|
|
62
62
|
sha256Hex,
|
|
63
|
+
stableStringify,
|
|
63
64
|
} from '../plays/row-identity';
|
|
64
65
|
import { listNameFromDeclaredPath } from './tool-result-paths';
|
|
65
66
|
import {
|
|
@@ -2492,8 +2493,9 @@ export function cloneToolExecuteResultWithExecution<TResult>(
|
|
|
2492
2493
|
value: ToolExecuteResult<TResult>,
|
|
2493
2494
|
execution: ToolResultExecutionMetadata,
|
|
2494
2495
|
): ToolExecuteResult<TResult> {
|
|
2495
|
-
|
|
2496
|
-
|
|
2496
|
+
const serialized = serializeToolExecuteResult(value);
|
|
2497
|
+
const cloned = deserializeToolExecuteResult({
|
|
2498
|
+
...serialized,
|
|
2497
2499
|
execution: {
|
|
2498
2500
|
...execution,
|
|
2499
2501
|
...(!execution.resultReceiptKey &&
|
|
@@ -2502,6 +2504,18 @@ export function cloneToolExecuteResultWithExecution<TResult>(
|
|
|
2502
2504
|
: {}),
|
|
2503
2505
|
},
|
|
2504
2506
|
}) as ToolExecuteResult<TResult>;
|
|
2507
|
+
const relayReference = relayPublishedResultReferences.get(value);
|
|
2508
|
+
// The immutable relay body includes execution metadata. A presentation-only
|
|
2509
|
+
// clone may reuse it only if replaying that body preserves the exact stored
|
|
2510
|
+
// projection; another call's receipt identity must retain its own value.
|
|
2511
|
+
if (
|
|
2512
|
+
relayReference &&
|
|
2513
|
+
stableStringify(serialized.execution) ===
|
|
2514
|
+
stableStringify(cloned._metadata.execution)
|
|
2515
|
+
) {
|
|
2516
|
+
relayPublishedResultReferences.set(cloned, relayReference);
|
|
2517
|
+
}
|
|
2518
|
+
return cloned;
|
|
2505
2519
|
}
|
|
2506
2520
|
|
|
2507
2521
|
/**
|
|
@@ -30,6 +30,34 @@ export function transportGatewayOriginForDiagnostic(url: string): string {
|
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
+
/**
|
|
34
|
+
* True only for failures that cannot happen once a socket exists, so no byte of
|
|
35
|
+
* the HTTP request was written. Replaying one needs no idempotency proof. A
|
|
36
|
+
* dual-stack host reports an AggregateError with `syscall` only on each entry,
|
|
37
|
+
* and one entry that lacks the proof leaves the whole failure ambiguous.
|
|
38
|
+
*/
|
|
39
|
+
export function transportFailureProvesRequestNeverSent(
|
|
40
|
+
error: unknown,
|
|
41
|
+
depth = 0,
|
|
42
|
+
): boolean {
|
|
43
|
+
const value = asErrorLike(error);
|
|
44
|
+
// Rate-state wraps the fetch failure twice before the AggregateError entries.
|
|
45
|
+
if (!value || depth > 6) return false;
|
|
46
|
+
if (
|
|
47
|
+
value.code === 'UND_ERR_CONNECT_TIMEOUT' ||
|
|
48
|
+
value.syscall === 'connect' ||
|
|
49
|
+
value.syscall === 'getaddrinfo'
|
|
50
|
+
) {
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
if (Array.isArray(value.errors) && value.errors.length > 0) {
|
|
54
|
+
return value.errors.every((entry) =>
|
|
55
|
+
transportFailureProvesRequestNeverSent(entry, depth + 1),
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
return transportFailureProvesRequestNeverSent(value.cause, depth + 1);
|
|
59
|
+
}
|
|
60
|
+
|
|
33
61
|
/**
|
|
34
62
|
* Make a small, secret-redacted transport diagnostic that can safely cross the
|
|
35
63
|
* runner -> gateway -> durable run-log boundary. Keep stacks in process logs:
|
|
@@ -16,14 +16,64 @@ export const WORK_RECEIPT_KEY_FORMAT = {
|
|
|
16
16
|
/** Reserved scalar admission fact, distinct from customer-authored work output. */
|
|
17
17
|
export const RUNTIME_SHEET_WRITE_INTENT_RECEIPT_KIND =
|
|
18
18
|
'runtime-sheet-write-intent';
|
|
19
|
+
export const RUNTIME_ARRAY_INPUT_BEGIN_RECEIPT_KIND =
|
|
20
|
+
'runtime-array-input-begin';
|
|
21
|
+
export const RUNTIME_ARRAY_INPUT_PAGE_RECEIPT_KIND = 'runtime-array-input-page';
|
|
22
|
+
export const RUNTIME_ARRAY_INPUT_SEAL_RECEIPT_KIND = 'runtime-array-input-seal';
|
|
23
|
+
export const RUNTIME_ARRAY_INPUT_RUN_GUARD_RECEIPT_KIND =
|
|
24
|
+
'runtime-array-input-run-guard';
|
|
25
|
+
|
|
26
|
+
export const INTERNAL_WORK_RECEIPT_KINDS = [
|
|
27
|
+
RUNTIME_SHEET_WRITE_INTENT_RECEIPT_KIND,
|
|
28
|
+
RUNTIME_ARRAY_INPUT_BEGIN_RECEIPT_KIND,
|
|
29
|
+
RUNTIME_ARRAY_INPUT_PAGE_RECEIPT_KIND,
|
|
30
|
+
RUNTIME_ARRAY_INPUT_SEAL_RECEIPT_KIND,
|
|
31
|
+
RUNTIME_ARRAY_INPUT_RUN_GUARD_RECEIPT_KIND,
|
|
32
|
+
] as const;
|
|
33
|
+
|
|
34
|
+
const INTERNAL_WORK_RECEIPT_KEY_PREFIXES = INTERNAL_WORK_RECEIPT_KINDS.map(
|
|
35
|
+
(kind) => encodeURIComponent(`["${kind}",`),
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
/** Internal facts have dedicated fenced writers, never generic cache writers. */
|
|
39
|
+
export function isInternalWorkReceiptKey(key: string): boolean {
|
|
40
|
+
if (!key.startsWith(`${WORK_RECEIPT_KEY_FORMAT.prefix}:`)) return false;
|
|
41
|
+
const parts = key.split(WORK_RECEIPT_KEY_FORMAT.separator);
|
|
42
|
+
if (
|
|
43
|
+
parts.length !== 4 ||
|
|
44
|
+
!INTERNAL_WORK_RECEIPT_KEY_PREFIXES.some((prefix) =>
|
|
45
|
+
parts[3]!.startsWith(prefix),
|
|
46
|
+
)
|
|
47
|
+
) {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const value: unknown = JSON.parse(decodeURIComponent(parts[3]!));
|
|
52
|
+
return (
|
|
53
|
+
Array.isArray(value) &&
|
|
54
|
+
INTERNAL_WORK_RECEIPT_KINDS.some((kind) => value[0] === kind)
|
|
55
|
+
);
|
|
56
|
+
} catch {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
export function assertWorkReceiptKeyMutable(key: string): void {
|
|
62
|
+
if (isInternalWorkReceiptKey(key)) {
|
|
63
|
+
throw new Error(
|
|
64
|
+
'Internal runtime facts cannot be mutated through generic work receipt operations.',
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
19
68
|
|
|
20
|
-
/** Keep internal
|
|
69
|
+
/** Keep internal runtime facts out of customer work-output projections. */
|
|
21
70
|
export function workReceiptOutputPredicateSql(keyColumn = 'k'): string {
|
|
22
71
|
const keySql = `convert_from(${keyColumn}, 'UTF8')`;
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
72
|
+
const internalPrefixes = INTERNAL_WORK_RECEIPT_KEY_PREFIXES.map(
|
|
73
|
+
(prefix) =>
|
|
74
|
+
`starts_with(split_part(${keySql}, '${WORK_RECEIPT_KEY_FORMAT.separator}', 4), '${prefix}')`,
|
|
75
|
+
).join(' OR ');
|
|
76
|
+
return `NOT (starts_with(${keySql}, '${WORK_RECEIPT_KEY_FORMAT.prefix}${WORK_RECEIPT_KEY_FORMAT.separator}') AND (${internalPrefixes}))`;
|
|
27
77
|
}
|
|
28
78
|
|
|
29
79
|
export const WORK_RECEIPT_STATUS_CODE = {
|
|
@@ -136,6 +136,12 @@ export const PLAY_AUTHORING_CONTRACT_CHANGELOG =
|
|
|
136
136
|
* execution-boundary guarantee.
|
|
137
137
|
*/
|
|
138
138
|
export const PLAY_AUTHORING_RUNTIME_CAPABILITIES = [
|
|
139
|
+
{
|
|
140
|
+
capability: 'Hosted pages',
|
|
141
|
+
surface: '`deepline.pages.write`',
|
|
142
|
+
contract:
|
|
143
|
+
'A write replaces the whole page and must set `public`. The first write sets who can see the page. A later write can make a public page private but never a private page public; that takes `deepline pages set-public <name>`, and `deepline plays check` warns when code asks for it. A completed write is safe to repeat.',
|
|
144
|
+
},
|
|
139
145
|
{
|
|
140
146
|
capability: 'Durable external I/O',
|
|
141
147
|
surface:
|
|
@@ -1481,6 +1487,28 @@ export const PLAY_AUTHORING_STATIC_FETCH_KEY_HINT =
|
|
|
1481
1487
|
`${PLAY_AUTHORING_DOCUMENTATION.staticCallKeys.workaround} Do not compute the key.` as const;
|
|
1482
1488
|
|
|
1483
1489
|
/** The complete customer-authored `ctx` Interface shared by every Adapter. */
|
|
1490
|
+
export type PlayAuthoringPageWriteOptions = {
|
|
1491
|
+
/**
|
|
1492
|
+
* Who can see the page. Taken from the first write. A later write cannot make
|
|
1493
|
+
* a private page public: run `deepline pages set-public <name>` for that.
|
|
1494
|
+
*/
|
|
1495
|
+
public: boolean;
|
|
1496
|
+
/** Replaces the page's whole content. A non-string is stored as JSON. */
|
|
1497
|
+
content: unknown;
|
|
1498
|
+
/** Defaults to text, JSON, or binary according to `content`. */
|
|
1499
|
+
contentType?: string;
|
|
1500
|
+
description?: string;
|
|
1501
|
+
};
|
|
1502
|
+
|
|
1503
|
+
export type PlayAuthoringPageWriteResult = {
|
|
1504
|
+
name: string;
|
|
1505
|
+
url: string;
|
|
1506
|
+
/** Who can actually see the page after this write. */
|
|
1507
|
+
public: boolean;
|
|
1508
|
+
created: boolean;
|
|
1509
|
+
warnings: string[];
|
|
1510
|
+
};
|
|
1511
|
+
|
|
1484
1512
|
export interface PlayAuthoringRuntimeContext<
|
|
1485
1513
|
TListGetter extends 'dataset' | 'array' = 'dataset',
|
|
1486
1514
|
> {
|
|
@@ -1493,6 +1521,17 @@ export interface PlayAuthoringRuntimeContext<
|
|
|
1493
1521
|
entitlements(): Promise<BillingEntitlements>;
|
|
1494
1522
|
};
|
|
1495
1523
|
|
|
1524
|
+
pages: {
|
|
1525
|
+
/**
|
|
1526
|
+
* Replace a named page in this workspace and return its URL.
|
|
1527
|
+
* @sdkReference runtime 181 deepline.pages.write(name, options)
|
|
1528
|
+
*/
|
|
1529
|
+
write(
|
|
1530
|
+
name: string,
|
|
1531
|
+
options: PlayAuthoringPageWriteOptions,
|
|
1532
|
+
): Promise<PlayAuthoringPageWriteResult>;
|
|
1533
|
+
};
|
|
1534
|
+
|
|
1496
1535
|
/**
|
|
1497
1536
|
* Load a staged CSV file as a durable dataset handle.
|
|
1498
1537
|
* @sdkReference runtime 040 deepline.csv(path, options)
|
|
@@ -3416,9 +3455,10 @@ export const PLAY_AUTHORING_CLOUD_TYPE_DECLARATIONS = [
|
|
|
3416
3455
|
'};',
|
|
3417
3456
|
'export type PlayReferenceLike<TInput extends Record<string, unknown> = Record<string, unknown>> = ({ readonly playName: string; readonly name?: string } | { readonly name: string; readonly playName?: string }) & { readonly __inputType?: TInput };',
|
|
3418
3457
|
'export type BillingBenefitValues = { quickenrichUnlimited: { enabled: boolean; requestsPerMinute: number }; peopleSearch: { enabled: boolean; requestsPerMinute: number; profilesPerMonth: number; overageCreditsPerProfile?: number } };',
|
|
3419
|
-
"export type BillingEntitlements = { org_id: string; as_of: number; plan: { sku: string; name: string; catalog_revision: string | null; included_credits: number; interval: 'month' | 'year' | null } | null; benefits: { quickenrichUnlimited?: { status: 'active' | 'past_due'; value: BillingBenefitValues['quickenrichUnlimited']; expiresAt?: number }; peopleSearch?: { status: 'active'; value: BillingBenefitValues['peopleSearch']; expiresAt?: number; usage: { month: string; periodStartsAt?: number; resetsAt?: number; resetsOn?: 'calendar_month' | 'billing_cycle'; limit: number; consumed: number; remaining: number } } }; effective_limits: { quickenrichUnlimited?: { baseline: number; effective: number; source: 'plan' | 'override'; override_expires_at?: number } } };",
|
|
3458
|
+
"export type BillingEntitlements = { org_id: string; as_of: number; plan: { sku: string; name: string; catalog_revision: string | null; included_credits: number; interval: 'month' | 'year' | null } | null; benefits: { quickenrichUnlimited?: { status: 'active' | 'past_due'; value: BillingBenefitValues['quickenrichUnlimited']; expiresAt?: number }; peopleSearch?: { status: 'active'; value: BillingBenefitValues['peopleSearch']; expiresAt?: number; usage: { month: string; periodStartsAt?: number; resetsAt?: number; resetsOn?: 'calendar_month' | 'billing_cycle'; limit: number; consumed: number; remaining: number } }; includedStorage?: { status: 'active'; usage: { limit: number; consumed: number; remaining: number; measuredDay: string; overageCharged: boolean } } }; effective_limits: { quickenrichUnlimited?: { baseline: number; effective: number; source: 'plan' | 'override'; override_expires_at?: number } } };",
|
|
3420
3459
|
'export interface DeeplinePlayRuntimeContext {',
|
|
3421
3460
|
' billing: { entitlements(): Promise<BillingEntitlements> };',
|
|
3461
|
+
' pages: { write(name: string, options: { public: boolean; content: unknown; contentType?: string; description?: string }): Promise<{ name: string; url: string; public: boolean; created: boolean; warnings: string[] }> };',
|
|
3422
3462
|
' csv<T = Record<string, unknown>>(path: string | CsvInput<T & object>, options?: CsvOptions): Promise<PlayDataset<T>>;',
|
|
3423
3463
|
' dataset<TSource extends PlayDatasetInput<object>>(key: string, items: TSource): DatasetBuilder<PlayDatasetRow<TSource> & object, PlayDatasetRow<TSource> & object>;',
|
|
3424
3464
|
' map<TSource extends PlayDatasetInput<object>>(key: string, items: TSource, options?: DatasetDefinitionOptions<PlayDatasetRow<TSource> & object>): never;',
|
|
@@ -31,6 +31,10 @@ export type PlayRuntimeFeature =
|
|
|
31
31
|
export const PLAY_ARTIFACT_VERSION = CURRENT_PLAY_ARTIFACT_CONTRACT_VERSION;
|
|
32
32
|
|
|
33
33
|
export type PlayContractCompatibilitySnapshot = {
|
|
34
|
+
/** App-injected optional diagnostic reader support, never an execution or version gate. */
|
|
35
|
+
terminalRuntimePerformanceSupported?: boolean;
|
|
36
|
+
/** App-injected reader support for optional nested body diagnostics, never an execution gate. */
|
|
37
|
+
terminalRuntimeBodyAdmissionSupported?: boolean;
|
|
34
38
|
/** Historical marker. Nothing admits, gates, or branches on it. */
|
|
35
39
|
apiVersion?: number;
|
|
36
40
|
artifactVersion: number;
|
|
@@ -1037,7 +1037,11 @@ export type MaterializePlayDatasetInputOptions<T> = {
|
|
|
1037
1037
|
export type IteratePlayDatasetInputPagesOptions<T> = {
|
|
1038
1038
|
pageSize?: number;
|
|
1039
1039
|
maxPageBytes?: number;
|
|
1040
|
-
estimateRowBytes?: (
|
|
1040
|
+
estimateRowBytes?: (
|
|
1041
|
+
row: T,
|
|
1042
|
+
index: number,
|
|
1043
|
+
sourceIdentity?: PlayDatasetSourceRowIdentity,
|
|
1044
|
+
) => number;
|
|
1041
1045
|
onRow?: (row: T, index: number) => void;
|
|
1042
1046
|
};
|
|
1043
1047
|
|
|
@@ -1076,8 +1080,10 @@ export async function* iteratePlayDatasetInputPages<T>(
|
|
|
1076
1080
|
sourceIdentity: PlayDatasetSourceRowIdentity | undefined,
|
|
1077
1081
|
): Array<{ rows: T[]; offset: number }> => {
|
|
1078
1082
|
options?.onRow?.(row, index);
|
|
1079
|
-
|
|
1080
|
-
|
|
1083
|
+
const rowBytes = Math.max(
|
|
1084
|
+
0,
|
|
1085
|
+
Math.ceil(estimateRowBytes(row, index++, sourceIdentity)),
|
|
1086
|
+
);
|
|
1081
1087
|
const ready: Array<{ rows: T[]; offset: number }> = [];
|
|
1082
1088
|
if (page.length > 0 && pageBytes + rowBytes > maxPageBytes) {
|
|
1083
1089
|
ready.push({ rows: page, offset });
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import { readdir, readFile, stat } from 'node:fs/promises';
|
|
2
2
|
import { join, relative } from 'node:path';
|
|
3
3
|
import picomatch from 'picomatch';
|
|
4
|
+
import { DEFAULT_MANIFEST_FILE } from './manifest-contract';
|
|
5
|
+
|
|
6
|
+
export { DEFAULT_MANIFEST_FILE } from './manifest-contract';
|
|
4
7
|
|
|
5
8
|
/**
|
|
6
9
|
* deepline.json — the repo-owned half of deploy configuration. The repo
|
|
@@ -98,8 +101,6 @@ export function parseDeeplineManifest(
|
|
|
98
101
|
};
|
|
99
102
|
}
|
|
100
103
|
|
|
101
|
-
export const DEFAULT_MANIFEST_FILE = 'deepline.json';
|
|
102
|
-
|
|
103
104
|
export async function readDeeplineManifest(
|
|
104
105
|
projectRoot: string,
|
|
105
106
|
manifestFile: string = DEFAULT_MANIFEST_FILE,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { DEFAULT_MANIFEST_FILE } from './manifest';
|
|
1
|
+
import { DEFAULT_MANIFEST_FILE } from './manifest-contract';
|
|
2
2
|
import type { PlayDeploymentDoc, PlayProjectDoc } from './control-plane-types';
|
|
3
3
|
|
|
4
|
-
export { DEFAULT_MANIFEST_FILE } from './manifest';
|
|
4
|
+
export { DEFAULT_MANIFEST_FILE } from './manifest-contract';
|
|
5
5
|
|
|
6
6
|
export type SerializedPlayProject = {
|
|
7
7
|
id: string;
|