@ai-devkit/agent-manager 0.32.0 → 0.33.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 (519) hide show
  1. package/dist/AgentManager.d.ts +3 -3
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +80 -79
  4. package/dist/AgentManager.js.map +1 -1
  5. package/dist/__tests__/AgentManager.test.js +413 -388
  6. package/dist/__tests__/AgentManager.test.js.map +1 -1
  7. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +642 -642
  8. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +1 -1
  9. package/dist/__tests__/adapters/CodexAdapter.test.js +322 -2321
  10. package/dist/__tests__/adapters/CodexAdapter.test.js.map +1 -1
  11. package/dist/__tests__/adapters/CopilotAdapter.test.js +254 -248
  12. package/dist/__tests__/adapters/CopilotAdapter.test.js.map +1 -1
  13. package/dist/__tests__/adapters/GeminiCliAdapter.test.js +564 -558
  14. package/dist/__tests__/adapters/GeminiCliAdapter.test.js.map +1 -1
  15. package/dist/__tests__/adapters/GrokCliAdapter.test.js +114 -114
  16. package/dist/__tests__/adapters/GrokCliAdapter.test.js.map +1 -1
  17. package/dist/__tests__/adapters/OpenCodeAdapter.test.js +169 -169
  18. package/dist/__tests__/adapters/OpenCodeAdapter.test.js.map +1 -1
  19. package/dist/__tests__/capacity/codex.test.js +93 -93
  20. package/dist/__tests__/capacity/codex.test.js.map +1 -1
  21. package/dist/__tests__/capacity/index.test.js +17 -17
  22. package/dist/__tests__/capacity/index.test.js.map +1 -1
  23. package/dist/__tests__/durable/CodexCliProbe.test.js +60 -60
  24. package/dist/__tests__/durable/CodexCliProbe.test.js.map +1 -1
  25. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +28 -28
  26. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +1 -1
  27. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +30 -30
  28. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +1 -1
  29. package/dist/__tests__/durable/CodexPrintAgentService.test.js +71 -71
  30. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +1 -1
  31. package/dist/__tests__/durable/CodexPrintRunner.test.js +125 -125
  32. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +1 -1
  33. package/dist/__tests__/print/ClaudeCliProbe.test.js +20 -20
  34. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +1 -1
  35. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +20 -20
  36. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +1 -1
  37. package/dist/__tests__/print/ClaudePrintAgentService.test.js +58 -58
  38. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +1 -1
  39. package/dist/__tests__/print/ClaudePrintRunner.test.js +55 -55
  40. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +1 -1
  41. package/dist/__tests__/print/DurableAgent.test.js +9 -9
  42. package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
  43. package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js +40 -40
  44. package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js.map +1 -1
  45. package/dist/__tests__/print/DurableAgentRepository.test.js +66 -66
  46. package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
  47. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +34 -34
  48. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +1 -1
  49. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +132 -132
  50. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js.map +1 -1
  51. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +194 -0
  52. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +1 -0
  53. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js +86 -0
  54. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js.map +1 -0
  55. package/dist/__tests__/providers/codex/CodexSessionParser.test.js +254 -0
  56. package/dist/__tests__/providers/codex/CodexSessionParser.test.js.map +1 -0
  57. package/dist/__tests__/providers/pi/PiAdapter.test.js +337 -0
  58. package/dist/__tests__/providers/pi/PiAdapter.test.js.map +1 -0
  59. package/dist/__tests__/providers/pi/PiSessionParser.test.js +246 -0
  60. package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +1 -0
  61. package/dist/__tests__/providers/pi/PiSessionTracker.test.js +108 -0
  62. package/dist/__tests__/providers/pi/PiSessionTracker.test.js.map +1 -0
  63. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js +33 -33
  64. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js.map +1 -1
  65. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js +16 -16
  66. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
  67. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js +52 -52
  68. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js.map +1 -1
  69. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js +44 -44
  70. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js.map +1 -1
  71. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js +126 -126
  72. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js.map +1 -1
  73. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js +14 -14
  74. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js.map +1 -1
  75. package/dist/__tests__/readiness/AgentReadiness.test.js +134 -134
  76. package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
  77. package/dist/__tests__/runtime/AgentRuntime.test.js +13 -0
  78. package/dist/__tests__/runtime/AgentRuntime.test.js.map +1 -0
  79. package/dist/__tests__/runtime/HerdrAgentRuntime.test.js +452 -0
  80. package/dist/__tests__/runtime/HerdrAgentRuntime.test.js.map +1 -0
  81. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +588 -0
  82. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -0
  83. package/dist/__tests__/terminal/TerminalFocusManager.test.js +100 -100
  84. package/dist/__tests__/terminal/TerminalFocusManager.test.js.map +1 -1
  85. package/dist/__tests__/terminal/TmuxManager.test.js +101 -101
  86. package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
  87. package/dist/__tests__/terminal/TtyWriter.test.js +185 -185
  88. package/dist/__tests__/terminal/TtyWriter.test.js.map +1 -1
  89. package/dist/__tests__/utils/AgentRegistry.test.js +335 -217
  90. package/dist/__tests__/utils/AgentRegistry.test.js.map +1 -1
  91. package/dist/__tests__/utils/ClaudeSessionParser.test.js +103 -101
  92. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +1 -1
  93. package/dist/__tests__/utils/agent-requests.test.js +43 -43
  94. package/dist/__tests__/utils/agent-requests.test.js.map +1 -1
  95. package/dist/__tests__/utils/agents.test.js +17 -17
  96. package/dist/__tests__/utils/agents.test.js.map +1 -1
  97. package/dist/__tests__/utils/matching.test.js +92 -92
  98. package/dist/__tests__/utils/matching.test.js.map +1 -1
  99. package/dist/__tests__/utils/process.test.js +108 -108
  100. package/dist/__tests__/utils/process.test.js.map +1 -1
  101. package/dist/__tests__/utils/session.test.js +53 -53
  102. package/dist/__tests__/utils/session.test.js.map +1 -1
  103. package/dist/adapters/AgentAdapter.d.ts +2 -2
  104. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  105. package/dist/adapters/AgentAdapter.js +1 -1
  106. package/dist/adapters/AgentAdapter.js.map +1 -1
  107. package/dist/adapters/CopilotAdapter.d.ts +2 -2
  108. package/dist/adapters/CopilotAdapter.d.ts.map +1 -1
  109. package/dist/adapters/CopilotAdapter.js +51 -51
  110. package/dist/adapters/CopilotAdapter.js.map +1 -1
  111. package/dist/adapters/GeminiCliAdapter.d.ts +2 -2
  112. package/dist/adapters/GeminiCliAdapter.d.ts.map +1 -1
  113. package/dist/adapters/GeminiCliAdapter.js +86 -86
  114. package/dist/adapters/GeminiCliAdapter.js.map +1 -1
  115. package/dist/adapters/GrokCliAdapter.d.ts +1 -1
  116. package/dist/adapters/GrokCliAdapter.d.ts.map +1 -1
  117. package/dist/adapters/GrokCliAdapter.js +80 -80
  118. package/dist/adapters/GrokCliAdapter.js.map +1 -1
  119. package/dist/adapters/OpenCodeAdapter.d.ts +1 -1
  120. package/dist/adapters/OpenCodeAdapter.d.ts.map +1 -1
  121. package/dist/adapters/OpenCodeAdapter.js +37 -36
  122. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  123. package/dist/adapters/index.d.ts +9 -9
  124. package/dist/adapters/index.d.ts.map +1 -1
  125. package/dist/adapters/index.js +8 -8
  126. package/dist/adapters/index.js.map +1 -1
  127. package/dist/capacity/codex.d.ts +3 -3
  128. package/dist/capacity/codex.d.ts.map +1 -1
  129. package/dist/capacity/codex.js +57 -57
  130. package/dist/capacity/codex.js.map +1 -1
  131. package/dist/capacity/index.d.ts +3 -3
  132. package/dist/capacity/index.d.ts.map +1 -1
  133. package/dist/capacity/index.js +8 -8
  134. package/dist/capacity/index.js.map +1 -1
  135. package/dist/capacity/types.d.ts +1 -1
  136. package/dist/capacity/types.js.map +1 -1
  137. package/dist/database/connection.d.ts +1 -1
  138. package/dist/database/connection.d.ts.map +1 -1
  139. package/dist/database/connection.js +15 -15
  140. package/dist/database/connection.js.map +1 -1
  141. package/dist/database/index.d.ts +3 -3
  142. package/dist/database/index.d.ts.map +1 -1
  143. package/dist/database/index.js +2 -2
  144. package/dist/database/index.js.map +1 -1
  145. package/dist/database/migrations/005_agent_runtime.sql +2 -0
  146. package/dist/database/schema.d.ts +1 -1
  147. package/dist/database/schema.d.ts.map +1 -1
  148. package/dist/database/schema.js +7 -7
  149. package/dist/database/schema.js.map +1 -1
  150. package/dist/durable/DurableAgent.d.ts +9 -9
  151. package/dist/durable/DurableAgent.d.ts.map +1 -1
  152. package/dist/durable/DurableAgent.js +16 -16
  153. package/dist/durable/DurableAgent.js.map +1 -1
  154. package/dist/durable/DurableAgentRepository.d.ts +4 -4
  155. package/dist/durable/DurableAgentRepository.d.ts.map +1 -1
  156. package/dist/durable/DurableAgentRepository.js +49 -48
  157. package/dist/durable/DurableAgentRepository.js.map +1 -1
  158. package/dist/durable/process.d.ts +1 -1
  159. package/dist/durable/process.d.ts.map +1 -1
  160. package/dist/durable/process.js +14 -14
  161. package/dist/durable/process.js.map +1 -1
  162. package/dist/durable/run.d.ts +2 -2
  163. package/dist/durable/run.d.ts.map +1 -1
  164. package/dist/durable/run.js +6 -6
  165. package/dist/durable/run.js.map +1 -1
  166. package/dist/durable/utils.d.ts +1 -1
  167. package/dist/durable/utils.d.ts.map +1 -1
  168. package/dist/durable/utils.js +4 -4
  169. package/dist/durable/utils.js.map +1 -1
  170. package/dist/index.d.ts +46 -43
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +27 -26
  173. package/dist/index.js.map +1 -1
  174. package/dist/providers/claude/ClaudeAgentMapper.d.ts +4 -4
  175. package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +1 -1
  176. package/dist/providers/claude/ClaudeAgentMapper.js +10 -10
  177. package/dist/providers/claude/ClaudeAgentMapper.js.map +1 -1
  178. package/dist/providers/claude/ClaudeCodeAdapter.d.ts +1 -1
  179. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +1 -1
  180. package/dist/providers/claude/ClaudeCodeAdapter.js +14 -14
  181. package/dist/providers/claude/ClaudeCodeAdapter.js.map +1 -1
  182. package/dist/providers/claude/ClaudeSessionLocator.d.ts +4 -4
  183. package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +1 -1
  184. package/dist/providers/claude/ClaudeSessionLocator.js +79 -79
  185. package/dist/providers/claude/ClaudeSessionLocator.js.map +1 -1
  186. package/dist/providers/claude/ClaudeSessionParser.d.ts +2 -2
  187. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +1 -1
  188. package/dist/providers/claude/ClaudeSessionParser.js +99 -99
  189. package/dist/providers/claude/ClaudeSessionParser.js.map +1 -1
  190. package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
  191. package/dist/providers/claude/durable/ClaudeCliProbe.js +16 -16
  192. package/dist/providers/claude/durable/ClaudeCliProbe.js.map +1 -1
  193. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts +5 -5
  194. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
  195. package/dist/providers/claude/durable/ClaudePrintAgentService.js +10 -10
  196. package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +1 -1
  197. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts +4 -4
  198. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
  199. package/dist/providers/claude/durable/ClaudePrintRunner.js +18 -18
  200. package/dist/providers/claude/durable/ClaudePrintRunner.js.map +1 -1
  201. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts +2 -2
  202. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
  203. package/dist/providers/claude/durable/ClaudeStreamParser.js +17 -17
  204. package/dist/providers/claude/durable/ClaudeStreamParser.js.map +1 -1
  205. package/dist/providers/codex/CodexAdapter.d.ts +27 -0
  206. package/dist/providers/codex/CodexAdapter.d.ts.map +1 -0
  207. package/dist/providers/codex/CodexAdapter.js +162 -0
  208. package/dist/providers/codex/CodexAdapter.js.map +1 -0
  209. package/dist/providers/codex/CodexAgentMapper.d.ts +9 -0
  210. package/dist/providers/codex/CodexAgentMapper.d.ts.map +1 -0
  211. package/dist/providers/codex/CodexAgentMapper.js +35 -0
  212. package/dist/providers/codex/CodexAgentMapper.js.map +1 -0
  213. package/dist/providers/codex/CodexSessionLocator.d.ts +44 -0
  214. package/dist/providers/codex/CodexSessionLocator.d.ts.map +1 -0
  215. package/dist/providers/codex/CodexSessionLocator.js +207 -0
  216. package/dist/providers/codex/CodexSessionLocator.js.map +1 -0
  217. package/dist/providers/codex/CodexSessionMapping.d.ts +23 -0
  218. package/dist/providers/codex/CodexSessionMapping.d.ts.map +1 -0
  219. package/dist/providers/codex/CodexSessionMapping.js +68 -0
  220. package/dist/providers/codex/CodexSessionMapping.js.map +1 -0
  221. package/dist/providers/codex/CodexSessionParser.d.ts +58 -0
  222. package/dist/providers/codex/CodexSessionParser.d.ts.map +1 -0
  223. package/dist/providers/codex/CodexSessionParser.js +262 -0
  224. package/dist/providers/codex/CodexSessionParser.js.map +1 -0
  225. package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +1 -1
  226. package/dist/providers/codex/durable/CodexCliProbe.js +22 -22
  227. package/dist/providers/codex/durable/CodexCliProbe.js.map +1 -1
  228. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts +6 -6
  229. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
  230. package/dist/providers/codex/durable/CodexPrintAgentService.js +10 -10
  231. package/dist/providers/codex/durable/CodexPrintAgentService.js.map +1 -1
  232. package/dist/providers/codex/durable/CodexPrintRunner.d.ts +4 -4
  233. package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +1 -1
  234. package/dist/providers/codex/durable/CodexPrintRunner.js +20 -20
  235. package/dist/providers/codex/durable/CodexPrintRunner.js.map +1 -1
  236. package/dist/providers/codex/durable/CodexStreamParser.d.ts +2 -2
  237. package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +1 -1
  238. package/dist/providers/codex/durable/CodexStreamParser.js +21 -21
  239. package/dist/providers/codex/durable/CodexStreamParser.js.map +1 -1
  240. package/dist/providers/pi/PiAdapter.d.ts +28 -0
  241. package/dist/providers/pi/PiAdapter.d.ts.map +1 -0
  242. package/dist/providers/pi/PiAdapter.js +153 -0
  243. package/dist/providers/pi/PiAdapter.js.map +1 -0
  244. package/dist/providers/pi/PiAgentMapper.d.ts +9 -0
  245. package/dist/providers/pi/PiAgentMapper.d.ts.map +1 -0
  246. package/dist/providers/pi/PiAgentMapper.js +37 -0
  247. package/dist/providers/pi/PiAgentMapper.js.map +1 -0
  248. package/dist/providers/pi/PiSessionLocator.d.ts +23 -0
  249. package/dist/providers/pi/PiSessionLocator.d.ts.map +1 -0
  250. package/dist/providers/pi/PiSessionLocator.js +79 -0
  251. package/dist/providers/pi/PiSessionLocator.js.map +1 -0
  252. package/dist/providers/pi/PiSessionParser.d.ts +36 -0
  253. package/dist/providers/pi/PiSessionParser.d.ts.map +1 -0
  254. package/dist/providers/pi/PiSessionParser.js +191 -0
  255. package/dist/providers/pi/PiSessionParser.js.map +1 -0
  256. package/dist/providers/pi/PiSessionTracker.d.ts +23 -0
  257. package/dist/providers/pi/PiSessionTracker.d.ts.map +1 -0
  258. package/dist/providers/pi/PiSessionTracker.js +69 -0
  259. package/dist/providers/pi/PiSessionTracker.js.map +1 -0
  260. package/dist/providers/pi/durable/PiCliProbe.d.ts.map +1 -1
  261. package/dist/providers/pi/durable/PiCliProbe.js +15 -15
  262. package/dist/providers/pi/durable/PiCliProbe.js.map +1 -1
  263. package/dist/providers/pi/durable/PiPrintAgentService.d.ts +6 -6
  264. package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +1 -1
  265. package/dist/providers/pi/durable/PiPrintAgentService.js +10 -10
  266. package/dist/providers/pi/durable/PiPrintAgentService.js.map +1 -1
  267. package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +1 -1
  268. package/dist/providers/pi/durable/PiPrintProtocol.js +18 -18
  269. package/dist/providers/pi/durable/PiPrintProtocol.js.map +1 -1
  270. package/dist/providers/pi/durable/PiPrintRunner.d.ts +4 -4
  271. package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +1 -1
  272. package/dist/providers/pi/durable/PiPrintRunner.js +15 -15
  273. package/dist/providers/pi/durable/PiPrintRunner.js.map +1 -1
  274. package/dist/providers/pi/durable/PiStreamParser.d.ts +1 -1
  275. package/dist/providers/pi/durable/PiStreamParser.d.ts.map +1 -1
  276. package/dist/providers/pi/durable/PiStreamParser.js +16 -16
  277. package/dist/providers/pi/durable/PiStreamParser.js.map +1 -1
  278. package/dist/readiness/AgentReadiness.d.ts +6 -6
  279. package/dist/readiness/AgentReadiness.d.ts.map +1 -1
  280. package/dist/readiness/AgentReadiness.js +130 -130
  281. package/dist/readiness/AgentReadiness.js.map +1 -1
  282. package/dist/runtime/ManagedAgentRuntime.d.ts +69 -0
  283. package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -0
  284. package/dist/runtime/ManagedAgentRuntime.js +156 -0
  285. package/dist/runtime/ManagedAgentRuntime.js.map +1 -0
  286. package/dist/runtime/RuntimeFactory.d.ts +4 -0
  287. package/dist/runtime/RuntimeFactory.d.ts.map +1 -0
  288. package/dist/runtime/RuntimeFactory.js +11 -0
  289. package/dist/runtime/RuntimeFactory.js.map +1 -0
  290. package/dist/runtime/errors.d.ts +27 -0
  291. package/dist/runtime/errors.d.ts.map +1 -0
  292. package/dist/runtime/errors.js +42 -0
  293. package/dist/runtime/errors.js.map +1 -0
  294. package/dist/runtime/herdr/HerdrAgentRuntime.d.ts +31 -0
  295. package/dist/runtime/herdr/HerdrAgentRuntime.d.ts.map +1 -0
  296. package/dist/runtime/herdr/HerdrAgentRuntime.js +184 -0
  297. package/dist/runtime/herdr/HerdrAgentRuntime.js.map +1 -0
  298. package/dist/runtime/herdr/HerdrCliClient.d.ts +13 -0
  299. package/dist/runtime/herdr/HerdrCliClient.d.ts.map +1 -0
  300. package/dist/runtime/herdr/HerdrCliClient.js +60 -0
  301. package/dist/runtime/herdr/HerdrCliClient.js.map +1 -0
  302. package/dist/runtime/herdr/HerdrErrors.d.ts +7 -0
  303. package/dist/runtime/herdr/HerdrErrors.d.ts.map +1 -0
  304. package/dist/runtime/herdr/HerdrErrors.js +10 -0
  305. package/dist/runtime/herdr/HerdrErrors.js.map +1 -0
  306. package/dist/runtime/herdr/HerdrResponseParsers.d.ts +14 -0
  307. package/dist/runtime/herdr/HerdrResponseParsers.d.ts.map +1 -0
  308. package/dist/runtime/herdr/HerdrResponseParsers.js +96 -0
  309. package/dist/runtime/herdr/HerdrResponseParsers.js.map +1 -0
  310. package/dist/runtime/herdr/HerdrRuntimeRef.d.ts +9 -0
  311. package/dist/runtime/herdr/HerdrRuntimeRef.d.ts.map +1 -0
  312. package/dist/runtime/herdr/HerdrRuntimeRef.js +33 -0
  313. package/dist/runtime/herdr/HerdrRuntimeRef.js.map +1 -0
  314. package/dist/runtime/tmux/PidPolling.d.ts +5 -0
  315. package/dist/runtime/tmux/PidPolling.d.ts.map +1 -0
  316. package/dist/runtime/tmux/PidPolling.js +24 -0
  317. package/dist/runtime/tmux/PidPolling.js.map +1 -0
  318. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +17 -0
  319. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -0
  320. package/dist/runtime/tmux/TmuxAgentRuntime.js +80 -0
  321. package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -0
  322. package/dist/runtime/tmux/TmuxRuntimeRef.d.ts +5 -0
  323. package/dist/runtime/tmux/TmuxRuntimeRef.d.ts.map +1 -0
  324. package/dist/runtime/tmux/TmuxRuntimeRef.js +9 -0
  325. package/dist/runtime/tmux/TmuxRuntimeRef.js.map +1 -0
  326. package/dist/runtime/types.d.ts +54 -0
  327. package/dist/runtime/types.d.ts.map +1 -0
  328. package/dist/runtime/types.js +3 -0
  329. package/dist/runtime/types.js.map +1 -0
  330. package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
  331. package/dist/terminal/TerminalFocusManager.js +50 -50
  332. package/dist/terminal/TerminalFocusManager.js.map +1 -1
  333. package/dist/terminal/TmuxManager.d.ts.map +1 -1
  334. package/dist/terminal/TmuxManager.js +47 -47
  335. package/dist/terminal/TmuxManager.js.map +1 -1
  336. package/dist/terminal/TtyWriter.d.ts +1 -1
  337. package/dist/terminal/TtyWriter.d.ts.map +1 -1
  338. package/dist/terminal/TtyWriter.js +89 -89
  339. package/dist/terminal/TtyWriter.js.map +1 -1
  340. package/dist/terminal/index.d.ts +4 -4
  341. package/dist/terminal/index.js +3 -3
  342. package/dist/terminal/index.js.map +1 -1
  343. package/dist/utils/AgentRegistry.d.ts +10 -2
  344. package/dist/utils/AgentRegistry.d.ts.map +1 -1
  345. package/dist/utils/AgentRegistry.js +57 -24
  346. package/dist/utils/AgentRegistry.js.map +1 -1
  347. package/dist/utils/agent-requests.d.ts.map +1 -1
  348. package/dist/utils/agent-requests.js +5 -5
  349. package/dist/utils/agent-requests.js.map +1 -1
  350. package/dist/utils/agents.d.ts +2 -2
  351. package/dist/utils/agents.d.ts.map +1 -1
  352. package/dist/utils/agents.js +15 -15
  353. package/dist/utils/agents.js.map +1 -1
  354. package/dist/utils/applescript.js +1 -1
  355. package/dist/utils/applescript.js.map +1 -1
  356. package/dist/utils/index.d.ts +6 -6
  357. package/dist/utils/index.d.ts.map +1 -1
  358. package/dist/utils/index.js +4 -4
  359. package/dist/utils/index.js.map +1 -1
  360. package/dist/utils/matching.d.ts +2 -2
  361. package/dist/utils/matching.d.ts.map +1 -1
  362. package/dist/utils/matching.js +4 -4
  363. package/dist/utils/matching.js.map +1 -1
  364. package/dist/utils/process.d.ts +1 -1
  365. package/dist/utils/process.d.ts.map +1 -1
  366. package/dist/utils/process.js +74 -74
  367. package/dist/utils/process.js.map +1 -1
  368. package/dist/utils/session.d.ts +1 -1
  369. package/dist/utils/session.d.ts.map +1 -1
  370. package/dist/utils/session.js +7 -7
  371. package/dist/utils/session.js.map +1 -1
  372. package/dist/utils/sortAgents.d.ts +2 -2
  373. package/dist/utils/sortAgents.d.ts.map +1 -1
  374. package/dist/utils/sortAgents.js +5 -5
  375. package/dist/utils/sortAgents.js.map +1 -1
  376. package/package.json +18 -19
  377. package/src/AgentManager.ts +283 -281
  378. package/src/__tests__/AgentManager.test.ts +917 -907
  379. package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +1657 -1368
  380. package/src/__tests__/adapters/CodexAdapter.test.ts +365 -1698
  381. package/src/__tests__/adapters/CopilotAdapter.test.ts +576 -481
  382. package/src/__tests__/adapters/GeminiCliAdapter.test.ts +1189 -1157
  383. package/src/__tests__/adapters/GrokCliAdapter.test.ts +325 -272
  384. package/src/__tests__/adapters/OpenCodeAdapter.test.ts +510 -455
  385. package/src/__tests__/capacity/codex.test.ts +178 -91
  386. package/src/__tests__/capacity/index.test.ts +27 -18
  387. package/src/__tests__/durable/CodexCliProbe.test.ts +75 -53
  388. package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +51 -40
  389. package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +89 -64
  390. package/src/__tests__/durable/CodexPrintAgentService.test.ts +196 -118
  391. package/src/__tests__/durable/CodexPrintRunner.test.ts +282 -162
  392. package/src/__tests__/fixtures/fake-claude.cjs +20 -13
  393. package/src/__tests__/fixtures/fake-codex.cjs +41 -30
  394. package/src/__tests__/print/ClaudeCliProbe.test.ts +27 -21
  395. package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +48 -40
  396. package/src/__tests__/print/ClaudePrintAgentService.test.ts +118 -67
  397. package/src/__tests__/print/ClaudePrintRunner.test.ts +136 -83
  398. package/src/__tests__/print/DurableAgent.test.ts +19 -16
  399. package/src/__tests__/print/DurableAgentRepository.sqlite.test.ts +109 -86
  400. package/src/__tests__/print/DurableAgentRepository.test.ts +170 -137
  401. package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +65 -65
  402. package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +400 -377
  403. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +182 -0
  404. package/src/__tests__/providers/codex/CodexSessionMapping.test.ts +63 -0
  405. package/src/__tests__/providers/codex/CodexSessionParser.test.ts +192 -0
  406. package/src/__tests__/providers/pi/PiAdapter.test.ts +310 -0
  407. package/src/__tests__/providers/pi/PiSessionParser.test.ts +190 -0
  408. package/src/__tests__/providers/pi/PiSessionTracker.test.ts +79 -0
  409. package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +48 -32
  410. package/src/__tests__/providers/pi/durable/PiDurableAgentRepository.test.ts +24 -23
  411. package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +131 -59
  412. package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +66 -28
  413. package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +236 -90
  414. package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +20 -18
  415. package/src/__tests__/readiness/AgentReadiness.test.ts +217 -169
  416. package/src/__tests__/runtime/AgentRuntime.test.ts +8 -0
  417. package/src/__tests__/runtime/HerdrAgentRuntime.test.ts +358 -0
  418. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +555 -0
  419. package/src/__tests__/terminal/TerminalFocusManager.test.ts +254 -253
  420. package/src/__tests__/terminal/TmuxManager.test.ts +157 -157
  421. package/src/__tests__/terminal/TtyWriter.test.ts +423 -419
  422. package/src/__tests__/utils/AgentRegistry.test.ts +506 -402
  423. package/src/__tests__/utils/ClaudeSessionParser.test.ts +276 -242
  424. package/src/__tests__/utils/agent-requests.test.ts +76 -56
  425. package/src/__tests__/utils/agents.test.ts +20 -20
  426. package/src/__tests__/utils/matching.test.ts +206 -171
  427. package/src/__tests__/utils/process.test.ts +276 -262
  428. package/src/__tests__/utils/session.test.ts +133 -139
  429. package/src/adapters/AgentAdapter.ts +134 -126
  430. package/src/adapters/CopilotAdapter.ts +405 -395
  431. package/src/adapters/GeminiCliAdapter.ts +598 -600
  432. package/src/adapters/GrokCliAdapter.ts +353 -342
  433. package/src/adapters/OpenCodeAdapter.ts +285 -259
  434. package/src/adapters/index.ts +15 -9
  435. package/src/capacity/codex.ts +137 -84
  436. package/src/capacity/index.ts +18 -13
  437. package/src/capacity/types.ts +1 -1
  438. package/src/database/connection.ts +73 -68
  439. package/src/database/index.ts +6 -6
  440. package/src/database/migrations/005_agent_runtime.sql +2 -0
  441. package/src/database/schema.ts +40 -38
  442. package/src/durable/DurableAgent.ts +85 -85
  443. package/src/durable/DurableAgentRepository.ts +409 -260
  444. package/src/durable/process.ts +22 -21
  445. package/src/durable/run.ts +61 -51
  446. package/src/durable/utils.ts +46 -41
  447. package/src/index.ts +144 -103
  448. package/src/providers/claude/ClaudeAgentMapper.ts +51 -50
  449. package/src/providers/claude/ClaudeCodeAdapter.ts +144 -136
  450. package/src/providers/claude/ClaudeSessionLocator.ts +291 -293
  451. package/src/providers/claude/ClaudeSessionParser.ts +322 -338
  452. package/src/providers/claude/durable/ClaudeCliProbe.ts +42 -37
  453. package/src/providers/claude/durable/ClaudePrintAgentService.ts +63 -50
  454. package/src/providers/claude/durable/ClaudePrintRunner.ts +79 -69
  455. package/src/providers/claude/durable/ClaudeStreamParser.ts +91 -62
  456. package/src/providers/codex/CodexAdapter.ts +205 -0
  457. package/src/providers/codex/CodexAgentMapper.ts +35 -0
  458. package/src/providers/codex/CodexSessionLocator.ts +279 -0
  459. package/src/providers/codex/CodexSessionMapping.ts +89 -0
  460. package/src/providers/codex/CodexSessionParser.ts +385 -0
  461. package/src/providers/codex/durable/CodexCliProbe.ts +50 -42
  462. package/src/providers/codex/durable/CodexPrintAgentService.ts +63 -49
  463. package/src/providers/codex/durable/CodexPrintRunner.ts +79 -69
  464. package/src/providers/codex/durable/CodexStreamParser.ts +97 -84
  465. package/src/providers/pi/PiAdapter.ts +183 -0
  466. package/src/providers/pi/PiAgentMapper.ts +36 -0
  467. package/src/providers/pi/PiSessionLocator.ts +95 -0
  468. package/src/providers/pi/PiSessionParser.ts +284 -0
  469. package/src/providers/pi/PiSessionTracker.ts +87 -0
  470. package/src/providers/pi/durable/PiCliProbe.ts +42 -34
  471. package/src/providers/pi/durable/PiPrintAgentService.ts +61 -53
  472. package/src/providers/pi/durable/PiPrintProtocol.ts +31 -29
  473. package/src/providers/pi/durable/PiPrintRunner.ts +75 -68
  474. package/src/providers/pi/durable/PiStreamParser.ts +82 -72
  475. package/src/readiness/AgentReadiness.ts +585 -513
  476. package/src/runtime/ManagedAgentRuntime.ts +266 -0
  477. package/src/runtime/RuntimeFactory.ts +13 -0
  478. package/src/runtime/errors.ts +50 -0
  479. package/src/runtime/herdr/HerdrAgentRuntime.ts +190 -0
  480. package/src/runtime/herdr/HerdrCliClient.ts +78 -0
  481. package/src/runtime/herdr/HerdrErrors.ts +9 -0
  482. package/src/runtime/herdr/HerdrResponseParsers.ts +76 -0
  483. package/src/runtime/herdr/HerdrRuntimeRef.ts +41 -0
  484. package/src/runtime/tmux/PidPolling.ts +34 -0
  485. package/src/runtime/tmux/TmuxAgentRuntime.ts +113 -0
  486. package/src/runtime/tmux/TmuxRuntimeRef.ts +9 -0
  487. package/src/runtime/types.ts +56 -0
  488. package/src/terminal/TerminalFocusManager.ts +215 -212
  489. package/src/terminal/TmuxManager.ts +99 -92
  490. package/src/terminal/TtyWriter.ts +203 -194
  491. package/src/terminal/index.ts +4 -4
  492. package/src/utils/AgentRegistry.ts +299 -238
  493. package/src/utils/agent-requests.ts +16 -16
  494. package/src/utils/agents.ts +41 -38
  495. package/src/utils/applescript.ts +4 -4
  496. package/src/utils/index.ts +12 -6
  497. package/src/utils/matching.ts +43 -43
  498. package/src/utils/process.ts +261 -258
  499. package/src/utils/session.ts +66 -66
  500. package/src/utils/sortAgents.ts +35 -33
  501. package/tsconfig.json +2 -8
  502. package/vitest.config.ts +16 -16
  503. package/.eslintrc.json +0 -31
  504. package/dist/__tests__/adapters/PiAdapter.test.js +0 -618
  505. package/dist/__tests__/adapters/PiAdapter.test.js.map +0 -1
  506. package/dist/__tests__/database/DurableAgentsDatabase.test.js +0 -128
  507. package/dist/__tests__/database/DurableAgentsDatabase.test.js.map +0 -1
  508. package/dist/adapters/CodexAdapter.d.ts +0 -109
  509. package/dist/adapters/CodexAdapter.d.ts.map +0 -1
  510. package/dist/adapters/CodexAdapter.js +0 -710
  511. package/dist/adapters/CodexAdapter.js.map +0 -1
  512. package/dist/adapters/PiAdapter.d.ts +0 -63
  513. package/dist/adapters/PiAdapter.d.ts.map +0 -1
  514. package/dist/adapters/PiAdapter.js +0 -453
  515. package/dist/adapters/PiAdapter.js.map +0 -1
  516. package/src/__tests__/adapters/PiAdapter.test.ts +0 -458
  517. package/src/__tests__/database/DurableAgentsDatabase.test.ts +0 -102
  518. package/src/adapters/CodexAdapter.ts +0 -923
  519. package/src/adapters/PiAdapter.ts +0 -598
