@elie-laloum/outpost 4.1.0 → 5.0.0

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 (573) hide show
  1. package/CHANGELOG.md +38 -0
  2. package/README.md +13 -7
  3. package/SECURITY.md +2 -0
  4. package/dist/{cli/init-authentication.constants.js → adapters/agents/authentication.constants.js} +1 -1
  5. package/dist/adapters/agents/authentication.constants.js.map +1 -0
  6. package/dist/adapters/agents/authentication.d.ts +2 -0
  7. package/dist/adapters/agents/authentication.js +52 -0
  8. package/dist/adapters/agents/authentication.js.map +1 -0
  9. package/dist/adapters/agents/claude-adapter.d.ts +2 -2
  10. package/dist/adapters/agents/claude-adapter.js +30 -2
  11. package/dist/adapters/agents/claude-adapter.js.map +1 -1
  12. package/dist/adapters/agents/claude-request.d.ts +2 -2
  13. package/dist/adapters/agents/claude-request.js +3 -3
  14. package/dist/adapters/agents/claude-request.js.map +1 -1
  15. package/dist/adapters/agents/codex-adapter.d.ts +2 -2
  16. package/dist/adapters/agents/codex-adapter.js +17 -1
  17. package/dist/adapters/agents/codex-adapter.js.map +1 -1
  18. package/dist/adapters/agents/codex-provider.d.ts +2 -2
  19. package/dist/adapters/agents/codex-provider.js +1 -1
  20. package/dist/adapters/agents/codex-provider.js.map +1 -1
  21. package/dist/adapters/agents/codex-request.d.ts +2 -2
  22. package/dist/adapters/agents/codex-request.js +3 -3
  23. package/dist/adapters/agents/codex-request.js.map +1 -1
  24. package/dist/adapters/agents/gemini-adapter.d.ts +2 -2
  25. package/dist/adapters/agents/gemini-adapter.js +20 -1
  26. package/dist/adapters/agents/gemini-adapter.js.map +1 -1
  27. package/dist/adapters/agents/gemini-request.d.ts +2 -1
  28. package/dist/adapters/agents/gemini-request.js +1 -1
  29. package/dist/adapters/agents/gemini-request.js.map +1 -1
  30. package/dist/adapters/agents/gemini.types.d.ts +2 -1
  31. package/dist/adapters/agents/gemini.types.js.map +1 -1
  32. package/dist/adapters/agents/model-support.constants.d.ts +6 -0
  33. package/dist/adapters/agents/model-support.constants.js +18 -0
  34. package/dist/adapters/agents/model-support.constants.js.map +1 -0
  35. package/dist/adapters/agents/model-support.d.ts +4 -0
  36. package/dist/adapters/agents/model-support.js +11 -0
  37. package/dist/adapters/agents/model-support.js.map +1 -0
  38. package/dist/adapters/agents/settings.types.d.ts +11 -3
  39. package/dist/adapters/agents/settings.types.js.map +1 -1
  40. package/dist/adapters/models/anthropic-model-provider.constants.d.ts +3 -0
  41. package/dist/adapters/models/anthropic-model-provider.constants.js +17 -0
  42. package/dist/adapters/models/anthropic-model-provider.constants.js.map +1 -0
  43. package/dist/adapters/models/anthropic-model-provider.d.ts +3 -0
  44. package/dist/adapters/models/anthropic-model-provider.js +31 -0
  45. package/dist/adapters/models/anthropic-model-provider.js.map +1 -0
  46. package/dist/adapters/models/anthropic-model-provider.types.d.ts +7 -0
  47. package/dist/adapters/models/anthropic-model-provider.types.js +2 -0
  48. package/dist/adapters/models/anthropic-model-provider.types.js.map +1 -0
  49. package/dist/adapters/models/anthropic-request.d.ts +4 -0
  50. package/dist/adapters/models/anthropic-request.js +81 -0
  51. package/dist/adapters/models/anthropic-request.js.map +1 -0
  52. package/dist/adapters/models/anthropic-response.d.ts +3 -0
  53. package/dist/adapters/models/anthropic-response.js +55 -0
  54. package/dist/adapters/models/anthropic-response.js.map +1 -0
  55. package/dist/adapters/models/anthropic-stream.d.ts +2 -0
  56. package/dist/adapters/models/anthropic-stream.js +96 -0
  57. package/dist/adapters/models/anthropic-stream.js.map +1 -0
  58. package/dist/adapters/models/http-provider.d.ts +3 -0
  59. package/dist/adapters/models/http-provider.js +113 -0
  60. package/dist/adapters/models/http-provider.js.map +1 -0
  61. package/dist/adapters/models/model-http.d.ts +1 -0
  62. package/dist/adapters/models/model-http.js +30 -0
  63. package/dist/adapters/models/model-http.js.map +1 -0
  64. package/dist/adapters/models/model-protocol.types.d.ts +41 -0
  65. package/dist/adapters/models/model-protocol.types.js +2 -0
  66. package/dist/adapters/models/model-protocol.types.js.map +1 -0
  67. package/dist/adapters/models/model-request.d.ts +2 -0
  68. package/dist/adapters/models/model-request.js +18 -0
  69. package/dist/adapters/models/model-request.js.map +1 -0
  70. package/dist/adapters/models/model-response.d.ts +7 -0
  71. package/dist/adapters/models/model-response.js +41 -0
  72. package/dist/adapters/models/model-response.js.map +1 -0
  73. package/dist/adapters/models/model.constants.d.ts +4 -0
  74. package/dist/adapters/models/model.constants.js +15 -0
  75. package/dist/adapters/models/model.constants.js.map +1 -0
  76. package/dist/adapters/models/openai-chat-stream.d.ts +2 -0
  77. package/dist/adapters/models/openai-chat-stream.js +66 -0
  78. package/dist/adapters/models/openai-chat-stream.js.map +1 -0
  79. package/dist/adapters/models/openai-chat.d.ts +4 -0
  80. package/dist/adapters/models/openai-chat.js +108 -0
  81. package/dist/adapters/models/openai-chat.js.map +1 -0
  82. package/dist/adapters/models/openai-model-provider.d.ts +3 -0
  83. package/dist/adapters/models/openai-model-provider.js +13 -0
  84. package/dist/adapters/models/openai-model-provider.js.map +1 -0
  85. package/dist/adapters/models/openai-model-provider.types.d.ts +4 -0
  86. package/dist/adapters/models/openai-model-provider.types.js +2 -0
  87. package/dist/adapters/models/openai-model-provider.types.js.map +1 -0
  88. package/dist/adapters/models/openai-protocols.d.ts +2 -0
  89. package/dist/adapters/models/openai-protocols.js +22 -0
  90. package/dist/adapters/models/openai-protocols.js.map +1 -0
  91. package/dist/adapters/models/openai-responses-stream.d.ts +2 -0
  92. package/dist/adapters/models/openai-responses-stream.js +35 -0
  93. package/dist/adapters/models/openai-responses-stream.js.map +1 -0
  94. package/dist/adapters/models/openai-responses.d.ts +4 -0
  95. package/dist/adapters/models/openai-responses.js +107 -0
  96. package/dist/adapters/models/openai-responses.js.map +1 -0
  97. package/dist/adapters/models/openai-usage.d.ts +3 -0
  98. package/dist/adapters/models/openai-usage.js +20 -0
  99. package/dist/adapters/models/openai-usage.js.map +1 -0
  100. package/dist/adapters/models/stop-reasons.constants.d.ts +4 -0
  101. package/dist/adapters/models/stop-reasons.constants.js +19 -0
  102. package/dist/adapters/models/stop-reasons.constants.js.map +1 -0
  103. package/dist/adapters/models/stream-events.d.ts +3 -0
  104. package/dist/adapters/models/stream-events.js +22 -0
  105. package/dist/adapters/models/stream-events.js.map +1 -0
  106. package/dist/adapters/tools/edit-tools.d.ts +2 -0
  107. package/dist/adapters/tools/edit-tools.js +84 -0
  108. package/dist/adapters/tools/edit-tools.js.map +1 -0
  109. package/dist/adapters/tools/file-tools.d.ts +2 -0
  110. package/dist/adapters/tools/file-tools.js +97 -0
  111. package/dist/adapters/tools/file-tools.js.map +1 -0
  112. package/dist/adapters/tools/git-tools.d.ts +2 -0
  113. package/dist/adapters/tools/git-tools.js +54 -0
  114. package/dist/adapters/tools/git-tools.js.map +1 -0
  115. package/dist/adapters/tools/sandbox-files.d.ts +10 -0
  116. package/dist/adapters/tools/sandbox-files.js +60 -0
  117. package/dist/adapters/tools/sandbox-files.js.map +1 -0
  118. package/dist/adapters/tools/search-tools.d.ts +2 -0
  119. package/dist/adapters/tools/search-tools.js +65 -0
  120. package/dist/adapters/tools/search-tools.js.map +1 -0
  121. package/dist/adapters/tools/shell-tools.d.ts +3 -0
  122. package/dist/adapters/tools/shell-tools.js +38 -0
  123. package/dist/adapters/tools/shell-tools.js.map +1 -0
  124. package/dist/adapters/tools/tools.constants.d.ts +11 -0
  125. package/dist/adapters/tools/tools.constants.js +17 -0
  126. package/dist/adapters/tools/tools.constants.js.map +1 -0
  127. package/dist/adapters/tools/tools.types.d.ts +41 -0
  128. package/dist/adapters/tools/tools.types.js +2 -0
  129. package/dist/adapters/tools/tools.types.js.map +1 -0
  130. package/dist/application/activity-watchdog.js +15 -2
  131. package/dist/application/activity-watchdog.js.map +1 -1
  132. package/dist/application/agent-bootstrap.d.ts +2 -2
  133. package/dist/application/agent-bootstrap.js +2 -0
  134. package/dist/application/agent-bootstrap.js.map +1 -1
  135. package/dist/application/agent-storage.d.ts +3 -2
  136. package/dist/application/agent-storage.js +9 -2
  137. package/dist/application/agent-storage.js.map +1 -1
  138. package/dist/application/agent-turn.d.ts +3 -3
  139. package/dist/application/agent-turn.js +7 -1
  140. package/dist/application/agent-turn.js.map +1 -1
  141. package/dist/application/attach.js +1 -0
  142. package/dist/application/attach.js.map +1 -1
  143. package/dist/application/custom-turn.d.ts +5 -0
  144. package/dist/application/custom-turn.js +190 -0
  145. package/dist/application/custom-turn.js.map +1 -0
  146. package/dist/application/dispatch-observation.d.ts +3 -0
  147. package/dist/application/dispatch-observation.js +51 -0
  148. package/dist/application/dispatch-observation.js.map +1 -0
  149. package/dist/application/dispatch-observation.types.d.ts +5 -0
  150. package/dist/application/dispatch-observation.types.js +2 -0
  151. package/dist/application/dispatch-observation.types.js.map +1 -0
  152. package/dist/application/dispatch-validation.d.ts +2 -2
  153. package/dist/application/dispatch-validation.js.map +1 -1
  154. package/dist/application/dispatch.js +8 -3
  155. package/dist/application/dispatch.js.map +1 -1
  156. package/dist/application/doctor-image.js +3 -3
  157. package/dist/application/doctor-image.js.map +1 -1
  158. package/dist/application/doctor-protocol.js +9 -4
  159. package/dist/application/doctor-protocol.js.map +1 -1
  160. package/dist/application/doctor-sandbox.js +4 -4
  161. package/dist/application/doctor-sandbox.js.map +1 -1
  162. package/dist/application/doctor-sandbox.types.d.ts +2 -2
  163. package/dist/application/doctor-sandbox.types.js.map +1 -1
  164. package/dist/application/doctor.constants.d.ts +1 -1
  165. package/dist/application/doctor.constants.js +1 -1
  166. package/dist/application/doctor.constants.js.map +1 -1
  167. package/dist/application/doctor.js +10 -9
  168. package/dist/application/doctor.js.map +1 -1
  169. package/dist/application/doctor.types.d.ts +3 -3
  170. package/dist/application/doctor.types.js.map +1 -1
  171. package/dist/application/execution.d.ts +2 -2
  172. package/dist/application/execution.js +1 -1
  173. package/dist/application/execution.js.map +1 -1
  174. package/dist/application/execution.types.d.ts +11 -2
  175. package/dist/application/execution.types.js.map +1 -1
  176. package/dist/application/harness-context.d.ts +2 -0
  177. package/dist/application/harness-context.js +54 -0
  178. package/dist/application/harness-context.js.map +1 -0
  179. package/dist/application/harness-history.d.ts +3 -0
  180. package/dist/application/harness-history.js +17 -0
  181. package/dist/application/harness-history.js.map +1 -0
  182. package/dist/application/harness-hooks.d.ts +9 -0
  183. package/dist/application/harness-hooks.js +90 -0
  184. package/dist/application/harness-hooks.js.map +1 -0
  185. package/dist/application/harness-loop.d.ts +2 -0
  186. package/dist/application/harness-loop.js +132 -0
  187. package/dist/application/harness-loop.js.map +1 -0
  188. package/dist/application/harness.types.d.ts +55 -0
  189. package/dist/application/harness.types.js +2 -0
  190. package/dist/application/harness.types.js.map +1 -0
  191. package/dist/application/lifecycle.constants.d.ts +1 -1
  192. package/dist/application/lifecycle.constants.js +1 -1
  193. package/dist/application/lifecycle.constants.js.map +1 -1
  194. package/dist/application/outpost.types.d.ts +11 -6
  195. package/dist/application/outpost.types.js.map +1 -1
  196. package/dist/application/recovery-archive.d.ts +4 -0
  197. package/dist/application/recovery-archive.js +29 -0
  198. package/dist/application/recovery-archive.js.map +1 -0
  199. package/dist/application/recovery-archive.types.d.ts +10 -0
  200. package/dist/application/recovery-archive.types.js +2 -0
  201. package/dist/application/recovery-archive.types.js.map +1 -0
  202. package/dist/application/recovery-inspection.js +3 -0
  203. package/dist/application/recovery-inspection.js.map +1 -1
  204. package/dist/application/recovery-inspection.types.d.ts +2 -0
  205. package/dist/application/recovery-inspection.types.js.map +1 -1
  206. package/dist/application/recovery-retention.d.ts +2 -1
  207. package/dist/application/recovery-retention.js +9 -1
  208. package/dist/application/recovery-retention.js.map +1 -1
  209. package/dist/application/recovery-retention.types.d.ts +6 -0
  210. package/dist/application/recovery-retention.types.js.map +1 -1
  211. package/dist/application/remote-backup.js +8 -0
  212. package/dist/application/remote-backup.js.map +1 -1
  213. package/dist/application/remote-download.js +1 -1
  214. package/dist/application/remote-download.js.map +1 -1
  215. package/dist/application/remote-workspace.types.d.ts +2 -0
  216. package/dist/application/remote-workspace.types.js.map +1 -1
  217. package/dist/application/sandbox-agents.js +13 -4
  218. package/dist/application/sandbox-agents.js.map +1 -1
  219. package/dist/application/sandbox-attach.js +5 -2
  220. package/dist/application/sandbox-attach.js.map +1 -1
  221. package/dist/application/sandbox-dispatch.js +12 -3
  222. package/dist/application/sandbox-dispatch.js.map +1 -1
  223. package/dist/application/sandbox-provision.js +19 -10
  224. package/dist/application/sandbox-provision.js.map +1 -1
  225. package/dist/application/sandbox-session.types.d.ts +8 -8
  226. package/dist/application/sandbox-session.types.js.map +1 -1
  227. package/dist/application/sandbox.js +6 -3
  228. package/dist/application/sandbox.js.map +1 -1
  229. package/dist/application/speculation.js +1 -1
  230. package/dist/application/speculation.js.map +1 -1
  231. package/dist/application/speculation.types.d.ts +3 -3
  232. package/dist/application/speculation.types.js.map +1 -1
  233. package/dist/application/storage-reservation.js +3 -0
  234. package/dist/application/storage-reservation.js.map +1 -1
  235. package/dist/application/tasks.types.d.ts +2 -2
  236. package/dist/application/tasks.types.js.map +1 -1
  237. package/dist/application/tool-execution.d.ts +3 -0
  238. package/dist/application/tool-execution.js +211 -0
  239. package/dist/application/tool-execution.js.map +1 -0
  240. package/dist/application/transport-inspection.constants.d.ts +2 -0
  241. package/dist/application/transport-inspection.constants.js +10 -0
  242. package/dist/application/transport-inspection.constants.js.map +1 -0
  243. package/dist/application/transport-inspection.d.ts +2 -0
  244. package/dist/application/transport-inspection.js +103 -0
  245. package/dist/application/transport-inspection.js.map +1 -0
  246. package/dist/application/transport-retention.d.ts +4 -0
  247. package/dist/application/transport-retention.js +153 -0
  248. package/dist/application/transport-retention.js.map +1 -0
  249. package/dist/cli/commands.js +4 -2
  250. package/dist/cli/commands.js.map +1 -1
  251. package/dist/cli/doctor-command.js +6 -6
  252. package/dist/cli/doctor-command.js.map +1 -1
  253. package/dist/cli/init-authentication.js +6 -7
  254. package/dist/cli/init-authentication.js.map +1 -1
  255. package/dist/cli/init-command.js +3 -3
  256. package/dist/cli/init-command.js.map +1 -1
  257. package/dist/cli/main.constants.d.ts +4 -4
  258. package/dist/cli/main.constants.js +4 -4
  259. package/dist/cli/main.constants.js.map +1 -1
  260. package/dist/cli/recovery-command.js +1 -1
  261. package/dist/cli/recovery-command.js.map +1 -1
  262. package/dist/cli/scaffold-files.js +5 -4
  263. package/dist/cli/scaffold-files.js.map +1 -1
  264. package/dist/cli/scaffold-validation.js +13 -10
  265. package/dist/cli/scaffold-validation.js.map +1 -1
  266. package/dist/cli/scaffold.js +8 -4
  267. package/dist/cli/scaffold.js.map +1 -1
  268. package/dist/cli/scaffold.types.d.ts +1 -1
  269. package/dist/cli/scaffold.types.js.map +1 -1
  270. package/dist/cli/starters.js +8 -8
  271. package/dist/cli/starters.js.map +1 -1
  272. package/dist/domain/agent-model.d.ts +3 -0
  273. package/dist/domain/agent-model.js +22 -0
  274. package/dist/domain/agent-model.js.map +1 -0
  275. package/dist/domain/agent.d.ts +4 -0
  276. package/dist/domain/agent.js +32 -0
  277. package/dist/domain/agent.js.map +1 -0
  278. package/dist/domain/agent.types.d.ts +69 -2
  279. package/dist/domain/agent.types.js.map +1 -1
  280. package/dist/domain/context.constants.d.ts +7 -0
  281. package/dist/domain/context.constants.js +8 -0
  282. package/dist/domain/context.constants.js.map +1 -0
  283. package/dist/domain/context.d.ts +4 -0
  284. package/dist/domain/context.js +81 -0
  285. package/dist/domain/context.js.map +1 -0
  286. package/dist/domain/context.types.d.ts +26 -0
  287. package/dist/domain/context.types.js +2 -0
  288. package/dist/domain/context.types.js.map +1 -0
  289. package/dist/domain/conversation.types.d.ts +2 -0
  290. package/dist/domain/conversation.types.js.map +1 -1
  291. package/dist/domain/dispatch-telemetry.types.d.ts +12 -0
  292. package/dist/domain/dispatch-telemetry.types.js +2 -0
  293. package/dist/domain/dispatch-telemetry.types.js.map +1 -0
  294. package/dist/domain/errors.types.d.ts +1 -1
  295. package/dist/domain/errors.types.js.map +1 -1
  296. package/dist/domain/glob.d.ts +2 -0
  297. package/dist/domain/glob.js +25 -0
  298. package/dist/domain/glob.js.map +1 -0
  299. package/dist/domain/glob.types.d.ts +1 -0
  300. package/dist/domain/glob.types.js +2 -0
  301. package/dist/domain/glob.types.js.map +1 -0
  302. package/dist/domain/harness.constants.d.ts +11 -0
  303. package/dist/domain/harness.constants.js +24 -0
  304. package/dist/domain/harness.constants.js.map +1 -0
  305. package/dist/domain/harness.d.ts +2 -0
  306. package/dist/domain/harness.js +89 -0
  307. package/dist/domain/harness.js.map +1 -0
  308. package/dist/domain/harness.types.d.ts +60 -0
  309. package/dist/domain/harness.types.js +2 -0
  310. package/dist/domain/harness.types.js.map +1 -0
  311. package/dist/domain/hook.constants.d.ts +3 -0
  312. package/dist/domain/hook.constants.js +10 -0
  313. package/dist/domain/hook.constants.js.map +1 -0
  314. package/dist/domain/hook.d.ts +3 -0
  315. package/dist/domain/hook.js +25 -0
  316. package/dist/domain/hook.js.map +1 -0
  317. package/dist/domain/hook.types.d.ts +66 -0
  318. package/dist/domain/hook.types.js +2 -0
  319. package/dist/domain/hook.types.js.map +1 -0
  320. package/dist/domain/instructions.d.ts +3 -0
  321. package/dist/domain/instructions.js +25 -0
  322. package/dist/domain/instructions.js.map +1 -0
  323. package/dist/domain/model-messages.d.ts +5 -0
  324. package/dist/domain/model-messages.js +81 -0
  325. package/dist/domain/model-messages.js.map +1 -0
  326. package/dist/domain/model-messages.types.d.ts +6 -0
  327. package/dist/domain/model-messages.types.js +2 -0
  328. package/dist/domain/model-messages.types.js.map +1 -0
  329. package/dist/domain/model.constants.d.ts +4 -0
  330. package/dist/domain/model.constants.js +16 -0
  331. package/dist/domain/model.constants.js.map +1 -0
  332. package/dist/domain/model.types.d.ts +72 -0
  333. package/dist/domain/model.types.js +2 -0
  334. package/dist/domain/model.types.js.map +1 -0
  335. package/dist/domain/permissions.d.ts +3 -0
  336. package/dist/domain/permissions.js +92 -0
  337. package/dist/domain/permissions.js.map +1 -0
  338. package/dist/domain/permissions.types.d.ts +34 -0
  339. package/dist/domain/permissions.types.js +2 -0
  340. package/dist/domain/permissions.types.js.map +1 -0
  341. package/dist/domain/response.js +3 -2
  342. package/dist/domain/response.js.map +1 -1
  343. package/dist/domain/response.types.d.ts +12 -0
  344. package/dist/domain/response.types.js.map +1 -1
  345. package/dist/domain/skill.constants.d.ts +2 -0
  346. package/dist/domain/skill.constants.js +8 -0
  347. package/dist/domain/skill.constants.js.map +1 -0
  348. package/dist/domain/skill.d.ts +8 -0
  349. package/dist/domain/skill.js +79 -0
  350. package/dist/domain/skill.js.map +1 -0
  351. package/dist/domain/skill.types.d.ts +18 -0
  352. package/dist/domain/skill.types.js +2 -0
  353. package/dist/domain/skill.types.js.map +1 -0
  354. package/dist/domain/standard-schema.d.ts +6 -0
  355. package/dist/domain/standard-schema.js +45 -0
  356. package/dist/domain/standard-schema.js.map +1 -0
  357. package/dist/domain/tool-schema.d.ts +3 -0
  358. package/dist/domain/tool-schema.js +109 -0
  359. package/dist/domain/tool-schema.js.map +1 -0
  360. package/dist/domain/tool.constants.d.ts +4 -0
  361. package/dist/domain/tool.constants.js +36 -0
  362. package/dist/domain/tool.constants.js.map +1 -0
  363. package/dist/domain/tool.d.ts +4 -0
  364. package/dist/domain/tool.js +66 -0
  365. package/dist/domain/tool.js.map +1 -0
  366. package/dist/domain/tool.types.d.ts +62 -0
  367. package/dist/domain/tool.types.js +2 -0
  368. package/dist/domain/tool.types.js.map +1 -0
  369. package/dist/domain/transcript.d.ts +4 -0
  370. package/dist/domain/transcript.js +48 -0
  371. package/dist/domain/transcript.js.map +1 -0
  372. package/dist/domain/transcript.types.d.ts +15 -0
  373. package/dist/domain/transcript.types.js +2 -0
  374. package/dist/domain/transcript.types.js.map +1 -0
  375. package/dist/domain/transport.constants.d.ts +2 -0
  376. package/dist/domain/transport.constants.js +3 -0
  377. package/dist/domain/transport.constants.js.map +1 -0
  378. package/dist/domain/transport.d.ts +6 -0
  379. package/dist/domain/transport.js +21 -0
  380. package/dist/domain/transport.js.map +1 -0
  381. package/dist/domain/transport.types.d.ts +31 -0
  382. package/dist/domain/transport.types.js +2 -0
  383. package/dist/domain/transport.types.js.map +1 -0
  384. package/dist/domain/workflow/workflow-state.js +13 -6
  385. package/dist/domain/workflow/workflow-state.js.map +1 -1
  386. package/dist/domain/workflow.d.ts +1 -1
  387. package/dist/domain/workflow.js.map +1 -1
  388. package/dist/domain/workflow.types.d.ts +4 -0
  389. package/dist/domain/workflow.types.js.map +1 -1
  390. package/dist/index.d.ts +48 -5
  391. package/dist/index.js +26 -3
  392. package/dist/index.js.map +1 -1
  393. package/dist/infrastructure/artifact-store.js +10 -0
  394. package/dist/infrastructure/artifact-store.js.map +1 -1
  395. package/dist/infrastructure/artifact-store.types.d.ts +3 -1
  396. package/dist/infrastructure/artifact-store.types.js.map +1 -1
  397. package/dist/infrastructure/conversations/capture.js +1 -1
  398. package/dist/infrastructure/conversations/capture.js.map +1 -1
  399. package/dist/infrastructure/conversations/harness-store.d.ts +3 -0
  400. package/dist/infrastructure/conversations/harness-store.js +27 -0
  401. package/dist/infrastructure/conversations/harness-store.js.map +1 -0
  402. package/dist/infrastructure/conversations/harness-transcript.d.ts +2 -0
  403. package/dist/infrastructure/conversations/harness-transcript.js +50 -0
  404. package/dist/infrastructure/conversations/harness-transcript.js.map +1 -0
  405. package/dist/infrastructure/conversations/harness-transcript.types.d.ts +18 -0
  406. package/dist/infrastructure/conversations/harness-transcript.types.js +2 -0
  407. package/dist/infrastructure/conversations/harness-transcript.types.js.map +1 -0
  408. package/dist/infrastructure/conversations.d.ts +6 -1
  409. package/dist/infrastructure/conversations.js +5 -0
  410. package/dist/infrastructure/conversations.js.map +1 -1
  411. package/dist/infrastructure/conversations.types.d.ts +1 -0
  412. package/dist/infrastructure/conversations.types.js.map +1 -1
  413. package/dist/infrastructure/custom-reporter.d.ts +2 -0
  414. package/dist/infrastructure/custom-reporter.js +33 -0
  415. package/dist/infrastructure/custom-reporter.js.map +1 -0
  416. package/dist/infrastructure/custom-reporter.types.d.ts +13 -0
  417. package/dist/infrastructure/custom-reporter.types.js +2 -0
  418. package/dist/infrastructure/custom-reporter.types.js.map +1 -0
  419. package/dist/infrastructure/git/git.constants.d.ts +1 -1
  420. package/dist/infrastructure/git/git.constants.js +1 -0
  421. package/dist/infrastructure/git/git.constants.js.map +1 -1
  422. package/dist/infrastructure/inspection-file.js +3 -3
  423. package/dist/infrastructure/inspection-file.js.map +1 -1
  424. package/dist/infrastructure/inspection-hash.js +4 -3
  425. package/dist/infrastructure/inspection-hash.js.map +1 -1
  426. package/dist/infrastructure/inspection-path.d.ts +1 -0
  427. package/dist/infrastructure/inspection-path.js +18 -0
  428. package/dist/infrastructure/inspection-path.js.map +1 -0
  429. package/dist/infrastructure/journal.constants.d.ts +1 -0
  430. package/dist/infrastructure/journal.constants.js +2 -0
  431. package/dist/infrastructure/journal.constants.js.map +1 -0
  432. package/dist/infrastructure/journal.js +10 -1
  433. package/dist/infrastructure/journal.js.map +1 -1
  434. package/dist/infrastructure/journal.types.d.ts +3 -0
  435. package/dist/infrastructure/journal.types.js.map +1 -1
  436. package/dist/infrastructure/local-transport.d.ts +3 -0
  437. package/dist/infrastructure/local-transport.js +146 -0
  438. package/dist/infrastructure/local-transport.js.map +1 -0
  439. package/dist/infrastructure/local-transport.types.d.ts +3 -0
  440. package/dist/infrastructure/local-transport.types.js +2 -0
  441. package/dist/infrastructure/local-transport.types.js.map +1 -0
  442. package/dist/infrastructure/opentelemetry-dispatch.d.ts +6 -0
  443. package/dist/infrastructure/opentelemetry-dispatch.js +70 -0
  444. package/dist/infrastructure/opentelemetry-dispatch.js.map +1 -0
  445. package/dist/infrastructure/opentelemetry.constants.d.ts +3 -0
  446. package/dist/infrastructure/opentelemetry.constants.js +3 -0
  447. package/dist/infrastructure/opentelemetry.constants.js.map +1 -1
  448. package/dist/infrastructure/opentelemetry.js +4 -0
  449. package/dist/infrastructure/opentelemetry.js.map +1 -1
  450. package/dist/infrastructure/opentelemetry.types.d.ts +3 -3
  451. package/dist/infrastructure/opentelemetry.types.js.map +1 -1
  452. package/dist/infrastructure/reporter.js +27 -2
  453. package/dist/infrastructure/reporter.js.map +1 -1
  454. package/dist/infrastructure/resource-activity-inspection.d.ts +2 -1
  455. package/dist/infrastructure/resource-activity-inspection.js +5 -4
  456. package/dist/infrastructure/resource-activity-inspection.js.map +1 -1
  457. package/dist/infrastructure/resource-activity.js +44 -16
  458. package/dist/infrastructure/resource-activity.js.map +1 -1
  459. package/dist/infrastructure/resource-activity.types.d.ts +4 -2
  460. package/dist/infrastructure/resource-activity.types.js.map +1 -1
  461. package/dist/infrastructure/s3-transport.d.ts +4 -0
  462. package/dist/infrastructure/s3-transport.js +144 -0
  463. package/dist/infrastructure/s3-transport.js.map +1 -0
  464. package/dist/infrastructure/s3-transport.types.d.ts +6 -0
  465. package/dist/infrastructure/s3-transport.types.js +2 -0
  466. package/dist/infrastructure/s3-transport.types.js.map +1 -0
  467. package/dist/infrastructure/settings.d.ts +1 -1
  468. package/dist/infrastructure/settings.js +3 -3
  469. package/dist/infrastructure/settings.js.map +1 -1
  470. package/dist/infrastructure/sse.d.ts +2 -0
  471. package/dist/infrastructure/sse.js +64 -0
  472. package/dist/infrastructure/sse.js.map +1 -0
  473. package/dist/infrastructure/sse.types.d.ts +4 -0
  474. package/dist/infrastructure/sse.types.js +2 -0
  475. package/dist/infrastructure/sse.types.js.map +1 -0
  476. package/dist/infrastructure/storage-inventory.types.d.ts +2 -1
  477. package/dist/infrastructure/storage-inventory.types.js.map +1 -1
  478. package/dist/infrastructure/storage-reservations.types.d.ts +2 -0
  479. package/dist/infrastructure/storage-reservations.types.js.map +1 -1
  480. package/dist/infrastructure/task-queue-bullmq-resources.d.ts +13 -0
  481. package/dist/infrastructure/task-queue-bullmq-resources.js +118 -0
  482. package/dist/infrastructure/task-queue-bullmq-resources.js.map +1 -0
  483. package/dist/infrastructure/task-queue-bullmq-state.d.ts +5 -0
  484. package/dist/infrastructure/task-queue-bullmq-state.js +26 -0
  485. package/dist/infrastructure/task-queue-bullmq-state.js.map +1 -0
  486. package/dist/infrastructure/task-queue-bullmq.constants.d.ts +7 -0
  487. package/dist/infrastructure/task-queue-bullmq.constants.js +79 -0
  488. package/dist/infrastructure/task-queue-bullmq.constants.js.map +1 -0
  489. package/dist/infrastructure/task-queue-bullmq.d.ts +3 -0
  490. package/dist/infrastructure/task-queue-bullmq.js +124 -0
  491. package/dist/infrastructure/task-queue-bullmq.js.map +1 -0
  492. package/dist/infrastructure/task-queue-bullmq.types.d.ts +17 -0
  493. package/dist/infrastructure/task-queue-bullmq.types.js +2 -0
  494. package/dist/infrastructure/task-queue-bullmq.types.js.map +1 -0
  495. package/dist/infrastructure/transport-archive.constants.d.ts +6 -0
  496. package/dist/infrastructure/transport-archive.constants.js +7 -0
  497. package/dist/infrastructure/transport-archive.constants.js.map +1 -0
  498. package/dist/infrastructure/transport-archive.d.ts +5 -0
  499. package/dist/infrastructure/transport-archive.js +157 -0
  500. package/dist/infrastructure/transport-archive.js.map +1 -0
  501. package/dist/infrastructure/transport-archive.types.d.ts +17 -0
  502. package/dist/infrastructure/transport-archive.types.js +2 -0
  503. package/dist/infrastructure/transport-archive.types.js.map +1 -0
  504. package/dist/infrastructure/transport-artifact-store.d.ts +3 -0
  505. package/dist/infrastructure/transport-artifact-store.js +31 -0
  506. package/dist/infrastructure/transport-artifact-store.js.map +1 -0
  507. package/dist/infrastructure/transport-artifact-store.types.d.ts +4 -0
  508. package/dist/infrastructure/transport-artifact-store.types.js +2 -0
  509. package/dist/infrastructure/transport-artifact-store.types.js.map +1 -0
  510. package/dist/infrastructure/transport-checkpoint.d.ts +5 -0
  511. package/dist/infrastructure/transport-checkpoint.js +105 -0
  512. package/dist/infrastructure/transport-checkpoint.js.map +1 -0
  513. package/dist/infrastructure/transport-checkpoint.types.d.ts +9 -0
  514. package/dist/infrastructure/transport-checkpoint.types.js +2 -0
  515. package/dist/infrastructure/transport-checkpoint.types.js.map +1 -0
  516. package/dist/infrastructure/transport-conversations.d.ts +4 -0
  517. package/dist/infrastructure/transport-conversations.js +76 -0
  518. package/dist/infrastructure/transport-conversations.js.map +1 -0
  519. package/dist/infrastructure/transport-conversations.types.d.ts +4 -0
  520. package/dist/infrastructure/transport-conversations.types.js +2 -0
  521. package/dist/infrastructure/transport-conversations.types.js.map +1 -0
  522. package/dist/infrastructure/transport-envelope.d.ts +7 -0
  523. package/dist/infrastructure/transport-envelope.js +47 -0
  524. package/dist/infrastructure/transport-envelope.js.map +1 -0
  525. package/dist/infrastructure/transport-journal.d.ts +6 -0
  526. package/dist/infrastructure/transport-journal.js +94 -0
  527. package/dist/infrastructure/transport-journal.js.map +1 -0
  528. package/dist/infrastructure/transport-journal.types.d.ts +10 -0
  529. package/dist/infrastructure/transport-journal.types.js +2 -0
  530. package/dist/infrastructure/transport-journal.types.js.map +1 -0
  531. package/dist/infrastructure/transport-json.d.ts +6 -0
  532. package/dist/infrastructure/transport-json.js +46 -0
  533. package/dist/infrastructure/transport-json.js.map +1 -0
  534. package/dist/infrastructure/transport-reservations.d.ts +5 -0
  535. package/dist/infrastructure/transport-reservations.js +89 -0
  536. package/dist/infrastructure/transport-reservations.js.map +1 -0
  537. package/dist/infrastructure/transport-reservations.types.d.ts +4 -0
  538. package/dist/infrastructure/transport-reservations.types.js +2 -0
  539. package/dist/infrastructure/transport-reservations.types.js.map +1 -0
  540. package/dist/infrastructure/transport.constants.d.ts +8 -0
  541. package/dist/infrastructure/transport.constants.js +9 -0
  542. package/dist/infrastructure/transport.constants.js.map +1 -0
  543. package/dist/infrastructure/workflow-checkpoint.js +7 -0
  544. package/dist/infrastructure/workflow-checkpoint.js.map +1 -1
  545. package/dist/infrastructure/workflow-checkpoint.types.d.ts +3 -1
  546. package/dist/infrastructure/workflow-checkpoint.types.js.map +1 -1
  547. package/dist/providers/agents.d.ts +3 -3
  548. package/dist/providers/agents.js +3 -3
  549. package/dist/providers/agents.js.map +1 -1
  550. package/dist/providers/daytona.d.ts +1 -1
  551. package/dist/providers/daytona.js +1 -1
  552. package/dist/providers/daytona.js.map +1 -1
  553. package/dist/providers/docker.d.ts +1 -1
  554. package/dist/providers/docker.js +1 -1
  555. package/dist/providers/docker.js.map +1 -1
  556. package/dist/providers/factories.d.ts +2 -2
  557. package/dist/providers/factories.js +3 -3
  558. package/dist/providers/factories.js.map +1 -1
  559. package/dist/providers/firecracker.d.ts +1 -1
  560. package/dist/providers/firecracker.js +1 -1
  561. package/dist/providers/firecracker.js.map +1 -1
  562. package/dist/providers/local.d.ts +1 -1
  563. package/dist/providers/local.js +1 -1
  564. package/dist/providers/local.js.map +1 -1
  565. package/dist/providers/podman.d.ts +1 -1
  566. package/dist/providers/podman.js +1 -1
  567. package/dist/providers/podman.js.map +1 -1
  568. package/dist/providers/vercel.d.ts +1 -1
  569. package/dist/providers/vercel.js +1 -1
  570. package/dist/providers/vercel.js.map +1 -1
  571. package/package.json +26 -5
  572. package/dist/cli/init-authentication.constants.js.map +0 -1
  573. /package/dist/{cli/init-authentication.constants.d.ts → adapters/agents/authentication.constants.d.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-reservations.js","sourceRoot":"","sources":["../../src/infrastructure/transport-reservations.ts"],"names":[],"mappings":"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","sourcesContent":["import { transportDefaults } from \"./transport.constants.ts\";\nimport { randomUUID } from \"node:crypto\";\nimport type { Transport } from \"../domain/transport.types.ts\";\nimport { TransportConflict } from \"../domain/transport.ts\";\nimport { invariant, recordRecovery } from \"../domain/errors.ts\";\nimport { jsonBytes, jsonObject } from \"./transport-json.ts\";\nimport type {\n StorageReservation,\n StorageReservationOptions,\n} from \"./storage-reservations.types.ts\";\nimport type { ReservationLedger } from \"./transport-reservations.types.ts\";\n\nconst key = \"reservations/ledger\";\n\nexport function reservationLedger(value: unknown): ReservationLedger {\n if (value === undefined) return { format: 1, reservations: {} };\n invariant(\n value &&\n typeof value === \"object\" &&\n \"format\" in value &&\n value.format === 1 &&\n \"reservations\" in value &&\n value.reservations &&\n typeof value.reservations === \"object\" &&\n !Array.isArray(value.reservations),\n \"Invalid reservation ledger\",\n );\n const entries = Object.entries(value.reservations);\n invariant(\n entries.every(\n ([id, bytes]) =>\n /^[a-f0-9-]{36}$/.test(id) &&\n typeof bytes === \"number\" &&\n Number.isSafeInteger(bytes) &&\n bytes >= 0,\n ),\n \"Invalid reservation entry\",\n );\n return { format: 1, reservations: Object.fromEntries(entries) };\n}\n\nexport async function reserveTransportStorage(\n transporter: Transport,\n repository: string,\n options: StorageReservationOptions,\n): Promise<StorageReservation> {\n invariant(\n Number.isSafeInteger(options.maxBytes) &&\n options.maxBytes >= 0 &&\n Number.isSafeInteger(options.reserveBytes) &&\n options.reserveBytes >= 0,\n \"Invalid reservation byte limit\",\n );\n const id = randomUUID();\n const maxEntries = options.maxEntries ?? transportDefaults.maxEntries;\n invariant(\n Number.isSafeInteger(maxEntries) && maxEntries > 0,\n \"Invalid reservation entry limit\",\n );\n async function update(release: boolean): Promise<void> {\n for (\n let attempt = 0;\n attempt < transportDefaults.mutationAttempts;\n attempt++\n ) {\n if (!release) options.signal?.throwIfAborted();\n const current = await transporter.read(key);\n const ledger = reservationLedger(jsonObject(current));\n const reservations = { ...ledger.reservations };\n if (release) delete reservations[id];\n if (!release) {\n let usage = 0,\n count = 0;\n for await (const entry of transporter.list(\n \"\",\n options.signal ? { signal: options.signal } : {},\n )) {\n invariant(\n ++count <= maxEntries,\n \"Reservation inventory is incomplete\",\n );\n if (entry.key !== key) usage += entry.size;\n }\n const reserved = Object.values(reservations).reduce(\n (sum, value) => sum + value,\n 0,\n );\n invariant(\n usage + reserved + options.reserveBytes <= options.maxBytes,\n \"Outpost storage quota admission refused\",\n );\n reservations[id] = options.reserveBytes;\n }\n try {\n await transporter.write(key, jsonBytes({ format: 1, reservations }), {\n ifRevision: current?.revision ?? null,\n ...(!release && options.signal ? { signal: options.signal } : {}),\n });\n return;\n } catch (error) {\n if (!(error instanceof TransportConflict)) throw error;\n }\n }\n throw new Error(\"Storage reservation contention limit exceeded\");\n }\n try {\n await update(false);\n } catch (error) {\n recordRecovery(error, { reservation: id });\n throw error;\n }\n let released = false;\n const release = async () => {\n if (released) return;\n await update(true);\n released = true;\n };\n return {\n id,\n repository,\n reserveBytes: options.reserveBytes,\n release,\n [Symbol.asyncDispose]: release,\n };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export interface ReservationLedger {
2
+ readonly format: 1;
3
+ readonly reservations: Readonly<Record<string, number>>;
4
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=transport-reservations.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-reservations.types.js","sourceRoot":"","sources":["../../src/infrastructure/transport-reservations.types.ts"],"names":[],"mappings":"","sourcesContent":["export interface ReservationLedger {\n readonly format: 1;\n readonly reservations: Readonly<Record<string, number>>;\n}\n"]}
@@ -0,0 +1,8 @@
1
+ export declare const transportDefaults: Readonly<{
2
+ maxBytes: number;
3
+ headerBytes: 1024;
4
+ lockMs: 30000;
5
+ retryMs: 10;
6
+ maxEntries: 100000;
7
+ mutationAttempts: 100;
8
+ }>;
@@ -0,0 +1,9 @@
1
+ export const transportDefaults = Object.freeze({
2
+ maxBytes: 64 * 1024 * 1024,
3
+ headerBytes: 1024,
4
+ lockMs: 30_000,
5
+ retryMs: 10,
6
+ maxEntries: 100_000,
7
+ mutationAttempts: 100,
8
+ });
9
+ //# sourceMappingURL=transport.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport.constants.js","sourceRoot":"","sources":["../../src/infrastructure/transport.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7C,QAAQ,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI;IAC1B,WAAW,EAAE,IAAI;IACjB,MAAM,EAAE,MAAM;IACd,OAAO,EAAE,EAAE;IACX,UAAU,EAAE,OAAO;IACnB,gBAAgB,EAAE,GAAG;CACtB,CAAC,CAAC","sourcesContent":["export const transportDefaults = Object.freeze({\n maxBytes: 64 * 1024 * 1024,\n headerBytes: 1024,\n lockMs: 30_000,\n retryMs: 10,\n maxEntries: 100_000,\n mutationAttempts: 100,\n});\n"]}
@@ -1,3 +1,4 @@
1
+ import { workflowCheckpointStore } from "./transport-checkpoint.js";
1
2
  import { readInspectionFile } from "./inspection-file.js";
2
3
  import { workflowCheckpointMaxBytes } from "./workflow-checkpoint.constants.js";
3
4
  import { createHash, randomUUID } from "node:crypto";
@@ -5,6 +6,12 @@ import { mkdir, open, realpath, rename, rm } from "node:fs/promises";
5
6
  import { join, resolve } from "node:path";
6
7
  import { lock } from "./git/lock.js";
7
8
  export function fileWorkflowCheckpointStore(options) {
9
+ if ((options.directory === undefined) === (options.transporter === undefined))
10
+ throw new Error("Provide exactly one checkpoint directory or transporter");
11
+ if (options.transporter)
12
+ return workflowCheckpointStore({ transporter: options.transporter });
13
+ if (options.directory === undefined)
14
+ throw new Error("Checkpoint directory is required");
8
15
  const configuredDirectory = resolve(options.directory);
9
16
  return {
10
17
  async acquire(runId) {
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-checkpoint.js","sourceRoot":"","sources":["../../src/infrastructure/workflow-checkpoint.ts"],"names":[],"mappings":"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","sourcesContent":["import { readInspectionFile } from \"./inspection-file.ts\";\nimport { workflowCheckpointMaxBytes } from \"./workflow-checkpoint.constants.ts\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { mkdir, open, realpath, rename, rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport type { WorkflowCheckpointStore } from \"../domain/workflow/checkpoint.types.ts\";\nimport type { FileWorkflowCheckpointOptions } from \"./workflow-checkpoint.types.ts\";\nimport { lock } from \"./git/lock.ts\";\n\nexport function fileWorkflowCheckpointStore(\n options: FileWorkflowCheckpointOptions,\n): WorkflowCheckpointStore {\n const configuredDirectory = resolve(options.directory);\n return {\n async acquire(runId) {\n if (!runId.trim()) throw new Error(\"Checkpoint runId must not be empty\");\n await mkdir(configuredDirectory, { recursive: true, mode: 0o700 });\n const directory = await realpath(configuredDirectory);\n const release = await lock(directory, `workflow:${runId}`);\n const path = join(\n directory,\n `${createHash(\"sha256\").update(runId).digest(\"hex\")}.json`,\n );\n let released = false;\n const assertOwned = () => {\n if (released) throw new Error(\"Checkpoint lease has been released\");\n };\n return {\n async read() {\n assertOwned();\n try {\n return JSON.parse(\n (\n await readInspectionFile(path, workflowCheckpointMaxBytes)\n ).toString(\"utf8\"),\n ) as unknown;\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n )\n return undefined;\n throw error;\n }\n },\n async write(checkpoint) {\n assertOwned();\n const data = JSON.stringify(checkpoint);\n if (Buffer.byteLength(data) > workflowCheckpointMaxBytes)\n throw new Error(\n \"Workflow checkpoint exceeds 16 MiB; store large artifacts separately\",\n );\n const temporary = `${path}.${randomUUID()}.tmp`;\n try {\n const file = await open(temporary, \"wx\", 0o600);\n try {\n await file.writeFile(data);\n await file.sync();\n } finally {\n await file.close();\n }\n await rename(temporary, path);\n if (process.platform !== \"win32\") {\n const parent = await open(directory, \"r\");\n try {\n await parent.sync();\n } finally {\n await parent.close();\n }\n }\n } finally {\n await rm(temporary, { force: true });\n }\n },\n async release() {\n if (released) return;\n released = true;\n await release();\n },\n };\n },\n };\n}\n"]}
1
+ {"version":3,"file":"workflow-checkpoint.js","sourceRoot":"","sources":["../../src/infrastructure/workflow-checkpoint.ts"],"names":[],"mappings":"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","sourcesContent":["import { workflowCheckpointStore } from \"./transport-checkpoint.ts\";\nimport { readInspectionFile } from \"./inspection-file.ts\";\nimport { workflowCheckpointMaxBytes } from \"./workflow-checkpoint.constants.ts\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport { mkdir, open, realpath, rename, rm } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport type { WorkflowCheckpointStore } from \"../domain/workflow/checkpoint.types.ts\";\nimport type { FileWorkflowCheckpointOptions } from \"./workflow-checkpoint.types.ts\";\nimport { lock } from \"./git/lock.ts\";\n\nexport function fileWorkflowCheckpointStore(\n options: FileWorkflowCheckpointOptions,\n): WorkflowCheckpointStore {\n if ((options.directory === undefined) === (options.transporter === undefined))\n throw new Error(\"Provide exactly one checkpoint directory or transporter\");\n if (options.transporter)\n return workflowCheckpointStore({ transporter: options.transporter });\n if (options.directory === undefined)\n throw new Error(\"Checkpoint directory is required\");\n const configuredDirectory = resolve(options.directory);\n return {\n async acquire(runId) {\n if (!runId.trim()) throw new Error(\"Checkpoint runId must not be empty\");\n await mkdir(configuredDirectory, { recursive: true, mode: 0o700 });\n const directory = await realpath(configuredDirectory);\n const release = await lock(directory, `workflow:${runId}`);\n const path = join(\n directory,\n `${createHash(\"sha256\").update(runId).digest(\"hex\")}.json`,\n );\n let released = false;\n const assertOwned = () => {\n if (released) throw new Error(\"Checkpoint lease has been released\");\n };\n return {\n async read() {\n assertOwned();\n try {\n return JSON.parse(\n (\n await readInspectionFile(path, workflowCheckpointMaxBytes)\n ).toString(\"utf8\"),\n ) as unknown;\n } catch (error) {\n if (\n error &&\n typeof error === \"object\" &&\n \"code\" in error &&\n error.code === \"ENOENT\"\n )\n return undefined;\n throw error;\n }\n },\n async write(checkpoint) {\n assertOwned();\n const data = JSON.stringify(checkpoint);\n if (Buffer.byteLength(data) > workflowCheckpointMaxBytes)\n throw new Error(\n \"Workflow checkpoint exceeds 16 MiB; store large artifacts separately\",\n );\n const temporary = `${path}.${randomUUID()}.tmp`;\n try {\n const file = await open(temporary, \"wx\", 0o600);\n try {\n await file.writeFile(data);\n await file.sync();\n } finally {\n await file.close();\n }\n await rename(temporary, path);\n if (process.platform !== \"win32\") {\n const parent = await open(directory, \"r\");\n try {\n await parent.sync();\n } finally {\n await parent.close();\n }\n }\n } finally {\n await rm(temporary, { force: true });\n }\n },\n async release() {\n if (released) return;\n released = true;\n await release();\n },\n };\n },\n };\n}\n"]}
@@ -1,4 +1,6 @@
1
+ import type { Transport } from "../domain/transport.types.ts";
1
2
  export interface FileWorkflowCheckpointOptions {
2
3
  /** Private directory for checkpoint data and local process ownership locks. */
3
- readonly directory: string;
4
+ readonly directory?: string;
5
+ readonly transporter?: Transport;
4
6
  }
@@ -1 +1 @@
1
- {"version":3,"file":"workflow-checkpoint.types.js","sourceRoot":"","sources":["../../src/infrastructure/workflow-checkpoint.types.ts"],"names":[],"mappings":"","sourcesContent":["export interface FileWorkflowCheckpointOptions {\n /** Private directory for checkpoint data and local process ownership locks. */\n readonly directory: string;\n}\n"]}
1
+ {"version":3,"file":"workflow-checkpoint.types.js","sourceRoot":"","sources":["../../src/infrastructure/workflow-checkpoint.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Transport } from \"../domain/transport.types.ts\";\n\nexport interface FileWorkflowCheckpointOptions {\n /** Private directory for checkpoint data and local process ownership locks. */\n readonly directory?: string;\n readonly transporter?: Transport;\n}\n"]}
@@ -1,5 +1,5 @@
1
- export { claude } from "../adapters/agents/claude-adapter.ts";
2
- export { codex } from "../adapters/agents/codex-adapter.ts";
3
- export { gemini } from "../adapters/agents/gemini-adapter.ts";
1
+ export { claudeHarness } from "../adapters/agents/claude-adapter.ts";
2
+ export { codexHarness } from "../adapters/agents/codex-adapter.ts";
3
+ export { geminiHarness } from "../adapters/agents/gemini-adapter.ts";
4
4
  export type { GeminiSettings } from "../adapters/agents/gemini.types.ts";
5
5
  export type { ClaudeSettings, CodexSettings, CodexModelProvider, } from "../adapters/agents/settings.types.ts";
@@ -1,4 +1,4 @@
1
- export { claude } from "../adapters/agents/claude-adapter.js";
2
- export { codex } from "../adapters/agents/codex-adapter.js";
3
- export { gemini } from "../adapters/agents/gemini-adapter.js";
1
+ export { claudeHarness } from "../adapters/agents/claude-adapter.js";
2
+ export { codexHarness } from "../adapters/agents/codex-adapter.js";
3
+ export { geminiHarness } from "../adapters/agents/gemini-adapter.js";
4
4
  //# sourceMappingURL=agents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/providers/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC9D,OAAO,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC","sourcesContent":["export { claude } from \"../adapters/agents/claude-adapter.ts\";\nexport { codex } from \"../adapters/agents/codex-adapter.ts\";\nexport { gemini } from \"../adapters/agents/gemini-adapter.ts\";\nexport type { GeminiSettings } from \"../adapters/agents/gemini.types.ts\";\nexport type {\n ClaudeSettings,\n CodexSettings,\n CodexModelProvider,\n} from \"../adapters/agents/settings.types.ts\";\n"]}
1
+ {"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/providers/agents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qCAAqC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC","sourcesContent":["export { claudeHarness } from \"../adapters/agents/claude-adapter.ts\";\nexport { codexHarness } from \"../adapters/agents/codex-adapter.ts\";\nexport { geminiHarness } from \"../adapters/agents/gemini-adapter.ts\";\nexport type { GeminiSettings } from \"../adapters/agents/gemini.types.ts\";\nexport type {\n ClaudeSettings,\n CodexSettings,\n CodexModelProvider,\n} from \"../adapters/agents/settings.types.ts\";\n"]}
@@ -2,4 +2,4 @@ import type { Daytona, DaytonaConfig } from "@daytona/sdk";
2
2
  import type { SandboxProvider } from "../domain/sandbox.types.ts";
3
3
  import type { DaytonaOptions } from "./daytona.types.ts";
4
4
  export type { DaytonaOptions } from "./daytona.types.ts";
5
- export declare function daytona(options?: DaytonaOptions, connect?: (config?: DaytonaConfig) => Promise<Pick<Daytona, "create" | "delete">>): SandboxProvider;
5
+ export declare function daytonaSandboxProvider(options?: DaytonaOptions, connect?: (config?: DaytonaConfig) => Promise<Pick<Daytona, "create" | "delete">>): SandboxProvider;
@@ -5,7 +5,7 @@ import { registerCleanup } from "../infrastructure/shutdown.js";
5
5
  import { cloudRoots } from "./cloud.constants.js";
6
6
  import { daytonaCommand } from "./daytona-command.js";
7
7
  import { daytonaFiles } from "./daytona-files.js";
8
- export function daytona(options = {}, connect = async (config) => new (await import("@daytona/sdk")).Daytona(config)) {
8
+ export function daytonaSandboxProvider(options = {}, connect = async (config) => new (await import("@daytona/sdk")).Daytona(config)) {
9
9
  invariant(!("egress" in options) || options.egress === undefined, "Daytona does not support Outpost egress policies; configure provider-native networking explicitly");
10
10
  return {
11
11
  name: "daytona",
@@ -1 +1 @@
1
- {"version":3,"file":"daytona.js","sourceRoot":"","sources":["../../src/providers/daytona.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Daytona, DaytonaConfig } from \"@daytona/sdk\";\nimport { invariant } from \"../domain/errors.ts\";\nimport { posix } from \"node:path\";\nimport type { SandboxProvider } from \"../domain/sandbox.types.ts\";\nimport { fileBatches } from \"./file-batches.ts\";\nimport { registerCleanup } from \"../infrastructure/shutdown.ts\";\nimport { cloudRoots } from \"./cloud.constants.ts\";\nimport { daytonaCommand } from \"./daytona-command.ts\";\nimport { daytonaFiles } from \"./daytona-files.ts\";\nimport type { DaytonaOptions } from \"./daytona.types.ts\";\n\nexport type { DaytonaOptions } from \"./daytona.types.ts\";\n\nexport function daytona(\n options: DaytonaOptions = {},\n connect: (\n config?: DaytonaConfig,\n ) => Promise<Pick<Daytona, \"create\" | \"delete\">> = async (config) =>\n new (await import(\"@daytona/sdk\")).Daytona(config),\n): SandboxProvider {\n invariant(\n !(\"egress\" in options) || options.egress === undefined,\n \"Daytona does not support Outpost egress policies; configure provider-native networking explicitly\",\n );\n return {\n name: \"daytona\",\n placement: \"remote\",\n variables: { ...options.variables },\n async acquire(context) {\n context.signal?.throwIfAborted();\n const client = await connect(options.connection);\n const sandbox = await client.create(options.create ?? {});\n let closed = false,\n releasing: Promise<void> | undefined;\n let unregister = () => {};\n const release = () =>\n (releasing ??= client\n .delete(sandbox)\n .then(() => {\n closed = true;\n unregister();\n })\n .catch((error) => {\n releasing = undefined;\n throw error;\n }));\n unregister = registerCleanup(release);\n let home: string;\n let root: string;\n try {\n home = (await sandbox.getUserHomeDir()) ?? cloudRoots.daytonaHome;\n root = options.root ?? posix.join(home, \"outpost\");\n await sandbox.fs.createFolder(root, \"755\");\n } catch (cause) {\n try {\n await release();\n } catch (cleanup) {\n throw new AggregateError(\n [cause, cleanup],\n \"Cloud setup and cleanup failed\",\n );\n }\n throw cause;\n }\n const lease = {\n root,\n home,\n invoke: daytonaCommand({\n sandbox,\n root,\n options,\n context,\n isClosed: () => closed,\n }),\n ...daytonaFiles(sandbox),\n release,\n };\n return { ...lease, fileTransfers: fileBatches(lease) };\n },\n };\n}\n"]}
1
+ {"version":3,"file":"daytona.js","sourceRoot":"","sources":["../../src/providers/daytona.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Daytona, DaytonaConfig } from \"@daytona/sdk\";\nimport { invariant } from \"../domain/errors.ts\";\nimport { posix } from \"node:path\";\nimport type { SandboxProvider } from \"../domain/sandbox.types.ts\";\nimport { fileBatches } from \"./file-batches.ts\";\nimport { registerCleanup } from \"../infrastructure/shutdown.ts\";\nimport { cloudRoots } from \"./cloud.constants.ts\";\nimport { daytonaCommand } from \"./daytona-command.ts\";\nimport { daytonaFiles } from \"./daytona-files.ts\";\nimport type { DaytonaOptions } from \"./daytona.types.ts\";\n\nexport type { DaytonaOptions } from \"./daytona.types.ts\";\n\nexport function daytonaSandboxProvider(\n options: DaytonaOptions = {},\n connect: (\n config?: DaytonaConfig,\n ) => Promise<Pick<Daytona, \"create\" | \"delete\">> = async (config) =>\n new (await import(\"@daytona/sdk\")).Daytona(config),\n): SandboxProvider {\n invariant(\n !(\"egress\" in options) || options.egress === undefined,\n \"Daytona does not support Outpost egress policies; configure provider-native networking explicitly\",\n );\n return {\n name: \"daytona\",\n placement: \"remote\",\n variables: { ...options.variables },\n async acquire(context) {\n context.signal?.throwIfAborted();\n const client = await connect(options.connection);\n const sandbox = await client.create(options.create ?? {});\n let closed = false,\n releasing: Promise<void> | undefined;\n let unregister = () => {};\n const release = () =>\n (releasing ??= client\n .delete(sandbox)\n .then(() => {\n closed = true;\n unregister();\n })\n .catch((error) => {\n releasing = undefined;\n throw error;\n }));\n unregister = registerCleanup(release);\n let home: string;\n let root: string;\n try {\n home = (await sandbox.getUserHomeDir()) ?? cloudRoots.daytonaHome;\n root = options.root ?? posix.join(home, \"outpost\");\n await sandbox.fs.createFolder(root, \"755\");\n } catch (cause) {\n try {\n await release();\n } catch (cleanup) {\n throw new AggregateError(\n [cause, cleanup],\n \"Cloud setup and cleanup failed\",\n );\n }\n throw cause;\n }\n const lease = {\n root,\n home,\n invoke: daytonaCommand({\n sandbox,\n root,\n options,\n context,\n isClosed: () => closed,\n }),\n ...daytonaFiles(sandbox),\n release,\n };\n return { ...lease, fileTransfers: fileBatches(lease) };\n },\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { ContainerOptions } from "./container.types.ts";
2
2
  export type { ContainerOptions } from "./container.ts";
3
- export declare const docker: (options?: ContainerOptions) => import("../index.ts").SandboxProvider;
3
+ export declare const dockerSandboxProvider: (options?: ContainerOptions) => import("../index.ts").SandboxProvider;
4
4
  export type { DependencyCache } from "./container-cache.types.ts";
5
5
  export type { EgressPolicy } from "../domain/egress.types.ts";
@@ -1,3 +1,3 @@
1
1
  import { containerProvider } from "./container.js";
2
- export const docker = (options = {}) => containerProvider("docker", options);
2
+ export const dockerSandboxProvider = (options = {}) => containerProvider("docker", options);
3
3
  //# sourceMappingURL=docker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/providers/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAA4B,EAAE,EAAE,EAAE,CACvD,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC","sourcesContent":["import { containerProvider } from \"./container.ts\";\nimport type { ContainerOptions } from \"./container.types.ts\";\n\nexport type { ContainerOptions } from \"./container.ts\";\n\nexport const docker = (options: ContainerOptions = {}) =>\n containerProvider(\"docker\", options);\n\nexport type { DependencyCache } from \"./container-cache.types.ts\";\n\nexport type { EgressPolicy } from \"../domain/egress.types.ts\";\n"]}
1
+ {"version":3,"file":"docker.js","sourceRoot":"","sources":["../../src/providers/docker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,UAA4B,EAAE,EAAE,EAAE,CACtE,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC","sourcesContent":["import { containerProvider } from \"./container.ts\";\nimport type { ContainerOptions } from \"./container.types.ts\";\n\nexport type { ContainerOptions } from \"./container.ts\";\n\nexport const dockerSandboxProvider = (options: ContainerOptions = {}) =>\n containerProvider(\"docker\", options);\n\nexport type { DependencyCache } from \"./container-cache.types.ts\";\n\nexport type { EgressPolicy } from \"../domain/egress.types.ts\";\n"]}
@@ -1,4 +1,4 @@
1
1
  import type { SandboxProvider } from "../domain/sandbox.types.ts";
2
2
  import type { ProviderDefinition } from "./factories.types.ts";
3
- export declare const mountedProvider: (definition: ProviderDefinition) => SandboxProvider;
4
- export declare const remoteProvider: (definition: ProviderDefinition) => SandboxProvider;
3
+ export declare const mountedSandboxProvider: (definition: ProviderDefinition) => SandboxProvider;
4
+ export declare const remoteSandboxProvider: (definition: ProviderDefinition) => SandboxProvider;
@@ -1,5 +1,5 @@
1
1
  import { invariant } from "../domain/errors.js";
2
- function provider(placement, definition) {
2
+ function sandboxProvider(placement, definition) {
3
3
  invariant(definition.name.trim(), "A provider needs a name");
4
4
  return Object.freeze({
5
5
  ...definition,
@@ -7,6 +7,6 @@ function provider(placement, definition) {
7
7
  variables: Object.freeze({ ...definition.variables }),
8
8
  });
9
9
  }
10
- export const mountedProvider = (definition) => provider("mounted", definition);
11
- export const remoteProvider = (definition) => provider("remote", definition);
10
+ export const mountedSandboxProvider = (definition) => sandboxProvider("mounted", definition);
11
+ export const remoteSandboxProvider = (definition) => sandboxProvider("remote", definition);
12
12
  //# sourceMappingURL=factories.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../src/providers/factories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,SAAS,QAAQ,CACf,SAA+B,EAC/B,UAA8B;IAE9B,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,UAAU;QACb,SAAS;QACT,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;KACtD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,UAA8B,EACb,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAC5B,UAA8B,EACb,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC","sourcesContent":["import { invariant } from \"../domain/errors.ts\";\nimport type { SandboxProvider } from \"../domain/sandbox.types.ts\";\nimport type { ProviderDefinition } from \"./factories.types.ts\";\n\nfunction provider(\n placement: \"mounted\" | \"remote\",\n definition: ProviderDefinition,\n): SandboxProvider {\n invariant(definition.name.trim(), \"A provider needs a name\");\n return Object.freeze({\n ...definition,\n placement,\n variables: Object.freeze({ ...definition.variables }),\n });\n}\n\nexport const mountedProvider = (\n definition: ProviderDefinition,\n): SandboxProvider => provider(\"mounted\", definition);\n\nexport const remoteProvider = (\n definition: ProviderDefinition,\n): SandboxProvider => provider(\"remote\", definition);\n"]}
1
+ {"version":3,"file":"factories.js","sourceRoot":"","sources":["../../src/providers/factories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,SAAS,eAAe,CACtB,SAA+B,EAC/B,UAA8B;IAE9B,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,yBAAyB,CAAC,CAAC;IAC7D,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,GAAG,UAAU;QACb,SAAS;QACT,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,UAAU,CAAC,SAAS,EAAE,CAAC;KACtD,CAAC,CAAC;AACL,CAAC;AAED,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,UAA8B,EACb,EAAE,CAAC,eAAe,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;AAE7D,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,UAA8B,EACb,EAAE,CAAC,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC","sourcesContent":["import { invariant } from \"../domain/errors.ts\";\nimport type { SandboxProvider } from \"../domain/sandbox.types.ts\";\nimport type { ProviderDefinition } from \"./factories.types.ts\";\n\nfunction sandboxProvider(\n placement: \"mounted\" | \"remote\",\n definition: ProviderDefinition,\n): SandboxProvider {\n invariant(definition.name.trim(), \"A provider needs a name\");\n return Object.freeze({\n ...definition,\n placement,\n variables: Object.freeze({ ...definition.variables }),\n });\n}\n\nexport const mountedSandboxProvider = (\n definition: ProviderDefinition,\n): SandboxProvider => sandboxProvider(\"mounted\", definition);\n\nexport const remoteSandboxProvider = (\n definition: ProviderDefinition,\n): SandboxProvider => sandboxProvider(\"remote\", definition);\n"]}
@@ -1,4 +1,4 @@
1
1
  import type { SandboxProvider } from "../domain/sandbox.types.ts";
2
2
  import type { FirecrackerOptions } from "./firecracker.types.ts";
3
3
  export type { FirecrackerOptions } from "./firecracker.types.ts";
4
- export declare function firecracker(options: FirecrackerOptions): SandboxProvider;
4
+ export declare function firecrackerSandboxProvider(options: FirecrackerOptions): SandboxProvider;
@@ -5,7 +5,7 @@ import { firecrackerCommand, firecrackerSsh } from "./firecracker-command.js";
5
5
  import { firecrackerDefaults } from "./firecracker.constants.js";
6
6
  import { firecrackerFiles } from "./firecracker-files.js";
7
7
  import { firecrackerMachine, validateFirecracker, } from "./firecracker-machine.js";
8
- export function firecracker(options) {
8
+ export function firecrackerSandboxProvider(options) {
9
9
  validateFirecracker(options);
10
10
  let allocated = false;
11
11
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"firecracker.js","sourceRoot":"","sources":["../../src/providers/firecracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { setTimeout as delay } from \"node:timers/promises\";\nimport { OutpostError } from \"../domain/errors.ts\";\nimport type { SandboxProvider } from \"../domain/sandbox.types.ts\";\nimport { executeProcess, quote } from \"../infrastructure/process.ts\";\nimport { firecrackerCommand, firecrackerSsh } from \"./firecracker-command.ts\";\nimport { firecrackerDefaults } from \"./firecracker.constants.ts\";\nimport { firecrackerFiles } from \"./firecracker-files.ts\";\nimport {\n firecrackerMachine,\n validateFirecracker,\n} from \"./firecracker-machine.ts\";\nimport type { FirecrackerOptions } from \"./firecracker.types.ts\";\n\nexport type { FirecrackerOptions } from \"./firecracker.types.ts\";\n\nexport function firecracker(options: FirecrackerOptions): SandboxProvider {\n validateFirecracker(options);\n let allocated = false;\n return {\n name: \"firecracker\",\n placement: \"remote\",\n variables: { ...options.variables },\n async acquire(context) {\n if (allocated)\n throw new OutpostError(\n \"provider\",\n \"This Firecracker provider already owns its TAP; create separate configurations for concurrent VMs\",\n );\n allocated = true;\n let machine;\n try {\n machine = await firecrackerMachine(options, context.signal);\n } catch (cause) {\n allocated = false;\n throw cause;\n }\n const root = options.root ?? firecrackerDefaults.root;\n let closed = false;\n const active = new Set<Promise<unknown>>();\n const stop = new AbortController();\n const runtime = {\n options,\n root,\n variables: context.variables,\n executor: executeProcess,\n isClosed: () => closed || machine.isClosed(),\n };\n let releasing: Promise<void> | undefined;\n const release = () =>\n (releasing ??= (async () => {\n closed = true;\n stop.abort(\n new OutpostError(\"aborted\", \"Firecracker sandbox disposed\"),\n );\n await Promise.allSettled([...active]);\n await machine.release();\n allocated = false;\n })().catch((cause) => {\n releasing = undefined;\n throw cause;\n }));\n try {\n const deadline =\n Date.now() +\n (options.bootDeadlineMs ?? firecrackerDefaults.bootDeadlineMs);\n while (true) {\n context.signal?.throwIfAborted();\n if (machine.isClosed())\n throw new OutpostError(\n \"provider\",\n \"Firecracker exited before guest readiness\",\n );\n const result = await executeProcess({\n ...firecrackerSsh(\n options,\n `test \"$HOME\" = ${quote(options.home)} && node -e 'if(Number(process.versions.node.split(\".\")[0])<24)process.exit(1)' && command -v git setsid tar >/dev/null && mkdir -p ${quote(root)}`,\n ),\n deadlineMs: Math.max(\n 1,\n Math.min(firecrackerDefaults.probeMs, deadline - Date.now()),\n ),\n ...(context.signal ? { signal: context.signal } : {}),\n }).catch((cause) => {\n context.signal?.throwIfAborted();\n return { status: 1, stdout: \"\", stderr: String(cause) };\n });\n if (machine.isClosed())\n throw new OutpostError(\n \"provider\",\n \"Firecracker exited during guest readiness\",\n );\n if (result.status === 0) break;\n if (Date.now() >= deadline)\n throw new OutpostError(\n \"timeout\",\n \"Firecracker guest SSH/prerequisites did not become ready\",\n { stderr: result.stderr },\n );\n await delay(100, undefined, { signal: context.signal });\n }\n } catch (cause) {\n try {\n await release();\n } catch (cleanup) {\n throw new AggregateError(\n [cause, cleanup],\n \"Firecracker acquisition and cleanup failed\",\n );\n }\n throw cause;\n }\n const invoke = firecrackerCommand(runtime);\n const files = firecrackerFiles(runtime);\n const track = <T>(\n operation: (signal: AbortSignal) => Promise<T>,\n signal?: AbortSignal,\n ): Promise<T> => {\n if (closed)\n return Promise.reject(\n new OutpostError(\"provider\", \"Firecracker sandbox is closed\"),\n );\n const pending = operation(\n signal ? AbortSignal.any([signal, stop.signal]) : stop.signal,\n );\n active.add(pending);\n void pending.then(\n () => active.delete(pending),\n () => active.delete(pending),\n );\n return pending;\n };\n return {\n root,\n home: options.home,\n invoke: (command) =>\n track((signal) => invoke({ ...command, signal }), command.signal),\n upload: (source, destination, options = {}) =>\n track(\n (signal) =>\n files.upload(source, destination, { ...options, signal }),\n options.signal,\n ),\n download: (source, destination, options = {}) =>\n track(\n (signal) =>\n files.download(source, destination, { ...options, signal }),\n options.signal,\n ),\n release,\n };\n },\n };\n}\n"]}
1
+ {"version":3,"file":"firecracker.js","sourceRoot":"","sources":["../../src/providers/firecracker.ts"],"names":[],"mappings":"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","sourcesContent":["import { setTimeout as delay } from \"node:timers/promises\";\nimport { OutpostError } from \"../domain/errors.ts\";\nimport type { SandboxProvider } from \"../domain/sandbox.types.ts\";\nimport { executeProcess, quote } from \"../infrastructure/process.ts\";\nimport { firecrackerCommand, firecrackerSsh } from \"./firecracker-command.ts\";\nimport { firecrackerDefaults } from \"./firecracker.constants.ts\";\nimport { firecrackerFiles } from \"./firecracker-files.ts\";\nimport {\n firecrackerMachine,\n validateFirecracker,\n} from \"./firecracker-machine.ts\";\nimport type { FirecrackerOptions } from \"./firecracker.types.ts\";\n\nexport type { FirecrackerOptions } from \"./firecracker.types.ts\";\n\nexport function firecrackerSandboxProvider(\n options: FirecrackerOptions,\n): SandboxProvider {\n validateFirecracker(options);\n let allocated = false;\n return {\n name: \"firecracker\",\n placement: \"remote\",\n variables: { ...options.variables },\n async acquire(context) {\n if (allocated)\n throw new OutpostError(\n \"provider\",\n \"This Firecracker provider already owns its TAP; create separate configurations for concurrent VMs\",\n );\n allocated = true;\n let machine;\n try {\n machine = await firecrackerMachine(options, context.signal);\n } catch (cause) {\n allocated = false;\n throw cause;\n }\n const root = options.root ?? firecrackerDefaults.root;\n let closed = false;\n const active = new Set<Promise<unknown>>();\n const stop = new AbortController();\n const runtime = {\n options,\n root,\n variables: context.variables,\n executor: executeProcess,\n isClosed: () => closed || machine.isClosed(),\n };\n let releasing: Promise<void> | undefined;\n const release = () =>\n (releasing ??= (async () => {\n closed = true;\n stop.abort(\n new OutpostError(\"aborted\", \"Firecracker sandbox disposed\"),\n );\n await Promise.allSettled([...active]);\n await machine.release();\n allocated = false;\n })().catch((cause) => {\n releasing = undefined;\n throw cause;\n }));\n try {\n const deadline =\n Date.now() +\n (options.bootDeadlineMs ?? firecrackerDefaults.bootDeadlineMs);\n while (true) {\n context.signal?.throwIfAborted();\n if (machine.isClosed())\n throw new OutpostError(\n \"provider\",\n \"Firecracker exited before guest readiness\",\n );\n const result = await executeProcess({\n ...firecrackerSsh(\n options,\n `test \"$HOME\" = ${quote(options.home)} && node -e 'if(Number(process.versions.node.split(\".\")[0])<24)process.exit(1)' && command -v git setsid tar >/dev/null && mkdir -p ${quote(root)}`,\n ),\n deadlineMs: Math.max(\n 1,\n Math.min(firecrackerDefaults.probeMs, deadline - Date.now()),\n ),\n ...(context.signal ? { signal: context.signal } : {}),\n }).catch((cause) => {\n context.signal?.throwIfAborted();\n return { status: 1, stdout: \"\", stderr: String(cause) };\n });\n if (machine.isClosed())\n throw new OutpostError(\n \"provider\",\n \"Firecracker exited during guest readiness\",\n );\n if (result.status === 0) break;\n if (Date.now() >= deadline)\n throw new OutpostError(\n \"timeout\",\n \"Firecracker guest SSH/prerequisites did not become ready\",\n { stderr: result.stderr },\n );\n await delay(100, undefined, { signal: context.signal });\n }\n } catch (cause) {\n try {\n await release();\n } catch (cleanup) {\n throw new AggregateError(\n [cause, cleanup],\n \"Firecracker acquisition and cleanup failed\",\n );\n }\n throw cause;\n }\n const invoke = firecrackerCommand(runtime);\n const files = firecrackerFiles(runtime);\n const track = <T>(\n operation: (signal: AbortSignal) => Promise<T>,\n signal?: AbortSignal,\n ): Promise<T> => {\n if (closed)\n return Promise.reject(\n new OutpostError(\"provider\", \"Firecracker sandbox is closed\"),\n );\n const pending = operation(\n signal ? AbortSignal.any([signal, stop.signal]) : stop.signal,\n );\n active.add(pending);\n void pending.then(\n () => active.delete(pending),\n () => active.delete(pending),\n );\n return pending;\n };\n return {\n root,\n home: options.home,\n invoke: (command) =>\n track((signal) => invoke({ ...command, signal }), command.signal),\n upload: (source, destination, options = {}) =>\n track(\n (signal) =>\n files.upload(source, destination, { ...options, signal }),\n options.signal,\n ),\n download: (source, destination, options = {}) =>\n track(\n (signal) =>\n files.download(source, destination, { ...options, signal }),\n options.signal,\n ),\n release,\n };\n },\n };\n}\n"]}
@@ -1,3 +1,3 @@
1
1
  import type { SandboxProvider } from "../domain/sandbox.types.ts";
2
2
  import type { LocalOptions } from "./local.types.ts";
3
- export declare function local(options?: LocalOptions): SandboxProvider;
3
+ export declare function localSandboxProvider(options?: LocalOptions): SandboxProvider;
@@ -3,7 +3,7 @@ import { homedir } from "node:os";
3
3
  import { dirname, resolve } from "node:path";
4
4
  import { invariant, OutpostError } from "../domain/errors.js";
5
5
  import { executeProcess } from "../infrastructure/process.js";
6
- export function local(options = {}) {
6
+ export function localSandboxProvider(options = {}) {
7
7
  invariant(!("egress" in options) || options.egress === undefined, "Local execution cannot enforce egress policies");
8
8
  return {
9
9
  name: "local",
@@ -1 +1 @@
1
- {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/providers/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAK9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,MAAM,UAAU,KAAK,CAAC,UAAwB,EAAE;IAC9C,SAAS,CACP,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EACtD,gDAAgD,CACjD,CAAC;IACF,OAAO;QACL,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE;QACnC,KAAK,CAAC,OAAO,CAAC,OAAO;YACnB,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;YAC3C,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,EAChB,MAAc,EACd,WAAmB,EACnB,UAA2B,EAAE,EAC7B,EAAE;gBACF,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;gBACjC,IAAI,QAAQ;oBACV,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;gBAChE,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC;oBAAE,OAAO;gBACrD,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE;oBAC5B,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,GAAG,EAAE;wBACX,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;wBACjC,OAAO,IAAI,CAAC;oBACd,CAAC;iBACF,CAAC,CAAC;YACL,CAAC,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,SAAS;gBACvB,IAAI,EAAE,OAAO,EAAE;gBACf,MAAM,CAAC,OAAgB;oBACrB,IAAI,QAAQ;wBACV,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,YAAY,CAAC,UAAU,EAAE,yBAAyB,CAAC,CACxD,CAAC;oBACJ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;wBAC3B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;wBAChD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;oBAChB,MAAM,OAAO,GAAG,cAAc,CAAC;wBAC7B,GAAG,OAAO;wBACV,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;wBACjD,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE;wBACzD,MAAM;qBACP,CAAC,CAAC;oBACH,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACpB,KAAK,OAAO,CAAC,IAAI,CACf,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAC5B,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAC7B,CAAC;oBACF,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;gBACd,KAAK,CAAC,OAAO;oBACX,IAAI,QAAQ;wBAAE,OAAO;oBACrB,QAAQ,GAAG,IAAI,CAAC;oBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;oBAC5D,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnC,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { cp, mkdir } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, resolve } from \"node:path\";\nimport type { Command } from \"../domain/command.types.ts\";\nimport { invariant, OutpostError } from \"../domain/errors.ts\";\nimport type {\n SandboxProvider,\n TransferOptions,\n} from \"../domain/sandbox.types.ts\";\nimport { executeProcess } from \"../infrastructure/process.ts\";\nimport type { LocalOptions } from \"./local.types.ts\";\n\nexport function local(options: LocalOptions = {}): SandboxProvider {\n invariant(\n !(\"egress\" in options) || options.egress === undefined,\n \"Local execution cannot enforce egress policies\",\n );\n return {\n name: \"local\",\n placement: \"host\",\n variables: { ...options.variables },\n async acquire(context) {\n context.signal?.throwIfAborted();\n const stop = new AbortController();\n const active = new Set<Promise<unknown>>();\n let disposed = false;\n const copy = async (\n source: string,\n destination: string,\n options: TransferOptions = {},\n ) => {\n options.signal?.throwIfAborted();\n if (disposed)\n throw new OutpostError(\"provider\", \"Local sandbox is closed\");\n if (resolve(source) === resolve(destination)) return;\n await mkdir(dirname(destination), { recursive: true });\n await cp(source, destination, {\n recursive: true,\n force: true,\n filter: () => {\n options.signal?.throwIfAborted();\n return true;\n },\n });\n };\n return {\n root: context.directory,\n home: homedir(),\n invoke(command: Command) {\n if (disposed)\n return Promise.reject(\n new OutpostError(\"provider\", \"Local sandbox is closed\"),\n );\n const signal = command.signal\n ? AbortSignal.any([command.signal, stop.signal])\n : stop.signal;\n const pending = executeProcess({\n ...command,\n directory: command.directory ?? context.directory,\n variables: { ...context.variables, ...command.variables },\n signal,\n });\n active.add(pending);\n void pending.then(\n () => active.delete(pending),\n () => active.delete(pending),\n );\n return pending;\n },\n upload: copy,\n download: copy,\n async release() {\n if (disposed) return;\n disposed = true;\n stop.abort(new OutpostError(\"aborted\", \"Sandbox disposed\"));\n await Promise.allSettled(active);\n },\n };\n },\n };\n}\n"]}
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/providers/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAK9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAG9D,MAAM,UAAU,oBAAoB,CAClC,UAAwB,EAAE;IAE1B,SAAS,CACP,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EACtD,gDAAgD,CACjD,CAAC;IACF,OAAO;QACL,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE;QACnC,KAAK,CAAC,OAAO,CAAC,OAAO;YACnB,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAoB,CAAC;YAC3C,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,MAAM,IAAI,GAAG,KAAK,EAChB,MAAc,EACd,WAAmB,EACnB,UAA2B,EAAE,EAC7B,EAAE;gBACF,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;gBACjC,IAAI,QAAQ;oBACV,MAAM,IAAI,YAAY,CAAC,UAAU,EAAE,yBAAyB,CAAC,CAAC;gBAChE,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC,WAAW,CAAC;oBAAE,OAAO;gBACrD,MAAM,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvD,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE;oBAC5B,SAAS,EAAE,IAAI;oBACf,KAAK,EAAE,IAAI;oBACX,MAAM,EAAE,GAAG,EAAE;wBACX,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;wBACjC,OAAO,IAAI,CAAC;oBACd,CAAC;iBACF,CAAC,CAAC;YACL,CAAC,CAAC;YACF,OAAO;gBACL,IAAI,EAAE,OAAO,CAAC,SAAS;gBACvB,IAAI,EAAE,OAAO,EAAE;gBACf,MAAM,CAAC,OAAgB;oBACrB,IAAI,QAAQ;wBACV,OAAO,OAAO,CAAC,MAAM,CACnB,IAAI,YAAY,CAAC,UAAU,EAAE,yBAAyB,CAAC,CACxD,CAAC;oBACJ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM;wBAC3B,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;wBAChD,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;oBAChB,MAAM,OAAO,GAAG,cAAc,CAAC;wBAC7B,GAAG,OAAO;wBACV,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,SAAS;wBACjD,SAAS,EAAE,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE;wBACzD,MAAM;qBACP,CAAC,CAAC;oBACH,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBACpB,KAAK,OAAO,CAAC,IAAI,CACf,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAC5B,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAC7B,CAAC;oBACF,OAAO,OAAO,CAAC;gBACjB,CAAC;gBACD,MAAM,EAAE,IAAI;gBACZ,QAAQ,EAAE,IAAI;gBACd,KAAK,CAAC,OAAO;oBACX,IAAI,QAAQ;wBAAE,OAAO;oBACrB,QAAQ,GAAG,IAAI,CAAC;oBAChB,IAAI,CAAC,KAAK,CAAC,IAAI,YAAY,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC,CAAC;oBAC5D,MAAM,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACnC,CAAC;aACF,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import { cp, mkdir } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, resolve } from \"node:path\";\nimport type { Command } from \"../domain/command.types.ts\";\nimport { invariant, OutpostError } from \"../domain/errors.ts\";\nimport type {\n SandboxProvider,\n TransferOptions,\n} from \"../domain/sandbox.types.ts\";\nimport { executeProcess } from \"../infrastructure/process.ts\";\nimport type { LocalOptions } from \"./local.types.ts\";\n\nexport function localSandboxProvider(\n options: LocalOptions = {},\n): SandboxProvider {\n invariant(\n !(\"egress\" in options) || options.egress === undefined,\n \"Local execution cannot enforce egress policies\",\n );\n return {\n name: \"local\",\n placement: \"host\",\n variables: { ...options.variables },\n async acquire(context) {\n context.signal?.throwIfAborted();\n const stop = new AbortController();\n const active = new Set<Promise<unknown>>();\n let disposed = false;\n const copy = async (\n source: string,\n destination: string,\n options: TransferOptions = {},\n ) => {\n options.signal?.throwIfAborted();\n if (disposed)\n throw new OutpostError(\"provider\", \"Local sandbox is closed\");\n if (resolve(source) === resolve(destination)) return;\n await mkdir(dirname(destination), { recursive: true });\n await cp(source, destination, {\n recursive: true,\n force: true,\n filter: () => {\n options.signal?.throwIfAborted();\n return true;\n },\n });\n };\n return {\n root: context.directory,\n home: homedir(),\n invoke(command: Command) {\n if (disposed)\n return Promise.reject(\n new OutpostError(\"provider\", \"Local sandbox is closed\"),\n );\n const signal = command.signal\n ? AbortSignal.any([command.signal, stop.signal])\n : stop.signal;\n const pending = executeProcess({\n ...command,\n directory: command.directory ?? context.directory,\n variables: { ...context.variables, ...command.variables },\n signal,\n });\n active.add(pending);\n void pending.then(\n () => active.delete(pending),\n () => active.delete(pending),\n );\n return pending;\n },\n upload: copy,\n download: copy,\n async release() {\n if (disposed) return;\n disposed = true;\n stop.abort(new OutpostError(\"aborted\", \"Sandbox disposed\"));\n await Promise.allSettled(active);\n },\n };\n },\n };\n}\n"]}
@@ -1,5 +1,5 @@
1
1
  import type { ContainerOptions } from "./container.types.ts";
2
2
  export type { ContainerOptions } from "./container.ts";
3
- export declare const podman: (options?: ContainerOptions) => import("../index.ts").SandboxProvider;
3
+ export declare const podmanSandboxProvider: (options?: ContainerOptions) => import("../index.ts").SandboxProvider;
4
4
  export type { DependencyCache } from "./container-cache.types.ts";
5
5
  export type { EgressPolicy } from "../domain/egress.types.ts";
@@ -1,3 +1,3 @@
1
1
  import { containerProvider } from "./container.js";
2
- export const podman = (options = {}) => containerProvider("podman", options);
2
+ export const podmanSandboxProvider = (options = {}) => containerProvider("podman", options);
3
3
  //# sourceMappingURL=podman.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"podman.js","sourceRoot":"","sources":["../../src/providers/podman.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,UAA4B,EAAE,EAAE,EAAE,CACvD,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC","sourcesContent":["import { containerProvider } from \"./container.ts\";\nimport type { ContainerOptions } from \"./container.types.ts\";\n\nexport type { ContainerOptions } from \"./container.ts\";\n\nexport const podman = (options: ContainerOptions = {}) =>\n containerProvider(\"podman\", options);\n\nexport type { DependencyCache } from \"./container-cache.types.ts\";\n\nexport type { EgressPolicy } from \"../domain/egress.types.ts\";\n"]}
1
+ {"version":3,"file":"podman.js","sourceRoot":"","sources":["../../src/providers/podman.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAKnD,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,UAA4B,EAAE,EAAE,EAAE,CACtE,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC","sourcesContent":["import { containerProvider } from \"./container.ts\";\nimport type { ContainerOptions } from \"./container.types.ts\";\n\nexport type { ContainerOptions } from \"./container.ts\";\n\nexport const podmanSandboxProvider = (options: ContainerOptions = {}) =>\n containerProvider(\"podman\", options);\n\nexport type { DependencyCache } from \"./container-cache.types.ts\";\n\nexport type { EgressPolicy } from \"../domain/egress.types.ts\";\n"]}
@@ -2,5 +2,5 @@ import type { Sandbox } from "@vercel/sandbox";
2
2
  import type { SandboxProvider } from "../domain/sandbox.types.ts";
3
3
  import type { VercelOptions } from "./vercel.types.ts";
4
4
  export type { VercelOptions } from "./vercel.types.ts";
5
- export declare function vercel(options?: VercelOptions, connect?: (config: VercelOptions["create"]) => Promise<Sandbox>): SandboxProvider;
5
+ export declare function vercelSandboxProvider(options?: VercelOptions, connect?: (config: VercelOptions["create"]) => Promise<Sandbox>): SandboxProvider;
6
6
  export type { EgressPolicy } from "../domain/egress.types.ts";
@@ -6,7 +6,7 @@ import { vercelCommand } from "./vercel-command.js";
6
6
  import { vercelNetworkPolicy } from "./vercel-network.js";
7
7
  import { vercelDirectory } from "./vercel-directory.js";
8
8
  import { vercelFiles } from "./vercel-files.js";
9
- export function vercel(options = {}, connect = async (config) => (await import("@vercel/sandbox")).Sandbox.create(config)) {
9
+ export function vercelSandboxProvider(options = {}, connect = async (config) => (await import("@vercel/sandbox")).Sandbox.create(config)) {
10
10
  const networkPolicy = vercelNetworkPolicy(options);
11
11
  return {
12
12
  name: "vercel",
@@ -1 +1 @@
1
- {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../src/providers/vercel.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Sandbox } from \"@vercel/sandbox\";\nimport { OutpostError } from \"../domain/errors.ts\";\nimport type { SandboxProvider } from \"../domain/sandbox.types.ts\";\nimport { fileBatches } from \"./file-batches.ts\";\nimport { registerCleanup } from \"../infrastructure/shutdown.ts\";\nimport { cloudRoots } from \"./cloud.constants.ts\";\nimport { vercelCommand } from \"./vercel-command.ts\";\nimport { vercelNetworkPolicy } from \"./vercel-network.ts\";\nimport { vercelDirectory } from \"./vercel-directory.ts\";\nimport { vercelFiles } from \"./vercel-files.ts\";\nimport type { VercelOptions } from \"./vercel.types.ts\";\n\nexport type { VercelOptions } from \"./vercel.types.ts\";\n\nexport function vercel(\n options: VercelOptions = {},\n connect: (config: VercelOptions[\"create\"]) => Promise<Sandbox> = async (\n config,\n ) => (await import(\"@vercel/sandbox\")).Sandbox.create(config),\n): SandboxProvider {\n const networkPolicy = vercelNetworkPolicy(options);\n return {\n name: \"vercel\",\n placement: \"remote\",\n variables: { ...options.variables },\n async acquire(context) {\n context.signal?.throwIfAborted();\n const sandbox = await connect({\n ...options.create,\n ...(networkPolicy === undefined ? {} : { networkPolicy }),\n env: { ...options.create?.env, ...context.variables },\n });\n const root = options.root ?? cloudRoots.vercel;\n let closed = false;\n let releasing: Promise<void> | undefined;\n let unregister = () => {};\n const release = () =>\n (releasing ??= sandbox\n .stop()\n .then(() => {\n closed = true;\n unregister();\n })\n .catch((error) => {\n releasing = undefined;\n throw error;\n }));\n unregister = registerCleanup(release);\n let home: string;\n try {\n await vercelDirectory(sandbox, root);\n home = (\n await (await sandbox.runCommand(\"printenv\", [\"HOME\"])).stdout()\n ).trim();\n if (!home.startsWith(\"/\"))\n throw new OutpostError(\n \"provider\",\n \"Cloud sandbox returned an invalid home directory\",\n );\n } catch (cause) {\n await release();\n throw cause;\n }\n const lease = {\n root,\n home,\n invoke: vercelCommand({\n sandbox,\n root,\n options,\n context,\n isClosed: () => closed,\n }),\n ...vercelFiles(sandbox),\n release,\n };\n return { ...lease, fileTransfers: fileBatches(lease) };\n },\n };\n}\n\nexport type { EgressPolicy } from \"../domain/egress.types.ts\";\n"]}
1
+ {"version":3,"file":"vercel.js","sourceRoot":"","sources":["../../src/providers/vercel.ts"],"names":[],"mappings":"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","sourcesContent":["import type { Sandbox } from \"@vercel/sandbox\";\nimport { OutpostError } from \"../domain/errors.ts\";\nimport type { SandboxProvider } from \"../domain/sandbox.types.ts\";\nimport { fileBatches } from \"./file-batches.ts\";\nimport { registerCleanup } from \"../infrastructure/shutdown.ts\";\nimport { cloudRoots } from \"./cloud.constants.ts\";\nimport { vercelCommand } from \"./vercel-command.ts\";\nimport { vercelNetworkPolicy } from \"./vercel-network.ts\";\nimport { vercelDirectory } from \"./vercel-directory.ts\";\nimport { vercelFiles } from \"./vercel-files.ts\";\nimport type { VercelOptions } from \"./vercel.types.ts\";\n\nexport type { VercelOptions } from \"./vercel.types.ts\";\n\nexport function vercelSandboxProvider(\n options: VercelOptions = {},\n connect: (config: VercelOptions[\"create\"]) => Promise<Sandbox> = async (\n config,\n ) => (await import(\"@vercel/sandbox\")).Sandbox.create(config),\n): SandboxProvider {\n const networkPolicy = vercelNetworkPolicy(options);\n return {\n name: \"vercel\",\n placement: \"remote\",\n variables: { ...options.variables },\n async acquire(context) {\n context.signal?.throwIfAborted();\n const sandbox = await connect({\n ...options.create,\n ...(networkPolicy === undefined ? {} : { networkPolicy }),\n env: { ...options.create?.env, ...context.variables },\n });\n const root = options.root ?? cloudRoots.vercel;\n let closed = false;\n let releasing: Promise<void> | undefined;\n let unregister = () => {};\n const release = () =>\n (releasing ??= sandbox\n .stop()\n .then(() => {\n closed = true;\n unregister();\n })\n .catch((error) => {\n releasing = undefined;\n throw error;\n }));\n unregister = registerCleanup(release);\n let home: string;\n try {\n await vercelDirectory(sandbox, root);\n home = (\n await (await sandbox.runCommand(\"printenv\", [\"HOME\"])).stdout()\n ).trim();\n if (!home.startsWith(\"/\"))\n throw new OutpostError(\n \"provider\",\n \"Cloud sandbox returned an invalid home directory\",\n );\n } catch (cause) {\n await release();\n throw cause;\n }\n const lease = {\n root,\n home,\n invoke: vercelCommand({\n sandbox,\n root,\n options,\n context,\n isClosed: () => closed,\n }),\n ...vercelFiles(sandbox),\n release,\n };\n return { ...lease, fileTransfers: fileBatches(lease) };\n },\n };\n}\n\nexport type { EgressPolicy } from \"../domain/egress.types.ts\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elie-laloum/outpost",
3
- "version": "4.1.0",
3
+ "version": "5.0.0",
4
4
  "description": "Programmable sandboxes, coding agents and typed workflows.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -43,6 +43,14 @@
43
43
  "./providers/firecracker": {
44
44
  "types": "./dist/providers/firecracker.d.ts",
45
45
  "import": "./dist/providers/firecracker.js"
46
+ },
47
+ "./transports/s3": {
48
+ "types": "./dist/infrastructure/s3-transport.d.ts",
49
+ "import": "./dist/infrastructure/s3-transport.js"
50
+ },
51
+ "./queues/bullmq": {
52
+ "types": "./dist/infrastructure/task-queue-bullmq.d.ts",
53
+ "import": "./dist/infrastructure/task-queue-bullmq.js"
46
54
  }
47
55
  },
48
56
  "files": [
@@ -66,11 +74,14 @@
66
74
  "test:package": "node scripts/package-smoke.mjs",
67
75
  "test:container": "node --test test/container.test.ts",
68
76
  "architecture": "node scripts/check-architecture.mjs",
69
- "docs:sync": "npm run build && node docs/scripts/sync-reference.mjs",
70
- "docs:check": "node docs/scripts/sync-reference.mjs --check && npm run check --prefix docs",
77
+ "docs:sync": "npm run build && node docs/scripts/sync-preparations.mjs && node docs/scripts/sync-reference.mjs",
78
+ "docs:check": "node docs/scripts/sync-preparations.mjs --check && node docs/scripts/sync-reference.mjs --check && npm run check --prefix docs",
71
79
  "docs:dev": "npm run dev --prefix docs",
72
80
  "docs:build": "npm run build --prefix docs",
73
- "docs:test": "npm run test:build --prefix docs && node docs/scripts/check-examples.mjs && node --test docs/scripts/release-channel.test.mjs"
81
+ "docs:test": "npm run test:build --prefix docs && node docs/scripts/check-examples.mjs && node --test docs/scripts/release-channel.test.mjs",
82
+ "docs:test:browser": "npm run test:browser --prefix docs",
83
+ "docs:test:container": "node docs/scripts/check-container-examples.mjs",
84
+ "test:redis": "node --test test/redis.test.ts"
74
85
  },
75
86
  "repository": {
76
87
  "type": "git",
@@ -84,9 +95,11 @@
84
95
  "provenance": true
85
96
  },
86
97
  "peerDependencies": {
98
+ "@aws-sdk/client-s3": "^3.1140.0",
87
99
  "@daytona/sdk": "^0.216.0",
88
100
  "@opentelemetry/api": "^1.9.0",
89
- "@vercel/sandbox": "^3.3.0"
101
+ "@vercel/sandbox": "^3.3.0",
102
+ "bullmq": "^5.81.5"
90
103
  },
91
104
  "peerDependenciesMeta": {
92
105
  "@daytona/sdk": {
@@ -97,15 +110,23 @@
97
110
  },
98
111
  "@opentelemetry/api": {
99
112
  "optional": true
113
+ },
114
+ "@aws-sdk/client-s3": {
115
+ "optional": true
116
+ },
117
+ "bullmq": {
118
+ "optional": true
100
119
  }
101
120
  },
102
121
  "devDependencies": {
122
+ "@aws-sdk/client-s3": "^3.1140.0",
103
123
  "@daytona/sdk": "^0.216.0",
104
124
  "@opentelemetry/api": "^1.9.0",
105
125
  "@opentelemetry/sdk-metrics": "^2.0.0",
106
126
  "@opentelemetry/sdk-trace-base": "^2.0.0",
107
127
  "@types/node": "^24.0.0",
108
128
  "@vercel/sandbox": "^3.3.0",
129
+ "bullmq": "^5.81.5",
109
130
  "c8": "^10.1.3",
110
131
  "prettier": "^3.5.3",
111
132
  "typescript": "^6.0.3"
@@ -1 +0,0 @@
1
- {"version":3,"file":"init-authentication.constants.js","sourceRoot":"","sources":["../../src/cli/init-authentication.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE;QACL,WAAW,EAAE,mBAAmB;QAChC,KAAK,EACH,iZAAiZ;QACnZ,IAAI,EAAE,sWAAsW;KAC7W;IACD,MAAM,EAAE,EAAE,WAAW,EAAE,sBAAsB,EAAE;IAC/C,MAAM,EAAE,EAAE,WAAW,EAAE,mBAAmB,EAAE;CACpC,CAAC","sourcesContent":["export const authenticationRecipes = {\n codex: {\n environment: \"OPENAI_API_KEY=\\n\",\n login:\n 'const {spawnSync}=require(\"node:child_process\"); const {existsSync}=require(\"node:fs\"); const {join}=require(\"node:path\"); const {homedir}=require(\"node:os\"); const installed=join(homedir(),\".outpost-tools\",\"bin\",\"codex\"); const result=spawnSync(existsSync(installed)?installed:\"codex\",[\"login\",\"--with-api-key\"],{stdio:\"inherit\",shell:process.platform===\"win32\"}); process.exit(result.status ?? 1);',\n seed: 'const {mkdirSync,writeFileSync,readFileSync,chmodSync}=require(\"node:fs\"); const {join}=require(\"node:path\"); const {homedir}=require(\"node:os\"); const directory=join(homedir(),\".codex\"); mkdirSync(directory,{recursive:true,mode:0o700}); const target=join(directory,\"auth.json\"); writeFileSync(target,readFileSync(0),{mode:0o600}); chmodSync(target,0o600);',\n },\n claude: { environment: \"ANTHROPIC_API_KEY=\\n\" },\n gemini: { environment: \"GEMINI_API_KEY=\\n\" },\n} as const;\n"]}