@elie-laloum/outpost 1.1.0 → 1.1.2

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 (520) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/README.fr.md +1 -1
  3. package/README.md +1 -1
  4. package/dist/adapters/agents/claude-adapter.d.ts +3 -0
  5. package/dist/adapters/agents/claude-adapter.js +15 -0
  6. package/dist/adapters/agents/claude-adapter.js.map +1 -0
  7. package/dist/adapters/agents/claude-events.d.ts +3 -0
  8. package/dist/adapters/agents/claude-events.js +63 -0
  9. package/dist/adapters/agents/claude-events.js.map +1 -0
  10. package/dist/adapters/agents/claude-request.d.ts +4 -0
  11. package/dist/adapters/agents/claude-request.js +30 -0
  12. package/dist/adapters/agents/claude-request.js.map +1 -0
  13. package/dist/adapters/agents/codex-adapter.d.ts +3 -0
  14. package/dist/adapters/agents/codex-adapter.js +14 -0
  15. package/dist/adapters/agents/codex-adapter.js.map +1 -0
  16. package/dist/adapters/agents/codex-events.d.ts +2 -0
  17. package/dist/adapters/agents/codex-events.js +58 -0
  18. package/dist/adapters/agents/codex-events.js.map +1 -0
  19. package/dist/adapters/agents/codex-request.d.ts +4 -0
  20. package/dist/adapters/agents/codex-request.js +29 -0
  21. package/dist/adapters/agents/codex-request.js.map +1 -0
  22. package/dist/adapters/agents/continuation.d.ts +2 -0
  23. package/dist/adapters/agents/continuation.js +6 -0
  24. package/dist/adapters/agents/continuation.js.map +1 -0
  25. package/dist/adapters/agents/event-decoder.d.ts +4 -0
  26. package/dist/adapters/agents/event-decoder.js +15 -0
  27. package/dist/adapters/agents/event-decoder.js.map +1 -0
  28. package/dist/adapters/agents/protocol.d.ts +3 -0
  29. package/dist/adapters/agents/protocol.js +17 -0
  30. package/dist/adapters/agents/protocol.js.map +1 -0
  31. package/dist/adapters/agents/protocol.types.d.ts +4 -0
  32. package/dist/adapters/agents/protocol.types.js +2 -0
  33. package/dist/adapters/agents/protocol.types.js.map +1 -0
  34. package/dist/adapters/agents/settings.types.d.ts +14 -0
  35. package/dist/adapters/agents/settings.types.js +2 -0
  36. package/dist/adapters/agents/settings.types.js.map +1 -0
  37. package/dist/adapters/backlogs/backlog.constants.d.ts +4 -0
  38. package/dist/adapters/backlogs/backlog.constants.js +5 -0
  39. package/dist/adapters/backlogs/backlog.constants.js.map +1 -0
  40. package/dist/adapters/backlogs/beads-adapter.d.ts +4 -0
  41. package/dist/adapters/backlogs/beads-adapter.js +31 -0
  42. package/dist/adapters/backlogs/beads-adapter.js.map +1 -0
  43. package/dist/adapters/backlogs/cli.d.ts +3 -0
  44. package/dist/adapters/backlogs/cli.js +20 -0
  45. package/dist/adapters/backlogs/cli.js.map +1 -0
  46. package/dist/adapters/backlogs/github-adapter.d.ts +4 -0
  47. package/dist/adapters/backlogs/github-adapter.js +28 -0
  48. package/dist/adapters/backlogs/github-adapter.js.map +1 -0
  49. package/dist/adapters/backlogs/issue.d.ts +2 -0
  50. package/dist/adapters/backlogs/issue.js +13 -0
  51. package/dist/adapters/backlogs/issue.js.map +1 -0
  52. package/dist/adapters/backlogs/settings.types.d.ts +5 -0
  53. package/dist/adapters/backlogs/settings.types.js +2 -0
  54. package/dist/adapters/backlogs/settings.types.js.map +1 -0
  55. package/dist/application/activity-watchdog.d.ts +2 -0
  56. package/dist/application/activity-watchdog.js +38 -0
  57. package/dist/application/activity-watchdog.js.map +1 -0
  58. package/dist/application/agent-bootstrap.constants.d.ts +4 -0
  59. package/dist/application/agent-bootstrap.constants.js +6 -0
  60. package/dist/application/agent-bootstrap.constants.js.map +1 -0
  61. package/dist/application/agent-bootstrap.d.ts +3 -0
  62. package/dist/application/agent-bootstrap.js +28 -0
  63. package/dist/application/agent-bootstrap.js.map +1 -0
  64. package/dist/application/agent-output.d.ts +3 -0
  65. package/dist/application/agent-output.js +72 -0
  66. package/dist/application/agent-output.js.map +1 -0
  67. package/dist/application/agent-storage.d.ts +2 -0
  68. package/dist/application/agent-storage.js +4 -0
  69. package/dist/application/agent-storage.js.map +1 -0
  70. package/dist/application/agent-turn.d.ts +4 -0
  71. package/dist/application/agent-turn.js +58 -0
  72. package/dist/application/agent-turn.js.map +1 -0
  73. package/dist/application/attach.d.ts +3 -0
  74. package/dist/application/attach.js +42 -0
  75. package/dist/application/attach.js.map +1 -0
  76. package/dist/application/brief-renderer.d.ts +5 -0
  77. package/dist/application/brief-renderer.js +55 -0
  78. package/dist/application/brief-renderer.js.map +1 -0
  79. package/dist/application/campaign-integration.d.ts +2 -0
  80. package/dist/application/campaign-integration.js +44 -0
  81. package/dist/application/campaign-integration.js.map +1 -0
  82. package/dist/application/campaign-planner.d.ts +3 -0
  83. package/dist/application/campaign-planner.js +35 -0
  84. package/dist/application/campaign-planner.js.map +1 -0
  85. package/dist/application/campaign-worker.d.ts +3 -0
  86. package/dist/application/campaign-worker.js +54 -0
  87. package/dist/application/campaign-worker.js.map +1 -0
  88. package/dist/application/campaign.constants.d.ts +7 -0
  89. package/dist/application/campaign.constants.js +8 -0
  90. package/dist/application/campaign.constants.js.map +1 -0
  91. package/dist/application/campaign.d.ts +2 -32
  92. package/dist/application/campaign.js +23 -122
  93. package/dist/application/campaign.js.map +1 -1
  94. package/dist/application/campaign.types.d.ts +43 -0
  95. package/dist/application/campaign.types.js +2 -0
  96. package/dist/application/campaign.types.js.map +1 -0
  97. package/dist/application/continuation.d.ts +3 -0
  98. package/dist/application/continuation.js +16 -0
  99. package/dist/application/continuation.js.map +1 -0
  100. package/dist/application/dispatch-validation.d.ts +4 -0
  101. package/dist/application/dispatch-validation.js +34 -0
  102. package/dist/application/dispatch-validation.js.map +1 -0
  103. package/dist/application/dispatch.d.ts +4 -0
  104. package/dist/application/dispatch.js +85 -0
  105. package/dist/application/dispatch.js.map +1 -0
  106. package/dist/application/execution.constants.d.ts +13 -0
  107. package/dist/application/execution.constants.js +20 -0
  108. package/dist/application/execution.constants.js.map +1 -0
  109. package/dist/application/execution.d.ts +8 -47
  110. package/dist/application/execution.js +18 -228
  111. package/dist/application/execution.js.map +1 -1
  112. package/dist/application/execution.types.d.ts +54 -0
  113. package/dist/application/execution.types.js +2 -0
  114. package/dist/application/execution.types.js.map +1 -0
  115. package/dist/application/interactive-brief.d.ts +3 -2
  116. package/dist/application/interactive-brief.js.map +1 -1
  117. package/dist/application/interactive-brief.types.d.ts +1 -0
  118. package/dist/application/interactive-brief.types.js +2 -0
  119. package/dist/application/interactive-brief.types.js.map +1 -0
  120. package/dist/application/lifecycle-hooks.d.ts +3 -0
  121. package/dist/application/lifecycle-hooks.js +26 -0
  122. package/dist/application/lifecycle-hooks.js.map +1 -0
  123. package/dist/application/lifecycle.constants.d.ts +2 -0
  124. package/dist/application/lifecycle.constants.js +14 -0
  125. package/dist/application/lifecycle.constants.js.map +1 -0
  126. package/dist/application/observation.d.ts +1 -0
  127. package/dist/application/observation.js +7 -0
  128. package/dist/application/observation.js.map +1 -0
  129. package/dist/application/operation-gate.d.ts +2 -0
  130. package/dist/application/operation-gate.js +23 -0
  131. package/dist/application/operation-gate.js.map +1 -0
  132. package/dist/application/outpost.d.ts +5 -91
  133. package/dist/application/outpost.js +4 -628
  134. package/dist/application/outpost.js.map +1 -1
  135. package/dist/application/outpost.types.d.ts +86 -0
  136. package/dist/application/outpost.types.js +2 -0
  137. package/dist/application/outpost.types.js.map +1 -0
  138. package/dist/application/remote-apply.d.ts +2 -0
  139. package/dist/application/remote-apply.js +46 -0
  140. package/dist/application/remote-apply.js.map +1 -0
  141. package/dist/application/remote-backup.d.ts +2 -0
  142. package/dist/application/remote-backup.js +38 -0
  143. package/dist/application/remote-backup.js.map +1 -0
  144. package/dist/application/remote-download.d.ts +2 -0
  145. package/dist/application/remote-download.js +24 -0
  146. package/dist/application/remote-download.js.map +1 -0
  147. package/dist/application/remote-validation.d.ts +2 -0
  148. package/dist/application/remote-validation.js +62 -0
  149. package/dist/application/remote-validation.js.map +1 -0
  150. package/dist/application/remote-workspace.d.ts +4 -10
  151. package/dist/application/remote-workspace.js +28 -167
  152. package/dist/application/remote-workspace.js.map +1 -1
  153. package/dist/application/remote-workspace.types.d.ts +32 -0
  154. package/dist/application/remote-workspace.types.js +2 -0
  155. package/dist/application/remote-workspace.types.js.map +1 -0
  156. package/dist/application/sandbox-agents.d.ts +2 -0
  157. package/dist/application/sandbox-agents.js +54 -0
  158. package/dist/application/sandbox-agents.js.map +1 -0
  159. package/dist/application/sandbox-attach.d.ts +3 -0
  160. package/dist/application/sandbox-attach.js +48 -0
  161. package/dist/application/sandbox-attach.js.map +1 -0
  162. package/dist/application/sandbox-dispatch.d.ts +4 -0
  163. package/dist/application/sandbox-dispatch.js +124 -0
  164. package/dist/application/sandbox-dispatch.js.map +1 -0
  165. package/dist/application/sandbox-provision.d.ts +3 -0
  166. package/dist/application/sandbox-provision.js +108 -0
  167. package/dist/application/sandbox-provision.js.map +1 -0
  168. package/dist/application/sandbox-session.types.d.ts +38 -0
  169. package/dist/application/sandbox-session.types.js +2 -0
  170. package/dist/application/sandbox-session.types.js.map +1 -0
  171. package/dist/application/sandbox.d.ts +2 -0
  172. package/dist/application/sandbox.js +83 -0
  173. package/dist/application/sandbox.js.map +1 -0
  174. package/dist/application/startup-recovery.d.ts +3 -0
  175. package/dist/application/startup-recovery.js +25 -0
  176. package/dist/application/startup-recovery.js.map +1 -0
  177. package/dist/application/startup-recovery.types.d.ts +5 -0
  178. package/dist/application/startup-recovery.types.js +2 -0
  179. package/dist/application/startup-recovery.types.js.map +1 -0
  180. package/dist/application/tasks.d.ts +7 -17
  181. package/dist/application/tasks.js +1 -1
  182. package/dist/application/tasks.js.map +1 -1
  183. package/dist/application/tasks.types.d.ts +18 -0
  184. package/dist/application/tasks.types.js +2 -0
  185. package/dist/application/tasks.types.js.map +1 -0
  186. package/dist/application/workspace-fingerprint.d.ts +2 -0
  187. package/dist/application/workspace-fingerprint.js +25 -0
  188. package/dist/application/workspace-fingerprint.js.map +1 -0
  189. package/dist/application/workspace-registry.d.ts +3 -0
  190. package/dist/application/workspace-registry.js +2 -0
  191. package/dist/application/workspace-registry.js.map +1 -0
  192. package/dist/application/workspace.d.ts +2 -0
  193. package/dist/application/workspace.js +50 -0
  194. package/dist/application/workspace.js.map +1 -0
  195. package/dist/cli/commands.d.ts +1 -0
  196. package/dist/cli/commands.js +24 -0
  197. package/dist/cli/commands.js.map +1 -0
  198. package/dist/cli/image-command.d.ts +2 -0
  199. package/dist/cli/image-command.js +13 -0
  200. package/dist/cli/image-command.js.map +1 -0
  201. package/dist/cli/image.constants.d.ts +9 -0
  202. package/dist/cli/image.constants.js +10 -0
  203. package/dist/cli/image.constants.js.map +1 -0
  204. package/dist/cli/image.d.ts +3 -0
  205. package/dist/cli/image.js +39 -0
  206. package/dist/cli/image.js.map +1 -0
  207. package/dist/cli/image.types.d.ts +8 -0
  208. package/dist/cli/image.types.js +2 -0
  209. package/dist/cli/image.types.js.map +1 -0
  210. package/dist/cli/init-command.d.ts +2 -0
  211. package/dist/cli/init-command.js +29 -0
  212. package/dist/cli/init-command.js.map +1 -0
  213. package/dist/cli/main.constants.d.ts +57 -0
  214. package/dist/cli/main.constants.js +35 -0
  215. package/dist/cli/main.constants.js.map +1 -0
  216. package/dist/cli/main.js +2 -86
  217. package/dist/cli/main.js.map +1 -1
  218. package/dist/cli/main.types.d.ts +9 -0
  219. package/dist/cli/main.types.js +2 -0
  220. package/dist/cli/main.types.js.map +1 -0
  221. package/dist/cli/project-settings.d.ts +2 -0
  222. package/dist/cli/project-settings.js +36 -0
  223. package/dist/cli/project-settings.js.map +1 -0
  224. package/dist/cli/scaffold-files.d.ts +2 -0
  225. package/dist/cli/scaffold-files.js +27 -0
  226. package/dist/cli/scaffold-files.js.map +1 -0
  227. package/dist/cli/scaffold-validation.d.ts +2 -0
  228. package/dist/cli/scaffold-validation.js +11 -0
  229. package/dist/cli/scaffold-validation.js.map +1 -0
  230. package/dist/cli/scaffold.constants.d.ts +14 -0
  231. package/dist/cli/scaffold.constants.js +51 -0
  232. package/dist/cli/scaffold.constants.js.map +1 -0
  233. package/dist/cli/scaffold.d.ts +6 -28
  234. package/dist/cli/scaffold.js +14 -116
  235. package/dist/cli/scaffold.js.map +1 -1
  236. package/dist/cli/scaffold.types.d.ts +26 -0
  237. package/dist/cli/scaffold.types.js +2 -0
  238. package/dist/cli/scaffold.types.js.map +1 -0
  239. package/dist/cli/starters.d.ts +1 -1
  240. package/dist/cli/starters.js.map +1 -1
  241. package/dist/domain/agent-events.d.ts +2 -0
  242. package/dist/domain/agent-events.js +5 -0
  243. package/dist/domain/agent-events.js.map +1 -0
  244. package/dist/domain/agent.types.d.ts +81 -0
  245. package/dist/domain/agent.types.js +2 -0
  246. package/dist/domain/agent.types.js.map +1 -0
  247. package/dist/domain/backlog.d.ts +2 -15
  248. package/dist/domain/backlog.js.map +1 -1
  249. package/dist/domain/backlog.types.d.ts +15 -0
  250. package/dist/domain/backlog.types.js +2 -0
  251. package/dist/domain/backlog.types.js.map +1 -0
  252. package/dist/domain/command.types.d.ts +26 -0
  253. package/dist/domain/command.types.js +2 -0
  254. package/dist/domain/command.types.js.map +1 -0
  255. package/dist/domain/conversation.types.d.ts +20 -0
  256. package/dist/domain/conversation.types.js +2 -0
  257. package/dist/domain/conversation.types.js.map +1 -0
  258. package/dist/domain/errors.d.ts +2 -1
  259. package/dist/domain/errors.js.map +1 -1
  260. package/dist/domain/errors.types.d.ts +1 -0
  261. package/dist/domain/errors.types.js +2 -0
  262. package/dist/domain/errors.types.js.map +1 -0
  263. package/dist/domain/ports.d.ts +5 -183
  264. package/dist/domain/ports.js.map +1 -1
  265. package/dist/domain/prompts.d.ts +3 -21
  266. package/dist/domain/prompts.js.map +1 -1
  267. package/dist/domain/prompts.types.d.ts +22 -0
  268. package/dist/domain/prompts.types.js +2 -0
  269. package/dist/domain/prompts.types.js.map +1 -0
  270. package/dist/domain/response.d.ts +4 -29
  271. package/dist/domain/response.js.map +1 -1
  272. package/dist/domain/response.types.d.ts +29 -0
  273. package/dist/domain/response.types.js +2 -0
  274. package/dist/domain/response.types.js.map +1 -0
  275. package/dist/domain/sandbox.types.d.ts +31 -0
  276. package/dist/domain/sandbox.types.js +2 -0
  277. package/dist/domain/sandbox.types.js.map +1 -0
  278. package/dist/domain/usage.d.ts +2 -0
  279. package/dist/domain/usage.js +11 -0
  280. package/dist/domain/usage.js.map +1 -0
  281. package/dist/domain/workflow/failure.d.ts +5 -0
  282. package/dist/domain/workflow/failure.js +11 -0
  283. package/dist/domain/workflow/failure.js.map +1 -0
  284. package/dist/domain/workflow/task-runner.d.ts +2 -0
  285. package/dist/domain/workflow/task-runner.js +56 -0
  286. package/dist/domain/workflow/task-runner.js.map +1 -0
  287. package/dist/domain/workflow/task.d.ts +2 -0
  288. package/dist/domain/workflow/task.js +19 -0
  289. package/dist/domain/workflow/task.js.map +1 -0
  290. package/dist/domain/workflow/validation.d.ts +3 -0
  291. package/dist/domain/workflow/validation.js +30 -0
  292. package/dist/domain/workflow/validation.js.map +1 -0
  293. package/dist/domain/workflow/workflow-scheduler.d.ts +2 -0
  294. package/dist/domain/workflow/workflow-scheduler.js +71 -0
  295. package/dist/domain/workflow/workflow-scheduler.js.map +1 -0
  296. package/dist/domain/workflow/workflow-state.d.ts +2 -0
  297. package/dist/domain/workflow/workflow-state.js +69 -0
  298. package/dist/domain/workflow/workflow-state.js.map +1 -0
  299. package/dist/domain/workflow.d.ts +4 -67
  300. package/dist/domain/workflow.js +4 -224
  301. package/dist/domain/workflow.js.map +1 -1
  302. package/dist/domain/workflow.types.d.ts +77 -0
  303. package/dist/domain/workflow.types.js +2 -0
  304. package/dist/domain/workflow.types.js.map +1 -0
  305. package/dist/domain/workspace.types.d.ts +38 -0
  306. package/dist/domain/workspace.types.js +2 -0
  307. package/dist/domain/workspace.types.js.map +1 -0
  308. package/dist/index.d.ts +10 -10
  309. package/dist/index.js +5 -5
  310. package/dist/index.js.map +1 -1
  311. package/dist/infrastructure/conversations/capture.d.ts +4 -0
  312. package/dist/infrastructure/conversations/capture.js +77 -0
  313. package/dist/infrastructure/conversations/capture.js.map +1 -0
  314. package/dist/infrastructure/conversations/capture.types.d.ts +5 -0
  315. package/dist/infrastructure/conversations/capture.types.js +2 -0
  316. package/dist/infrastructure/conversations/capture.types.js.map +1 -0
  317. package/dist/infrastructure/conversations/claude-layout.d.ts +2 -0
  318. package/dist/infrastructure/conversations/claude-layout.js +18 -0
  319. package/dist/infrastructure/conversations/claude-layout.js.map +1 -0
  320. package/dist/infrastructure/conversations/codex-layout.d.ts +2 -0
  321. package/dist/infrastructure/conversations/codex-layout.js +17 -0
  322. package/dist/infrastructure/conversations/codex-layout.js.map +1 -0
  323. package/dist/infrastructure/conversations/conversation.constants.d.ts +1 -0
  324. package/dist/infrastructure/conversations/conversation.constants.js +2 -0
  325. package/dist/infrastructure/conversations/conversation.constants.js.map +1 -0
  326. package/dist/infrastructure/conversations/files.d.ts +1 -0
  327. package/dist/infrastructure/conversations/files.js +21 -0
  328. package/dist/infrastructure/conversations/files.js.map +1 -0
  329. package/dist/infrastructure/conversations/identity.d.ts +2 -0
  330. package/dist/infrastructure/conversations/identity.js +8 -0
  331. package/dist/infrastructure/conversations/identity.js.map +1 -0
  332. package/dist/infrastructure/conversations/layout.d.ts +3 -0
  333. package/dist/infrastructure/conversations/layout.js +7 -0
  334. package/dist/infrastructure/conversations/layout.js.map +1 -0
  335. package/dist/infrastructure/conversations/layout.types.d.ts +12 -0
  336. package/dist/infrastructure/conversations/layout.types.js +2 -0
  337. package/dist/infrastructure/conversations/layout.types.js.map +1 -0
  338. package/dist/infrastructure/conversations/locate.d.ts +2 -0
  339. package/dist/infrastructure/conversations/locate.js +18 -0
  340. package/dist/infrastructure/conversations/locate.js.map +1 -0
  341. package/dist/infrastructure/conversations/native-store.d.ts +3 -0
  342. package/dist/infrastructure/conversations/native-store.js +20 -0
  343. package/dist/infrastructure/conversations/native-store.js.map +1 -0
  344. package/dist/infrastructure/conversations/paths.d.ts +4 -0
  345. package/dist/infrastructure/conversations/paths.js +8 -0
  346. package/dist/infrastructure/conversations/paths.js.map +1 -0
  347. package/dist/infrastructure/conversations/relocate.d.ts +1 -0
  348. package/dist/infrastructure/conversations/relocate.js +44 -0
  349. package/dist/infrastructure/conversations/relocate.js.map +1 -0
  350. package/dist/infrastructure/conversations/restore.d.ts +3 -0
  351. package/dist/infrastructure/conversations/restore.js +35 -0
  352. package/dist/infrastructure/conversations/restore.js.map +1 -0
  353. package/dist/infrastructure/conversations.d.ts +14 -19
  354. package/dist/infrastructure/conversations.js +15 -205
  355. package/dist/infrastructure/conversations.js.map +1 -1
  356. package/dist/infrastructure/conversations.types.d.ts +6 -0
  357. package/dist/infrastructure/conversations.types.js +2 -0
  358. package/dist/infrastructure/conversations.types.js.map +1 -0
  359. package/dist/infrastructure/files.js +1 -1
  360. package/dist/infrastructure/files.js.map +1 -1
  361. package/dist/infrastructure/git/command.d.ts +1 -0
  362. package/dist/infrastructure/git/command.js +19 -0
  363. package/dist/infrastructure/git/command.js.map +1 -0
  364. package/dist/infrastructure/git/git.constants.d.ts +7 -0
  365. package/dist/infrastructure/git/git.constants.js +13 -0
  366. package/dist/infrastructure/git/git.constants.js.map +1 -0
  367. package/dist/infrastructure/git/history.d.ts +2 -0
  368. package/dist/infrastructure/git/history.js +13 -0
  369. package/dist/infrastructure/git/history.js.map +1 -0
  370. package/dist/infrastructure/git/lock.d.ts +1 -0
  371. package/dist/infrastructure/git/lock.js +36 -0
  372. package/dist/infrastructure/git/lock.js.map +1 -0
  373. package/dist/infrastructure/git/lock.types.d.ts +3 -0
  374. package/dist/infrastructure/git/lock.types.js +2 -0
  375. package/dist/infrastructure/git/lock.types.js.map +1 -0
  376. package/dist/infrastructure/git/managed-worktree.d.ts +2 -0
  377. package/dist/infrastructure/git/managed-worktree.js +79 -0
  378. package/dist/infrastructure/git/managed-worktree.js.map +1 -0
  379. package/dist/infrastructure/git/refresh-worktree.d.ts +1 -0
  380. package/dist/infrastructure/git/refresh-worktree.js +24 -0
  381. package/dist/infrastructure/git/refresh-worktree.js.map +1 -0
  382. package/dist/infrastructure/git/repository.d.ts +2 -0
  383. package/dist/infrastructure/git/repository.js +25 -0
  384. package/dist/infrastructure/git/repository.js.map +1 -0
  385. package/dist/infrastructure/git/workspace-lease.d.ts +3 -0
  386. package/dist/infrastructure/git/workspace-lease.js +66 -0
  387. package/dist/infrastructure/git/workspace-lease.js.map +1 -0
  388. package/dist/infrastructure/git/workspace.d.ts +2 -0
  389. package/dist/infrastructure/git/workspace.js +72 -0
  390. package/dist/infrastructure/git/workspace.js.map +1 -0
  391. package/dist/infrastructure/git/workspace.types.d.ts +24 -0
  392. package/dist/infrastructure/git/workspace.types.js +2 -0
  393. package/dist/infrastructure/git/workspace.types.js.map +1 -0
  394. package/dist/infrastructure/git.d.ts +4 -14
  395. package/dist/infrastructure/git.js +3 -303
  396. package/dist/infrastructure/git.js.map +1 -1
  397. package/dist/infrastructure/journal.d.ts +3 -10
  398. package/dist/infrastructure/journal.js +1 -1
  399. package/dist/infrastructure/journal.js.map +1 -1
  400. package/dist/infrastructure/journal.types.d.ts +10 -0
  401. package/dist/infrastructure/journal.types.js +2 -0
  402. package/dist/infrastructure/journal.types.js.map +1 -0
  403. package/dist/infrastructure/process.constants.d.ts +6 -0
  404. package/dist/infrastructure/process.constants.js +7 -0
  405. package/dist/infrastructure/process.constants.js.map +1 -0
  406. package/dist/infrastructure/process.d.ts +3 -2
  407. package/dist/infrastructure/process.js +5 -4
  408. package/dist/infrastructure/process.js.map +1 -1
  409. package/dist/infrastructure/process.types.d.ts +2 -0
  410. package/dist/infrastructure/process.types.js +2 -0
  411. package/dist/infrastructure/process.types.js.map +1 -0
  412. package/dist/infrastructure/reporter.d.ts +4 -10
  413. package/dist/infrastructure/reporter.js.map +1 -1
  414. package/dist/infrastructure/reporter.types.d.ts +9 -0
  415. package/dist/infrastructure/reporter.types.js +2 -0
  416. package/dist/infrastructure/reporter.types.js.map +1 -0
  417. package/dist/infrastructure/settings.d.ts +1 -1
  418. package/dist/infrastructure/settings.js.map +1 -1
  419. package/dist/infrastructure/shutdown.js +2 -6
  420. package/dist/infrastructure/shutdown.js.map +1 -1
  421. package/dist/infrastructure/terminal.d.ts +2 -10
  422. package/dist/infrastructure/terminal.js +2 -6
  423. package/dist/infrastructure/terminal.js.map +1 -1
  424. package/dist/infrastructure/terminal.types.d.ts +10 -0
  425. package/dist/infrastructure/terminal.types.js +2 -0
  426. package/dist/infrastructure/terminal.types.js.map +1 -0
  427. package/dist/infrastructure/transfer.constants.d.ts +3 -0
  428. package/dist/infrastructure/transfer.constants.js +2 -0
  429. package/dist/infrastructure/transfer.constants.js.map +1 -0
  430. package/dist/infrastructure/transfer.d.ts +1 -1
  431. package/dist/infrastructure/transfer.js +2 -1
  432. package/dist/infrastructure/transfer.js.map +1 -1
  433. package/dist/providers/agents.d.ts +3 -17
  434. package/dist/providers/agents.js +2 -203
  435. package/dist/providers/agents.js.map +1 -1
  436. package/dist/providers/backlogs.d.ts +3 -9
  437. package/dist/providers/backlogs.js +2 -81
  438. package/dist/providers/backlogs.js.map +1 -1
  439. package/dist/providers/cloud-files.constants.d.ts +1 -0
  440. package/dist/providers/cloud-files.constants.js +2 -0
  441. package/dist/providers/cloud-files.constants.js.map +1 -0
  442. package/dist/providers/cloud-files.d.ts +1 -1
  443. package/dist/providers/cloud-files.js +8 -6
  444. package/dist/providers/cloud-files.js.map +1 -1
  445. package/dist/providers/cloud.constants.d.ts +9 -0
  446. package/dist/providers/cloud.constants.js +10 -0
  447. package/dist/providers/cloud.constants.js.map +1 -0
  448. package/dist/providers/container-command.d.ts +3 -0
  449. package/dist/providers/container-command.js +77 -0
  450. package/dist/providers/container-command.js.map +1 -0
  451. package/dist/providers/container-files.d.ts +3 -0
  452. package/dist/providers/container-files.js +17 -0
  453. package/dist/providers/container-files.js.map +1 -0
  454. package/dist/providers/container-mounts.d.ts +3 -0
  455. package/dist/providers/container-mounts.js +63 -0
  456. package/dist/providers/container-mounts.js.map +1 -0
  457. package/dist/providers/container-plan.d.ts +2 -0
  458. package/dist/providers/container-plan.js +44 -0
  459. package/dist/providers/container-plan.js.map +1 -0
  460. package/dist/providers/container-preflight.d.ts +2 -0
  461. package/dist/providers/container-preflight.js +23 -0
  462. package/dist/providers/container-preflight.js.map +1 -0
  463. package/dist/providers/container.constants.d.ts +10 -0
  464. package/dist/providers/container.constants.js +11 -0
  465. package/dist/providers/container.constants.js.map +1 -0
  466. package/dist/providers/container.d.ts +5 -20
  467. package/dist/providers/container.js +42 -209
  468. package/dist/providers/container.js.map +1 -1
  469. package/dist/providers/container.types.d.ts +51 -0
  470. package/dist/providers/container.types.js +2 -0
  471. package/dist/providers/container.types.js.map +1 -0
  472. package/dist/providers/daytona-command.d.ts +3 -0
  473. package/dist/providers/daytona-command.js +86 -0
  474. package/dist/providers/daytona-command.js.map +1 -0
  475. package/dist/providers/daytona-files.d.ts +3 -0
  476. package/dist/providers/daytona-files.js +39 -0
  477. package/dist/providers/daytona-files.js.map +1 -0
  478. package/dist/providers/daytona.d.ts +4 -9
  479. package/dist/providers/daytona.js +12 -112
  480. package/dist/providers/daytona.js.map +1 -1
  481. package/dist/providers/daytona.types.d.ts +17 -0
  482. package/dist/providers/daytona.types.js +2 -0
  483. package/dist/providers/daytona.types.js.map +1 -0
  484. package/dist/providers/docker.d.ts +1 -1
  485. package/dist/providers/docker.js.map +1 -1
  486. package/dist/providers/factories.d.ts +2 -7
  487. package/dist/providers/factories.js.map +1 -1
  488. package/dist/providers/factories.types.d.ts +7 -0
  489. package/dist/providers/factories.types.js +2 -0
  490. package/dist/providers/factories.types.js.map +1 -0
  491. package/dist/providers/local.d.ts +3 -4
  492. package/dist/providers/local.js +1 -1
  493. package/dist/providers/local.js.map +1 -1
  494. package/dist/providers/local.types.d.ts +4 -0
  495. package/dist/providers/local.types.js +2 -0
  496. package/dist/providers/local.types.js.map +1 -0
  497. package/dist/providers/podman.d.ts +1 -1
  498. package/dist/providers/podman.js.map +1 -1
  499. package/dist/providers/vercel-command.d.ts +3 -0
  500. package/dist/providers/vercel-command.js +69 -0
  501. package/dist/providers/vercel-command.js.map +1 -0
  502. package/dist/providers/vercel-files.d.ts +3 -0
  503. package/dist/providers/vercel-files.js +54 -0
  504. package/dist/providers/vercel-files.js.map +1 -0
  505. package/dist/providers/vercel.d.ts +3 -7
  506. package/dist/providers/vercel.js +12 -111
  507. package/dist/providers/vercel.js.map +1 -1
  508. package/dist/providers/vercel.types.d.ts +16 -0
  509. package/dist/providers/vercel.types.js +2 -0
  510. package/dist/providers/vercel.types.js.map +1 -0
  511. package/dist/providers/versions.constants.d.ts +4 -0
  512. package/dist/providers/versions.constants.js +5 -0
  513. package/dist/providers/versions.constants.js.map +1 -0
  514. package/dist/providers/versions.d.ts +1 -4
  515. package/dist/providers/versions.js +1 -4
  516. package/dist/providers/versions.js.map +1 -1
  517. package/docs/architecture.fr.md +37 -0
  518. package/docs/architecture.md +49 -13
  519. package/docs/operations.md +1 -1
  520. package/package.json +10 -9
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.2
4
+
5
+ - Match npm package repository metadata to the GitHub build origin for provenance verification. GitLab remains the canonical source repository.
6
+
7
+ ## 1.1.1
8
+
9
+ - Separate Claude and Codex adapters, request builders and protocol decoders; preserve unknown events as raw observations.
10
+ - Split sandbox provisioning, operation ownership, dispatch, attachment, conversation storage and recovery into dedicated services.
11
+ - Separate campaign planning, issue execution and integration; isolate workflow state, retries and scheduling.
12
+ - Isolate container planning, mounts, commands and transfers, cloud command/file adapters, Git worktree management and remote synchronization stages.
13
+ - Extract contracts into `.types.ts` modules and configuration defaults into `.constants.ts` modules, without changing public entry points.
14
+ - Enforce dependency boundaries and type placement in CI, reject unused implementation declarations, and document the structure in English and French.
15
+
3
16
  ## 1.1.0
