@elie-laloum/outpost 5.0.0 → 7.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 (647) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +11 -11
  3. package/SECURITY.md +10 -0
  4. package/dist/adapters/agents/antigravity-adapter.d.ts +3 -0
  5. package/dist/adapters/agents/antigravity-adapter.js +41 -0
  6. package/dist/adapters/agents/antigravity-adapter.js.map +1 -0
  7. package/dist/adapters/agents/antigravity-authentication.d.ts +2 -0
  8. package/dist/adapters/agents/antigravity-authentication.js +27 -0
  9. package/dist/adapters/agents/antigravity-authentication.js.map +1 -0
  10. package/dist/adapters/agents/antigravity-diagnostics.d.ts +1 -0
  11. package/dist/adapters/agents/antigravity-diagnostics.js +6 -0
  12. package/dist/adapters/agents/antigravity-diagnostics.js.map +1 -0
  13. package/dist/adapters/agents/antigravity-events.d.ts +2 -0
  14. package/dist/adapters/agents/antigravity-events.js +75 -0
  15. package/dist/adapters/agents/antigravity-events.js.map +1 -0
  16. package/dist/adapters/agents/antigravity-request.d.ts +5 -0
  17. package/dist/adapters/agents/antigravity-request.js +37 -0
  18. package/dist/adapters/agents/antigravity-request.js.map +1 -0
  19. package/dist/adapters/agents/antigravity.constants.d.ts +3 -0
  20. package/dist/adapters/agents/antigravity.constants.js +4 -0
  21. package/dist/adapters/agents/antigravity.constants.js.map +1 -0
  22. package/dist/adapters/agents/{gemini.types.d.ts → antigravity.types.d.ts} +2 -2
  23. package/dist/adapters/agents/antigravity.types.js +2 -0
  24. package/dist/adapters/agents/antigravity.types.js.map +1 -0
  25. package/dist/adapters/agents/authentication.constants.d.ts +19 -9
  26. package/dist/adapters/agents/authentication.constants.js +12 -9
  27. package/dist/adapters/agents/authentication.constants.js.map +1 -1
  28. package/dist/adapters/agents/authentication.d.ts +11 -2
  29. package/dist/adapters/agents/authentication.js +70 -47
  30. package/dist/adapters/agents/authentication.js.map +1 -1
  31. package/dist/adapters/agents/authentication.types.d.ts +20 -0
  32. package/dist/adapters/agents/authentication.types.js +2 -0
  33. package/dist/adapters/agents/authentication.types.js.map +1 -0
  34. package/dist/adapters/agents/claude-adapter.js +4 -2
  35. package/dist/adapters/agents/claude-adapter.js.map +1 -1
  36. package/dist/adapters/agents/claude-authentication.d.ts +2 -0
  37. package/dist/adapters/agents/claude-authentication.js +34 -0
  38. package/dist/adapters/agents/claude-authentication.js.map +1 -0
  39. package/dist/adapters/agents/claude-events.js +52 -9
  40. package/dist/adapters/agents/claude-events.js.map +1 -1
  41. package/dist/adapters/agents/claude-request.js +2 -0
  42. package/dist/adapters/agents/claude-request.js.map +1 -1
  43. package/dist/adapters/agents/cli-diagnostics.constants.d.ts +6 -6
  44. package/dist/adapters/agents/cli-diagnostics.constants.js +6 -6
  45. package/dist/adapters/agents/cli-diagnostics.constants.js.map +1 -1
  46. package/dist/adapters/agents/cli-diagnostics.d.ts +1 -0
  47. package/dist/adapters/agents/cli-diagnostics.js +18 -0
  48. package/dist/adapters/agents/cli-diagnostics.js.map +1 -1
  49. package/dist/adapters/agents/codex-adapter.js +4 -2
  50. package/dist/adapters/agents/codex-adapter.js.map +1 -1
  51. package/dist/adapters/agents/codex-authentication.d.ts +3 -0
  52. package/dist/adapters/agents/codex-authentication.js +47 -0
  53. package/dist/adapters/agents/codex-authentication.js.map +1 -0
  54. package/dist/adapters/agents/codex-events.js +28 -2
  55. package/dist/adapters/agents/codex-events.js.map +1 -1
  56. package/dist/adapters/agents/copilot-adapter.d.ts +3 -0
  57. package/dist/adapters/agents/copilot-adapter.js +45 -0
  58. package/dist/adapters/agents/copilot-adapter.js.map +1 -0
  59. package/dist/adapters/agents/copilot-authentication.d.ts +2 -0
  60. package/dist/adapters/agents/copilot-authentication.js +46 -0
  61. package/dist/adapters/agents/copilot-authentication.js.map +1 -0
  62. package/dist/adapters/agents/copilot-diagnostics.d.ts +1 -0
  63. package/dist/adapters/agents/copilot-diagnostics.js +6 -0
  64. package/dist/adapters/agents/copilot-diagnostics.js.map +1 -0
  65. package/dist/adapters/agents/copilot-events.d.ts +2 -0
  66. package/dist/adapters/agents/copilot-events.js +66 -0
  67. package/dist/adapters/agents/copilot-events.js.map +1 -0
  68. package/dist/adapters/agents/copilot-request.d.ts +5 -0
  69. package/dist/adapters/agents/copilot-request.js +24 -0
  70. package/dist/adapters/agents/copilot-request.js.map +1 -0
  71. package/dist/adapters/agents/copilot-usage.d.ts +3 -0
  72. package/dist/adapters/agents/copilot-usage.js +19 -0
  73. package/dist/adapters/agents/copilot-usage.js.map +1 -0
  74. package/dist/adapters/agents/copilot.types.d.ts +6 -0
  75. package/dist/adapters/agents/copilot.types.js +2 -0
  76. package/dist/adapters/agents/copilot.types.js.map +1 -0
  77. package/dist/adapters/agents/event-decoder.d.ts +2 -2
  78. package/dist/adapters/agents/event-decoder.js +6 -5
  79. package/dist/adapters/agents/event-decoder.js.map +1 -1
  80. package/dist/adapters/agents/kimi-adapter.d.ts +3 -0
  81. package/dist/adapters/agents/kimi-adapter.js +51 -0
  82. package/dist/adapters/agents/kimi-adapter.js.map +1 -0
  83. package/dist/adapters/agents/kimi-authentication.d.ts +3 -0
  84. package/dist/adapters/agents/kimi-authentication.js +63 -0
  85. package/dist/adapters/agents/kimi-authentication.js.map +1 -0
  86. package/dist/adapters/agents/kimi-diagnostics.d.ts +2 -0
  87. package/dist/adapters/agents/kimi-diagnostics.js +14 -0
  88. package/dist/adapters/agents/kimi-diagnostics.js.map +1 -0
  89. package/dist/adapters/agents/kimi-events.d.ts +2 -0
  90. package/dist/adapters/agents/kimi-events.js +55 -0
  91. package/dist/adapters/agents/kimi-events.js.map +1 -0
  92. package/dist/adapters/agents/kimi-fork.d.ts +2 -0
  93. package/dist/adapters/agents/kimi-fork.js +11 -0
  94. package/dist/adapters/agents/kimi-fork.js.map +1 -0
  95. package/dist/adapters/agents/{gemini-request.d.ts → kimi-request.d.ts} +2 -2
  96. package/dist/adapters/agents/kimi-request.js +33 -0
  97. package/dist/adapters/agents/kimi-request.js.map +1 -0
  98. package/dist/adapters/agents/kimi-usage.d.ts +2 -0
  99. package/dist/adapters/agents/kimi-usage.js +7 -0
  100. package/dist/adapters/agents/kimi-usage.js.map +1 -0
  101. package/dist/adapters/agents/kimi.constants.d.ts +13 -0
  102. package/dist/adapters/agents/kimi.constants.js +14 -0
  103. package/dist/adapters/agents/kimi.constants.js.map +1 -0
  104. package/dist/adapters/agents/kimi.types.d.ts +7 -0
  105. package/dist/adapters/agents/kimi.types.js +2 -0
  106. package/dist/adapters/agents/kimi.types.js.map +1 -0
  107. package/dist/adapters/agents/model-support.constants.d.ts +3 -1
  108. package/dist/adapters/agents/model-support.constants.js +12 -2
  109. package/dist/adapters/agents/model-support.constants.js.map +1 -1
  110. package/dist/adapters/agents/protocol-fixtures.constants.d.ts +2 -2
  111. package/dist/adapters/agents/protocol-fixtures.constants.js +131 -9
  112. package/dist/adapters/agents/protocol-fixtures.constants.js.map +1 -1
  113. package/dist/adapters/agents/protocol-fixtures.types.d.ts +1 -0
  114. package/dist/adapters/agents/protocol-fixtures.types.js.map +1 -1
  115. package/dist/adapters/agents/protocol.d.ts +1 -0
  116. package/dist/adapters/agents/protocol.js +9 -0
  117. package/dist/adapters/agents/protocol.js.map +1 -1
  118. package/dist/adapters/agents/session-usage.constants.d.ts +10 -0
  119. package/dist/adapters/agents/session-usage.constants.js +110 -0
  120. package/dist/adapters/agents/session-usage.constants.js.map +1 -0
  121. package/dist/adapters/agents/session-usage.d.ts +5 -0
  122. package/dist/adapters/agents/session-usage.js +45 -0
  123. package/dist/adapters/agents/session-usage.js.map +1 -0
  124. package/dist/adapters/agents/settings.types.d.ts +1 -0
  125. package/dist/adapters/agents/settings.types.js.map +1 -1
  126. package/dist/adapters/agents/tool-result.d.ts +2 -0
  127. package/dist/adapters/agents/tool-result.js +17 -0
  128. package/dist/adapters/agents/tool-result.js.map +1 -0
  129. package/dist/adapters/models/anthropic-response.js +3 -0
  130. package/dist/adapters/models/anthropic-response.js.map +1 -1
  131. package/dist/adapters/models/http-provider.js +6 -1
  132. package/dist/adapters/models/http-provider.js.map +1 -1
  133. package/dist/adapters/models/openai-responses.js +10 -0
  134. package/dist/adapters/models/openai-responses.js.map +1 -1
  135. package/dist/adapters/models/retry-after.d.ts +1 -0
  136. package/dist/adapters/models/retry-after.js +16 -0
  137. package/dist/adapters/models/retry-after.js.map +1 -0
  138. package/dist/application/activity-watchdog.js +1 -2
  139. package/dist/application/activity-watchdog.js.map +1 -1
  140. package/dist/application/agent-authentication.d.ts +4 -0
  141. package/dist/application/agent-authentication.js +32 -0
  142. package/dist/application/agent-authentication.js.map +1 -0
  143. package/dist/application/agent-bootstrap.constants.d.ts +2 -5
  144. package/dist/application/agent-bootstrap.constants.js +27 -4
  145. package/dist/application/agent-bootstrap.constants.js.map +1 -1
  146. package/dist/application/agent-bootstrap.js +39 -12
  147. package/dist/application/agent-bootstrap.js.map +1 -1
  148. package/dist/application/agent-bootstrap.types.d.ts +19 -0
  149. package/dist/application/agent-bootstrap.types.js +2 -0
  150. package/dist/application/agent-bootstrap.types.js.map +1 -0
  151. package/dist/application/agent-output.js +74 -8
  152. package/dist/application/agent-output.js.map +1 -1
  153. package/dist/application/agent-request.d.ts +3 -0
  154. package/dist/application/agent-request.js +11 -0
  155. package/dist/application/agent-request.js.map +1 -0
  156. package/dist/application/agent-turn.js +74 -6
  157. package/dist/application/agent-turn.js.map +1 -1
  158. package/dist/application/agent-usage.d.ts +6 -0
  159. package/dist/application/agent-usage.js +57 -0
  160. package/dist/application/agent-usage.js.map +1 -0
  161. package/dist/application/attach.js +2 -0
  162. package/dist/application/attach.js.map +1 -1
  163. package/dist/application/credential-installer.constants.d.ts +1 -0
  164. package/dist/application/credential-installer.constants.js +22 -0
  165. package/dist/application/credential-installer.constants.js.map +1 -0
  166. package/dist/application/custom-turn.js +44 -49
  167. package/dist/application/custom-turn.js.map +1 -1
  168. package/dist/application/dispatch-observation.d.ts +1 -1
  169. package/dist/application/dispatch-observation.js +141 -21
  170. package/dist/application/dispatch-observation.js.map +1 -1
  171. package/dist/application/dispatch-observation.types.d.ts +2 -0
  172. package/dist/application/dispatch-observation.types.js.map +1 -1
  173. package/dist/application/dispatch-validation.js +2 -0
  174. package/dist/application/dispatch-validation.js.map +1 -1
  175. package/dist/application/dispatch.js +1 -1
  176. package/dist/application/dispatch.js.map +1 -1
  177. package/dist/application/doctor-agent.constants.d.ts +2 -8
  178. package/dist/application/doctor-agent.constants.js +43 -6
  179. package/dist/application/doctor-agent.constants.js.map +1 -1
  180. package/dist/application/doctor-agent.d.ts +2 -1
  181. package/dist/application/doctor-agent.js +15 -3
  182. package/dist/application/doctor-agent.js.map +1 -1
  183. package/dist/application/doctor-image.js +4 -6
  184. package/dist/application/doctor-image.js.map +1 -1
  185. package/dist/application/doctor-protocol.js +6 -11
  186. package/dist/application/doctor-protocol.js.map +1 -1
  187. package/dist/application/doctor-protocol.types.d.ts +1 -1
  188. package/dist/application/doctor-protocol.types.js.map +1 -1
  189. package/dist/application/doctor-sandbox.js +2 -5
  190. package/dist/application/doctor-sandbox.js.map +1 -1
  191. package/dist/application/doctor.js +28 -10
  192. package/dist/application/doctor.js.map +1 -1
  193. package/dist/application/doctor.types.d.ts +10 -1
  194. package/dist/application/doctor.types.js.map +1 -1
  195. package/dist/application/execution.constants.d.ts +2 -0
  196. package/dist/application/execution.constants.js +2 -0
  197. package/dist/application/execution.constants.js.map +1 -1
  198. package/dist/application/execution.types.d.ts +8 -0
  199. package/dist/application/execution.types.js.map +1 -1
  200. package/dist/application/harness-budget.d.ts +3 -0
  201. package/dist/application/harness-budget.js +42 -0
  202. package/dist/application/harness-budget.js.map +1 -0
  203. package/dist/application/harness-budget.types.d.ts +5 -0
  204. package/dist/application/harness-budget.types.js +2 -0
  205. package/dist/application/harness-budget.types.js.map +1 -0
  206. package/dist/application/harness-hooks.js +34 -3
  207. package/dist/application/harness-hooks.js.map +1 -1
  208. package/dist/application/harness-loop.js +52 -24
  209. package/dist/application/harness-loop.js.map +1 -1
  210. package/dist/application/harness-model-provider.d.ts +3 -0
  211. package/dist/application/harness-model-provider.js +49 -0
  212. package/dist/application/harness-model-provider.js.map +1 -0
  213. package/dist/application/harness-model-provider.types.d.ts +10 -0
  214. package/dist/application/harness-model-provider.types.js +2 -0
  215. package/dist/application/harness-model-provider.types.js.map +1 -0
  216. package/dist/application/harness-subagent.d.ts +4 -0
  217. package/dist/application/harness-subagent.js +110 -0
  218. package/dist/application/harness-subagent.js.map +1 -0
  219. package/dist/application/harness.types.d.ts +11 -0
  220. package/dist/application/harness.types.js.map +1 -1
  221. package/dist/application/lifecycle-hooks.d.ts +1 -1
  222. package/dist/application/lifecycle-hooks.js +5 -4
  223. package/dist/application/lifecycle-hooks.js.map +1 -1
  224. package/dist/application/observed-lease.d.ts +3 -0
  225. package/dist/application/observed-lease.js +26 -0
  226. package/dist/application/observed-lease.js.map +1 -0
  227. package/dist/application/outpost.types.d.ts +3 -1
  228. package/dist/application/outpost.types.js.map +1 -1
  229. package/dist/application/output-lines.d.ts +4 -0
  230. package/dist/application/output-lines.js +28 -0
  231. package/dist/application/output-lines.js.map +1 -0
  232. package/dist/application/queue-worker.js +1 -1
  233. package/dist/application/queue-worker.js.map +1 -1
  234. package/dist/application/queue-worker.types.d.ts +1 -0
  235. package/dist/application/queue-worker.types.js.map +1 -1
  236. package/dist/application/queued-task.js +24 -5
  237. package/dist/application/queued-task.js.map +1 -1
  238. package/dist/application/recovery-archive.d.ts +3 -2
  239. package/dist/application/recovery-archive.js +9 -2
  240. package/dist/application/recovery-archive.js.map +1 -1
  241. package/dist/application/recovery-restore.d.ts +3 -2
  242. package/dist/application/recovery-restore.js +9 -2
  243. package/dist/application/recovery-restore.js.map +1 -1
  244. package/dist/application/recovery-retention.d.ts +3 -2
  245. package/dist/application/recovery-retention.js +74 -26
  246. package/dist/application/recovery-retention.js.map +1 -1
  247. package/dist/application/remote-workspace.js +5 -4
  248. package/dist/application/remote-workspace.js.map +1 -1
  249. package/dist/application/remote-workspace.types.d.ts +1 -0
  250. package/dist/application/remote-workspace.types.js.map +1 -1
  251. package/dist/application/sandbox-agents.js +19 -19
  252. package/dist/application/sandbox-agents.js.map +1 -1
  253. package/dist/application/sandbox-attach.js +12 -3
  254. package/dist/application/sandbox-attach.js.map +1 -1
  255. package/dist/application/sandbox-dispatch.js +13 -27
  256. package/dist/application/sandbox-dispatch.js.map +1 -1
  257. package/dist/application/sandbox-provision.js +15 -9
  258. package/dist/application/sandbox-provision.js.map +1 -1
  259. package/dist/application/sandbox-session.types.d.ts +7 -2
  260. package/dist/application/sandbox-session.types.js.map +1 -1
  261. package/dist/application/sandbox.js +13 -6
  262. package/dist/application/sandbox.js.map +1 -1
  263. package/dist/application/speculation-checkpoint.d.ts +6 -0
  264. package/dist/application/speculation-checkpoint.js +206 -0
  265. package/dist/application/speculation-checkpoint.js.map +1 -0
  266. package/dist/application/speculation-checkpoint.types.d.ts +24 -0
  267. package/dist/application/speculation-checkpoint.types.js +2 -0
  268. package/dist/application/speculation-checkpoint.types.js.map +1 -0
  269. package/dist/application/speculation-integration.constants.d.ts +4 -0
  270. package/dist/application/speculation-integration.constants.js +5 -0
  271. package/dist/application/speculation-integration.constants.js.map +1 -0
  272. package/dist/application/speculation-integration.d.ts +2 -0
  273. package/dist/application/speculation-integration.js +67 -0
  274. package/dist/application/speculation-integration.js.map +1 -0
  275. package/dist/application/speculation-resume.d.ts +4 -0
  276. package/dist/application/speculation-resume.js +71 -0
  277. package/dist/application/speculation-resume.js.map +1 -0
  278. package/dist/application/speculation-run.d.ts +4 -0
  279. package/dist/application/speculation-run.js +320 -0
  280. package/dist/application/speculation-run.js.map +1 -0
  281. package/dist/application/speculation-timeout.d.ts +1 -0
  282. package/dist/application/speculation-timeout.js +15 -0
  283. package/dist/application/speculation-timeout.js.map +1 -0
  284. package/dist/application/speculation.constants.d.ts +1 -0
  285. package/dist/application/speculation.constants.js +5 -1
  286. package/dist/application/speculation.constants.js.map +1 -1
  287. package/dist/application/speculation.js +41 -149
  288. package/dist/application/speculation.js.map +1 -1
  289. package/dist/application/speculation.types.d.ts +23 -0
  290. package/dist/application/speculation.types.js.map +1 -1
  291. package/dist/application/startup-recovery.js +14 -1
  292. package/dist/application/startup-recovery.js.map +1 -1
  293. package/dist/application/startup-recovery.types.d.ts +1 -0
  294. package/dist/application/startup-recovery.types.js.map +1 -1
  295. package/dist/application/stop-reason.d.ts +2 -0
  296. package/dist/application/stop-reason.js +21 -0
  297. package/dist/application/stop-reason.js.map +1 -0
  298. package/dist/application/stop-reason.types.d.ts +4 -0
  299. package/dist/application/stop-reason.types.js +2 -0
  300. package/dist/application/stop-reason.types.js.map +1 -0
  301. package/dist/application/storage-reservation.js +9 -2
  302. package/dist/application/storage-reservation.js.map +1 -1
  303. package/dist/application/task-observation.d.ts +3 -0
  304. package/dist/application/task-observation.js +22 -0
  305. package/dist/application/task-observation.js.map +1 -0
  306. package/dist/application/task-usage.js +5 -12
  307. package/dist/application/task-usage.js.map +1 -1
  308. package/dist/application/tasks.js +41 -16
  309. package/dist/application/tasks.js.map +1 -1
  310. package/dist/application/tool-execution.js +42 -19
  311. package/dist/application/tool-execution.js.map +1 -1
  312. package/dist/application/workspace.js +6 -4
  313. package/dist/application/workspace.js.map +1 -1
  314. package/dist/cli/doctor-command.js +6 -2
  315. package/dist/cli/doctor-command.js.map +1 -1
  316. package/dist/cli/init-authentication.d.ts +4 -1
  317. package/dist/cli/init-authentication.js +28 -33
  318. package/dist/cli/init-authentication.js.map +1 -1
  319. package/dist/cli/init-command.js +3 -3
  320. package/dist/cli/init-command.js.map +1 -1
  321. package/dist/cli/main.constants.d.ts +50 -13
  322. package/dist/cli/main.constants.js +70 -8
  323. package/dist/cli/main.constants.js.map +1 -1
  324. package/dist/cli/main.js +2 -1
  325. package/dist/cli/main.js.map +1 -1
  326. package/dist/cli/scaffold-files.js +1 -1
  327. package/dist/cli/scaffold-files.js.map +1 -1
  328. package/dist/cli/scaffold-validation.js +29 -22
  329. package/dist/cli/scaffold-validation.js.map +1 -1
  330. package/dist/cli/scaffold.constants.d.ts +0 -1
  331. package/dist/cli/scaffold.constants.js +6 -2
  332. package/dist/cli/scaffold.constants.js.map +1 -1
  333. package/dist/cli/scaffold.types.d.ts +8 -2
  334. package/dist/cli/scaffold.types.js.map +1 -1
  335. package/dist/cli/starters.js +1 -3
  336. package/dist/cli/starters.js.map +1 -1
  337. package/dist/domain/agent-observation.d.ts +4 -0
  338. package/dist/domain/agent-observation.js +27 -0
  339. package/dist/domain/agent-observation.js.map +1 -0
  340. package/dist/domain/agent.types.d.ts +122 -14
  341. package/dist/domain/agent.types.js.map +1 -1
  342. package/dist/domain/authentication.constants.d.ts +3 -0
  343. package/dist/domain/authentication.constants.js +11 -0
  344. package/dist/domain/authentication.constants.js.map +1 -0
  345. package/dist/domain/authentication.d.ts +3 -0
  346. package/dist/domain/authentication.js +22 -0
  347. package/dist/domain/authentication.js.map +1 -0
  348. package/dist/domain/authentication.types.d.ts +5 -0
  349. package/dist/domain/authentication.types.js +2 -0
  350. package/dist/domain/authentication.types.js.map +1 -0
  351. package/dist/domain/harness.d.ts +2 -2
  352. package/dist/domain/harness.js +6 -0
  353. package/dist/domain/harness.js.map +1 -1
  354. package/dist/domain/harness.types.d.ts +4 -3
  355. package/dist/domain/harness.types.js.map +1 -1
  356. package/dist/domain/model.types.d.ts +8 -0
  357. package/dist/domain/model.types.js.map +1 -1
  358. package/dist/domain/observation.constants.d.ts +8 -0
  359. package/dist/domain/observation.constants.js +9 -0
  360. package/dist/domain/observation.constants.js.map +1 -0
  361. package/dist/domain/observation.d.ts +2 -0
  362. package/dist/domain/observation.js +190 -0
  363. package/dist/domain/observation.js.map +1 -0
  364. package/dist/domain/observation.types.d.ts +84 -0
  365. package/dist/domain/observation.types.js +2 -0
  366. package/dist/domain/observation.types.js.map +1 -0
  367. package/dist/domain/observed-operation.d.ts +2 -0
  368. package/dist/domain/observed-operation.js +30 -0
  369. package/dist/domain/observed-operation.js.map +1 -0
  370. package/dist/domain/sandbox.types.d.ts +2 -0
  371. package/dist/domain/sandbox.types.js.map +1 -1
  372. package/dist/domain/subagent.constants.d.ts +13 -0
  373. package/dist/domain/subagent.constants.js +9 -0
  374. package/dist/domain/subagent.constants.js.map +1 -0
  375. package/dist/domain/subagent.d.ts +4 -0
  376. package/dist/domain/subagent.js +28 -0
  377. package/dist/domain/subagent.js.map +1 -0
  378. package/dist/domain/subagent.types.d.ts +13 -0
  379. package/dist/domain/subagent.types.js +2 -0
  380. package/dist/domain/subagent.types.js.map +1 -0
  381. package/dist/domain/transcript.types.d.ts +2 -0
  382. package/dist/domain/transcript.types.js.map +1 -1
  383. package/dist/domain/usage.d.ts +1 -0
  384. package/dist/domain/usage.js +16 -0
  385. package/dist/domain/usage.js.map +1 -1
  386. package/dist/domain/workflow/budget.d.ts +7 -3
  387. package/dist/domain/workflow/budget.js +26 -0
  388. package/dist/domain/workflow/budget.js.map +1 -1
  389. package/dist/domain/workflow/budget.types.d.ts +1 -1
  390. package/dist/domain/workflow/budget.types.js.map +1 -1
  391. package/dist/domain/workflow/checkpoint-validation.js +7 -1
  392. package/dist/domain/workflow/checkpoint-validation.js.map +1 -1
  393. package/dist/domain/workflow/checkpoint.js +3 -0
  394. package/dist/domain/workflow/checkpoint.js.map +1 -1
  395. package/dist/domain/workflow/gate-validation.js +14 -1
  396. package/dist/domain/workflow/gate-validation.js.map +1 -1
  397. package/dist/domain/workflow/gates.d.ts +1 -1
  398. package/dist/domain/workflow/gates.js +52 -4
  399. package/dist/domain/workflow/gates.js.map +1 -1
  400. package/dist/domain/workflow/gates.types.d.ts +15 -1
  401. package/dist/domain/workflow/gates.types.js.map +1 -1
  402. package/dist/domain/workflow/idempotency.d.ts +1 -0
  403. package/dist/domain/workflow/idempotency.js +7 -0
  404. package/dist/domain/workflow/idempotency.js.map +1 -0
  405. package/dist/domain/workflow/retry.constants.d.ts +2 -0
  406. package/dist/domain/workflow/retry.constants.js +3 -0
  407. package/dist/domain/workflow/retry.constants.js.map +1 -0
  408. package/dist/domain/workflow/retry.d.ts +4 -0
  409. package/dist/domain/workflow/retry.js +49 -0
  410. package/dist/domain/workflow/retry.js.map +1 -0
  411. package/dist/domain/workflow/task-runner.js +9 -5
  412. package/dist/domain/workflow/task-runner.js.map +1 -1
  413. package/dist/domain/workflow/task.js +6 -6
  414. package/dist/domain/workflow/task.js.map +1 -1
  415. package/dist/domain/workflow/workflow-scheduler.js +110 -72
  416. package/dist/domain/workflow/workflow-scheduler.js.map +1 -1
  417. package/dist/domain/workflow/workflow-state.js +28 -12
  418. package/dist/domain/workflow/workflow-state.js.map +1 -1
  419. package/dist/domain/workflow.d.ts +1 -1
  420. package/dist/domain/workflow.js +1 -1
  421. package/dist/domain/workflow.js.map +1 -1
  422. package/dist/domain/workflow.types.d.ts +13 -2
  423. package/dist/domain/workflow.types.js.map +1 -1
  424. package/dist/index.d.ts +16 -11
  425. package/dist/index.js +7 -4
  426. package/dist/index.js.map +1 -1
  427. package/dist/infrastructure/conversations/capture.js +10 -0
  428. package/dist/infrastructure/conversations/capture.js.map +1 -1
  429. package/dist/infrastructure/conversations/harness-transcript.js +6 -0
  430. package/dist/infrastructure/conversations/harness-transcript.js.map +1 -1
  431. package/dist/infrastructure/conversations/harness-transcript.types.d.ts +2 -0
  432. package/dist/infrastructure/conversations/harness-transcript.types.js.map +1 -1
  433. package/dist/infrastructure/conversations/layout.js +2 -0
  434. package/dist/infrastructure/conversations/layout.js.map +1 -1
  435. package/dist/infrastructure/conversations/locate.js +7 -1
  436. package/dist/infrastructure/conversations/locate.js.map +1 -1
  437. package/dist/infrastructure/conversations/native-store.js +8 -1
  438. package/dist/infrastructure/conversations/native-store.js.map +1 -1
  439. package/dist/infrastructure/conversations/paths.js +3 -0
  440. package/dist/infrastructure/conversations/paths.js.map +1 -1
  441. package/dist/infrastructure/conversations/restore.js +7 -0
  442. package/dist/infrastructure/conversations/restore.js.map +1 -1
  443. package/dist/infrastructure/conversations/session-bundle.constants.d.ts +5 -0
  444. package/dist/infrastructure/conversations/session-bundle.constants.js +173 -0
  445. package/dist/infrastructure/conversations/session-bundle.constants.js.map +1 -0
  446. package/dist/infrastructure/conversations/session-bundle.d.ts +6 -0
  447. package/dist/infrastructure/conversations/session-bundle.js +98 -0
  448. package/dist/infrastructure/conversations/session-bundle.js.map +1 -0
  449. package/dist/infrastructure/conversations/session-bundle.types.d.ts +1 -0
  450. package/dist/infrastructure/conversations/session-bundle.types.js +2 -0
  451. package/dist/infrastructure/conversations/session-bundle.types.js.map +1 -0
  452. package/dist/infrastructure/conversations.js +4 -2
  453. package/dist/infrastructure/conversations.js.map +1 -1
  454. package/dist/infrastructure/conversations.types.d.ts +1 -1
  455. package/dist/infrastructure/conversations.types.js.map +1 -1
  456. package/dist/infrastructure/custom-reporter.js +32 -24
  457. package/dist/infrastructure/custom-reporter.js.map +1 -1
  458. package/dist/infrastructure/custom-reporter.types.d.ts +2 -0
  459. package/dist/infrastructure/custom-reporter.types.js.map +1 -1
  460. package/dist/infrastructure/git/git.constants.d.ts +1 -1
  461. package/dist/infrastructure/git/git.constants.js +1 -0
  462. package/dist/infrastructure/git/git.constants.js.map +1 -1
  463. package/dist/infrastructure/git/workspace-lease.js +4 -3
  464. package/dist/infrastructure/git/workspace-lease.js.map +1 -1
  465. package/dist/infrastructure/git/workspace.js +7 -6
  466. package/dist/infrastructure/git/workspace.js.map +1 -1
  467. package/dist/infrastructure/git/workspace.types.d.ts +1 -0
  468. package/dist/infrastructure/git/workspace.types.js.map +1 -1
  469. package/dist/infrastructure/host-credentials.constants.d.ts +1 -0
  470. package/dist/infrastructure/host-credentials.constants.js +2 -0
  471. package/dist/infrastructure/host-credentials.constants.js.map +1 -0
  472. package/dist/infrastructure/host-credentials.d.ts +4 -0
  473. package/dist/infrastructure/host-credentials.js +89 -0
  474. package/dist/infrastructure/host-credentials.js.map +1 -0
  475. package/dist/infrastructure/inspection-path.js +4 -3
  476. package/dist/infrastructure/inspection-path.js.map +1 -1
  477. package/dist/infrastructure/journal.constants.js +10 -1
  478. package/dist/infrastructure/journal.constants.js.map +1 -1
  479. package/dist/infrastructure/journal.d.ts +1 -1
  480. package/dist/infrastructure/journal.js +8 -75
  481. package/dist/infrastructure/journal.js.map +1 -1
  482. package/dist/infrastructure/journal.types.d.ts +2 -4
  483. package/dist/infrastructure/journal.types.js.map +1 -1
  484. package/dist/infrastructure/local-transport.js +9 -4
  485. package/dist/infrastructure/local-transport.js.map +1 -1
  486. package/dist/infrastructure/opentelemetry-dispatch.d.ts +3 -3
  487. package/dist/infrastructure/opentelemetry-dispatch.js +5 -4
  488. package/dist/infrastructure/opentelemetry-dispatch.js.map +1 -1
  489. package/dist/infrastructure/opentelemetry-observation.d.ts +5 -0
  490. package/dist/infrastructure/opentelemetry-observation.js +59 -0
  491. package/dist/infrastructure/opentelemetry-observation.js.map +1 -0
  492. package/dist/infrastructure/opentelemetry.js +15 -1
  493. package/dist/infrastructure/opentelemetry.js.map +1 -1
  494. package/dist/infrastructure/opentelemetry.types.d.ts +9 -1
  495. package/dist/infrastructure/opentelemetry.types.js.map +1 -1
  496. package/dist/infrastructure/reporter.d.ts +2 -2
  497. package/dist/infrastructure/reporter.js +5 -1
  498. package/dist/infrastructure/reporter.js.map +1 -1
  499. package/dist/infrastructure/repository-transport.constants.d.ts +1 -0
  500. package/dist/infrastructure/repository-transport.constants.js +2 -0
  501. package/dist/infrastructure/repository-transport.constants.js.map +1 -0
  502. package/dist/infrastructure/repository-transport.d.ts +2 -0
  503. package/dist/infrastructure/repository-transport.js +9 -0
  504. package/dist/infrastructure/repository-transport.js.map +1 -0
  505. package/dist/infrastructure/resource-activity-inspection.js +19 -24
  506. package/dist/infrastructure/resource-activity-inspection.js.map +1 -1
  507. package/dist/infrastructure/resource-activity.constants.d.ts +0 -1
  508. package/dist/infrastructure/resource-activity.constants.js +0 -1
  509. package/dist/infrastructure/resource-activity.constants.js.map +1 -1
  510. package/dist/infrastructure/resource-activity.js +20 -83
  511. package/dist/infrastructure/resource-activity.js.map +1 -1
  512. package/dist/infrastructure/s3-transport.constants.d.ts +2 -0
  513. package/dist/infrastructure/s3-transport.constants.js +3 -0
  514. package/dist/infrastructure/s3-transport.constants.js.map +1 -0
  515. package/dist/infrastructure/s3-transport.js +57 -3
  516. package/dist/infrastructure/s3-transport.js.map +1 -1
  517. package/dist/infrastructure/s3-transport.types.d.ts +1 -0
  518. package/dist/infrastructure/s3-transport.types.js.map +1 -1
  519. package/dist/infrastructure/speculation-store.constants.d.ts +3 -0
  520. package/dist/infrastructure/speculation-store.constants.js +2 -0
  521. package/dist/infrastructure/speculation-store.constants.js.map +1 -0
  522. package/dist/infrastructure/speculation-store.d.ts +4 -0
  523. package/dist/infrastructure/speculation-store.js +73 -0
  524. package/dist/infrastructure/speculation-store.js.map +1 -0
  525. package/dist/infrastructure/speculation-store.types.d.ts +12 -0
  526. package/dist/infrastructure/speculation-store.types.js +2 -0
  527. package/dist/infrastructure/speculation-store.types.js.map +1 -0
  528. package/dist/infrastructure/storage-inventory.constants.js +1 -0
  529. package/dist/infrastructure/storage-inventory.constants.js.map +1 -1
  530. package/dist/infrastructure/storage-inventory.types.d.ts +1 -1
  531. package/dist/infrastructure/storage-inventory.types.js.map +1 -1
  532. package/dist/infrastructure/storage-reservations.types.d.ts +0 -8
  533. package/dist/infrastructure/storage-reservations.types.js.map +1 -1
  534. package/dist/infrastructure/task-queue-bullmq-resources.js +3 -0
  535. package/dist/infrastructure/task-queue-bullmq-resources.js.map +1 -1
  536. package/dist/infrastructure/task-queue-http.js +29 -4
  537. package/dist/infrastructure/task-queue-http.js.map +1 -1
  538. package/dist/infrastructure/task-queue-http.types.d.ts +2 -2
  539. package/dist/infrastructure/task-queue-http.types.js.map +1 -1
  540. package/dist/infrastructure/transport-conversations.js +2 -0
  541. package/dist/infrastructure/transport-conversations.js.map +1 -1
  542. package/dist/infrastructure/transport-journal.d.ts +1 -1
  543. package/dist/infrastructure/transport-journal.js +8 -2
  544. package/dist/infrastructure/transport-journal.js.map +1 -1
  545. package/dist/infrastructure/transport-reservations.d.ts +1 -1
  546. package/dist/infrastructure/transport-reservations.js +14 -8
  547. package/dist/infrastructure/transport-reservations.js.map +1 -1
  548. package/dist/infrastructure/workflow-decision-signature.constants.d.ts +4 -0
  549. package/dist/infrastructure/workflow-decision-signature.constants.js +5 -0
  550. package/dist/infrastructure/workflow-decision-signature.constants.js.map +1 -0
  551. package/dist/infrastructure/workflow-decision-signature.d.ts +4 -0
  552. package/dist/infrastructure/workflow-decision-signature.js +83 -0
  553. package/dist/infrastructure/workflow-decision-signature.js.map +1 -0
  554. package/dist/infrastructure/workflow-decision-signature.types.d.ts +16 -0
  555. package/dist/infrastructure/workflow-decision-signature.types.js +2 -0
  556. package/dist/infrastructure/workflow-decision-signature.types.js.map +1 -0
  557. package/dist/providers/agents.d.ts +7 -2
  558. package/dist/providers/agents.js +4 -1
  559. package/dist/providers/agents.js.map +1 -1
  560. package/dist/providers/antigravity-install.constants.d.ts +2 -0
  561. package/dist/providers/antigravity-install.constants.js +28 -0
  562. package/dist/providers/antigravity-install.constants.js.map +1 -0
  563. package/dist/providers/antigravity-install.d.ts +2 -0
  564. package/dist/providers/antigravity-install.js +29 -0
  565. package/dist/providers/antigravity-install.js.map +1 -0
  566. package/dist/providers/antigravity-install.types.d.ts +4 -0
  567. package/dist/providers/antigravity-install.types.js +2 -0
  568. package/dist/providers/antigravity-install.types.js.map +1 -0
  569. package/dist/providers/container-recovery.d.ts +4 -0
  570. package/dist/providers/container-recovery.js +28 -0
  571. package/dist/providers/container-recovery.js.map +1 -0
  572. package/dist/providers/container.js +8 -0
  573. package/dist/providers/container.js.map +1 -1
  574. package/dist/providers/daytona-network.constants.d.ts +5 -0
  575. package/dist/providers/daytona-network.constants.js +8 -0
  576. package/dist/providers/daytona-network.constants.js.map +1 -0
  577. package/dist/providers/daytona-network.d.ts +4 -0
  578. package/dist/providers/daytona-network.js +33 -0
  579. package/dist/providers/daytona-network.js.map +1 -0
  580. package/dist/providers/daytona.d.ts +1 -0
  581. package/dist/providers/daytona.js +9 -3
  582. package/dist/providers/daytona.js.map +1 -1
  583. package/dist/providers/daytona.types.d.ts +2 -0
  584. package/dist/providers/daytona.types.js.map +1 -1
  585. package/dist/providers/firecracker-command.js +1 -1
  586. package/dist/providers/firecracker-command.js.map +1 -1
  587. package/dist/providers/firecracker-jailer.constants.d.ts +9 -0
  588. package/dist/providers/firecracker-jailer.constants.js +10 -0
  589. package/dist/providers/firecracker-jailer.constants.js.map +1 -0
  590. package/dist/providers/firecracker-jailer.d.ts +4 -0
  591. package/dist/providers/firecracker-jailer.js +171 -0
  592. package/dist/providers/firecracker-jailer.js.map +1 -0
  593. package/dist/providers/firecracker-machine.js +30 -8
  594. package/dist/providers/firecracker-machine.js.map +1 -1
  595. package/dist/providers/firecracker.types.d.ts +16 -0
  596. package/dist/providers/firecracker.types.js.map +1 -1
  597. package/dist/providers/vercel-network.js +1 -1
  598. package/dist/providers/vercel-network.js.map +1 -1
  599. package/dist/providers/vercel.js +6 -3
  600. package/dist/providers/vercel.js.map +1 -1
  601. package/dist/providers/versions.constants.d.ts +3 -1
  602. package/dist/providers/versions.constants.js +3 -1
  603. package/dist/providers/versions.constants.js.map +1 -1
  604. package/package.json +3 -3
  605. package/dist/adapters/agents/gemini-adapter.d.ts +0 -3
  606. package/dist/adapters/agents/gemini-adapter.js +0 -34
  607. package/dist/adapters/agents/gemini-adapter.js.map +0 -1
  608. package/dist/adapters/agents/gemini-diagnostics.d.ts +0 -2
  609. package/dist/adapters/agents/gemini-diagnostics.js +0 -15
  610. package/dist/adapters/agents/gemini-diagnostics.js.map +0 -1
  611. package/dist/adapters/agents/gemini-events.d.ts +0 -2
  612. package/dist/adapters/agents/gemini-events.js +0 -50
  613. package/dist/adapters/agents/gemini-events.js.map +0 -1
  614. package/dist/adapters/agents/gemini-request.js +0 -23
  615. package/dist/adapters/agents/gemini-request.js.map +0 -1
  616. package/dist/adapters/agents/gemini.types.js +0 -2
  617. package/dist/adapters/agents/gemini.types.js.map +0 -1
  618. package/dist/infrastructure/artifact-store.d.ts +0 -3
  619. package/dist/infrastructure/artifact-store.js +0 -110
  620. package/dist/infrastructure/artifact-store.js.map +0 -1
  621. package/dist/infrastructure/artifact-store.types.d.ts +0 -6
  622. package/dist/infrastructure/artifact-store.types.js +0 -2
  623. package/dist/infrastructure/artifact-store.types.js.map +0 -1
  624. package/dist/infrastructure/journal-retention.constants.d.ts +0 -4
  625. package/dist/infrastructure/journal-retention.constants.js +0 -5
  626. package/dist/infrastructure/journal-retention.constants.js.map +0 -1
  627. package/dist/infrastructure/journal-retention.d.ts +0 -2
  628. package/dist/infrastructure/journal-retention.js +0 -51
  629. package/dist/infrastructure/journal-retention.js.map +0 -1
  630. package/dist/infrastructure/storage-mutation-lock.constants.d.ts +0 -5
  631. package/dist/infrastructure/storage-mutation-lock.constants.js +0 -6
  632. package/dist/infrastructure/storage-mutation-lock.constants.js.map +0 -1
  633. package/dist/infrastructure/storage-mutation-lock.d.ts +0 -1
  634. package/dist/infrastructure/storage-mutation-lock.js +0 -21
  635. package/dist/infrastructure/storage-mutation-lock.js.map +0 -1
  636. package/dist/infrastructure/storage-reservations.constants.d.ts +0 -4
  637. package/dist/infrastructure/storage-reservations.constants.js +0 -5
  638. package/dist/infrastructure/storage-reservations.constants.js.map +0 -1
  639. package/dist/infrastructure/storage-reservations.d.ts +0 -2
  640. package/dist/infrastructure/storage-reservations.js +0 -150
  641. package/dist/infrastructure/storage-reservations.js.map +0 -1
  642. package/dist/infrastructure/workflow-checkpoint.d.ts +0 -3
  643. package/dist/infrastructure/workflow-checkpoint.js +0 -84
  644. package/dist/infrastructure/workflow-checkpoint.js.map +0 -1
  645. package/dist/infrastructure/workflow-checkpoint.types.d.ts +0 -6
  646. package/dist/infrastructure/workflow-checkpoint.types.js +0 -2
  647. package/dist/infrastructure/workflow-checkpoint.types.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../src/application/tool-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import { OutpostError } from \"../domain/errors.ts\";\nimport {\n TOOL_PREVIEW_CHARACTERS,\n TOOL_RESULT_CHARACTERS,\n} from \"../domain/harness.constants.ts\";\nimport type {\n ModelToolCallBlock,\n ModelToolResultBlock,\n} from \"../domain/model.types.ts\";\nimport type { SandboxLease } from \"../domain/sandbox.types.ts\";\nimport type {\n HarnessTool,\n HarnessToolEvent,\n ToolOutput,\n} from \"../domain/tool.types.ts\";\nimport { afterTool, beforeTool } from \"./harness-hooks.ts\";\nimport type {\n HarnessRuntime,\n PreparedCall,\n ToolCallBatch,\n ToolOutcome,\n ValidatedInput,\n} from \"./harness.types.ts\";\n\nconst toolEvents: ReadonlySet<string> = new Set([\"text\", \"warning\", \"raw\"]);\n\nexport async function executeToolCalls(\n runtime: HarnessRuntime,\n calls: readonly ModelToolCallBlock[],\n step: number,\n loaded: ReadonlySet<string>,\n): Promise<readonly ModelToolResultBlock[]> {\n const tools = new Map(runtime.tools.map((tool) => [tool.name, tool]));\n const owners = new Map(\n runtime.agent.harness.skills.flatMap((skill) =>\n skill.tools.map((tool) => [tool.name, skill.name] as const),\n ),\n );\n const locked = (name: string) => {\n const skill = owners.get(name);\n return skill === undefined || loaded.has(skill) ? undefined : skill;\n };\n const prepared: PreparedCall[] = [];\n for (const call of calls)\n prepared.push(await prepareCall(runtime, tools, call, step, locked));\n const outcomes = new Map<string, ToolOutcome>();\n for (const batch of batches(prepared)) {\n const pending = [...batch.calls];\n const limit = batch.concurrent\n ? runtime.agent.harness.toolExecution.concurrency\n : 1;\n await Promise.all(\n Array.from({ length: Math.min(limit, pending.length) }, async () => {\n for (let next = pending.shift(); next; next = pending.shift())\n outcomes.set(next.call.id, await executeCall(runtime, next));\n }),\n );\n }\n const results: ModelToolResultBlock[] = [];\n for (const { call, outcome } of prepared)\n results.push(\n await finish(runtime, call, outcome ?? outcomes.get(call.id)!, step),\n );\n return results;\n}\n\nasync function prepareCall(\n runtime: HarnessRuntime,\n tools: ReadonlyMap<string, HarnessTool>,\n call: ModelToolCallBlock,\n step: number,\n locked: (name: string) => string | undefined,\n): Promise<PreparedCall> {\n runtime.signal.throwIfAborted();\n runtime.emit({\n kind: \"tool\",\n name: call.name,\n input: call.input,\n callId: call.id,\n });\n const tool = tools.get(call.name);\n if (!tool) return { call, outcome: failed(`Unknown tool: ${call.name}`) };\n const validated = await validate(tool, call.input, \"Invalid input\");\n if (\"outcome\" in validated) return { call, outcome: validated.outcome };\n const skill = locked(tool.name);\n if (skill)\n return denied(\n runtime,\n call,\n `Load the ${skill} skill with load_skill before using ${tool.name}`,\n );\n const permitted = permission(runtime, tool, validated.value);\n if (permitted) return denied(runtime, call, permitted);\n const decision = await beforeTool(\n runtime,\n { ...call, input: validated.value },\n step,\n );\n if (\"deny\" in decision) return denied(runtime, call, decision.deny);\n if (decision.input === validated.value)\n return { call, tool, input: validated.value };\n const revised = await validate(\n tool,\n decision.input,\n \"Hook produced invalid input\",\n );\n if (\"outcome\" in revised) return { call, outcome: revised.outcome };\n const revisedPermission = permission(runtime, tool, revised.value);\n if (revisedPermission) return denied(runtime, call, revisedPermission);\n return { call, tool, input: revised.value };\n}\n\nasync function validate(\n tool: HarnessTool,\n input: unknown,\n label: string,\n): Promise<ValidatedInput> {\n const validation = await tool.validate(input);\n if (\"issues\" in validation)\n return {\n outcome: failed(`${label} for ${tool.name}: ${validation.issues}`),\n };\n return { value: validation.value };\n}\n\nfunction permission(\n runtime: HarnessRuntime,\n tool: HarnessTool,\n input: unknown,\n): string | undefined {\n const permissions = runtime.agent.harness.permissions;\n if (!permissions) return undefined;\n const decision = permissions.evaluate(tool.name, tool.resources(input));\n return decision.allowed ? undefined : decision.reason;\n}\n\nfunction denied(\n runtime: HarnessRuntime,\n call: ModelToolCallBlock,\n reason: string,\n): PreparedCall {\n runtime.emit({\n kind: \"tool-denied\",\n callId: call.id,\n name: call.name,\n reason,\n });\n return { call, outcome: failed(`Denied: ${reason}`) };\n}\n\nasync function finish(\n runtime: HarnessRuntime,\n call: ModelToolCallBlock,\n outcome: ToolOutcome,\n step: number,\n): Promise<ModelToolResultBlock> {\n const final = await afterTool(runtime, call, outcome, step, normalized);\n const content =\n final.content.length > TOOL_RESULT_CHARACTERS\n ? `${final.content.slice(0, TOOL_RESULT_CHARACTERS)}\\n[truncated ${final.content.length - TOOL_RESULT_CHARACTERS} characters]`\n : final.content;\n runtime.emit({\n kind: \"tool-result\",\n callId: call.id,\n name: call.name,\n isError: final.isError,\n preview: content.slice(0, TOOL_PREVIEW_CHARACTERS),\n characters: final.content.length,\n });\n return {\n type: \"tool-result\",\n callId: call.id,\n content,\n ...(final.isError ? { isError: true } : {}),\n };\n}\n\nfunction batches(calls: readonly PreparedCall[]): readonly ToolCallBatch[] {\n const grouped: ToolCallBatch[] = [];\n for (const prepared of calls) {\n if (prepared.outcome) continue;\n const concurrent = prepared.tool!.readOnly;\n const last = grouped.at(-1);\n if (last?.concurrent && concurrent) {\n grouped[grouped.length - 1] = {\n concurrent,\n calls: [...last.calls, prepared],\n };\n continue;\n }\n grouped.push({ concurrent, calls: [prepared] });\n }\n return grouped;\n}\n\nasync function executeCall(\n runtime: HarnessRuntime,\n prepared: PreparedCall,\n): Promise<ToolOutcome> {\n try {\n return normalized(await runTool(runtime, prepared));\n } catch (error) {\n runtime.signal.throwIfAborted();\n if (runtime.agent.harness.toolExecution.onError === \"fail\") throw error;\n return failed(error instanceof Error ? error.message : String(error));\n }\n}\n\nasync function runTool(\n runtime: HarnessRuntime,\n { call, tool, input }: PreparedCall,\n): Promise<ToolOutput> {\n const { deadlineMs } = runtime.agent.harness.toolExecution;\n const controller = new AbortController();\n const signal = AbortSignal.any([runtime.signal, controller.signal]);\n const timer = setTimeout(\n () =>\n controller.abort(\n new OutpostError(\n \"timeout\",\n `Tool ${call.name} timed out after ${deadlineMs} ms`,\n ),\n ),\n deadlineMs,\n );\n const release = runtime.hold();\n const aborted = new Promise<never>((_, reject) => {\n const fail = () => reject(signal.reason);\n if (signal.aborted) fail();\n signal.addEventListener(\"abort\", fail, { once: true });\n });\n const execution = Promise.resolve().then(() =>\n tool!.execute(input, {\n sandbox: scopedLease(runtime.sandbox, signal),\n signal,\n callId: call.id,\n model: runtime.agent.model,\n observe(event: HarnessToolEvent) {\n signal.throwIfAborted();\n if (!toolEvents.has(event?.kind))\n throw new OutpostError(\n \"configuration\",\n \"Tools may only report text, warning or raw events\",\n );\n runtime.emit(event);\n },\n }),\n );\n execution.catch(() => undefined);\n aborted.catch(() => undefined);\n try {\n return await Promise.race([execution, aborted]);\n } finally {\n clearTimeout(timer);\n controller.abort(new OutpostError(\"aborted\", \"Tool call ended\"));\n release();\n }\n}\n\nfunction scopedLease(lease: SandboxLease, signal: AbortSignal): SandboxLease {\n const combine = (own?: AbortSignal) =>\n own ? AbortSignal.any([own, signal]) : signal;\n return {\n root: lease.root,\n home: lease.home,\n invoke: (command) => {\n signal.throwIfAborted();\n return lease.invoke({ ...command, signal: combine(command.signal) });\n },\n upload: (source, destination, settings = {}) => {\n signal.throwIfAborted();\n return lease.upload(source, destination, {\n ...settings,\n signal: combine(settings.signal),\n });\n },\n download: (source, destination, settings = {}) => {\n signal.throwIfAborted();\n return lease.download(source, destination, {\n ...settings,\n signal: combine(settings.signal),\n });\n },\n release: () => lease.release(),\n };\n}\n\nfunction normalized(output: ToolOutput): ToolOutcome {\n if (typeof output === \"string\") return { content: output, isError: false };\n if (\n output === null ||\n typeof output !== \"object\" ||\n typeof output.content !== \"string\" ||\n (output.isError !== undefined && typeof output.isError !== \"boolean\")\n )\n throw new OutpostError(\n \"configuration\",\n \"Tools must return text or { content, isError }\",\n );\n return { content: output.content, isError: output.isError ?? false };\n}\n\nfunction failed(message: string): ToolOutcome {\n return { content: message, isError: true };\n}\n"]}
