@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,22 +1,22 @@
1
1
  /**
2
2
  * Tests for utils/session.ts
3
- */ import * as fs from 'fs';
4
- import { batchGetSessionFileBirthtimes } from '../../utils/session.js';
5
- vi.mock('fs', ()=>({
3
+ */ import * as fs from "fs";
4
+ import { batchGetSessionFileBirthtimes } from "../../utils/session.js";
5
+ vi.mock("fs", ()=>({
6
6
  readdirSync: vi.fn(),
7
7
  statSync: vi.fn()
8
8
  }));
9
9
  const mockedReaddirSync = fs.readdirSync;
10
10
  const mockedStatSync = fs.statSync;
11
- describe('batchGetSessionFileBirthtimes', ()=>{
11
+ describe("batchGetSessionFileBirthtimes", ()=>{
12
12
  beforeEach(()=>{
13
13
  mockedReaddirSync.mockReset();
14
14
  mockedStatSync.mockReset();
15
15
  });
16
- it('should parse session files correctly', ()=>{
16
+ it("should parse session files correctly", ()=>{
17
17
  mockedReaddirSync.mockReturnValue([
18
- 'abc123.jsonl',
19
- 'def456.jsonl'
18
+ "abc123.jsonl",
19
+ "def456.jsonl"
20
20
  ]);
21
21
  mockedStatSync.mockReturnValueOnce({
22
22
  birthtimeMs: 1710800324000
@@ -24,36 +24,36 @@ describe('batchGetSessionFileBirthtimes', ()=>{
24
24
  birthtimeMs: 1710800500000
25
25
  });
26
26
  const results = batchGetSessionFileBirthtimes([
27
- '/home/.claude/projects/my-app'
27
+ "/home/.claude/projects/my-app"
28
28
  ]);
29
29
  expect(results).toHaveLength(2);
30
30
  expect(results[0]).toEqual({
31
- sessionId: 'abc123',
32
- filePath: '/home/.claude/projects/my-app/abc123.jsonl',
33
- projectDir: '/home/.claude/projects/my-app',
31
+ sessionId: "abc123",
32
+ filePath: "/home/.claude/projects/my-app/abc123.jsonl",
33
+ projectDir: "/home/.claude/projects/my-app",
34
34
  birthtimeMs: 1710800324000,
35
- resolvedCwd: ''
35
+ resolvedCwd: ""
36
36
  });
37
- expect(results[1].sessionId).toBe('def456');
37
+ expect(results[1].sessionId).toBe("def456");
38
38
  expect(results[1].birthtimeMs).toBe(1710800500000);
39
39
  });
40
- it('should return empty array for empty dirs list', ()=>{
40
+ it("should return empty array for empty dirs list", ()=>{
41
41
  expect(batchGetSessionFileBirthtimes([])).toEqual([]);
42
42
  expect(mockedReaddirSync).not.toHaveBeenCalled();
43
43
  });
44
- it('should return empty array on readdir failure', ()=>{
44
+ it("should return empty array on readdir failure", ()=>{
45
45
  mockedReaddirSync.mockImplementation(()=>{
46
- throw new Error('ENOENT');
46
+ throw new Error("ENOENT");
47
47
  });
48
48
  expect(batchGetSessionFileBirthtimes([
49
- '/some/dir'
49
+ "/some/dir"
50
50
  ])).toEqual([]);
51
51
  });
52
- it('should skip files with invalid birthtime (0 or negative)', ()=>{
52
+ it("should skip files with invalid birthtime (0 or negative)", ()=>{
53
53
  mockedReaddirSync.mockReturnValue([
54
- 'bad.jsonl',
55
- 'negative.jsonl',
56
- 'good.jsonl'
54
+ "bad.jsonl",
55
+ "negative.jsonl",
56
+ "good.jsonl"
57
57
  ]);
58
58
  mockedStatSync.mockReturnValueOnce({
59
59
  birthtimeMs: 0
@@ -63,62 +63,62 @@ describe('batchGetSessionFileBirthtimes', ()=>{
63
63
  birthtimeMs: 1710800324000
64
64
  });
65
65
  const results = batchGetSessionFileBirthtimes([
66
- '/dir'
66
+ "/dir"
67
67
  ]);
68
68
  expect(results).toHaveLength(1);
69
- expect(results[0].sessionId).toBe('good');
69
+ expect(results[0].sessionId).toBe("good");
70
70
  });
71
- it('should skip non-jsonl files', ()=>{
71
+ it("should skip non-jsonl files", ()=>{
72
72
  mockedReaddirSync.mockReturnValue([
73
- 'sessions-index.json',
74
- 'abc123.jsonl'
73
+ "sessions-index.json",
74
+ "abc123.jsonl"
75
75
  ]);
76
76
  mockedStatSync.mockReturnValueOnce({
77
77
  birthtimeMs: 1710800500000
78
78
  });
79
79
  const results = batchGetSessionFileBirthtimes([
80
- '/dir'
80
+ "/dir"
81
81
  ]);
82
82
  expect(results).toHaveLength(1);
83
- expect(results[0].sessionId).toBe('abc123');
83
+ expect(results[0].sessionId).toBe("abc123");
84
84
  });
85
- it('should handle empty directory', ()=>{
85
+ it("should handle empty directory", ()=>{
86
86
  mockedReaddirSync.mockReturnValue([]);
87
87
  expect(batchGetSessionFileBirthtimes([
88
- '/dir'
88
+ "/dir"
89
89
  ])).toEqual([]);
90
90
  });
91
- it('should handle UUID session IDs', ()=>{
91
+ it("should handle UUID session IDs", ()=>{
92
92
  mockedReaddirSync.mockReturnValue([
93
- '068e7b1f-cff5-4c94-bf69-b9acd32d765c.jsonl'
93
+ "068e7b1f-cff5-4c94-bf69-b9acd32d765c.jsonl"
94
94
  ]);
95
95
  mockedStatSync.mockReturnValueOnce({
96
96
  birthtimeMs: 1710800324000
97
97
  });
98
98
  const results = batchGetSessionFileBirthtimes([
99
- '/dir'
99
+ "/dir"
100
100
  ]);
101
101
  expect(results).toHaveLength(1);
102
- expect(results[0].sessionId).toBe('068e7b1f-cff5-4c94-bf69-b9acd32d765c');
102
+ expect(results[0].sessionId).toBe("068e7b1f-cff5-4c94-bf69-b9acd32d765c");
103
103
  });
104
- it('should leave resolvedCwd empty', ()=>{
104
+ it("should leave resolvedCwd empty", ()=>{
105
105
  mockedReaddirSync.mockReturnValue([
106
- 'abc.jsonl'
106
+ "abc.jsonl"
107
107
  ]);
108
108
  mockedStatSync.mockReturnValueOnce({
109
109
  birthtimeMs: 1710800324000
110
110
  });
111
111
  const results = batchGetSessionFileBirthtimes([
112
- '/dir'
112
+ "/dir"
113
113
  ]);
114
- expect(results[0].resolvedCwd).toBe('');
114
+ expect(results[0].resolvedCwd).toBe("");
115
115
  });
116
- it('should enumerate multiple directories', ()=>{
116
+ it("should enumerate multiple directories", ()=>{
117
117
  mockedReaddirSync.mockReturnValueOnce([
118
- 'sess1.jsonl',
119
- 'sess3.jsonl'
118
+ "sess1.jsonl",
119
+ "sess3.jsonl"
120
120
  ]).mockReturnValueOnce([
121
- 'sess2.jsonl'
121
+ "sess2.jsonl"
122
122
  ]);
123
123
  mockedStatSync.mockReturnValueOnce({
124
124
  birthtimeMs: 1710800324000
@@ -128,30 +128,30 @@ describe('batchGetSessionFileBirthtimes', ()=>{
128
128
  birthtimeMs: 1710800400000
129
129
  });
130
130
  const results = batchGetSessionFileBirthtimes([
131
- '/projects/app-a',
132
- '/projects/app-b'
131
+ "/projects/app-a",
132
+ "/projects/app-b"
133
133
  ]);
134
134
  expect(mockedReaddirSync).toHaveBeenCalledTimes(2);
135
135
  expect(results).toHaveLength(3);
136
- expect(results[0].projectDir).toBe('/projects/app-a');
137
- expect(results[1].projectDir).toBe('/projects/app-a');
138
- expect(results[2].projectDir).toBe('/projects/app-b');
136
+ expect(results[0].projectDir).toBe("/projects/app-a");
137
+ expect(results[1].projectDir).toBe("/projects/app-a");
138
+ expect(results[2].projectDir).toBe("/projects/app-b");
139
139
  });
140
- it('should skip files where statSync fails', ()=>{
140
+ it("should skip files where statSync fails", ()=>{
141
141
  mockedReaddirSync.mockReturnValue([
142
- 'good.jsonl',
143
- 'gone.jsonl'
142
+ "good.jsonl",
143
+ "gone.jsonl"
144
144
  ]);
145
145
  mockedStatSync.mockReturnValueOnce({
146
146
  birthtimeMs: 1710800324000
147
147
  }).mockImplementationOnce(()=>{
148
- throw new Error('ENOENT');
148
+ throw new Error("ENOENT");
149
149
  });
150
150
  const results = batchGetSessionFileBirthtimes([
151
- '/dir'
151
+ "/dir"
152
152
  ]);
153
153
  expect(results).toHaveLength(1);
154
- expect(results[0].sessionId).toBe('good');
154
+ expect(results[0].sessionId).toBe("good");
155
155
  });
156
156
  });
157
157
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/__tests__/utils/session.test.ts"],"sourcesContent":["/**\n * Tests for utils/session.ts\n */\n\nimport type { MockedFunction } from 'vitest';\n\nimport * as fs from 'fs';\nimport { batchGetSessionFileBirthtimes } from '../../utils/session.js';\n\nvi.mock('fs', () => ({\n readdirSync: vi.fn(),\n statSync: vi.fn(),\n}));\n\nconst mockedReaddirSync = fs.readdirSync as MockedFunction<typeof fs.readdirSync>;\nconst mockedStatSync = fs.statSync as MockedFunction<typeof fs.statSync>;\n\ndescribe('batchGetSessionFileBirthtimes', () => {\n beforeEach(() => {\n mockedReaddirSync.mockReset();\n mockedStatSync.mockReset();\n });\n\n it('should parse session files correctly', () => {\n mockedReaddirSync.mockReturnValue([\n 'abc123.jsonl',\n 'def456.jsonl',\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: 1710800500000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes(['/home/.claude/projects/my-app']);\n\n expect(results).toHaveLength(2);\n expect(results[0]).toEqual({\n sessionId: 'abc123',\n filePath: '/home/.claude/projects/my-app/abc123.jsonl',\n projectDir: '/home/.claude/projects/my-app',\n birthtimeMs: 1710800324000,\n resolvedCwd: '',\n });\n expect(results[1].sessionId).toBe('def456');\n expect(results[1].birthtimeMs).toBe(1710800500000);\n });\n\n it('should return empty array for empty dirs list', () => {\n expect(batchGetSessionFileBirthtimes([])).toEqual([]);\n expect(mockedReaddirSync).not.toHaveBeenCalled();\n });\n\n it('should return empty array on readdir failure', () => {\n mockedReaddirSync.mockImplementation(() => {\n throw new Error('ENOENT');\n });\n\n expect(batchGetSessionFileBirthtimes(['/some/dir'])).toEqual([]);\n });\n\n it('should skip files with invalid birthtime (0 or negative)', () => {\n mockedReaddirSync.mockReturnValue([\n 'bad.jsonl',\n 'negative.jsonl',\n 'good.jsonl',\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 0 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: -1 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes(['/dir']);\n expect(results).toHaveLength(1);\n expect(results[0].sessionId).toBe('good');\n });\n\n it('should skip non-jsonl files', () => {\n mockedReaddirSync.mockReturnValue([\n 'sessions-index.json',\n 'abc123.jsonl',\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 1710800500000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes(['/dir']);\n expect(results).toHaveLength(1);\n expect(results[0].sessionId).toBe('abc123');\n });\n\n it('should handle empty directory', () => {\n mockedReaddirSync.mockReturnValue([] as unknown as ReturnType<typeof fs.readdirSync>);\n expect(batchGetSessionFileBirthtimes(['/dir'])).toEqual([]);\n });\n\n it('should handle UUID session IDs', () => {\n mockedReaddirSync.mockReturnValue([\n '068e7b1f-cff5-4c94-bf69-b9acd32d765c.jsonl',\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes(['/dir']);\n expect(results).toHaveLength(1);\n expect(results[0].sessionId).toBe('068e7b1f-cff5-4c94-bf69-b9acd32d765c');\n });\n\n it('should leave resolvedCwd empty', () => {\n mockedReaddirSync.mockReturnValue([\n 'abc.jsonl',\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes(['/dir']);\n expect(results[0].resolvedCwd).toBe('');\n });\n\n it('should enumerate multiple directories', () => {\n mockedReaddirSync\n .mockReturnValueOnce([\n 'sess1.jsonl',\n 'sess3.jsonl',\n ] as unknown as ReturnType<typeof fs.readdirSync>)\n .mockReturnValueOnce([\n 'sess2.jsonl',\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: 1710800500000 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: 1710800400000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes(['/projects/app-a', '/projects/app-b']);\n\n expect(mockedReaddirSync).toHaveBeenCalledTimes(2);\n\n expect(results).toHaveLength(3);\n expect(results[0].projectDir).toBe('/projects/app-a');\n expect(results[1].projectDir).toBe('/projects/app-a');\n expect(results[2].projectDir).toBe('/projects/app-b');\n });\n\n it('should skip files where statSync fails', () => {\n mockedReaddirSync.mockReturnValue([\n 'good.jsonl',\n 'gone.jsonl',\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats)\n .mockImplementationOnce(() => { throw new Error('ENOENT'); });\n\n const results = batchGetSessionFileBirthtimes(['/dir']);\n expect(results).toHaveLength(1);\n expect(results[0].sessionId).toBe('good');\n });\n});\n"],"names":["fs","batchGetSessionFileBirthtimes","vi","mock","readdirSync","fn","statSync","mockedReaddirSync","mockedStatSync","describe","beforeEach","mockReset","it","mockReturnValue","mockReturnValueOnce","birthtimeMs","results","expect","toHaveLength","toEqual","sessionId","filePath","projectDir","resolvedCwd","toBe","not","toHaveBeenCalled","mockImplementation","Error","toHaveBeenCalledTimes","mockImplementationOnce"],"mappings":"AAAA;;CAEC,GAID,YAAYA,QAAQ,KAAK;AACzB,SAASC,6BAA6B,QAAQ,yBAAyB;AAEvEC,GAAGC,IAAI,CAAC,MAAM,IAAO,CAAA;QACjBC,aAAaF,GAAGG,EAAE;QAClBC,UAAUJ,GAAGG,EAAE;IACnB,CAAA;AAEA,MAAME,oBAAoBP,GAAGI,WAAW;AACxC,MAAMI,iBAAiBR,GAAGM,QAAQ;AAElCG,SAAS,iCAAiC;IACtCC,WAAW;QACPH,kBAAkBI,SAAS;QAC3BH,eAAeG,SAAS;IAC5B;IAEAC,GAAG,wCAAwC;QACvCL,kBAAkBM,eAAe,CAAC;YAC9B;YACA;SACH;QACDL,eACKM,mBAAmB,CAAC;YAAEC,aAAa;QAAc,GACjDD,mBAAmB,CAAC;YAAEC,aAAa;QAAc;QAEtD,MAAMC,UAAUf,8BAA8B;YAAC;SAAgC;QAE/EgB,OAAOD,SAASE,YAAY,CAAC;QAC7BD,OAAOD,OAAO,CAAC,EAAE,EAAEG,OAAO,CAAC;YACvBC,WAAW;YACXC,UAAU;YACVC,YAAY;YACZP,aAAa;YACbQ,aAAa;QACjB;QACAN,OAAOD,OAAO,CAAC,EAAE,CAACI,SAAS,EAAEI,IAAI,CAAC;QAClCP,OAAOD,OAAO,CAAC,EAAE,CAACD,WAAW,EAAES,IAAI,CAAC;IACxC;IAEAZ,GAAG,iDAAiD;QAChDK,OAAOhB,8BAA8B,EAAE,GAAGkB,OAAO,CAAC,EAAE;QACpDF,OAAOV,mBAAmBkB,GAAG,CAACC,gBAAgB;IAClD;IAEAd,GAAG,gDAAgD;QAC/CL,kBAAkBoB,kBAAkB,CAAC;YACjC,MAAM,IAAIC,MAAM;QACpB;QAEAX,OAAOhB,8BAA8B;YAAC;SAAY,GAAGkB,OAAO,CAAC,EAAE;IACnE;IAEAP,GAAG,4DAA4D;QAC3DL,kBAAkBM,eAAe,CAAC;YAC9B;YACA;YACA;SACH;QACDL,eACKM,mBAAmB,CAAC;YAAEC,aAAa;QAAE,GACrCD,mBAAmB,CAAC;YAAEC,aAAa,CAAC;QAAE,GACtCD,mBAAmB,CAAC;YAAEC,aAAa;QAAc;QAEtD,MAAMC,UAAUf,8BAA8B;YAAC;SAAO;QACtDgB,OAAOD,SAASE,YAAY,CAAC;QAC7BD,OAAOD,OAAO,CAAC,EAAE,CAACI,SAAS,EAAEI,IAAI,CAAC;IACtC;IAEAZ,GAAG,+BAA+B;QAC9BL,kBAAkBM,eAAe,CAAC;YAC9B;YACA;SACH;QACDL,eACKM,mBAAmB,CAAC;YAAEC,aAAa;QAAc;QAEtD,MAAMC,UAAUf,8BAA8B;YAAC;SAAO;QACtDgB,OAAOD,SAASE,YAAY,CAAC;QAC7BD,OAAOD,OAAO,CAAC,EAAE,CAACI,SAAS,EAAEI,IAAI,CAAC;IACtC;IAEAZ,GAAG,iCAAiC;QAChCL,kBAAkBM,eAAe,CAAC,EAAE;QACpCI,OAAOhB,8BAA8B;YAAC;SAAO,GAAGkB,OAAO,CAAC,EAAE;IAC9D;IAEAP,GAAG,kCAAkC;QACjCL,kBAAkBM,eAAe,CAAC;YAC9B;SACH;QACDL,eACKM,mBAAmB,CAAC;YAAEC,aAAa;QAAc;QAEtD,MAAMC,UAAUf,8BAA8B;YAAC;SAAO;QACtDgB,OAAOD,SAASE,YAAY,CAAC;QAC7BD,OAAOD,OAAO,CAAC,EAAE,CAACI,SAAS,EAAEI,IAAI,CAAC;IACtC;IAEAZ,GAAG,kCAAkC;QACjCL,kBAAkBM,eAAe,CAAC;YAC9B;SACH;QACDL,eACKM,mBAAmB,CAAC;YAAEC,aAAa;QAAc;QAEtD,MAAMC,UAAUf,8BAA8B;YAAC;SAAO;QACtDgB,OAAOD,OAAO,CAAC,EAAE,CAACO,WAAW,EAAEC,IAAI,CAAC;IACxC;IAEAZ,GAAG,yCAAyC;QACxCL,kBACKO,mBAAmB,CAAC;YACjB;YACA;SACH,EACAA,mBAAmB,CAAC;YACjB;SACH;QACLN,eACKM,mBAAmB,CAAC;YAAEC,aAAa;QAAc,GACjDD,mBAAmB,CAAC;YAAEC,aAAa;QAAc,GACjDD,mBAAmB,CAAC;YAAEC,aAAa;QAAc;QAEtD,MAAMC,UAAUf,8BAA8B;YAAC;YAAmB;SAAkB;QAEpFgB,OAAOV,mBAAmBsB,qBAAqB,CAAC;QAEhDZ,OAAOD,SAASE,YAAY,CAAC;QAC7BD,OAAOD,OAAO,CAAC,EAAE,CAACM,UAAU,EAAEE,IAAI,CAAC;QACnCP,OAAOD,OAAO,CAAC,EAAE,CAACM,UAAU,EAAEE,IAAI,CAAC;QACnCP,OAAOD,OAAO,CAAC,EAAE,CAACM,UAAU,EAAEE,IAAI,CAAC;IACvC;IAEAZ,GAAG,0CAA0C;QACzCL,kBAAkBM,eAAe,CAAC;YAC9B;YACA;SACH;QACDL,eACKM,mBAAmB,CAAC;YAAEC,aAAa;QAAc,GACjDe,sBAAsB,CAAC;YAAQ,MAAM,IAAIF,MAAM;QAAW;QAE/D,MAAMZ,UAAUf,8BAA8B;YAAC;SAAO;QACtDgB,OAAOD,SAASE,YAAY,CAAC;QAC7BD,OAAOD,OAAO,CAAC,EAAE,CAACI,SAAS,EAAEI,IAAI,CAAC;IACtC;AACJ"}
1
+ {"version":3,"sources":["../../../src/__tests__/utils/session.test.ts"],"sourcesContent":["/**\n * Tests for utils/session.ts\n */\n\nimport type { MockedFunction } from \"vitest\";\n\nimport * as fs from \"fs\";\nimport { batchGetSessionFileBirthtimes } from \"../../utils/session.js\";\n\nvi.mock(\"fs\", () => ({\n readdirSync: vi.fn(),\n statSync: vi.fn(),\n}));\n\nconst mockedReaddirSync = fs.readdirSync as MockedFunction<typeof fs.readdirSync>;\nconst mockedStatSync = fs.statSync as MockedFunction<typeof fs.statSync>;\n\ndescribe(\"batchGetSessionFileBirthtimes\", () => {\n beforeEach(() => {\n mockedReaddirSync.mockReset();\n mockedStatSync.mockReset();\n });\n\n it(\"should parse session files correctly\", () => {\n mockedReaddirSync.mockReturnValue([\"abc123.jsonl\", \"def456.jsonl\"] as unknown as ReturnType<\n typeof fs.readdirSync\n >);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: 1710800500000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes([\"/home/.claude/projects/my-app\"]);\n\n expect(results).toHaveLength(2);\n expect(results[0]).toEqual({\n sessionId: \"abc123\",\n filePath: \"/home/.claude/projects/my-app/abc123.jsonl\",\n projectDir: \"/home/.claude/projects/my-app\",\n birthtimeMs: 1710800324000,\n resolvedCwd: \"\",\n });\n expect(results[1].sessionId).toBe(\"def456\");\n expect(results[1].birthtimeMs).toBe(1710800500000);\n });\n\n it(\"should return empty array for empty dirs list\", () => {\n expect(batchGetSessionFileBirthtimes([])).toEqual([]);\n expect(mockedReaddirSync).not.toHaveBeenCalled();\n });\n\n it(\"should return empty array on readdir failure\", () => {\n mockedReaddirSync.mockImplementation(() => {\n throw new Error(\"ENOENT\");\n });\n\n expect(batchGetSessionFileBirthtimes([\"/some/dir\"])).toEqual([]);\n });\n\n it(\"should skip files with invalid birthtime (0 or negative)\", () => {\n mockedReaddirSync.mockReturnValue([\n \"bad.jsonl\",\n \"negative.jsonl\",\n \"good.jsonl\",\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 0 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: -1 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes([\"/dir\"]);\n expect(results).toHaveLength(1);\n expect(results[0].sessionId).toBe(\"good\");\n });\n\n it(\"should skip non-jsonl files\", () => {\n mockedReaddirSync.mockReturnValue([\n \"sessions-index.json\",\n \"abc123.jsonl\",\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync.mockReturnValueOnce({ birthtimeMs: 1710800500000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes([\"/dir\"]);\n expect(results).toHaveLength(1);\n expect(results[0].sessionId).toBe(\"abc123\");\n });\n\n it(\"should handle empty directory\", () => {\n mockedReaddirSync.mockReturnValue([] as unknown as ReturnType<typeof fs.readdirSync>);\n expect(batchGetSessionFileBirthtimes([\"/dir\"])).toEqual([]);\n });\n\n it(\"should handle UUID session IDs\", () => {\n mockedReaddirSync.mockReturnValue([\n \"068e7b1f-cff5-4c94-bf69-b9acd32d765c.jsonl\",\n ] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync.mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes([\"/dir\"]);\n expect(results).toHaveLength(1);\n expect(results[0].sessionId).toBe(\"068e7b1f-cff5-4c94-bf69-b9acd32d765c\");\n });\n\n it(\"should leave resolvedCwd empty\", () => {\n mockedReaddirSync.mockReturnValue([\"abc.jsonl\"] as unknown as ReturnType<\n typeof fs.readdirSync\n >);\n mockedStatSync.mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes([\"/dir\"]);\n expect(results[0].resolvedCwd).toBe(\"\");\n });\n\n it(\"should enumerate multiple directories\", () => {\n mockedReaddirSync\n .mockReturnValueOnce([\"sess1.jsonl\", \"sess3.jsonl\"] as unknown as ReturnType<\n typeof fs.readdirSync\n >)\n .mockReturnValueOnce([\"sess2.jsonl\"] as unknown as ReturnType<typeof fs.readdirSync>);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: 1710800500000 } as fs.Stats)\n .mockReturnValueOnce({ birthtimeMs: 1710800400000 } as fs.Stats);\n\n const results = batchGetSessionFileBirthtimes([\"/projects/app-a\", \"/projects/app-b\"]);\n\n expect(mockedReaddirSync).toHaveBeenCalledTimes(2);\n\n expect(results).toHaveLength(3);\n expect(results[0].projectDir).toBe(\"/projects/app-a\");\n expect(results[1].projectDir).toBe(\"/projects/app-a\");\n expect(results[2].projectDir).toBe(\"/projects/app-b\");\n });\n\n it(\"should skip files where statSync fails\", () => {\n mockedReaddirSync.mockReturnValue([\"good.jsonl\", \"gone.jsonl\"] as unknown as ReturnType<\n typeof fs.readdirSync\n >);\n mockedStatSync\n .mockReturnValueOnce({ birthtimeMs: 1710800324000 } as fs.Stats)\n .mockImplementationOnce(() => {\n throw new Error(\"ENOENT\");\n });\n\n const results = batchGetSessionFileBirthtimes([\"/dir\"]);\n expect(results).toHaveLength(1);\n expect(results[0].sessionId).toBe(\"good\");\n });\n});\n"],"names":["fs","batchGetSessionFileBirthtimes","vi","mock","readdirSync","fn","statSync","mockedReaddirSync","mockedStatSync","describe","beforeEach","mockReset","it","mockReturnValue","mockReturnValueOnce","birthtimeMs","results","expect","toHaveLength","toEqual","sessionId","filePath","projectDir","resolvedCwd","toBe","not","toHaveBeenCalled","mockImplementation","Error","toHaveBeenCalledTimes","mockImplementationOnce"],"mappings":"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"}
@@ -7,7 +7,7 @@
7
7
  /**
8
8
  * Type of AI agent
9
9
  */
10
- export type AgentType = 'claude' | 'gemini_cli' | 'grok_cli' | 'codex' | 'opencode' | 'copilot' | 'pi' | 'other';
10
+ export type AgentType = "claude" | "gemini_cli" | "grok_cli" | "codex" | "opencode" | "copilot" | "pi" | "other";
11
11
  /**
12
12
  * Current status of an agent
13
13
  */
@@ -63,7 +63,7 @@ export interface ProcessInfo {
63
63
  * A single message in a conversation
64
64
  */
65
65
  export interface ConversationMessage {
66
- role: 'user' | 'assistant' | 'system';
66
+ role: "user" | "assistant" | "system";
67
67
  content: string;
68
68
  timestamp?: string;
69
69
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AgentAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/AgentAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/AgentAdapter.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Agent Adapter Interface
3
- *
3
+ *
4
4
  * Defines the contract for detecting and managing different types of AI agents.
5
5
  * Each adapter is responsible for detecting agents of a specific type (e.g., claude).
6
6
  */ /**
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/adapters/AgentAdapter.ts"],"sourcesContent":["/**\n * Agent Adapter Interface\n * \n * Defines the contract for detecting and managing different types of AI agents.\n * Each adapter is responsible for detecting agents of a specific type (e.g., claude).\n */\n\n/**\n * Type of AI agent\n */\nexport type AgentType = 'claude' | 'gemini_cli' | 'grok_cli' | 'codex' | 'opencode' | 'copilot' | 'pi' | 'other';\n\n/**\n * Current status of an agent\n */\nexport enum AgentStatus {\n RUNNING = 'running',\n WAITING = 'waiting',\n IDLE = 'idle',\n UNKNOWN = 'unknown'\n}\n\n/**\n * Information about a detected agent\n */\nexport interface AgentInfo {\n /** Project-based name (e.g., \"ai-devkit\" or \"ai-devkit (merry)\") */\n name: string;\n\n /** Type of agent */\n type: AgentType;\n\n /** Current status */\n status: AgentStatus;\n\n /** Last user prompt from history */\n summary: string;\n\n /** Process ID */\n pid: number;\n\n /** Working directory/project path */\n projectPath: string;\n\n /** Session UUID */\n sessionId: string;\n\n /** Timestamp of last activity */\n lastActive: Date;\n\n /** Whether the live process is pinned in the agent console */\n pinned?: boolean;\n\n /** Path to the session JSONL file on disk */\n sessionFilePath?: string;\n}\n\n/**\n * Information about a running process\n */\nexport interface ProcessInfo {\n /** Process ID */\n pid: number;\n\n /** Parent process ID, populated by process discovery when available */\n ppid?: number;\n\n /** Process command */\n command: string;\n\n /** Working directory */\n cwd: string;\n\n /** Terminal TTY (e.g., \"ttys030\") */\n tty: string;\n\n /** Process start time, populated by process enrichment */\n startTime?: Date;\n}\n\n/**\n * A single message in a conversation\n */\nexport interface ConversationMessage {\n role: 'user' | 'assistant' | 'system';\n content: string;\n timestamp?: string;\n}\n\n/**\n * A historical session discovered on disk (running or not).\n *\n * Used by `listSessions` to surface enough context for a user to identify\n * a session and resume it via the originating tool's resume command.\n */\nexport interface SessionSummary {\n /** Tool that produced this session */\n type: AgentType;\n\n /**\n * ID accepted by the tool's resume command. Adapters MUST pass this\n * through verbatim — no normalization, no encoding/decoding — so it\n * round-trips into `claude --resume <id>` (and equivalents).\n */\n sessionId: string;\n\n /** Working directory the session was started in (best-known value) */\n cwd: string;\n\n /**\n * Trimmed first user message; empty string if none. Adapters apply\n * the same noise-filter their existing parsers use (skip tool_result\n * blocks, request-interruption notices, system-injected skill\n * content). The CLI table renderer substitutes a placeholder for\n * empty values; JSON output keeps the empty string raw.\n */\n firstUserMessage: string;\n\n /** Last activity timestamp (from session content; falls back to file mtime) */\n lastActive: Date;\n\n /** Session start time (from session content; falls back to file birthtime/mtime) */\n startedAt: Date;\n\n /** Absolute path to the session file on disk (debug/diagnostics) */\n sessionFilePath: string;\n}\n\n/**\n * Filters passed by the CLI to {@link AgentAdapter.listSessions}.\n *\n * The CLI is the source of truth for filter defaults and semantics\n * (e.g. cwd defaults to process.cwd(); --all clears it). Adapters apply\n * the values they receive — they don't invent defaults.\n */\nexport interface ListSessionsOptions {\n /**\n * Filter to sessions whose recorded cwd matches this path using strict\n * equality (no prefix/ancestor matching in v1). Undefined = no cwd\n * filter.\n */\n cwd?: string;\n\n /**\n * Filter to a single tool. Enforced by `AgentManager.listSessions`,\n * which skips adapters whose `type` doesn't match. Adapters MAY\n * ignore this field — by the time their `listSessions` runs, the\n * type filter is already satisfied. Undefined = include every\n * registered adapter.\n */\n type?: AgentType;\n}\n\nexport interface AgentDetectionContext {\n /** One enriched process snapshot shared across this manager refresh. */\n readonly processes: readonly ProcessInfo[];\n}\n\n/**\n * Agent Adapter Interface\n *\n * Implementations must provide detection logic for a specific agent type.\n */\nexport interface AgentAdapter {\n /** Type of agent this adapter handles */\n readonly type: AgentType;\n\n /** Executable basenames required for shared process discovery. */\n readonly processNames?: readonly string[];\n\n /**\n * Detect running agents of this type\n * @returns List of detected agents\n */\n detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;\n\n /**\n * Check if this adapter can handle the given process\n * @param processInfo Process information\n * @returns True if this adapter can handle the process\n */\n canHandle(processInfo: ProcessInfo): boolean;\n\n /**\n * Read the full conversation from a session file\n * @param sessionFilePath Path to the session JSONL file\n * @param options.verbose Include tool call/result details\n * @returns Array of conversation messages\n */\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[];\n\n /**\n * Enumerate historical sessions for this tool from disk.\n *\n * Applies `opts.cwd` as a strict-equality filter when set. Returns\n * {@link SessionSummary} entries unsorted; sorting and global filters\n * are handled by `AgentManager` and the CLI.\n *\n * @param opts Filter options computed by the CLI\n * @returns Array of sessions discovered on disk\n */\n listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;\n}\n"],"names":["AgentStatus"],"mappings":"AAAA;;;;;CAKC,GAED;;CAEC,GAGD;;CAEC,GACD,OAAO,IAAA,AAAKA,qCAAAA;;;;;WAAAA;MAKX"}
1
+ {"version":3,"sources":["../../src/adapters/AgentAdapter.ts"],"sourcesContent":["/**\n * Agent Adapter Interface\n *\n * Defines the contract for detecting and managing different types of AI agents.\n * Each adapter is responsible for detecting agents of a specific type (e.g., claude).\n */\n\n/**\n * Type of AI agent\n */\nexport type AgentType =\n | \"claude\"\n | \"gemini_cli\"\n | \"grok_cli\"\n | \"codex\"\n | \"opencode\"\n | \"copilot\"\n | \"pi\"\n | \"other\";\n\n/**\n * Current status of an agent\n */\nexport enum AgentStatus {\n RUNNING = \"running\",\n WAITING = \"waiting\",\n IDLE = \"idle\",\n UNKNOWN = \"unknown\",\n}\n\n/**\n * Information about a detected agent\n */\nexport interface AgentInfo {\n /** Project-based name (e.g., \"ai-devkit\" or \"ai-devkit (merry)\") */\n name: string;\n\n /** Type of agent */\n type: AgentType;\n\n /** Current status */\n status: AgentStatus;\n\n /** Last user prompt from history */\n summary: string;\n\n /** Process ID */\n pid: number;\n\n /** Working directory/project path */\n projectPath: string;\n\n /** Session UUID */\n sessionId: string;\n\n /** Timestamp of last activity */\n lastActive: Date;\n\n /** Whether the live process is pinned in the agent console */\n pinned?: boolean;\n\n /** Path to the session JSONL file on disk */\n sessionFilePath?: string;\n}\n\n/**\n * Information about a running process\n */\nexport interface ProcessInfo {\n /** Process ID */\n pid: number;\n\n /** Parent process ID, populated by process discovery when available */\n ppid?: number;\n\n /** Process command */\n command: string;\n\n /** Working directory */\n cwd: string;\n\n /** Terminal TTY (e.g., \"ttys030\") */\n tty: string;\n\n /** Process start time, populated by process enrichment */\n startTime?: Date;\n}\n\n/**\n * A single message in a conversation\n */\nexport interface ConversationMessage {\n role: \"user\" | \"assistant\" | \"system\";\n content: string;\n timestamp?: string;\n}\n\n/**\n * A historical session discovered on disk (running or not).\n *\n * Used by `listSessions` to surface enough context for a user to identify\n * a session and resume it via the originating tool's resume command.\n */\nexport interface SessionSummary {\n /** Tool that produced this session */\n type: AgentType;\n\n /**\n * ID accepted by the tool's resume command. Adapters MUST pass this\n * through verbatim — no normalization, no encoding/decoding — so it\n * round-trips into `claude --resume <id>` (and equivalents).\n */\n sessionId: string;\n\n /** Working directory the session was started in (best-known value) */\n cwd: string;\n\n /**\n * Trimmed first user message; empty string if none. Adapters apply\n * the same noise-filter their existing parsers use (skip tool_result\n * blocks, request-interruption notices, system-injected skill\n * content). The CLI table renderer substitutes a placeholder for\n * empty values; JSON output keeps the empty string raw.\n */\n firstUserMessage: string;\n\n /** Last activity timestamp (from session content; falls back to file mtime) */\n lastActive: Date;\n\n /** Session start time (from session content; falls back to file birthtime/mtime) */\n startedAt: Date;\n\n /** Absolute path to the session file on disk (debug/diagnostics) */\n sessionFilePath: string;\n}\n\n/**\n * Filters passed by the CLI to {@link AgentAdapter.listSessions}.\n *\n * The CLI is the source of truth for filter defaults and semantics\n * (e.g. cwd defaults to process.cwd(); --all clears it). Adapters apply\n * the values they receive — they don't invent defaults.\n */\nexport interface ListSessionsOptions {\n /**\n * Filter to sessions whose recorded cwd matches this path using strict\n * equality (no prefix/ancestor matching in v1). Undefined = no cwd\n * filter.\n */\n cwd?: string;\n\n /**\n * Filter to a single tool. Enforced by `AgentManager.listSessions`,\n * which skips adapters whose `type` doesn't match. Adapters MAY\n * ignore this field — by the time their `listSessions` runs, the\n * type filter is already satisfied. Undefined = include every\n * registered adapter.\n */\n type?: AgentType;\n}\n\nexport interface AgentDetectionContext {\n /** One enriched process snapshot shared across this manager refresh. */\n readonly processes: readonly ProcessInfo[];\n}\n\n/**\n * Agent Adapter Interface\n *\n * Implementations must provide detection logic for a specific agent type.\n */\nexport interface AgentAdapter {\n /** Type of agent this adapter handles */\n readonly type: AgentType;\n\n /** Executable basenames required for shared process discovery. */\n readonly processNames?: readonly string[];\n\n /**\n * Detect running agents of this type\n * @returns List of detected agents\n */\n detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;\n\n /**\n * Check if this adapter can handle the given process\n * @param processInfo Process information\n * @returns True if this adapter can handle the process\n */\n canHandle(processInfo: ProcessInfo): boolean;\n\n /**\n * Read the full conversation from a session file\n * @param sessionFilePath Path to the session JSONL file\n * @param options.verbose Include tool call/result details\n * @returns Array of conversation messages\n */\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[];\n\n /**\n * Enumerate historical sessions for this tool from disk.\n *\n * Applies `opts.cwd` as a strict-equality filter when set. Returns\n * {@link SessionSummary} entries unsorted; sorting and global filters\n * are handled by `AgentManager` and the CLI.\n *\n * @param opts Filter options computed by the CLI\n * @returns Array of sessions discovered on disk\n */\n listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;\n}\n"],"names":["AgentStatus"],"mappings":"AAAA;;;;;CAKC,GAED;;CAEC,GAWD;;CAEC,GACD,OAAO,IAAA,AAAKA,qCAAAA;;;;;WAAAA;MAKX"}
@@ -1,4 +1,4 @@
1
- import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext } from './AgentAdapter.js';
1
+ import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext } from "./AgentAdapter.js";
2
2
  export declare class GrokCliAdapter implements AgentAdapter {
3
3
  readonly type: "grok_cli";
4
4
  readonly processNames: readonly ["grok"];
@@ -1 +1 @@
1
- {"version":3,"file":"GrokCliAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/GrokCliAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACxB,MAAM,mBAAmB,CAAC;AA6D3B,qBAAa,cAAe,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IACpC,QAAQ,CAAC,YAAY,oBAAqB;IAE1C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,WAAW,CAAS;;IAW5B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAI5C,OAAO,CAAC,gBAAgB;IAKlB,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA4BzE;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAMvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,iBAAiB;IAezB,OAAO,CAAC,mBAAmB;IAc3B,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAI1F,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoCzE;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAqBnB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAWvB;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IA2CxB,4EAA4E;IAC5E,OAAO,CAAC,WAAW;IAcnB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB,gFAAgF;IAChF,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAIrB;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CASzB"}
1
+ {"version":3,"file":"GrokCliAdapter.d.ts","sourceRoot":"","sources":["../../src/adapters/GrokCliAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,mBAAmB,CAAC;AAiE3B,qBAAa,cAAe,YAAW,YAAY;IACjD,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IACpC,QAAQ,CAAC,YAAY,oBAAqB;IAE1C,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,WAAW,CAAS;;IAW5B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAI5C,OAAO,CAAC,gBAAgB;IAKlB,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA4BzE;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAMvB;;;;;OAKG;IACH,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,mBAAmB;IAc3B,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAK1F,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAoCzE;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAqBnB;;;;;;OAMG;IACH,OAAO,CAAC,eAAe;IAWvB;;;;;;;;OAQG;IACH,OAAO,CAAC,gBAAgB;IA2CxB,4EAA4E;IAC5E,OAAO,CAAC,WAAW;IAgBnB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAKxB,gFAAgF;IAChF,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAIrB;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CASvB"}