deepline 0.3.461 → 0.3.463

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.
Files changed (297) hide show
  1. package/dist/bundling-sources/sdk/src/client-core.ts +7593 -0
  2. package/dist/bundling-sources/sdk/src/client.ts +8 -7366
  3. package/dist/bundling-sources/sdk/src/http-core.ts +1239 -0
  4. package/dist/bundling-sources/sdk/src/http.ts +6 -1231
  5. package/dist/bundling-sources/sdk/src/index.ts +4 -1
  6. package/dist/bundling-sources/sdk/src/play.ts +5 -5
  7. package/dist/bundling-sources/sdk/src/plays/client-core.ts +437 -0
  8. package/dist/bundling-sources/sdk/src/plays/client.ts +4 -421
  9. package/dist/bundling-sources/sdk/src/plays/input-example.ts +3 -4
  10. package/dist/bundling-sources/sdk/src/plays/play-description.ts +1 -1
  11. package/dist/bundling-sources/sdk/src/plays/run-request.ts +1 -1
  12. package/dist/bundling-sources/sdk/src/release.ts +1 -1
  13. package/dist/bundling-sources/sdk/src/server.ts +43 -0
  14. package/dist/bundling-sources/sdk/src/types.ts +15 -5
  15. package/dist/bundling-sources/shared_libs/integration-contracts/billing-entitlements.ts +15 -0
  16. package/dist/bundling-sources/shared_libs/monitors/billing/tamradar.ts +17 -17
  17. package/dist/bundling-sources/shared_libs/monitors/callback-security.ts +0 -307
  18. package/dist/bundling-sources/shared_libs/monitors/http-error-response.ts +3 -0
  19. package/dist/bundling-sources/shared_libs/monitors/lifecycle-notifications.ts +3 -2
  20. package/dist/bundling-sources/shared_libs/monitors/package.json +2 -0
  21. package/dist/bundling-sources/shared_libs/monitors/provider-callback-verification.ts +34 -0
  22. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-batch-operation.ts +61 -0
  23. package/dist/bundling-sources/shared_libs/monitors/provider-monitor-upstream-identity.ts +122 -2
  24. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-dead-letter.ts +11 -1
  25. package/dist/bundling-sources/shared_libs/monitors/signal-radars/inbound-failure-codes.ts +24 -0
  26. package/dist/bundling-sources/shared_libs/observability/dlq.ts +32 -0
  27. package/dist/bundling-sources/shared_libs/observability/scheduled-jobs.json +57 -3
  28. package/dist/bundling-sources/shared_libs/observability/scheduled-work.ts +1 -0
  29. package/dist/bundling-sources/shared_libs/play-data-plane/r2.ts +66 -1
  30. package/dist/bundling-sources/shared_libs/play-data-plane/sheet-column-storage.ts +36 -7
  31. package/dist/bundling-sources/shared_libs/play-runtime/app-runtime-api.ts +250 -11
  32. package/dist/bundling-sources/shared_libs/play-runtime/array-input-store.ts +319 -0
  33. package/dist/bundling-sources/shared_libs/play-runtime/context.ts +991 -359
  34. package/dist/bundling-sources/shared_libs/play-runtime/ctx-types.ts +17 -0
  35. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-janitor.ts +13 -0
  36. package/dist/bundling-sources/shared_libs/play-runtime/daytona-sandbox-reaper.ts +110 -0
  37. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-machines.ts +155 -6
  38. package/dist/bundling-sources/shared_libs/play-runtime/deployment/fly-registry.ts +110 -6
  39. package/dist/bundling-sources/shared_libs/play-runtime/durable-receipt-execution.ts +127 -13
  40. package/dist/bundling-sources/shared_libs/play-runtime/execution-capabilities.ts +14 -1
  41. package/dist/bundling-sources/shared_libs/play-runtime/fixture-behavior.ts +57 -1
  42. package/dist/bundling-sources/shared_libs/play-runtime/free-company-lookup-batching.ts +218 -0
  43. package/dist/bundling-sources/shared_libs/play-runtime/gateway-postgres-admission.ts +42 -5
  44. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-budget-state-backend.ts +6 -1
  45. package/dist/bundling-sources/shared_libs/play-runtime/governor/app-runtime-rate-state-backend.ts +92 -31
  46. package/dist/bundling-sources/shared_libs/play-runtime/governor/block-reserving-budget-state-backend.ts +69 -14
  47. package/dist/bundling-sources/shared_libs/play-runtime/governor/governor.ts +93 -23
  48. package/dist/bundling-sources/shared_libs/play-runtime/governor/in-memory-rate-state-backend.ts +15 -4
  49. package/dist/bundling-sources/shared_libs/play-runtime/governor/policy.ts +22 -18
  50. package/dist/bundling-sources/shared_libs/play-runtime/governor/rate-state-backend.ts +5 -0
  51. package/dist/bundling-sources/shared_libs/play-runtime/launch-identity.ts +2 -0
  52. package/dist/bundling-sources/shared_libs/play-runtime/map-memory-limits.ts +190 -14
  53. package/dist/bundling-sources/shared_libs/play-runtime/memory-ledger.ts +131 -0
  54. package/dist/bundling-sources/shared_libs/play-runtime/modal-runtime-config.ts +77 -2
  55. package/dist/bundling-sources/shared_libs/play-runtime/output-size-limits.ts +271 -2
  56. package/dist/bundling-sources/shared_libs/play-runtime/play-run-recovery-policy.ts +51 -0
  57. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/contracts.ts +2 -0
  58. package/dist/bundling-sources/shared_libs/play-runtime/play-runs/sandbox-cleanup/job.ts +27 -1
  59. package/dist/bundling-sources/shared_libs/play-runtime/play-runtime-batching-registry.ts +2 -0
  60. package/dist/bundling-sources/shared_libs/play-runtime/protocol.ts +3 -0
  61. package/dist/bundling-sources/shared_libs/play-runtime/provider-text-for-log.ts +63 -0
  62. package/dist/bundling-sources/shared_libs/play-runtime/resource-governor.ts +19 -0
  63. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger-event-transport.ts +112 -16
  64. package/dist/bundling-sources/shared_libs/play-runtime/run-ledger.ts +104 -2
  65. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/index.ts +265 -151
  66. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-gateway-transport.ts +17 -0
  67. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-progress-push.ts +35 -14
  68. package/dist/bundling-sources/shared_libs/play-runtime/runner-app/runtime-sheet-persistence-retry.ts +12 -1
  69. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-control-transport.ts +4 -0
  70. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-labels.ts +36 -0
  71. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-launch-transport.ts +136 -70
  72. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-lifecycle.ts +237 -36
  73. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-runtime-watchdog.ts +148 -4
  74. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona-session-execution.ts +6 -0
  75. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/daytona.ts +285 -32
  76. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/backends/modal.ts +251 -56
  77. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/runtime-sandbox-reconciliation.ts +29 -4
  78. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/sandbox-create-outcome.ts +27 -0
  79. package/dist/bundling-sources/shared_libs/play-runtime/runner-backends/types.ts +22 -1
  80. package/dist/bundling-sources/shared_libs/play-runtime/runtime-api.ts +1397 -382
  81. package/dist/bundling-sources/shared_libs/play-runtime/runtime-array-input-receipts.ts +920 -0
  82. package/dist/bundling-sources/shared_libs/play-runtime/runtime-constants.ts +16 -0
  83. package/dist/bundling-sources/shared_libs/play-runtime/runtime-environment.ts +38 -0
  84. package/dist/bundling-sources/shared_libs/play-runtime/runtime-flow.ts +6 -0
  85. package/dist/bundling-sources/shared_libs/play-runtime/runtime-incident-drills.ts +26 -1
  86. package/dist/bundling-sources/shared_libs/play-runtime/runtime-operation-contract.ts +30 -0
  87. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-store-adapter.ts +14 -3
  88. package/dist/bundling-sources/shared_libs/play-runtime/runtime-receipt-writer.ts +31 -4
  89. package/dist/bundling-sources/shared_libs/play-runtime/runtime-sheet-row-transition.ts +47 -0
  90. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-compute-usage.ts +20 -7
  91. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/contract.ts +12 -0
  92. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/index.ts +9 -0
  93. package/dist/bundling-sources/shared_libs/play-runtime/sandbox-runs/runner-backend-adapter.ts +10 -0
  94. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backend.ts +4 -0
  95. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-runtime-worker.ts +1496 -320
  96. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/absurd-worker-required-env.ts +31 -1
  97. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/postgres.ts +1389 -129
  98. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/receipt-gateway.ts +36 -0
  99. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-dispatch-authority.ts +4 -0
  100. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/run-ledger-outbox-recovery.ts +162 -23
  101. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-event-search.ts +499 -115
  102. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-capacity.ts +377 -9
  103. package/dist/bundling-sources/shared_libs/play-runtime/scheduler-backends/runtime-sandbox-ledger-reconciliation.ts +117 -8
  104. package/dist/bundling-sources/shared_libs/play-runtime/secret-resolution-retry-policy.ts +25 -0
  105. package/dist/bundling-sources/shared_libs/play-runtime/terminal-runtime-performance.ts +391 -0
  106. package/dist/bundling-sources/shared_libs/play-runtime/test-runtime-seams.ts +40 -0
  107. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/index.ts +6 -0
  108. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/mapped-calls.ts +171 -0
  109. package/dist/bundling-sources/shared_libs/play-runtime/tool-call/receipt-cohort.ts +16 -1
  110. package/dist/bundling-sources/shared_libs/play-runtime/tool-execute-retry-policy.ts +38 -12
  111. package/dist/bundling-sources/shared_libs/play-runtime/tool-result.ts +33 -9
  112. package/dist/bundling-sources/shared_libs/play-runtime/transport-error-diagnostics.ts +28 -0
  113. package/dist/bundling-sources/shared_libs/play-runtime/work-receipt-storage-contract.ts +55 -5
  114. package/dist/bundling-sources/shared_libs/plays/authoring-contract.ts +41 -1
  115. package/dist/bundling-sources/shared_libs/plays/contracts.ts +4 -0
  116. package/dist/bundling-sources/shared_libs/plays/dataset.ts +9 -3
  117. package/dist/bundling-sources/shared_libs/plays/deploy/manifest-contract.ts +2 -0
  118. package/dist/bundling-sources/shared_libs/plays/deploy/manifest.ts +3 -2
  119. package/dist/bundling-sources/shared_libs/plays/deploy/project-serializer.ts +2 -2
  120. package/dist/bundling-sources/shared_libs/plays/run-output-summary.ts +66 -0
  121. package/dist/bundling-sources/shared_libs/plays/script-entry.ts +1 -1
  122. package/dist/bundling-sources/shared_libs/product-notifications/catalog.ts +43 -1
  123. package/dist/bundling-sources/shared_libs/product-notifications/content.ts +9 -0
  124. package/dist/bundling-sources/shared_libs/product-notifications/email.ts +91 -13
  125. package/dist/bundling-sources/shared_libs/product-notifications/events.ts +3 -0
  126. package/dist/bundling-sources/shared_libs/product-notifications/slack-delivery.ts +41 -24
  127. package/dist/bundling-sources/shared_libs/security/attested-client-ip.ts +91 -0
  128. package/dist/bundling-sources/shared_libs/security/internal-actor.ts +0 -11
  129. package/dist/cli/{auth-6HJXNWUG.mjs → auth-LZLBR4C3.mjs} +5 -4
  130. package/dist/cli/auth-XPGKBJKB.js +41 -0
  131. package/dist/cli/{billing-6P5HO6QG.js → billing-6TJPNJQD.js} +152 -78
  132. package/dist/cli/{billing-MJ42N7YF.mjs → billing-OTOP5RE4.mjs} +84 -10
  133. package/dist/cli/{chunk-FCAZQ7WV.js → chunk-2NISBXMN.js} +52 -50
  134. package/dist/cli/{chunk-PNATXKLP.js → chunk-2ZIRCBYG.js} +6 -6
  135. package/dist/cli/{chunk-5FDKJQZE.js → chunk-3BOIOCNX.js} +1 -1
  136. package/dist/cli/chunk-3BVLLJ3H.mjs +1038 -0
  137. package/dist/cli/{chunk-FJZILBL7.mjs → chunk-3U5EAP6E.mjs} +5 -5
  138. package/dist/cli/{describe-FRAVCY5F.mjs → chunk-4YZKBBLZ.mjs} +19 -36
  139. package/dist/cli/{chunk-QWRHGGUH.js → chunk-5DRNNC72.js} +20 -2
  140. package/dist/cli/{chunk-Z2GUFYT6.js → chunk-5LEAXRHV.js} +11 -11
  141. package/dist/cli/{chunk-5MDIZX7M.js → chunk-5LHXOIPT.js} +8 -6
  142. package/dist/cli/{chunk-NMJ4D2WO.js → chunk-6PMCRYDA.js} +216 -91
  143. package/dist/cli/{chunk-EBU7LQ64.js → chunk-6V7KVRR5.js} +3 -3
  144. package/dist/cli/{chunk-MGXEUZHL.mjs → chunk-7D6X7IXW.mjs} +7 -5
  145. package/dist/cli/{chunk-SAZFZQRI.js → chunk-7FCYPAPP.js} +2 -2
  146. package/dist/cli/{chunk-ACCR7POB.js → chunk-7XYDDCQ2.js} +27 -27
  147. package/dist/cli/{chunk-5IYOUBFZ.js → chunk-ALZBANZI.js} +28 -54
  148. package/dist/cli/{chunk-3DNKFH2G.mjs → chunk-BAPTQDLF.mjs} +19 -1
  149. package/dist/cli/chunk-BGNWI3KH.js +827 -0
  150. package/dist/cli/{chunk-V7REJRDZ.mjs → chunk-C25QE4CH.mjs} +1 -1
  151. package/dist/cli/{chunk-FGMX4HUZ.js → chunk-CBZP6J3V.js} +29 -27
  152. package/dist/cli/{chunk-QEYHTIV4.mjs → chunk-CTQ56DXP.mjs} +10 -1
  153. package/dist/cli/{chunk-IHHLTHE7.mjs → chunk-CVQ7N5CV.mjs} +267 -38
  154. package/dist/cli/{chunk-7DH2FD7Y.mjs → chunk-D464JW3N.mjs} +5 -85
  155. package/dist/cli/{chunk-MEAIOXJL.mjs → chunk-DHXCBITQ.mjs} +7 -5
  156. package/dist/cli/chunk-F2RHUPVH.mjs +827 -0
  157. package/dist/cli/chunk-F6QV42MC.mjs +91 -0
  158. package/dist/cli/{chunk-OZBWRICM.js → chunk-FK2HNDCN.js} +2 -2
  159. package/dist/cli/{chunk-BGY2PLP7.mjs → chunk-GUT7CLOL.mjs} +23 -49
  160. package/dist/cli/{chunk-RY4IVOU3.mjs → chunk-I624J4H5.mjs} +16 -806
  161. package/dist/cli/{chunk-Z2XUZC34.js → chunk-IAYSWZDJ.js} +188 -76
  162. package/dist/cli/{chunk-FGLKOWSC.mjs → chunk-IKWRUNAP.mjs} +1 -1
  163. package/dist/cli/{chunk-KCCOQ5G5.js → chunk-JVDKZJUH.js} +511 -282
  164. package/dist/cli/{chunk-HDFRJ4IT.mjs → chunk-JVHOS3K3.mjs} +177 -65
  165. package/dist/cli/chunk-LYFKBLJI.mjs +1039 -0
  166. package/dist/cli/{chunk-SLEUWLJE.mjs → chunk-MSY22NQW.mjs} +5 -5
  167. package/dist/cli/{chunk-5FY72YOV.js → chunk-NAPTMYTY.js} +8 -8
  168. package/dist/cli/{chunk-O6QOMHCH.js → chunk-NDHJR2WZ.js} +37 -35
  169. package/dist/cli/{chunk-KXMNM4AQ.js → chunk-NMU3VR5U.js} +4 -5
  170. package/dist/cli/chunk-NTLI6P6Y.mjs +19 -0
  171. package/dist/cli/{chunk-RFONC4WJ.mjs → chunk-O3BJYD6D.mjs} +3 -3
  172. package/dist/cli/{describe-2WQY7ZCY.js → chunk-PVY4DPPF.js} +27 -44
  173. package/dist/cli/{chunk-WIYWSYDS.mjs → chunk-Q2EIZKVX.mjs} +3 -3
  174. package/dist/cli/{chunk-VZBCEA5S.mjs → chunk-RD6IQ2JY.mjs} +223 -92
  175. package/dist/cli/chunk-RGOUCIIZ.js +1039 -0
  176. package/dist/cli/{chunk-EIMG75BT.mjs → chunk-S3A4IXBQ.mjs} +4 -5
  177. package/dist/cli/{chunk-QIW7TVV6.mjs → chunk-S4XQCFES.mjs} +14 -12
  178. package/dist/cli/chunk-SKU6ECIY.js +19 -0
  179. package/dist/cli/{chunk-CRYOUPEB.js → chunk-TIRBDQ3W.js} +16 -16
  180. package/dist/cli/{chunk-G7L27KZB.mjs → chunk-TKAQR3IB.mjs} +31 -21
  181. package/dist/cli/{chunk-MDJPEGVN.js → chunk-UC4SFYNU.js} +392 -261
  182. package/dist/cli/{chunk-3BMLICF7.mjs → chunk-UIURR26V.mjs} +13 -8
  183. package/dist/cli/{chunk-TNMBPMMC.js → chunk-UROQDCVW.js} +13 -4
  184. package/dist/cli/{chunk-R64BGGRQ.mjs → chunk-VDGTTH7K.mjs} +2 -2
  185. package/dist/cli/chunk-VLEVVDWG.js +91 -0
  186. package/dist/cli/{chunk-R2GLGLDR.mjs → chunk-VPHN2HAL.mjs} +216 -91
  187. package/dist/cli/chunk-VY2GBNTX.js +1038 -0
  188. package/dist/cli/{chunk-CFUTOWE4.js → chunk-WG3KGAII.js} +8 -88
  189. package/dist/cli/{chunk-QAJAJPKK.mjs → chunk-WUMIYOXQ.mjs} +4 -2
  190. package/dist/cli/{chunk-SCIR5JXW.js → chunk-WUZS2HK6.js} +56 -51
  191. package/dist/cli/{chunk-T3MVIPHG.mjs → chunk-XDWS2JJT.mjs} +1 -1
  192. package/dist/cli/{chunk-KGQNIA37.js → chunk-XQCTG5OO.js} +44 -34
  193. package/dist/cli/{chunk-KVJ5VHW5.mjs → chunk-XW2JIYG7.mjs} +2 -2
  194. package/dist/cli/chunk-YGGIZ3VT.js +920 -0
  195. package/dist/cli/command-docs.d.mts +5 -0
  196. package/dist/cli/command-docs.d.ts +5 -0
  197. package/dist/cli/command-docs.js +2 -2
  198. package/dist/cli/command-docs.mjs +1 -1
  199. package/dist/cli/{csv-NX7NO3O6.js → csv-EH5QWR4O.js} +13 -12
  200. package/dist/cli/{csv-DQ6GW5B5.mjs → csv-OK45Z5XQ.mjs} +4 -3
  201. package/dist/cli/{db-R72DFMP6.js → db-3ESJKETS.js} +30 -27
  202. package/dist/cli/{db-2YP33M4K.mjs → db-6Z5E4HKN.mjs} +10 -7
  203. package/dist/cli/describe-PNDQB7YS.mjs +48 -0
  204. package/dist/cli/describe-QUF7VTTR.js +48 -0
  205. package/dist/cli/describe-core.d.mts +153 -5
  206. package/dist/cli/describe-core.d.ts +153 -5
  207. package/dist/cli/describe-core.js +9 -5
  208. package/dist/cli/describe-core.mjs +10 -6
  209. package/dist/cli/{executions-WFBU7L2Q.mjs → executions-2NTWQFEG.mjs} +7 -5
  210. package/dist/cli/{executions-ZLHD4QIT.js → executions-KUOBRX5V.js} +9 -7
  211. package/dist/cli/{feedback-CN3HJFVF.mjs → feedback-7RPRMSGY.mjs} +6 -5
  212. package/dist/cli/{feedback-NDV6TPHG.js → feedback-UPHAZJ4C.js} +10 -9
  213. package/dist/cli/getting-started.d.mts +6 -6
  214. package/dist/cli/getting-started.d.ts +6 -6
  215. package/dist/cli/getting-started.js +2 -2
  216. package/dist/cli/getting-started.mjs +1 -1
  217. package/dist/cli/{git-QAD6E3HW.mjs → git-SCYP6WSZ.mjs} +5 -4
  218. package/dist/cli/git-UH653WHV.js +25 -0
  219. package/dist/cli/index.js +152 -142
  220. package/dist/cli/index.mjs +56 -46
  221. package/dist/cli/{legacy-noops-KVC5QJ74.js → legacy-noops-7XMFCVRG.js} +8 -7
  222. package/dist/cli/{legacy-noops-TPTKNBI2.mjs → legacy-noops-A4KYAGI6.mjs} +5 -4
  223. package/dist/cli/{monitors-SV57JFLO.mjs → monitors-FLC5J7RI.mjs} +19 -6
  224. package/dist/cli/{monitors-KCROV6PJ.js → monitors-NZV6IX5H.js} +103 -90
  225. package/dist/cli/{org-NJYX5743.js → org-IZ7UP3XF.js} +70 -67
  226. package/dist/cli/{org-KX6QIR7A.mjs → org-LUETJ7Z5.mjs} +9 -6
  227. package/dist/cli/pages-22ML3O7O.js +252 -0
  228. package/dist/cli/pages-EUX5EAGF.mjs +252 -0
  229. package/dist/cli/{play-IQQ57L7Z.mjs → play-CDHPAKKM.mjs} +512 -1508
  230. package/dist/cli/{play-32L7EQN4.js → play-USJBQADG.js} +1090 -2086
  231. package/dist/cli/{providers-4WEC2EQN.mjs → providers-CCXZ3SQF.mjs} +7 -5
  232. package/dist/cli/{providers-ZQV6QLVQ.js → providers-WFEUNPGC.js} +10 -8
  233. package/dist/cli/{quickstart-HKUSFADF.js → quickstart-O4JSUORZ.js} +13 -12
  234. package/dist/cli/{quickstart-RQ76RIUE.mjs → quickstart-ZUULI635.mjs} +5 -4
  235. package/dist/cli/run-ISDJYJMU.js +443 -0
  236. package/dist/cli/run-QJ4NX5F5.mjs +443 -0
  237. package/dist/cli/{search-ZRAVFBZC.mjs → search-IX3XKZJ3.mjs} +8 -6
  238. package/dist/cli/search-TIFNLRPM.js +32 -0
  239. package/dist/cli/{secrets-CMJOVNVH.mjs → secrets-7VUDXTUZ.mjs} +7 -5
  240. package/dist/cli/{secrets-J3G5Y43U.js → secrets-ELQSNCTR.js} +16 -14
  241. package/dist/cli/{sessions-WY7VN4AE.js → sessions-A3FG3AZX.js} +6 -5
  242. package/dist/cli/{sessions-MDQYY5CB.mjs → sessions-VOIQ62GB.mjs} +5 -4
  243. package/dist/cli/{settings-4RWZPCT5.mjs → settings-S6N6EFBG.mjs} +14 -11
  244. package/dist/cli/{settings-HTNTFKCE.js → settings-ZTXQEMZI.js} +80 -77
  245. package/dist/cli/{setup-P3GYYZWG.mjs → setup-AYPIK4JE.mjs} +12 -10
  246. package/dist/cli/{setup-QGCAP62X.js → setup-Y3WOIFLS.js} +53 -51
  247. package/dist/cli/{skills-7NAE4ICL.mjs → skills-5SF5QWNI.mjs} +7 -6
  248. package/dist/cli/skills-MWFRMG3H.js +31 -0
  249. package/dist/cli/tools-3XNZ4J64.mjs +55 -0
  250. package/dist/cli/tools-XEC4OD3R.js +55 -0
  251. package/dist/cli/{update-GODLRKNB.mjs → update-3U4OVX5R.mjs} +9 -8
  252. package/dist/cli/update-DWYEYTZE.js +33 -0
  253. package/dist/cli/{workflow-4BXOUVEO.mjs → workflow-2M5JP7SA.mjs} +10 -8
  254. package/dist/cli/{workflow-AO3A6LXN.js → workflow-RM7H7555.js} +20 -18
  255. package/dist/client-DS2IWYZF.d.ts +10 -0
  256. package/dist/client-DTwnz_AW.d.mts +10 -0
  257. package/dist/{client-CYqG23K1.d.ts → client-core-B_6HAIBy.d.ts} +385 -12
  258. package/dist/{client-BbU5_j7n.d.mts → client-core-DzBSlY1U.d.mts} +385 -12
  259. package/dist/{compiler-manifest-CWz_sNOQ.d.ts → compiler-manifest-Dcyd3-Zd.d.mts} +43 -1
  260. package/dist/{compiler-manifest-CWz_sNOQ.d.mts → compiler-manifest-Dcyd3-Zd.d.ts} +43 -1
  261. package/dist/errors-d-sTrZhe.d.mts +142 -0
  262. package/dist/errors-yQwfgrcX.d.ts +142 -0
  263. package/dist/{index-BF2JB_Ug.d.mts → index-C6oXchjN.d.mts} +1 -1
  264. package/dist/{index-4NPXDzlD.d.ts → index-P56zy_z5.d.ts} +1 -1
  265. package/dist/index.d.mts +11 -147
  266. package/dist/index.d.ts +11 -147
  267. package/dist/index.js +16 -12
  268. package/dist/index.mjs +15 -11
  269. package/dist/install-integrity.json +141 -104
  270. package/dist/plays/bundle-play-file.d.mts +3 -3
  271. package/dist/plays/bundle-play-file.d.ts +3 -3
  272. package/dist/plays/bundle-play-file.mjs +2 -1
  273. package/dist/plays/play-description.d.mts +2 -2
  274. package/dist/plays/play-description.d.ts +2 -2
  275. package/dist/plays/play-description.js +2 -2
  276. package/dist/plays/play-description.mjs +1 -1
  277. package/dist/plays/run-request.d.mts +2 -2
  278. package/dist/plays/run-request.d.ts +2 -2
  279. package/dist/release.d.mts +1 -1
  280. package/dist/release.d.ts +1 -1
  281. package/dist/release.js +2 -2
  282. package/dist/release.mjs +1 -1
  283. package/dist/server.d.mts +17 -0
  284. package/dist/server.d.ts +17 -0
  285. package/dist/server.js +76 -0
  286. package/dist/server.mjs +76 -0
  287. package/package.json +6 -1
  288. package/dist/cli/auth-IACERYQH.js +0 -40
  289. package/dist/cli/chunk-PQUUWFXY.js +0 -95
  290. package/dist/cli/chunk-YBWAG72P.mjs +0 -95
  291. package/dist/cli/chunk-YQDUODZW.js +0 -1710
  292. package/dist/cli/git-JVI36ZFV.js +0 -24
  293. package/dist/cli/search-75X5LTDE.js +0 -30
  294. package/dist/cli/skills-BKJ53JOQ.js +0 -30
  295. package/dist/cli/tools-COWMIEJ6.mjs +0 -45
  296. package/dist/cli/tools-TASOCE7I.js +0 -45
  297. 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
- * dropped.
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 Error(
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 deliveryBroken = false;
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 the active request: its ambiguous outcome must remain owned.
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 = failed.shift() ?? pending.shift();
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 (abandoned || deliveryBroken || !pending.length)
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
- active = pending.splice(0, count);
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
- deliveryBroken = true;
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) void flush();
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 (!abandoned && !deliveryBroken && (pending.length || inFlight))
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([
@@ -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
- const delayMs = capacityRetryDelayMs(retryAfterMs, random);
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
@@ -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
- : error.message;
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
- createTransport(signal),
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, undefined, {
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(backoffMs * 2, DAYTONA_RETIREMENT_BACKOFF_MAX_MS);
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();