1
+ {"version":3,"file":"tool-execution.js","sourceRoot":"","sources":["../../src/application/tool-execution.ts"],"names":[],"mappings":"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","sourcesContent":["import { isHarnessSubagent } from \"../domain/subagent.ts\";\nimport { runSubagent } from \"./harness-subagent.ts\";\nimport type { HarnessToolContext } from \"../domain/tool.types.ts\";\nimport { observationDefaults } from \"../domain/observation.constants.ts\";\nimport { OutpostError } from \"../domain/errors.ts\";\nimport {\n TOOL_PREVIEW_CHARACTERS,\n TOOL_RESULT_CHARACTERS,\n} from \"../domain/harness.constants.ts\";\nimport type {\n ModelToolCallBlock,\n ModelToolResultBlock,\n} from \"../domain/model.types.ts\";\nimport type { SandboxLease } from \"../domain/sandbox.types.ts\";\nimport type {\n HarnessTool,\n HarnessToolEvent,\n ToolOutput,\n} from \"../domain/tool.types.ts\";\nimport { afterTool, beforeTool } from \"./harness-hooks.ts\";\nimport type {\n HarnessRuntime,\n PreparedCall,\n ToolCallBatch,\n ToolOutcome,\n ValidatedInput,\n} from \"./harness.types.ts\";\n\nconst toolEvents: ReadonlySet<string> = new Set([\"text\", \"warning\", \"raw\"]);\n\nexport async function executeToolCalls(\n runtime: HarnessRuntime,\n calls: readonly ModelToolCallBlock[],\n step: number,\n loaded: ReadonlySet<string>,\n): Promise<readonly ModelToolResultBlock[]> {\n const tools = new Map(runtime.tools.map((tool) => [tool.name, tool]));\n const owners = new Map(\n runtime.agent.harness.skills.flatMap((skill) =>\n skill.tools.map((tool) => [tool.name, skill.name] as const),\n ),\n );\n const locked = (name: string) => {\n const skill = owners.get(name);\n return skill === undefined || loaded.has(skill) ? undefined : skill;\n };\n const prepared: PreparedCall[] = [];\n for (const call of calls)\n prepared.push(await prepareCall(runtime, tools, call, step, locked));\n const outcomes = new Map<string, ToolOutcome>();\n for (const batch of batches(prepared)) {\n const pending = [...batch.calls];\n const limit = batch.concurrent\n ? runtime.agent.harness.toolExecution.concurrency\n : 1;\n await Promise.all(\n Array.from({ length: Math.min(limit, pending.length) }, async () => {\n for (let next = pending.shift(); next; next = pending.shift())\n outcomes.set(next.call.id, await executeCall(runtime, next));\n }),\n );\n }\n const results: ModelToolResultBlock[] = [];\n for (const { call, outcome } of prepared)\n results.push(\n await finish(runtime, call, outcome ?? outcomes.get(call.id)!, step),\n );\n return results;\n}\n\nasync function prepareCall(\n runtime: HarnessRuntime,\n tools: ReadonlyMap<string, HarnessTool>,\n call: ModelToolCallBlock,\n step: number,\n locked: (name: string) => string | undefined,\n): Promise<PreparedCall> {\n runtime.signal.throwIfAborted();\n runtime.emit({\n kind: \"tool\",\n name: call.name,\n input: call.input,\n callId: call.id,\n });\n const tool = tools.get(call.name);\n if (!tool) return { call, outcome: failed(`Unknown tool: ${call.name}`) };\n const validated = await validate(tool, call.input, \"Invalid input\");\n if (\"outcome\" in validated) return { call, outcome: validated.outcome };\n const skill = locked(tool.name);\n if (skill)\n return denied(\n runtime,\n call,\n `Load the ${skill} skill with load_skill before using ${tool.name}`,\n );\n const permitted = permission(runtime, tool, validated.value);\n if (permitted) return denied(runtime, call, permitted);\n const decision = await beforeTool(\n runtime,\n { ...call, input: validated.value },\n step,\n );\n if (\"deny\" in decision) return denied(runtime, call, decision.deny);\n if (decision.input === validated.value)\n return { call, tool, input: validated.value };\n const revised = await validate(\n tool,\n decision.input,\n \"Hook produced invalid input\",\n );\n if (\"outcome\" in revised) return { call, outcome: revised.outcome };\n const revisedPermission = permission(runtime, tool, revised.value);\n if (revisedPermission) return denied(runtime, call, revisedPermission);\n return { call, tool, input: revised.value };\n}\n\nasync function validate(\n tool: HarnessTool,\n input: unknown,\n label: string,\n): Promise<ValidatedInput> {\n const validation = await tool.validate(input);\n if (\"issues\" in validation)\n return {\n outcome: failed(`${label} for ${tool.name}: ${validation.issues}`),\n };\n return { value: validation.value };\n}\n\nfunction permission(\n runtime: HarnessRuntime,\n tool: HarnessTool,\n input: unknown,\n): string | undefined {\n for (const permissions of runtime.permissions) {\n const decision = permissions.evaluate(tool.name, tool.resources(input));\n if (!decision.allowed) return decision.reason;\n }\n return undefined;\n}\n\nfunction denied(\n runtime: HarnessRuntime,\n call: ModelToolCallBlock,\n reason: string,\n): PreparedCall {\n runtime.emit({\n kind: \"tool-denied\",\n callId: call.id,\n name: call.name,\n reason,\n });\n return { call, outcome: failed(`Denied: ${reason}`) };\n}\n\nasync function finish(\n runtime: HarnessRuntime,\n call: ModelToolCallBlock,\n outcome: ToolOutcome,\n step: number,\n): Promise<ModelToolResultBlock> {\n const final = await afterTool(runtime, call, outcome, step, normalized);\n const content =\n final.content.length > TOOL_RESULT_CHARACTERS\n ? `${final.content.slice(0, TOOL_RESULT_CHARACTERS)}\\n[truncated ${final.content.length - TOOL_RESULT_CHARACTERS} characters]`\n : final.content;\n runtime.emit({\n kind: \"tool-result\",\n callId: call.id,\n name: call.name,\n isError: final.isError,\n preview: content.slice(0, TOOL_PREVIEW_CHARACTERS),\n characters: final.content.length,\n });\n return {\n type: \"tool-result\",\n callId: call.id,\n content,\n ...(final.isError ? { isError: true } : {}),\n };\n}\n\nfunction batches(calls: readonly PreparedCall[]): readonly ToolCallBatch[] {\n const grouped: ToolCallBatch[] = [];\n for (const prepared of calls) {\n if (prepared.outcome) continue;\n const concurrent = prepared.tool!.readOnly;\n const last = grouped.at(-1);\n if (last?.concurrent && concurrent) {\n grouped[grouped.length - 1] = {\n concurrent,\n calls: [...last.calls, prepared],\n };\n continue;\n }\n grouped.push({ concurrent, calls: [prepared] });\n }\n return grouped;\n}\n\nasync function executeCall(\n runtime: HarnessRuntime,\n prepared: PreparedCall,\n): Promise<ToolOutcome> {\n try {\n return normalized(await runTool(runtime, prepared));\n } catch (error) {\n runtime.signal.throwIfAborted();\n runtime.budget.check();\n if (runtime.agent.harness.toolExecution.onError === \"fail\") throw error;\n return failed(error instanceof Error ? error.message : String(error));\n }\n}\n\nasync function runTool(\n runtime: HarnessRuntime,\n { call, tool, input }: PreparedCall,\n): Promise<ToolOutput> {\n const { deadlineMs } = runtime.agent.harness.toolExecution;\n const controller = new AbortController();\n const signal = AbortSignal.any([runtime.signal, controller.signal]);\n const timer = setTimeout(\n () =>\n controller.abort(\n new OutpostError(\n \"timeout\",\n `Tool ${call.name} timed out after ${deadlineMs} ms`,\n ),\n ),\n deadlineMs,\n );\n const release = runtime.hold();\n const aborted = new Promise<never>((_, reject) => {\n const fail = () => reject(signal.reason);\n if (signal.aborted) fail();\n signal.addEventListener(\"abort\", fail, { once: true });\n });\n const execution = Promise.resolve().then(() => {\n const context: HarnessToolContext = {\n sandbox: scopedLease(\n runtime.sandbox,\n signal,\n runtime,\n isHarnessSubagent(tool!) ? undefined : call.id,\n ),\n signal,\n callId: call.id,\n model: runtime.agent.model,\n observe(event: HarnessToolEvent) {\n signal.throwIfAborted();\n if (!toolEvents.has(event?.kind))\n throw new OutpostError(\n \"configuration\",\n \"Tools may only report text, warning or raw events\",\n );\n runtime.emit(event);\n },\n };\n return isHarnessSubagent(tool!)\n ? runtime.modelScope.track(runSubagent(runtime, tool!, input, context))\n : tool!.execute(input, context);\n });\n execution.catch(() => undefined);\n aborted.catch(() => undefined);\n try {\n return await Promise.race([execution, aborted]);\n } finally {\n clearTimeout(timer);\n controller.abort(new OutpostError(\"aborted\", \"Tool call ended\"));\n release();\n }\n}\n\nfunction scopedLease(\n lease: SandboxLease,\n signal: AbortSignal,\n runtime: HarnessRuntime,\n callId: string | undefined,\n): SandboxLease {\n const combine = (own?: AbortSignal) =>\n own ? AbortSignal.any([own, signal]) : signal;\n return {\n root: lease.root,\n home: lease.home,\n invoke: (command) => {\n signal.throwIfAborted();\n return lease.invoke({\n ...command,\n signal: combine(command.signal),\n observe(channel, text) {\n for (\n let offset = 0;\n callId !== undefined && offset < text.length;\n offset += observationDefaults.outputCharacters\n )\n runtime.emit({\n kind: \"tool-output\",\n callId,\n channel,\n text: text.slice(\n offset,\n offset + observationDefaults.outputCharacters,\n ),\n });\n command.observe?.(channel, text);\n },\n });\n },\n upload: (source, destination, settings = {}) => {\n signal.throwIfAborted();\n return lease.upload(source, destination, {\n ...settings,\n signal: combine(settings.signal),\n });\n },\n download: (source, destination, settings = {}) => {\n signal.throwIfAborted();\n return lease.download(source, destination, {\n ...settings,\n signal: combine(settings.signal),\n });\n },\n release: () => lease.release(),\n };\n}\n\nfunction normalized(output: ToolOutput): ToolOutcome {\n if (typeof output === \"string\") return { content: output, isError: false };\n if (\n output === null ||\n typeof output !== \"object\" ||\n typeof output.content !== \"string\" ||\n (output.isError !== undefined && typeof output.isError !== \"boolean\")\n )\n throw new OutpostError(\n \"configuration\",\n \"Tools must return text or { content, isError }\",\n );\n return { content: output.content, isError: output.isError ?? false };\n}\n\nfunction failed(message: string): ToolOutcome {\n return { content: message, isError: true };\n}\n"]}
@@ -1,3 +1,4 @@
1
+ import { observedOperation } from "../domain/observed-operation.js";
1
2
  import { invariant } from "../domain/errors.js";
