@ai-devkit/agent-manager 0.32.0 → 0.33.1

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 (572) hide show
  1. package/dist/AgentManager.d.ts +13 -4
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +116 -84
  4. package/dist/AgentManager.js.map +1 -1
  5. package/dist/__tests__/AgentManager.test.js +623 -391
  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/GrokCliAdapter.test.js +114 -114
  12. package/dist/__tests__/adapters/GrokCliAdapter.test.js.map +1 -1
  13. package/dist/__tests__/adapters/OpenCodeAdapter.test.js +170 -169
  14. package/dist/__tests__/adapters/OpenCodeAdapter.test.js.map +1 -1
  15. package/dist/__tests__/capacity/codex.test.js +93 -93
  16. package/dist/__tests__/capacity/codex.test.js.map +1 -1
  17. package/dist/__tests__/capacity/index.test.js +17 -17
  18. package/dist/__tests__/capacity/index.test.js.map +1 -1
  19. package/dist/__tests__/durable/CodexCliProbe.test.js +60 -60
  20. package/dist/__tests__/durable/CodexCliProbe.test.js.map +1 -1
  21. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +28 -28
  22. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +1 -1
  23. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +30 -30
  24. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +1 -1
  25. package/dist/__tests__/durable/CodexPrintAgentService.test.js +71 -71
  26. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +1 -1
  27. package/dist/__tests__/durable/CodexPrintRunner.test.js +125 -125
  28. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +1 -1
  29. package/dist/__tests__/print/ClaudeCliProbe.test.js +20 -20
  30. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +1 -1
  31. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +20 -20
  32. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +1 -1
  33. package/dist/__tests__/print/ClaudePrintAgentService.test.js +58 -58
  34. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +1 -1
  35. package/dist/__tests__/print/ClaudePrintRunner.test.js +55 -55
  36. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +1 -1
  37. package/dist/__tests__/print/DurableAgent.test.js +9 -9
  38. package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
  39. package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js +40 -40
  40. package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js.map +1 -1
  41. package/dist/__tests__/print/DurableAgentRepository.test.js +66 -66
  42. package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
  43. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +34 -34
  44. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +1 -1
  45. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +132 -132
  46. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js.map +1 -1
  47. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +194 -0
  48. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +1 -0
  49. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js +86 -0
  50. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js.map +1 -0
  51. package/dist/__tests__/providers/codex/CodexSessionParser.test.js +254 -0
  52. package/dist/__tests__/providers/codex/CodexSessionParser.test.js.map +1 -0
  53. package/dist/__tests__/providers/copilot/CopilotAdapter.test.js +641 -0
  54. package/dist/__tests__/providers/copilot/CopilotAdapter.test.js.map +1 -0
  55. package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js +1398 -0
  56. package/dist/__tests__/providers/gemini/GeminiCliAdapter.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/HerdrAgentDiscovery.test.js +164 -0
  80. package/dist/__tests__/runtime/HerdrAgentDiscovery.test.js.map +1 -0
  81. package/dist/__tests__/runtime/HerdrAgentRuntime.test.js +488 -0
  82. package/dist/__tests__/runtime/HerdrAgentRuntime.test.js.map +1 -0
  83. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +588 -0
  84. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -0
  85. package/dist/__tests__/terminal/TerminalFocusManager.test.js +100 -100
  86. package/dist/__tests__/terminal/TerminalFocusManager.test.js.map +1 -1
  87. package/dist/__tests__/terminal/TmuxManager.test.js +101 -101
  88. package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
  89. package/dist/__tests__/terminal/TtyWriter.test.js +185 -185
  90. package/dist/__tests__/terminal/TtyWriter.test.js.map +1 -1
  91. package/dist/__tests__/utils/AgentRegistry.test.js +343 -218
  92. package/dist/__tests__/utils/AgentRegistry.test.js.map +1 -1
  93. package/dist/__tests__/utils/ClaudeSessionParser.test.js +103 -101
  94. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +1 -1
  95. package/dist/__tests__/utils/agent-requests.test.js +43 -43
  96. package/dist/__tests__/utils/agent-requests.test.js.map +1 -1
  97. package/dist/__tests__/utils/agents.test.js +17 -17
  98. package/dist/__tests__/utils/agents.test.js.map +1 -1
  99. package/dist/__tests__/utils/matching.test.js +92 -92
  100. package/dist/__tests__/utils/matching.test.js.map +1 -1
  101. package/dist/__tests__/utils/process.test.js +108 -108
  102. package/dist/__tests__/utils/process.test.js.map +1 -1
  103. package/dist/__tests__/utils/session.test.js +53 -53
  104. package/dist/__tests__/utils/session.test.js.map +1 -1
  105. package/dist/adapters/AgentAdapter.d.ts +2 -2
  106. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  107. package/dist/adapters/AgentAdapter.js +1 -1
  108. package/dist/adapters/AgentAdapter.js.map +1 -1
  109. package/dist/adapters/GrokCliAdapter.d.ts +1 -1
  110. package/dist/adapters/GrokCliAdapter.d.ts.map +1 -1
  111. package/dist/adapters/GrokCliAdapter.js +80 -80
  112. package/dist/adapters/GrokCliAdapter.js.map +1 -1
  113. package/dist/adapters/OpenCodeAdapter.d.ts +2 -1
  114. package/dist/adapters/OpenCodeAdapter.d.ts.map +1 -1
  115. package/dist/adapters/OpenCodeAdapter.js +41 -37
  116. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  117. package/dist/adapters/index.d.ts +9 -9
  118. package/dist/adapters/index.d.ts.map +1 -1
  119. package/dist/adapters/index.js +8 -8
  120. package/dist/adapters/index.js.map +1 -1
  121. package/dist/capacity/codex.d.ts +3 -3
  122. package/dist/capacity/codex.d.ts.map +1 -1
  123. package/dist/capacity/codex.js +57 -57
  124. package/dist/capacity/codex.js.map +1 -1
  125. package/dist/capacity/index.d.ts +3 -3
  126. package/dist/capacity/index.d.ts.map +1 -1
  127. package/dist/capacity/index.js +8 -8
  128. package/dist/capacity/index.js.map +1 -1
  129. package/dist/capacity/types.d.ts +1 -1
  130. package/dist/capacity/types.js.map +1 -1
  131. package/dist/database/connection.d.ts +1 -1
  132. package/dist/database/connection.d.ts.map +1 -1
  133. package/dist/database/connection.js +15 -15
  134. package/dist/database/connection.js.map +1 -1
  135. package/dist/database/index.d.ts +3 -3
  136. package/dist/database/index.d.ts.map +1 -1
  137. package/dist/database/index.js +2 -2
  138. package/dist/database/index.js.map +1 -1
  139. package/dist/database/migrations/005_agent_runtime.sql +2 -0
  140. package/dist/database/schema.d.ts +1 -1
  141. package/dist/database/schema.d.ts.map +1 -1
  142. package/dist/database/schema.js +7 -7
  143. package/dist/database/schema.js.map +1 -1
  144. package/dist/durable/DurableAgent.d.ts +9 -9
  145. package/dist/durable/DurableAgent.d.ts.map +1 -1
  146. package/dist/durable/DurableAgent.js +16 -16
  147. package/dist/durable/DurableAgent.js.map +1 -1
  148. package/dist/durable/DurableAgentRepository.d.ts +4 -4
  149. package/dist/durable/DurableAgentRepository.d.ts.map +1 -1
  150. package/dist/durable/DurableAgentRepository.js +49 -48
  151. package/dist/durable/DurableAgentRepository.js.map +1 -1
  152. package/dist/durable/process.d.ts +1 -1
  153. package/dist/durable/process.d.ts.map +1 -1
  154. package/dist/durable/process.js +14 -14
  155. package/dist/durable/process.js.map +1 -1
  156. package/dist/durable/run.d.ts +2 -2
  157. package/dist/durable/run.d.ts.map +1 -1
  158. package/dist/durable/run.js +6 -6
  159. package/dist/durable/run.js.map +1 -1
  160. package/dist/durable/utils.d.ts +1 -1
  161. package/dist/durable/utils.d.ts.map +1 -1
  162. package/dist/durable/utils.js +4 -4
  163. package/dist/durable/utils.js.map +1 -1
  164. package/dist/index.d.ts +48 -43
  165. package/dist/index.d.ts.map +1 -1
  166. package/dist/index.js +28 -26
  167. package/dist/index.js.map +1 -1
  168. package/dist/providers/claude/ClaudeAgentMapper.d.ts +4 -4
  169. package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +1 -1
  170. package/dist/providers/claude/ClaudeAgentMapper.js +10 -10
  171. package/dist/providers/claude/ClaudeAgentMapper.js.map +1 -1
  172. package/dist/providers/claude/ClaudeCodeAdapter.d.ts +1 -1
  173. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +1 -1
  174. package/dist/providers/claude/ClaudeCodeAdapter.js +14 -14
  175. package/dist/providers/claude/ClaudeCodeAdapter.js.map +1 -1
  176. package/dist/providers/claude/ClaudeSessionLocator.d.ts +4 -4
  177. package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +1 -1
  178. package/dist/providers/claude/ClaudeSessionLocator.js +79 -79
  179. package/dist/providers/claude/ClaudeSessionLocator.js.map +1 -1
  180. package/dist/providers/claude/ClaudeSessionParser.d.ts +2 -2
  181. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +1 -1
  182. package/dist/providers/claude/ClaudeSessionParser.js +99 -99
  183. package/dist/providers/claude/ClaudeSessionParser.js.map +1 -1
  184. package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
  185. package/dist/providers/claude/durable/ClaudeCliProbe.js +16 -16
  186. package/dist/providers/claude/durable/ClaudeCliProbe.js.map +1 -1
  187. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts +5 -5
  188. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
  189. package/dist/providers/claude/durable/ClaudePrintAgentService.js +10 -10
  190. package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +1 -1
  191. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts +4 -4
  192. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
  193. package/dist/providers/claude/durable/ClaudePrintRunner.js +18 -18
  194. package/dist/providers/claude/durable/ClaudePrintRunner.js.map +1 -1
  195. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts +2 -2
  196. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
  197. package/dist/providers/claude/durable/ClaudeStreamParser.js +17 -17
  198. package/dist/providers/claude/durable/ClaudeStreamParser.js.map +1 -1
  199. package/dist/providers/codex/CodexAdapter.d.ts +27 -0
  200. package/dist/providers/codex/CodexAdapter.d.ts.map +1 -0
  201. package/dist/providers/codex/CodexAdapter.js +162 -0
  202. package/dist/providers/codex/CodexAdapter.js.map +1 -0
  203. package/dist/providers/codex/CodexAgentMapper.d.ts +9 -0
  204. package/dist/providers/codex/CodexAgentMapper.d.ts.map +1 -0
  205. package/dist/providers/codex/CodexAgentMapper.js +35 -0
  206. package/dist/providers/codex/CodexAgentMapper.js.map +1 -0
  207. package/dist/providers/codex/CodexSessionLocator.d.ts +44 -0
  208. package/dist/providers/codex/CodexSessionLocator.d.ts.map +1 -0
  209. package/dist/providers/codex/CodexSessionLocator.js +207 -0
  210. package/dist/providers/codex/CodexSessionLocator.js.map +1 -0
  211. package/dist/providers/codex/CodexSessionMapping.d.ts +23 -0
  212. package/dist/providers/codex/CodexSessionMapping.d.ts.map +1 -0
  213. package/dist/providers/codex/CodexSessionMapping.js +68 -0
  214. package/dist/providers/codex/CodexSessionMapping.js.map +1 -0
  215. package/dist/providers/codex/CodexSessionParser.d.ts +58 -0
  216. package/dist/providers/codex/CodexSessionParser.d.ts.map +1 -0
  217. package/dist/providers/codex/CodexSessionParser.js +262 -0
  218. package/dist/providers/codex/CodexSessionParser.js.map +1 -0
  219. package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +1 -1
  220. package/dist/providers/codex/durable/CodexCliProbe.js +22 -22
  221. package/dist/providers/codex/durable/CodexCliProbe.js.map +1 -1
  222. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts +6 -6
  223. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
  224. package/dist/providers/codex/durable/CodexPrintAgentService.js +10 -10
  225. package/dist/providers/codex/durable/CodexPrintAgentService.js.map +1 -1
  226. package/dist/providers/codex/durable/CodexPrintRunner.d.ts +4 -4
  227. package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +1 -1
  228. package/dist/providers/codex/durable/CodexPrintRunner.js +20 -20
  229. package/dist/providers/codex/durable/CodexPrintRunner.js.map +1 -1
  230. package/dist/providers/codex/durable/CodexStreamParser.d.ts +2 -2
  231. package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +1 -1
  232. package/dist/providers/codex/durable/CodexStreamParser.js +21 -21
  233. package/dist/providers/codex/durable/CodexStreamParser.js.map +1 -1
  234. package/dist/{adapters → providers/copilot}/CopilotAdapter.d.ts +11 -25
  235. package/dist/providers/copilot/CopilotAdapter.d.ts.map +1 -0
  236. package/dist/providers/copilot/CopilotAdapter.js +108 -0
  237. package/dist/providers/copilot/CopilotAdapter.js.map +1 -0
  238. package/dist/providers/copilot/CopilotAgentMapper.d.ts +9 -0
  239. package/dist/providers/copilot/CopilotAgentMapper.d.ts.map +1 -0
  240. package/dist/providers/copilot/CopilotAgentMapper.js +37 -0
  241. package/dist/providers/copilot/CopilotAgentMapper.js.map +1 -0
  242. package/dist/providers/copilot/CopilotSessionLocator.d.ts +19 -0
  243. package/dist/providers/copilot/CopilotSessionLocator.d.ts.map +1 -0
  244. package/dist/providers/copilot/CopilotSessionLocator.js +41 -0
  245. package/dist/providers/copilot/CopilotSessionLocator.js.map +1 -0
  246. package/dist/providers/copilot/CopilotSessionParser.d.ts +30 -0
  247. package/dist/providers/copilot/CopilotSessionParser.d.ts.map +1 -0
  248. package/dist/providers/copilot/CopilotSessionParser.js +181 -0
  249. package/dist/providers/copilot/CopilotSessionParser.js.map +1 -0
  250. package/dist/providers/gemini/GeminiAgentMapper.d.ts +9 -0
  251. package/dist/providers/gemini/GeminiAgentMapper.d.ts.map +1 -0
  252. package/dist/providers/gemini/GeminiAgentMapper.js +37 -0
  253. package/dist/providers/gemini/GeminiAgentMapper.js.map +1 -0
  254. package/dist/providers/gemini/GeminiCliAdapter.d.ts +52 -0
  255. package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +1 -0
  256. package/dist/providers/gemini/GeminiCliAdapter.js +188 -0
  257. package/dist/providers/gemini/GeminiCliAdapter.js.map +1 -0
  258. package/dist/providers/gemini/GeminiSessionLocator.d.ts +30 -0
  259. package/dist/providers/gemini/GeminiSessionLocator.d.ts.map +1 -0
  260. package/dist/providers/gemini/GeminiSessionLocator.js +142 -0
  261. package/dist/providers/gemini/GeminiSessionLocator.js.map +1 -0
  262. package/dist/providers/gemini/GeminiSessionParser.d.ts +94 -0
  263. package/dist/providers/gemini/GeminiSessionParser.d.ts.map +1 -0
  264. package/dist/providers/gemini/GeminiSessionParser.js +166 -0
  265. package/dist/providers/gemini/GeminiSessionParser.js.map +1 -0
  266. package/dist/providers/pi/PiAdapter.d.ts +28 -0
  267. package/dist/providers/pi/PiAdapter.d.ts.map +1 -0
  268. package/dist/providers/pi/PiAdapter.js +153 -0
  269. package/dist/providers/pi/PiAdapter.js.map +1 -0
  270. package/dist/providers/pi/PiAgentMapper.d.ts +9 -0
  271. package/dist/providers/pi/PiAgentMapper.d.ts.map +1 -0
  272. package/dist/providers/pi/PiAgentMapper.js +37 -0
  273. package/dist/providers/pi/PiAgentMapper.js.map +1 -0
  274. package/dist/providers/pi/PiSessionLocator.d.ts +23 -0
  275. package/dist/providers/pi/PiSessionLocator.d.ts.map +1 -0
  276. package/dist/providers/pi/PiSessionLocator.js +79 -0
  277. package/dist/providers/pi/PiSessionLocator.js.map +1 -0
  278. package/dist/providers/pi/PiSessionParser.d.ts +36 -0
  279. package/dist/providers/pi/PiSessionParser.d.ts.map +1 -0
  280. package/dist/providers/pi/PiSessionParser.js +191 -0
  281. package/dist/providers/pi/PiSessionParser.js.map +1 -0
  282. package/dist/providers/pi/PiSessionTracker.d.ts +23 -0
  283. package/dist/providers/pi/PiSessionTracker.d.ts.map +1 -0
  284. package/dist/providers/pi/PiSessionTracker.js +69 -0
  285. package/dist/providers/pi/PiSessionTracker.js.map +1 -0
  286. package/dist/providers/pi/durable/PiCliProbe.d.ts.map +1 -1
  287. package/dist/providers/pi/durable/PiCliProbe.js +15 -15
  288. package/dist/providers/pi/durable/PiCliProbe.js.map +1 -1
  289. package/dist/providers/pi/durable/PiPrintAgentService.d.ts +6 -6
  290. package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +1 -1
  291. package/dist/providers/pi/durable/PiPrintAgentService.js +10 -10
  292. package/dist/providers/pi/durable/PiPrintAgentService.js.map +1 -1
  293. package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +1 -1
  294. package/dist/providers/pi/durable/PiPrintProtocol.js +18 -18
  295. package/dist/providers/pi/durable/PiPrintProtocol.js.map +1 -1
  296. package/dist/providers/pi/durable/PiPrintRunner.d.ts +4 -4
  297. package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +1 -1
  298. package/dist/providers/pi/durable/PiPrintRunner.js +15 -15
  299. package/dist/providers/pi/durable/PiPrintRunner.js.map +1 -1
  300. package/dist/providers/pi/durable/PiStreamParser.d.ts +1 -1
  301. package/dist/providers/pi/durable/PiStreamParser.d.ts.map +1 -1
  302. package/dist/providers/pi/durable/PiStreamParser.js +16 -16
  303. package/dist/providers/pi/durable/PiStreamParser.js.map +1 -1
  304. package/dist/readiness/AgentReadiness.d.ts +6 -6
  305. package/dist/readiness/AgentReadiness.d.ts.map +1 -1
  306. package/dist/readiness/AgentReadiness.js +130 -130
  307. package/dist/readiness/AgentReadiness.js.map +1 -1
  308. package/dist/runtime/ManagedAgentRuntime.d.ts +69 -0
  309. package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -0
  310. package/dist/runtime/ManagedAgentRuntime.js +156 -0
  311. package/dist/runtime/ManagedAgentRuntime.js.map +1 -0
  312. package/dist/runtime/RuntimeFactory.d.ts +4 -0
  313. package/dist/runtime/RuntimeFactory.d.ts.map +1 -0
  314. package/dist/runtime/RuntimeFactory.js +11 -0
  315. package/dist/runtime/RuntimeFactory.js.map +1 -0
  316. package/dist/runtime/errors.d.ts +27 -0
  317. package/dist/runtime/errors.d.ts.map +1 -0
  318. package/dist/runtime/errors.js +42 -0
  319. package/dist/runtime/errors.js.map +1 -0
  320. package/dist/runtime/herdr/HerdrAgentDiscovery.d.ts +18 -0
  321. package/dist/runtime/herdr/HerdrAgentDiscovery.d.ts.map +1 -0
  322. package/dist/runtime/herdr/HerdrAgentDiscovery.js +183 -0
  323. package/dist/runtime/herdr/HerdrAgentDiscovery.js.map +1 -0
  324. package/dist/runtime/herdr/HerdrAgentRuntime.d.ts +36 -0
  325. package/dist/runtime/herdr/HerdrAgentRuntime.d.ts.map +1 -0
  326. package/dist/runtime/herdr/HerdrAgentRuntime.js +202 -0
  327. package/dist/runtime/herdr/HerdrAgentRuntime.js.map +1 -0
  328. package/dist/runtime/herdr/HerdrCliClient.d.ts +13 -0
  329. package/dist/runtime/herdr/HerdrCliClient.d.ts.map +1 -0
  330. package/dist/runtime/herdr/HerdrCliClient.js +60 -0
  331. package/dist/runtime/herdr/HerdrCliClient.js.map +1 -0
  332. package/dist/runtime/herdr/HerdrErrors.d.ts +7 -0
  333. package/dist/runtime/herdr/HerdrErrors.d.ts.map +1 -0
  334. package/dist/runtime/herdr/HerdrErrors.js +10 -0
  335. package/dist/runtime/herdr/HerdrErrors.js.map +1 -0
  336. package/dist/runtime/herdr/HerdrResponseParsers.d.ts +16 -0
  337. package/dist/runtime/herdr/HerdrResponseParsers.d.ts.map +1 -0
  338. package/dist/runtime/herdr/HerdrResponseParsers.js +107 -0
  339. package/dist/runtime/herdr/HerdrResponseParsers.js.map +1 -0
  340. package/dist/runtime/herdr/HerdrRuntimeRef.d.ts +9 -0
  341. package/dist/runtime/herdr/HerdrRuntimeRef.d.ts.map +1 -0
  342. package/dist/runtime/herdr/HerdrRuntimeRef.js +33 -0
  343. package/dist/runtime/herdr/HerdrRuntimeRef.js.map +1 -0
  344. package/dist/runtime/tmux/PidPolling.d.ts +5 -0
  345. package/dist/runtime/tmux/PidPolling.d.ts.map +1 -0
  346. package/dist/runtime/tmux/PidPolling.js +24 -0
  347. package/dist/runtime/tmux/PidPolling.js.map +1 -0
  348. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +17 -0
  349. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -0
  350. package/dist/runtime/tmux/TmuxAgentRuntime.js +80 -0
  351. package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -0
  352. package/dist/runtime/tmux/TmuxRuntimeRef.d.ts +5 -0
  353. package/dist/runtime/tmux/TmuxRuntimeRef.d.ts.map +1 -0
  354. package/dist/runtime/tmux/TmuxRuntimeRef.js +9 -0
  355. package/dist/runtime/tmux/TmuxRuntimeRef.js.map +1 -0
  356. package/dist/runtime/types.d.ts +54 -0
  357. package/dist/runtime/types.d.ts.map +1 -0
  358. package/dist/runtime/types.js +3 -0
  359. package/dist/runtime/types.js.map +1 -0
  360. package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
  361. package/dist/terminal/TerminalFocusManager.js +50 -50
  362. package/dist/terminal/TerminalFocusManager.js.map +1 -1
  363. package/dist/terminal/TmuxManager.d.ts.map +1 -1
  364. package/dist/terminal/TmuxManager.js +47 -47
  365. package/dist/terminal/TmuxManager.js.map +1 -1
  366. package/dist/terminal/TtyWriter.d.ts +1 -1
  367. package/dist/terminal/TtyWriter.d.ts.map +1 -1
  368. package/dist/terminal/TtyWriter.js +89 -89
  369. package/dist/terminal/TtyWriter.js.map +1 -1
  370. package/dist/terminal/index.d.ts +4 -4
  371. package/dist/terminal/index.js +3 -3
  372. package/dist/terminal/index.js.map +1 -1
  373. package/dist/utils/AgentRegistry.d.ts +10 -2
  374. package/dist/utils/AgentRegistry.d.ts.map +1 -1
  375. package/dist/utils/AgentRegistry.js +59 -26
  376. package/dist/utils/AgentRegistry.js.map +1 -1
  377. package/dist/utils/agent-requests.d.ts.map +1 -1
  378. package/dist/utils/agent-requests.js +5 -5
  379. package/dist/utils/agent-requests.js.map +1 -1
  380. package/dist/utils/agents.d.ts +2 -2
  381. package/dist/utils/agents.d.ts.map +1 -1
  382. package/dist/utils/agents.js +15 -15
  383. package/dist/utils/agents.js.map +1 -1
  384. package/dist/utils/applescript.js +1 -1
  385. package/dist/utils/applescript.js.map +1 -1
  386. package/dist/utils/index.d.ts +6 -6
  387. package/dist/utils/index.d.ts.map +1 -1
  388. package/dist/utils/index.js +4 -4
  389. package/dist/utils/index.js.map +1 -1
  390. package/dist/utils/matching.d.ts +2 -2
  391. package/dist/utils/matching.d.ts.map +1 -1
  392. package/dist/utils/matching.js +4 -4
  393. package/dist/utils/matching.js.map +1 -1
  394. package/dist/utils/process.d.ts +1 -1
  395. package/dist/utils/process.d.ts.map +1 -1
  396. package/dist/utils/process.js +74 -74
  397. package/dist/utils/process.js.map +1 -1
  398. package/dist/utils/session.d.ts +1 -1
  399. package/dist/utils/session.d.ts.map +1 -1
  400. package/dist/utils/session.js +7 -7
  401. package/dist/utils/session.js.map +1 -1
  402. package/dist/utils/sortAgents.d.ts +2 -2
  403. package/dist/utils/sortAgents.d.ts.map +1 -1
  404. package/dist/utils/sortAgents.js +5 -5
  405. package/dist/utils/sortAgents.js.map +1 -1
  406. package/package.json +18 -19
  407. package/src/AgentManager.ts +338 -274
  408. package/src/__tests__/AgentManager.test.ts +1143 -907
  409. package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +1657 -1368
  410. package/src/__tests__/adapters/CodexAdapter.test.ts +365 -1698
  411. package/src/__tests__/adapters/GrokCliAdapter.test.ts +325 -272
  412. package/src/__tests__/adapters/OpenCodeAdapter.test.ts +511 -455
  413. package/src/__tests__/capacity/codex.test.ts +178 -91
  414. package/src/__tests__/capacity/index.test.ts +27 -18
  415. package/src/__tests__/durable/CodexCliProbe.test.ts +75 -53
  416. package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +51 -40
  417. package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +89 -64
  418. package/src/__tests__/durable/CodexPrintAgentService.test.ts +196 -118
  419. package/src/__tests__/durable/CodexPrintRunner.test.ts +282 -162
  420. package/src/__tests__/fixtures/fake-claude.cjs +20 -13
  421. package/src/__tests__/fixtures/fake-codex.cjs +41 -30
  422. package/src/__tests__/print/ClaudeCliProbe.test.ts +27 -21
  423. package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +48 -40
  424. package/src/__tests__/print/ClaudePrintAgentService.test.ts +118 -67
  425. package/src/__tests__/print/ClaudePrintRunner.test.ts +136 -83
  426. package/src/__tests__/print/DurableAgent.test.ts +19 -16
  427. package/src/__tests__/print/DurableAgentRepository.sqlite.test.ts +109 -86
  428. package/src/__tests__/print/DurableAgentRepository.test.ts +170 -137
  429. package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +65 -65
  430. package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +400 -377
  431. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +182 -0
  432. package/src/__tests__/providers/codex/CodexSessionMapping.test.ts +63 -0
  433. package/src/__tests__/providers/codex/CodexSessionParser.test.ts +192 -0
  434. package/src/__tests__/providers/copilot/CopilotAdapter.test.ts +602 -0
  435. package/src/__tests__/providers/gemini/GeminiCliAdapter.test.ts +1299 -0
  436. package/src/__tests__/providers/pi/PiAdapter.test.ts +310 -0
  437. package/src/__tests__/providers/pi/PiSessionParser.test.ts +190 -0
  438. package/src/__tests__/providers/pi/PiSessionTracker.test.ts +79 -0
  439. package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +48 -32
  440. package/src/__tests__/providers/pi/durable/PiDurableAgentRepository.test.ts +24 -23
  441. package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +131 -59
  442. package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +66 -28
  443. package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +236 -90
  444. package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +20 -18
  445. package/src/__tests__/readiness/AgentReadiness.test.ts +217 -169
  446. package/src/__tests__/runtime/AgentRuntime.test.ts +8 -0
  447. package/src/__tests__/runtime/HerdrAgentDiscovery.test.ts +131 -0
  448. package/src/__tests__/runtime/HerdrAgentRuntime.test.ts +377 -0
  449. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +555 -0
  450. package/src/__tests__/terminal/TerminalFocusManager.test.ts +254 -253
  451. package/src/__tests__/terminal/TmuxManager.test.ts +157 -157
  452. package/src/__tests__/terminal/TtyWriter.test.ts +423 -419
  453. package/src/__tests__/utils/AgentRegistry.test.ts +516 -402
  454. package/src/__tests__/utils/ClaudeSessionParser.test.ts +276 -242
  455. package/src/__tests__/utils/agent-requests.test.ts +76 -56
  456. package/src/__tests__/utils/agents.test.ts +20 -20
  457. package/src/__tests__/utils/matching.test.ts +206 -171
  458. package/src/__tests__/utils/process.test.ts +276 -262
  459. package/src/__tests__/utils/session.test.ts +133 -139
  460. package/src/adapters/AgentAdapter.ts +134 -126
  461. package/src/adapters/GrokCliAdapter.ts +353 -342
  462. package/src/adapters/OpenCodeAdapter.ts +289 -259
  463. package/src/adapters/index.ts +15 -9
  464. package/src/capacity/codex.ts +137 -84
  465. package/src/capacity/index.ts +18 -13
  466. package/src/capacity/types.ts +1 -1
  467. package/src/database/connection.ts +73 -68
  468. package/src/database/index.ts +6 -6
  469. package/src/database/migrations/005_agent_runtime.sql +2 -0
  470. package/src/database/schema.ts +40 -38
  471. package/src/durable/DurableAgent.ts +85 -85
  472. package/src/durable/DurableAgentRepository.ts +409 -260
  473. package/src/durable/process.ts +22 -21
  474. package/src/durable/run.ts +61 -51
  475. package/src/durable/utils.ts +46 -41
  476. package/src/index.ts +151 -103
  477. package/src/providers/claude/ClaudeAgentMapper.ts +51 -50
  478. package/src/providers/claude/ClaudeCodeAdapter.ts +144 -136
  479. package/src/providers/claude/ClaudeSessionLocator.ts +291 -293
  480. package/src/providers/claude/ClaudeSessionParser.ts +322 -338
  481. package/src/providers/claude/durable/ClaudeCliProbe.ts +42 -37
  482. package/src/providers/claude/durable/ClaudePrintAgentService.ts +63 -50
  483. package/src/providers/claude/durable/ClaudePrintRunner.ts +79 -69
  484. package/src/providers/claude/durable/ClaudeStreamParser.ts +91 -62
  485. package/src/providers/codex/CodexAdapter.ts +205 -0
  486. package/src/providers/codex/CodexAgentMapper.ts +35 -0
  487. package/src/providers/codex/CodexSessionLocator.ts +279 -0
  488. package/src/providers/codex/CodexSessionMapping.ts +89 -0
  489. package/src/providers/codex/CodexSessionParser.ts +385 -0
  490. package/src/providers/codex/durable/CodexCliProbe.ts +50 -42
  491. package/src/providers/codex/durable/CodexPrintAgentService.ts +63 -49
  492. package/src/providers/codex/durable/CodexPrintRunner.ts +79 -69
  493. package/src/providers/codex/durable/CodexStreamParser.ts +97 -84
  494. package/src/providers/copilot/CopilotAdapter.ts +145 -0
  495. package/src/providers/copilot/CopilotAgentMapper.ts +36 -0
  496. package/src/providers/copilot/CopilotSessionLocator.ts +57 -0
  497. package/src/providers/copilot/CopilotSessionParser.ts +289 -0
  498. package/src/providers/gemini/GeminiAgentMapper.ts +36 -0
  499. package/src/providers/gemini/GeminiCliAdapter.ts +266 -0
  500. package/src/providers/gemini/GeminiSessionLocator.ts +183 -0
  501. package/src/providers/gemini/GeminiSessionParser.ts +271 -0
  502. package/src/providers/pi/PiAdapter.ts +183 -0
  503. package/src/providers/pi/PiAgentMapper.ts +36 -0
  504. package/src/providers/pi/PiSessionLocator.ts +95 -0
  505. package/src/providers/pi/PiSessionParser.ts +284 -0
  506. package/src/providers/pi/PiSessionTracker.ts +87 -0
  507. package/src/providers/pi/durable/PiCliProbe.ts +42 -34
  508. package/src/providers/pi/durable/PiPrintAgentService.ts +61 -53
  509. package/src/providers/pi/durable/PiPrintProtocol.ts +31 -29
  510. package/src/providers/pi/durable/PiPrintRunner.ts +75 -68
  511. package/src/providers/pi/durable/PiStreamParser.ts +82 -72
  512. package/src/readiness/AgentReadiness.ts +585 -513
  513. package/src/runtime/ManagedAgentRuntime.ts +266 -0
  514. package/src/runtime/RuntimeFactory.ts +13 -0
  515. package/src/runtime/errors.ts +50 -0
  516. package/src/runtime/herdr/HerdrAgentDiscovery.ts +178 -0
  517. package/src/runtime/herdr/HerdrAgentRuntime.ts +216 -0
  518. package/src/runtime/herdr/HerdrCliClient.ts +78 -0
  519. package/src/runtime/herdr/HerdrErrors.ts +9 -0
  520. package/src/runtime/herdr/HerdrResponseParsers.ts +86 -0
  521. package/src/runtime/herdr/HerdrRuntimeRef.ts +41 -0
  522. package/src/runtime/tmux/PidPolling.ts +34 -0
  523. package/src/runtime/tmux/TmuxAgentRuntime.ts +113 -0
  524. package/src/runtime/tmux/TmuxRuntimeRef.ts +9 -0
  525. package/src/runtime/types.ts +56 -0
  526. package/src/terminal/TerminalFocusManager.ts +215 -212
  527. package/src/terminal/TmuxManager.ts +99 -92
  528. package/src/terminal/TtyWriter.ts +203 -194
  529. package/src/terminal/index.ts +4 -4
  530. package/src/utils/AgentRegistry.ts +301 -238
  531. package/src/utils/agent-requests.ts +16 -16
  532. package/src/utils/agents.ts +41 -38
  533. package/src/utils/applescript.ts +4 -4
  534. package/src/utils/index.ts +12 -6
  535. package/src/utils/matching.ts +43 -43
  536. package/src/utils/process.ts +261 -258
  537. package/src/utils/session.ts +66 -66
  538. package/src/utils/sortAgents.ts +35 -33
  539. package/tsconfig.json +2 -8
  540. package/vitest.config.ts +16 -16
  541. package/.eslintrc.json +0 -31
  542. package/dist/__tests__/adapters/CopilotAdapter.test.js +0 -630
  543. package/dist/__tests__/adapters/CopilotAdapter.test.js.map +0 -1
  544. package/dist/__tests__/adapters/GeminiCliAdapter.test.js +0 -1384
  545. package/dist/__tests__/adapters/GeminiCliAdapter.test.js.map +0 -1
  546. package/dist/__tests__/adapters/PiAdapter.test.js +0 -618
  547. package/dist/__tests__/adapters/PiAdapter.test.js.map +0 -1
  548. package/dist/__tests__/database/DurableAgentsDatabase.test.js +0 -128
  549. package/dist/__tests__/database/DurableAgentsDatabase.test.js.map +0 -1
  550. package/dist/adapters/CodexAdapter.d.ts +0 -109
  551. package/dist/adapters/CodexAdapter.d.ts.map +0 -1
  552. package/dist/adapters/CodexAdapter.js +0 -710
  553. package/dist/adapters/CodexAdapter.js.map +0 -1
  554. package/dist/adapters/CopilotAdapter.d.ts.map +0 -1
  555. package/dist/adapters/CopilotAdapter.js +0 -329
  556. package/dist/adapters/CopilotAdapter.js.map +0 -1
  557. package/dist/adapters/GeminiCliAdapter.d.ts +0 -98
  558. package/dist/adapters/GeminiCliAdapter.d.ts.map +0 -1
  559. package/dist/adapters/GeminiCliAdapter.js +0 -513
  560. package/dist/adapters/GeminiCliAdapter.js.map +0 -1
  561. package/dist/adapters/PiAdapter.d.ts +0 -63
  562. package/dist/adapters/PiAdapter.d.ts.map +0 -1
  563. package/dist/adapters/PiAdapter.js +0 -453
  564. package/dist/adapters/PiAdapter.js.map +0 -1
  565. package/src/__tests__/adapters/CopilotAdapter.test.ts +0 -510
  566. package/src/__tests__/adapters/GeminiCliAdapter.test.ts +0 -1259
  567. package/src/__tests__/adapters/PiAdapter.test.ts +0 -458
  568. package/src/__tests__/database/DurableAgentsDatabase.test.ts +0 -102
  569. package/src/adapters/CodexAdapter.ts +0 -923
  570. package/src/adapters/CopilotAdapter.ts +0 -473
  571. package/src/adapters/GeminiCliAdapter.ts +0 -701
  572. 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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"}