rivetkit 2.1.4 → 2.1.6-rc.1

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 (333) hide show
  1. package/dist/browser/client.d.ts +593 -588
  2. package/dist/browser/client.js +215 -35
  3. package/dist/browser/client.js.map +1 -1
  4. package/dist/browser/inspector/client.js +109 -10
  5. package/dist/browser/inspector/client.js.map +1 -1
  6. package/dist/inspector.tar.gz +0 -0
  7. package/dist/tsup/actor/errors.cjs +2 -2
  8. package/dist/tsup/actor/errors.js +1 -1
  9. package/dist/tsup/{actor-router-consts-D29T1Z-K.d.cts → actor-router-consts-DU-1IdQj.d.cts} +1 -1
  10. package/dist/tsup/{actor-router-consts-D29T1Z-K.d.ts → actor-router-consts-DU-1IdQj.d.ts} +1 -1
  11. package/dist/tsup/chunk-2ELYUO6C.cjs +112 -0
  12. package/dist/tsup/chunk-2ELYUO6C.cjs.map +1 -0
  13. package/dist/tsup/chunk-2LY7RW3Y.cjs +2316 -0
  14. package/dist/tsup/chunk-2LY7RW3Y.cjs.map +1 -0
  15. package/dist/tsup/{chunk-L47L3ZWJ.cjs → chunk-6G7ZNM27.cjs} +11 -6
  16. package/dist/tsup/chunk-6G7ZNM27.cjs.map +1 -0
  17. package/dist/tsup/{chunk-LK36OGGO.cjs → chunk-A4KEUCB6.cjs} +84 -34
  18. package/dist/tsup/chunk-A4KEUCB6.cjs.map +1 -0
  19. package/dist/tsup/{chunk-7HTNH26M.js → chunk-AKUJ5OTO.js} +11 -6
  20. package/dist/tsup/chunk-AKUJ5OTO.js.map +1 -0
  21. package/dist/tsup/{chunk-ANKZ2FS6.js → chunk-C22JYHVT.js} +77 -27
  22. package/dist/tsup/chunk-C22JYHVT.js.map +1 -0
  23. package/dist/tsup/chunk-C4EB42ET.js +1459 -0
  24. package/dist/tsup/chunk-C4EB42ET.js.map +1 -0
  25. package/dist/tsup/chunk-CGGGBIDP.cjs +1459 -0
  26. package/dist/tsup/chunk-CGGGBIDP.cjs.map +1 -0
  27. package/dist/tsup/chunk-CMQPDBBR.cjs +1486 -0
  28. package/dist/tsup/chunk-CMQPDBBR.cjs.map +1 -0
  29. package/dist/tsup/{chunk-AQD4CBZ2.cjs → chunk-DH6UINWA.cjs} +4 -4
  30. package/dist/tsup/{chunk-AQD4CBZ2.cjs.map → chunk-DH6UINWA.cjs.map} +1 -1
  31. package/dist/tsup/chunk-DK46YYCJ.js +1486 -0
  32. package/dist/tsup/chunk-DK46YYCJ.js.map +1 -0
  33. package/dist/tsup/chunk-EGWXXBZV.js +2316 -0
  34. package/dist/tsup/chunk-EGWXXBZV.js.map +1 -0
  35. package/dist/tsup/{chunk-HBYEYBIC.js → chunk-EONWXYMN.js} +2 -2
  36. package/dist/tsup/{chunk-N4KRDJ56.js → chunk-GFGRBYO2.js} +35 -6
  37. package/dist/tsup/chunk-GFGRBYO2.js.map +1 -0
  38. package/dist/tsup/{chunk-TEUL4UYN.cjs → chunk-GUHXWPGB.cjs} +1515 -1479
  39. package/dist/tsup/chunk-GUHXWPGB.cjs.map +1 -0
  40. package/dist/tsup/{chunk-3B6PCYJB.cjs → chunk-HNE2AK6C.cjs} +2375 -3713
  41. package/dist/tsup/chunk-HNE2AK6C.cjs.map +1 -0
  42. package/dist/tsup/{chunk-5UEFNG7P.js → chunk-I5I6OALK.js} +2 -2
  43. package/dist/tsup/chunk-IHQAF2HV.cjs +23 -0
  44. package/dist/tsup/chunk-IHQAF2HV.cjs.map +1 -0
  45. package/dist/tsup/{chunk-UWAGLDT6.cjs → chunk-JJNZQDUN.cjs} +667 -2517
  46. package/dist/tsup/chunk-JJNZQDUN.cjs.map +1 -0
  47. package/dist/tsup/{chunk-M6H4XIF4.js → chunk-JJSPHLJN.js} +219 -287
  48. package/dist/tsup/chunk-JJSPHLJN.js.map +1 -0
  49. package/dist/tsup/chunk-JRKPV5NJ.js +481 -0
  50. package/dist/tsup/chunk-JRKPV5NJ.js.map +1 -0
  51. package/dist/tsup/{chunk-VKVNIQRQ.js → chunk-K7MVU5SI.js} +36 -41
  52. package/dist/tsup/chunk-K7MVU5SI.js.map +1 -0
  53. package/dist/tsup/{chunk-KJSYAUOM.js → chunk-MLK3GY6P.js} +43 -27
  54. package/dist/tsup/chunk-MLK3GY6P.js.map +1 -0
  55. package/dist/tsup/{chunk-4KSHPFXF.cjs → chunk-MPLMTJY5.cjs} +123 -23
  56. package/dist/tsup/chunk-MPLMTJY5.cjs.map +1 -0
  57. package/dist/tsup/{chunk-UDMRZR6A.js → chunk-PQWI44WD.js} +1755 -3093
  58. package/dist/tsup/chunk-PQWI44WD.js.map +1 -0
  59. package/dist/tsup/{chunk-SR3KQE7Q.cjs → chunk-SQFCIDCG.cjs} +35 -6
  60. package/dist/tsup/chunk-SQFCIDCG.cjs.map +1 -0
  61. package/dist/tsup/{chunk-3GTO6H3E.js → chunk-SVHJSM2E.js} +110 -24
  62. package/dist/tsup/chunk-SVHJSM2E.js.map +1 -0
  63. package/dist/tsup/chunk-T5KYKM6R.js +49 -0
  64. package/dist/tsup/chunk-T5KYKM6R.js.map +1 -0
  65. package/dist/tsup/{chunk-GXRVSSVD.cjs → chunk-TJ7DKW6F.cjs} +123 -37
  66. package/dist/tsup/chunk-TJ7DKW6F.cjs.map +1 -0
  67. package/dist/tsup/chunk-UQZRMTM3.js +23 -0
  68. package/dist/tsup/chunk-UQZRMTM3.js.map +1 -0
  69. package/dist/tsup/{chunk-QPADHLDU.cjs → chunk-V3JSZR5P.cjs} +3 -3
  70. package/dist/tsup/{chunk-QPADHLDU.cjs.map → chunk-V3JSZR5P.cjs.map} +1 -1
  71. package/dist/tsup/{chunk-HKOSZKKZ.cjs → chunk-VBR35EQF.cjs} +271 -339
  72. package/dist/tsup/chunk-VBR35EQF.cjs.map +1 -0
  73. package/dist/tsup/{chunk-DZXDUGLL.js → chunk-VWYO36X4.js} +117 -17
  74. package/dist/tsup/chunk-VWYO36X4.js.map +1 -0
  75. package/dist/tsup/{chunk-I6PL6QIY.js → chunk-WW27B6DM.js} +1452 -1416
  76. package/dist/tsup/chunk-WW27B6DM.js.map +1 -0
  77. package/dist/tsup/chunk-YAE3MEJM.cjs +49 -0
  78. package/dist/tsup/chunk-YAE3MEJM.cjs.map +1 -0
  79. package/dist/tsup/{chunk-KTWY3K6Z.js → chunk-YGYGANCA.js} +473 -2323
  80. package/dist/tsup/chunk-YGYGANCA.js.map +1 -0
  81. package/dist/tsup/chunk-YZJWZBY5.cjs +481 -0
  82. package/dist/tsup/chunk-YZJWZBY5.cjs.map +1 -0
  83. package/dist/tsup/{chunk-ZFY5J2EP.cjs → chunk-ZZLJ5TSM.cjs} +39 -44
  84. package/dist/tsup/chunk-ZZLJ5TSM.cjs.map +1 -0
  85. package/dist/tsup/client/mod.cjs +10 -7
  86. package/dist/tsup/client/mod.cjs.map +1 -1
  87. package/dist/tsup/client/mod.d.cts +6 -6
  88. package/dist/tsup/client/mod.d.ts +6 -6
  89. package/dist/tsup/client/mod.js +11 -8
  90. package/dist/tsup/common/log.cjs +3 -3
  91. package/dist/tsup/common/log.js +2 -2
  92. package/dist/tsup/common/websocket.cjs +4 -4
  93. package/dist/tsup/common/websocket.js +3 -3
  94. package/dist/tsup/{config-Qj-zLJPc.d.ts → config-C2Wwnc69.d.ts} +142 -208
  95. package/dist/tsup/{config-BiNoIHRs.d.ts → config-DROwzBLT.d.cts} +82 -6
  96. package/dist/tsup/{config-BiNoIHRs.d.cts → config-DROwzBLT.d.ts} +82 -6
  97. package/dist/tsup/{config-iPj5l1bL.d.cts → config-ehT-_3BB.d.cts} +142 -208
  98. package/dist/tsup/{context-DzvH1PBK.d.cts → context-DGMJuAyc.d.ts} +16 -3
  99. package/dist/tsup/{context-CQCMuHND.d.ts → context-Dpp2RJbW.d.cts} +16 -3
  100. package/dist/tsup/db/drizzle/mod.cjs +3 -3
  101. package/dist/tsup/db/drizzle/mod.d.cts +1 -1
  102. package/dist/tsup/db/drizzle/mod.d.ts +1 -1
  103. package/dist/tsup/db/drizzle/mod.js +2 -2
  104. package/dist/tsup/db/mod.cjs +3 -3
  105. package/dist/tsup/db/mod.d.cts +1 -1
  106. package/dist/tsup/db/mod.d.ts +1 -1
  107. package/dist/tsup/db/mod.js +2 -2
  108. package/dist/tsup/{driver-Jo8v-kbU.d.ts → driver-CYZP9QYo.d.ts} +1 -1
  109. package/dist/tsup/{driver-iV8J-WMv.d.cts → driver-CoTFpipv.d.cts} +1 -1
  110. package/dist/tsup/driver-helpers/mod.cjs +7 -5
  111. package/dist/tsup/driver-helpers/mod.cjs.map +1 -1
  112. package/dist/tsup/driver-helpers/mod.d.cts +17 -18
  113. package/dist/tsup/driver-helpers/mod.d.ts +17 -18
  114. package/dist/tsup/driver-helpers/mod.js +11 -9
  115. package/dist/tsup/driver-test-suite/mod.cjs +1275 -228
  116. package/dist/tsup/driver-test-suite/mod.cjs.map +1 -1
  117. package/dist/tsup/driver-test-suite/mod.d.cts +6 -5
  118. package/dist/tsup/driver-test-suite/mod.d.ts +6 -5
  119. package/dist/tsup/driver-test-suite/mod.js +1581 -534
  120. package/dist/tsup/driver-test-suite/mod.js.map +1 -1
  121. package/dist/tsup/inspector/mod.cjs +4 -4
  122. package/dist/tsup/inspector/mod.js +3 -3
  123. package/dist/tsup/mod.cjs +15 -9
  124. package/dist/tsup/mod.cjs.map +1 -1
  125. package/dist/tsup/mod.d.cts +9 -9
  126. package/dist/tsup/mod.d.ts +9 -9
  127. package/dist/tsup/mod.js +19 -13
  128. package/dist/tsup/sandbox/client.cjs +28 -0
  129. package/dist/tsup/sandbox/client.cjs.map +1 -0
  130. package/dist/tsup/sandbox/client.d.cts +88 -0
  131. package/dist/tsup/sandbox/client.d.ts +88 -0
  132. package/dist/tsup/sandbox/client.js +28 -0
  133. package/dist/tsup/sandbox/client.js.map +1 -0
  134. package/dist/tsup/sandbox/index.cjs +761 -0
  135. package/dist/tsup/sandbox/index.cjs.map +1 -0
  136. package/dist/tsup/sandbox/index.d.cts +120 -0
  137. package/dist/tsup/sandbox/index.d.ts +120 -0
  138. package/dist/tsup/sandbox/index.js +761 -0
  139. package/dist/tsup/sandbox/index.js.map +1 -0
  140. package/dist/tsup/sandbox/providers/computesdk.cjs +3 -0
  141. package/dist/tsup/sandbox/providers/computesdk.cjs.map +1 -0
  142. package/dist/tsup/sandbox/providers/computesdk.d.cts +7 -0
  143. package/dist/tsup/sandbox/providers/computesdk.d.ts +7 -0
  144. package/dist/tsup/sandbox/providers/computesdk.js +3 -0
  145. package/dist/tsup/sandbox/providers/computesdk.js.map +1 -0
  146. package/dist/tsup/sandbox/providers/daytona.cjs +3 -0
  147. package/dist/tsup/sandbox/providers/daytona.cjs.map +1 -0
  148. package/dist/tsup/sandbox/providers/daytona.d.cts +1 -0
  149. package/dist/tsup/sandbox/providers/daytona.d.ts +1 -0
  150. package/dist/tsup/sandbox/providers/daytona.js +3 -0
  151. package/dist/tsup/sandbox/providers/daytona.js.map +1 -0
  152. package/dist/tsup/sandbox/providers/docker.cjs +3 -0
  153. package/dist/tsup/sandbox/providers/docker.cjs.map +1 -0
  154. package/dist/tsup/sandbox/providers/docker.d.cts +1 -0
  155. package/dist/tsup/sandbox/providers/docker.d.ts +1 -0
  156. package/dist/tsup/sandbox/providers/docker.js +3 -0
  157. package/dist/tsup/sandbox/providers/docker.js.map +1 -0
  158. package/dist/tsup/sandbox/providers/e2b.cjs +3 -0
  159. package/dist/tsup/sandbox/providers/e2b.cjs.map +1 -0
  160. package/dist/tsup/sandbox/providers/e2b.d.cts +1 -0
  161. package/dist/tsup/sandbox/providers/e2b.d.ts +1 -0
  162. package/dist/tsup/sandbox/providers/e2b.js +3 -0
  163. package/dist/tsup/sandbox/providers/e2b.js.map +1 -0
  164. package/dist/tsup/sandbox/providers/local.cjs +3 -0
  165. package/dist/tsup/sandbox/providers/local.cjs.map +1 -0
  166. package/dist/tsup/sandbox/providers/local.d.cts +1 -0
  167. package/dist/tsup/sandbox/providers/local.d.ts +1 -0
  168. package/dist/tsup/sandbox/providers/local.js +3 -0
  169. package/dist/tsup/sandbox/providers/local.js.map +1 -0
  170. package/dist/tsup/sandbox/providers/modal.cjs +3 -0
  171. package/dist/tsup/sandbox/providers/modal.cjs.map +1 -0
  172. package/dist/tsup/sandbox/providers/modal.d.cts +1 -0
  173. package/dist/tsup/sandbox/providers/modal.d.ts +1 -0
  174. package/dist/tsup/sandbox/providers/modal.js +3 -0
  175. package/dist/tsup/sandbox/providers/modal.js.map +1 -0
  176. package/dist/tsup/sandbox/providers/vercel.cjs +3 -0
  177. package/dist/tsup/sandbox/providers/vercel.cjs.map +1 -0
  178. package/dist/tsup/sandbox/providers/vercel.d.cts +1 -0
  179. package/dist/tsup/sandbox/providers/vercel.d.ts +1 -0
  180. package/dist/tsup/sandbox/providers/vercel.js +3 -0
  181. package/dist/tsup/sandbox/providers/vercel.js.map +1 -0
  182. package/dist/tsup/serve-test-suite/mod.cjs +451 -327
  183. package/dist/tsup/serve-test-suite/mod.cjs.map +1 -1
  184. package/dist/tsup/serve-test-suite/mod.js +362 -238
  185. package/dist/tsup/serve-test-suite/mod.js.map +1 -1
  186. package/dist/tsup/test/mod.cjs +17 -14
  187. package/dist/tsup/test/mod.cjs.map +1 -1
  188. package/dist/tsup/test/mod.d.cts +4 -4
  189. package/dist/tsup/test/mod.d.ts +4 -4
  190. package/dist/tsup/test/mod.js +14 -11
  191. package/dist/tsup/test/mod.js.map +1 -1
  192. package/dist/tsup/utils.cjs +3 -3
  193. package/dist/tsup/utils.js +2 -2
  194. package/dist/tsup/workflow/mod.cjs +6 -6
  195. package/dist/tsup/workflow/mod.d.cts +13 -9
  196. package/dist/tsup/workflow/mod.d.ts +13 -9
  197. package/dist/tsup/workflow/mod.js +5 -5
  198. package/package.json +113 -14
  199. package/src/actor/config.ts +94 -88
  200. package/src/actor/conn/drivers/websocket.ts +2 -1
  201. package/src/actor/contexts/base/actor.ts +27 -4
  202. package/src/actor/database.ts +6 -1
  203. package/src/actor/driver.ts +27 -8
  204. package/src/actor/errors.ts +10 -5
  205. package/src/actor/instance/connection-manager.ts +4 -3
  206. package/src/actor/instance/kv.ts +52 -9
  207. package/src/actor/instance/mod.ts +135 -84
  208. package/src/actor/instance/queue-manager.ts +2 -5
  209. package/src/actor/instance/queue.ts +31 -29
  210. package/src/actor/instance/state-manager.ts +7 -1
  211. package/src/actor/instance/traces-driver.ts +34 -36
  212. package/src/actor/metrics.ts +137 -0
  213. package/src/actor/protocol/old.ts +9 -12
  214. package/src/actor/router-websocket-endpoints.ts +12 -6
  215. package/src/actor/router.ts +46 -9
  216. package/src/actor/schema.ts +14 -22
  217. package/src/client/actor-common.ts +65 -0
  218. package/src/client/actor-conn.ts +71 -9
  219. package/src/client/actor-handle.ts +22 -5
  220. package/src/client/client.ts +32 -6
  221. package/src/client/config.ts +18 -21
  222. package/src/client/mod.ts +1 -0
  223. package/src/client/queue.ts +8 -6
  224. package/src/common/inline-websocket-adapter.ts +8 -2
  225. package/src/common/router.ts +1 -4
  226. package/src/common/utils.ts +2 -5
  227. package/src/db/config.ts +10 -5
  228. package/src/db/drizzle/mod.ts +51 -41
  229. package/src/db/mod.ts +54 -29
  230. package/src/db/shared.ts +42 -8
  231. package/src/driver-helpers/mod.ts +2 -1
  232. package/src/driver-helpers/sqlite-pool.ts +42 -0
  233. package/src/driver-helpers/utils.ts +0 -20
  234. package/src/driver-test-suite/mod.ts +11 -1
  235. package/src/driver-test-suite/tests/access-control.ts +19 -12
  236. package/src/driver-test-suite/tests/action-features.ts +20 -8
  237. package/src/driver-test-suite/tests/actor-conn.ts +94 -8
  238. package/src/driver-test-suite/tests/actor-db-kv-stats.ts +282 -0
  239. package/src/driver-test-suite/tests/actor-db-raw.ts +6 -2
  240. package/src/driver-test-suite/tests/actor-db.ts +101 -31
  241. package/src/driver-test-suite/tests/actor-inspector.ts +174 -32
  242. package/src/driver-test-suite/tests/actor-kv.ts +79 -33
  243. package/src/driver-test-suite/tests/actor-lifecycle.ts +4 -12
  244. package/src/driver-test-suite/tests/actor-queue.ts +125 -17
  245. package/src/driver-test-suite/tests/actor-run.ts +59 -55
  246. package/src/driver-test-suite/tests/actor-sandbox.ts +78 -0
  247. package/src/driver-test-suite/tests/actor-schedule.ts +1 -4
  248. package/src/driver-test-suite/tests/actor-sleep.ts +111 -0
  249. package/src/driver-test-suite/tests/actor-workflow.ts +387 -3
  250. package/src/driver-test-suite/tests/conn-error-serialization.ts +3 -1
  251. package/src/driver-test-suite/tests/raw-websocket.ts +5 -1
  252. package/src/drivers/default.ts +1 -3
  253. package/src/drivers/engine/actor-driver.ts +94 -21
  254. package/src/drivers/engine/config.ts +4 -12
  255. package/src/drivers/engine/mod.ts +1 -5
  256. package/src/drivers/file-system/actor.ts +43 -8
  257. package/src/drivers/file-system/global-state.ts +180 -64
  258. package/src/drivers/file-system/kv-limits.ts +1 -1
  259. package/src/drivers/file-system/sqlite-runtime.ts +13 -4
  260. package/src/engine-process/mod.ts +5 -1
  261. package/src/inspector/actor-inspector.ts +47 -21
  262. package/src/inspector/config.ts +1 -4
  263. package/src/inspector/mod.browser.ts +2 -2
  264. package/src/inspector/mod.ts +4 -1
  265. package/src/inspector/serve-ui.ts +0 -1
  266. package/src/inspector/workflow-history-json.ts +309 -0
  267. package/src/manager/gateway.ts +6 -2
  268. package/src/manager/router.ts +3 -3
  269. package/src/registry/config/index.ts +65 -12
  270. package/src/registry/config/runner.ts +19 -4
  271. package/src/registry/index.ts +42 -89
  272. package/src/sandbox/actor/db.ts +36 -0
  273. package/src/sandbox/actor/index.ts +476 -0
  274. package/src/sandbox/actor/session.ts +350 -0
  275. package/src/sandbox/actor.test.ts +36 -0
  276. package/src/sandbox/client.test.ts +484 -0
  277. package/src/sandbox/client.ts +707 -0
  278. package/src/sandbox/config.ts +151 -0
  279. package/src/sandbox/index.ts +41 -0
  280. package/src/sandbox/providers/computesdk.ts +1 -0
  281. package/src/sandbox/providers/daytona.ts +1 -0
  282. package/src/sandbox/providers/docker.ts +1 -0
  283. package/src/sandbox/providers/e2b.ts +1 -0
  284. package/src/sandbox/providers/local.ts +1 -0
  285. package/src/sandbox/providers/modal.ts +1 -0
  286. package/src/sandbox/providers/vercel.ts +1 -0
  287. package/src/sandbox/session-persist-driver.ts +180 -0
  288. package/src/sandbox/types.ts +138 -0
  289. package/src/serverless/configure.ts +5 -3
  290. package/src/serverless/router.test.ts +17 -9
  291. package/src/serverless/router.ts +20 -13
  292. package/src/test/mod.ts +3 -4
  293. package/src/utils/endpoint-parser.test.ts +6 -2
  294. package/src/utils/endpoint-parser.ts +6 -2
  295. package/src/utils/env-vars.ts +0 -2
  296. package/src/utils/node.ts +1 -1
  297. package/src/utils/serve.ts +10 -5
  298. package/src/utils.ts +6 -1
  299. package/src/workflow/constants.ts +1 -2
  300. package/src/workflow/context.ts +42 -9
  301. package/src/workflow/driver.ts +57 -23
  302. package/src/workflow/inspector.ts +7 -13
  303. package/src/workflow/mod.ts +91 -4
  304. package/dist/tsup/chunk-3B6PCYJB.cjs.map +0 -1
  305. package/dist/tsup/chunk-3GTO6H3E.js.map +0 -1
  306. package/dist/tsup/chunk-4KSHPFXF.cjs.map +0 -1
  307. package/dist/tsup/chunk-6LJAZ5R4.cjs +0 -96
  308. package/dist/tsup/chunk-6LJAZ5R4.cjs.map +0 -1
  309. package/dist/tsup/chunk-7HTNH26M.js.map +0 -1
  310. package/dist/tsup/chunk-ANKZ2FS6.js.map +0 -1
  311. package/dist/tsup/chunk-DZXDUGLL.js.map +0 -1
  312. package/dist/tsup/chunk-GXRVSSVD.cjs.map +0 -1
  313. package/dist/tsup/chunk-H5TSEPN4.cjs +0 -645
  314. package/dist/tsup/chunk-H5TSEPN4.cjs.map +0 -1
  315. package/dist/tsup/chunk-HKOSZKKZ.cjs.map +0 -1
  316. package/dist/tsup/chunk-I6PL6QIY.js.map +0 -1
  317. package/dist/tsup/chunk-KJSYAUOM.js.map +0 -1
  318. package/dist/tsup/chunk-KTWY3K6Z.js.map +0 -1
  319. package/dist/tsup/chunk-L47L3ZWJ.cjs.map +0 -1
  320. package/dist/tsup/chunk-LK36OGGO.cjs.map +0 -1
  321. package/dist/tsup/chunk-M6H4XIF4.js.map +0 -1
  322. package/dist/tsup/chunk-N4KRDJ56.js.map +0 -1
  323. package/dist/tsup/chunk-SR3KQE7Q.cjs.map +0 -1
  324. package/dist/tsup/chunk-TEFYRRAK.js +0 -645
  325. package/dist/tsup/chunk-TEFYRRAK.js.map +0 -1
  326. package/dist/tsup/chunk-TEUL4UYN.cjs.map +0 -1
  327. package/dist/tsup/chunk-UDMRZR6A.js.map +0 -1
  328. package/dist/tsup/chunk-UWAGLDT6.cjs.map +0 -1
  329. package/dist/tsup/chunk-VKVNIQRQ.js.map +0 -1
  330. package/dist/tsup/chunk-ZFY5J2EP.cjs.map +0 -1
  331. package/src/db/sqlite-vfs.ts +0 -12
  332. /package/dist/tsup/{chunk-HBYEYBIC.js.map → chunk-EONWXYMN.js.map} +0 -0
  333. /package/dist/tsup/{chunk-5UEFNG7P.js.map → chunk-I5I6OALK.js.map} +0 -0