@@ -1,9 +1,9 @@
1
- import fs from 'node:fs';
2
- import os from 'node:os';
3
- import path from 'node:path';
4
- import { afterEach, describe, expect, it, vi } from 'vitest';
5
- import { CodexPrintError, CodexPrintAgentService, DurableAgentRepository } from '../../index.js';
6
- const SESSION = '22222222-2222-4222-8222-222222222222';
1
+ import fs from "node:fs";
2
+ import os from "node:os";
3
+ import path from "node:path";
4
+ import { afterEach, describe, expect, it, vi } from "vitest";
5
+ import { CodexPrintError, CodexPrintAgentService, DurableAgentRepository } from "../../index.js";
6
+ const SESSION = "22222222-2222-4222-8222-222222222222";
7
7
  const roots = [];
8
8
  afterEach(()=>{
9
9
  for (const root of roots.splice(0))fs.rmSync(root, {
@@ -11,11 +11,11 @@ afterEach(()=>{
11
11
  force: true
12
12
  });
13
13
  });
14
- describe('Codex print-agent fake-provider journey', ()=>{
15
- it('creates unbound, then binds and explicitly resumes the provider-minted session', async ()=>{
16
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'codex-print-integration-'));
14
+ describe("Codex print-agent fake-provider journey", ()=>{
15
+ it("creates unbound, then binds and explicitly resumes the provider-minted session", async ()=>{
16
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "codex-print-integration-"));
17
17
  roots.push(root);
18
- const cwd = path.join(root, 'project');
18
+ const cwd = path.join(root, "project");
19
19
  fs.mkdirSync(cwd);
20
20
  const processInspector = {
21
21
  getIdentity: (pid)=>({
@@ -24,14 +24,14 @@ describe('Codex print-agent fake-provider journey', ()=>{
24
24
  })
25
25
  };
26
26
  const repository = new DurableAgentRepository({
27
- dbPath: path.join(root, 'agents.db'),
27
+ dbPath: path.join(root, "agents.db"),
28
28
  processInspector
29
29
  });
30
30
  const runner = {
31
31
  run: vi.fn().mockImplementation(async (request)=>{
32
32
  await request.onSpawn({
33
33
  pid: 42,
34
- startedAt: 'process-42'
34
+ startedAt: "process-42"
35
35
  });
36
36
  await request.onSession(SESSION);
37
37
  return {
@@ -52,22 +52,22 @@ describe('Codex print-agent fake-provider journey', ()=>{
52
52
  runner
53
53
  });
54
54
  const created = await service.create({
55
- name: 'reviewer',
55
+ name: "reviewer",
56
56
  cwd
57
57
  });
58
58
  expect(created).toMatchObject({
59
- provider: 'codex',
59
+ provider: "codex",
60
60
  providerSessionId: null,
61
- sessionHealth: 'uninitialized'
61
+ sessionHealth: "uninitialized"
62
62
  });
63
- const first = await service.send(created.id, 'first secret');
63
+ const first = await service.send(created.id, "first secret");
64
64
  expect(first).toMatchObject({
65
- result: 'answer:first secret'
65
+ result: "answer:first secret"
66
66
  });
67
67
  const bound = await repository.getById(created.id);
68
68
  expect(bound?.providerSessionId).toBe(first.sessionId);
69
- await expect(service.send(created.id, 'follow up')).resolves.toMatchObject({
70
- result: 'answer:follow up'
69
+ await expect(service.send(created.id, "follow up")).resolves.toMatchObject({
70
+ result: "answer:follow up"
71
71
  });
72
72
  expect(runner.run.mock.calls[0][0].agent).toMatchObject({
73
73
  providerSessionId: null
@@ -76,10 +76,10 @@ describe('Codex print-agent fake-provider journey', ()=>{
76
76
  providerSessionId: SESSION
77
77
  });
78
78
  });
79
- it('retains a first-run binding when the provider fails after thread start', async ()=>{
80
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'codex-print-bind-failure-'));
79
+ it("retains a first-run binding when the provider fails after thread start", async ()=>{
80
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "codex-print-bind-failure-"));
81
81
  roots.push(root);
82
- const cwd = path.join(root, 'project');
82
+ const cwd = path.join(root, "project");
83
83
  fs.mkdirSync(cwd);
84
84
  const processInspector = {
85
85
  getIdentity: (pid)=>({
@@ -88,17 +88,17 @@ describe('Codex print-agent fake-provider journey', ()=>{
88
88
  })
89
89
  };
90
90
  const repository = new DurableAgentRepository({
91
- dbPath: path.join(root, 'agents.db'),
91
+ dbPath: path.join(root, "agents.db"),
92
92
  processInspector
93
93
  });
94
94
  const runner = {
95
95
  run: vi.fn().mockImplementation(async (request)=>{
96
96
  await request.onSpawn({
97
97
  pid: 42,
98
- startedAt: 'process-42'
98
+ startedAt: "process-42"
99
99
  });
100
100
  await request.onSession(SESSION);
101
- throw new CodexPrintError('Codex print run failed.', 'CODEX_PROCESS');
101
+ throw new CodexPrintError("Codex print run failed.", "CODEX_PROCESS");
102
102
  })
103
103
  };
104
104
  const service = new CodexPrintAgentService({
@@ -109,16 +109,16 @@ describe('Codex print-agent fake-provider journey', ()=>{
109
109
  runner
110
110
  });
111
111
  const created = await service.create({
112
- name: 'reviewer',
112
+ name: "reviewer",
113
113
  cwd
114
114
  });
115
- await expect(service.send(created.id, 'secret')).rejects.toMatchObject({
116
- code: 'CODEX_PROCESS'
115
+ await expect(service.send(created.id, "secret")).rejects.toMatchObject({
116
+ code: "CODEX_PROCESS"
117
117
  });
118
118
  expect(await repository.getById(created.id)).toMatchObject({
119
119
  providerSessionId: SESSION,
120
- state: 'degraded',
121
- sessionHealth: 'unknown'
120
+ state: "degraded",
121
+ sessionHealth: "unknown"
122
122
  });
123
123
  });
124
124
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__tests__/durable/CodexPrintAgent.integration.test.ts"],"sourcesContent":["import fs from 'node:fs';\nimport os from 'node:os';\nimport path from 'node:path';\nimport { afterEach, describe, expect, it, vi } from 'vitest';\nimport {\n CodexPrintError,\n CodexPrintAgentService,\n DurableAgentRepository,\n type ProcessInspector,\n} from '../../index.js';\n\nconst SESSION = '22222222-2222-4222-8222-222222222222';\nconst roots: string[] = [];\n\nafterEach(() => {\n for (const root of roots.splice(0)) fs.rmSync(root, { recursive: true, force: true });\n});\n\ndescribe('Codex print-agent fake-provider journey', () => {\n it('creates unbound, then binds and explicitly resumes the provider-minted session', async () => {\n const root = fs.mkdtempSync(path.join(os.tmpdir(), 'codex-print-integration-'));\n roots.push(root);\n const cwd = path.join(root, 'project');\n fs.mkdirSync(cwd);\n const processInspector: ProcessInspector = {\n getIdentity: (pid) => ({ pid, startedAt: `process-${pid}` }),\n };\n const repository = new DurableAgentRepository({ dbPath: path.join(root, 'agents.db'), processInspector });\n const runner = {\n run: vi.fn().mockImplementation(async (request) => {\n await request.onSpawn({ pid: 42, startedAt: 'process-42' });\n await request.onSession(SESSION);\n return { sessionId: SESSION, result: `answer:${request.prompt}`, messages: [`answer:${request.prompt}`], exitCode: 0 };\n }),\n };\n const service = new CodexPrintAgentService({\n repository, probe: { validate: vi.fn() }, runner,\n });\n\n const created = await service.create({ name: 'reviewer', cwd });\n expect(created).toMatchObject({ provider: 'codex', providerSessionId: null, sessionHealth: 'uninitialized' });\n\n const first = await service.send(created.id, 'first secret');\n expect(first).toMatchObject({ result: 'answer:first secret' });\n const bound = await repository.getById(created.id);\n expect(bound?.providerSessionId).toBe(first.sessionId);\n await expect(service.send(created.id, 'follow up')).resolves.toMatchObject({ result: 'answer:follow up' });\n\n expect(runner.run.mock.calls[0][0].agent).toMatchObject({ providerSessionId: null });\n expect(runner.run.mock.calls[1][0].agent).toMatchObject({ providerSessionId: SESSION });\n });\n\n it('retains a first-run binding when the provider fails after thread start', async () => {\n const root = fs.mkdtempSync(path.join(os.tmpdir(), 'codex-print-bind-failure-'));\n roots.push(root);\n const cwd = path.join(root, 'project');\n fs.mkdirSync(cwd);\n const processInspector: ProcessInspector = {\n getIdentity: (pid) => ({ pid, startedAt: `process-${pid}` }),\n };\n const repository = new DurableAgentRepository({ dbPath: path.join(root, 'agents.db'), processInspector });\n const runner = {\n run: vi.fn().mockImplementation(async (request) => {\n await request.onSpawn({ pid: 42, startedAt: 'process-42' });\n await request.onSession(SESSION);\n throw new CodexPrintError('Codex print run failed.', 'CODEX_PROCESS');\n }),\n };\n const service = new CodexPrintAgentService({\n repository, probe: { validate: vi.fn() }, runner,\n });\n const created = await service.create({ name: 'reviewer', cwd });\n\n await expect(service.send(created.id, 'secret')).rejects.toMatchObject({ code: 'CODEX_PROCESS' });\n expect((await repository.getById(created.id))).toMatchObject({\n providerSessionId: SESSION, state: 'degraded', sessionHealth: 'unknown',\n });\n });\n});\n"],"names":["fs","os","path","afterEach","describe","expect","it","vi","CodexPrintError","CodexPrintAgentService","DurableAgentRepository","SESSION","roots","root","splice","rmSync","recursive","force","mkdtempSync","join","tmpdir","push","cwd","mkdirSync","processInspector","getIdentity","pid","startedAt","repository","dbPath","runner","run","fn","mockImplementation","request","onSpawn","onSession","sessionId","result","prompt","messages","exitCode","service","probe","validate","created","create","name","toMatchObject","provider","providerSessionId","sessionHealth","first","send","id","bound","getById","toBe","resolves","mock","calls","agent","rejects","code","state"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/__tests__/durable/CodexPrintAgent.integration.test.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { afterEach, describe, expect, it, vi } from \"vitest\";\nimport {\n CodexPrintError,\n CodexPrintAgentService,\n DurableAgentRepository,\n type ProcessInspector,\n} from \"../../index.js\";\n\nconst SESSION = \"22222222-2222-4222-8222-222222222222\";\nconst roots: string[] = [];\n\nafterEach(() => {\n for (const root of roots.splice(0)) fs.rmSync(root, { recursive: true, force: true });\n});\n\ndescribe(\"Codex print-agent fake-provider journey\", () => {\n it(\"creates unbound, then binds and explicitly resumes the provider-minted session\", async () => {\n const root = fs.mkdtempSync(path.join(os.tmpdir(), \"codex-print-integration-\"));\n roots.push(root);\n const cwd = path.join(root, \"project\");\n fs.mkdirSync(cwd);\n const processInspector: ProcessInspector = {\n getIdentity: (pid) => ({ pid, startedAt: `process-${pid}` }),\n };\n const repository = new DurableAgentRepository({\n dbPath: path.join(root, \"agents.db\"),\n processInspector,\n });\n const runner = {\n run: vi.fn().mockImplementation(async (request) => {\n await request.onSpawn({ pid: 42, startedAt: \"process-42\" });\n await request.onSession(SESSION);\n return {\n sessionId: SESSION,\n result: `answer:${request.prompt}`,\n messages: [`answer:${request.prompt}`],\n exitCode: 0,\n };\n }),\n };\n const service = new CodexPrintAgentService({\n repository,\n probe: { validate: vi.fn() },\n runner,\n });\n\n const created = await service.create({ name: \"reviewer\", cwd });\n expect(created).toMatchObject({\n provider: \"codex\",\n providerSessionId: null,\n sessionHealth: \"uninitialized\",\n });\n\n const first = await service.send(created.id, \"first secret\");\n expect(first).toMatchObject({ result: \"answer:first secret\" });\n const bound = await repository.getById(created.id);\n expect(bound?.providerSessionId).toBe(first.sessionId);\n await expect(service.send(created.id, \"follow up\")).resolves.toMatchObject({\n result: \"answer:follow up\",\n });\n\n expect(runner.run.mock.calls[0][0].agent).toMatchObject({ providerSessionId: null });\n expect(runner.run.mock.calls[1][0].agent).toMatchObject({ providerSessionId: SESSION });\n });\n\n it(\"retains a first-run binding when the provider fails after thread start\", async () => {\n const root = fs.mkdtempSync(path.join(os.tmpdir(), \"codex-print-bind-failure-\"));\n roots.push(root);\n const cwd = path.join(root, \"project\");\n fs.mkdirSync(cwd);\n const processInspector: ProcessInspector = {\n getIdentity: (pid) => ({ pid, startedAt: `process-${pid}` }),\n };\n const repository = new DurableAgentRepository({\n dbPath: path.join(root, \"agents.db\"),\n processInspector,\n });\n const runner = {\n run: vi.fn().mockImplementation(async (request) => {\n await request.onSpawn({ pid: 42, startedAt: \"process-42\" });\n await request.onSession(SESSION);\n throw new CodexPrintError(\"Codex print run failed.\", \"CODEX_PROCESS\");\n }),\n };\n const service = new CodexPrintAgentService({\n repository,\n probe: { validate: vi.fn() },\n runner,\n });\n const created = await service.create({ name: \"reviewer\", cwd });\n\n await expect(service.send(created.id, \"secret\")).rejects.toMatchObject({\n code: \"CODEX_PROCESS\",\n });\n expect(await repository.getById(created.id)).toMatchObject({\n providerSessionId: SESSION,\n state: \"degraded\",\n sessionHealth: \"unknown\",\n });\n });\n});\n"],"names":["fs","os","path","afterEach","describe","expect","it","vi","CodexPrintError","CodexPrintAgentService","DurableAgentRepository","SESSION","roots","root","splice","rmSync","recursive","force","mkdtempSync","join","tmpdir","push","cwd","mkdirSync","processInspector","getIdentity","pid","startedAt","repository","dbPath","runner","run","fn","mockImplementation","request","onSpawn","onSession","sessionId","result","prompt","messages","exitCode","service","probe","validate","created","create","name","toMatchObject","provider","providerSessionId","sessionHealth","first","send","id","bound","getById","toBe","resolves","mock","calls","agent","rejects","code","state"],"mappings":"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"}
@@ -1,25 +1,25 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- const SESSION = '22222222-2222-4222-8222-222222222222';
1
+ import { describe, expect, it, vi } from "vitest";
2
+ const SESSION = "22222222-2222-4222-8222-222222222222";
3
3
  const base = {
4
- id: 'id',
5
- name: 'reviewer',
6
- provider: 'codex',
4
+ id: "id",
5
+ name: "reviewer",
6
+ provider: "codex",
7
7
  providerSessionId: null,
8
- sessionHealth: 'uninitialized'
8
+ sessionHealth: "uninitialized"
9
9
  };
10
- describe('CodexPrintAgentService', ()=>{
11
- it('constructs default non-billable dependencies without invoking them', async ()=>{
12
- const api = await import('../../index.js');
10
+ describe("CodexPrintAgentService", ()=>{
11
+ it("constructs default non-billable dependencies without invoking them", async ()=>{
12
+ const api = await import("../../index.js");
13
13
  const Service = api.CodexPrintAgentService;
14
14
  expect(new Service().repository).toBeDefined();
15
15
  });
16
- it('validates before provider-aware create and never runs Codex', async ()=>{
17
- const api = await import('../../index.js');
18
- expect(api).toHaveProperty('CodexPrintAgentService');
16
+ it("validates before provider-aware create and never runs Codex", async ()=>{
17
+ const api = await import("../../index.js");
18
+ expect(api).toHaveProperty("CodexPrintAgentService");
19
19
  const probe = {
20
20
  validate: vi.fn().mockResolvedValue({
21
- executable: 'codex',
22
- version: '0.147.0'
21
+ executable: "codex",
22
+ version: "0.147.0"
23
23
  })
24
24
  };
25
25
  const repository = {
@@ -35,31 +35,31 @@ describe('CodexPrintAgentService', ()=>{
35
35
  probe,
36
36
  runner
37
37
  }).create({
38
- name: 'reviewer',
39
- cwd: '/project'
38
+ name: "reviewer",
39
+ cwd: "/project"
40
40
  });
41
41
  expect(repository.create).toHaveBeenCalledWith({
42
- name: 'reviewer',
43
- cwd: '/project',
44
- provider: 'codex'
42
+ name: "reviewer",
43
+ cwd: "/project",
44
+ provider: "codex"
45
45
  });
46
46
  expect(runner.run).not.toHaveBeenCalled();
47
47
  });
48
- it('binds during first send and explicitly resumes later sends', async ()=>{
49
- const api = await import('../../index.js');
48
+ it("binds during first send and explicitly resumes later sends", async ()=>{
49
+ const api = await import("../../index.js");
50
50
  const repository = {
51
51
  list: vi.fn(),
52
52
  resolve: vi.fn().mockResolvedValue(base),
53
53
  acquireRun: vi.fn().mockResolvedValueOnce({
54
54
  agent: base,
55
- token: 'one'
55
+ token: "one"
56
56
  }).mockResolvedValueOnce({
57
57
  agent: {
58
58
  ...base,
59
59
  providerSessionId: SESSION,
60
- sessionHealth: 'healthy'
60
+ sessionHealth: "healthy"
61
61
  },
62
- token: 'two'
62
+ token: "two"
63
63
  }),
64
64
  recordProviderProcess: vi.fn(),
65
65
  bindProviderSession: vi.fn(),
@@ -69,14 +69,14 @@ describe('CodexPrintAgentService', ()=>{
69
69
  run: vi.fn().mockImplementation(async (request)=>{
70
70
  await request.onSpawn({
71
71
  pid: 42,
72
- startedAt: 'start'
72
+ startedAt: "start"
73
73
  });
74
74
  await request.onSession(SESSION);
75
75
  return {
76
76
  sessionId: SESSION,
77
- result: 'answer',
77
+ result: "answer",
78
78
  messages: [
79
- 'answer'
79
+ "answer"
80
80
  ],
81
81
  exitCode: 0
82
82
  };
@@ -89,19 +89,19 @@ describe('CodexPrintAgentService', ()=>{
89
89
  validate: vi.fn()
90
90
  },
91
91
  runner,
92
- executable: 'fake-codex'
92
+ executable: "fake-codex"
93
93
  });
94
- await service.send('reviewer', 'first');
95
- await service.send('reviewer', 'later');
96
- expect(repository.bindProviderSession).toHaveBeenNthCalledWith(1, 'id', 'one', SESSION);
97
- expect(repository.bindProviderSession).toHaveBeenNthCalledWith(2, 'id', 'two', SESSION);
98
- expect(repository.completeRun).toHaveBeenCalledWith('id', 'one', expect.objectContaining({
99
- status: 'succeeded',
100
- sessionHealth: 'healthy'
94
+ await service.send("reviewer", "first");
95
+ await service.send("reviewer", "later");
96
+ expect(repository.bindProviderSession).toHaveBeenNthCalledWith(1, "id", "one", SESSION);
97
+ expect(repository.bindProviderSession).toHaveBeenNthCalledWith(2, "id", "two", SESSION);
98
+ expect(repository.completeRun).toHaveBeenCalledWith("id", "one", expect.objectContaining({
99
+ status: "succeeded",
100
+ sessionHealth: "healthy"
101
101
  }));
102
102
  });
103
- it('records mismatch separately from unknown failures', async ()=>{
104
- const api = await import('../../index.js');
103
+ it("records mismatch separately from unknown failures", async ()=>{
104
+ const api = await import("../../index.js");
105
105
  const ErrorType = api.CodexPrintError;
106
106
  const completeRun = vi.fn();
107
107
  const repository = {
@@ -109,7 +109,7 @@ describe('CodexPrintAgentService', ()=>{
109
109
  resolve: vi.fn().mockResolvedValue(base),
110
110
  acquireRun: vi.fn().mockResolvedValue({
111
111
  agent: base,
112
- token: 'one'
112
+ token: "one"
113
113
  }),
114
114
  recordProviderProcess: vi.fn(),
115
115
  bindProviderSession: vi.fn(),
@@ -122,23 +122,23 @@ describe('CodexPrintAgentService', ()=>{
122
122
  validate: vi.fn()
123
123
  },
124
124
  runner: {
125
- run: vi.fn().mockRejectedValue(new ErrorType('mismatch', 'CODEX_SESSION_MISMATCH'))
125
+ run: vi.fn().mockRejectedValue(new ErrorType("mismatch", "CODEX_SESSION_MISMATCH"))
126
126
  }
127
127
  });
128
- await expect(service.send('reviewer', 'x')).rejects.toMatchObject({
129
- code: 'CODEX_SESSION_MISMATCH'
128
+ await expect(service.send("reviewer", "x")).rejects.toMatchObject({
129
+ code: "CODEX_SESSION_MISMATCH"
130
130
  });
131
- expect(completeRun).toHaveBeenCalledWith('id', 'one', expect.objectContaining({
132
- sessionHealth: 'mismatch'
131
+ expect(completeRun).toHaveBeenCalledWith("id", "one", expect.objectContaining({
132
+ sessionHealth: "mismatch"
133
133
  }));
134
134
  });
135
- it('rejects a non-Codex target without acquiring or mutating it', async ()=>{
136
- const api = await import('../../index.js');
135
+ it("rejects a non-Codex target without acquiring or mutating it", async ()=>{
136
+ const api = await import("../../index.js");
137
137
  const Service = api.CodexPrintAgentService;
138
138
  const repository = {
139
139
  resolve: vi.fn().mockResolvedValue({
140
140
  ...base,
141
- provider: 'claude'
141
+ provider: "claude"
142
142
  }),
143
143
  acquireRun: vi.fn(),
144
144
  recordProviderProcess: vi.fn(),
@@ -153,21 +153,21 @@ describe('CodexPrintAgentService', ()=>{
153
153
  runner: {
154
154
  run: vi.fn()
155
155
  }
156
- }).send('reviewer', 'x')).rejects.toMatchObject({
157
- code: 'CODEX_UNSUPPORTED'
156
+ }).send("reviewer", "x")).rejects.toMatchObject({
157
+ code: "CODEX_UNSUPPORTED"
158
158
  });
159
159
  expect(repository.acquireRun).not.toHaveBeenCalled();
160
160
  expect(repository.completeRun).not.toHaveBeenCalled();
161
161
  });
162
- it('does not turn a successful completion write failure into a second completion', async ()=>{
163
- const api = await import('../../index.js');
162
+ it("does not turn a successful completion write failure into a second completion", async ()=>{
163
+ const api = await import("../../index.js");
164
164
  const Service = api.CodexPrintAgentService;
165
- const completionFailure = new Error('completion failed');
165
+ const completionFailure = new Error("completion failed");
166
166
  const repository = {
167
167
  resolve: vi.fn().mockResolvedValue(base),
168
168
  acquireRun: vi.fn().mockResolvedValue({
169
169
  agent: base,
170
- token: 'one'
170
+ token: "one"
171
171
  }),
172
172
  recordProviderProcess: vi.fn(),
173
173
  bindProviderSession: vi.fn(),
@@ -176,9 +176,9 @@ describe('CodexPrintAgentService', ()=>{
176
176
  const runner = {
177
177
  run: vi.fn().mockResolvedValue({
178
178
  sessionId: SESSION,
179
- result: 'answer',
179
+ result: "answer",
180
180
  messages: [
181
- 'answer'
181
+ "answer"
182
182
  ],
183
183
  exitCode: 0
184
184
  })
@@ -189,11 +189,11 @@ describe('CodexPrintAgentService', ()=>{
189
189
  validate: vi.fn()
190
190
  },
191
191
  runner
192
- }).send('reviewer', 'x')).rejects.toBe(completionFailure);
192
+ }).send("reviewer", "x")).rejects.toBe(completionFailure);
193
193
  expect(repository.completeRun).toHaveBeenCalledOnce();
194
194
  });
195
- it('records a repository binding conflict as a session mismatch', async ()=>{
196
- const api = await import('../../index.js');
195
+ it("records a repository binding conflict as a session mismatch", async ()=>{
196
+ const api = await import("../../index.js");
197
197
  const BindingError = api.CodexPrintError;
198
198
  const completeRun = vi.fn();
199
199
  const repository = {
@@ -201,10 +201,10 @@ describe('CodexPrintAgentService', ()=>{
201
201
  resolve: vi.fn().mockResolvedValue(base),
202
202
  acquireRun: vi.fn().mockResolvedValue({
203
203
  agent: base,
204
- token: 'one'
204
+ token: "one"
205
205
  }),
206
206
  recordProviderProcess: vi.fn(),
207
- bindProviderSession: vi.fn().mockRejectedValue(new BindingError('binding mismatch', 'CODEX_SESSION_MISMATCH')),
207
+ bindProviderSession: vi.fn().mockRejectedValue(new BindingError("binding mismatch", "CODEX_SESSION_MISMATCH")),
208
208
  completeRun
209
209
  };
210
210
  const runner = {
@@ -212,9 +212,9 @@ describe('CodexPrintAgentService', ()=>{
212
212
  await request.onSession(SESSION);
213
213
  return {
214
214
  sessionId: SESSION,
215
- result: 'x',
215
+ result: "x",
216
216
  messages: [
217
- 'x'
217
+ "x"
218
218
  ],
219
219
  exitCode: 0
220
220
  };
@@ -227,15 +227,15 @@ describe('CodexPrintAgentService', ()=>{
227
227
  validate: vi.fn()
228
228
  },
229
229
  runner
230
- }).send('reviewer', 'x')).rejects.toMatchObject({
231
- code: 'CODEX_SESSION_MISMATCH'
230
+ }).send("reviewer", "x")).rejects.toMatchObject({
231
+ code: "CODEX_SESSION_MISMATCH"
232
232
  });
233
- expect(completeRun).toHaveBeenCalledWith('id', 'one', expect.objectContaining({
234
- sessionHealth: 'mismatch'
233
+ expect(completeRun).toHaveBeenCalledWith("id", "one", expect.objectContaining({
234
+ sessionHealth: "mismatch"
235
235
  }));
236
236
  });
237
- it('rejects missing and ambiguous records before acquiring a run', async ()=>{
238
- const api = await import('../../index.js');
237
+ it("rejects missing and ambiguous records before acquiring a run", async ()=>{
238
+ const api = await import("../../index.js");
239
239
  const Service = api.CodexPrintAgentService;
240
240
  const repository = {
241
241
  list: vi.fn(),
@@ -258,11 +258,11 @@ describe('CodexPrintAgentService', ()=>{
258
258
  run: vi.fn()
259
259
  }
260
260
  });
261
- await expect(service.send('missing', 'x')).rejects.toMatchObject({
262
- code: 'DURABLE_AGENT_NOT_FOUND'
261
+ await expect(service.send("missing", "x")).rejects.toMatchObject({
262
+ code: "DURABLE_AGENT_NOT_FOUND"
263
263
  });
264
- await expect(service.send('ambiguous', 'x')).rejects.toMatchObject({
265
- code: 'CODEX_UNSUPPORTED'
264
+ await expect(service.send("ambiguous", "x")).rejects.toMatchObject({
265
+ code: "CODEX_UNSUPPORTED"
266
266
  });
267
267
  expect(repository.acquireRun).not.toHaveBeenCalled();
268
268
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__tests__/durable/CodexPrintAgentService.test.ts"],"sourcesContent":["import { describe, expect, it, vi } from 'vitest';\n\nconst SESSION = '22222222-2222-4222-8222-222222222222';\nconst base = {\n id: 'id', name: 'reviewer', provider: 'codex', providerSessionId: null, sessionHealth: 'uninitialized',\n};\n\ndescribe('CodexPrintAgentService', () => {\n it('constructs default non-billable dependencies without invoking them', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n const Service = api.CodexPrintAgentService as new () => any;\n expect(new Service().repository).toBeDefined();\n });\n\n it('validates before provider-aware create and never runs Codex', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n expect(api).toHaveProperty('CodexPrintAgentService');\n const probe = { validate: vi.fn().mockResolvedValue({ executable: 'codex', version: '0.147.0' }) };\n const repository = { create: vi.fn().mockResolvedValue(base), list: vi.fn() };\n const runner = { run: vi.fn() };\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n await new Service({ repository, probe, runner }).create({ name: 'reviewer', cwd: '/project' });\n expect(repository.create).toHaveBeenCalledWith({ name: 'reviewer', cwd: '/project', provider: 'codex' });\n expect(runner.run).not.toHaveBeenCalled();\n });\n\n it('binds during first send and explicitly resumes later sends', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n const repository = {\n list: vi.fn(),\n resolve: vi.fn().mockResolvedValue(base),\n acquireRun: vi.fn()\n .mockResolvedValueOnce({ agent: base, token: 'one' })\n .mockResolvedValueOnce({ agent: { ...base, providerSessionId: SESSION, sessionHealth: 'healthy' }, token: 'two' }),\n recordProviderProcess: vi.fn(), bindProviderSession: vi.fn(), completeRun: vi.fn(),\n };\n const runner = { run: vi.fn().mockImplementation(async (request) => {\n await request.onSpawn({ pid: 42, startedAt: 'start' });\n await request.onSession(SESSION);\n return { sessionId: SESSION, result: 'answer', messages: ['answer'], exitCode: 0 };\n }) };\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const service = new Service({ repository, probe: { validate: vi.fn() }, runner, executable: 'fake-codex' });\n\n await service.send('reviewer', 'first');\n await service.send('reviewer', 'later');\n\n expect(repository.bindProviderSession).toHaveBeenNthCalledWith(1, 'id', 'one', SESSION);\n expect(repository.bindProviderSession).toHaveBeenNthCalledWith(2, 'id', 'two', SESSION);\n expect(repository.completeRun).toHaveBeenCalledWith('id', 'one', expect.objectContaining({\n status: 'succeeded', sessionHealth: 'healthy',\n }));\n });\n\n it('records mismatch separately from unknown failures', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n const ErrorType = api.CodexPrintError as new (message: string, code: string) => Error;\n const completeRun = vi.fn();\n const repository = {\n list: vi.fn(),\n resolve: vi.fn().mockResolvedValue(base), acquireRun: vi.fn().mockResolvedValue({ agent: base, token: 'one' }),\n recordProviderProcess: vi.fn(), bindProviderSession: vi.fn(), completeRun,\n };\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const service = new Service({ repository, probe: { validate: vi.fn() }, runner: {\n run: vi.fn().mockRejectedValue(new ErrorType('mismatch', 'CODEX_SESSION_MISMATCH')),\n } });\n await expect(service.send('reviewer', 'x')).rejects.toMatchObject({ code: 'CODEX_SESSION_MISMATCH' });\n expect(completeRun).toHaveBeenCalledWith('id', 'one', expect.objectContaining({ sessionHealth: 'mismatch' }));\n });\n\n it('rejects a non-Codex target without acquiring or mutating it', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const repository = {\n resolve: vi.fn().mockResolvedValue({ ...base, provider: 'claude' }),\n acquireRun: vi.fn(), recordProviderProcess: vi.fn(), bindProviderSession: vi.fn(), completeRun: vi.fn(),\n };\n\n await expect(new Service({ repository, probe: { validate: vi.fn() }, runner: { run: vi.fn() } })\n .send('reviewer', 'x')).rejects.toMatchObject({ code: 'CODEX_UNSUPPORTED' });\n expect(repository.acquireRun).not.toHaveBeenCalled();\n expect(repository.completeRun).not.toHaveBeenCalled();\n });\n\n it('does not turn a successful completion write failure into a second completion', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const completionFailure = new Error('completion failed');\n const repository = {\n resolve: vi.fn().mockResolvedValue(base),\n acquireRun: vi.fn().mockResolvedValue({ agent: base, token: 'one' }),\n recordProviderProcess: vi.fn(), bindProviderSession: vi.fn(),\n completeRun: vi.fn().mockRejectedValue(completionFailure),\n };\n const runner = { run: vi.fn().mockResolvedValue({\n sessionId: SESSION, result: 'answer', messages: ['answer'], exitCode: 0,\n }) };\n\n await expect(new Service({ repository, probe: { validate: vi.fn() }, runner })\n .send('reviewer', 'x')).rejects.toBe(completionFailure);\n expect(repository.completeRun).toHaveBeenCalledOnce();\n });\n\n it('records a repository binding conflict as a session mismatch', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n const BindingError = api.CodexPrintError as new (message: string, code: string) => Error;\n const completeRun = vi.fn();\n const repository = {\n list: vi.fn(), resolve: vi.fn().mockResolvedValue(base),\n acquireRun: vi.fn().mockResolvedValue({ agent: base, token: 'one' }),\n recordProviderProcess: vi.fn(),\n bindProviderSession: vi.fn().mockRejectedValue(new BindingError('binding mismatch', 'CODEX_SESSION_MISMATCH')),\n completeRun,\n };\n const runner = { run: vi.fn().mockImplementation(async (request) => {\n await request.onSession(SESSION);\n return { sessionId: SESSION, result: 'x', messages: ['x'], exitCode: 0 };\n }) };\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n\n await expect(new Service({ repository, probe: { validate: vi.fn() }, runner }).send('reviewer', 'x'))\n .rejects.toMatchObject({ code: 'CODEX_SESSION_MISMATCH' });\n expect(completeRun).toHaveBeenCalledWith('id', 'one', expect.objectContaining({ sessionHealth: 'mismatch' }));\n });\n\n it('rejects missing and ambiguous records before acquiring a run', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const repository = {\n list: vi.fn(), create: vi.fn(), resolve: vi.fn().mockResolvedValueOnce(null).mockResolvedValueOnce([base, base]),\n acquireRun: vi.fn(), recordProviderProcess: vi.fn(), bindProviderSession: vi.fn(), completeRun: vi.fn(),\n };\n const service = new Service({ repository, probe: { validate: vi.fn() }, runner: { run: vi.fn() } });\n await expect(service.send('missing', 'x')).rejects.toMatchObject({ code: 'DURABLE_AGENT_NOT_FOUND' });\n await expect(service.send('ambiguous', 'x')).rejects.toMatchObject({ code: 'CODEX_UNSUPPORTED' });\n expect(repository.acquireRun).not.toHaveBeenCalled();\n });\n});\n"],"names":["describe","expect","it","vi","SESSION","base","id","name","provider","providerSessionId","sessionHealth","api","Service","CodexPrintAgentService","repository","toBeDefined","toHaveProperty","probe","validate","fn","mockResolvedValue","executable","version","create","list","runner","run","cwd","toHaveBeenCalledWith","not","toHaveBeenCalled","resolve","acquireRun","mockResolvedValueOnce","agent","token","recordProviderProcess","bindProviderSession","completeRun","mockImplementation","request","onSpawn","pid","startedAt","onSession","sessionId","result","messages","exitCode","service","send","toHaveBeenNthCalledWith","objectContaining","status","ErrorType","CodexPrintError","mockRejectedValue","rejects","toMatchObject","code","completionFailure","Error","toBe","toHaveBeenCalledOnce","BindingError"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/__tests__/durable/CodexPrintAgentService.test.ts"],"sourcesContent":["import { describe, expect, it, vi } from \"vitest\";\n\nconst SESSION = \"22222222-2222-4222-8222-222222222222\";\nconst base = {\n id: \"id\",\n name: \"reviewer\",\n provider: \"codex\",\n providerSessionId: null,\n sessionHealth: \"uninitialized\",\n};\n\ndescribe(\"CodexPrintAgentService\", () => {\n it(\"constructs default non-billable dependencies without invoking them\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n const Service = api.CodexPrintAgentService as new () => any;\n expect(new Service().repository).toBeDefined();\n });\n\n it(\"validates before provider-aware create and never runs Codex\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n expect(api).toHaveProperty(\"CodexPrintAgentService\");\n const probe = {\n validate: vi.fn().mockResolvedValue({ executable: \"codex\", version: \"0.147.0\" }),\n };\n const repository = { create: vi.fn().mockResolvedValue(base), list: vi.fn() };\n const runner = { run: vi.fn() };\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n await new Service({ repository, probe, runner }).create({ name: \"reviewer\", cwd: \"/project\" });\n expect(repository.create).toHaveBeenCalledWith({\n name: \"reviewer\",\n cwd: \"/project\",\n provider: \"codex\",\n });\n expect(runner.run).not.toHaveBeenCalled();\n });\n\n it(\"binds during first send and explicitly resumes later sends\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n const repository = {\n list: vi.fn(),\n resolve: vi.fn().mockResolvedValue(base),\n acquireRun: vi\n .fn()\n .mockResolvedValueOnce({ agent: base, token: \"one\" })\n .mockResolvedValueOnce({\n agent: { ...base, providerSessionId: SESSION, sessionHealth: \"healthy\" },\n token: \"two\",\n }),\n recordProviderProcess: vi.fn(),\n bindProviderSession: vi.fn(),\n completeRun: vi.fn(),\n };\n const runner = {\n run: vi.fn().mockImplementation(async (request) => {\n await request.onSpawn({ pid: 42, startedAt: \"start\" });\n await request.onSession(SESSION);\n return { sessionId: SESSION, result: \"answer\", messages: [\"answer\"], exitCode: 0 };\n }),\n };\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const service = new Service({\n repository,\n probe: { validate: vi.fn() },\n runner,\n executable: \"fake-codex\",\n });\n\n await service.send(\"reviewer\", \"first\");\n await service.send(\"reviewer\", \"later\");\n\n expect(repository.bindProviderSession).toHaveBeenNthCalledWith(1, \"id\", \"one\", SESSION);\n expect(repository.bindProviderSession).toHaveBeenNthCalledWith(2, \"id\", \"two\", SESSION);\n expect(repository.completeRun).toHaveBeenCalledWith(\n \"id\",\n \"one\",\n expect.objectContaining({\n status: \"succeeded\",\n sessionHealth: \"healthy\",\n }),\n );\n });\n\n it(\"records mismatch separately from unknown failures\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n const ErrorType = api.CodexPrintError as new (message: string, code: string) => Error;\n const completeRun = vi.fn();\n const repository = {\n list: vi.fn(),\n resolve: vi.fn().mockResolvedValue(base),\n acquireRun: vi.fn().mockResolvedValue({ agent: base, token: \"one\" }),\n recordProviderProcess: vi.fn(),\n bindProviderSession: vi.fn(),\n completeRun,\n };\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const service = new Service({\n repository,\n probe: { validate: vi.fn() },\n runner: {\n run: vi.fn().mockRejectedValue(new ErrorType(\"mismatch\", \"CODEX_SESSION_MISMATCH\")),\n },\n });\n await expect(service.send(\"reviewer\", \"x\")).rejects.toMatchObject({\n code: \"CODEX_SESSION_MISMATCH\",\n });\n expect(completeRun).toHaveBeenCalledWith(\n \"id\",\n \"one\",\n expect.objectContaining({ sessionHealth: \"mismatch\" }),\n );\n });\n\n it(\"rejects a non-Codex target without acquiring or mutating it\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const repository = {\n resolve: vi.fn().mockResolvedValue({ ...base, provider: \"claude\" }),\n acquireRun: vi.fn(),\n recordProviderProcess: vi.fn(),\n bindProviderSession: vi.fn(),\n completeRun: vi.fn(),\n };\n\n await expect(\n new Service({ repository, probe: { validate: vi.fn() }, runner: { run: vi.fn() } }).send(\n \"reviewer\",\n \"x\",\n ),\n ).rejects.toMatchObject({ code: \"CODEX_UNSUPPORTED\" });\n expect(repository.acquireRun).not.toHaveBeenCalled();\n expect(repository.completeRun).not.toHaveBeenCalled();\n });\n\n it(\"does not turn a successful completion write failure into a second completion\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const completionFailure = new Error(\"completion failed\");\n const repository = {\n resolve: vi.fn().mockResolvedValue(base),\n acquireRun: vi.fn().mockResolvedValue({ agent: base, token: \"one\" }),\n recordProviderProcess: vi.fn(),\n bindProviderSession: vi.fn(),\n completeRun: vi.fn().mockRejectedValue(completionFailure),\n };\n const runner = {\n run: vi.fn().mockResolvedValue({\n sessionId: SESSION,\n result: \"answer\",\n messages: [\"answer\"],\n exitCode: 0,\n }),\n };\n\n await expect(\n new Service({ repository, probe: { validate: vi.fn() }, runner }).send(\"reviewer\", \"x\"),\n ).rejects.toBe(completionFailure);\n expect(repository.completeRun).toHaveBeenCalledOnce();\n });\n\n it(\"records a repository binding conflict as a session mismatch\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n const BindingError = api.CodexPrintError as new (message: string, code: string) => Error;\n const completeRun = vi.fn();\n const repository = {\n list: vi.fn(),\n resolve: vi.fn().mockResolvedValue(base),\n acquireRun: vi.fn().mockResolvedValue({ agent: base, token: \"one\" }),\n recordProviderProcess: vi.fn(),\n bindProviderSession: vi\n .fn()\n .mockRejectedValue(new BindingError(\"binding mismatch\", \"CODEX_SESSION_MISMATCH\")),\n completeRun,\n };\n const runner = {\n run: vi.fn().mockImplementation(async (request) => {\n await request.onSession(SESSION);\n return { sessionId: SESSION, result: \"x\", messages: [\"x\"], exitCode: 0 };\n }),\n };\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n\n await expect(\n new Service({ repository, probe: { validate: vi.fn() }, runner }).send(\"reviewer\", \"x\"),\n ).rejects.toMatchObject({ code: \"CODEX_SESSION_MISMATCH\" });\n expect(completeRun).toHaveBeenCalledWith(\n \"id\",\n \"one\",\n expect.objectContaining({ sessionHealth: \"mismatch\" }),\n );\n });\n\n it(\"rejects missing and ambiguous records before acquiring a run\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n const Service = api.CodexPrintAgentService as new (options: unknown) => any;\n const repository = {\n list: vi.fn(),\n create: vi.fn(),\n resolve: vi.fn().mockResolvedValueOnce(null).mockResolvedValueOnce([base, base]),\n acquireRun: vi.fn(),\n recordProviderProcess: vi.fn(),\n bindProviderSession: vi.fn(),\n completeRun: vi.fn(),\n };\n const service = new Service({\n repository,\n probe: { validate: vi.fn() },\n runner: { run: vi.fn() },\n });\n await expect(service.send(\"missing\", \"x\")).rejects.toMatchObject({\n code: \"DURABLE_AGENT_NOT_FOUND\",\n });\n await expect(service.send(\"ambiguous\", \"x\")).rejects.toMatchObject({\n code: \"CODEX_UNSUPPORTED\",\n });\n expect(repository.acquireRun).not.toHaveBeenCalled();\n });\n});\n"],"names":["describe","expect","it","vi","SESSION","base","id","name","provider","providerSessionId","sessionHealth","api","Service","CodexPrintAgentService","repository","toBeDefined","toHaveProperty","probe","validate","fn","mockResolvedValue","executable","version","create","list","runner","run","cwd","toHaveBeenCalledWith","not","toHaveBeenCalled","resolve","acquireRun","mockResolvedValueOnce","agent","token","recordProviderProcess","bindProviderSession","completeRun","mockImplementation","request","onSpawn","pid","startedAt","onSession","sessionId","result","messages","exitCode","service","send","toHaveBeenNthCalledWith","objectContaining","status","ErrorType","CodexPrintError","mockRejectedValue","rejects","toMatchObject","code","completionFailure","Error","toBe","toHaveBeenCalledOnce","BindingError"],"mappings":"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"}