4
17
 
5
18
  - Add typed issue campaigns with dynamic planning, bounded concurrency, per-issue branches, warm review, verified integration and tracker closure.
package/README.fr.md CHANGED
@@ -26,7 +26,7 @@ npm pack
26
26
  Installez l’archive obtenue dans votre dépôt cible, ou utilisez [GitHub Packages](https://github.com/elie-laloum/outpost/packages). La configuration du registre figure dans le [guide d’exploitation](docs/operations.md).
27
27
 
28
28
  ```sh
29
- npm install --save-dev /chemin/elie-laloum-outpost-1.1.0.tgz
29
+ npm install --save-dev /chemin/elie-laloum-outpost-1.1.2.tgz
30
30
  npx outpost init --yes --agent codex --provider docker --template blank --build
31
31
  ```
32
32
 
package/README.md CHANGED
@@ -26,7 +26,7 @@ npm pack
26
26
  Install the resulting tarball in your target repository, or use the package from [GitHub Packages](https://github.com/elie-laloum/outpost/packages). Registry configuration is documented in [Operations](docs/operations.md).
27
27
 
28
28
  ```sh
29
- npm install --save-dev /path/to/elie-laloum-outpost-1.1.0.tgz
29
+ npm install --save-dev /path/to/elie-laloum-outpost-1.1.2.tgz
30
30
  npx outpost init --yes --agent codex --provider docker --template blank --build
31
31
  ```
32
32
 
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from "../../domain/agent.types.ts";
2
+ import type { ClaudeSettings } from "./settings.types.ts";
3
+ export declare function claude(settings?: ClaudeSettings): AgentAdapter;
@@ -0,0 +1,15 @@
1
+ import { claudeEvents, claudeTranscriptUsage } from "./claude-events.js";
2
+ import { claudeRequest } from "./claude-request.js";
3
+ export function claude(settings = {}) {
4
+ return Object.freeze({
5
+ name: "claude",
6
+ conversations: "claude",
7
+ resumable: true,
8
+ capture: settings.saveConversations ?? true,
9
+ variables: Object.freeze({ ...settings.variables }),
10
+ request: (input) => claudeRequest(settings, input),
11
+ events: claudeEvents,
12
+ transcriptUsage: claudeTranscriptUsage,
13
+ });
14
+ }
15
+ //# sourceMappingURL=claude-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-adapter.js","sourceRoot":"","sources":["../../../src/adapters/agents/claude-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,UAAU,MAAM,CAAC,WAA2B,EAAE;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,QAAQ;QACd,aAAa,EAAE,QAAQ;QACvB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,QAAQ,CAAC,iBAAiB,IAAI,IAAI;QAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,CAAC;QAClD,MAAM,EAAE,YAAY;QACpB,eAAe,EAAE,qBAAqB;KAChB,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import type { AgentAdapter } from \"../../domain/agent.types.ts\";\nimport { claudeEvents, claudeTranscriptUsage } from \"./claude-events.ts\";\nimport { claudeRequest } from \"./claude-request.ts\";\nimport type { ClaudeSettings } from \"./settings.types.ts\";\n\nexport function claude(settings: ClaudeSettings = {}): AgentAdapter {\n return Object.freeze({\n name: \"claude\",\n conversations: \"claude\",\n resumable: true,\n capture: settings.saveConversations ?? true,\n variables: Object.freeze({ ...settings.variables }),\n request: (input) => claudeRequest(settings, input),\n events: claudeEvents,\n transcriptUsage: claudeTranscriptUsage,\n } satisfies AgentAdapter);\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { AgentEvent, Usage } from "../../domain/agent.types.ts";
2
+ export declare function claudeEvents(line: string): AgentEvent[];
3
+ export declare function claudeTranscriptUsage(text: string): Usage | undefined;
@@ -0,0 +1,63 @@
1
+ import { decodeEvent, decodeLine } from "./event-decoder.js";
2
+ import { asRecord, decodeRecord, numberOrZero } from "./protocol.js";
3
+ function tokens(value) {
4
+ const usage = asRecord(value);
5
+ return {
6
+ input: numberOrZero(usage.input_tokens),
7
+ cacheCreated: numberOrZero(usage.cache_creation_input_tokens),
8
+ cached: numberOrZero(usage.cache_read_input_tokens),
9
+ output: numberOrZero(usage.output_tokens),
10
+ };
11
+ }
12
+ function system(event) {
13
+ return typeof event.session_id === "string"
14
+ ? [{ kind: "conversation", id: event.session_id }]
15
+ : [];
16
+ }
17
+ function assistant(event) {
18
+ const content = asRecord(event.message).content;
19
+ if (!Array.isArray(content))
20
+ return [];
21
+ return content.flatMap((part) => decodeEvent(asRecord(part), {
22
+ text: (block) => typeof block.text === "string"
23
+ ? [{ kind: "text", text: block.text }]
24
+ : [],
25
+ tool_use: (block) => [
26
+ { kind: "tool", name: String(block.name), input: block.input },
27
+ ],
28
+ }));
29
+ }
30
+ function result(event) {
31
+ const events = [];
32
+ if (!event.is_error && typeof event.result === "string")
33
+ events.push({ kind: "result", text: event.result });
34
+ if (event.usage)
35
+ events.push({ kind: "usage", tokens: tokens(event.usage) });
36
+ events.push(event.is_error
37
+ ? {
38
+ kind: "failure",
39
+ message: String(event.result ?? JSON.stringify(event.errors) ?? "Agent failed"),
40
+ }
41
+ : { kind: "finished" });
42
+ return events;
43
+ }
44
+ export function claudeEvents(line) {
45
+ return decodeLine(line, {
46
+ system,
47
+ assistant,
48
+ result,
49
+ });
50
+ }
51
+ export function claudeTranscriptUsage(text) {
52
+ let usage;
53
+ for (const line of text.split(/\r?\n/)) {
54
+ const event = decodeRecord(line);
55
+ if (event?.type !== "assistant")
56
+ continue;
57
+ const message = asRecord(event.message);
58
+ if (message.usage)
59
+ usage = tokens(message.usage);
60
+ }
61
+ return usage;
62
+ }
63
+ //# sourceMappingURL=claude-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-events.js","sourceRoot":"","sources":["../../../src/adapters/agents/claude-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGrE,SAAS,MAAM,CAAC,KAAc;IAC5B,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;QACvC,YAAY,EAAE,YAAY,CAAC,KAAK,CAAC,2BAA2B,CAAC;QAC7D,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,uBAAuB,CAAC;QACnD,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAqB;IACnC,OAAO,OAAO,KAAK,CAAC,UAAU,KAAK,QAAQ;QACzC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QAClD,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,SAAS,CAAC,KAAqB;IACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC;IAChD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,CAAC;IACvC,OAAO,OAAO,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAC9B,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;QAC1B,IAAI,EAAE,CAAC,KAAK,EAAE,EAAE,CACd,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ;YAC5B,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC;YACtC,CAAC,CAAC,EAAE;QACR,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;YACnB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;SAC/D;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,MAAM,CAAC,KAAqB;IACnC,MAAM,MAAM,GAAiB,EAAE,CAAC;IAChC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ;QACrD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,IAAI,KAAK,CAAC,KAAK;QAAE,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC7E,MAAM,CAAC,IAAI,CACT,KAAK,CAAC,QAAQ;QACZ,CAAC,CAAC;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,MAAM,CACb,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,cAAc,CAC/D;SACF;QACH,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CACzB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,UAAU,CAAC,IAAI,EAAE;QACtB,MAAM;QACN,SAAS;QACT,MAAM;KACiB,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,IAAI,KAAwB,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC;QACvC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,KAAK,EAAE,IAAI,KAAK,WAAW;YAAE,SAAS;QAC1C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACxC,IAAI,OAAO,CAAC,KAAK;YAAE,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import type { AgentEvent, Usage } from \"../../domain/agent.types.ts\";\nimport { decodeEvent, decodeLine } from \"./event-decoder.ts\";\nimport { asRecord, decodeRecord, numberOrZero } from \"./protocol.ts\";\nimport type { EventDecoders, ProtocolRecord } from \"./protocol.types.ts\";\n\nfunction tokens(value: unknown): Usage {\n const usage = asRecord(value);\n return {\n input: numberOrZero(usage.input_tokens),\n cacheCreated: numberOrZero(usage.cache_creation_input_tokens),\n cached: numberOrZero(usage.cache_read_input_tokens),\n output: numberOrZero(usage.output_tokens),\n };\n}\n\nfunction system(event: ProtocolRecord): AgentEvent[] {\n return typeof event.session_id === \"string\"\n ? [{ kind: \"conversation\", id: event.session_id }]\n : [];\n}\n\nfunction assistant(event: ProtocolRecord): AgentEvent[] {\n const content = asRecord(event.message).content;\n if (!Array.isArray(content)) return [];\n return content.flatMap((part) =>\n decodeEvent(asRecord(part), {\n text: (block) =>\n typeof block.text === \"string\"\n ? [{ kind: \"text\", text: block.text }]\n : [],\n tool_use: (block) => [\n { kind: \"tool\", name: String(block.name), input: block.input },\n ],\n }),\n );\n}\n\nfunction result(event: ProtocolRecord): AgentEvent[] {\n const events: AgentEvent[] = [];\n if (!event.is_error && typeof event.result === \"string\")\n events.push({ kind: \"result\", text: event.result });\n if (event.usage) events.push({ kind: \"usage\", tokens: tokens(event.usage) });\n events.push(\n event.is_error\n ? {\n kind: \"failure\",\n message: String(\n event.result ?? JSON.stringify(event.errors) ?? \"Agent failed\",\n ),\n }\n : { kind: \"finished\" },\n );\n return events;\n}\n\nexport function claudeEvents(line: string): AgentEvent[] {\n return decodeLine(line, {\n system,\n assistant,\n result,\n } satisfies EventDecoders);\n}\n\nexport function claudeTranscriptUsage(text: string): Usage | undefined {\n let usage: Usage | undefined;\n for (const line of text.split(/\\r?\\n/)) {\n const event = decodeRecord(line);\n if (event?.type !== \"assistant\") continue;\n const message = asRecord(event.message);\n if (message.usage) usage = tokens(message.usage);\n }\n return usage;\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { AgentInput } from "../../domain/agent.types.ts";
2
+ import type { Command } from "../../domain/command.types.ts";
3
+ import type { ClaudeSettings } from "./settings.types.ts";
4
+ export declare function claudeRequest(settings: ClaudeSettings, input: AgentInput): Command;
@@ -0,0 +1,30 @@
1
+ import { validateContinuation } from "./continuation.js";
2
+ export function claudeRequest(settings, input) {
3
+ validateContinuation(input);
4
+ const args = [];
5
+ if (!input.interactive)
6
+ args.push("--print", "--verbose", "--output-format", "stream-json");
7
+ if (settings.model)
8
+ args.push("--model", settings.model);
9
+ if (settings.reasoning)
10
+ args.push("--effort", settings.reasoning);
11
+ if (settings.permissions)
12
+ args.push("--permission-mode", settings.permissions);
13
+ if (!settings.permissions && !input.interactive)
14
+ args.push("--dangerously-skip-permissions");
15
+ if (input.continuation) {
16
+ args.push("--resume", input.continuation.id);
17
+ if (input.continuation.fork)
18
+ args.push("--fork-session");
19
+ }
20
+ if (input.interactive && input.text !== undefined)
21
+ args.push("--", input.text);
22
+ return {
23
+ executable: "claude",
24
+ arguments: args,
25
+ ...(input.interactive
26
+ ? { interactive: true }
27
+ : { stdin: input.text ?? "" }),
28
+ };
29
+ }
30
+ //# sourceMappingURL=claude-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-request.js","sourceRoot":"","sources":["../../../src/adapters/agents/claude-request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,MAAM,UAAU,aAAa,CAC3B,QAAwB,EACxB,KAAiB;IAEjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,KAAK,CAAC,WAAW;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,EAAE,iBAAiB,EAAE,aAAa,CAAC,CAAC;IACtE,IAAI,QAAQ,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,SAAS;QAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAC;IAClE,IAAI,QAAQ,CAAC,WAAW;QACtB,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,QAAQ,CAAC,WAAW,CAAC,CAAC;IACvD,IAAI,CAAC,QAAQ,CAAC,WAAW,IAAI,CAAC,KAAK,CAAC,WAAW;QAC7C,IAAI,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;IAC9C,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;QACvB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QAC7C,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI;YAAE,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO;QACL,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,IAAI;QACf,GAAG,CAAC,KAAK,CAAC,WAAW;YACnB,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE;YACvB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;KACjC,CAAC;AACJ,CAAC","sourcesContent":["import type { AgentInput } from \"../../domain/agent.types.ts\";\nimport type { Command } from \"../../domain/command.types.ts\";\nimport { validateContinuation } from \"./continuation.ts\";\nimport type { ClaudeSettings } from \"./settings.types.ts\";\n\nexport function claudeRequest(\n settings: ClaudeSettings,\n input: AgentInput,\n): Command {\n validateContinuation(input);\n const args: string[] = [];\n if (!input.interactive)\n args.push(\"--print\", \"--verbose\", \"--output-format\", \"stream-json\");\n if (settings.model) args.push(\"--model\", settings.model);\n if (settings.reasoning) args.push(\"--effort\", settings.reasoning);\n if (settings.permissions)\n args.push(\"--permission-mode\", settings.permissions);\n if (!settings.permissions && !input.interactive)\n args.push(\"--dangerously-skip-permissions\");\n if (input.continuation) {\n args.push(\"--resume\", input.continuation.id);\n if (input.continuation.fork) args.push(\"--fork-session\");\n }\n if (input.interactive && input.text !== undefined)\n args.push(\"--\", input.text);\n return {\n executable: \"claude\",\n arguments: args,\n ...(input.interactive\n ? { interactive: true }\n : { stdin: input.text ?? \"\" }),\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { AgentAdapter } from "../../domain/agent.types.ts";
2
+ import type { CodexSettings } from "./settings.types.ts";
3
+ export declare function codex(settings?: CodexSettings): AgentAdapter;
@@ -0,0 +1,14 @@
1
+ import { codexEvents } from "./codex-events.js";
2
+ import { codexRequest } from "./codex-request.js";
3
+ export function codex(settings = {}) {
4
+ return Object.freeze({
5
+ name: "codex",
6
+ conversations: "codex",
7
+ resumable: true,
8
+ capture: settings.saveConversations ?? true,
9
+ variables: Object.freeze({ ...settings.variables }),
10
+ request: (input) => codexRequest(settings, input),
11
+ events: codexEvents,
12
+ });
13
+ }
14
+ //# sourceMappingURL=codex-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-adapter.js","sourceRoot":"","sources":["../../../src/adapters/agents/codex-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,MAAM,UAAU,KAAK,CAAC,WAA0B,EAAE;IAChD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,IAAI,EAAE,OAAO;QACb,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,QAAQ,CAAC,iBAAiB,IAAI,IAAI;QAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QACnD,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC;QACjD,MAAM,EAAE,WAAW;KACG,CAAC,CAAC;AAC5B,CAAC","sourcesContent":["import type { AgentAdapter } from \"../../domain/agent.types.ts\";\nimport { codexEvents } from \"./codex-events.ts\";\nimport { codexRequest } from \"./codex-request.ts\";\nimport type { CodexSettings } from \"./settings.types.ts\";\n\nexport function codex(settings: CodexSettings = {}): AgentAdapter {\n return Object.freeze({\n name: \"codex\",\n conversations: \"codex\",\n resumable: true,\n capture: settings.saveConversations ?? true,\n variables: Object.freeze({ ...settings.variables }),\n request: (input) => codexRequest(settings, input),\n events: codexEvents,\n } satisfies AgentAdapter);\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import type { AgentEvent } from "../../domain/agent.types.ts";
2
+ export declare function codexEvents(line: string): AgentEvent[];
@@ -0,0 +1,58 @@
1
+ import { decodeEvent, decodeLine } from "./event-decoder.js";
2
+ import { asRecord, numberOrZero } from "./protocol.js";
3
+ function conversation(event) {
4
+ return typeof event.thread_id === "string"
5
+ ? [{ kind: "conversation", id: event.thread_id }]
6
+ : [];
7
+ }
8
+ function completedItem(event) {
9
+ return decodeEvent(asRecord(event.item), {
10
+ agent_message: (item) => typeof item.text === "string" ? [{ kind: "text", text: item.text }] : [],
11
+ });
12
+ }
13
+ function startedItem(event) {
14
+ return decodeEvent(asRecord(event.item), {
15
+ command_execution: (item) => [
16
+ { kind: "tool", name: "command", input: item.command },
17
+ ],
18
+ mcp_tool_call: (item) => [
19
+ { kind: "tool", name: String(item.tool), input: item.arguments },
20
+ ],
21
+ });
22
+ }
23
+ function completedTurn(event) {
24
+ const usage = asRecord(event.usage);
25
+ return [
26
+ {
27
+ kind: "usage",
28
+ tokens: {
29
+ input: numberOrZero(usage.input_tokens),
30
+ cached: numberOrZero(usage.cached_input_tokens),
31
+ output: numberOrZero(usage.output_tokens),
32
+ },
33
+ },
34
+ { kind: "finished" },
35
+ ];
36
+ }
37
+ function failure(event) {
38
+ const error = typeof event.error === "string"
39
+ ? event.error
40
+ : asRecord(event.error).message;
41
+ return [
42
+ {
43
+ kind: "failure",
44
+ message: String(event.message ?? error ?? "Agent failed"),
45
+ },
46
+ ];
47
+ }
48
+ export function codexEvents(line) {
49
+ return decodeLine(line, {
50
+ "thread.started": conversation,
51
+ "item.completed": completedItem,
52
+ "item.started": startedItem,
53
+ "turn.completed": completedTurn,
54
+ error: failure,
55
+ "turn.failed": failure,
56
+ });
57
+ }
58
+ //# sourceMappingURL=codex-events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-events.js","sourceRoot":"","sources":["../../../src/adapters/agents/codex-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGvD,SAAS,YAAY,CAAC,KAAqB;IACzC,OAAO,OAAO,KAAK,CAAC,SAAS,KAAK,QAAQ;QACxC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;QACjD,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,SAAS,aAAa,CAAC,KAAqB;IAC1C,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACvC,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CACtB,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE;KAC3E,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,KAAqB;IACxC,OAAO,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACvC,iBAAiB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YAC3B,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE;SACvD;QACD,aAAa,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC;YACvB,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE;SACjE;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CAAC,KAAqB;IAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACpC,OAAO;QACL;YACE,IAAI,EAAE,OAAO;YACb,MAAM,EAAE;gBACN,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;gBACvC,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,mBAAmB,CAAC;gBAC/C,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,aAAa,CAAC;aAC1C;SACF;QACD,EAAE,IAAI,EAAE,UAAU,EAAE;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,KAAqB;IACpC,MAAM,KAAK,GACT,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ;QAC7B,CAAC,CAAC,KAAK,CAAC,KAAK;QACb,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC;IACpC,OAAO;QACL;YACE,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,IAAI,KAAK,IAAI,cAAc,CAAC;SAC1D;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,UAAU,CAAC,IAAI,EAAE;QACtB,gBAAgB,EAAE,YAAY;QAC9B,gBAAgB,EAAE,aAAa;QAC/B,cAAc,EAAE,WAAW;QAC3B,gBAAgB,EAAE,aAAa;QAC/B,KAAK,EAAE,OAAO;QACd,aAAa,EAAE,OAAO;KACvB,CAAC,CAAC;AACL,CAAC","sourcesContent":["import type { AgentEvent } from \"../../domain/agent.types.ts\";\nimport { decodeEvent, decodeLine } from \"./event-decoder.ts\";\nimport { asRecord, numberOrZero } from \"./protocol.ts\";\nimport type { ProtocolRecord } from \"./protocol.types.ts\";\n\nfunction conversation(event: ProtocolRecord): AgentEvent[] {\n return typeof event.thread_id === \"string\"\n ? [{ kind: \"conversation\", id: event.thread_id }]\n : [];\n}\n\nfunction completedItem(event: ProtocolRecord): AgentEvent[] {\n return decodeEvent(asRecord(event.item), {\n agent_message: (item) =>\n typeof item.text === \"string\" ? [{ kind: \"text\", text: item.text }] : [],\n });\n}\n\nfunction startedItem(event: ProtocolRecord): AgentEvent[] {\n return decodeEvent(asRecord(event.item), {\n command_execution: (item) => [\n { kind: \"tool\", name: \"command\", input: item.command },\n ],\n mcp_tool_call: (item) => [\n { kind: \"tool\", name: String(item.tool), input: item.arguments },\n ],\n });\n}\n\nfunction completedTurn(event: ProtocolRecord): AgentEvent[] {\n const usage = asRecord(event.usage);\n return [\n {\n kind: \"usage\",\n tokens: {\n input: numberOrZero(usage.input_tokens),\n cached: numberOrZero(usage.cached_input_tokens),\n output: numberOrZero(usage.output_tokens),\n },\n },\n { kind: \"finished\" },\n ];\n}\n\nfunction failure(event: ProtocolRecord): AgentEvent[] {\n const error =\n typeof event.error === \"string\"\n ? event.error\n : asRecord(event.error).message;\n return [\n {\n kind: \"failure\",\n message: String(event.message ?? error ?? \"Agent failed\"),\n },\n ];\n}\n\nexport function codexEvents(line: string): AgentEvent[] {\n return decodeLine(line, {\n \"thread.started\": conversation,\n \"item.completed\": completedItem,\n \"item.started\": startedItem,\n \"turn.completed\": completedTurn,\n error: failure,\n \"turn.failed\": failure,\n });\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { AgentInput } from "../../domain/agent.types.ts";
2
+ import type { Command } from "../../domain/command.types.ts";
3
+ import type { CodexSettings } from "./settings.types.ts";
4
+ export declare function codexRequest(settings: CodexSettings, input: AgentInput): Command;
@@ -0,0 +1,29 @@
1
+ import { validateContinuation } from "./continuation.js";
2
+ export function codexRequest(settings, input) {
3
+ validateContinuation(input);
4
+ const args = [];
5
+ if (settings.approvalReviewer === "auto_review")
6
+ args.push("-a", "on-request", "-s", "danger-full-access", "-c", 'approvals_reviewer="auto_review"');
7
+ if (settings.approvalReviewer !== "auto_review" && !input.interactive)
8
+ args.push("--dangerously-bypass-approvals-and-sandbox");
9
+ if (settings.model)
10
+ args.push("--model", settings.model);
11
+ if (settings.reasoning)
12
+ args.push("-c", `model_reasoning_effort="${settings.reasoning}"`);
13
+ if (!input.interactive)
14
+ args.push("exec");
15
+ if (input.continuation)
16
+ args.push(input.continuation.fork ? "fork" : "resume", input.continuation.id);
17
+ if (!input.interactive)
18
+ args.push("--json", "-");
19
+ if (input.interactive && input.text !== undefined)
20
+ args.push("--", input.text);
21
+ return {
22
+ executable: "codex",
23
+ arguments: args,
24
+ ...(input.interactive
25
+ ? { interactive: true }
26
+ : { stdin: input.text ?? "" }),
27
+ };
28
+ }
29
+ //# sourceMappingURL=codex-request.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-request.js","sourceRoot":"","sources":["../../../src/adapters/agents/codex-request.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAGzD,MAAM,UAAU,YAAY,CAC1B,QAAuB,EACvB,KAAiB;IAEjB,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAC5B,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,QAAQ,CAAC,gBAAgB,KAAK,aAAa;QAC7C,IAAI,CAAC,IAAI,CACP,IAAI,EACJ,YAAY,EACZ,IAAI,EACJ,oBAAoB,EACpB,IAAI,EACJ,kCAAkC,CACnC,CAAC;IACJ,IAAI,QAAQ,CAAC,gBAAgB,KAAK,aAAa,IAAI,CAAC,KAAK,CAAC,WAAW;QACnE,IAAI,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC1D,IAAI,QAAQ,CAAC,KAAK;QAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;IACzD,IAAI,QAAQ,CAAC,SAAS;QACpB,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,2BAA2B,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC;IACpE,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,KAAK,CAAC,YAAY;QACpB,IAAI,CAAC,IAAI,CACP,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,EAC3C,KAAK,CAAC,YAAY,CAAC,EAAE,CACtB,CAAC;IACJ,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IACjD,IAAI,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS;QAC/C,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;IAC9B,OAAO;QACL,UAAU,EAAE,OAAO;QACnB,SAAS,EAAE,IAAI;QACf,GAAG,CAAC,KAAK,CAAC,WAAW;YACnB,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE;YACvB,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;KACjC,CAAC;AACJ,CAAC","sourcesContent":["import type { AgentInput } from \"../../domain/agent.types.ts\";\nimport type { Command } from \"../../domain/command.types.ts\";\nimport { validateContinuation } from \"./continuation.ts\";\nimport type { CodexSettings } from \"./settings.types.ts\";\n\nexport function codexRequest(\n settings: CodexSettings,\n input: AgentInput,\n): Command {\n validateContinuation(input);\n const args: string[] = [];\n if (settings.approvalReviewer === \"auto_review\")\n args.push(\n \"-a\",\n \"on-request\",\n \"-s\",\n \"danger-full-access\",\n \"-c\",\n 'approvals_reviewer=\"auto_review\"',\n );\n if (settings.approvalReviewer !== \"auto_review\" && !input.interactive)\n args.push(\"--dangerously-bypass-approvals-and-sandbox\");\n if (settings.model) args.push(\"--model\", settings.model);\n if (settings.reasoning)\n args.push(\"-c\", `model_reasoning_effort=\"${settings.reasoning}\"`);\n if (!input.interactive) args.push(\"exec\");\n if (input.continuation)\n args.push(\n input.continuation.fork ? \"fork\" : \"resume\",\n input.continuation.id,\n );\n if (!input.interactive) args.push(\"--json\", \"-\");\n if (input.interactive && input.text !== undefined)\n args.push(\"--\", input.text);\n return {\n executable: \"codex\",\n arguments: args,\n ...(input.interactive\n ? { interactive: true }\n : { stdin: input.text ?? \"\" }),\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import type { AgentInput } from "../../domain/agent.types.ts";
2
+ export declare function validateContinuation(input: AgentInput): void;
@@ -0,0 +1,6 @@
1
+ import { invariant } from "../../domain/errors.js";
2
+ export function validateContinuation(input) {
3
+ if (input.continuation)
4
+ invariant(/^[A-Za-z0-9_-]+$/.test(input.continuation.id), "Invalid conversation identifier");
5
+ }
6
+ //# sourceMappingURL=continuation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"continuation.js","sourceRoot":"","sources":["../../../src/adapters/agents/continuation.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,MAAM,UAAU,oBAAoB,CAAC,KAAiB;IACpD,IAAI,KAAK,CAAC,YAAY;QACpB,SAAS,CACP,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,EAAE,CAAC,EAC9C,iCAAiC,CAClC,CAAC;AACN,CAAC","sourcesContent":["import type { AgentInput } from \"../../domain/agent.types.ts\";\nimport { invariant } from \"../../domain/errors.ts\";\n\nexport function validateContinuation(input: AgentInput): void {\n if (input.continuation)\n invariant(\n /^[A-Za-z0-9_-]+$/.test(input.continuation.id),\n \"Invalid conversation identifier\",\n );\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { AgentEvent } from "../../domain/agent.types.ts";
2
+ import type { EventDecoders, ProtocolRecord } from "./protocol.types.ts";
3
+ export declare function decodeEvent(event: ProtocolRecord, handlers: EventDecoders): AgentEvent[];
4
+ export declare function decodeLine(line: string, handlers: EventDecoders): AgentEvent[];
@@ -0,0 +1,15 @@
1
+ import { decodeRecord } from "./protocol.js";
2
+ export function decodeEvent(event, handlers) {
3
+ const handler = typeof event.type === "string" && Object.hasOwn(handlers, event.type)
4
+ ? handlers[event.type]
5
+ : undefined;
6
+ return handler?.(event) ?? [];
7
+ }
8
+ export function decodeLine(line, handlers) {
9
+ const event = decodeRecord(line);
10
+ if (!event)
11
+ return [{ kind: "raw", value: line }];
12
+ const events = decodeEvent(event, handlers);
13
+ return events.length ? events : [{ kind: "raw", value: event }];
14
+ }
15
+ //# sourceMappingURL=event-decoder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"event-decoder.js","sourceRoot":"","sources":["../../../src/adapters/agents/event-decoder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAG7C,MAAM,UAAU,WAAW,CACzB,KAAqB,EACrB,QAAuB;IAEvB,MAAM,OAAO,GACX,OAAO,KAAK,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC;QACnE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;QACtB,CAAC,CAAC,SAAS,CAAC;IAChB,OAAO,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,IAAY,EACZ,QAAuB;IAEvB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,KAAK;QAAE,OAAO,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AAClE,CAAC","sourcesContent":["import type { AgentEvent } from \"../../domain/agent.types.ts\";\nimport { decodeRecord } from \"./protocol.ts\";\nimport type { EventDecoders, ProtocolRecord } from \"./protocol.types.ts\";\n\nexport function decodeEvent(\n event: ProtocolRecord,\n handlers: EventDecoders,\n): AgentEvent[] {\n const handler =\n typeof event.type === \"string\" && Object.hasOwn(handlers, event.type)\n ? handlers[event.type]\n : undefined;\n return handler?.(event) ?? [];\n}\n\nexport function decodeLine(\n line: string,\n handlers: EventDecoders,\n): AgentEvent[] {\n const event = decodeRecord(line);\n if (!event) return [{ kind: \"raw\", value: line }];\n const events = decodeEvent(event, handlers);\n return events.length ? events : [{ kind: \"raw\", value: event }];\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export declare function asRecord(value: unknown): Record<string, unknown>;
2
+ export declare function numberOrZero(value: unknown): number;
3
+ export declare function decodeRecord(line: string): Record<string, unknown> | undefined;
@@ -0,0 +1,17 @@
1
+ export function asRecord(value) {
2
+ return value !== null && typeof value === "object"
3
+ ? value
4
+ : {};
5
+ }
6
+ export function numberOrZero(value) {
7
+ return typeof value === "number" ? value : 0;
8
+ }
9
+ export function decodeRecord(line) {
10
+ try {
11
+ return asRecord(JSON.parse(line));
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ //# sourceMappingURL=protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.js","sourceRoot":"","sources":["../../../src/adapters/agents/protocol.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ;QAChD,CAAC,CAAE,KAAiC;QACpC,CAAC,CAAC,EAAE,CAAC;AACT,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,IAAY;IAEZ,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC","sourcesContent":["export function asRecord(value: unknown): Record<string, unknown> {\n return value !== null && typeof value === \"object\"\n ? (value as Record<string, unknown>)\n : {};\n}\n\nexport function numberOrZero(value: unknown): number {\n return typeof value === \"number\" ? value : 0;\n}\n\nexport function decodeRecord(\n line: string,\n): Record<string, unknown> | undefined {\n try {\n return asRecord(JSON.parse(line));\n } catch {\n return undefined;\n }\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { AgentEvent } from "../../domain/agent.types.ts";
2
+ export type ProtocolRecord = Record<string, unknown>;
3
+ export type EventDecoder = (event: ProtocolRecord) => AgentEvent[];
4
+ export type EventDecoders = Readonly<Partial<Record<string, EventDecoder>>>;
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=protocol.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.types.js","sourceRoot":"","sources":["../../../src/adapters/agents/protocol.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { AgentEvent } from \"../../domain/agent.types.ts\";\n\nexport type ProtocolRecord = Record<string, unknown>;\nexport type EventDecoder = (event: ProtocolRecord) => AgentEvent[];\nexport type EventDecoders = Readonly<Partial<Record<string, EventDecoder>>>;\n"]}
@@ -0,0 +1,14 @@
1
+ import type { Variables } from "../../domain/command.types.ts";
2
+ export interface CommonAgentSettings {
3
+ readonly model?: string;
4
+ readonly variables?: Variables;
5
+ readonly saveConversations?: boolean;
6
+ }
7
+ export interface ClaudeSettings extends CommonAgentSettings {
8
+ readonly reasoning?: "low" | "medium" | "high" | "xhigh" | "max";
9
+ readonly permissions?: "default" | "acceptEdits" | "plan" | "auto" | "dontAsk" | "bypassPermissions";
10
+ }
11
+ export interface CodexSettings extends CommonAgentSettings {
12
+ readonly reasoning?: "low" | "medium" | "high" | "xhigh";
13
+ readonly approvalReviewer?: "user" | "auto_review";
14
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=settings.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings.types.js","sourceRoot":"","sources":["../../../src/adapters/agents/settings.types.ts"],"names":[],"mappings":"","sourcesContent":["import type { Variables } from \"../../domain/command.types.ts\";\n\nexport interface CommonAgentSettings {\n readonly model?: string;\n readonly variables?: Variables;\n readonly saveConversations?: boolean;\n}\n\nexport interface ClaudeSettings extends CommonAgentSettings {\n readonly reasoning?: \"low\" | \"medium\" | \"high\" | \"xhigh\" | \"max\";\n readonly permissions?:\n | \"default\"\n | \"acceptEdits\"\n | \"plan\"\n | \"auto\"\n | \"dontAsk\"\n | \"bypassPermissions\";\n}\n\nexport interface CodexSettings extends CommonAgentSettings {\n readonly reasoning?: \"low\" | \"medium\" | \"high\" | \"xhigh\";\n readonly approvalReviewer?: \"user\" | \"auto_review\";\n}\n"]}
@@ -0,0 +1,4 @@
1
+ export declare const backlogDefaults: Readonly<{
2
+ deadlineMs: 60000;
3
+ retainBytes: 16777216;
4
+ }>;
@@ -0,0 +1,5 @@
1
+ export const backlogDefaults = Object.freeze({
2
+ deadlineMs: 60_000,
3
+ retainBytes: 16_777_216,
4
+ });
5
+ //# sourceMappingURL=backlog.constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backlog.constants.js","sourceRoot":"","sources":["../../../src/adapters/backlogs/backlog.constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,UAAU,EAAE,MAAM;IAClB,WAAW,EAAE,UAAU;CACxB,CAAC,CAAC","sourcesContent":["export const backlogDefaults = Object.freeze({\n deadlineMs: 60_000,\n retainBytes: 16_777_216,\n});\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Backlog } from "../../domain/backlog.types.ts";
2
+ import type { Executor } from "../../infrastructure/process.types.ts";
3
+ import type { BacklogSettings } from "./settings.types.ts";
4
+ export declare function beadsBacklog(settings?: BacklogSettings, executor?: Executor): Backlog;
@@ -0,0 +1,31 @@
1
+ import { invariant } from "../../domain/errors.js";
2
+ import { cli } from "./cli.js";
3
+ import { issue } from "./issue.js";
4
+ export function beadsBacklog(settings = {}, executor) {
5
+ const run = cli("bd", settings, executor);
6
+ const identifier = (id) => {
7
+ invariant(/^[\w][\w.-]*$/.test(id), "Invalid Beads issue id");
8
+ return id;
9
+ };
10
+ return {
11
+ async list(signal) {
12
+ const data = JSON.parse(await run([
13
+ "ready",
14
+ "--json",
15
+ "--limit",
16
+ "0",
17
+ ...(settings.label ? ["--label", settings.label] : []),
18
+ ], signal));
19
+ invariant(Array.isArray(data), "Invalid Beads backlog");
20
+ return data.map(issue);
21
+ },
22
+ async get(id, signal) {
23
+ const data = JSON.parse(await run(["show", identifier(id), "--json"], signal));
24
+ return issue(Array.isArray(data) ? data[0] : data);
25
+ },
26
+ async close(id, signal) {
27
+ await run(["close", identifier(id)], signal);
28
+ },
29
+ };
30
+ }
31
+ //# sourceMappingURL=beads-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"beads-adapter.js","sourceRoot":"","sources":["../../../src/adapters/backlogs/beads-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,UAAU,YAAY,CAC1B,WAA4B,EAAE,EAC9B,QAAmB;IAEnB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE;QAChC,SAAS,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAC;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,MAAM;YACf,MAAM,IAAI,GAAY,IAAI,CAAC,KAAK,CAC9B,MAAM,GAAG,CACP;gBACE,OAAO;gBACP,QAAQ;gBACR,SAAS;gBACT,GAAG;gBACH,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACvD,EACD,MAAM,CACP,CACF,CAAC;YACF,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,uBAAuB,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM;YAClB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CACrB,MAAM,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CACtD,CAAC;YACF,OAAO,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM;YACpB,MAAM,GAAG,CAAC,CAAC,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { Backlog } from \"../../domain/backlog.types.ts\";\nimport { invariant } from \"../../domain/errors.ts\";\nimport type { Executor } from \"../../infrastructure/process.types.ts\";\nimport { cli } from \"./cli.ts\";\nimport { issue } from \"./issue.ts\";\nimport type { BacklogSettings } from \"./settings.types.ts\";\n\nexport function beadsBacklog(\n settings: BacklogSettings = {},\n executor?: Executor,\n): Backlog {\n const run = cli(\"bd\", settings, executor);\n const identifier = (id: string) => {\n invariant(/^[\\w][\\w.-]*$/.test(id), \"Invalid Beads issue id\");\n return id;\n };\n return {\n async list(signal) {\n const data: unknown = JSON.parse(\n await run(\n [\n \"ready\",\n \"--json\",\n \"--limit\",\n \"0\",\n ...(settings.label ? [\"--label\", settings.label] : []),\n ],\n signal,\n ),\n );\n invariant(Array.isArray(data), \"Invalid Beads backlog\");\n return data.map(issue);\n },\n async get(id, signal) {\n const data = JSON.parse(\n await run([\"show\", identifier(id), \"--json\"], signal),\n );\n return issue(Array.isArray(data) ? data[0] : data);\n },\n async close(id, signal) {\n await run([\"close\", identifier(id)], signal);\n },\n };\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { Executor } from "../../infrastructure/process.types.ts";
2
+ import type { BacklogSettings } from "./settings.types.ts";
3
+ export declare function cli(program: string, settings: BacklogSettings, executor?: Executor): (args: readonly string[], signal?: AbortSignal) => Promise<string>;
@@ -0,0 +1,20 @@
1
+ import { requireSuccess } from "../../infrastructure/process.js";
2
+ import { resolveVariables } from "../../infrastructure/settings.js";
3
+ import { backlogDefaults } from "./backlog.constants.js";
4
+ export function cli(program, settings, executor) {
5
+ const directory = settings.directory ?? process.cwd();
6
+ return async (args, signal) => {
7
+ signal?.throwIfAborted();
8
+ const variables = await resolveVariables(directory);
9
+ return (await requireSuccess({
10
+ executable: program,
11
+ arguments: args,
12
+ directory,
13
+ variables,
14
+ deadlineMs: settings.deadlineMs ?? backlogDefaults.deadlineMs,
15
+ retain: backlogDefaults.retainBytes,
16
+ ...(signal ? { signal } : {}),
17
+ }, executor)).stdout;
18
+ };
19
+ }
20
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../../src/adapters/backlogs/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AACpE,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAGzD,MAAM,UAAU,GAAG,CACjB,OAAe,EACf,QAAyB,EACzB,QAAmB;IAEnB,MAAM,SAAS,GAAG,QAAQ,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACtD,OAAO,KAAK,EAAE,IAAuB,EAAE,MAAoB,EAAE,EAAE;QAC7D,MAAM,EAAE,cAAc,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACpD,OAAO,CACL,MAAM,cAAc,CAClB;YACE,UAAU,EAAE,OAAO;YACnB,SAAS,EAAE,IAAI;YACf,SAAS;YACT,SAAS;YACT,UAAU,EAAE,QAAQ,CAAC,UAAU,IAAI,eAAe,CAAC,UAAU;YAC7D,MAAM,EAAE,eAAe,CAAC,WAAW;YACnC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC9B,EACD,QAAQ,CACT,CACF,CAAC,MAAM,CAAC;IACX,CAAC,CAAC;AACJ,CAAC","sourcesContent":["import { requireSuccess } from \"../../infrastructure/process.ts\";\nimport type { Executor } from \"../../infrastructure/process.types.ts\";\nimport { resolveVariables } from \"../../infrastructure/settings.ts\";\nimport { backlogDefaults } from \"./backlog.constants.ts\";\nimport type { BacklogSettings } from \"./settings.types.ts\";\n\nexport function cli(\n program: string,\n settings: BacklogSettings,\n executor?: Executor,\n) {\n const directory = settings.directory ?? process.cwd();\n return async (args: readonly string[], signal?: AbortSignal) => {\n signal?.throwIfAborted();\n const variables = await resolveVariables(directory);\n return (\n await requireSuccess(\n {\n executable: program,\n arguments: args,\n directory,\n variables,\n deadlineMs: settings.deadlineMs ?? backlogDefaults.deadlineMs,\n retain: backlogDefaults.retainBytes,\n ...(signal ? { signal } : {}),\n },\n executor,\n )\n ).stdout;\n };\n}\n"]}
@@ -0,0 +1,4 @@
1
+ import type { Backlog } from "../../domain/backlog.types.ts";
2
+ import type { Executor } from "../../infrastructure/process.types.ts";
3
+ import type { BacklogSettings } from "./settings.types.ts";
4
+ export declare function githubBacklog(settings?: BacklogSettings, executor?: Executor): Backlog;
@@ -0,0 +1,28 @@
1
+ import { invariant } from "../../domain/errors.js";
2
+ import { cli } from "./cli.js";
3
+ import { issue } from "./issue.js";
4
+ export function githubBacklog(settings = {}, executor) {
5
+ const run = cli("gh", settings, executor);
6
+ const identifier = (id) => {
7
+ invariant(/^[1-9]\d*$/.test(id), "GitHub issue id must be a positive number");
8
+ return id;
9
+ };
10
+ return {
11
+ async list(signal) {
12
+ const endpoint = `repos/{owner}/{repo}/issues?state=open&per_page=100${settings.label ? `&labels=${encodeURIComponent(settings.label)}` : ""}`;
13
+ const pages = JSON.parse(await run(["api", endpoint, "--paginate", "--slurp"], signal));
14
+ invariant(Array.isArray(pages) && pages.every(Array.isArray), "Invalid GitHub issue pages");
15
+ return pages
16
+ .flat()
17
+ .filter((item) => !item.pull_request)
18
+ .map(issue);
19
+ },
20
+ async get(id, signal) {
21
+ return issue(JSON.parse(await run(["issue", "view", identifier(id), "--json", "number,title,body"], signal)));
22
+ },
23
+ async close(id, signal) {
24
+ await run(["issue", "close", identifier(id), "--reason", "completed"], signal);
25
+ },
26
+ };
27
+ }
28
+ //# sourceMappingURL=github-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-adapter.js","sourceRoot":"","sources":["../../../src/adapters/backlogs/github-adapter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AAEnD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAGnC,MAAM,UAAU,aAAa,CAC3B,WAA4B,EAAE,EAC9B,QAAmB;IAEnB,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,CAAC,EAAU,EAAE,EAAE;QAChC,SAAS,CACP,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC,EACrB,2CAA2C,CAC5C,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;IACF,OAAO;QACL,KAAK,CAAC,IAAI,CAAC,MAAM;YACf,MAAM,QAAQ,GAAG,sDAAsD,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,kBAAkB,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YAC/I,MAAM,KAAK,GAAY,IAAI,CAAC,KAAK,CAC/B,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,CAAC,CAC9D,CAAC;YACF,SAAS,CACP,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAClD,4BAA4B,CAC7B,CAAC;YACF,OAAO,KAAK;iBACT,IAAI,EAAE;iBACN,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;iBACpC,GAAG,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM;YAClB,OAAO,KAAK,CACV,IAAI,CAAC,KAAK,CACR,MAAM,GAAG,CACP,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,mBAAmB,CAAC,EAChE,MAAM,CACP,CACF,CACF,CAAC;QACJ,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM;YACpB,MAAM,GAAG,CACP,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,EAC3D,MAAM,CACP,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["import type { Backlog } from \"../../domain/backlog.types.ts\";\nimport { invariant } from \"../../domain/errors.ts\";\nimport type { Executor } from \"../../infrastructure/process.types.ts\";\nimport { cli } from \"./cli.ts\";\nimport { issue } from \"./issue.ts\";\nimport type { BacklogSettings } from \"./settings.types.ts\";\n\nexport function githubBacklog(\n settings: BacklogSettings = {},\n executor?: Executor,\n): Backlog {\n const run = cli(\"gh\", settings, executor);\n const identifier = (id: string) => {\n invariant(\n /^[1-9]\\d*$/.test(id),\n \"GitHub issue id must be a positive number\",\n );\n return id;\n };\n return {\n async list(signal) {\n const endpoint = `repos/{owner}/{repo}/issues?state=open&per_page=100${settings.label ? `&labels=${encodeURIComponent(settings.label)}` : \"\"}`;\n const pages: unknown = JSON.parse(\n await run([\"api\", endpoint, \"--paginate\", \"--slurp\"], signal),\n );\n invariant(\n Array.isArray(pages) && pages.every(Array.isArray),\n \"Invalid GitHub issue pages\",\n );\n return pages\n .flat()\n .filter((item) => !item.pull_request)\n .map(issue);\n },\n async get(id, signal) {\n return issue(\n JSON.parse(\n await run(\n [\"issue\", \"view\", identifier(id), \"--json\", \"number,title,body\"],\n signal,\n ),\n ),\n );\n },\n async close(id, signal) {\n await run(\n [\"issue\", \"close\", identifier(id), \"--reason\", \"completed\"],\n signal,\n );\n },\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ import type { Issue } from "../../domain/backlog.types.ts";
2
+ export declare function issue(input: unknown): Issue;