@ai-devkit/agent-manager 0.31.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 +301 -0
  76. package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -0
  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 -41
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +27 -25
  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 +67 -0
  279. package/dist/readiness/AgentReadiness.d.ts.map +1 -0
  280. package/dist/readiness/AgentReadiness.js +614 -0
  281. package/dist/readiness/AgentReadiness.js.map +1 -0
  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 +242 -0
  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 +145 -86
  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 +727 -0
  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,47 +1,47 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- import { ClaudeCliProbe } from '../../providers/claude/durable/ClaudeCliProbe.js';
3
- describe('ClaudeCliProbe', ()=>{
4
- it('validates only version/help and requires the print session flags', async ()=>{
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { ClaudeCliProbe } from "../../providers/claude/durable/ClaudeCliProbe.js";
3
+ describe("ClaudeCliProbe", ()=>{
4
+ it("validates only version/help and requires the print session flags", async ()=>{
5
5
  const exec = vi.fn().mockResolvedValueOnce({
6
- stdout: '2.1.220\n',
7
- stderr: ''
6
+ stdout: "2.1.220\n",
7
+ stderr: ""
8
8
  }).mockResolvedValueOnce({
9
- stdout: '--print --session-id --resume --output-format stream-json',
10
- stderr: ''
9
+ stdout: "--print --session-id --resume --output-format stream-json",
10
+ stderr: ""
11
11
  });
12
12
  await expect(new ClaudeCliProbe({
13
13
  exec
14
14
  }).validate()).resolves.toEqual({
15
- executable: 'claude',
16
- version: '2.1.220'
15
+ executable: "claude",
16
+ version: "2.1.220"
17
17
  });
18
18
  expect(exec.mock.calls).toEqual([
19
19
  [
20
- 'claude',
20
+ "claude",
21
21
  [
22
- '--version'
22
+ "--version"
23
23
  ]
24
24
  ],
25
25
  [
26
- 'claude',
26
+ "claude",
27
27
  [
28
- '--help'
28
+ "--help"
29
29
  ]
30
30
  ]
31
31
  ]);
32
32
  });
33
- it('rejects a CLI missing a required capability', async ()=>{
33
+ it("rejects a CLI missing a required capability", async ()=>{
34
34
  const exec = vi.fn().mockResolvedValueOnce({
35
- stdout: 'old',
36
- stderr: ''
35
+ stdout: "old",
36
+ stderr: ""
37
37
  }).mockResolvedValueOnce({
38
- stdout: '--print only',
39
- stderr: ''
38
+ stdout: "--print only",
39
+ stderr: ""
40
40
  });
41
41
  await expect(new ClaudeCliProbe({
42
42
  exec
43
43
  }).validate()).rejects.toMatchObject({
44
- code: 'CLAUDE_CLI_UNSUPPORTED'
44
+ code: "CLAUDE_CLI_UNSUPPORTED"
45
45
  });
46
46
  });
47
47
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__tests__/print/ClaudeCliProbe.test.ts"],"sourcesContent":["import { describe, expect, it, vi } from 'vitest';\nimport { ClaudeCliProbe } from '../../providers/claude/durable/ClaudeCliProbe.js';\n\ndescribe('ClaudeCliProbe', () => {\n it('validates only version/help and requires the print session flags', async () => {\n const exec = vi.fn()\n .mockResolvedValueOnce({ stdout: '2.1.220\\n', stderr: '' })\n .mockResolvedValueOnce({\n stdout: '--print --session-id --resume --output-format stream-json', stderr: '',\n });\n\n await expect(new ClaudeCliProbe({ exec }).validate()).resolves.toEqual({\n executable: 'claude', version: '2.1.220',\n });\n expect(exec.mock.calls).toEqual([\n ['claude', ['--version']],\n ['claude', ['--help']],\n ]);\n });\n\n it('rejects a CLI missing a required capability', async () => {\n const exec = vi.fn()\n .mockResolvedValueOnce({ stdout: 'old', stderr: '' })\n .mockResolvedValueOnce({ stdout: '--print only', stderr: '' });\n\n await expect(new ClaudeCliProbe({ exec }).validate()).rejects.toMatchObject({ code: 'CLAUDE_CLI_UNSUPPORTED' });\n });\n});\n"],"names":["describe","expect","it","vi","ClaudeCliProbe","exec","fn","mockResolvedValueOnce","stdout","stderr","validate","resolves","toEqual","executable","version","mock","calls","rejects","toMatchObject","code"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,SAAS;AAClD,SAASC,cAAc,QAAQ,mDAAmD;AAElFJ,SAAS,kBAAkB;IACvBE,GAAG,oEAAoE;QACnE,MAAMG,OAAOF,GAAGG,EAAE,GACbC,qBAAqB,CAAC;YAAEC,QAAQ;YAAaC,QAAQ;QAAG,GACxDF,qBAAqB,CAAC;YACnBC,QAAQ;YAA6DC,QAAQ;QACjF;QAEJ,MAAMR,OAAO,IAAIG,eAAe;YAAEC;QAAK,GAAGK,QAAQ,IAAIC,QAAQ,CAACC,OAAO,CAAC;YACnEC,YAAY;YAAUC,SAAS;QACnC;QACAb,OAAOI,KAAKU,IAAI,CAACC,KAAK,EAAEJ,OAAO,CAAC;YAC5B;gBAAC;gBAAU;oBAAC;iBAAY;aAAC;YACzB;gBAAC;gBAAU;oBAAC;iBAAS;aAAC;SACzB;IACL;IAEAV,GAAG,+CAA+C;QAC9C,MAAMG,OAAOF,GAAGG,EAAE,GACbC,qBAAqB,CAAC;YAAEC,QAAQ;YAAOC,QAAQ;QAAG,GAClDF,qBAAqB,CAAC;YAAEC,QAAQ;YAAgBC,QAAQ;QAAG;QAEhE,MAAMR,OAAO,IAAIG,eAAe;YAAEC;QAAK,GAAGK,QAAQ,IAAIO,OAAO,CAACC,aAAa,CAAC;YAAEC,MAAM;QAAyB;IACjH;AACJ"}
1
+ {"version":3,"sources":["../../../src/__tests__/print/ClaudeCliProbe.test.ts"],"sourcesContent":["import { describe, expect, it, vi } from \"vitest\";\nimport { ClaudeCliProbe } from \"../../providers/claude/durable/ClaudeCliProbe.js\";\n\ndescribe(\"ClaudeCliProbe\", () => {\n it(\"validates only version/help and requires the print session flags\", async () => {\n const exec = vi\n .fn()\n .mockResolvedValueOnce({ stdout: \"2.1.220\\n\", stderr: \"\" })\n .mockResolvedValueOnce({\n stdout: \"--print --session-id --resume --output-format stream-json\",\n stderr: \"\",\n });\n\n await expect(new ClaudeCliProbe({ exec }).validate()).resolves.toEqual({\n executable: \"claude\",\n version: \"2.1.220\",\n });\n expect(exec.mock.calls).toEqual([\n [\"claude\", [\"--version\"]],\n [\"claude\", [\"--help\"]],\n ]);\n });\n\n it(\"rejects a CLI missing a required capability\", async () => {\n const exec = vi\n .fn()\n .mockResolvedValueOnce({ stdout: \"old\", stderr: \"\" })\n .mockResolvedValueOnce({ stdout: \"--print only\", stderr: \"\" });\n\n await expect(new ClaudeCliProbe({ exec }).validate()).rejects.toMatchObject({\n code: \"CLAUDE_CLI_UNSUPPORTED\",\n });\n });\n});\n"],"names":["describe","expect","it","vi","ClaudeCliProbe","exec","fn","mockResolvedValueOnce","stdout","stderr","validate","resolves","toEqual","executable","version","mock","calls","rejects","toMatchObject","code"],"mappings":"AAAA,SAASA,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,SAAS;AAClD,SAASC,cAAc,QAAQ,mDAAmD;AAElFJ,SAAS,kBAAkB;IACzBE,GAAG,oEAAoE;QACrE,MAAMG,OAAOF,GACVG,EAAE,GACFC,qBAAqB,CAAC;YAAEC,QAAQ;YAAaC,QAAQ;QAAG,GACxDF,qBAAqB,CAAC;YACrBC,QAAQ;YACRC,QAAQ;QACV;QAEF,MAAMR,OAAO,IAAIG,eAAe;YAAEC;QAAK,GAAGK,QAAQ,IAAIC,QAAQ,CAACC,OAAO,CAAC;YACrEC,YAAY;YACZC,SAAS;QACX;QACAb,OAAOI,KAAKU,IAAI,CAACC,KAAK,EAAEJ,OAAO,CAAC;YAC9B;gBAAC;gBAAU;oBAAC;iBAAY;aAAC;YACzB;gBAAC;gBAAU;oBAAC;iBAAS;aAAC;SACvB;IACH;IAEAV,GAAG,+CAA+C;QAChD,MAAMG,OAAOF,GACVG,EAAE,GACFC,qBAAqB,CAAC;YAAEC,QAAQ;YAAOC,QAAQ;QAAG,GAClDF,qBAAqB,CAAC;YAAEC,QAAQ;YAAgBC,QAAQ;QAAG;QAE9D,MAAMR,OAAO,IAAIG,eAAe;YAAEC;QAAK,GAAGK,QAAQ,IAAIO,OAAO,CAACC,aAAa,CAAC;YAC1EC,MAAM;QACR;IACF;AACF"}
@@ -1,8 +1,8 @@
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 { ClaudePrintAgentService, DurableAgentRepository } from '../../index.js';
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 { ClaudePrintAgentService, DurableAgentRepository } from "../../index.js";
6
6
  const roots = [];
7
7
  afterEach(()=>{
8
8
  for (const root of roots.splice(0))fs.rmSync(root, {
@@ -10,11 +10,11 @@ afterEach(()=>{
10
10
  force: true
11
11
  });
12
12
  });
13
- describe('Claude durable-agent fake-provider journey', ()=>{
14
- it('creates without invocation, then starts and resumes the same session through stdin', async ()=>{
15
- const root = fs.mkdtempSync(path.join(os.tmpdir(), 'durable-agent-integration-'));
13
+ describe("Claude durable-agent fake-provider journey", ()=>{
14
+ it("creates without invocation, then starts and resumes the same session through stdin", async ()=>{
15
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "durable-agent-integration-"));
16
16
  roots.push(root);
17
- const cwd = path.join(root, 'project');
17
+ const cwd = path.join(root, "project");
18
18
  fs.mkdirSync(cwd);
19
19
  const processInspector = {
20
20
  getIdentity: (pid)=>({
@@ -23,14 +23,14 @@ describe('Claude durable-agent fake-provider journey', ()=>{
23
23
  })
24
24
  };
25
25
  const repository = new DurableAgentRepository({
26
- dbPath: path.join(root, 'state', 'agents.db'),
26
+ dbPath: path.join(root, "state", "agents.db"),
27
27
  processInspector
28
28
  });
29
29
  const runner = {
30
30
  run: vi.fn().mockImplementation(async (request)=>{
31
31
  await request.onSpawn({
32
32
  pid: 42,
33
- startedAt: 'process-42'
33
+ startedAt: "process-42"
34
34
  });
35
35
  return {
36
36
  sessionId: request.agent.providerSessionId,
@@ -47,27 +47,27 @@ describe('Claude durable-agent fake-provider journey', ()=>{
47
47
  runner
48
48
  });
49
49
  const created = await service.create({
50
- name: 'reviewer',
50
+ name: "reviewer",
51
51
  cwd
52
52
  });
53
- await expect(service.send(created.id, 'first secret')).resolves.toMatchObject({
54
- result: 'answer:first secret'
53
+ await expect(service.send(created.id, "first secret")).resolves.toMatchObject({
54
+ result: "answer:first secret"
55
55
  });
56
- await expect(service.send(created.id, 'follow up')).resolves.toMatchObject({
57
- result: 'answer:follow up'
56
+ await expect(service.send(created.id, "follow up")).resolves.toMatchObject({
57
+ result: "answer:follow up"
58
58
  });
59
59
  expect(runner.run.mock.calls[0][0]).toMatchObject({
60
60
  firstRun: true,
61
- prompt: 'first secret'
61
+ prompt: "first secret"
62
62
  });
63
63
  expect(runner.run.mock.calls[1][0]).toMatchObject({
64
64
  firstRun: false,
65
- prompt: 'follow up'
65
+ prompt: "follow up"
66
66
  });
67
67
  const persisted = await repository.getById(created.id);
68
68
  expect(persisted).toMatchObject({
69
- state: 'ready',
70
- sessionHealth: 'healthy'
69
+ state: "ready",
70
+ sessionHealth: "healthy"
71
71
  });
72
72
  });
73
73
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__tests__/print/ClaudePrintAgent.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 ClaudePrintAgentService,\n DurableAgentRepository,\n type ProcessInspector,\n} from '../../index.js';\n\nconst roots: string[] = [];\n\nafterEach(() => {\n for (const root of roots.splice(0)) fs.rmSync(root, { recursive: true, force: true });\n});\n\ndescribe('Claude durable-agent fake-provider journey', () => {\n it('creates without invocation, then starts and resumes the same session through stdin', async () => {\n const root = fs.mkdtempSync(path.join(os.tmpdir(), 'durable-agent-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, 'state', '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 return { sessionId: request.agent.providerSessionId, result: `answer:${request.prompt}`, exitCode: 0 };\n }),\n };\n const service = new ClaudePrintAgentService({\n repository,\n probe: { validate: vi.fn() },\n runner,\n });\n\n const created = await service.create({ name: 'reviewer', cwd });\n\n await expect(service.send(created.id, 'first secret')).resolves.toMatchObject({ result: 'answer:first secret' });\n await expect(service.send(created.id, 'follow up')).resolves.toMatchObject({ result: 'answer:follow up' });\n\n expect(runner.run.mock.calls[0][0]).toMatchObject({ firstRun: true, prompt: 'first secret' });\n expect(runner.run.mock.calls[1][0]).toMatchObject({ firstRun: false, prompt: 'follow up' });\n\n const persisted = await repository.getById(created.id);\n expect(persisted).toMatchObject({ state: 'ready', sessionHealth: 'healthy' });\n });\n});\n"],"names":["fs","os","path","afterEach","describe","expect","it","vi","ClaudePrintAgentService","DurableAgentRepository","roots","root","splice","rmSync","recursive","force","mkdtempSync","join","tmpdir","push","cwd","mkdirSync","processInspector","getIdentity","pid","startedAt","repository","dbPath","runner","run","fn","mockImplementation","request","onSpawn","sessionId","agent","providerSessionId","result","prompt","exitCode","service","probe","validate","created","create","name","send","id","resolves","toMatchObject","mock","calls","firstRun","persisted","getById","state","sessionHealth"],"mappings":"AAAA,OAAOA,QAAQ,UAAU;AACzB,OAAOC,QAAQ,UAAU;AACzB,OAAOC,UAAU,YAAY;AAC7B,SAASC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,SAAS;AAC7D,SACIC,uBAAuB,EACvBC,sBAAsB,QAEnB,iBAAiB;AAExB,MAAMC,QAAkB,EAAE;AAE1BP,UAAU;IACN,KAAK,MAAMQ,QAAQD,MAAME,MAAM,CAAC,GAAIZ,GAAGa,MAAM,CAACF,MAAM;QAAEG,WAAW;QAAMC,OAAO;IAAK;AACvF;AAEAX,SAAS,8CAA8C;IACnDE,GAAG,sFAAsF;QACrF,MAAMK,OAAOX,GAAGgB,WAAW,CAACd,KAAKe,IAAI,CAAChB,GAAGiB,MAAM,IAAI;QACnDR,MAAMS,IAAI,CAACR;QACX,MAAMS,MAAMlB,KAAKe,IAAI,CAACN,MAAM;QAC5BX,GAAGqB,SAAS,CAACD;QACb,MAAME,mBAAqC;YACvCC,aAAa,CAACC,MAAS,CAAA;oBAAEA;oBAAKC,WAAW,CAAC,QAAQ,EAAED,KAAK;gBAAC,CAAA;QAC9D;QACA,MAAME,aAAa,IAAIjB,uBAAuB;YAC1CkB,QAAQzB,KAAKe,IAAI,CAACN,MAAM,SAAS;YACjCW;QACJ;QACA,MAAMM,SAAS;YACXC,KAAKtB,GAAGuB,EAAE,GAAGC,kBAAkB,CAAC,OAAOC;gBACnC,MAAMA,QAAQC,OAAO,CAAC;oBAAET,KAAK;oBAAIC,WAAW;gBAAa;gBACzD,OAAO;oBAAES,WAAWF,QAAQG,KAAK,CAACC,iBAAiB;oBAAEC,QAAQ,CAAC,OAAO,EAAEL,QAAQM,MAAM,EAAE;oBAAEC,UAAU;gBAAE;YACzG;QACJ;QACA,MAAMC,UAAU,IAAIhC,wBAAwB;YACxCkB;YACAe,OAAO;gBAAEC,UAAUnC,GAAGuB,EAAE;YAAG;YAC3BF;QACJ;QAEA,MAAMe,UAAU,MAAMH,QAAQI,MAAM,CAAC;YAAEC,MAAM;YAAYzB;QAAI;QAE7D,MAAMf,OAAOmC,QAAQM,IAAI,CAACH,QAAQI,EAAE,EAAE,iBAAiBC,QAAQ,CAACC,aAAa,CAAC;YAAEZ,QAAQ;QAAsB;QAC9G,MAAMhC,OAAOmC,QAAQM,IAAI,CAACH,QAAQI,EAAE,EAAE,cAAcC,QAAQ,CAACC,aAAa,CAAC;YAAEZ,QAAQ;QAAmB;QAExGhC,OAAOuB,OAAOC,GAAG,CAACqB,IAAI,CAACC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAEF,aAAa,CAAC;YAAEG,UAAU;YAAMd,QAAQ;QAAe;QAC3FjC,OAAOuB,OAAOC,GAAG,CAACqB,IAAI,CAACC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAEF,aAAa,CAAC;YAAEG,UAAU;YAAOd,QAAQ;QAAY;QAEzF,MAAMe,YAAY,MAAM3B,WAAW4B,OAAO,CAACX,QAAQI,EAAE;QACrD1C,OAAOgD,WAAWJ,aAAa,CAAC;YAAEM,OAAO;YAASC,eAAe;QAAU;IAC/E;AACJ"}
1
+ {"version":3,"sources":["../../../src/__tests__/print/ClaudePrintAgent.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 ClaudePrintAgentService,\n DurableAgentRepository,\n type ProcessInspector,\n} from \"../../index.js\";\n\nconst roots: string[] = [];\n\nafterEach(() => {\n for (const root of roots.splice(0)) fs.rmSync(root, { recursive: true, force: true });\n});\n\ndescribe(\"Claude durable-agent fake-provider journey\", () => {\n it(\"creates without invocation, then starts and resumes the same session through stdin\", async () => {\n const root = fs.mkdtempSync(path.join(os.tmpdir(), \"durable-agent-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, \"state\", \"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 return {\n sessionId: request.agent.providerSessionId,\n result: `answer:${request.prompt}`,\n exitCode: 0,\n };\n }),\n };\n const service = new ClaudePrintAgentService({\n repository,\n probe: { validate: vi.fn() },\n runner,\n });\n\n const created = await service.create({ name: \"reviewer\", cwd });\n\n await expect(service.send(created.id, \"first secret\")).resolves.toMatchObject({\n result: \"answer:first secret\",\n });\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]).toMatchObject({ firstRun: true, prompt: \"first secret\" });\n expect(runner.run.mock.calls[1][0]).toMatchObject({ firstRun: false, prompt: \"follow up\" });\n\n const persisted = await repository.getById(created.id);\n expect(persisted).toMatchObject({ state: \"ready\", sessionHealth: \"healthy\" });\n });\n});\n"],"names":["fs","os","path","afterEach","describe","expect","it","vi","ClaudePrintAgentService","DurableAgentRepository","roots","root","splice","rmSync","recursive","force","mkdtempSync","join","tmpdir","push","cwd","mkdirSync","processInspector","getIdentity","pid","startedAt","repository","dbPath","runner","run","fn","mockImplementation","request","onSpawn","sessionId","agent","providerSessionId","result","prompt","exitCode","service","probe","validate","created","create","name","send","id","resolves","toMatchObject","mock","calls","firstRun","persisted","getById","state","sessionHealth"],"mappings":"AAAA,OAAOA,QAAQ,UAAU;AACzB,OAAOC,QAAQ,UAAU;AACzB,OAAOC,UAAU,YAAY;AAC7B,SAASC,SAAS,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,EAAE,EAAEC,EAAE,QAAQ,SAAS;AAC7D,SACEC,uBAAuB,EACvBC,sBAAsB,QAEjB,iBAAiB;AAExB,MAAMC,QAAkB,EAAE;AAE1BP,UAAU;IACR,KAAK,MAAMQ,QAAQD,MAAME,MAAM,CAAC,GAAIZ,GAAGa,MAAM,CAACF,MAAM;QAAEG,WAAW;QAAMC,OAAO;IAAK;AACrF;AAEAX,SAAS,8CAA8C;IACrDE,GAAG,sFAAsF;QACvF,MAAMK,OAAOX,GAAGgB,WAAW,CAACd,KAAKe,IAAI,CAAChB,GAAGiB,MAAM,IAAI;QACnDR,MAAMS,IAAI,CAACR;QACX,MAAMS,MAAMlB,KAAKe,IAAI,CAACN,MAAM;QAC5BX,GAAGqB,SAAS,CAACD;QACb,MAAME,mBAAqC;YACzCC,aAAa,CAACC,MAAS,CAAA;oBAAEA;oBAAKC,WAAW,CAAC,QAAQ,EAAED,KAAK;gBAAC,CAAA;QAC5D;QACA,MAAME,aAAa,IAAIjB,uBAAuB;YAC5CkB,QAAQzB,KAAKe,IAAI,CAACN,MAAM,SAAS;YACjCW;QACF;QACA,MAAMM,SAAS;YACbC,KAAKtB,GAAGuB,EAAE,GAAGC,kBAAkB,CAAC,OAAOC;gBACrC,MAAMA,QAAQC,OAAO,CAAC;oBAAET,KAAK;oBAAIC,WAAW;gBAAa;gBACzD,OAAO;oBACLS,WAAWF,QAAQG,KAAK,CAACC,iBAAiB;oBAC1CC,QAAQ,CAAC,OAAO,EAAEL,QAAQM,MAAM,EAAE;oBAClCC,UAAU;gBACZ;YACF;QACF;QACA,MAAMC,UAAU,IAAIhC,wBAAwB;YAC1CkB;YACAe,OAAO;gBAAEC,UAAUnC,GAAGuB,EAAE;YAAG;YAC3BF;QACF;QAEA,MAAMe,UAAU,MAAMH,QAAQI,MAAM,CAAC;YAAEC,MAAM;YAAYzB;QAAI;QAE7D,MAAMf,OAAOmC,QAAQM,IAAI,CAACH,QAAQI,EAAE,EAAE,iBAAiBC,QAAQ,CAACC,aAAa,CAAC;YAC5EZ,QAAQ;QACV;QACA,MAAMhC,OAAOmC,QAAQM,IAAI,CAACH,QAAQI,EAAE,EAAE,cAAcC,QAAQ,CAACC,aAAa,CAAC;YACzEZ,QAAQ;QACV;QAEAhC,OAAOuB,OAAOC,GAAG,CAACqB,IAAI,CAACC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAEF,aAAa,CAAC;YAAEG,UAAU;YAAMd,QAAQ;QAAe;QAC3FjC,OAAOuB,OAAOC,GAAG,CAACqB,IAAI,CAACC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAEF,aAAa,CAAC;YAAEG,UAAU;YAAOd,QAAQ;QAAY;QAEzF,MAAMe,YAAY,MAAM3B,WAAW4B,OAAO,CAACX,QAAQI,EAAE;QACrD1C,OAAOgD,WAAWJ,aAAa,CAAC;YAAEM,OAAO;YAASC,eAAe;QAAU;IAC7E;AACF"}
@@ -1,18 +1,18 @@
1
- import { describe, expect, it, vi } from 'vitest';
2
- describe('ClaudePrintAgentService', ()=>{
3
- it('validates before create and does not run Claude', async ()=>{
4
- const api = await import('../../index.js');
5
- expect(api).toHaveProperty('ClaudePrintAgentService');
1
+ import { describe, expect, it, vi } from "vitest";
2
+ describe("ClaudePrintAgentService", ()=>{
3
+ it("validates before create and does not run Claude", async ()=>{
4
+ const api = await import("../../index.js");
5
+ expect(api).toHaveProperty("ClaudePrintAgentService");
6
6
  const probe = {
7
7
  validate: vi.fn().mockResolvedValue({
8
- executable: 'claude',
9
- version: '2.1.220'
8
+ executable: "claude",
9
+ version: "2.1.220"
10
10
  })
11
11
  };
12
12
  const repository = {
13
13
  create: vi.fn().mockResolvedValue({
14
- id: 'agent-id',
15
- name: 'reviewer'
14
+ id: "agent-id",
15
+ name: "reviewer"
16
16
  })
17
17
  };
18
18
  const runner = {
@@ -24,38 +24,38 @@ describe('ClaudePrintAgentService', ()=>{
24
24
  probe,
25
25
  runner
26
26
  }).create({
27
- name: 'reviewer',
28
- cwd: '/project'
27
+ name: "reviewer",
28
+ cwd: "/project"
29
29
  })).resolves.toMatchObject({
30
- id: 'agent-id'
30
+ id: "agent-id"
31
31
  });
32
32
  expect(probe.validate).toHaveBeenCalledOnce();
33
33
  expect(repository.create).toHaveBeenCalledWith({
34
- name: 'reviewer',
35
- cwd: '/project'
34
+ name: "reviewer",
35
+ cwd: "/project"
36
36
  });
37
37
  expect(runner.run).not.toHaveBeenCalled();
38
38
  });
39
- it('runs first and resumed sends and records provider identity/results', async ()=>{
40
- const api = await import('../../index.js');
39
+ it("runs first and resumed sends and records provider identity/results", async ()=>{
40
+ const api = await import("../../index.js");
41
41
  const base = {
42
- id: 'id',
43
- name: 'reviewer',
44
- provider: 'claude',
45
- providerSessionId: 'session',
46
- sessionHealth: 'uninitialized'
42
+ id: "id",
43
+ name: "reviewer",
44
+ provider: "claude",
45
+ providerSessionId: "session",
46
+ sessionHealth: "uninitialized"
47
47
  };
48
48
  const repository = {
49
49
  resolve: vi.fn().mockResolvedValue(base),
50
50
  acquireRun: vi.fn().mockResolvedValueOnce({
51
51
  agent: base,
52
- token: 'one'
52
+ token: "one"
53
53
  }).mockResolvedValueOnce({
54
54
  agent: {
55
55
  ...base,
56
- sessionHealth: 'healthy'
56
+ sessionHealth: "healthy"
57
57
  },
58
- token: 'two'
58
+ token: "two"
59
59
  }),
60
60
  recordProviderProcess: vi.fn(),
61
61
  completeRun: vi.fn().mockResolvedValue({})
@@ -64,11 +64,11 @@ describe('ClaudePrintAgentService', ()=>{
64
64
  run: vi.fn().mockImplementation(async (request)=>{
65
65
  await request.onSpawn({
66
66
  pid: 42,
67
- startedAt: 'start'
67
+ startedAt: "start"
68
68
  });
69
69
  return {
70
- sessionId: 'session',
71
- result: 'answer',
70
+ sessionId: "session",
71
+ result: "answer",
72
72
  exitCode: 0
73
73
  };
74
74
  })
@@ -80,37 +80,37 @@ describe('ClaudePrintAgentService', ()=>{
80
80
  validate: vi.fn()
81
81
  },
82
82
  runner,
83
- executable: 'fake-claude'
83
+ executable: "fake-claude"
84
84
  });
85
- await service.send('reviewer', 'first');
86
- await service.send('id', 'later');
85
+ await service.send("reviewer", "first");
86
+ await service.send("id", "later");
87
87
  expect(runner.run.mock.calls[0][0]).toMatchObject({
88
- prompt: 'first',
88
+ prompt: "first",
89
89
  firstRun: true,
90
- executable: 'fake-claude'
90
+ executable: "fake-claude"
91
91
  });
92
92
  expect(runner.run.mock.calls[1][0]).toMatchObject({
93
- prompt: 'later',
93
+ prompt: "later",
94
94
  firstRun: false,
95
- executable: 'fake-claude'
95
+ executable: "fake-claude"
96
96
  });
97
- expect(repository.recordProviderProcess).toHaveBeenCalledWith('id', 'one', {
97
+ expect(repository.recordProviderProcess).toHaveBeenCalledWith("id", "one", {
98
98
  pid: 42,
99
- startedAt: 'start'
99
+ startedAt: "start"
100
100
  });
101
- expect(repository.completeRun).toHaveBeenCalledWith('id', 'one', expect.objectContaining({
102
- status: 'succeeded',
101
+ expect(repository.completeRun).toHaveBeenCalledWith("id", "one", expect.objectContaining({
102
+ status: "succeeded",
103
103
  exitCode: 0,
104
- sessionHealth: 'healthy'
104
+ sessionHealth: "healthy"
105
105
  }));
106
106
  });
107
- it('rejects a non-Claude target without acquiring or mutating it', async ()=>{
108
- const api = await import('../../index.js');
107
+ it("rejects a non-Claude target without acquiring or mutating it", async ()=>{
108
+ const api = await import("../../index.js");
109
109
  const Service = api.ClaudePrintAgentService;
110
110
  const target = {
111
- id: 'id',
112
- name: 'reviewer',
113
- provider: 'pi'
111
+ id: "id",
112
+ name: "reviewer",
113
+ provider: "pi"
114
114
  };
115
115
  const repository = {
116
116
  resolve: vi.fn().mockResolvedValue(target),
@@ -126,36 +126,36 @@ describe('ClaudePrintAgentService', ()=>{
126
126
  runner: {
127
127
  run: vi.fn()
128
128
  }
129
- }).send('reviewer', 'x')).rejects.toMatchObject({
130
- code: 'CLAUDE_PRINT_UNSUPPORTED'
129
+ }).send("reviewer", "x")).rejects.toMatchObject({
130
+ code: "CLAUDE_PRINT_UNSUPPORTED"
131
131
  });
132
132
  expect(repository.acquireRun).not.toHaveBeenCalled();
133
133
  expect(repository.completeRun).not.toHaveBeenCalled();
134
134
  });
135
- it('does not turn a successful completion write failure into a second completion', async ()=>{
136
- const api = await import('../../index.js');
135
+ it("does not turn a successful completion write failure into a second completion", async ()=>{
136
+ const api = await import("../../index.js");
137
137
  const Service = api.ClaudePrintAgentService;
138
138
  const target = {
139
- id: 'id',
140
- name: 'reviewer',
141
- provider: 'claude',
142
- providerSessionId: 'session',
143
- sessionHealth: 'healthy'
139
+ id: "id",
140
+ name: "reviewer",
141
+ provider: "claude",
142
+ providerSessionId: "session",
143
+ sessionHealth: "healthy"
144
144
  };
145
- const completionFailure = new Error('completion failed');
145
+ const completionFailure = new Error("completion failed");
146
146
  const repository = {
147
147
  resolve: vi.fn().mockResolvedValue(target),
148
148
  acquireRun: vi.fn().mockResolvedValue({
149
149
  agent: target,
150
- token: 'one'
150
+ token: "one"
151
151
  }),
152
152
  recordProviderProcess: vi.fn(),
153
153
  completeRun: vi.fn().mockRejectedValue(completionFailure)
154
154
  };
155
155
  const runner = {
156
156
  run: vi.fn().mockResolvedValue({
157
- sessionId: 'session',
158
- result: 'answer',
157
+ sessionId: "session",
158
+ result: "answer",
159
159
  exitCode: 0
160
160
  })
161
161
  };
@@ -165,7 +165,7 @@ describe('ClaudePrintAgentService', ()=>{
165
165
  validate: vi.fn()
166
166
  },
167
167
  runner
168
- }).send('reviewer', 'x')).rejects.toBe(completionFailure);
168
+ }).send("reviewer", "x")).rejects.toBe(completionFailure);
169
169
  expect(repository.completeRun).toHaveBeenCalledOnce();
170
170
  });
171
171
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__tests__/print/ClaudePrintAgentService.test.ts"],"sourcesContent":["import { describe, expect, it, vi } from 'vitest';\n\ndescribe('ClaudePrintAgentService', () => {\n it('validates before create and does not run Claude', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n expect(api).toHaveProperty('ClaudePrintAgentService');\n const probe = { validate: vi.fn().mockResolvedValue({ executable: 'claude', version: '2.1.220' }) };\n const repository = { create: vi.fn().mockResolvedValue({ id: 'agent-id', name: 'reviewer' }) };\n const runner = { run: vi.fn() };\n const Service = api.ClaudePrintAgentService as new (options: unknown) => any;\n\n await expect(new Service({ repository, probe, runner }).create({ name: 'reviewer', cwd: '/project' }))\n .resolves.toMatchObject({ id: 'agent-id' });\n expect(probe.validate).toHaveBeenCalledOnce();\n expect(repository.create).toHaveBeenCalledWith({ name: 'reviewer', cwd: '/project' });\n expect(runner.run).not.toHaveBeenCalled();\n });\n\n it('runs first and resumed sends and records provider identity/results', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n const base = { id: 'id', name: 'reviewer', provider: 'claude', providerSessionId: 'session', sessionHealth: 'uninitialized' };\n const repository = {\n resolve: vi.fn().mockResolvedValue(base),\n acquireRun: vi.fn()\n .mockResolvedValueOnce({ agent: base, token: 'one' })\n .mockResolvedValueOnce({ agent: { ...base, sessionHealth: 'healthy' }, token: 'two' }),\n recordProviderProcess: vi.fn(), completeRun: vi.fn().mockResolvedValue({}),\n };\n const runner = { run: vi.fn().mockImplementation(async (request) => {\n await request.onSpawn({ pid: 42, startedAt: 'start' });\n return { sessionId: 'session', result: 'answer', exitCode: 0 };\n }) };\n const Service = api.ClaudePrintAgentService as new (options: unknown) => any;\n const service = new Service({ repository, probe: { validate: vi.fn() }, runner, executable: 'fake-claude' });\n\n await service.send('reviewer', 'first');\n await service.send('id', 'later');\n\n expect(runner.run.mock.calls[0][0]).toMatchObject({ prompt: 'first', firstRun: true, executable: 'fake-claude' });\n expect(runner.run.mock.calls[1][0]).toMatchObject({ prompt: 'later', firstRun: false, executable: 'fake-claude' });\n expect(repository.recordProviderProcess).toHaveBeenCalledWith('id', 'one', { pid: 42, startedAt: 'start' });\n expect(repository.completeRun).toHaveBeenCalledWith('id', 'one', expect.objectContaining({\n status: 'succeeded', exitCode: 0, sessionHealth: 'healthy',\n }));\n });\n\n it('rejects a non-Claude target without acquiring or mutating it', async () => {\n const api = await import('../../index.js') as Record<string, unknown>;\n const Service = api.ClaudePrintAgentService as new (options: unknown) => any;\n const target = { id: 'id', name: 'reviewer', provider: 'pi' };\n const repository = {\n resolve: vi.fn().mockResolvedValue(target),\n acquireRun: vi.fn(), recordProviderProcess: 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: 'CLAUDE_PRINT_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.ClaudePrintAgentService as new (options: unknown) => any;\n const target = { id: 'id', name: 'reviewer', provider: 'claude', providerSessionId: 'session', sessionHealth: 'healthy' };\n const completionFailure = new Error('completion failed');\n const repository = {\n resolve: vi.fn().mockResolvedValue(target),\n acquireRun: vi.fn().mockResolvedValue({ agent: target, token: 'one' }),\n recordProviderProcess: vi.fn(), completeRun: vi.fn().mockRejectedValue(completionFailure),\n };\n const runner = { run: vi.fn().mockResolvedValue({ sessionId: 'session', result: 'answer', exitCode: 0 }) };\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"],"names":["describe","expect","it","vi","api","toHaveProperty","probe","validate","fn","mockResolvedValue","executable","version","repository","create","id","name","runner","run","Service","ClaudePrintAgentService","cwd","resolves","toMatchObject","toHaveBeenCalledOnce","toHaveBeenCalledWith","not","toHaveBeenCalled","base","provider","providerSessionId","sessionHealth","resolve","acquireRun","mockResolvedValueOnce","agent","token","recordProviderProcess","completeRun","mockImplementation","request","onSpawn","pid","startedAt","sessionId","result","exitCode","service","send","mock","calls","prompt","firstRun","objectContaining","status","target","rejects","code","completionFailure","Error","mockRejectedValue","toBe"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/__tests__/print/ClaudePrintAgentService.test.ts"],"sourcesContent":["import { describe, expect, it, vi } from \"vitest\";\n\ndescribe(\"ClaudePrintAgentService\", () => {\n it(\"validates before create and does not run Claude\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n expect(api).toHaveProperty(\"ClaudePrintAgentService\");\n const probe = {\n validate: vi.fn().mockResolvedValue({ executable: \"claude\", version: \"2.1.220\" }),\n };\n const repository = { create: vi.fn().mockResolvedValue({ id: \"agent-id\", name: \"reviewer\" }) };\n const runner = { run: vi.fn() };\n const Service = api.ClaudePrintAgentService as new (options: unknown) => any;\n\n await expect(\n new Service({ repository, probe, runner }).create({ name: \"reviewer\", cwd: \"/project\" }),\n ).resolves.toMatchObject({ id: \"agent-id\" });\n expect(probe.validate).toHaveBeenCalledOnce();\n expect(repository.create).toHaveBeenCalledWith({ name: \"reviewer\", cwd: \"/project\" });\n expect(runner.run).not.toHaveBeenCalled();\n });\n\n it(\"runs first and resumed sends and records provider identity/results\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n const base = {\n id: \"id\",\n name: \"reviewer\",\n provider: \"claude\",\n providerSessionId: \"session\",\n sessionHealth: \"uninitialized\",\n };\n const repository = {\n resolve: vi.fn().mockResolvedValue(base),\n acquireRun: vi\n .fn()\n .mockResolvedValueOnce({ agent: base, token: \"one\" })\n .mockResolvedValueOnce({ agent: { ...base, sessionHealth: \"healthy\" }, token: \"two\" }),\n recordProviderProcess: vi.fn(),\n completeRun: vi.fn().mockResolvedValue({}),\n };\n const runner = {\n run: vi.fn().mockImplementation(async (request) => {\n await request.onSpawn({ pid: 42, startedAt: \"start\" });\n return { sessionId: \"session\", result: \"answer\", exitCode: 0 };\n }),\n };\n const Service = api.ClaudePrintAgentService as new (options: unknown) => any;\n const service = new Service({\n repository,\n probe: { validate: vi.fn() },\n runner,\n executable: \"fake-claude\",\n });\n\n await service.send(\"reviewer\", \"first\");\n await service.send(\"id\", \"later\");\n\n expect(runner.run.mock.calls[0][0]).toMatchObject({\n prompt: \"first\",\n firstRun: true,\n executable: \"fake-claude\",\n });\n expect(runner.run.mock.calls[1][0]).toMatchObject({\n prompt: \"later\",\n firstRun: false,\n executable: \"fake-claude\",\n });\n expect(repository.recordProviderProcess).toHaveBeenCalledWith(\"id\", \"one\", {\n pid: 42,\n startedAt: \"start\",\n });\n expect(repository.completeRun).toHaveBeenCalledWith(\n \"id\",\n \"one\",\n expect.objectContaining({\n status: \"succeeded\",\n exitCode: 0,\n sessionHealth: \"healthy\",\n }),\n );\n });\n\n it(\"rejects a non-Claude target without acquiring or mutating it\", async () => {\n const api = (await import(\"../../index.js\")) as Record<string, unknown>;\n const Service = api.ClaudePrintAgentService as new (options: unknown) => any;\n const target = { id: \"id\", name: \"reviewer\", provider: \"pi\" };\n const repository = {\n resolve: vi.fn().mockResolvedValue(target),\n acquireRun: vi.fn(),\n recordProviderProcess: 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: \"CLAUDE_PRINT_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.ClaudePrintAgentService as new (options: unknown) => any;\n const target = {\n id: \"id\",\n name: \"reviewer\",\n provider: \"claude\",\n providerSessionId: \"session\",\n sessionHealth: \"healthy\",\n };\n const completionFailure = new Error(\"completion failed\");\n const repository = {\n resolve: vi.fn().mockResolvedValue(target),\n acquireRun: vi.fn().mockResolvedValue({ agent: target, token: \"one\" }),\n recordProviderProcess: vi.fn(),\n completeRun: vi.fn().mockRejectedValue(completionFailure),\n };\n const runner = {\n run: vi.fn().mockResolvedValue({ sessionId: \"session\", result: \"answer\", exitCode: 0 }),\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"],"names":["describe","expect","it","vi","api","toHaveProperty","probe","validate","fn","mockResolvedValue","executable","version","repository","create","id","name","runner","run","Service","ClaudePrintAgentService","cwd","resolves","toMatchObject","toHaveBeenCalledOnce","toHaveBeenCalledWith","not","toHaveBeenCalled","base","provider","providerSessionId","sessionHealth","resolve","acquireRun","mockResolvedValueOnce","agent","token","recordProviderProcess","completeRun","mockImplementation","request","onSpawn","pid","startedAt","sessionId","result","exitCode","service","send","mock","calls","prompt","firstRun","objectContaining","status","target","rejects","code","completionFailure","Error","mockRejectedValue","toBe"],"mappings":"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"}