@agentuity/core 1.0.32 → 1.0.34

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 (702) hide show
  1. package/dist/env-example.d.ts +11 -0
  2. package/dist/env-example.d.ts.map +1 -0
  3. package/dist/env-example.js +70 -0
  4. package/dist/env-example.js.map +1 -0
  5. package/dist/index.d.ts +6 -18
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +5 -15
  8. package/dist/index.js.map +1 -1
  9. package/dist/services/adapter.d.ts +57 -22
  10. package/dist/services/adapter.d.ts.map +1 -1
  11. package/dist/services/adapter.js +52 -1
  12. package/dist/services/adapter.js.map +1 -1
  13. package/dist/services/api.d.ts +222 -0
  14. package/dist/services/api.d.ts.map +1 -0
  15. package/dist/services/api.js +662 -0
  16. package/dist/services/api.js.map +1 -0
  17. package/dist/services/apikey/create.d.ts +34 -0
  18. package/dist/services/apikey/create.d.ts.map +1 -0
  19. package/dist/services/apikey/create.js +29 -0
  20. package/dist/services/apikey/create.js.map +1 -0
  21. package/dist/services/apikey/delete.d.ts +19 -0
  22. package/dist/services/apikey/delete.d.ts.map +1 -0
  23. package/dist/services/apikey/delete.js +19 -0
  24. package/dist/services/apikey/delete.js.map +1 -0
  25. package/dist/services/apikey/get.d.ts +45 -0
  26. package/dist/services/apikey/get.d.ts.map +1 -0
  27. package/dist/services/apikey/get.js +36 -0
  28. package/dist/services/apikey/get.js.map +1 -0
  29. package/dist/services/apikey/index.d.ts +6 -0
  30. package/dist/services/apikey/index.d.ts.map +1 -0
  31. package/dist/services/apikey/index.js +6 -0
  32. package/dist/services/apikey/index.js.map +1 -0
  33. package/dist/services/apikey/list.d.ts +65 -0
  34. package/dist/services/apikey/list.d.ts.map +1 -0
  35. package/dist/services/apikey/list.js +50 -0
  36. package/dist/services/apikey/list.js.map +1 -0
  37. package/dist/services/apikey/util.d.ts +23 -0
  38. package/dist/services/apikey/util.d.ts.map +1 -0
  39. package/dist/services/apikey/util.js +3 -0
  40. package/dist/services/apikey/util.js.map +1 -0
  41. package/dist/services/config.d.ts +22 -0
  42. package/dist/services/config.d.ts.map +1 -0
  43. package/dist/services/config.js +55 -0
  44. package/dist/services/config.js.map +1 -0
  45. package/dist/services/db/index.d.ts +5 -0
  46. package/dist/services/db/index.d.ts.map +1 -0
  47. package/dist/services/db/index.js +5 -0
  48. package/dist/services/db/index.js.map +1 -0
  49. package/dist/services/db/logs.d.ts +70 -0
  50. package/dist/services/db/logs.d.ts.map +1 -0
  51. package/dist/services/db/logs.js +59 -0
  52. package/dist/services/db/logs.js.map +1 -0
  53. package/dist/services/db/query.d.ts +40 -0
  54. package/dist/services/db/query.d.ts.map +1 -0
  55. package/dist/services/db/query.js +55 -0
  56. package/dist/services/db/query.js.map +1 -0
  57. package/dist/services/db/tables.d.ts +50 -0
  58. package/dist/services/db/tables.d.ts.map +1 -0
  59. package/dist/services/db/tables.js +64 -0
  60. package/dist/services/db/tables.js.map +1 -0
  61. package/dist/services/db/util.d.ts +31 -0
  62. package/dist/services/db/util.d.ts.map +1 -0
  63. package/dist/services/db/util.js +4 -0
  64. package/dist/services/db/util.js.map +1 -0
  65. package/dist/services/email/index.d.ts +2 -0
  66. package/dist/services/email/index.d.ts.map +1 -0
  67. package/dist/services/email/index.js +2 -0
  68. package/dist/services/email/index.js.map +1 -0
  69. package/dist/services/{email.d.ts → email/service.d.ts} +137 -296
  70. package/dist/services/email/service.d.ts.map +1 -0
  71. package/dist/services/{email.js → email/service.js} +403 -18
  72. package/dist/services/email/service.js.map +1 -0
  73. package/dist/services/env.d.ts +5 -0
  74. package/dist/services/env.d.ts.map +1 -0
  75. package/dist/services/env.js +10 -0
  76. package/dist/services/env.js.map +1 -0
  77. package/dist/services/{evalrun.d.ts → eval/events.d.ts} +1 -1
  78. package/dist/services/eval/events.d.ts.map +1 -0
  79. package/dist/services/{evalrun.js → eval/events.js} +1 -1
  80. package/dist/services/eval/events.js.map +1 -0
  81. package/dist/services/eval/get.d.ts +36 -0
  82. package/dist/services/eval/get.d.ts.map +1 -0
  83. package/dist/services/eval/get.js +23 -0
  84. package/dist/services/eval/get.js.map +1 -0
  85. package/dist/services/eval/index.d.ts +6 -0
  86. package/dist/services/eval/index.d.ts.map +1 -0
  87. package/dist/services/eval/index.js +6 -0
  88. package/dist/services/eval/index.js.map +1 -0
  89. package/dist/services/eval/list.d.ts +50 -0
  90. package/dist/services/eval/list.d.ts.map +1 -0
  91. package/dist/services/eval/list.js +32 -0
  92. package/dist/services/eval/list.js.map +1 -0
  93. package/dist/services/eval/run-get.d.ts +48 -0
  94. package/dist/services/eval/run-get.d.ts.map +1 -0
  95. package/dist/services/eval/run-get.js +29 -0
  96. package/dist/services/eval/run-get.js.map +1 -0
  97. package/dist/services/eval/run-list.d.ts +70 -0
  98. package/dist/services/eval/run-list.d.ts.map +1 -0
  99. package/dist/services/eval/run-list.js +42 -0
  100. package/dist/services/eval/run-list.js.map +1 -0
  101. package/dist/services/exception.d.ts +28 -9
  102. package/dist/services/exception.d.ts.map +1 -1
  103. package/dist/services/exception.js +14 -0
  104. package/dist/services/exception.js.map +1 -1
  105. package/dist/services/index.d.ts +26 -12
  106. package/dist/services/index.d.ts.map +1 -1
  107. package/dist/services/index.js +26 -11
  108. package/dist/services/index.js.map +1 -1
  109. package/dist/services/keyvalue/index.d.ts +2 -0
  110. package/dist/services/keyvalue/index.d.ts.map +1 -0
  111. package/dist/services/keyvalue/index.js +2 -0
  112. package/dist/services/keyvalue/index.js.map +1 -0
  113. package/dist/services/{keyvalue.d.ts → keyvalue/service.d.ts} +98 -120
  114. package/dist/services/keyvalue/service.d.ts.map +1 -0
  115. package/dist/services/{keyvalue.js → keyvalue/service.js} +182 -12
  116. package/dist/services/keyvalue/service.js.map +1 -0
  117. package/dist/services/logger.d.ts +7 -0
  118. package/dist/services/logger.d.ts.map +1 -0
  119. package/dist/services/logger.js +23 -0
  120. package/dist/services/logger.js.map +1 -0
  121. package/dist/services/machine/index.d.ts +3 -0
  122. package/dist/services/machine/index.d.ts.map +1 -0
  123. package/dist/services/machine/index.js +3 -0
  124. package/dist/services/machine/index.js.map +1 -0
  125. package/dist/services/machine/machine.d.ts +192 -0
  126. package/dist/services/machine/machine.d.ts.map +1 -0
  127. package/dist/services/machine/machine.js +177 -0
  128. package/dist/services/machine/machine.js.map +1 -0
  129. package/dist/services/machine/util.d.ts +14 -0
  130. package/dist/services/machine/util.d.ts.map +1 -0
  131. package/dist/services/machine/util.js +3 -0
  132. package/dist/services/machine/util.js.map +1 -0
  133. package/dist/services/org/env-delete.d.ts +23 -0
  134. package/dist/services/org/env-delete.d.ts.map +1 -0
  135. package/dist/services/org/env-delete.js +25 -0
  136. package/dist/services/org/env-delete.js.map +1 -0
  137. package/dist/services/org/env-get.d.ts +33 -0
  138. package/dist/services/org/env-get.d.ts.map +1 -0
  139. package/dist/services/org/env-get.js +33 -0
  140. package/dist/services/org/env-get.js.map +1 -0
  141. package/dist/services/org/env-update.d.ts +24 -0
  142. package/dist/services/org/env-update.d.ts.map +1 -0
  143. package/dist/services/org/env-update.js +26 -0
  144. package/dist/services/org/env-update.js.map +1 -0
  145. package/dist/services/org/index.d.ts +7 -0
  146. package/dist/services/org/index.d.ts.map +1 -0
  147. package/dist/services/org/index.js +7 -0
  148. package/dist/services/org/index.js.map +1 -0
  149. package/dist/services/org/list.d.ts +27 -0
  150. package/dist/services/org/list.d.ts.map +1 -0
  151. package/dist/services/org/list.js +22 -0
  152. package/dist/services/org/list.js.map +1 -0
  153. package/dist/services/org/resources.d.ts +150 -0
  154. package/dist/services/org/resources.d.ts.map +1 -0
  155. package/dist/services/org/resources.js +111 -0
  156. package/dist/services/org/resources.js.map +1 -0
  157. package/dist/services/org/util.d.ts +45 -0
  158. package/dist/services/org/util.d.ts.map +1 -0
  159. package/dist/services/org/util.js +4 -0
  160. package/dist/services/org/util.js.map +1 -0
  161. package/dist/services/pagination.d.ts +38 -11
  162. package/dist/services/pagination.d.ts.map +1 -1
  163. package/dist/services/pagination.js +30 -1
  164. package/dist/services/pagination.js.map +1 -1
  165. package/dist/services/project/agent.d.ts +89 -0
  166. package/dist/services/project/agent.d.ts.map +1 -0
  167. package/dist/services/project/agent.js +60 -0
  168. package/dist/services/project/agent.js.map +1 -0
  169. package/dist/services/project/create.d.ts +37 -0
  170. package/dist/services/project/create.d.ts.map +1 -0
  171. package/dist/services/project/create.js +31 -0
  172. package/dist/services/project/create.js.map +1 -0
  173. package/dist/services/project/delete.d.ts +15 -0
  174. package/dist/services/project/delete.d.ts.map +1 -0
  175. package/dist/services/project/delete.js +15 -0
  176. package/dist/services/project/delete.js.map +1 -0
  177. package/dist/services/project/deploy.d.ts +468 -0
  178. package/dist/services/project/deploy.d.ts.map +1 -0
  179. package/dist/services/project/deploy.js +313 -0
  180. package/dist/services/project/deploy.js.map +1 -0
  181. package/dist/services/project/deployment.d.ts +237 -0
  182. package/dist/services/project/deployment.d.ts.map +1 -0
  183. package/dist/services/project/deployment.js +180 -0
  184. package/dist/services/project/deployment.js.map +1 -0
  185. package/dist/services/project/env-delete.d.ts +22 -0
  186. package/dist/services/project/env-delete.d.ts.map +1 -0
  187. package/dist/services/project/env-delete.js +29 -0
  188. package/dist/services/project/env-delete.js.map +1 -0
  189. package/dist/services/project/env-update.d.ts +31 -0
  190. package/dist/services/project/env-update.d.ts.map +1 -0
  191. package/dist/services/project/env-update.js +36 -0
  192. package/dist/services/project/env-update.js.map +1 -0
  193. package/dist/services/project/exists.d.ts +25 -0
  194. package/dist/services/project/exists.d.ts.map +1 -0
  195. package/dist/services/project/exists.js +45 -0
  196. package/dist/services/project/exists.js.map +1 -0
  197. package/dist/services/project/get.d.ts +43 -0
  198. package/dist/services/project/get.d.ts.map +1 -0
  199. package/dist/services/project/get.js +36 -0
  200. package/dist/services/project/get.js.map +1 -0
  201. package/dist/services/project/hostname.d.ts +25 -0
  202. package/dist/services/project/hostname.d.ts.map +1 -0
  203. package/dist/services/project/hostname.js +43 -0
  204. package/dist/services/project/hostname.js.map +1 -0
  205. package/dist/services/project/index.d.ts +14 -0
  206. package/dist/services/project/index.d.ts.map +1 -0
  207. package/dist/services/project/index.js +14 -0
  208. package/dist/services/project/index.js.map +1 -0
  209. package/dist/services/project/list.d.ts +48 -0
  210. package/dist/services/project/list.d.ts.map +1 -0
  211. package/dist/services/project/list.js +38 -0
  212. package/dist/services/project/list.js.map +1 -0
  213. package/dist/services/project/malware.d.ts +71 -0
  214. package/dist/services/project/malware.d.ts.map +1 -0
  215. package/dist/services/project/malware.js +57 -0
  216. package/dist/services/project/malware.js.map +1 -0
  217. package/dist/services/project/update-region.d.ts +27 -0
  218. package/dist/services/project/update-region.d.ts.map +1 -0
  219. package/dist/services/project/update-region.js +25 -0
  220. package/dist/services/project/update-region.js.map +1 -0
  221. package/dist/services/project/util.d.ts +62 -0
  222. package/dist/services/project/util.d.ts.map +1 -0
  223. package/dist/services/project/util.js +6 -0
  224. package/dist/services/project/util.js.map +1 -0
  225. package/dist/services/queue/analytics.d.ts +261 -0
  226. package/dist/services/queue/analytics.d.ts.map +1 -0
  227. package/dist/services/queue/analytics.js +254 -0
  228. package/dist/services/queue/analytics.js.map +1 -0
  229. package/dist/services/queue/consumers.d.ts +48 -0
  230. package/dist/services/queue/consumers.d.ts.map +1 -0
  231. package/dist/services/queue/consumers.js +43 -0
  232. package/dist/services/queue/consumers.js.map +1 -0
  233. package/dist/services/queue/destinations.d.ts +269 -0
  234. package/dist/services/queue/destinations.d.ts.map +1 -0
  235. package/dist/services/queue/destinations.js +215 -0
  236. package/dist/services/queue/destinations.js.map +1 -0
  237. package/dist/services/queue/dlq.d.ts +170 -0
  238. package/dist/services/queue/dlq.d.ts.map +1 -0
  239. package/dist/services/queue/dlq.js +166 -0
  240. package/dist/services/queue/dlq.js.map +1 -0
  241. package/dist/services/queue/index.d.ts +58 -0
  242. package/dist/services/queue/index.d.ts.map +1 -0
  243. package/dist/services/queue/index.js +98 -0
  244. package/dist/services/queue/index.js.map +1 -0
  245. package/dist/services/queue/messages.d.ts +511 -0
  246. package/dist/services/queue/messages.d.ts.map +1 -0
  247. package/dist/services/queue/messages.js +549 -0
  248. package/dist/services/queue/messages.js.map +1 -0
  249. package/dist/services/queue/queues.d.ts +228 -0
  250. package/dist/services/queue/queues.d.ts.map +1 -0
  251. package/dist/services/queue/queues.js +321 -0
  252. package/dist/services/queue/queues.js.map +1 -0
  253. package/dist/services/{queue.d.ts → queue/service.d.ts} +44 -96
  254. package/dist/services/queue/service.d.ts.map +1 -0
  255. package/dist/services/{queue.js → queue/service.js} +154 -6
  256. package/dist/services/queue/service.js.map +1 -0
  257. package/dist/services/queue/sources.d.ts +252 -0
  258. package/dist/services/queue/sources.d.ts.map +1 -0
  259. package/dist/services/queue/sources.js +249 -0
  260. package/dist/services/queue/sources.js.map +1 -0
  261. package/dist/services/queue/types.d.ts +1335 -0
  262. package/dist/services/queue/types.d.ts.map +1 -0
  263. package/dist/services/queue/types.js +1376 -0
  264. package/dist/services/queue/types.js.map +1 -0
  265. package/dist/services/queue/util.d.ts +278 -0
  266. package/dist/services/queue/util.d.ts.map +1 -0
  267. package/dist/services/queue/util.js +233 -0
  268. package/dist/services/queue/util.js.map +1 -0
  269. package/dist/services/queue/validation.d.ts +218 -0
  270. package/dist/services/queue/validation.d.ts.map +1 -0
  271. package/dist/services/queue/validation.js +498 -0
  272. package/dist/services/queue/validation.js.map +1 -0
  273. package/dist/services/queue/websocket.d.ts +154 -0
  274. package/dist/services/queue/websocket.d.ts.map +1 -0
  275. package/dist/services/queue/websocket.js +472 -0
  276. package/dist/services/queue/websocket.js.map +1 -0
  277. package/dist/services/region/create.d.ts +81 -0
  278. package/dist/services/region/create.d.ts.map +1 -0
  279. package/dist/services/region/create.js +177 -0
  280. package/dist/services/region/create.js.map +1 -0
  281. package/dist/services/region/delete.d.ts +62 -0
  282. package/dist/services/region/delete.d.ts.map +1 -0
  283. package/dist/services/region/delete.js +37 -0
  284. package/dist/services/region/delete.js.map +1 -0
  285. package/dist/services/region/index.d.ts +5 -0
  286. package/dist/services/region/index.d.ts.map +1 -0
  287. package/dist/services/region/index.js +5 -0
  288. package/dist/services/region/index.js.map +1 -0
  289. package/dist/services/region/list.d.ts +27 -0
  290. package/dist/services/region/list.d.ts.map +1 -0
  291. package/dist/services/region/list.js +22 -0
  292. package/dist/services/region/list.js.map +1 -0
  293. package/dist/services/region/resources.d.ts +71 -0
  294. package/dist/services/region/resources.d.ts.map +1 -0
  295. package/dist/services/region/resources.js +53 -0
  296. package/dist/services/region/resources.js.map +1 -0
  297. package/dist/services/region/util.d.ts +23 -0
  298. package/dist/services/region/util.d.ts.map +1 -0
  299. package/dist/services/region/util.js +3 -0
  300. package/dist/services/region/util.js.map +1 -0
  301. package/dist/services/sandbox/cli-list.d.ts +103 -0
  302. package/dist/services/sandbox/cli-list.d.ts.map +1 -0
  303. package/dist/services/sandbox/cli-list.js +106 -0
  304. package/dist/services/sandbox/cli-list.js.map +1 -0
  305. package/dist/services/sandbox/client.d.ts +173 -0
  306. package/dist/services/sandbox/client.d.ts.map +1 -0
  307. package/dist/services/sandbox/client.js +302 -0
  308. package/dist/services/sandbox/client.js.map +1 -0
  309. package/dist/services/sandbox/create.d.ts +193 -0
  310. package/dist/services/sandbox/create.d.ts.map +1 -0
  311. package/dist/services/sandbox/create.js +215 -0
  312. package/dist/services/sandbox/create.js.map +1 -0
  313. package/dist/services/sandbox/destroy.d.ts +23 -0
  314. package/dist/services/sandbox/destroy.d.ts.map +1 -0
  315. package/dist/services/sandbox/destroy.js +30 -0
  316. package/dist/services/sandbox/destroy.js.map +1 -0
  317. package/dist/services/sandbox/disk-checkpoint.d.ts +108 -0
  318. package/dist/services/sandbox/disk-checkpoint.d.ts.map +1 -0
  319. package/dist/services/sandbox/disk-checkpoint.js +124 -0
  320. package/dist/services/sandbox/disk-checkpoint.js.map +1 -0
  321. package/dist/services/sandbox/execute.d.ts +96 -0
  322. package/dist/services/sandbox/execute.d.ts.map +1 -0
  323. package/dist/services/sandbox/execute.js +109 -0
  324. package/dist/services/sandbox/execute.js.map +1 -0
  325. package/dist/services/sandbox/execution.d.ts +145 -0
  326. package/dist/services/sandbox/execution.d.ts.map +1 -0
  327. package/dist/services/sandbox/execution.js +113 -0
  328. package/dist/services/sandbox/execution.js.map +1 -0
  329. package/dist/services/sandbox/files.d.ts +269 -0
  330. package/dist/services/sandbox/files.d.ts.map +1 -0
  331. package/dist/services/sandbox/files.js +454 -0
  332. package/dist/services/sandbox/files.js.map +1 -0
  333. package/dist/services/sandbox/get.d.ts +284 -0
  334. package/dist/services/sandbox/get.d.ts.map +1 -0
  335. package/dist/services/sandbox/get.js +231 -0
  336. package/dist/services/sandbox/get.js.map +1 -0
  337. package/dist/services/sandbox/getStatus.d.ts +20 -0
  338. package/dist/services/sandbox/getStatus.d.ts.map +1 -0
  339. package/dist/services/sandbox/getStatus.js +36 -0
  340. package/dist/services/sandbox/getStatus.js.map +1 -0
  341. package/dist/services/sandbox/index.d.ts +40 -0
  342. package/dist/services/sandbox/index.d.ts.map +1 -0
  343. package/dist/services/sandbox/index.js +21 -0
  344. package/dist/services/sandbox/index.js.map +1 -0
  345. package/dist/services/sandbox/list.d.ts +327 -0
  346. package/dist/services/sandbox/list.d.ts.map +1 -0
  347. package/dist/services/sandbox/list.js +204 -0
  348. package/dist/services/sandbox/list.js.map +1 -0
  349. package/dist/services/sandbox/pause.d.ts +23 -0
  350. package/dist/services/sandbox/pause.d.ts.map +1 -0
  351. package/dist/services/sandbox/pause.js +30 -0
  352. package/dist/services/sandbox/pause.js.map +1 -0
  353. package/dist/services/sandbox/resolve.d.ts +75 -0
  354. package/dist/services/sandbox/resolve.d.ts.map +1 -0
  355. package/dist/services/sandbox/resolve.js +76 -0
  356. package/dist/services/sandbox/resolve.js.map +1 -0
  357. package/dist/services/sandbox/resume.d.ts +23 -0
  358. package/dist/services/sandbox/resume.d.ts.map +1 -0
  359. package/dist/services/sandbox/resume.js +30 -0
  360. package/dist/services/sandbox/resume.js.map +1 -0
  361. package/dist/services/sandbox/run.d.ts +71 -0
  362. package/dist/services/sandbox/run.d.ts.map +1 -0
  363. package/dist/services/sandbox/run.js +355 -0
  364. package/dist/services/sandbox/run.js.map +1 -0
  365. package/dist/services/sandbox/runtime.d.ts +94 -0
  366. package/dist/services/sandbox/runtime.d.ts.map +1 -0
  367. package/dist/services/sandbox/runtime.js +82 -0
  368. package/dist/services/sandbox/runtime.js.map +1 -0
  369. package/dist/services/sandbox/snapshot-build.d.ts +48 -0
  370. package/dist/services/sandbox/snapshot-build.d.ts.map +1 -0
  371. package/dist/services/sandbox/snapshot-build.js +72 -0
  372. package/dist/services/sandbox/snapshot-build.js.map +1 -0
  373. package/dist/services/sandbox/snapshot.d.ts +596 -0
  374. package/dist/services/sandbox/snapshot.d.ts.map +1 -0
  375. package/dist/services/sandbox/snapshot.js +612 -0
  376. package/dist/services/sandbox/snapshot.js.map +1 -0
  377. package/dist/services/sandbox/types.d.ts +851 -0
  378. package/dist/services/sandbox/types.d.ts.map +1 -0
  379. package/dist/services/sandbox/types.js +674 -0
  380. package/dist/services/sandbox/types.js.map +1 -0
  381. package/dist/services/sandbox/util.d.ts +295 -0
  382. package/dist/services/sandbox/util.d.ts.map +1 -0
  383. package/dist/services/sandbox/util.js +233 -0
  384. package/dist/services/sandbox/util.js.map +1 -0
  385. package/dist/services/schedule/index.d.ts +2 -0
  386. package/dist/services/schedule/index.d.ts.map +1 -0
  387. package/dist/services/schedule/index.js +2 -0
  388. package/dist/services/schedule/index.js.map +1 -0
  389. package/dist/services/{schedule.d.ts → schedule/service.d.ts} +150 -212
  390. package/dist/services/schedule/service.d.ts.map +1 -0
  391. package/dist/services/{schedule.js → schedule/service.js} +286 -12
  392. package/dist/services/schedule/service.js.map +1 -0
  393. package/dist/services/{session.d.ts → session/events.d.ts} +5 -5
  394. package/dist/services/session/events.d.ts.map +1 -0
  395. package/dist/services/{session.js → session/events.js} +1 -1
  396. package/dist/services/session/events.js.map +1 -0
  397. package/dist/services/session/get.d.ts +170 -0
  398. package/dist/services/session/get.d.ts.map +1 -0
  399. package/dist/services/session/get.js +56 -0
  400. package/dist/services/session/get.js.map +1 -0
  401. package/dist/services/session/index.d.ts +5 -0
  402. package/dist/services/session/index.d.ts.map +1 -0
  403. package/dist/services/session/index.js +5 -0
  404. package/dist/services/session/index.js.map +1 -0
  405. package/dist/services/session/list.d.ts +150 -0
  406. package/dist/services/session/list.d.ts.map +1 -0
  407. package/dist/services/session/list.js +117 -0
  408. package/dist/services/session/list.js.map +1 -0
  409. package/dist/services/session/logs.d.ts +40 -0
  410. package/dist/services/session/logs.d.ts.map +1 -0
  411. package/dist/services/session/logs.js +28 -0
  412. package/dist/services/session/logs.js.map +1 -0
  413. package/dist/services/session/util.d.ts +23 -0
  414. package/dist/services/session/util.d.ts.map +1 -0
  415. package/dist/services/session/util.js +3 -0
  416. package/dist/services/session/util.js.map +1 -0
  417. package/dist/services/stats.d.ts +261 -0
  418. package/dist/services/stats.d.ts.map +1 -0
  419. package/dist/services/stats.js +181 -0
  420. package/dist/services/stats.js.map +1 -0
  421. package/dist/services/storage/config.d.ts +99 -0
  422. package/dist/services/storage/config.d.ts.map +1 -0
  423. package/dist/services/storage/config.js +61 -0
  424. package/dist/services/storage/config.js.map +1 -0
  425. package/dist/services/storage/index.d.ts +5 -0
  426. package/dist/services/storage/index.d.ts.map +1 -0
  427. package/dist/services/storage/index.js +5 -0
  428. package/dist/services/storage/index.js.map +1 -0
  429. package/dist/services/storage/objects.d.ts +158 -0
  430. package/dist/services/storage/objects.d.ts.map +1 -0
  431. package/dist/services/storage/objects.js +161 -0
  432. package/dist/services/storage/objects.js.map +1 -0
  433. package/dist/services/storage/types.d.ts +161 -0
  434. package/dist/services/storage/types.d.ts.map +1 -0
  435. package/dist/services/storage/types.js +141 -0
  436. package/dist/services/storage/types.js.map +1 -0
  437. package/dist/services/storage/util.d.ts +45 -0
  438. package/dist/services/storage/util.d.ts.map +1 -0
  439. package/dist/services/storage/util.js +4 -0
  440. package/dist/services/storage/util.js.map +1 -0
  441. package/dist/services/stream/get.d.ts +58 -0
  442. package/dist/services/stream/get.d.ts.map +1 -0
  443. package/dist/services/stream/get.js +40 -0
  444. package/dist/services/stream/get.js.map +1 -0
  445. package/dist/services/stream/index.d.ts +5 -0
  446. package/dist/services/stream/index.d.ts.map +1 -0
  447. package/dist/services/stream/index.js +5 -0
  448. package/dist/services/stream/index.js.map +1 -0
  449. package/dist/services/stream/list.d.ts +96 -0
  450. package/dist/services/stream/list.d.ts.map +1 -0
  451. package/dist/services/stream/list.js +92 -0
  452. package/dist/services/stream/list.js.map +1 -0
  453. package/dist/services/{stream.d.ts → stream/service.d.ts} +62 -91
  454. package/dist/services/stream/service.d.ts.map +1 -0
  455. package/dist/services/{stream.js → stream/service.js} +137 -6
  456. package/dist/services/stream/service.js.map +1 -0
  457. package/dist/services/stream/util.d.ts +23 -0
  458. package/dist/services/stream/util.d.ts.map +1 -0
  459. package/dist/services/stream/util.js +3 -0
  460. package/dist/services/stream/util.js.map +1 -0
  461. package/dist/services/task/index.d.ts +2 -0
  462. package/dist/services/task/index.d.ts.map +1 -0
  463. package/dist/services/task/index.js +2 -0
  464. package/dist/services/task/index.js.map +1 -0
  465. package/dist/services/{task.d.ts → task/service.d.ts} +591 -437
  466. package/dist/services/task/service.d.ts.map +1 -0
  467. package/dist/services/{task.js → task/service.js} +494 -4
  468. package/dist/services/task/service.js.map +1 -0
  469. package/dist/services/thread/delete.d.ts +23 -0
  470. package/dist/services/thread/delete.d.ts.map +1 -0
  471. package/dist/services/thread/delete.js +21 -0
  472. package/dist/services/thread/delete.js.map +1 -0
  473. package/dist/services/thread/get.d.ts +36 -0
  474. package/dist/services/thread/get.d.ts.map +1 -0
  475. package/dist/services/thread/get.js +23 -0
  476. package/dist/services/thread/get.js.map +1 -0
  477. package/dist/services/thread/index.d.ts +5 -0
  478. package/dist/services/thread/index.d.ts.map +1 -0
  479. package/dist/services/thread/index.js +5 -0
  480. package/dist/services/thread/index.js.map +1 -0
  481. package/dist/services/thread/list.d.ts +75 -0
  482. package/dist/services/thread/list.d.ts.map +1 -0
  483. package/dist/services/thread/list.js +65 -0
  484. package/dist/services/thread/list.js.map +1 -0
  485. package/dist/services/thread/util.d.ts +23 -0
  486. package/dist/services/thread/util.d.ts.map +1 -0
  487. package/dist/services/thread/util.js +3 -0
  488. package/dist/services/thread/util.js.map +1 -0
  489. package/dist/services/user/index.d.ts +2 -0
  490. package/dist/services/user/index.d.ts.map +1 -0
  491. package/dist/services/user/index.js +2 -0
  492. package/dist/services/user/index.js.map +1 -0
  493. package/dist/services/user/util.d.ts +23 -0
  494. package/dist/services/user/util.d.ts.map +1 -0
  495. package/dist/services/user/util.js +3 -0
  496. package/dist/services/user/util.js.map +1 -0
  497. package/dist/services/user/whoami.d.ts +39 -0
  498. package/dist/services/user/whoami.d.ts.map +1 -0
  499. package/dist/services/user/whoami.js +27 -0
  500. package/dist/services/user/whoami.js.map +1 -0
  501. package/dist/services/vector/index.d.ts +2 -0
  502. package/dist/services/vector/index.d.ts.map +1 -0
  503. package/dist/services/vector/index.js +2 -0
  504. package/dist/services/vector/index.js.map +1 -0
  505. package/dist/services/{vector.d.ts → vector/service.d.ts} +178 -217
  506. package/dist/services/vector/service.d.ts.map +1 -0
  507. package/dist/services/{vector.js → vector/service.js} +339 -13
  508. package/dist/services/vector/service.js.map +1 -0
  509. package/dist/services/webhook/deliveries.d.ts +94 -0
  510. package/dist/services/webhook/deliveries.d.ts.map +1 -0
  511. package/dist/services/webhook/deliveries.js +79 -0
  512. package/dist/services/webhook/deliveries.js.map +1 -0
  513. package/dist/services/webhook/destinations.d.ts +136 -0
  514. package/dist/services/webhook/destinations.d.ts.map +1 -0
  515. package/dist/services/webhook/destinations.js +137 -0
  516. package/dist/services/webhook/destinations.js.map +1 -0
  517. package/dist/services/webhook/index.d.ts +42 -0
  518. package/dist/services/webhook/index.d.ts.map +1 -0
  519. package/dist/services/webhook/index.js +60 -0
  520. package/dist/services/webhook/index.js.map +1 -0
  521. package/dist/services/webhook/receipts.d.ts +77 -0
  522. package/dist/services/webhook/receipts.d.ts.map +1 -0
  523. package/dist/services/webhook/receipts.js +78 -0
  524. package/dist/services/webhook/receipts.js.map +1 -0
  525. package/dist/services/{webhook.d.ts → webhook/service.d.ts} +23 -144
  526. package/dist/services/webhook/service.d.ts.map +1 -0
  527. package/dist/services/{webhook.js → webhook/service.js} +15 -17
  528. package/dist/services/webhook/service.js.map +1 -0
  529. package/dist/services/webhook/types.d.ts +103 -0
  530. package/dist/services/webhook/types.d.ts.map +1 -0
  531. package/dist/services/webhook/types.js +126 -0
  532. package/dist/services/webhook/types.js.map +1 -0
  533. package/dist/services/webhook/util.d.ts +202 -0
  534. package/dist/services/webhook/util.d.ts.map +1 -0
  535. package/dist/services/webhook/util.js +199 -0
  536. package/dist/services/webhook/util.js.map +1 -0
  537. package/dist/services/webhook/webhooks.d.ts +146 -0
  538. package/dist/services/webhook/webhooks.d.ts.map +1 -0
  539. package/dist/services/webhook/webhooks.js +165 -0
  540. package/dist/services/webhook/webhooks.js.map +1 -0
  541. package/package.json +59 -7
  542. package/src/env-example.ts +90 -0
  543. package/src/index.ts +12 -250
  544. package/src/services/adapter.ts +69 -24
  545. package/src/services/api-example.md +164 -0
  546. package/src/services/api.ts +951 -0
  547. package/src/services/apikey/create.ts +48 -0
  548. package/src/services/apikey/delete.ts +30 -0
  549. package/src/services/apikey/get.ts +48 -0
  550. package/src/services/apikey/index.ts +5 -0
  551. package/src/services/apikey/list.ts +66 -0
  552. package/src/services/apikey/util.ts +3 -0
  553. package/src/services/config.ts +65 -0
  554. package/src/services/db/index.ts +27 -0
  555. package/src/services/db/logs.ts +75 -0
  556. package/src/services/db/query.ts +69 -0
  557. package/src/services/db/tables.ts +94 -0
  558. package/src/services/db/util.ts +9 -0
  559. package/src/services/email/index.ts +1 -0
  560. package/src/services/{email.ts → email/service.ts} +172 -115
  561. package/src/services/env.ts +9 -0
  562. package/src/services/eval/get.ts +33 -0
  563. package/src/services/eval/index.ts +29 -0
  564. package/src/services/eval/list.ts +49 -0
  565. package/src/services/eval/run-get.ts +39 -0
  566. package/src/services/eval/run-list.ts +59 -0
  567. package/src/services/exception.ts +16 -7
  568. package/src/services/index.ts +29 -28
  569. package/src/services/keyvalue/index.ts +1 -0
  570. package/src/services/{keyvalue.ts → keyvalue/service.ts} +149 -95
  571. package/src/services/logger.ts +24 -0
  572. package/src/services/machine/index.ts +2 -0
  573. package/src/services/machine/machine.ts +228 -0
  574. package/src/services/machine/util.ts +5 -0
  575. package/src/services/org/env-delete.ts +37 -0
  576. package/src/services/org/env-get.ts +48 -0
  577. package/src/services/org/env-update.ts +38 -0
  578. package/src/services/org/index.ts +6 -0
  579. package/src/services/org/list.ts +28 -0
  580. package/src/services/org/resources.ts +140 -0
  581. package/src/services/org/util.ts +4 -0
  582. package/src/services/pagination.ts +40 -11
  583. package/src/services/project/agent.ts +86 -0
  584. package/src/services/project/create.ts +47 -0
  585. package/src/services/project/delete.ts +27 -0
  586. package/src/services/project/deploy.ts +433 -0
  587. package/src/services/project/deployment.ts +250 -0
  588. package/src/services/project/env-delete.ts +45 -0
  589. package/src/services/project/env-update.ts +55 -0
  590. package/src/services/project/exists.ts +58 -0
  591. package/src/services/project/get.ts +49 -0
  592. package/src/services/project/hostname.ts +79 -0
  593. package/src/services/project/index.ts +13 -0
  594. package/src/services/project/list.ts +54 -0
  595. package/src/services/project/malware.ts +85 -0
  596. package/src/services/project/update-region.ts +44 -0
  597. package/src/services/project/util.ts +8 -0
  598. package/src/services/queue/analytics.ts +343 -0
  599. package/src/services/queue/consumers.ts +56 -0
  600. package/src/services/queue/destinations.ts +329 -0
  601. package/src/services/queue/dlq.ts +243 -0
  602. package/src/services/queue/index.ts +339 -0
  603. package/src/services/queue/messages.ts +784 -0
  604. package/src/services/queue/queues.ts +460 -0
  605. package/src/services/{queue.ts → queue/service.ts} +71 -43
  606. package/src/services/queue/sources.ts +364 -0
  607. package/src/services/queue/types.ts +1656 -0
  608. package/src/services/queue/util.ts +275 -0
  609. package/src/services/queue/validation.ts +541 -0
  610. package/src/services/queue/websocket.ts +554 -0
  611. package/src/services/region/create.ts +207 -0
  612. package/src/services/region/delete.ts +57 -0
  613. package/src/services/region/index.ts +4 -0
  614. package/src/services/region/list.ts +32 -0
  615. package/src/services/region/resources.ts +69 -0
  616. package/src/services/region/util.ts +3 -0
  617. package/src/services/sandbox/cli-list.ts +117 -0
  618. package/src/services/sandbox/client.ts +435 -0
  619. package/src/services/sandbox/create.ts +249 -0
  620. package/src/services/sandbox/destroy.ts +43 -0
  621. package/src/services/sandbox/disk-checkpoint.ts +184 -0
  622. package/src/services/sandbox/execute.ts +134 -0
  623. package/src/services/sandbox/execution.ts +144 -0
  624. package/src/services/sandbox/files.ts +608 -0
  625. package/src/services/sandbox/get.ts +262 -0
  626. package/src/services/sandbox/getStatus.ts +51 -0
  627. package/src/services/sandbox/index.ts +230 -0
  628. package/src/services/sandbox/list.ts +234 -0
  629. package/src/services/sandbox/pause.ts +41 -0
  630. package/src/services/sandbox/resolve.ts +96 -0
  631. package/src/services/sandbox/resume.ts +41 -0
  632. package/src/services/sandbox/run.ts +441 -0
  633. package/src/services/sandbox/runtime.ts +106 -0
  634. package/src/services/sandbox/snapshot-build.ts +94 -0
  635. package/src/services/sandbox/snapshot.ts +791 -0
  636. package/src/services/sandbox/types.ts +799 -0
  637. package/src/services/sandbox/util.ts +279 -0
  638. package/src/services/schedule/index.ts +1 -0
  639. package/src/services/{schedule.ts → schedule/service.ts} +120 -80
  640. package/src/services/session/get.ts +108 -0
  641. package/src/services/session/index.ts +4 -0
  642. package/src/services/session/list.ts +143 -0
  643. package/src/services/session/logs.ts +47 -0
  644. package/src/services/session/util.ts +3 -0
  645. package/src/services/stats.ts +232 -0
  646. package/src/services/storage/config.ts +111 -0
  647. package/src/services/storage/index.ts +4 -0
  648. package/src/services/storage/objects.ts +256 -0
  649. package/src/services/storage/types.ts +174 -0
  650. package/src/services/storage/util.ts +4 -0
  651. package/src/services/stream/get.ts +51 -0
  652. package/src/services/stream/index.ts +14 -0
  653. package/src/services/stream/list.ts +105 -0
  654. package/src/services/{stream.ts → stream/service.ts} +78 -35
  655. package/src/services/stream/util.ts +3 -0
  656. package/src/services/task/index.ts +1 -0
  657. package/src/services/{task.ts → task/service.ts} +314 -352
  658. package/src/services/thread/delete.ts +31 -0
  659. package/src/services/thread/get.ts +34 -0
  660. package/src/services/thread/index.ts +4 -0
  661. package/src/services/thread/list.ts +81 -0
  662. package/src/services/thread/util.ts +3 -0
  663. package/src/services/user/index.ts +1 -0
  664. package/src/services/user/util.ts +3 -0
  665. package/src/services/user/whoami.ts +32 -0
  666. package/src/services/vector/index.ts +1 -0
  667. package/src/services/{vector.ts → vector/service.ts} +266 -146
  668. package/src/services/webhook/deliveries.ts +129 -0
  669. package/src/services/webhook/destinations.ts +224 -0
  670. package/src/services/webhook/index.ts +135 -0
  671. package/src/services/webhook/receipts.ts +124 -0
  672. package/src/services/{webhook.ts → webhook/service.ts} +48 -203
  673. package/src/services/webhook/types.ts +185 -0
  674. package/src/services/webhook/util.ts +234 -0
  675. package/src/services/webhook/webhooks.ts +260 -0
  676. package/dist/services/email.d.ts.map +0 -1
  677. package/dist/services/email.js.map +0 -1
  678. package/dist/services/evalrun.d.ts.map +0 -1
  679. package/dist/services/evalrun.js.map +0 -1
  680. package/dist/services/keyvalue.d.ts.map +0 -1
  681. package/dist/services/keyvalue.js.map +0 -1
  682. package/dist/services/queue.d.ts.map +0 -1
  683. package/dist/services/queue.js.map +0 -1
  684. package/dist/services/sandbox.d.ts +0 -1241
  685. package/dist/services/sandbox.d.ts.map +0 -1
  686. package/dist/services/sandbox.js +0 -6
  687. package/dist/services/sandbox.js.map +0 -1
  688. package/dist/services/schedule.d.ts.map +0 -1
  689. package/dist/services/schedule.js.map +0 -1
  690. package/dist/services/session.d.ts.map +0 -1
  691. package/dist/services/session.js.map +0 -1
  692. package/dist/services/stream.d.ts.map +0 -1
  693. package/dist/services/stream.js.map +0 -1
  694. package/dist/services/task.d.ts.map +0 -1
  695. package/dist/services/task.js.map +0 -1
  696. package/dist/services/vector.d.ts.map +0 -1
  697. package/dist/services/vector.js.map +0 -1
  698. package/dist/services/webhook.d.ts.map +0 -1
  699. package/dist/services/webhook.js.map +0 -1
  700. package/src/services/sandbox.ts +0 -1466
  701. /package/src/services/{evalrun.ts → eval/events.ts} +0 -0
  702. /package/src/services/{session.ts → session/events.ts} +0 -0
