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,350 @@
1
+ /**
2
+ * Session lifecycle management for the sandbox actor.
3
+ *
4
+ * Manages three concerns:
5
+ *
6
+ * 1. **Subscription tracking** — which sandbox-agent sessions this actor is
7
+ * listening to for events and permission requests. Subscriptions are
8
+ * persisted in `state.subscribedSessionIds` so they survive sleep/wake.
9
+ *
10
+ * 2. **Active turn tracking** — detects when a session has an in-flight
11
+ * prompt turn by observing JSON-RPC envelopes on the event stream.
12
+ * A client `session/prompt` request starts a turn; the matching agent
13
+ * response (same JSON-RPC id) ends it. While any turn is active the
14
+ * actor prevents sleep.
15
+ *
16
+ * 3. **Idle timers** — if a turn appears stuck (no events for `warningAfterMs`),
17
+ * a warning is logged. After `staleAfterMs` the turn state is force-cleared
18
+ * so a missing terminal response cannot keep the actor awake forever.
19
+ */
20
+
21
+ import type { SessionPermissionRequest } from "sandbox-agent";
22
+ import type { SandboxActorConfig, SandboxActorOptionsRuntime } from "../config";
23
+ import type {
24
+ SandboxActionContext,
25
+ SandboxActorVars,
26
+ SandboxSessionEvent,
27
+ } from "../types";
28
+
29
+ // --- Prevent-sleep synchronization ---
30
+
31
+ export function syncPreventSleep<TConnParams>(
32
+ c: SandboxActionContext<TConnParams>,
33
+ ): void {
34
+ c.setPreventSleep(
35
+ c.vars.activeHooks.size > 0 || c.vars.activeSessionIds.size > 0,
36
+ );
37
+ }
38
+
39
+ // --- Session timer management ---
40
+
41
+ function clearTimerMap(
42
+ map: Map<string, ReturnType<typeof setTimeout>>,
43
+ sessionId: string,
44
+ ): void {
45
+ const timeout = map.get(sessionId);
46
+ if (timeout) {
47
+ clearTimeout(timeout);
48
+ map.delete(sessionId);
49
+ }
50
+ }
51
+
52
+ function clearTimerMapAll(
53
+ map: Map<string, ReturnType<typeof setTimeout>>,
54
+ ): void {
55
+ for (const timeout of map.values()) {
56
+ clearTimeout(timeout);
57
+ }
58
+ map.clear();
59
+ }
60
+
61
+ function clearSessionTimers(vars: SandboxActorVars, sessionId: string): void {
62
+ clearTimerMap(vars.warningTimeoutBySessionId, sessionId);
63
+ clearTimerMap(vars.staleTimeoutBySessionId, sessionId);
64
+ }
65
+
66
+ export function clearAllSessionTimers(vars: SandboxActorVars): void {
67
+ clearTimerMapAll(vars.warningTimeoutBySessionId);
68
+ clearTimerMapAll(vars.staleTimeoutBySessionId);
69
+ }
70
+
71
+ // Schedules warning and stale timeouts for a session based on the last
72
+ // event timestamp. If the session goes idle for too long, the stale
73
+ // timeout clears the active turn so the actor can sleep.
74
+ function scheduleSessionTimers<TConnParams>(
75
+ c: SandboxActionContext<TConnParams>,
76
+ options: SandboxActorOptionsRuntime,
77
+ sessionId: string,
78
+ ): void {
79
+ clearSessionTimers(c.vars, sessionId);
80
+
81
+ const lastEventAt = c.vars.lastEventAtBySessionId.get(sessionId);
82
+ if (lastEventAt === undefined) {
83
+ return;
84
+ }
85
+
86
+ const warningDelay = Math.max(
87
+ 0,
88
+ options.warningAfterMs - (Date.now() - lastEventAt),
89
+ );
90
+ c.vars.warningTimeoutBySessionId.set(
91
+ sessionId,
92
+ setTimeout(() => {
93
+ if (!c.vars.activeSessionIds.has(sessionId)) {
94
+ return;
95
+ }
96
+
97
+ c.log.warn({
98
+ msg: "sandbox actor turn is still active without new session events",
99
+ sessionId,
100
+ idleMs: Date.now() - lastEventAt,
101
+ });
102
+ }, warningDelay),
103
+ );
104
+
105
+ const staleDelay = Math.max(
106
+ 0,
107
+ options.staleAfterMs - (Date.now() - lastEventAt),
108
+ );
109
+ c.vars.staleTimeoutBySessionId.set(
110
+ sessionId,
111
+ setTimeout(() => {
112
+ if (!c.vars.activeSessionIds.has(sessionId)) {
113
+ return;
114
+ }
115
+
116
+ c.log.warn({
117
+ msg: "sandbox actor cleared stale active turn state after inactivity timeout",
118
+ sessionId,
119
+ idleMs: Date.now() - lastEventAt,
120
+ });
121
+ clearSessionActiveInMemory(c, sessionId);
122
+ syncPreventSleep(c);
123
+ }, staleDelay),
124
+ );
125
+ }
126
+
127
+ // --- Session active-state tracking (in-memory only) ---
128
+
129
+ export function markSessionActiveInMemory<TConnParams>(
130
+ c: SandboxActionContext<TConnParams>,
131
+ options: SandboxActorOptionsRuntime,
132
+ sessionId: string,
133
+ requestId?: string,
134
+ ): void {
135
+ c.vars.activeSessionIds.add(sessionId);
136
+ if (requestId) {
137
+ const requestIds =
138
+ c.vars.activePromptRequestIdsBySessionId.get(sessionId) ?? [];
139
+ if (!requestIds.includes(requestId)) {
140
+ requestIds.push(requestId);
141
+ c.vars.activePromptRequestIdsBySessionId.set(
142
+ sessionId,
143
+ requestIds,
144
+ );
145
+ }
146
+ }
147
+
148
+ c.vars.lastEventAtBySessionId.set(sessionId, Date.now());
149
+ scheduleSessionTimers(c, options, sessionId);
150
+ }
151
+
152
+ function clearSessionActiveInMemory<TConnParams>(
153
+ c: SandboxActionContext<TConnParams>,
154
+ sessionId: string,
155
+ requestId?: string,
156
+ ): void {
157
+ if (requestId) {
158
+ const remaining =
159
+ (c.vars.activePromptRequestIdsBySessionId.get(sessionId) ?? []).filter(
160
+ (activeRequestId) => activeRequestId !== requestId,
161
+ );
162
+ if (remaining.length > 0) {
163
+ c.vars.activePromptRequestIdsBySessionId.set(
164
+ sessionId,
165
+ remaining,
166
+ );
167
+ return;
168
+ }
169
+ }
170
+
171
+ c.vars.activeSessionIds.delete(sessionId);
172
+ c.vars.activePromptRequestIdsBySessionId.delete(sessionId);
173
+ c.vars.lastEventAtBySessionId.delete(sessionId);
174
+ clearSessionTimers(c.vars, sessionId);
175
+ }
176
+
177
+ // --- Session subscription management ---
178
+
179
+ export function addSubscribedSession<TConnParams>(
180
+ c: SandboxActionContext<TConnParams>,
181
+ sessionId: string,
182
+ ): void {
183
+ if (c.state.subscribedSessionIds.includes(sessionId)) {
184
+ return;
185
+ }
186
+ c.state.subscribedSessionIds.push(sessionId);
187
+ }
188
+
189
+ export function removeSubscribedSession<TConnParams>(
190
+ c: SandboxActionContext<TConnParams>,
191
+ sessionId: string,
192
+ ): void {
193
+ clearSessionActiveInMemory(c, sessionId);
194
+ c.state.subscribedSessionIds = c.state.subscribedSessionIds.filter(
195
+ (id) => id !== sessionId,
196
+ );
197
+ syncPreventSleep(c);
198
+ }
199
+
200
+ export function clearAllActiveSessions<TConnParams>(
201
+ c: SandboxActionContext<TConnParams>,
202
+ ): void {
203
+ c.vars.activeSessionIds.clear();
204
+ c.vars.activePromptRequestIdsBySessionId.clear();
205
+ c.vars.lastEventAtBySessionId.clear();
206
+ clearAllSessionTimers(c.vars);
207
+ syncPreventSleep(c);
208
+ }
209
+
210
+ // --- Hook execution ---
211
+
212
+ /**
213
+ * Wraps a user-provided callback (onSessionEvent, onPermissionRequest) with
214
+ * active-hook tracking and error isolation. The hook promise is added to
215
+ * `vars.activeHooks` so prevent-sleep stays accurate, and removed on
216
+ * completion. Errors are logged but do not crash the actor.
217
+ */
218
+ function runHook<TConnParams>(
219
+ c: SandboxActionContext<TConnParams>,
220
+ sessionId: string,
221
+ name: "onSessionEvent" | "onPermissionRequest",
222
+ callback: () => void | Promise<void>,
223
+ ): void {
224
+ const promise = Promise.resolve(callback())
225
+ .catch((error) => {
226
+ c.log.error({
227
+ msg: `sandbox actor ${name} hook failed`,
228
+ sessionId,
229
+ error,
230
+ });
231
+ })
232
+ .finally(() => {
233
+ c.vars.activeHooks.delete(promise);
234
+ syncPreventSleep(c);
235
+ });
236
+
237
+ c.vars.activeHooks.add(promise);
238
+ syncPreventSleep(c);
239
+
240
+ c.waitUntil(promise);
241
+ }
242
+
243
+ // --- Turn tracking from session events ---
244
+
245
+ /**
246
+ * Inspects raw JSON-RPC envelopes from the sandbox-agent event stream to
247
+ * detect prompt turn boundaries. A client-side `session/prompt` request
248
+ * marks the session active; the matching agent-side response (same
249
+ * JSON-RPC id) clears it. Any intermediate event refreshes the idle timer.
250
+ */
251
+ export function trackSessionTurnFromEvent<TConnParams>(
252
+ c: SandboxActionContext<TConnParams>,
253
+ options: SandboxActorOptionsRuntime,
254
+ sessionId: string,
255
+ event: SandboxSessionEvent,
256
+ ): void {
257
+ const payload = event.payload as Record<string, unknown> | null | undefined;
258
+ const method =
259
+ typeof payload?.method === "string" ? payload.method : null;
260
+ const rawId = payload?.id;
261
+ const id =
262
+ typeof rawId === "string"
263
+ ? rawId
264
+ : typeof rawId === "number"
265
+ ? String(rawId)
266
+ : null;
267
+
268
+ if (event.sender === "client" && method === "session/prompt") {
269
+ markSessionActiveInMemory(
270
+ c,
271
+ options,
272
+ sessionId,
273
+ id ?? `session-prompt:${event.id}`,
274
+ );
275
+ syncPreventSleep(c);
276
+ return;
277
+ }
278
+
279
+ if (!c.vars.activeSessionIds.has(sessionId)) {
280
+ return;
281
+ }
282
+
283
+ if (event.sender === "agent" && id) {
284
+ const requestIds =
285
+ c.vars.activePromptRequestIdsBySessionId.get(sessionId) ?? [];
286
+ if (requestIds.length === 0 || requestIds.includes(id)) {
287
+ clearSessionActiveInMemory(c, sessionId, id);
288
+ syncPreventSleep(c);
289
+ return;
290
+ }
291
+ }
292
+
293
+ // Any other event from an active session refreshes the idle timer.
294
+ c.vars.lastEventAtBySessionId.set(sessionId, Date.now());
295
+ scheduleSessionTimers(c, options, sessionId);
296
+ }
297
+
298
+ // --- Session event subscriptions ---
299
+
300
+ /**
301
+ * Subscribes to a session's event and permission streams on the live
302
+ * sandbox-agent connection. Tracks the unsubscribe callbacks so they
303
+ * can be cleaned up on teardown.
304
+ */
305
+ export function subscribeToSession<TConnParams>(
306
+ c: SandboxActionContext<TConnParams>,
307
+ config: SandboxActorConfig<TConnParams>,
308
+ sessionId: string,
309
+ ): void {
310
+ if (c.vars.unsubscribeBySessionId.has(sessionId)) {
311
+ return;
312
+ }
313
+
314
+ const client = c.vars.sandboxAgentClient;
315
+ if (!client) {
316
+ return;
317
+ }
318
+
319
+ const options = config.options as SandboxActorOptionsRuntime;
320
+
321
+ const event = client.onSessionEvent(sessionId, (sessionEvent) => {
322
+ trackSessionTurnFromEvent(c, options, sessionId, sessionEvent);
323
+
324
+ if (!config.onSessionEvent) {
325
+ return;
326
+ }
327
+
328
+ runHook(c, sessionId, "onSessionEvent", () =>
329
+ config.onSessionEvent!(c, sessionId, sessionEvent),
330
+ );
331
+ });
332
+
333
+ const permission = client.onPermissionRequest(
334
+ sessionId,
335
+ (request: SessionPermissionRequest) => {
336
+ markSessionActiveInMemory(c, options, sessionId);
337
+ syncPreventSleep(c);
338
+
339
+ if (!config.onPermissionRequest) {
340
+ return;
341
+ }
342
+
343
+ runHook(c, sessionId, "onPermissionRequest", () =>
344
+ config.onPermissionRequest!(c, sessionId, request),
345
+ );
346
+ },
347
+ );
348
+
349
+ c.vars.unsubscribeBySessionId.set(sessionId, { event, permission });
350
+ }
@@ -0,0 +1,36 @@
1
+ import { describe, expect, test, vi } from "vitest";
2
+ import { setup } from "@/mod";
3
+ import { setupTest } from "@/test/mod";
4
+ import { sandboxActor } from "./index";
5
+ import type { SandboxProvider } from "sandbox-agent";
6
+
7
+ describe("sandbox actor direct URL access", () => {
8
+ test("getSandboxUrl provisions the sandbox without connecting the SDK", async (c) => {
9
+ const provider: SandboxProvider = {
10
+ name: "test",
11
+ create: vi.fn(async () => "sandbox-1"),
12
+ destroy: vi.fn(async () => {}),
13
+ getUrl: vi.fn(async (sandboxId) => `https://sandbox.example/${sandboxId}`),
14
+ };
15
+
16
+ const registry = setup({
17
+ use: {
18
+ sandbox: sandboxActor({
19
+ provider,
20
+ }),
21
+ },
22
+ });
23
+ const { client } = await setupTest(c, registry);
24
+ const sandbox = client.sandbox.getOrCreate(["task-1"]);
25
+
26
+ const result = await sandbox.getSandboxUrl();
27
+ expect(result.url).toMatch(/^https:\/\/sandbox\.example\//);
28
+ expect(provider.create).toHaveBeenCalledTimes(1);
29
+ expect(provider.getUrl).toHaveBeenCalled();
30
+
31
+ await sandbox.destroy();
32
+ await expect(sandbox.getSandboxUrl()).rejects.toThrow(
33
+ "Internal error. Read the server logs for more details.",
34
+ );
35
+ });
36
+ });