2
3
  import { allocateWorkspace } from "./workspace-allocation.js";
3
4
  import { executeProcess } from "../infrastructure/process.js";
@@ -9,12 +10,12 @@ import { startupFailure } from "./startup-recovery.js";
9
10
  import { workspaces } from "./workspace-registry.js";
10
11
  export async function openWorkspace(options = {}) {
11
12
  options.signal?.throwIfAborted();
12
- const lease = await allocateWorkspace(options);
13
+ const lease = await observedOperation(options.observation, "git", "workspace.allocate", async () => allocateWorkspace(options));
13
14
  try {
14
- await hooks(options.hooks?.workspaceReady ?? [], lease.directory, executeProcess, options.signal);
15
+ await observedOperation(options.observation, "hooks", "workspace.ready", async () => hooks(options.hooks?.workspaceReady ?? [], lease.directory, executeProcess, options.signal));
15
16
  }
16
17
  catch (cause) {
17
- await startupFailure(lease, cause, options);
18
+ await observedOperation(options.observation, "recovery", "workspace.startup-failure", async () => startupFailure(lease, cause, options));
18
19
  await lease.dispose();
19
20
  throw cause;
20
21
  }
@@ -26,6 +27,7 @@ export async function openWorkspace(options = {}) {
26
27
  };
27
28
  const result = {
28
29
  ...lease,
30
+ integrate: () => observedOperation(options.observation, "git", "branch.integrate", () => lease.integrate()),
29
31
  dispatch(options) {
30
32
  return dispatch({ ...options, workspace: result });
31
33
  },
@@ -38,7 +40,7 @@ export async function openWorkspace(options = {}) {
38
40
  async close(settings = {}) {
39
41
  invariant(!state.active, "Close the sandbox before closing its workspace");
40
42
  state.closed = true;
41
- return lease.dispose(settings.preserve);
43
+ return observedOperation(options.observation, "recovery", "workspace.cleanup", () => lease.dispose(settings.preserve));
42
44
  },
43
45
  async [Symbol.asyncDispose]() {
44
46
  await result.close();
@@ -1 +1 @@
1
- {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/application/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAE7C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,UAA4B,EAAE;IAE9B,OAAO,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,KAAK,CACT,OAAO,CAAC,KAAK,EAAE,cAAc,IAAI,EAAE,EACnC,KAAK,CAAC,SAAS,EACf,cAAc,EACd,OAAO,CAAC,MAAM,CACf,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;QACtB,MAAM,KAAK,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG;QACZ,KAAK;QACL,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,KAAK;QACb,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACnD,CAAC;IACF,MAAM,MAAM,GAAc;QACxB,GAAG,KAAK;QACR,QAAQ,CAAC,OAAO;YACd,OAAO,QAAQ,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,CAAC,OAAO,GAAG,EAAE;YAClB,OAAO,aAAa,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QAC1D,CAAC;QACD,MAAM,CAAC,OAAO;YACZ,OAAO,MAAM,CAAC,EAAE,GAAG,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,EAAE;YACvB,SAAS,CACP,CAAC,KAAK,CAAC,MAAM,EACb,gDAAgD,CACjD,CAAC;YACF,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC1C,CAAC;QACD,KAAK,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YACzB,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;KACF,CAAC;IACF,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { invariant } from \"../domain/errors.ts\";\nimport { allocateWorkspace } from \"./workspace-allocation.ts\";\nimport { executeProcess } from \"../infrastructure/process.ts\";\nimport { attach } from \"./attach.ts\";\nimport { dispatch } from \"./dispatch.ts\";\nimport { hooks } from \"./lifecycle-hooks.ts\";\nimport type { Workspace, WorkspaceOptions } from \"./outpost.types.ts\";\nimport { createSandbox } from \"./sandbox.ts\";\nimport { startupFailure } from \"./startup-recovery.ts\";\nimport { workspaces } from \"./workspace-registry.ts\";\n\nexport async function openWorkspace(\n options: WorkspaceOptions = {},\n): Promise<Workspace> {\n options.signal?.throwIfAborted();\n const lease = await allocateWorkspace(options);\n try {\n await hooks(\n options.hooks?.workspaceReady ?? [],\n lease.directory,\n executeProcess,\n options.signal,\n );\n } catch (cause) {\n await startupFailure(lease, cause, options);\n await lease.dispose();\n throw cause;\n }\n const state = {\n lease,\n active: false,\n closed: false,\n ...(options.hooks ? { hooks: options.hooks } : {}),\n };\n const result: Workspace = {\n ...lease,\n dispatch(options) {\n return dispatch({ ...options, workspace: result });\n },\n sandbox(options = {}) {\n return createSandbox({ ...options, workspace: result });\n },\n attach(options) {\n return attach({ ...options, workspace: result });\n },\n async close(settings = {}) {\n invariant(\n !state.active,\n \"Close the sandbox before closing its workspace\",\n );\n state.closed = true;\n return lease.dispose(settings.preserve);\n },\n async [Symbol.asyncDispose]() {\n await result.close();\n },\n };\n workspaces.set(result, state);\n return result;\n}\n"]}
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/application/workspace.ts"],"names":[],"mappings":"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","sourcesContent":["import { observedOperation } from \"../domain/observed-operation.ts\";\nimport { invariant } from \"../domain/errors.ts\";\nimport { allocateWorkspace } from \"./workspace-allocation.ts\";\nimport { executeProcess } from \"../infrastructure/process.ts\";\nimport { attach } from \"./attach.ts\";\nimport { dispatch } from \"./dispatch.ts\";\nimport { hooks } from \"./lifecycle-hooks.ts\";\nimport type { Workspace, WorkspaceOptions } from \"./outpost.types.ts\";\nimport { createSandbox } from \"./sandbox.ts\";\nimport { startupFailure } from \"./startup-recovery.ts\";\nimport { workspaces } from \"./workspace-registry.ts\";\n\nexport async function openWorkspace(\n options: WorkspaceOptions = {},\n): Promise<Workspace> {\n options.signal?.throwIfAborted();\n const lease = await observedOperation(\n options.observation,\n \"git\",\n \"workspace.allocate\",\n async () => allocateWorkspace(options),\n );\n try {\n await observedOperation(\n options.observation,\n \"hooks\",\n \"workspace.ready\",\n async () =>\n hooks(\n options.hooks?.workspaceReady ?? [],\n lease.directory,\n executeProcess,\n options.signal,\n ),\n );\n } catch (cause) {\n await observedOperation(\n options.observation,\n \"recovery\",\n \"workspace.startup-failure\",\n async () => startupFailure(lease, cause, options),\n );\n await lease.dispose();\n throw cause;\n }\n const state = {\n lease,\n active: false,\n closed: false,\n ...(options.hooks ? { hooks: options.hooks } : {}),\n };\n const result: Workspace = {\n ...lease,\n integrate: () =>\n observedOperation(options.observation, \"git\", \"branch.integrate\", () =>\n lease.integrate(),\n ),\n dispatch(options) {\n return dispatch({ ...options, workspace: result });\n },\n sandbox(options = {}) {\n return createSandbox({ ...options, workspace: result });\n },\n attach(options) {\n return attach({ ...options, workspace: result });\n },\n async close(settings = {}) {\n invariant(\n !state.active,\n \"Close the sandbox before closing its workspace\",\n );\n state.closed = true;\n return observedOperation(\n options.observation,\n \"recovery\",\n \"workspace.cleanup\",\n () => lease.dispose(settings.preserve),\n );\n },\n async [Symbol.asyncDispose]() {\n await result.close();\n },\n };\n workspaces.set(result, state);\n return result;\n}\n"]}
@@ -1,9 +1,13 @@
1
+ import { doctorAgents } from "../application/doctor-agent.constants.js";
1
2
  import { doctorDefaults, providerDiagnostics, } from "../application/doctor.constants.js";
2
3
  import { diagnose } from "../application/doctor.js";
3
4
  import { invariant } from "../domain/errors.js";
4
5
  function isProvider(value) {
5
6
  return Object.hasOwn(providerDiagnostics, value);
6
7
  }
8
+ function isAgent(value) {
9
+ return Object.hasOwn(doctorAgents, value);
10
+ }
7
11
  export async function doctorCommand({ values, positionals }, execute, write = (text) => {
8
12
  process.stdout.write(text);
9
13
  }) {
@@ -13,7 +17,7 @@ export async function doctorCommand({ values, positionals }, execute, write = (t
13
17
  const sandboxProvider = values.sandboxProvider ?? doctorDefaults.sandboxProvider;
14
18
  const agent = values.agent ?? doctorDefaults.agent;
15
19
  invariant(isProvider(sandboxProvider), "Unknown provider. Choose docker, podman, local, vercel or daytona.");
16
- invariant(agent === "codex" || agent === "claude" || agent === "gemini", "Unknown agent. Choose codex, claude or gemini.");
20
+ invariant(isAgent(agent), `Unknown agent. Choose ${Object.keys(doctorAgents).join(", ")}.`);
17
21
  const report = await diagnose({
18
22
  sandboxProvider,
19
23
  agent,
@@ -32,7 +36,7 @@ export async function doctorCommand({ values, positionals }, execute, write = (t
32
36
  ? "Diagnostic checks found failures.\n"
33
37
  : "No blocking check failed; warnings and skipped checks still need review.\n");
34
38
  }
35
- if (report.hasFailures)
39
+ if (report.hasFailures && !process.exitCode)
36
40
  process.exitCode = 1;
37
41
  }
38
42
  //# sourceMappingURL=doctor-command.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../src/cli/doctor-command.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n doctorDefaults,\n providerDiagnostics,\n} from \"../application/doctor.constants.ts\";\nimport { diagnose } from \"../application/doctor.ts\";\nimport type { DoctorProvider } from \"../application/doctor.types.ts\";\nimport { invariant } from \"../domain/errors.ts\";\nimport type { Executor } from \"../infrastructure/process.types.ts\";\nimport type { CliInvocation } from \"./main.types.ts\";\n\nfunction isProvider(value: string): value is DoctorProvider {\n return Object.hasOwn(providerDiagnostics, value);\n}\nexport async function doctorCommand(\n { values, positionals }: CliInvocation,\n execute?: Executor,\n write: (text: string) => void = (text) => {\n process.stdout.write(text);\n },\n): Promise<void> {\n invariant(\n positionals.length === 1,\n \"Usage: outpost doctor [--sandbox-provider NAME] [--agent NAME] [--image NAME] [--json]\",\n );\n for (const key of Object.keys(values))\n invariant(\n [\"sandboxProvider\", \"agent\", \"image\", \"json\"].includes(key),\n `Unsupported doctor option: --${key}`,\n );\n const sandboxProvider =\n values.sandboxProvider ?? doctorDefaults.sandboxProvider;\n const agent = values.agent ?? doctorDefaults.agent;\n invariant(\n isProvider(sandboxProvider),\n \"Unknown provider. Choose docker, podman, local, vercel or daytona.\",\n );\n invariant(\n agent === \"codex\" || agent === \"claude\" || agent === \"gemini\",\n \"Unknown agent. Choose codex, claude or gemini.\",\n );\n const report = await diagnose(\n {\n sandboxProvider,\n agent,\n ...(values.image !== undefined ? { image: values.image } : {}),\n },\n execute,\n );\n if (values.json) write(`${JSON.stringify(report, null, 2)}\\n`);\n else {\n write(\n `Outpost doctor — ${report.scope === \"host\" ? \"host checks\" : \"host and image checks\"} (${sandboxProvider}, ${agent})\\n`,\n );\n write(\n `Provider contract: ${report.placement}; interactive terminal: ${report.interactiveTerminal ? \"supported\" : \"unsupported\"}. Workflow execution is not tested.\\n`,\n );\n if (report.image) write(`Image: ${report.image}\\n`);\n for (const check of report.checks)\n write(\n `[${check.status.toUpperCase()}] ${check.id}${check.version ? ` ${check.version}` : \"\"}${check.referenceVersion ? ` (pinned: ${check.referenceVersion})` : \"\"}: ${check.message}\\n`,\n );\n write(\n report.hasFailures\n ? \"Diagnostic checks found failures.\\n\"\n : \"No blocking check failed; warnings and skipped checks still need review.\\n\",\n );\n }\n if (report.hasFailures) process.exitCode = 1;\n}\n"]}
1
+ {"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../src/cli/doctor-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,0CAA0C,CAAC;AACxE,OAAO,EACL,cAAc,EACd,mBAAmB,GACpB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAKpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAIhD,SAAS,UAAU,CAAC,KAAa;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;AACnD,CAAC;AACD,SAAS,OAAO,CAAC,KAAa;IAC5B,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;AAC5C,CAAC;AACD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAE,MAAM,EAAE,WAAW,EAAiB,EACtC,OAAkB,EAClB,QAAgC,CAAC,IAAI,EAAE,EAAE;IACvC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;IAED,SAAS,CACP,WAAW,CAAC,MAAM,KAAK,CAAC,EACxB,wFAAwF,CACzF,CAAC;IACF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;QACnC,SAAS,CACP,CAAC,iBAAiB,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAC3D,gCAAgC,GAAG,EAAE,CACtC,CAAC;IACJ,MAAM,eAAe,GACnB,MAAM,CAAC,eAAe,IAAI,cAAc,CAAC,eAAe,CAAC;IAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,cAAc,CAAC,KAAK,CAAC;IACnD,SAAS,CACP,UAAU,CAAC,eAAe,CAAC,EAC3B,oEAAoE,CACrE,CAAC;IACF,SAAS,CACP,OAAO,CAAC,KAAK,CAAC,EACd,yBAAyB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACjE,CAAC;IACF,MAAM,MAAM,GAAG,MAAM,QAAQ,CAC3B;QACE,eAAe;QACf,KAAK;QACL,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC/D,EACD,OAAO,CACR,CAAC;IACF,IAAI,MAAM,CAAC,IAAI;QAAE,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SAC1D,CAAC;QACJ,KAAK,CACH,oBAAoB,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,uBAAuB,KAAK,eAAe,KAAK,KAAK,KAAK,CACzH,CAAC;QACF,KAAK,CACH,sBAAsB,MAAM,CAAC,SAAS,2BAA2B,MAAM,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,uCAAuC,CACjK,CAAC;QACF,IAAI,MAAM,CAAC,KAAK;YAAE,KAAK,CAAC,UAAU,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QACpD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM;YAC/B,KAAK,CACH,IAAI,KAAK,CAAC,MAAM,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,IAAI,CACpL,CAAC;QACJ,KAAK,CACH,MAAM,CAAC,WAAW;YAChB,CAAC,CAAC,qCAAqC;YACvC,CAAC,CAAC,4EAA4E,CACjF,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,QAAQ;QAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;AACpE,CAAC","sourcesContent":["import { doctorAgents } from \"../application/doctor-agent.constants.ts\";\nimport {\n doctorDefaults,\n providerDiagnostics,\n} from \"../application/doctor.constants.ts\";\nimport { diagnose } from \"../application/doctor.ts\";\nimport type {\n DoctorAgent,\n DoctorProvider,\n} from \"../application/doctor.types.ts\";\nimport { invariant } from \"../domain/errors.ts\";\nimport type { Executor } from \"../infrastructure/process.types.ts\";\nimport type { CliInvocation } from \"./main.types.ts\";\n\nfunction isProvider(value: string): value is DoctorProvider {\n return Object.hasOwn(providerDiagnostics, value);\n}\nfunction isAgent(value: string): value is DoctorAgent {\n return Object.hasOwn(doctorAgents, value);\n}\nexport async function doctorCommand(\n { values, positionals }: CliInvocation,\n execute?: Executor,\n write: (text: string) => void = (text) => {\n process.stdout.write(text);\n },\n): Promise<void> {\n invariant(\n positionals.length === 1,\n \"Usage: outpost doctor [--sandbox-provider NAME] [--agent NAME] [--image NAME] [--json]\",\n );\n for (const key of Object.keys(values))\n invariant(\n [\"sandboxProvider\", \"agent\", \"image\", \"json\"].includes(key),\n `Unsupported doctor option: --${key}`,\n );\n const sandboxProvider =\n values.sandboxProvider ?? doctorDefaults.sandboxProvider;\n const agent = values.agent ?? doctorDefaults.agent;\n invariant(\n isProvider(sandboxProvider),\n \"Unknown provider. Choose docker, podman, local, vercel or daytona.\",\n );\n invariant(\n isAgent(agent),\n `Unknown agent. Choose ${Object.keys(doctorAgents).join(\", \")}.`,\n );\n const report = await diagnose(\n {\n sandboxProvider,\n agent,\n ...(values.image !== undefined ? { image: values.image } : {}),\n },\n execute,\n );\n if (values.json) write(`${JSON.stringify(report, null, 2)}\\n`);\n else {\n write(\n `Outpost doctor — ${report.scope === \"host\" ? \"host checks\" : \"host and image checks\"} (${sandboxProvider}, ${agent})\\n`,\n );\n write(\n `Provider contract: ${report.placement}; interactive terminal: ${report.interactiveTerminal ? \"supported\" : \"unsupported\"}. Workflow execution is not tested.\\n`,\n );\n if (report.image) write(`Image: ${report.image}\\n`);\n for (const check of report.checks)\n write(\n `[${check.status.toUpperCase()}] ${check.id}${check.version ? ` ${check.version}` : \"\"}${check.referenceVersion ? ` (pinned: ${check.referenceVersion})` : \"\"}: ${check.message}\\n`,\n );\n write(\n report.hasFailures\n ? \"Diagnostic checks found failures.\\n\"\n : \"No blocking check failed; warnings and skipped checks still need review.\\n\",\n );\n }\n if (report.hasFailures && !process.exitCode) process.exitCode = 1;\n}\n"]}
@@ -1,4 +1,7 @@
1
- import type { InitOptions } from "./scaffold.types.ts";
1
+ import type { AgentAuthentication } from "../domain/agent.types.ts";
2
+ import type { AuthenticationChoice, InitOptions } from "./scaffold.types.ts";
3
+ export declare function authenticationChoice(options: InitOptions): AuthenticationChoice;
2
4
  export declare function authenticationEnvironment(options: InitOptions): string;
3
5
  export declare function authenticationInstructions(options: InitOptions): string;
6
+ export declare function authenticationSetting(options: InitOptions): AgentAuthentication;
4
7
  export declare function authenticationSource(options: InitOptions): string;
@@ -1,42 +1,37 @@
1
- import { authenticationRecipes } from "../adapters/agents/authentication.constants.js";
1
+ import { invariant } from "../domain/errors.js";
2
+ import { authenticationChoices } from "./main.constants.js";
3
+ export function authenticationChoice(options) {
4
+ const agent = options.agent ?? "codex";
5
+ const value = options.authentication ?? (options.baseUrl ? "usage" : "account");
6
+ const choices = Object.hasOwn(authenticationChoices, agent)
7
+ ? authenticationChoices[agent]
8
+ : [];
9
+ const choice = choices.find((candidate) => candidate.value === value);
10
+ invariant(choice, `Authentication for ${agent} must be ${choices.map((candidate) => candidate.value).join(", ") || "one of its supported forms"}`);
11
+ return choice;
12
+ }
2
13
  export function authenticationEnvironment(options) {
3
14
  if (options.baseUrl)
4
15
  return `${options.apiKeyEnvironment ?? "OPENAI_API_KEY"}=\n`;
5
- if (options.authentication === "login")
6
- return "";
7
- if (options.authentication === "oauth-token")
8
- return "CLAUDE_CODE_OAUTH_TOKEN=\n";
9
- return authenticationRecipes[options.agent ?? "codex"].environment;
16
+ const { variable } = authenticationChoice(options);
17
+ return variable ? `${variable}=\n` : "";
10
18
  }
11
19
  export function authenticationInstructions(options) {
12
- if (options.authentication === "login")
13
- return "Run codex login on the host. For isolated providers, use file credential storage; the generated script copies auth.json into the private sandbox home.";
14
- if (options.authentication === "oauth-token")
15
- return "Run claude setup-token on the host, then set CLAUDE_CODE_OAUTH_TOKEN in the workflow .env or parent environment. This uses your Claude subscription.";
16
- return ("Set " +
17
- authenticationEnvironment(options).trim().replace("=", "") +
18
- " in the workflow .env or parent environment. API usage is billed separately from subscriptions.");
20
+ if (options.baseUrl)
21
+ return `Set ${options.apiKeyEnvironment ?? "OPENAI_API_KEY"} in the workflow .env or parent environment for the custom Responses provider.`;
22
+ return authenticationChoice(options).instructions;
23
+ }
24
+ export function authenticationSetting(options) {
25
+ const { value, variable } = authenticationChoice(options);
26
+ if (value !== "account-token")
27
+ return value;
28
+ invariant(variable, "Account tokens require a declared variable");
29
+ return { account: { variable } };
19
30
  }
20
31
  export function authenticationSource(options) {
21
- const agent = options.agent ?? "codex";
22
- if (options.authentication === "login") {
23
- if (options.sandboxProvider === "local")
24
- return 'const authentication = { mode: "login" as const };';
25
- return `const seed = await readFile(resolve(process.env.CODEX_HOME || resolve(homedir(), ".codex"), "auth.json"), "utf8");
26
- try { JSON.parse(seed); } catch { throw new Error("Invalid Codex authentication file. Run codex login again with file credential storage."); }
27
- const authentication = { mode: "login" as const, credentials: seed };`;
28
- }
29
- const key = authenticationEnvironment(options).trim().replace("=", "");
30
- const conflict = agent === "claude"
31
- ? key === "ANTHROPIC_API_KEY"
32
- ? "CLAUDE_CODE_OAUTH_TOKEN"
33
- : "ANTHROPIC_API_KEY"
34
- : undefined;
35
- const check = `if (!variables[${JSON.stringify(key)}]) throw new Error(${JSON.stringify(`Missing ${key}. Configure the workflow .env or parent environment before starting a sandbox.`)});`;
36
- const guard = conflict
37
- ? `\nif (variables[${JSON.stringify(conflict)}]) throw new Error("Conflicting Claude authentication methods. Keep only the selected credential in the workflow environment.");`
38
- : "";
39
- const mode = options.authentication === "oauth-token" ? "oauth-token" : "api-key";
40
- return `${check}${guard}\nconst authentication = { mode: ${JSON.stringify(mode)} as const${mode === "api-key" ? `, environment: ${JSON.stringify(key)}` : ""} };`;
32
+ const setting = authenticationSetting(options);
33
+ if (typeof setting === "string")
34
+ return JSON.stringify(setting);
35
+ return `{ account: { variable: ${JSON.stringify(authenticationChoice(options).variable)} } }`;
41
36
  }
42
37
  //# sourceMappingURL=init-authentication.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"init-authentication.js","sourceRoot":"","sources":["../../src/cli/init-authentication.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gDAAgD,CAAC;AAEvF,MAAM,UAAU,yBAAyB,CAAC,OAAoB;IAC5D,IAAI,OAAO,CAAC,OAAO;QACjB,OAAO,GAAG,OAAO,CAAC,iBAAiB,IAAI,gBAAgB,KAAK,CAAC;IAC/D,IAAI,OAAO,CAAC,cAAc,KAAK,OAAO;QAAE,OAAO,EAAE,CAAC;IAClD,IAAI,OAAO,CAAC,cAAc,KAAK,aAAa;QAC1C,OAAO,4BAA4B,CAAC;IACtC,OAAO,qBAAqB,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,CAAC,WAAW,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAoB;IAC7D,IAAI,OAAO,CAAC,cAAc,KAAK,OAAO;QACpC,OAAO,wJAAwJ,CAAC;IAClK,IAAI,OAAO,CAAC,cAAc,KAAK,aAAa;QAC1C,OAAO,sJAAsJ,CAAC;IAChK,OAAO,CACL,MAAM;QACN,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;QAC1D,iGAAiG,CAClG,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC;IACvC,IAAI,OAAO,CAAC,cAAc,KAAK,OAAO,EAAE,CAAC;QACvC,IAAI,OAAO,CAAC,eAAe,KAAK,OAAO;YACrC,OAAO,oDAAoD,CAAC;QAC9D,OAAO;;sEAE2D,CAAC;IACrE,CAAC;IACD,MAAM,GAAG,GAAG,yBAAyB,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;IACvE,MAAM,QAAQ,GACZ,KAAK,KAAK,QAAQ;QAChB,CAAC,CAAC,GAAG,KAAK,mBAAmB;YAC3B,CAAC,CAAC,yBAAyB;YAC3B,CAAC,CAAC,mBAAmB;QACvB,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,KAAK,GAAG,kBAAkB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,IAAI,CAAC,SAAS,CAAC,WAAW,GAAG,gFAAgF,CAAC,IAAI,CAAC;IAC5L,MAAM,KAAK,GAAG,QAAQ;QACpB,CAAC,CAAC,mBAAmB,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,kIAAkI;QAC/K,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,IAAI,GACR,OAAO,CAAC,cAAc,KAAK,aAAa,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC;IACvE,OAAO,GAAG,KAAK,GAAG,KAAK,oCAAoC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,YAAY,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC;AACpK,CAAC","sourcesContent":["import type { InitOptions } from \"./scaffold.types.ts\";\nimport { authenticationRecipes } from \"../adapters/agents/authentication.constants.ts\";\n\nexport function authenticationEnvironment(options: InitOptions): string {\n if (options.baseUrl)\n return `${options.apiKeyEnvironment ?? \"OPENAI_API_KEY\"}=\\n`;\n if (options.authentication === \"login\") return \"\";\n if (options.authentication === \"oauth-token\")\n return \"CLAUDE_CODE_OAUTH_TOKEN=\\n\";\n return authenticationRecipes[options.agent ?? \"codex\"].environment;\n}\n\nexport function authenticationInstructions(options: InitOptions): string {\n if (options.authentication === \"login\")\n return \"Run codex login on the host. For isolated providers, use file credential storage; the generated script copies auth.json into the private sandbox home.\";\n if (options.authentication === \"oauth-token\")\n return \"Run claude setup-token on the host, then set CLAUDE_CODE_OAUTH_TOKEN in the workflow .env or parent environment. This uses your Claude subscription.\";\n return (\n \"Set \" +\n authenticationEnvironment(options).trim().replace(\"=\", \"\") +\n \" in the workflow .env or parent environment. API usage is billed separately from subscriptions.\"\n );\n}\n\nexport function authenticationSource(options: InitOptions): string {\n const agent = options.agent ?? \"codex\";\n if (options.authentication === \"login\") {\n if (options.sandboxProvider === \"local\")\n return 'const authentication = { mode: \"login\" as const };';\n return `const seed = await readFile(resolve(process.env.CODEX_HOME || resolve(homedir(), \".codex\"), \"auth.json\"), \"utf8\");\ntry { JSON.parse(seed); } catch { throw new Error(\"Invalid Codex authentication file. Run codex login again with file credential storage.\"); }\nconst authentication = { mode: \"login\" as const, credentials: seed };`;\n }\n const key = authenticationEnvironment(options).trim().replace(\"=\", \"\");\n const conflict =\n agent === \"claude\"\n ? key === \"ANTHROPIC_API_KEY\"\n ? \"CLAUDE_CODE_OAUTH_TOKEN\"\n : \"ANTHROPIC_API_KEY\"\n : undefined;\n const check = `if (!variables[${JSON.stringify(key)}]) throw new Error(${JSON.stringify(`Missing ${key}. Configure the workflow .env or parent environment before starting a sandbox.`)});`;\n const guard = conflict\n ? `\\nif (variables[${JSON.stringify(conflict)}]) throw new Error(\"Conflicting Claude authentication methods. Keep only the selected credential in the workflow environment.\");`\n : \"\";\n const mode =\n options.authentication === \"oauth-token\" ? \"oauth-token\" : \"api-key\";\n return `${check}${guard}\\nconst authentication = { mode: ${JSON.stringify(mode)} as const${mode === \"api-key\" ? `, environment: ${JSON.stringify(key)}` : \"\"} };`;\n}\n"]}
1
+ {"version":3,"file":"init-authentication.js","sourceRoot":"","sources":["../../src/cli/init-authentication.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAG5D,MAAM,UAAU,oBAAoB,CAClC,OAAoB;IAEpB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC;IACvC,MAAM,KAAK,GACT,OAAO,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,OAAO,GAAoC,MAAM,CAAC,MAAM,CAC5D,qBAAqB,EACrB,KAAK,CACN;QACC,CAAC,CAAC,qBAAqB,CAAC,KAAK,CAAC;QAC9B,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IACtE,SAAS,CACP,MAAM,EACN,sBAAsB,KAAK,YAAY,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,4BAA4B,EAAE,CAChI,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,OAAoB;IAC5D,IAAI,OAAO,CAAC,OAAO;QACjB,OAAO,GAAG,OAAO,CAAC,iBAAiB,IAAI,gBAAgB,KAAK,CAAC;IAC/D,MAAM,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,OAAoB;IAC7D,IAAI,OAAO,CAAC,OAAO;QACjB,OAAO,OAAO,OAAO,CAAC,iBAAiB,IAAI,gBAAgB,gFAAgF,CAAC;IAC9I,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC;AACpD,CAAC;AAED,MAAM,UAAU,qBAAqB,CACnC,OAAoB;IAEpB,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC1D,IAAI,KAAK,KAAK,eAAe;QAAE,OAAO,KAAK,CAAC;IAC5C,SAAS,CAAC,QAAQ,EAAE,4CAA4C,CAAC,CAAC;IAClE,OAAO,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAoB;IACvD,MAAM,OAAO,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,OAAO,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAChE,OAAO,0BAA0B,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AAChG,CAAC","sourcesContent":["import type { AgentAuthentication } from \"../domain/agent.types.ts\";\nimport { invariant } from \"../domain/errors.ts\";\nimport { authenticationChoices } from \"./main.constants.ts\";\nimport type { AuthenticationChoice, InitOptions } from \"./scaffold.types.ts\";\n\nexport function authenticationChoice(\n options: InitOptions,\n): AuthenticationChoice {\n const agent = options.agent ?? \"codex\";\n const value =\n options.authentication ?? (options.baseUrl ? \"usage\" : \"account\");\n const choices: readonly AuthenticationChoice[] = Object.hasOwn(\n authenticationChoices,\n agent,\n )\n ? authenticationChoices[agent]\n : [];\n const choice = choices.find((candidate) => candidate.value === value);\n invariant(\n choice,\n `Authentication for ${agent} must be ${choices.map((candidate) => candidate.value).join(\", \") || \"one of its supported forms\"}`,\n );\n return choice;\n}\n\nexport function authenticationEnvironment(options: InitOptions): string {\n if (options.baseUrl)\n return `${options.apiKeyEnvironment ?? \"OPENAI_API_KEY\"}=\\n`;\n const { variable } = authenticationChoice(options);\n return variable ? `${variable}=\\n` : \"\";\n}\n\nexport function authenticationInstructions(options: InitOptions): string {\n if (options.baseUrl)\n return `Set ${options.apiKeyEnvironment ?? \"OPENAI_API_KEY\"} in the workflow .env or parent environment for the custom Responses provider.`;\n return authenticationChoice(options).instructions;\n}\n\nexport function authenticationSetting(\n options: InitOptions,\n): AgentAuthentication {\n const { value, variable } = authenticationChoice(options);\n if (value !== \"account-token\") return value;\n invariant(variable, \"Account tokens require a declared variable\");\n return { account: { variable } };\n}\n\nexport function authenticationSource(options: InitOptions): string {\n const setting = authenticationSetting(options);\n if (typeof setting === \"string\") return JSON.stringify(setting);\n return `{ account: { variable: ${JSON.stringify(authenticationChoice(options).variable)} } }`;\n}\n"]}
@@ -36,7 +36,7 @@ export async function initializeCommand({ values, }) {
36
36
  }
37
37
  const settings = await projectSettings(resolve(values.directory ?? process.cwd()), options);
38
38
  const choices = Object.entries(authenticationChoices).find(([name]) => name === options.agent)?.[1];
39
- invariant(choices, "Choose codex, claude or gemini");
39
+ invariant(choices, "Choose codex, claude, antigravity, copilot or kimi");
40
40
  const questions = [
41
41
  {
42
42
  key: "manager",
@@ -47,8 +47,8 @@ export async function initializeCommand({ values, }) {
47
47
  {
48
48
  key: "authentication",
49
49
  message: "Agent authentication",
50
- options: [...choices],
51
- initialValue: "api-key",
50
+ options: choices.map(({ value, label }) => ({ value, label })),
51
+ initialValue: options.baseUrl === undefined ? "account" : "usage",
52
52
  },
53
53
  ];
54
54
  for (const question of questions) {
@@ -1 +1 @@
1
- {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,MAAM,EACN,KAAK,EACL,QAAQ,EACR,KAAK,EACL,MAAM,EACN,OAAO,GACR,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EACL,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EACtC,MAAM,GACQ;IACd,MAAM,OAAO,GAA4B,MAAM,CAAC,WAAW,CACzD,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CACzE,CAAC;IACF,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,SAAS;QAAE,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,aAAa,CAAC,KAAK,SAAS;QACrC,OAAO,CAAC,iBAAiB,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;IACpD,OAAO,OAAO,CAAC,UAAU,CAAC,CAAC;IAC3B,OAAO,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9B,IACE,CAAC,MAAM,CAAC,GAAG;QACX,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK;QACpB,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;QAE1C,MAAM,IAAI,KAAK,CACb,yFAAyF,CAC1F,CAAC;IACJ,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACvC,KAAK,CAAC,4BAA4B,CAAC,CAAC;QACpC,KAAK,MAAM,QAAQ,IAAI,uBAAuB,EAAE,CAAC;YAC/C,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,SAAS;YAClD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC;gBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;aACpE,CAAC,CAAC;YACH,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,2BAA2B,CAAC,CAAC;gBACpC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAChC,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,eAAe,CACpC,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,EAC1C,OAAsB,CACvB,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,IAAI,CACxD,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,KAAK,OAAO,CAAC,KAAK,CACnC,EAAE,CAAC,CAAC,CAAC,CAAC;QACP,SAAS,CAAC,OAAO,EAAE,gCAAgC,CAAC,CAAC;QACrD,MAAM,SAAS,GAAG;YAChB;gBACE,GAAG,EAAE,SAAS;gBACd,OAAO,EAAE,iBAAiB;gBAC1B,OAAO,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACpE,YAAY,EAAE,QAAQ,CAAC,OAAO;aAC/B;YACD;gBACE,GAAG,EAAE,gBAAgB;gBACrB,OAAO,EAAE,sBAAsB;gBAC/B,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;gBACrB,YAAY,EAAE,SAAS;aACxB;SACF,CAAC;QACF,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YACjC,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,SAAS;gBAAE,SAAS;YAClD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;YACrC,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,MAAM,CAAC,2BAA2B,CAAC,CAAC;gBACpC,OAAO,CAAC,QAAQ,GAAG,GAAG,CAAC;gBACvB,OAAO;YACT,CAAC;YACD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAChC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,KAAK,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAC7C,MAAM,CAAC,OAAO,CAAC,eAAe,IAAI,QAAQ,CAAC,CAC5C,CAAC;IACF,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAC5E,QAAQ,EAAE,KAAK,CACb,OAAO,CAAC,KAAK;QACX,CAAC,CAAC,mDAAmD;QACrD,CAAC,CAAC,kBAAkB,CACvB,CAAC;IACF,IAAI,MAAM,CAAC;IACX,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,UAAU,CAAC,OAAsB,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,QAAQ,EAAE,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACxC,MAAM,KAAK,CAAC;IACd,CAAC;IACD,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO;QAClC,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,mFAAmF,CAAC;IACxF,MAAM,OAAO,GAAG,eAAe,MAAM,CAAC,KAAK,CAAC,MAAM,aAAa,OAAO,CAAC,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,MAAM,0BAA0B,CAAC,OAAsB,CAAC,KAAK,YAAY,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC;IACvM,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK;QAAE,KAAK,CAAC,OAAO,CAAC,CAAC;;QAClD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;AAC5C,CAAC","sourcesContent":["import { invariant } from \"../domain/errors.ts\";\nimport { resolve } from \"node:path\";\nimport {\n cancel,\n intro,\n isCancel,\n outro,\n select,\n spinner,\n} from \"@clack/prompts\";\nimport { projectSettings } from \"./project-settings.ts\";\nimport { authenticationInstructions } from \"./init-authentication.ts\";\nimport { supportedManagers } from \"./scaffold.constants.ts\";\nimport {\n initializationQuestions,\n authenticationChoices,\n} from \"./main.constants.ts\";\nimport type { CliInvocation } from \"./main.types.ts\";\nimport { initialize } from \"./scaffold.ts\";\nimport type { InitOptions } from \"./scaffold.types.ts\";\n\nexport async function initializeCommand({\n values,\n}: CliInvocation): Promise<void> {\n const options: Record<string, unknown> = Object.fromEntries(\n Object.entries(values).filter(([key]) => ![\"help\", \"yes\"].includes(key)),\n );\n if (values[\"base-url\"] !== undefined) options.baseUrl = values[\"base-url\"];\n if (values[\"api-key-env\"] !== undefined)\n options.apiKeyEnvironment = values[\"api-key-env\"];\n delete options[\"base-url\"];\n delete options[\"api-key-env\"];\n if (\n !values.yes &&\n !process.stdin.isTTY &&\n (!values.agent || !values.sandboxProvider)\n )\n throw new Error(\n \"Headless initialization requires --yes for defaults, or --agent and --sandbox-provider.\",\n );\n if (!values.yes && process.stdin.isTTY) {\n intro(\"Create an Outpost workflow\");\n for (const question of initializationQuestions) {\n if (options[question.key] !== undefined) continue;\n const value = await select({\n message: question.message,\n options: question.choices.map((value) => ({ value, label: value })),\n });\n if (isCancel(value)) {\n cancel(\"Initialization cancelled.\");\n process.exitCode = 130;\n return;\n }\n options[question.key] = value;\n }\n const settings = await projectSettings(\n resolve(values.directory ?? process.cwd()),\n options as InitOptions,\n );\n const choices = Object.entries(authenticationChoices).find(\n ([name]) => name === options.agent,\n )?.[1];\n invariant(choices, \"Choose codex, claude or gemini\");\n const questions = [\n {\n key: \"manager\",\n message: \"Package manager\",\n options: supportedManagers.map((value) => ({ value, label: value })),\n initialValue: settings.manager,\n },\n {\n key: \"authentication\",\n message: \"Agent authentication\",\n options: [...choices],\n initialValue: \"api-key\",\n },\n ];\n for (const question of questions) {\n if (options[question.key] !== undefined) continue;\n const value = await select(question);\n if (isCancel(value)) {\n cancel(\"Initialization cancelled.\");\n process.exitCode = 130;\n return;\n }\n options[question.key] = value;\n }\n }\n options.build ??= [\"docker\", \"podman\"].includes(\n String(options.sandboxProvider ?? \"docker\"),\n );\n const progress = !values.yes && process.stdin.isTTY ? spinner() : undefined;\n progress?.start(\n options.build\n ? \"Creating project and building its container image\"\n : \"Creating project\",\n );\n let result;\n try {\n result = await initialize(options as InitOptions);\n } catch (error) {\n progress?.stop(\"Initialization failed\");\n throw error;\n }\n progress?.stop(\"Project ready\");\n const installation = options.install\n ? \"\"\n : \"Install project dependencies with your selected package manager before running.\\n\";\n const message = `Initialized ${result.files.length} files in ${resolve(values.directory ?? process.cwd())}.\\n${authenticationInstructions(options as InitOptions)}\\n${installation}Run: ${result.run}`;\n if (!values.yes && process.stdin.isTTY) outro(message);\n else process.stdout.write(`${message}\\n`);\n}\n"]}
1
+ {"version":3,"file":"init-command.js","sourceRoot":"","sources":["../../src/cli/init-command.ts"],"names":[],"mappings":"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","sourcesContent":["import { invariant } from \"../domain/errors.ts\";\nimport { resolve } from \"node:path\";\nimport {\n cancel,\n intro,\n isCancel,\n outro,\n select,\n spinner,\n} from \"@clack/prompts\";\nimport { projectSettings } from \"./project-settings.ts\";\nimport { authenticationInstructions } from \"./init-authentication.ts\";\nimport { supportedManagers } from \"./scaffold.constants.ts\";\nimport {\n initializationQuestions,\n authenticationChoices,\n} from \"./main.constants.ts\";\nimport type { CliInvocation } from \"./main.types.ts\";\nimport { initialize } from \"./scaffold.ts\";\nimport type { InitOptions } from \"./scaffold.types.ts\";\n\nexport async function initializeCommand({\n values,\n}: CliInvocation): Promise<void> {\n const options: Record<string, unknown> = Object.fromEntries(\n Object.entries(values).filter(([key]) => ![\"help\", \"yes\"].includes(key)),\n );\n if (values[\"base-url\"] !== undefined) options.baseUrl = values[\"base-url\"];\n if (values[\"api-key-env\"] !== undefined)\n options.apiKeyEnvironment = values[\"api-key-env\"];\n delete options[\"base-url\"];\n delete options[\"api-key-env\"];\n if (\n !values.yes &&\n !process.stdin.isTTY &&\n (!values.agent || !values.sandboxProvider)\n )\n throw new Error(\n \"Headless initialization requires --yes for defaults, or --agent and --sandbox-provider.\",\n );\n if (!values.yes && process.stdin.isTTY) {\n intro(\"Create an Outpost workflow\");\n for (const question of initializationQuestions) {\n if (options[question.key] !== undefined) continue;\n const value = await select({\n message: question.message,\n options: question.choices.map((value) => ({ value, label: value })),\n });\n if (isCancel(value)) {\n cancel(\"Initialization cancelled.\");\n process.exitCode = 130;\n return;\n }\n options[question.key] = value;\n }\n const settings = await projectSettings(\n resolve(values.directory ?? process.cwd()),\n options as InitOptions,\n );\n const choices = Object.entries(authenticationChoices).find(\n ([name]) => name === options.agent,\n )?.[1];\n invariant(choices, \"Choose codex, claude, antigravity, copilot or kimi\");\n const questions = [\n {\n key: \"manager\",\n message: \"Package manager\",\n options: supportedManagers.map((value) => ({ value, label: value })),\n initialValue: settings.manager,\n },\n {\n key: \"authentication\",\n message: \"Agent authentication\",\n options: choices.map(({ value, label }) => ({ value, label })),\n initialValue: options.baseUrl === undefined ? \"account\" : \"usage\",\n },\n ];\n for (const question of questions) {\n if (options[question.key] !== undefined) continue;\n const value = await select(question);\n if (isCancel(value)) {\n cancel(\"Initialization cancelled.\");\n process.exitCode = 130;\n return;\n }\n options[question.key] = value;\n }\n }\n options.build ??= [\"docker\", \"podman\"].includes(\n String(options.sandboxProvider ?? \"docker\"),\n );\n const progress = !values.yes && process.stdin.isTTY ? spinner() : undefined;\n progress?.start(\n options.build\n ? \"Creating project and building its container image\"\n : \"Creating project\",\n );\n let result;\n try {\n result = await initialize(options as InitOptions);\n } catch (error) {\n progress?.stop(\"Initialization failed\");\n throw error;\n }\n progress?.stop(\"Project ready\");\n const installation = options.install\n ? \"\"\n : \"Install project dependencies with your selected package manager before running.\\n\";\n const message = `Initialized ${result.files.length} files in ${resolve(values.directory ?? process.cwd())}.\\n${authenticationInstructions(options as InitOptions)}\\n${installation}Run: ${result.run}`;\n if (!values.yes && process.stdin.isTTY) outro(message);\n else process.stdout.write(`${message}\\n`);\n}\n"]}
@@ -9,7 +9,7 @@ export declare const cliOptions: {
9
9
  };
10
10
  readonly authentication: {
11
11
  readonly type: "string";
12
- readonly description: "Authentication: api-key, oauth-token (Claude), login (Codex)";
12
+ readonly description: "Authentication: account, account-token (Claude, Copilot) or usage";
13
13
  };
14
14
  readonly help: {
15
15
  readonly type: "boolean";
@@ -71,7 +71,7 @@ export declare const cliOptions: {
71
71
  };
72
72
  readonly agent: {
73
73
  readonly type: "string";
74
- readonly description: "Agent: codex, claude or gemini";
74
+ readonly description: "Agent: codex, claude, antigravity, copilot or kimi";
75
75
  };
76
76
  readonly sandboxProvider: {
77
77
  readonly type: "string";
@@ -159,7 +159,7 @@ export declare const commandOptions: {
159
159
  export declare const initializationQuestions: readonly [{
160
160
  readonly key: "agent";
161
161
  readonly message: "Coding agent";
162
- readonly choices: readonly ["codex", "claude", "gemini"];
162
+ readonly choices: readonly ["codex", "claude", "antigravity", "copilot", "kimi"];
163
163
  }, {
164
164
  readonly key: "sandboxProvider";
165
165
  readonly message: "Sandbox provider";
@@ -167,21 +167,58 @@ export declare const initializationQuestions: readonly [{
167
167
  }];
168
168
  export declare const authenticationChoices: {
169
169
  readonly codex: readonly [{
170
- readonly value: "api-key";
171
- readonly label: "OpenAI API key (API billing)";
170
+ readonly value: "account";
171
+ readonly label: "ChatGPT account (codex login, file storage)";
172
+ readonly instructions: "Run codex login on the host with cli_auth_credentials_store = \"file\". Isolated sandboxes receive a private copy of auth.json; the local provider uses the host login. This uses your ChatGPT plan.";
172
173
  }, {
173
- readonly value: "login";
174
- readonly label: "Existing Codex account login";
174
+ readonly value: "usage";
175
+ readonly label: "OpenAI API key (API billing)";
176
+ readonly variable: "OPENAI_API_KEY";
177
+ readonly instructions: "Set OPENAI_API_KEY in the workflow .env or parent environment. API usage is billed separately from subscriptions.";
175
178
  }];
176
179
  readonly claude: readonly [{
177
- readonly value: "api-key";
178
- readonly label: "Anthropic API key (API billing)";
180
+ readonly value: "account";
181
+ readonly label: "Claude subscription login (claude /login)";
182
+ readonly instructions: "Run claude and /login on the host. Isolated sandboxes receive only the subscription entry of .credentials.json. Logins stored in the macOS keychain are never read: choose account-token there.";
179
183
  }, {
180
- readonly value: "oauth-token";
184
+ readonly value: "account-token";
181
185
  readonly label: "Claude subscription token (claude setup-token)";
186
+ readonly variable: "CLAUDE_CODE_OAUTH_TOKEN";
187
+ readonly instructions: "Run claude setup-token on the host, then set CLAUDE_CODE_OAUTH_TOKEN in the workflow .env or parent environment. This uses your Claude subscription.";
188
+ }, {
189
+ readonly value: "usage";
190
+ readonly label: "Anthropic API key (API billing)";
191
+ readonly variable: "ANTHROPIC_API_KEY";
192
+ readonly instructions: "Set ANTHROPIC_API_KEY in the workflow .env or parent environment. API usage is billed separately from subscriptions.";
182
193
  }];
183
- readonly gemini: readonly [{
184
- readonly value: "api-key";
185
- readonly label: "Gemini API key";
194
+ readonly antigravity: readonly [{
195
+ readonly value: "account";
196
+ readonly label: "Google account login (agy)";
197
+ readonly instructions: "Run agy on the host and sign in with your Google account. Isolated sandboxes receive a private copy of the Antigravity OAuth token.";
198
+ }, {
199
+ readonly value: "usage";
200
+ readonly label: "Gemini API key (API billing)";
201
+ readonly variable: "GEMINI_API_KEY";
202
+ readonly instructions: "Set GEMINI_API_KEY in the workflow .env or parent environment. Gemini API usage is billed separately from Google AI plans.";
203
+ }];
204
+ readonly copilot: readonly [{
205
+ readonly value: "account";
206
+ readonly label: "GitHub Copilot login (copilot login)";
207
+ readonly instructions: "Run copilot login on the host. Outpost passes the token stored in ~/.copilot/config.json as COPILOT_GITHUB_TOKEN; tokens kept in the system keychain are never read: choose account-token there.";
208
+ }, {
209
+ readonly value: "account-token";
210
+ readonly label: "GitHub token with Copilot access (COPILOT_GITHUB_TOKEN)";
211
+ readonly variable: "COPILOT_GITHUB_TOKEN";
212
+ readonly instructions: "Set COPILOT_GITHUB_TOKEN to a fine-grained token with the Copilot Requests permission in the workflow .env or parent environment. Classic ghp_ tokens are rejected. Requests count against your Copilot plan.";
213
+ }];
214
+ readonly kimi: readonly [{
215
+ readonly value: "account";
216
+ readonly label: "Kimi Code account login";
217
+ readonly instructions: "Sign in with the kimi CLI on the host. Isolated sandboxes receive a private copy of the ~/.kimi-code credentials and device identifier.";
218
+ }, {
219
+ readonly value: "usage";
220
+ readonly label: "Kimi API key (API billing, requires --model)";
221
+ readonly variable: "KIMI_API_KEY";
222
+ readonly instructions: "Set KIMI_API_KEY in the workflow .env or parent environment. API usage is billed separately from Kimi Code plans.";
186
223
  }];
187
224
  };