@@ -0,0 +1,761 @@
1
+ import {
2
+ buildTerminalWebSocketUrl,
3
+ connectTerminal,
4
+ deleteFile,
5
+ downloadFile,
6
+ followProcessLogs,
7
+ listFiles,
8
+ mkdirFs,
9
+ moveFile,
10
+ statFile,
11
+ uploadBatch,
12
+ uploadFile
13
+ } from "../chunk-JRKPV5NJ.js";
14
+ import {
15
+ actor
16
+ } from "../chunk-UQZRMTM3.js";
17
+ import "../chunk-YGYGANCA.js";
18
+ import "../chunk-EONWXYMN.js";
19
+ import {
20
+ db
21
+ } from "../chunk-MLK3GY6P.js";
22
+ import "../chunk-GFGRBYO2.js";
23
+ import "../chunk-PQWI44WD.js";
24
+ import "../chunk-LXUQ667X.js";
25
+ import "../chunk-C22JYHVT.js";
26
+ import "../chunk-VWYO36X4.js";
27
+ import "../chunk-AKUJ5OTO.js";
28
+ import "../chunk-424PT5DM.js";
29
+
30
+ // src/sandbox/actor/index.ts
31
+ import { SandboxAgent } from "sandbox-agent";
32
+
33
+ // src/sandbox/config.ts
34
+ import { z } from "zod/v4";
35
+ var zFunction = () => z.custom((val) => typeof val === "function");
36
+ var SandboxProviderSchema = z.object({
37
+ name: z.string(),
38
+ create: zFunction(),
39
+ destroy: zFunction(),
40
+ getUrl: zFunction().optional(),
41
+ getFetch: zFunction().optional(),
42
+ ensureServer: zFunction().optional()
43
+ });
44
+ var SandboxActorOptionsSchema = z.object({
45
+ // Log if the actor still thinks a turn is active but no new session event
46
+ // has arrived for this long.
47
+ warningAfterMs: z.number().nonnegative().default(3e4),
48
+ // Clear active-turn state after this timeout so a missing terminal event
49
+ // cannot keep the actor awake forever.
50
+ staleAfterMs: z.number().positive().default(5 * 6e4)
51
+ }).strict().prefault(() => ({})).transform((value) => ({
52
+ ...value,
53
+ warningAfterMs: Math.min(value.warningAfterMs, value.staleAfterMs)
54
+ }));
55
+ var SandboxActorConfigSchema = z.object({
56
+ provider: SandboxProviderSchema.optional(),
57
+ createProvider: zFunction().optional(),
58
+ persistRawEvents: z.boolean().optional(),
59
+ destroyActor: z.boolean().default(false),
60
+ options: SandboxActorOptionsSchema,
61
+ onBeforeConnect: zFunction().optional(),
62
+ onSessionEvent: zFunction().optional(),
63
+ onPermissionRequest: zFunction().optional()
64
+ }).strict().refine(
65
+ (data) => data.provider !== void 0 !== (data.createProvider !== void 0),
66
+ {
67
+ message: "Sandbox actor config must define exactly one of 'provider' or 'createProvider'"
68
+ }
69
+ );
70
+
71
+ // src/sandbox/session-persist-driver.ts
72
+ function parseCursor(cursor) {
73
+ if (!cursor) {
74
+ return 0;
75
+ }
76
+ const value = Number(cursor);
77
+ if (!Number.isFinite(value) || value < 0) {
78
+ return 0;
79
+ }
80
+ return Math.floor(value);
81
+ }
82
+ function nextCursor(offset, limit, itemCount) {
83
+ if (itemCount < limit) {
84
+ return void 0;
85
+ }
86
+ return String(offset + itemCount);
87
+ }
88
+ var SqliteSessionPersistDriver = class {
89
+ #db;
90
+ #persistRawEvents;
91
+ constructor(db2, persistRawEvents) {
92
+ this.#db = db2;
93
+ this.#persistRawEvents = persistRawEvents;
94
+ }
95
+ async getSession(id) {
96
+ const rows = await this.#db.execute(
97
+ "SELECT record_json FROM sandbox_agent_sessions WHERE id = ? LIMIT 1",
98
+ id
99
+ );
100
+ const row = rows[0];
101
+ if (!row) {
102
+ return void 0;
103
+ }
104
+ return JSON.parse(row.record_json);
105
+ }
106
+ async listSessions(request = {}) {
107
+ const limit = request.limit ?? 50;
108
+ const offset = parseCursor(request.cursor);
109
+ const rows = await this.#db.execute(
110
+ `
111
+ SELECT record_json
112
+ FROM sandbox_agent_sessions
113
+ ORDER BY created_at DESC, id DESC
114
+ LIMIT ? OFFSET ?
115
+ `,
116
+ limit,
117
+ offset
118
+ );
119
+ return {
120
+ items: rows.map((row) => JSON.parse(row.record_json)),
121
+ nextCursor: nextCursor(offset, limit, rows.length)
122
+ };
123
+ }
124
+ async updateSession(session) {
125
+ await this.#db.execute(
126
+ `
127
+ INSERT INTO sandbox_agent_sessions (id, created_at, record_json)
128
+ VALUES (?, ?, ?)
129
+ ON CONFLICT(id) DO UPDATE SET
130
+ created_at = excluded.created_at,
131
+ record_json = excluded.record_json
132
+ `,
133
+ session.id,
134
+ session.createdAt,
135
+ JSON.stringify(session)
136
+ );
137
+ }
138
+ async listEvents(request) {
139
+ const limit = request.limit ?? 200;
140
+ const offset = parseCursor(request.cursor);
141
+ const rows = await this.#db.execute(
142
+ `
143
+ SELECT
144
+ id,
145
+ event_index,
146
+ session_id,
147
+ created_at,
148
+ connection_id,
149
+ sender,
150
+ payload_json
151
+ FROM sandbox_agent_events
152
+ WHERE session_id = ?
153
+ ORDER BY event_index ASC
154
+ LIMIT ? OFFSET ?
155
+ `,
156
+ request.sessionId,
157
+ limit,
158
+ offset
159
+ );
160
+ return {
161
+ items: rows.map((row) => ({
162
+ id: row.id,
163
+ eventIndex: row.event_index,
164
+ sessionId: row.session_id,
165
+ createdAt: row.created_at,
166
+ connectionId: row.connection_id,
167
+ sender: row.sender,
168
+ payload: JSON.parse(row.payload_json)
169
+ })),
170
+ nextCursor: nextCursor(offset, limit, rows.length)
171
+ };
172
+ }
173
+ async insertEvent(_sessionId, event) {
174
+ const payload = JSON.stringify(event.payload);
175
+ await this.#db.execute(
176
+ `
177
+ INSERT INTO sandbox_agent_events (
178
+ id,
179
+ session_id,
180
+ event_index,
181
+ created_at,
182
+ connection_id,
183
+ sender,
184
+ payload_json,
185
+ raw_payload_json
186
+ )
187
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?)
188
+ ON CONFLICT(session_id, event_index) DO UPDATE SET
189
+ id = excluded.id,
190
+ created_at = excluded.created_at,
191
+ connection_id = excluded.connection_id,
192
+ sender = excluded.sender,
193
+ payload_json = excluded.payload_json,
194
+ raw_payload_json = excluded.raw_payload_json
195
+ `,
196
+ event.id,
197
+ event.sessionId,
198
+ event.eventIndex,
199
+ event.createdAt,
200
+ event.connectionId,
201
+ event.sender,
202
+ payload,
203
+ this.#persistRawEvents ? payload : null
204
+ );
205
+ }
206
+ };
207
+
208
+ // src/sandbox/types.ts
209
+ var SANDBOX_AGENT_HOOK_METHODS = [
210
+ "onSessionEvent",
211
+ "onPermissionRequest"
212
+ ];
213
+ var SANDBOX_AGENT_ACTION_METHODS = [
214
+ "dispose",
215
+ "listSessions",
216
+ "getSession",
217
+ "getEvents",
218
+ "createSession",
219
+ "resumeSession",
220
+ "resumeOrCreateSession",
221
+ "destroySandbox",
222
+ "destroySession",
223
+ "setSessionMode",
224
+ "setSessionConfigOption",
225
+ "setSessionModel",
226
+ "setSessionThoughtLevel",
227
+ "getSessionConfigOptions",
228
+ "getSessionModes",
229
+ "rawSendSessionMethod",
230
+ "respondPermission",
231
+ "rawRespondPermission",
232
+ "getHealth",
233
+ "listAgents",
234
+ "getAgent",
235
+ "installAgent",
236
+ "listAcpServers",
237
+ "listFsEntries",
238
+ "readFsFile",
239
+ "writeFsFile",
240
+ "deleteFsEntry",
241
+ "mkdirFs",
242
+ "moveFs",
243
+ "statFs",
244
+ "uploadFsBatch",
245
+ "getMcpConfig",
246
+ "setMcpConfig",
247
+ "deleteMcpConfig",
248
+ "getSkillsConfig",
249
+ "setSkillsConfig",
250
+ "deleteSkillsConfig",
251
+ "getProcessConfig",
252
+ "setProcessConfig",
253
+ "createProcess",
254
+ "runProcess",
255
+ "listProcesses",
256
+ "getProcess",
257
+ "stopProcess",
258
+ "killProcess",
259
+ "deleteProcess",
260
+ "getProcessLogs",
261
+ "followProcessLogs",
262
+ "sendProcessInput",
263
+ "resizeProcessTerminal",
264
+ "buildProcessTerminalWebSocketUrl",
265
+ "connectProcessTerminalWebSocket",
266
+ "connectProcessTerminal"
267
+ ];
268
+
269
+ // src/sandbox/actor/db.ts
270
+ async function migrateSandboxTables(db2) {
271
+ await db2.execute(`
272
+ DROP TABLE IF EXISTS sandbox_actor_meta;
273
+ DROP TABLE IF EXISTS sandbox_actor_sessions;
274
+ `);
275
+ await db2.execute(`
276
+ CREATE TABLE IF NOT EXISTS sandbox_agent_sessions (
277
+ id TEXT PRIMARY KEY,
278
+ created_at INTEGER NOT NULL,
279
+ record_json TEXT NOT NULL
280
+ );
281
+
282
+ CREATE TABLE IF NOT EXISTS sandbox_agent_events (
283
+ id TEXT PRIMARY KEY,
284
+ session_id TEXT NOT NULL,
285
+ event_index INTEGER NOT NULL,
286
+ created_at INTEGER NOT NULL,
287
+ connection_id TEXT NOT NULL,
288
+ sender TEXT NOT NULL,
289
+ payload_json TEXT NOT NULL,
290
+ raw_payload_json TEXT,
291
+ UNIQUE(session_id, event_index)
292
+ );
293
+
294
+ CREATE INDEX IF NOT EXISTS sandbox_agent_sessions_created_at_idx
295
+ ON sandbox_agent_sessions (created_at DESC);
296
+
297
+ CREATE INDEX IF NOT EXISTS sandbox_agent_events_session_event_index_idx
298
+ ON sandbox_agent_events (session_id, event_index ASC);
299
+ `);
300
+ }
301
+
302
+ // src/sandbox/actor/session.ts
303
+ function syncPreventSleep(c) {
304
+ c.setPreventSleep(
305
+ c.vars.activeHooks.size > 0 || c.vars.activeSessionIds.size > 0
306
+ );
307
+ }
308
+ function clearTimerMap(map, sessionId) {
309
+ const timeout = map.get(sessionId);
310
+ if (timeout) {
311
+ clearTimeout(timeout);
312
+ map.delete(sessionId);
313
+ }
314
+ }
315
+ function clearTimerMapAll(map) {
316
+ for (const timeout of map.values()) {
317
+ clearTimeout(timeout);
318
+ }
319
+ map.clear();
320
+ }
321
+ function clearSessionTimers(vars, sessionId) {
322
+ clearTimerMap(vars.warningTimeoutBySessionId, sessionId);
323
+ clearTimerMap(vars.staleTimeoutBySessionId, sessionId);
324
+ }
325
+ function clearAllSessionTimers(vars) {
326
+ clearTimerMapAll(vars.warningTimeoutBySessionId);
327
+ clearTimerMapAll(vars.staleTimeoutBySessionId);
328
+ }
329
+ function scheduleSessionTimers(c, options, sessionId) {
330
+ clearSessionTimers(c.vars, sessionId);
331
+ const lastEventAt = c.vars.lastEventAtBySessionId.get(sessionId);
332
+ if (lastEventAt === void 0) {
333
+ return;
334
+ }
335
+ const warningDelay = Math.max(
336
+ 0,
337
+ options.warningAfterMs - (Date.now() - lastEventAt)
338
+ );
339
+ c.vars.warningTimeoutBySessionId.set(
340
+ sessionId,
341
+ setTimeout(() => {
342
+ if (!c.vars.activeSessionIds.has(sessionId)) {
343
+ return;
344
+ }
345
+ c.log.warn({
346
+ msg: "sandbox actor turn is still active without new session events",
347
+ sessionId,
348
+ idleMs: Date.now() - lastEventAt
349
+ });
350
+ }, warningDelay)
351
+ );
352
+ const staleDelay = Math.max(
353
+ 0,
354
+ options.staleAfterMs - (Date.now() - lastEventAt)
355
+ );
356
+ c.vars.staleTimeoutBySessionId.set(
357
+ sessionId,
358
+ setTimeout(() => {
359
+ if (!c.vars.activeSessionIds.has(sessionId)) {
360
+ return;
361
+ }
362
+ c.log.warn({
363
+ msg: "sandbox actor cleared stale active turn state after inactivity timeout",
364
+ sessionId,
365
+ idleMs: Date.now() - lastEventAt
366
+ });
367
+ clearSessionActiveInMemory(c, sessionId);
368
+ syncPreventSleep(c);
369
+ }, staleDelay)
370
+ );
371
+ }
372
+ function markSessionActiveInMemory(c, options, sessionId, requestId) {
373
+ c.vars.activeSessionIds.add(sessionId);
374
+ if (requestId) {
375
+ const requestIds = c.vars.activePromptRequestIdsBySessionId.get(sessionId) ?? [];
376
+ if (!requestIds.includes(requestId)) {
377
+ requestIds.push(requestId);
378
+ c.vars.activePromptRequestIdsBySessionId.set(
379
+ sessionId,
380
+ requestIds
381
+ );
382
+ }
383
+ }
384
+ c.vars.lastEventAtBySessionId.set(sessionId, Date.now());
385
+ scheduleSessionTimers(c, options, sessionId);
386
+ }
387
+ function clearSessionActiveInMemory(c, sessionId, requestId) {
388
+ if (requestId) {
389
+ const remaining = (c.vars.activePromptRequestIdsBySessionId.get(sessionId) ?? []).filter(
390
+ (activeRequestId) => activeRequestId !== requestId
391
+ );
392
+ if (remaining.length > 0) {
393
+ c.vars.activePromptRequestIdsBySessionId.set(
394
+ sessionId,
395
+ remaining
396
+ );
397
+ return;
398
+ }
399
+ }
400
+ c.vars.activeSessionIds.delete(sessionId);
401
+ c.vars.activePromptRequestIdsBySessionId.delete(sessionId);
402
+ c.vars.lastEventAtBySessionId.delete(sessionId);
403
+ clearSessionTimers(c.vars, sessionId);
404
+ }
405
+ function addSubscribedSession(c, sessionId) {
406
+ if (c.state.subscribedSessionIds.includes(sessionId)) {
407
+ return;
408
+ }
409
+ c.state.subscribedSessionIds.push(sessionId);
410
+ }
411
+ function removeSubscribedSession(c, sessionId) {
412
+ clearSessionActiveInMemory(c, sessionId);
413
+ c.state.subscribedSessionIds = c.state.subscribedSessionIds.filter(
414
+ (id) => id !== sessionId
415
+ );
416
+ syncPreventSleep(c);
417
+ }
418
+ function clearAllActiveSessions(c) {
419
+ c.vars.activeSessionIds.clear();
420
+ c.vars.activePromptRequestIdsBySessionId.clear();
421
+ c.vars.lastEventAtBySessionId.clear();
422
+ clearAllSessionTimers(c.vars);
423
+ syncPreventSleep(c);
424
+ }
425
+ function runHook(c, sessionId, name, callback) {
426
+ const promise = Promise.resolve(callback()).catch((error) => {
427
+ c.log.error({
428
+ msg: `sandbox actor ${name} hook failed`,
429
+ sessionId,
430
+ error
431
+ });
432
+ }).finally(() => {
433
+ c.vars.activeHooks.delete(promise);
434
+ syncPreventSleep(c);
435
+ });
436
+ c.vars.activeHooks.add(promise);
437
+ syncPreventSleep(c);
438
+ c.waitUntil(promise);
439
+ }
440
+ function trackSessionTurnFromEvent(c, options, sessionId, event) {
441
+ const payload = event.payload;
442
+ const method = typeof (payload == null ? void 0 : payload.method) === "string" ? payload.method : null;
443
+ const rawId = payload == null ? void 0 : payload.id;
444
+ const id = typeof rawId === "string" ? rawId : typeof rawId === "number" ? String(rawId) : null;
445
+ if (event.sender === "client" && method === "session/prompt") {
446
+ markSessionActiveInMemory(
447
+ c,
448
+ options,
449
+ sessionId,
450
+ id ?? `session-prompt:${event.id}`
451
+ );
452
+ syncPreventSleep(c);
453
+ return;
454
+ }
455
+ if (!c.vars.activeSessionIds.has(sessionId)) {
456
+ return;
457
+ }
458
+ if (event.sender === "agent" && id) {
459
+ const requestIds = c.vars.activePromptRequestIdsBySessionId.get(sessionId) ?? [];
460
+ if (requestIds.length === 0 || requestIds.includes(id)) {
461
+ clearSessionActiveInMemory(c, sessionId, id);
462
+ syncPreventSleep(c);
463
+ return;
464
+ }
465
+ }
466
+ c.vars.lastEventAtBySessionId.set(sessionId, Date.now());
467
+ scheduleSessionTimers(c, options, sessionId);
468
+ }
469
+ function subscribeToSession(c, config, sessionId) {
470
+ if (c.vars.unsubscribeBySessionId.has(sessionId)) {
471
+ return;
472
+ }
473
+ const client = c.vars.sandboxAgentClient;
474
+ if (!client) {
475
+ return;
476
+ }
477
+ const options = config.options;
478
+ const event = client.onSessionEvent(sessionId, (sessionEvent) => {
479
+ trackSessionTurnFromEvent(c, options, sessionId, sessionEvent);
480
+ if (!config.onSessionEvent) {
481
+ return;
482
+ }
483
+ runHook(
484
+ c,
485
+ sessionId,
486
+ "onSessionEvent",
487
+ () => config.onSessionEvent(c, sessionId, sessionEvent)
488
+ );
489
+ });
490
+ const permission = client.onPermissionRequest(
491
+ sessionId,
492
+ (request) => {
493
+ markSessionActiveInMemory(c, options, sessionId);
494
+ syncPreventSleep(c);
495
+ if (!config.onPermissionRequest) {
496
+ return;
497
+ }
498
+ runHook(
499
+ c,
500
+ sessionId,
501
+ "onPermissionRequest",
502
+ () => config.onPermissionRequest(c, sessionId, request)
503
+ );
504
+ }
505
+ );
506
+ c.vars.unsubscribeBySessionId.set(sessionId, { event, permission });
507
+ }
508
+
509
+ // src/sandbox/actor/index.ts
510
+ async function teardownAgentRuntime(vars) {
511
+ var _a, _b;
512
+ for (const subscription of vars.unsubscribeBySessionId.values()) {
513
+ (_a = subscription.event) == null ? void 0 : _a.call(subscription);
514
+ (_b = subscription.permission) == null ? void 0 : _b.call(subscription);
515
+ }
516
+ vars.unsubscribeBySessionId.clear();
517
+ clearAllSessionTimers(vars);
518
+ vars.activeHooks.clear();
519
+ if (vars.sandboxAgentClient) {
520
+ try {
521
+ await vars.sandboxAgentClient.dispose();
522
+ } finally {
523
+ vars.sandboxAgentClient = null;
524
+ }
525
+ }
526
+ vars.provider = null;
527
+ }
528
+ async function resolveProvider(c, config) {
529
+ if (c.vars.provider) {
530
+ return c.vars.provider;
531
+ }
532
+ const provider = config.provider !== void 0 ? config.provider : await config.createProvider(c);
533
+ if (c.state.providerName && c.state.providerName !== provider.name) {
534
+ throw new Error(
535
+ `sandbox actor provider mismatch: expected ${c.state.providerName}, received ${provider.name}`
536
+ );
537
+ }
538
+ if (!c.state.providerName) {
539
+ c.state.providerName = provider.name;
540
+ }
541
+ c.vars.provider = provider;
542
+ return provider;
543
+ }
544
+ async function ensureAgent(c, config, persistRawEvents) {
545
+ if (c.vars.sandboxAgentClient) {
546
+ return c.vars.sandboxAgentClient;
547
+ }
548
+ const provider = await resolveProvider(c, config);
549
+ c.vars.sandboxAgentClient = await SandboxAgent.start({
550
+ sandbox: provider,
551
+ sandboxId: c.state.sandboxId ?? void 0,
552
+ persist: new SqliteSessionPersistDriver(c.db, persistRawEvents)
553
+ });
554
+ if (!c.state.sandboxId && c.vars.sandboxAgentClient.sandboxId) {
555
+ c.state.sandboxId = c.vars.sandboxAgentClient.sandboxId;
556
+ }
557
+ for (const sessionId of c.state.subscribedSessionIds) {
558
+ subscribeToSession(c, config, sessionId);
559
+ }
560
+ return c.vars.sandboxAgentClient;
561
+ }
562
+ var READ_ONLY_ACTIONS = /* @__PURE__ */ new Set([
563
+ "listSessions",
564
+ "getSession",
565
+ "getEvents"
566
+ ]);
567
+ var SESSION_RETURNING_ACTIONS = /* @__PURE__ */ new Set([
568
+ "createSession",
569
+ "resumeSession",
570
+ "resumeOrCreateSession",
571
+ "getSession"
572
+ ]);
573
+ var SESSION_SENDING_ACTIONS = /* @__PURE__ */ new Set([
574
+ "rawSendSessionMethod",
575
+ "respondPermission",
576
+ "rawRespondPermission"
577
+ ]);
578
+ function isSessionLike(value) {
579
+ return typeof value === "object" && value !== null && "id" in value && typeof value.id === "string";
580
+ }
581
+ function buildProxyActions(config) {
582
+ const actions = {};
583
+ for (const actionName of SANDBOX_AGENT_ACTION_METHODS) {
584
+ actions[actionName] = async (c, ...args) => {
585
+ var _a, _b;
586
+ if (c.state.sandboxDestroyed) {
587
+ if (READ_ONLY_ACTIONS.has(actionName)) {
588
+ const persist = new SqliteSessionPersistDriver(
589
+ c.db,
590
+ config.persistRawEvents ?? false
591
+ );
592
+ if (actionName === "listSessions") {
593
+ return persist.listSessions(args[0]);
594
+ }
595
+ if (actionName === "getSession") {
596
+ return persist.getSession(args[0]);
597
+ }
598
+ if (actionName === "getEvents") {
599
+ return persist.listEvents(args[0]);
600
+ }
601
+ }
602
+ throw new Error(
603
+ "sandbox has been destroyed; only read-only actions (listSessions, getSession, getEvents) are available"
604
+ );
605
+ }
606
+ const options = config.options;
607
+ if (SESSION_SENDING_ACTIONS.has(actionName) && typeof args[0] === "string") {
608
+ markSessionActiveInMemory(c, options, args[0]);
609
+ syncPreventSleep(c);
610
+ }
611
+ const agent = await ensureAgent(
612
+ c,
613
+ config,
614
+ config.persistRawEvents ?? false
615
+ );
616
+ const method = agent[actionName];
617
+ const result = await method.apply(agent, args);
618
+ if (actionName === "dispose") {
619
+ await teardownAgentRuntime(c.vars);
620
+ clearAllActiveSessions(c);
621
+ } else if (actionName === "destroySession" && isSessionLike(result)) {
622
+ const sub = c.vars.unsubscribeBySessionId.get(result.id);
623
+ (_a = sub == null ? void 0 : sub.event) == null ? void 0 : _a.call(sub);
624
+ (_b = sub == null ? void 0 : sub.permission) == null ? void 0 : _b.call(sub);
625
+ c.vars.unsubscribeBySessionId.delete(result.id);
626
+ removeSubscribedSession(c, result.id);
627
+ } else if (SESSION_RETURNING_ACTIONS.has(actionName) && isSessionLike(result)) {
628
+ addSubscribedSession(c, result.id);
629
+ subscribeToSession(c, config, result.id);
630
+ } else if (actionName === "listSessions" && result && typeof result === "object") {
631
+ const items = result.items;
632
+ if (Array.isArray(items)) {
633
+ for (const item of items) {
634
+ if (isSessionLike(item)) {
635
+ addSubscribedSession(c, item.id);
636
+ subscribeToSession(c, config, item.id);
637
+ }
638
+ }
639
+ }
640
+ }
641
+ return result;
642
+ };
643
+ }
644
+ return actions;
645
+ }
646
+ function sandboxActor(config) {
647
+ const parsedConfig = SandboxActorConfigSchema.parse(
648
+ config
649
+ );
650
+ return actor({
651
+ createState: async () => ({
652
+ sandboxId: null,
653
+ providerName: null,
654
+ subscribedSessionIds: [],
655
+ sandboxDestroyed: false
656
+ }),
657
+ createVars: () => ({
658
+ sandboxAgentClient: null,
659
+ provider: null,
660
+ activeSessionIds: /* @__PURE__ */ new Set(),
661
+ activePromptRequestIdsBySessionId: /* @__PURE__ */ new Map(),
662
+ lastEventAtBySessionId: /* @__PURE__ */ new Map(),
663
+ unsubscribeBySessionId: /* @__PURE__ */ new Map(),
664
+ activeHooks: /* @__PURE__ */ new Set(),
665
+ warningTimeoutBySessionId: /* @__PURE__ */ new Map(),
666
+ staleTimeoutBySessionId: /* @__PURE__ */ new Map()
667
+ }),
668
+ db: db({
669
+ onMigrate: migrateSandboxTables
670
+ }),
671
+ onSleep: async (c) => {
672
+ await teardownAgentRuntime(c.vars);
673
+ },
674
+ onDestroy: async (c) => {
675
+ const sandboxContext = c;
676
+ clearAllActiveSessions(sandboxContext);
677
+ await teardownAgentRuntime(sandboxContext.vars);
678
+ if (sandboxContext.state.sandboxId) {
679
+ try {
680
+ const provider = await resolveProvider(
681
+ sandboxContext,
682
+ parsedConfig
683
+ );
684
+ await provider.destroy(sandboxContext.state.sandboxId);
685
+ } finally {
686
+ sandboxContext.state.sandboxId = null;
687
+ sandboxContext.state.providerName = null;
688
+ }
689
+ }
690
+ sandboxContext.state.subscribedSessionIds = [];
691
+ },
692
+ onBeforeConnect: parsedConfig.onBeforeConnect,
693
+ actions: {
694
+ // Destroys the sandbox environment but keeps the actor alive so
695
+ // session transcripts remain accessible via read-only actions.
696
+ // If `destroyActor` is set in the config, the actor is also
697
+ // destroyed after the sandbox.
698
+ destroy: async (c) => {
699
+ if (c.state.sandboxDestroyed) {
700
+ return;
701
+ }
702
+ clearAllActiveSessions(c);
703
+ await teardownAgentRuntime(c.vars);
704
+ if (c.state.sandboxId) {
705
+ const provider = await resolveProvider(c, parsedConfig);
706
+ await provider.destroy(c.state.sandboxId);
707
+ c.state.sandboxId = null;
708
+ }
709
+ c.state.sandboxDestroyed = true;
710
+ if (parsedConfig.destroyActor) {
711
+ c.destroy();
712
+ }
713
+ },
714
+ getSandboxUrl: async (c) => {
715
+ if (c.state.sandboxDestroyed) {
716
+ throw new Error("sandbox has been destroyed");
717
+ }
718
+ const provider = await resolveProvider(c, parsedConfig);
719
+ if (!c.state.sandboxId) {
720
+ const agent = await ensureAgent(
721
+ c,
722
+ parsedConfig,
723
+ parsedConfig.persistRawEvents ?? false
724
+ );
725
+ if (!c.state.sandboxId && agent.sandboxId) {
726
+ c.state.sandboxId = agent.sandboxId;
727
+ }
728
+ }
729
+ if (!c.state.sandboxId) {
730
+ throw new Error("sandbox ID is not available");
731
+ }
732
+ if (!provider.getUrl) {
733
+ throw new Error(
734
+ `provider "${provider.name}" does not support getUrl; direct sandbox URL access is not available for this provider`
735
+ );
736
+ }
737
+ return { url: await provider.getUrl(c.state.sandboxId) };
738
+ },
739
+ ...buildProxyActions(parsedConfig)
740
+ }
741
+ });
742
+ }
743
+ export {
744
+ SANDBOX_AGENT_ACTION_METHODS,
745
+ SANDBOX_AGENT_HOOK_METHODS,
746
+ SandboxActorConfigSchema,
747
+ SandboxActorOptionsSchema,
748
+ buildTerminalWebSocketUrl,
749
+ connectTerminal,
750
+ deleteFile,
751
+ downloadFile,
752
+ followProcessLogs,
753
+ listFiles,
754
+ mkdirFs,
755
+ moveFile,
756
+ sandboxActor,
757
+ statFile,
758
+ uploadBatch,
759
+ uploadFile
760
+ };
761
+ //# sourceMappingURL=index.js.map