@@ -0,0 +1,441 @@
1
+ import type { Logger } from '../../logger.ts';
2
+ import type { Readable, Writable } from 'node:stream';
3
+ import { PassThrough } from 'node:stream';
4
+ import { z } from 'zod';
5
+ import { APIClient, PaymentRequiredError } from '../api.ts';
6
+ import { sandboxCreate } from './create.ts';
7
+ import { sandboxDestroy } from './destroy.ts';
8
+ import { sandboxGetStatus } from './getStatus.ts';
9
+ import { ExecutionCancelledError, writeAndDrain } from './util.ts';
10
+ import { SandboxRunOptionsSchema, type SandboxRunResult } from './types.ts';
11
+ import { getServiceUrls } from '../config.ts';
12
+
13
+ const timingLogsEnabled = false;
14
+
15
+ /**
16
+ * Creates a Writable stream that captures all chunks to a buffer array
17
+ * and optionally tees (forwards) them to one or more user-provided streams.
18
+ *
19
+ * @param chunks - Array to collect Buffer chunks into
20
+ * @param userStreams - Optional user-provided Writable stream(s) to forward chunks to
21
+ * @returns A Writable stream that captures and optionally forwards data
22
+ */
23
+ function createTeeWritable(chunks: Buffer[], ...userStreams: (Writable | undefined)[]): Writable {
24
+ const tee = new PassThrough();
25
+
26
+ // Always capture chunks to the buffer
27
+ tee.on('data', (chunk: Buffer) => {
28
+ chunks.push(chunk);
29
+ });
30
+
31
+ // Pipe to all provided user streams with proper backpressure handling
32
+ for (const userStream of userStreams) {
33
+ if (userStream) {
34
+ tee.pipe(userStream, { end: false });
35
+ }
36
+ }
37
+
38
+ return tee;
39
+ }
40
+
41
+ export const SandboxRunParamsSchema = z.object({
42
+ options: SandboxRunOptionsSchema.describe('sandbox run options'),
43
+ orgId: z.string().optional().describe('organization id'),
44
+ region: z.string().optional().describe('region id'),
45
+ apiKey: z.string().optional().describe('api key'),
46
+ signal: z.custom<AbortSignal>().optional().describe('abort signal'),
47
+ stdin: z.custom<Readable>().optional().describe('stdin readable stream'),
48
+ stdout: z.custom<Writable>().optional().describe('stdout writable stream'),
49
+ stderr: z.custom<Writable>().optional().describe('stderr writable stream'),
50
+ logger: z.custom<Logger>().optional().describe('logger instance'),
51
+ });
52
+ export type SandboxRunParams = z.infer<typeof SandboxRunParamsSchema>;
53
+
54
+ /**
55
+ * Creates a sandbox, executes a command, and waits for completion.
56
+ *
57
+ * This is a high-level convenience function that handles the full lifecycle:
58
+ * creating a sandbox, streaming I/O, polling for completion, and cleanup.
59
+ *
60
+ * @param client - The API client to use for the request
61
+ * @param params - Parameters including command options, I/O streams, and timeout settings
62
+ * @returns The run result including exit code and duration
63
+ * @throws {SandboxResponseError} If sandbox creation fails, execution times out, or is cancelled
64
+ */
65
+ export async function sandboxRun(
66
+ client: APIClient,
67
+ params: SandboxRunParams
68
+ ): Promise<SandboxRunResult> {
69
+ const { options, orgId, region, apiKey, signal, stdin, stdout, stderr, logger } = params;
70
+ const started = Date.now();
71
+ if (timingLogsEnabled) console.error(`[TIMING] +0ms: sandbox run started`);
72
+
73
+ let stdinStreamId: string | undefined;
74
+ let stdinStreamUrl: string | undefined;
75
+
76
+ // If stdin is provided and has data, create a stream for it
77
+ if (stdin && region && apiKey) {
78
+ const streamResult = await createStdinStream(region, apiKey, orgId, logger);
79
+ stdinStreamId = streamResult.id;
80
+ stdinStreamUrl = streamResult.url;
81
+ logger?.debug('created stdin stream: %s', stdinStreamId);
82
+ }
83
+
84
+ const createResponse = await sandboxCreate(client, {
85
+ options: {
86
+ ...options,
87
+ command: {
88
+ exec: options.command.exec,
89
+ files: options.command.files,
90
+ mode: 'oneshot',
91
+ },
92
+ stream: {
93
+ ...options.stream,
94
+ stdin: stdinStreamId,
95
+ },
96
+ },
97
+ orgId,
98
+ });
99
+
100
+ const sandboxId = createResponse.sandboxId;
101
+ const stdoutStreamUrl = createResponse.stdoutStreamUrl;
102
+ const stderrStreamUrl = createResponse.stderrStreamUrl;
103
+
104
+ logger?.debug(
105
+ 'sandbox created: %s, stdoutUrl: %s, stderrUrl: %s',
106
+ sandboxId,
107
+ stdoutStreamUrl ?? 'none',
108
+ stderrStreamUrl ?? 'none'
109
+ );
110
+ if (timingLogsEnabled)
111
+ console.error(`[TIMING] +${Date.now() - started}ms: sandbox created (${sandboxId})`);
112
+
113
+ const abortController = new AbortController();
114
+ const streamPromises: Promise<void>[] = [];
115
+
116
+ // Create capture buffers for stdout/stderr
117
+ const stdoutChunks: Buffer[] = [];
118
+ const stderrChunks: Buffer[] = [];
119
+
120
+ try {
121
+ // Start stdin streaming if we have stdin and a stream URL
122
+ if (stdin && stdinStreamUrl && apiKey) {
123
+ const stdinPromise = streamStdinToUrl(
124
+ stdin,
125
+ stdinStreamUrl,
126
+ apiKey,
127
+ abortController.signal,
128
+ logger
129
+ );
130
+ streamPromises.push(stdinPromise);
131
+ }
132
+
133
+ // Check if stdout and stderr are the same stream (combined output)
134
+ const isCombinedOutput =
135
+ stdoutStreamUrl && stderrStreamUrl && stdoutStreamUrl === stderrStreamUrl;
136
+
137
+ if (isCombinedOutput) {
138
+ // Stream combined output to stdout only to avoid duplicates
139
+ if (stdoutStreamUrl) {
140
+ logger?.debug('using combined output stream (stdout === stderr)');
141
+ const teeStream = createTeeWritable(stdoutChunks, stdout);
142
+ const combinedPromise = streamUrlToWritable(
143
+ stdoutStreamUrl,
144
+ teeStream,
145
+ abortController.signal,
146
+ logger,
147
+ started
148
+ );
149
+ streamPromises.push(combinedPromise);
150
+ }
151
+ } else {
152
+ // Start stdout streaming with capture
153
+ if (stdoutStreamUrl) {
154
+ const teeStream = createTeeWritable(stdoutChunks, stdout);
155
+ const stdoutPromise = streamUrlToWritable(
156
+ stdoutStreamUrl,
157
+ teeStream,
158
+ abortController.signal,
159
+ logger,
160
+ started
161
+ );
162
+ streamPromises.push(stdoutPromise);
163
+ }
164
+
165
+ // Start stderr streaming with capture
166
+ if (stderrStreamUrl) {
167
+ const teeStream = createTeeWritable(stderrChunks, stderr);
168
+ const stderrPromise = streamUrlToWritable(
169
+ stderrStreamUrl,
170
+ teeStream,
171
+ abortController.signal,
172
+ logger,
173
+ started
174
+ );
175
+ streamPromises.push(stderrPromise);
176
+ }
177
+ }
178
+
179
+ // Wait for streams to complete — Pulse closes streams on sandbox termination (EOF).
180
+ // This is our primary completion signal; no polling needed.
181
+ logger?.debug('waiting for streams to complete...');
182
+
183
+ if (streamPromises.length > 0) {
184
+ if (signal) {
185
+ // Race streams against abort signal, cleaning up the listener
186
+ // in all cases so an orphaned reject cannot fire after settlement.
187
+ let onAbort: (() => void) | undefined;
188
+ try {
189
+ await Promise.race([
190
+ Promise.allSettled(streamPromises),
191
+ new Promise<never>((_, reject) => {
192
+ onAbort = () => {
193
+ abortController.abort();
194
+ reject(
195
+ new ExecutionCancelledError({
196
+ message: 'Sandbox execution cancelled',
197
+ sandboxId,
198
+ })
199
+ );
200
+ };
201
+ if (signal.aborted) {
202
+ onAbort();
203
+ } else {
204
+ signal.addEventListener('abort', onAbort, { once: true });
205
+ }
206
+ }),
207
+ ]);
208
+ } finally {
209
+ if (onAbort && signal) {
210
+ signal.removeEventListener('abort', onAbort);
211
+ }
212
+ }
213
+ } else {
214
+ await Promise.allSettled(streamPromises);
215
+ }
216
+ } else {
217
+ // No streams available (shouldn't happen for oneshot, but handle defensively).
218
+ // Fall back to a single wait then check.
219
+ logger?.debug('no streams to wait on, checking sandbox status directly');
220
+ }
221
+
222
+ if (timingLogsEnabled)
223
+ console.error(`[TIMING] +${Date.now() - started}ms: all streams done, fetching exit code`);
224
+ logger?.debug('streams completed, fetching final status');
225
+
226
+ // Stream EOF means the sandbox is done — hadron only closes streams after the
227
+ // container exits. Fetch status once for the exit code; if lifecycle events
228
+ // haven't propagated to Catalyst yet, default to exit code 0.
229
+ let exitCode = 0;
230
+ try {
231
+ const sandboxStatus = await sandboxGetStatus(client, { sandboxId, orgId });
232
+ if (sandboxStatus.exitCode != null) {
233
+ exitCode = sandboxStatus.exitCode;
234
+ } else if (sandboxStatus.status === 'failed') {
235
+ exitCode = 1;
236
+ }
237
+ } catch {
238
+ // Sandbox may already be destroyed (fire-and-forget teardown).
239
+ // Stream EOF already confirmed execution completed.
240
+ logger?.debug('sandboxGetStatus failed after stream EOF, using default exit code 0');
241
+ }
242
+
243
+ if (timingLogsEnabled)
244
+ console.error(
245
+ `[TIMING] +${Date.now() - started}ms: sandboxGet complete (exit: ${exitCode})`
246
+ );
247
+
248
+ // Build captured output strings
249
+ const capturedStdout = Buffer.concat(stdoutChunks).toString('utf-8');
250
+ const capturedStderr = isCombinedOutput
251
+ ? capturedStdout
252
+ : Buffer.concat(stderrChunks).toString('utf-8');
253
+
254
+ return {
255
+ sandboxId,
256
+ exitCode,
257
+ durationMs: Date.now() - started,
258
+ stdout: capturedStdout,
259
+ stderr: capturedStderr,
260
+ };
261
+ } catch (error) {
262
+ abortController.abort();
263
+ try {
264
+ await sandboxDestroy(client, { sandboxId, orgId });
265
+ } catch {
266
+ // Ignore cleanup errors
267
+ }
268
+ throw error;
269
+ }
270
+ }
271
+
272
+ async function createStdinStream(
273
+ region: string,
274
+ apiKey: string,
275
+ orgId?: string,
276
+ logger?: Logger
277
+ ): Promise<{ id: string; url: string }> {
278
+ const urls = getServiceUrls(region);
279
+ const streamBaseUrl = urls.stream;
280
+
281
+ // Build URL with orgId query param for CLI token validation
282
+ const queryParams = new URLSearchParams();
283
+ if (orgId) {
284
+ queryParams.set('orgId', orgId);
285
+ }
286
+ const queryString = queryParams.toString();
287
+ const url = `${streamBaseUrl}${queryString ? `?${queryString}` : ''}`;
288
+ logger?.trace('creating stdin stream: %s', url);
289
+
290
+ const response = await fetch(url, {
291
+ method: 'POST',
292
+ headers: {
293
+ 'Content-Type': 'application/json',
294
+ Authorization: `Bearer ${apiKey}`,
295
+ },
296
+ body: JSON.stringify({
297
+ name: `sandbox-stdin-${Date.now()}`,
298
+ }),
299
+ });
300
+
301
+ if (!response.ok) {
302
+ if (response.status === 402) {
303
+ throw new PaymentRequiredError({
304
+ url: url,
305
+ });
306
+ }
307
+ throw new Error(`Failed to create stdin stream: ${response.status} ${response.statusText}`);
308
+ }
309
+
310
+ const data = (await response.json()) as { id: string };
311
+ logger?.debug('created stdin stream: %s', data.id);
312
+
313
+ // Include orgId in the URL for subsequent PUT requests (needed for CLI token auth)
314
+ const putQueryString = orgId ? `?orgId=${encodeURIComponent(orgId)}` : '';
315
+ return {
316
+ id: data.id,
317
+ url: `${streamBaseUrl}/${data.id}${putQueryString}`,
318
+ };
319
+ }
320
+
321
+ async function streamStdinToUrl(
322
+ stdin: Readable,
323
+ url: string,
324
+ apiKey: string,
325
+ signal: AbortSignal,
326
+ logger?: Logger
327
+ ): Promise<void> {
328
+ try {
329
+ logger?.debug('streaming stdin to: %s', url);
330
+
331
+ // Convert Node.js Readable to a web ReadableStream for fetch body
332
+ let controllerClosed = false;
333
+ const webStream = new ReadableStream({
334
+ start(controller) {
335
+ stdin.on('data', (chunk: Buffer) => {
336
+ if (!signal.aborted && !controllerClosed) {
337
+ controller.enqueue(chunk);
338
+ }
339
+ });
340
+ stdin.on('end', () => {
341
+ if (!controllerClosed) {
342
+ controllerClosed = true;
343
+ controller.close();
344
+ }
345
+ });
346
+ stdin.on('error', (err) => {
347
+ if (!controllerClosed) {
348
+ controllerClosed = true;
349
+ controller.error(err);
350
+ }
351
+ });
352
+ signal.addEventListener('abort', () => {
353
+ if (!controllerClosed) {
354
+ controllerClosed = true;
355
+ controller.close();
356
+ }
357
+ });
358
+ },
359
+ });
360
+
361
+ const response = await fetch(url, {
362
+ method: 'PUT',
363
+ headers: {
364
+ Authorization: `Bearer ${apiKey}`,
365
+ },
366
+ body: webStream,
367
+ signal,
368
+ duplex: 'half',
369
+ } as RequestInit);
370
+
371
+ if (!response.ok) {
372
+ logger?.debug('stdin stream PUT failed: %d', response.status);
373
+ } else {
374
+ logger?.debug('stdin stream completed');
375
+ }
376
+ } catch (err) {
377
+ if (err instanceof Error && err.name === 'AbortError') {
378
+ logger?.debug('stdin stream aborted (expected on completion)');
379
+ } else {
380
+ logger?.debug('stdin stream error: %s', err);
381
+ }
382
+ }
383
+ }
384
+
385
+ async function streamUrlToWritable(
386
+ url: string,
387
+ writable: Writable,
388
+ signal: AbortSignal,
389
+ logger?: Logger,
390
+ started?: number
391
+ ): Promise<void> {
392
+ try {
393
+ logger?.debug('fetching stream: %s', url);
394
+ const response = await fetch(url, { signal });
395
+ logger?.debug('stream response status: %d', response.status);
396
+ if (timingLogsEnabled && started)
397
+ console.error(
398
+ `[TIMING] +${Date.now() - started}ms: stream response received (status: ${response.status})`
399
+ );
400
+
401
+ if (!response.ok || !response.body) {
402
+ logger?.debug('stream response not ok or no body');
403
+ return;
404
+ }
405
+
406
+ const reader = response.body.getReader();
407
+ let firstChunk = true;
408
+
409
+ // Read until EOF - Pulse will block until data is available
410
+ while (true) {
411
+ const { done, value } = await reader.read();
412
+ if (done) {
413
+ logger?.debug('stream EOF');
414
+ if (timingLogsEnabled && started)
415
+ console.error(`[TIMING] +${Date.now() - started}ms: stream EOF`);
416
+ break;
417
+ }
418
+
419
+ if (value) {
420
+ if (firstChunk && started) {
421
+ if (timingLogsEnabled)
422
+ console.error(
423
+ `[TIMING] +${Date.now() - started}ms: first chunk (${value.length} bytes)`
424
+ );
425
+ firstChunk = false;
426
+ }
427
+ logger?.debug('stream chunk: %d bytes', value.length);
428
+ await writeAndDrain(writable, value);
429
+ }
430
+ }
431
+ // Signal end-of-stream to the tee/pipe chain so downstream
432
+ // consumers (e.g. process.stdout pipe) know no more data is coming.
433
+ writable.end();
434
+ } catch (err) {
435
+ if (err instanceof Error && err.name === 'AbortError') {
436
+ logger?.debug('stream aborted');
437
+ return;
438
+ }
439
+ logger?.debug('stream error: %s', err);
440
+ }
441
+ }
@@ -0,0 +1,106 @@
1
+ import {
2
+ ListRuntimesParamsSchema,
3
+ type ListRuntimesResponse,
4
+ type SandboxRuntime,
5
+ } from './types.ts';
6
+ import { z } from 'zod';
7
+ import { type APIClient, APIResponseSchema } from '../api.ts';
8
+ import { throwSandboxError } from './util.ts';
9
+
10
+ export const RuntimeRequirementsSchema = z
11
+ .object({
12
+ memory: z.string().optional().describe('Memory requirement (e.g., "1Gi")'),
13
+ cpu: z.string().optional().describe('CPU requirement (e.g., "1")'),
14
+ disk: z.string().optional().describe('Disk requirement (e.g., "500Mi")'),
15
+ networkEnabled: z.boolean().describe('Whether network access is enabled'),
16
+ })
17
+ .describe('Runtime resource requirements');
18
+
19
+ export const RuntimeInfoSchema = z
20
+ .object({
21
+ id: z.string().describe('Unique runtime identifier'),
22
+ name: z.string().describe('Runtime name (e.g., "bun:1", "python:3.14")'),
23
+ description: z.string().optional().describe('Optional description'),
24
+ iconUrl: z.string().optional().describe('URL for runtime icon'),
25
+ brandColor: z.string().optional().describe('Brand color for the runtime (hex color code)'),
26
+ url: z.string().optional().describe('URL for runtime documentation or homepage'),
27
+ tags: z.array(z.string()).optional().describe('Optional tags for categorization'),
28
+ requirements: RuntimeRequirementsSchema.optional().describe('Runtime resource requirements'),
29
+ readme: z.string().optional().describe('Readme content in markdown format'),
30
+ })
31
+ .describe('Information about a sandbox runtime');
32
+
33
+ export const ListRuntimesDataSchema = z
34
+ .object({
35
+ runtimes: z.array(RuntimeInfoSchema).describe('List of runtime entries'),
36
+ total: z.number().describe('Total number of runtimes'),
37
+ })
38
+ .describe('List of sandbox runtimes');
39
+
40
+ export const ListRuntimesResponseSchema = APIResponseSchema(ListRuntimesDataSchema);
41
+
42
+ export const RuntimeListParamsSchema = ListRuntimesParamsSchema.extend({
43
+ orgId: z.string().optional().describe('Optional org id for CLI auth context'),
44
+ });
45
+
46
+ export type RuntimeListParams = z.infer<typeof RuntimeListParamsSchema>;
47
+
48
+ /**
49
+ * Lists available sandbox runtimes with optional pagination.
50
+ *
51
+ * @param client - The API client to use for the request
52
+ * @param params - Optional parameters for pagination
53
+ * @returns List of runtimes with total count
54
+ * @throws {SandboxResponseError} If the request fails
55
+ */
56
+ export async function runtimeList(
57
+ client: APIClient,
58
+ params?: RuntimeListParams
59
+ ): Promise<ListRuntimesResponse> {
60
+ const queryParams = new URLSearchParams();
61
+
62
+ if (params?.orgId) {
63
+ queryParams.set('orgId', params.orgId);
64
+ }
65
+ if (params?.limit !== undefined) {
66
+ queryParams.set('limit', params.limit.toString());
67
+ }
68
+ if (params?.offset !== undefined) {
69
+ queryParams.set('offset', params.offset.toString());
70
+ }
71
+ if (params?.sort) {
72
+ queryParams.set('sort', params.sort);
73
+ }
74
+ if (params?.direction) {
75
+ queryParams.set('direction', params.direction);
76
+ }
77
+
78
+ const queryString = queryParams.toString();
79
+ const url = `/sandbox/runtimes${queryString ? `?${queryString}` : ''}`;
80
+
81
+ const resp = await client.get<z.infer<typeof ListRuntimesResponseSchema>>(
82
+ url,
83
+ ListRuntimesResponseSchema
84
+ );
85
+
86
+ if (resp.success) {
87
+ return {
88
+ runtimes: resp.data.runtimes.map(
89
+ (r): SandboxRuntime => ({
90
+ id: r.id,
91
+ name: r.name,
92
+ description: r.description,
93
+ iconUrl: r.iconUrl,
94
+ brandColor: r.brandColor,
95
+ url: r.url,
96
+ tags: r.tags,
97
+ requirements: r.requirements,
98
+ readme: r.readme,
99
+ })
100
+ ),
101
+ total: resp.data.total,
102
+ };
103
+ }
104
+
105
+ throwSandboxError(resp, {});
106
+ }
@@ -0,0 +1,94 @@
1
+ import { z } from 'zod';
2
+
3
+ /**
4
+ * Regex pattern for validating npm/bun package specifiers.
5
+ * Uses a blocklist approach: rejects shell injection characters while allowing
6
+ * all legitimate specifier formats (names, scoped packages, URLs, git refs, etc.).
7
+ *
8
+ * Valid examples: "typescript", "@types/node", "opencode-ai@1.2.3",
9
+ * "https://github.com/user/repo", "git+https://github.com/user/repo.git",
10
+ * "github:user/repo", "file:../local-pkg"
11
+ * Invalid examples: "foo bar", "pkg;rm -rf", "pkg|cat /etc/passwd", "$(evil)"
12
+ */
13
+ export const NPM_PACKAGE_NAME_PATTERN = /^[^\s;`|$]+$/;
14
+
15
+ /**
16
+ * Base schema for snapshot build configuration file (agentuity-snapshot.yaml)
17
+ * This is the canonical schema - used for JSON Schema generation.
18
+ */
19
+ export const SnapshotBuildFileBaseSchema = z
20
+ .object({
21
+ version: z.literal(1).describe('Schema version, must be 1'),
22
+ runtime: z
23
+ .string()
24
+ .describe('Runtime identifier (name:tag format, e.g., bun:1, node:20, python:3.12)'),
25
+ name: z
26
+ .string()
27
+ .regex(/^[a-zA-Z0-9_-]+$/)
28
+ .optional()
29
+ .describe('Snapshot name (alphanumeric, underscores, dashes only)'),
30
+ description: z.string().optional().describe('Human-readable description of the snapshot'),
31
+ dir: z
32
+ .string()
33
+ .optional()
34
+ .describe(
35
+ 'Subdirectory to use as the build context for file resolution (relative to the CLI directory argument)'
36
+ ),
37
+ dependencies: z
38
+ .array(z.string())
39
+ .optional()
40
+ .describe(
41
+ 'List of apt packages to install. Supports version pinning: package=version or package=version* for prefix matching'
42
+ ),
43
+ packages: z
44
+ .array(
45
+ z
46
+ .string()
47
+ .regex(
48
+ NPM_PACKAGE_NAME_PATTERN,
49
+ 'Invalid npm/bun package specifier: must not contain whitespace, semicolons, backticks, pipes, or dollar signs'
50
+ )
51
+ )
52
+ .optional()
53
+ .describe(
54
+ 'List of npm/bun packages to install globally via bun install -g. Example: opencode-ai, typescript'
55
+ ),
56
+ files: z
57
+ .array(z.string())
58
+ .optional()
59
+ .describe(
60
+ 'Glob patterns for files to include from the build context. Supports negative patterns with ! prefix for exclusions'
61
+ ),
62
+ env: z.record(z.string(), z.string()).optional().describe(
63
+ // biome-ignore lint/suspicious/noTemplateCurlyInString: describes the ${VAR} substitution syntax for users
64
+ 'Environment variables to set. Use ${VAR} syntax for build-time substitution via --env flag'
65
+ ),
66
+ metadata: z.record(z.string(), z.string()).optional().describe(
67
+ // biome-ignore lint/suspicious/noTemplateCurlyInString: describes the ${VAR} substitution syntax for users
68
+ 'User-defined metadata key-value pairs. Use ${VAR} syntax for build-time substitution via --metadata flag'
69
+ ),
70
+ public: z
71
+ .boolean()
72
+ .optional()
73
+ .describe('Whether to make the snapshot publicly accessible (default: false)'),
74
+ })
75
+ .describe('Agentuity Snapshot Build File - defines a reproducible sandbox environment');
76
+
77
+ /**
78
+ * Schema with validation refinement - use this for parsing/validation.
79
+ * Ensures at least one of dependencies, files, env, or packages is specified.
80
+ */
81
+ export const SnapshotBuildFileSchema = SnapshotBuildFileBaseSchema.refine(
82
+ (data) => {
83
+ const hasDependencies = data.dependencies && data.dependencies.length > 0;
84
+ const hasFiles = data.files && data.files.length > 0;
85
+ const hasEnv = data.env && Object.keys(data.env).length > 0;
86
+ const hasPackages = data.packages && data.packages.length > 0;
87
+ return hasDependencies || hasFiles || hasEnv || hasPackages;
88
+ },
89
+ {
90
+ message: 'At least one of dependencies, files, env, or packages must be specified',
91
+ }
92
+ );
93
+
94
+ export type SnapshotBuildFile = z.infer<typeof SnapshotBuildFileSchema>;