@ai-devkit/agent-manager 0.32.0 → 0.33.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (519) hide show
  1. package/dist/AgentManager.d.ts +3 -3
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +80 -79
  4. package/dist/AgentManager.js.map +1 -1
  5. package/dist/__tests__/AgentManager.test.js +413 -388
  6. package/dist/__tests__/AgentManager.test.js.map +1 -1
  7. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +642 -642
  8. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +1 -1
  9. package/dist/__tests__/adapters/CodexAdapter.test.js +322 -2321
  10. package/dist/__tests__/adapters/CodexAdapter.test.js.map +1 -1
  11. package/dist/__tests__/adapters/CopilotAdapter.test.js +254 -248
  12. package/dist/__tests__/adapters/CopilotAdapter.test.js.map +1 -1
  13. package/dist/__tests__/adapters/GeminiCliAdapter.test.js +564 -558
  14. package/dist/__tests__/adapters/GeminiCliAdapter.test.js.map +1 -1
  15. package/dist/__tests__/adapters/GrokCliAdapter.test.js +114 -114
  16. package/dist/__tests__/adapters/GrokCliAdapter.test.js.map +1 -1
  17. package/dist/__tests__/adapters/OpenCodeAdapter.test.js +169 -169
  18. package/dist/__tests__/adapters/OpenCodeAdapter.test.js.map +1 -1
  19. package/dist/__tests__/capacity/codex.test.js +93 -93
  20. package/dist/__tests__/capacity/codex.test.js.map +1 -1
  21. package/dist/__tests__/capacity/index.test.js +17 -17
  22. package/dist/__tests__/capacity/index.test.js.map +1 -1
  23. package/dist/__tests__/durable/CodexCliProbe.test.js +60 -60
  24. package/dist/__tests__/durable/CodexCliProbe.test.js.map +1 -1
  25. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +28 -28
  26. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +1 -1
  27. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +30 -30
  28. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +1 -1
  29. package/dist/__tests__/durable/CodexPrintAgentService.test.js +71 -71
  30. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +1 -1
  31. package/dist/__tests__/durable/CodexPrintRunner.test.js +125 -125
  32. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +1 -1
  33. package/dist/__tests__/print/ClaudeCliProbe.test.js +20 -20
  34. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +1 -1
  35. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +20 -20
  36. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +1 -1
  37. package/dist/__tests__/print/ClaudePrintAgentService.test.js +58 -58
  38. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +1 -1
  39. package/dist/__tests__/print/ClaudePrintRunner.test.js +55 -55
  40. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +1 -1
  41. package/dist/__tests__/print/DurableAgent.test.js +9 -9
  42. package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
  43. package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js +40 -40
  44. package/dist/__tests__/print/DurableAgentRepository.sqlite.test.js.map +1 -1
  45. package/dist/__tests__/print/DurableAgentRepository.test.js +66 -66
  46. package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
  47. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +34 -34
  48. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +1 -1
  49. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +132 -132
  50. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js.map +1 -1
  51. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +194 -0
  52. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +1 -0
  53. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js +86 -0
  54. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js.map +1 -0
  55. package/dist/__tests__/providers/codex/CodexSessionParser.test.js +254 -0
  56. package/dist/__tests__/providers/codex/CodexSessionParser.test.js.map +1 -0
  57. package/dist/__tests__/providers/pi/PiAdapter.test.js +337 -0
  58. package/dist/__tests__/providers/pi/PiAdapter.test.js.map +1 -0
  59. package/dist/__tests__/providers/pi/PiSessionParser.test.js +246 -0
  60. package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +1 -0
  61. package/dist/__tests__/providers/pi/PiSessionTracker.test.js +108 -0
  62. package/dist/__tests__/providers/pi/PiSessionTracker.test.js.map +1 -0
  63. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js +33 -33
  64. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js.map +1 -1
  65. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js +16 -16
  66. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
  67. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js +52 -52
  68. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js.map +1 -1
  69. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js +44 -44
  70. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js.map +1 -1
  71. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js +126 -126
  72. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js.map +1 -1
  73. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js +14 -14
  74. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js.map +1 -1
  75. package/dist/__tests__/readiness/AgentReadiness.test.js +134 -134
  76. package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
  77. package/dist/__tests__/runtime/AgentRuntime.test.js +13 -0
  78. package/dist/__tests__/runtime/AgentRuntime.test.js.map +1 -0
  79. package/dist/__tests__/runtime/HerdrAgentRuntime.test.js +452 -0
  80. package/dist/__tests__/runtime/HerdrAgentRuntime.test.js.map +1 -0
  81. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +588 -0
  82. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -0
  83. package/dist/__tests__/terminal/TerminalFocusManager.test.js +100 -100
  84. package/dist/__tests__/terminal/TerminalFocusManager.test.js.map +1 -1
  85. package/dist/__tests__/terminal/TmuxManager.test.js +101 -101
  86. package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
  87. package/dist/__tests__/terminal/TtyWriter.test.js +185 -185
  88. package/dist/__tests__/terminal/TtyWriter.test.js.map +1 -1
  89. package/dist/__tests__/utils/AgentRegistry.test.js +335 -217
  90. package/dist/__tests__/utils/AgentRegistry.test.js.map +1 -1
  91. package/dist/__tests__/utils/ClaudeSessionParser.test.js +103 -101
  92. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +1 -1
  93. package/dist/__tests__/utils/agent-requests.test.js +43 -43
  94. package/dist/__tests__/utils/agent-requests.test.js.map +1 -1
  95. package/dist/__tests__/utils/agents.test.js +17 -17
  96. package/dist/__tests__/utils/agents.test.js.map +1 -1
  97. package/dist/__tests__/utils/matching.test.js +92 -92
  98. package/dist/__tests__/utils/matching.test.js.map +1 -1
  99. package/dist/__tests__/utils/process.test.js +108 -108
  100. package/dist/__tests__/utils/process.test.js.map +1 -1
  101. package/dist/__tests__/utils/session.test.js +53 -53
  102. package/dist/__tests__/utils/session.test.js.map +1 -1
  103. package/dist/adapters/AgentAdapter.d.ts +2 -2
  104. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  105. package/dist/adapters/AgentAdapter.js +1 -1
  106. package/dist/adapters/AgentAdapter.js.map +1 -1
  107. package/dist/adapters/CopilotAdapter.d.ts +2 -2
  108. package/dist/adapters/CopilotAdapter.d.ts.map +1 -1
  109. package/dist/adapters/CopilotAdapter.js +51 -51
  110. package/dist/adapters/CopilotAdapter.js.map +1 -1
  111. package/dist/adapters/GeminiCliAdapter.d.ts +2 -2
  112. package/dist/adapters/GeminiCliAdapter.d.ts.map +1 -1
  113. package/dist/adapters/GeminiCliAdapter.js +86 -86
  114. package/dist/adapters/GeminiCliAdapter.js.map +1 -1
  115. package/dist/adapters/GrokCliAdapter.d.ts +1 -1
  116. package/dist/adapters/GrokCliAdapter.d.ts.map +1 -1
  117. package/dist/adapters/GrokCliAdapter.js +80 -80
  118. package/dist/adapters/GrokCliAdapter.js.map +1 -1
  119. package/dist/adapters/OpenCodeAdapter.d.ts +1 -1
  120. package/dist/adapters/OpenCodeAdapter.d.ts.map +1 -1
  121. package/dist/adapters/OpenCodeAdapter.js +37 -36
  122. package/dist/adapters/OpenCodeAdapter.js.map +1 -1
  123. package/dist/adapters/index.d.ts +9 -9
  124. package/dist/adapters/index.d.ts.map +1 -1
  125. package/dist/adapters/index.js +8 -8
  126. package/dist/adapters/index.js.map +1 -1
  127. package/dist/capacity/codex.d.ts +3 -3
  128. package/dist/capacity/codex.d.ts.map +1 -1
  129. package/dist/capacity/codex.js +57 -57
  130. package/dist/capacity/codex.js.map +1 -1
  131. package/dist/capacity/index.d.ts +3 -3
  132. package/dist/capacity/index.d.ts.map +1 -1
  133. package/dist/capacity/index.js +8 -8
  134. package/dist/capacity/index.js.map +1 -1
  135. package/dist/capacity/types.d.ts +1 -1
  136. package/dist/capacity/types.js.map +1 -1
  137. package/dist/database/connection.d.ts +1 -1
  138. package/dist/database/connection.d.ts.map +1 -1
  139. package/dist/database/connection.js +15 -15
  140. package/dist/database/connection.js.map +1 -1
  141. package/dist/database/index.d.ts +3 -3
  142. package/dist/database/index.d.ts.map +1 -1
  143. package/dist/database/index.js +2 -2
  144. package/dist/database/index.js.map +1 -1
  145. package/dist/database/migrations/005_agent_runtime.sql +2 -0
  146. package/dist/database/schema.d.ts +1 -1
  147. package/dist/database/schema.d.ts.map +1 -1
  148. package/dist/database/schema.js +7 -7
  149. package/dist/database/schema.js.map +1 -1
  150. package/dist/durable/DurableAgent.d.ts +9 -9
  151. package/dist/durable/DurableAgent.d.ts.map +1 -1
  152. package/dist/durable/DurableAgent.js +16 -16
  153. package/dist/durable/DurableAgent.js.map +1 -1
  154. package/dist/durable/DurableAgentRepository.d.ts +4 -4
  155. package/dist/durable/DurableAgentRepository.d.ts.map +1 -1
  156. package/dist/durable/DurableAgentRepository.js +49 -48
  157. package/dist/durable/DurableAgentRepository.js.map +1 -1
  158. package/dist/durable/process.d.ts +1 -1
  159. package/dist/durable/process.d.ts.map +1 -1
  160. package/dist/durable/process.js +14 -14
  161. package/dist/durable/process.js.map +1 -1
  162. package/dist/durable/run.d.ts +2 -2
  163. package/dist/durable/run.d.ts.map +1 -1
  164. package/dist/durable/run.js +6 -6
  165. package/dist/durable/run.js.map +1 -1
  166. package/dist/durable/utils.d.ts +1 -1
  167. package/dist/durable/utils.d.ts.map +1 -1
  168. package/dist/durable/utils.js +4 -4
  169. package/dist/durable/utils.js.map +1 -1
  170. package/dist/index.d.ts +46 -43
  171. package/dist/index.d.ts.map +1 -1
  172. package/dist/index.js +27 -26
  173. package/dist/index.js.map +1 -1
  174. package/dist/providers/claude/ClaudeAgentMapper.d.ts +4 -4
  175. package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +1 -1
  176. package/dist/providers/claude/ClaudeAgentMapper.js +10 -10
  177. package/dist/providers/claude/ClaudeAgentMapper.js.map +1 -1
  178. package/dist/providers/claude/ClaudeCodeAdapter.d.ts +1 -1
  179. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +1 -1
  180. package/dist/providers/claude/ClaudeCodeAdapter.js +14 -14
  181. package/dist/providers/claude/ClaudeCodeAdapter.js.map +1 -1
  182. package/dist/providers/claude/ClaudeSessionLocator.d.ts +4 -4
  183. package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +1 -1
  184. package/dist/providers/claude/ClaudeSessionLocator.js +79 -79
  185. package/dist/providers/claude/ClaudeSessionLocator.js.map +1 -1
  186. package/dist/providers/claude/ClaudeSessionParser.d.ts +2 -2
  187. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +1 -1
  188. package/dist/providers/claude/ClaudeSessionParser.js +99 -99
  189. package/dist/providers/claude/ClaudeSessionParser.js.map +1 -1
  190. package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
  191. package/dist/providers/claude/durable/ClaudeCliProbe.js +16 -16
  192. package/dist/providers/claude/durable/ClaudeCliProbe.js.map +1 -1
  193. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts +5 -5
  194. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
  195. package/dist/providers/claude/durable/ClaudePrintAgentService.js +10 -10
  196. package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +1 -1
  197. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts +4 -4
  198. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
  199. package/dist/providers/claude/durable/ClaudePrintRunner.js +18 -18
  200. package/dist/providers/claude/durable/ClaudePrintRunner.js.map +1 -1
  201. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts +2 -2
  202. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
  203. package/dist/providers/claude/durable/ClaudeStreamParser.js +17 -17
  204. package/dist/providers/claude/durable/ClaudeStreamParser.js.map +1 -1
  205. package/dist/providers/codex/CodexAdapter.d.ts +27 -0
  206. package/dist/providers/codex/CodexAdapter.d.ts.map +1 -0
  207. package/dist/providers/codex/CodexAdapter.js +162 -0
  208. package/dist/providers/codex/CodexAdapter.js.map +1 -0
  209. package/dist/providers/codex/CodexAgentMapper.d.ts +9 -0
  210. package/dist/providers/codex/CodexAgentMapper.d.ts.map +1 -0
  211. package/dist/providers/codex/CodexAgentMapper.js +35 -0
  212. package/dist/providers/codex/CodexAgentMapper.js.map +1 -0
  213. package/dist/providers/codex/CodexSessionLocator.d.ts +44 -0
  214. package/dist/providers/codex/CodexSessionLocator.d.ts.map +1 -0
  215. package/dist/providers/codex/CodexSessionLocator.js +207 -0
  216. package/dist/providers/codex/CodexSessionLocator.js.map +1 -0
  217. package/dist/providers/codex/CodexSessionMapping.d.ts +23 -0
  218. package/dist/providers/codex/CodexSessionMapping.d.ts.map +1 -0
  219. package/dist/providers/codex/CodexSessionMapping.js +68 -0
  220. package/dist/providers/codex/CodexSessionMapping.js.map +1 -0
  221. package/dist/providers/codex/CodexSessionParser.d.ts +58 -0
  222. package/dist/providers/codex/CodexSessionParser.d.ts.map +1 -0
  223. package/dist/providers/codex/CodexSessionParser.js +262 -0
  224. package/dist/providers/codex/CodexSessionParser.js.map +1 -0
  225. package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +1 -1
  226. package/dist/providers/codex/durable/CodexCliProbe.js +22 -22
  227. package/dist/providers/codex/durable/CodexCliProbe.js.map +1 -1
  228. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts +6 -6
  229. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
  230. package/dist/providers/codex/durable/CodexPrintAgentService.js +10 -10
  231. package/dist/providers/codex/durable/CodexPrintAgentService.js.map +1 -1
  232. package/dist/providers/codex/durable/CodexPrintRunner.d.ts +4 -4
  233. package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +1 -1
  234. package/dist/providers/codex/durable/CodexPrintRunner.js +20 -20
  235. package/dist/providers/codex/durable/CodexPrintRunner.js.map +1 -1
  236. package/dist/providers/codex/durable/CodexStreamParser.d.ts +2 -2
  237. package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +1 -1
  238. package/dist/providers/codex/durable/CodexStreamParser.js +21 -21
  239. package/dist/providers/codex/durable/CodexStreamParser.js.map +1 -1
  240. package/dist/providers/pi/PiAdapter.d.ts +28 -0
  241. package/dist/providers/pi/PiAdapter.d.ts.map +1 -0
  242. package/dist/providers/pi/PiAdapter.js +153 -0
  243. package/dist/providers/pi/PiAdapter.js.map +1 -0
  244. package/dist/providers/pi/PiAgentMapper.d.ts +9 -0
  245. package/dist/providers/pi/PiAgentMapper.d.ts.map +1 -0
  246. package/dist/providers/pi/PiAgentMapper.js +37 -0
  247. package/dist/providers/pi/PiAgentMapper.js.map +1 -0
  248. package/dist/providers/pi/PiSessionLocator.d.ts +23 -0
  249. package/dist/providers/pi/PiSessionLocator.d.ts.map +1 -0
  250. package/dist/providers/pi/PiSessionLocator.js +79 -0
  251. package/dist/providers/pi/PiSessionLocator.js.map +1 -0
  252. package/dist/providers/pi/PiSessionParser.d.ts +36 -0
  253. package/dist/providers/pi/PiSessionParser.d.ts.map +1 -0
  254. package/dist/providers/pi/PiSessionParser.js +191 -0
  255. package/dist/providers/pi/PiSessionParser.js.map +1 -0
  256. package/dist/providers/pi/PiSessionTracker.d.ts +23 -0
  257. package/dist/providers/pi/PiSessionTracker.d.ts.map +1 -0
  258. package/dist/providers/pi/PiSessionTracker.js +69 -0
  259. package/dist/providers/pi/PiSessionTracker.js.map +1 -0
  260. package/dist/providers/pi/durable/PiCliProbe.d.ts.map +1 -1
  261. package/dist/providers/pi/durable/PiCliProbe.js +15 -15
  262. package/dist/providers/pi/durable/PiCliProbe.js.map +1 -1
  263. package/dist/providers/pi/durable/PiPrintAgentService.d.ts +6 -6
  264. package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +1 -1
  265. package/dist/providers/pi/durable/PiPrintAgentService.js +10 -10
  266. package/dist/providers/pi/durable/PiPrintAgentService.js.map +1 -1
  267. package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +1 -1
  268. package/dist/providers/pi/durable/PiPrintProtocol.js +18 -18
  269. package/dist/providers/pi/durable/PiPrintProtocol.js.map +1 -1
  270. package/dist/providers/pi/durable/PiPrintRunner.d.ts +4 -4
  271. package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +1 -1
  272. package/dist/providers/pi/durable/PiPrintRunner.js +15 -15
  273. package/dist/providers/pi/durable/PiPrintRunner.js.map +1 -1
  274. package/dist/providers/pi/durable/PiStreamParser.d.ts +1 -1
  275. package/dist/providers/pi/durable/PiStreamParser.d.ts.map +1 -1
  276. package/dist/providers/pi/durable/PiStreamParser.js +16 -16
  277. package/dist/providers/pi/durable/PiStreamParser.js.map +1 -1
  278. package/dist/readiness/AgentReadiness.d.ts +6 -6
  279. package/dist/readiness/AgentReadiness.d.ts.map +1 -1
  280. package/dist/readiness/AgentReadiness.js +130 -130
  281. package/dist/readiness/AgentReadiness.js.map +1 -1
  282. package/dist/runtime/ManagedAgentRuntime.d.ts +69 -0
  283. package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -0
  284. package/dist/runtime/ManagedAgentRuntime.js +156 -0
  285. package/dist/runtime/ManagedAgentRuntime.js.map +1 -0
  286. package/dist/runtime/RuntimeFactory.d.ts +4 -0
  287. package/dist/runtime/RuntimeFactory.d.ts.map +1 -0
  288. package/dist/runtime/RuntimeFactory.js +11 -0
  289. package/dist/runtime/RuntimeFactory.js.map +1 -0
  290. package/dist/runtime/errors.d.ts +27 -0
  291. package/dist/runtime/errors.d.ts.map +1 -0
  292. package/dist/runtime/errors.js +42 -0
  293. package/dist/runtime/errors.js.map +1 -0
  294. package/dist/runtime/herdr/HerdrAgentRuntime.d.ts +31 -0
  295. package/dist/runtime/herdr/HerdrAgentRuntime.d.ts.map +1 -0
  296. package/dist/runtime/herdr/HerdrAgentRuntime.js +184 -0
  297. package/dist/runtime/herdr/HerdrAgentRuntime.js.map +1 -0
  298. package/dist/runtime/herdr/HerdrCliClient.d.ts +13 -0
  299. package/dist/runtime/herdr/HerdrCliClient.d.ts.map +1 -0
  300. package/dist/runtime/herdr/HerdrCliClient.js +60 -0
  301. package/dist/runtime/herdr/HerdrCliClient.js.map +1 -0
  302. package/dist/runtime/herdr/HerdrErrors.d.ts +7 -0
  303. package/dist/runtime/herdr/HerdrErrors.d.ts.map +1 -0
  304. package/dist/runtime/herdr/HerdrErrors.js +10 -0
  305. package/dist/runtime/herdr/HerdrErrors.js.map +1 -0
  306. package/dist/runtime/herdr/HerdrResponseParsers.d.ts +14 -0
  307. package/dist/runtime/herdr/HerdrResponseParsers.d.ts.map +1 -0
  308. package/dist/runtime/herdr/HerdrResponseParsers.js +96 -0
  309. package/dist/runtime/herdr/HerdrResponseParsers.js.map +1 -0
  310. package/dist/runtime/herdr/HerdrRuntimeRef.d.ts +9 -0
  311. package/dist/runtime/herdr/HerdrRuntimeRef.d.ts.map +1 -0
  312. package/dist/runtime/herdr/HerdrRuntimeRef.js +33 -0
  313. package/dist/runtime/herdr/HerdrRuntimeRef.js.map +1 -0
  314. package/dist/runtime/tmux/PidPolling.d.ts +5 -0
  315. package/dist/runtime/tmux/PidPolling.d.ts.map +1 -0
  316. package/dist/runtime/tmux/PidPolling.js +24 -0
  317. package/dist/runtime/tmux/PidPolling.js.map +1 -0
  318. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +17 -0
  319. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -0
  320. package/dist/runtime/tmux/TmuxAgentRuntime.js +80 -0
  321. package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -0
  322. package/dist/runtime/tmux/TmuxRuntimeRef.d.ts +5 -0
  323. package/dist/runtime/tmux/TmuxRuntimeRef.d.ts.map +1 -0
  324. package/dist/runtime/tmux/TmuxRuntimeRef.js +9 -0
  325. package/dist/runtime/tmux/TmuxRuntimeRef.js.map +1 -0
  326. package/dist/runtime/types.d.ts +54 -0
  327. package/dist/runtime/types.d.ts.map +1 -0
  328. package/dist/runtime/types.js +3 -0
  329. package/dist/runtime/types.js.map +1 -0
  330. package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
  331. package/dist/terminal/TerminalFocusManager.js +50 -50
  332. package/dist/terminal/TerminalFocusManager.js.map +1 -1
  333. package/dist/terminal/TmuxManager.d.ts.map +1 -1
  334. package/dist/terminal/TmuxManager.js +47 -47
  335. package/dist/terminal/TmuxManager.js.map +1 -1
  336. package/dist/terminal/TtyWriter.d.ts +1 -1
  337. package/dist/terminal/TtyWriter.d.ts.map +1 -1
  338. package/dist/terminal/TtyWriter.js +89 -89
  339. package/dist/terminal/TtyWriter.js.map +1 -1
  340. package/dist/terminal/index.d.ts +4 -4
  341. package/dist/terminal/index.js +3 -3
  342. package/dist/terminal/index.js.map +1 -1
  343. package/dist/utils/AgentRegistry.d.ts +10 -2
  344. package/dist/utils/AgentRegistry.d.ts.map +1 -1
  345. package/dist/utils/AgentRegistry.js +57 -24
  346. package/dist/utils/AgentRegistry.js.map +1 -1
  347. package/dist/utils/agent-requests.d.ts.map +1 -1
  348. package/dist/utils/agent-requests.js +5 -5
  349. package/dist/utils/agent-requests.js.map +1 -1
  350. package/dist/utils/agents.d.ts +2 -2
  351. package/dist/utils/agents.d.ts.map +1 -1
  352. package/dist/utils/agents.js +15 -15
  353. package/dist/utils/agents.js.map +1 -1
  354. package/dist/utils/applescript.js +1 -1
  355. package/dist/utils/applescript.js.map +1 -1
  356. package/dist/utils/index.d.ts +6 -6
  357. package/dist/utils/index.d.ts.map +1 -1
  358. package/dist/utils/index.js +4 -4
  359. package/dist/utils/index.js.map +1 -1
  360. package/dist/utils/matching.d.ts +2 -2
  361. package/dist/utils/matching.d.ts.map +1 -1
  362. package/dist/utils/matching.js +4 -4
  363. package/dist/utils/matching.js.map +1 -1
  364. package/dist/utils/process.d.ts +1 -1
  365. package/dist/utils/process.d.ts.map +1 -1
  366. package/dist/utils/process.js +74 -74
  367. package/dist/utils/process.js.map +1 -1
  368. package/dist/utils/session.d.ts +1 -1
  369. package/dist/utils/session.d.ts.map +1 -1
  370. package/dist/utils/session.js +7 -7
  371. package/dist/utils/session.js.map +1 -1
  372. package/dist/utils/sortAgents.d.ts +2 -2
  373. package/dist/utils/sortAgents.d.ts.map +1 -1
  374. package/dist/utils/sortAgents.js +5 -5
  375. package/dist/utils/sortAgents.js.map +1 -1
  376. package/package.json +18 -19
  377. package/src/AgentManager.ts +283 -281
  378. package/src/__tests__/AgentManager.test.ts +917 -907
  379. package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +1657 -1368
  380. package/src/__tests__/adapters/CodexAdapter.test.ts +365 -1698
  381. package/src/__tests__/adapters/CopilotAdapter.test.ts +576 -481
  382. package/src/__tests__/adapters/GeminiCliAdapter.test.ts +1189 -1157
  383. package/src/__tests__/adapters/GrokCliAdapter.test.ts +325 -272
  384. package/src/__tests__/adapters/OpenCodeAdapter.test.ts +510 -455
  385. package/src/__tests__/capacity/codex.test.ts +178 -91
  386. package/src/__tests__/capacity/index.test.ts +27 -18
  387. package/src/__tests__/durable/CodexCliProbe.test.ts +75 -53
  388. package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +51 -40
  389. package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +89 -64
  390. package/src/__tests__/durable/CodexPrintAgentService.test.ts +196 -118
  391. package/src/__tests__/durable/CodexPrintRunner.test.ts +282 -162
  392. package/src/__tests__/fixtures/fake-claude.cjs +20 -13
  393. package/src/__tests__/fixtures/fake-codex.cjs +41 -30
  394. package/src/__tests__/print/ClaudeCliProbe.test.ts +27 -21
  395. package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +48 -40
  396. package/src/__tests__/print/ClaudePrintAgentService.test.ts +118 -67
  397. package/src/__tests__/print/ClaudePrintRunner.test.ts +136 -83
  398. package/src/__tests__/print/DurableAgent.test.ts +19 -16
  399. package/src/__tests__/print/DurableAgentRepository.sqlite.test.ts +109 -86
  400. package/src/__tests__/print/DurableAgentRepository.test.ts +170 -137
  401. package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +65 -65
  402. package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +400 -377
  403. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +182 -0
  404. package/src/__tests__/providers/codex/CodexSessionMapping.test.ts +63 -0
  405. package/src/__tests__/providers/codex/CodexSessionParser.test.ts +192 -0
  406. package/src/__tests__/providers/pi/PiAdapter.test.ts +310 -0
  407. package/src/__tests__/providers/pi/PiSessionParser.test.ts +190 -0
  408. package/src/__tests__/providers/pi/PiSessionTracker.test.ts +79 -0
  409. package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +48 -32
  410. package/src/__tests__/providers/pi/durable/PiDurableAgentRepository.test.ts +24 -23
  411. package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +131 -59
  412. package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +66 -28
  413. package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +236 -90
  414. package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +20 -18
  415. package/src/__tests__/readiness/AgentReadiness.test.ts +217 -169
  416. package/src/__tests__/runtime/AgentRuntime.test.ts +8 -0
  417. package/src/__tests__/runtime/HerdrAgentRuntime.test.ts +358 -0
  418. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +555 -0
  419. package/src/__tests__/terminal/TerminalFocusManager.test.ts +254 -253
  420. package/src/__tests__/terminal/TmuxManager.test.ts +157 -157
  421. package/src/__tests__/terminal/TtyWriter.test.ts +423 -419
  422. package/src/__tests__/utils/AgentRegistry.test.ts +506 -402
  423. package/src/__tests__/utils/ClaudeSessionParser.test.ts +276 -242
  424. package/src/__tests__/utils/agent-requests.test.ts +76 -56
  425. package/src/__tests__/utils/agents.test.ts +20 -20
  426. package/src/__tests__/utils/matching.test.ts +206 -171
  427. package/src/__tests__/utils/process.test.ts +276 -262
  428. package/src/__tests__/utils/session.test.ts +133 -139
  429. package/src/adapters/AgentAdapter.ts +134 -126
  430. package/src/adapters/CopilotAdapter.ts +405 -395
  431. package/src/adapters/GeminiCliAdapter.ts +598 -600
  432. package/src/adapters/GrokCliAdapter.ts +353 -342
  433. package/src/adapters/OpenCodeAdapter.ts +285 -259
  434. package/src/adapters/index.ts +15 -9
  435. package/src/capacity/codex.ts +137 -84
  436. package/src/capacity/index.ts +18 -13
  437. package/src/capacity/types.ts +1 -1
  438. package/src/database/connection.ts +73 -68
  439. package/src/database/index.ts +6 -6
  440. package/src/database/migrations/005_agent_runtime.sql +2 -0
  441. package/src/database/schema.ts +40 -38
  442. package/src/durable/DurableAgent.ts +85 -85
  443. package/src/durable/DurableAgentRepository.ts +409 -260
  444. package/src/durable/process.ts +22 -21
  445. package/src/durable/run.ts +61 -51
  446. package/src/durable/utils.ts +46 -41
  447. package/src/index.ts +144 -103
  448. package/src/providers/claude/ClaudeAgentMapper.ts +51 -50
  449. package/src/providers/claude/ClaudeCodeAdapter.ts +144 -136
  450. package/src/providers/claude/ClaudeSessionLocator.ts +291 -293
  451. package/src/providers/claude/ClaudeSessionParser.ts +322 -338
  452. package/src/providers/claude/durable/ClaudeCliProbe.ts +42 -37
  453. package/src/providers/claude/durable/ClaudePrintAgentService.ts +63 -50
  454. package/src/providers/claude/durable/ClaudePrintRunner.ts +79 -69
  455. package/src/providers/claude/durable/ClaudeStreamParser.ts +91 -62
  456. package/src/providers/codex/CodexAdapter.ts +205 -0
  457. package/src/providers/codex/CodexAgentMapper.ts +35 -0
  458. package/src/providers/codex/CodexSessionLocator.ts +279 -0
  459. package/src/providers/codex/CodexSessionMapping.ts +89 -0
  460. package/src/providers/codex/CodexSessionParser.ts +385 -0
  461. package/src/providers/codex/durable/CodexCliProbe.ts +50 -42
  462. package/src/providers/codex/durable/CodexPrintAgentService.ts +63 -49
  463. package/src/providers/codex/durable/CodexPrintRunner.ts +79 -69
  464. package/src/providers/codex/durable/CodexStreamParser.ts +97 -84
  465. package/src/providers/pi/PiAdapter.ts +183 -0
  466. package/src/providers/pi/PiAgentMapper.ts +36 -0
  467. package/src/providers/pi/PiSessionLocator.ts +95 -0
  468. package/src/providers/pi/PiSessionParser.ts +284 -0
  469. package/src/providers/pi/PiSessionTracker.ts +87 -0
  470. package/src/providers/pi/durable/PiCliProbe.ts +42 -34
  471. package/src/providers/pi/durable/PiPrintAgentService.ts +61 -53
  472. package/src/providers/pi/durable/PiPrintProtocol.ts +31 -29
  473. package/src/providers/pi/durable/PiPrintRunner.ts +75 -68
  474. package/src/providers/pi/durable/PiStreamParser.ts +82 -72
  475. package/src/readiness/AgentReadiness.ts +585 -513
  476. package/src/runtime/ManagedAgentRuntime.ts +266 -0
  477. package/src/runtime/RuntimeFactory.ts +13 -0
  478. package/src/runtime/errors.ts +50 -0
  479. package/src/runtime/herdr/HerdrAgentRuntime.ts +190 -0
  480. package/src/runtime/herdr/HerdrCliClient.ts +78 -0
  481. package/src/runtime/herdr/HerdrErrors.ts +9 -0
  482. package/src/runtime/herdr/HerdrResponseParsers.ts +76 -0
  483. package/src/runtime/herdr/HerdrRuntimeRef.ts +41 -0
  484. package/src/runtime/tmux/PidPolling.ts +34 -0
  485. package/src/runtime/tmux/TmuxAgentRuntime.ts +113 -0
  486. package/src/runtime/tmux/TmuxRuntimeRef.ts +9 -0
  487. package/src/runtime/types.ts +56 -0
  488. package/src/terminal/TerminalFocusManager.ts +215 -212
  489. package/src/terminal/TmuxManager.ts +99 -92
  490. package/src/terminal/TtyWriter.ts +203 -194
  491. package/src/terminal/index.ts +4 -4
  492. package/src/utils/AgentRegistry.ts +299 -238
  493. package/src/utils/agent-requests.ts +16 -16
  494. package/src/utils/agents.ts +41 -38
  495. package/src/utils/applescript.ts +4 -4
  496. package/src/utils/index.ts +12 -6
  497. package/src/utils/matching.ts +43 -43
  498. package/src/utils/process.ts +261 -258
  499. package/src/utils/session.ts +66 -66
  500. package/src/utils/sortAgents.ts +35 -33
  501. package/tsconfig.json +2 -8
  502. package/vitest.config.ts +16 -16
  503. package/.eslintrc.json +0 -31
  504. package/dist/__tests__/adapters/PiAdapter.test.js +0 -618
  505. package/dist/__tests__/adapters/PiAdapter.test.js.map +0 -1
  506. package/dist/__tests__/database/DurableAgentsDatabase.test.js +0 -128
  507. package/dist/__tests__/database/DurableAgentsDatabase.test.js.map +0 -1
  508. package/dist/adapters/CodexAdapter.d.ts +0 -109
  509. package/dist/adapters/CodexAdapter.d.ts.map +0 -1
  510. package/dist/adapters/CodexAdapter.js +0 -710
  511. package/dist/adapters/CodexAdapter.js.map +0 -1
  512. package/dist/adapters/PiAdapter.d.ts +0 -63
  513. package/dist/adapters/PiAdapter.d.ts.map +0 -1
  514. package/dist/adapters/PiAdapter.js +0 -453
  515. package/dist/adapters/PiAdapter.js.map +0 -1
  516. package/src/__tests__/adapters/PiAdapter.test.ts +0 -458
  517. package/src/__tests__/database/DurableAgentsDatabase.test.ts +0 -102
  518. package/src/adapters/CodexAdapter.ts +0 -923
  519. package/src/adapters/PiAdapter.ts +0 -598
@@ -1,22 +1,22 @@
1
- import { execFile } from 'child_process';
2
- import { promisify } from 'util';
3
- import { getProcessTty } from '../utils/process.js';
4
- import { escapeAppleScript } from '../utils/applescript.js';
1
+ import { execFile } from "child_process";
2
+ import { promisify } from "util";
3
+ import { getProcessTty } from "../utils/process.js";
4
+ import { escapeAppleScript } from "../utils/applescript.js";
5
5
 
6
6
  const execFileAsync = promisify(execFile);
7
7
 
8
8
  export enum TerminalType {
9
- TMUX = 'tmux',
10
- WEZTERM = 'wezterm',
11
- ITERM2 = 'iterm2',
12
- TERMINAL_APP = 'terminal-app',
13
- UNKNOWN = 'unknown',
9
+ TMUX = "tmux",
10
+ WEZTERM = "wezterm",
11
+ ITERM2 = "iterm2",
12
+ TERMINAL_APP = "terminal-app",
13
+ UNKNOWN = "unknown",
14
14
  }
15
15
 
16
16
  export interface TerminalLocation {
17
- type: TerminalType;
18
- identifier: string; // e.g., "session:window.pane" for tmux, WezTerm pane id, or TTY for others
19
- tty: string; // e.g., "/dev/ttys030"
17
+ type: TerminalType;
18
+ identifier: string; // e.g., "session:window.pane" for tmux, WezTerm pane id, or TTY for others
19
+ tty: string; // e.g., "/dev/ttys030"
20
20
  }
21
21
 
22
22
  /**
@@ -26,8 +26,8 @@ export interface TerminalLocation {
26
26
  * the JSON, not `tty`.)
27
27
  */
28
28
  interface WeztermPaneEntry {
29
- pane_id?: number;
30
- tty_name?: string | null;
29
+ pane_id?: number;
30
+ tty_name?: string | null;
31
31
  }
32
32
 
33
33
  /**
@@ -38,167 +38,170 @@ interface WeztermPaneEntry {
38
38
  export type TerminalDebugLogger = (message: string) => void;
39
39
 
40
40
  export class TerminalFocusManager {
41
- constructor(private readonly debug?: TerminalDebugLogger) {}
41
+ constructor(private readonly debug?: TerminalDebugLogger) {}
42
42
 
43
- /**
44
- * Find the terminal location (emulator info) for a given process ID
45
- */
46
- async findTerminal(pid: number): Promise<TerminalLocation | null> {
47
- const ttyShort = getProcessTty(pid);
43
+ /**
44
+ * Find the terminal location (emulator info) for a given process ID
45
+ */
46
+ async findTerminal(pid: number): Promise<TerminalLocation | null> {
47
+ const ttyShort = getProcessTty(pid);
48
48
 
49
- // If no TTY or invalid, we can't find the terminal
50
- if (!ttyShort || ttyShort === '?') {
51
- this.debug?.(`findTerminal(pid=${pid}): no usable TTY, cannot resolve terminal`);
52
- return null;
53
- }
54
-
55
- const fullTty = `/dev/${ttyShort}`;
56
- this.debug?.(`findTerminal(pid=${pid}): resolving terminal for ${fullTty}`);
49
+ // If no TTY or invalid, we can't find the terminal
50
+ if (!ttyShort || ttyShort === "?") {
51
+ this.debug?.(`findTerminal(pid=${pid}): no usable TTY, cannot resolve terminal`);
52
+ return null;
53
+ }
57
54
 
58
- // 1. Check tmux (most specific if running inside it)
59
- const tmuxLocation = await this.findTmuxPane(fullTty);
60
- if (tmuxLocation) {
61
- this.debug?.(`findTerminal: matched tmux (identifier=${tmuxLocation.identifier})`);
62
- return tmuxLocation;
63
- }
64
- this.debug?.('findTerminal: tmux no match');
55
+ const fullTty = `/dev/${ttyShort}`;
56
+ this.debug?.(`findTerminal(pid=${pid}): resolving terminal for ${fullTty}`);
65
57
 
66
- // 2. Check WezTerm (cross-platform, via its CLI no AppleScript)
67
- const weztermLocation = await this.findWeztermPane(fullTty);
68
- if (weztermLocation) {
69
- this.debug?.(`findTerminal: matched wezterm (pane_id=${weztermLocation.identifier})`);
70
- return weztermLocation;
71
- }
72
- this.debug?.('findTerminal: wezterm no match');
58
+ // 1. Check tmux (most specific if running inside it)
59
+ const tmuxLocation = await this.findTmuxPane(fullTty);
60
+ if (tmuxLocation) {
61
+ this.debug?.(`findTerminal: matched tmux (identifier=${tmuxLocation.identifier})`);
62
+ return tmuxLocation;
63
+ }
64
+ this.debug?.("findTerminal: tmux no match");
73
65
 
74
- // 3. Check iTerm2
75
- const itermLocation = await this.findITerm2Session(fullTty);
76
- if (itermLocation) {
77
- this.debug?.(`findTerminal: matched iTerm2 (tty=${itermLocation.tty})`);
78
- return itermLocation;
79
- }
80
- this.debug?.('findTerminal: iTerm2 no match');
66
+ // 2. Check WezTerm (cross-platform, via its CLI — no AppleScript)
67
+ const weztermLocation = await this.findWeztermPane(fullTty);
68
+ if (weztermLocation) {
69
+ this.debug?.(`findTerminal: matched wezterm (pane_id=${weztermLocation.identifier})`);
70
+ return weztermLocation;
71
+ }
72
+ this.debug?.("findTerminal: wezterm no match");
81
73
 
82
- // 4. Check Terminal.app
83
- const terminalAppLocation = await this.findTerminalAppWindow(fullTty);
84
- if (terminalAppLocation) {
85
- this.debug?.(`findTerminal: matched Terminal.app (tty=${terminalAppLocation.tty})`);
86
- return terminalAppLocation;
87
- }
88
- this.debug?.('findTerminal: Terminal.app no match');
74
+ // 3. Check iTerm2
75
+ const itermLocation = await this.findITerm2Session(fullTty);
76
+ if (itermLocation) {
77
+ this.debug?.(`findTerminal: matched iTerm2 (tty=${itermLocation.tty})`);
78
+ return itermLocation;
79
+ }
80
+ this.debug?.("findTerminal: iTerm2 no match");
89
81
 
90
- // 5. Fallback: we know the TTY but not the emulator wrapper
91
- this.debug?.('findTerminal: no emulator matched; returning UNKNOWN');
92
- return {
93
- type: TerminalType.UNKNOWN,
94
- identifier: '',
95
- tty: fullTty
96
- };
82
+ // 4. Check Terminal.app
83
+ const terminalAppLocation = await this.findTerminalAppWindow(fullTty);
84
+ if (terminalAppLocation) {
85
+ this.debug?.(`findTerminal: matched Terminal.app (tty=${terminalAppLocation.tty})`);
86
+ return terminalAppLocation;
97
87
  }
88
+ this.debug?.("findTerminal: Terminal.app no match");
98
89
 
99
- /**
100
- * Focus the terminal identified by the location
101
- */
102
- async focusTerminal(location: TerminalLocation): Promise<boolean> {
103
- this.debug?.(`focusTerminal: focusing ${location.type} (identifier=${location.identifier}, tty=${location.tty})`);
104
- let success = false;
105
- try {
106
- switch (location.type) {
107
- case TerminalType.TMUX:
108
- success = await this.focusTmuxPane(location.identifier);
109
- break;
110
- case TerminalType.WEZTERM:
111
- success = await this.focusWeztermPane(location.identifier);
112
- break;
113
- case TerminalType.ITERM2:
114
- success = await this.focusITerm2Session(location.tty);
115
- break;
116
- case TerminalType.TERMINAL_APP:
117
- success = await this.focusTerminalAppWindow(location.tty);
118
- break;
119
- default:
120
- success = false;
121
- }
122
- } catch {
123
- success = false;
124
- }
125
- this.debug?.(`focusTerminal: ${success ? 'succeeded' : 'failed'} for ${location.type}`);
126
- return success;
90
+ // 5. Fallback: we know the TTY but not the emulator wrapper
91
+ this.debug?.("findTerminal: no emulator matched; returning UNKNOWN");
92
+ return {
93
+ type: TerminalType.UNKNOWN,
94
+ identifier: "",
95
+ tty: fullTty,
96
+ };
97
+ }
98
+
99
+ /**
100
+ * Focus the terminal identified by the location
101
+ */
102
+ async focusTerminal(location: TerminalLocation): Promise<boolean> {
103
+ this.debug?.(
104
+ `focusTerminal: focusing ${location.type} (identifier=${location.identifier}, tty=${location.tty})`,
105
+ );
106
+ let success = false;
107
+ try {
108
+ switch (location.type) {
109
+ case TerminalType.TMUX:
110
+ success = await this.focusTmuxPane(location.identifier);
111
+ break;
112
+ case TerminalType.WEZTERM:
113
+ success = await this.focusWeztermPane(location.identifier);
114
+ break;
115
+ case TerminalType.ITERM2:
116
+ success = await this.focusITerm2Session(location.tty);
117
+ break;
118
+ case TerminalType.TERMINAL_APP:
119
+ success = await this.focusTerminalAppWindow(location.tty);
120
+ break;
121
+ default:
122
+ success = false;
123
+ }
124
+ } catch {
125
+ success = false;
127
126
  }
127
+ this.debug?.(`focusTerminal: ${success ? "succeeded" : "failed"} for ${location.type}`);
128
+ return success;
129
+ }
128
130
 
129
- private async findWeztermPane(tty: string): Promise<TerminalLocation | null> {
130
- try {
131
- const { stdout } = await execFileAsync('wezterm', [
132
- 'cli', 'list', '--format', 'json',
133
- ]);
131
+ private async findWeztermPane(tty: string): Promise<TerminalLocation | null> {
132
+ try {
133
+ const { stdout } = await execFileAsync("wezterm", ["cli", "list", "--format", "json"]);
134
134
 
135
- const panes = JSON.parse(stdout) as WeztermPaneEntry[];
136
- if (!Array.isArray(panes)) return null;
135
+ const panes = JSON.parse(stdout) as WeztermPaneEntry[];
136
+ if (!Array.isArray(panes)) return null;
137
137
 
138
- for (const pane of panes) {
139
- if (
140
- pane &&
141
- typeof pane.tty_name === 'string' &&
142
- pane.tty_name === tty &&
143
- pane.pane_id != null
144
- ) {
145
- return {
146
- type: TerminalType.WEZTERM,
147
- identifier: String(pane.pane_id),
148
- tty,
149
- };
150
- }
151
- }
152
- } catch {
153
- // wezterm not installed, not running, or returned invalid JSON
138
+ for (const pane of panes) {
139
+ if (
140
+ pane &&
141
+ typeof pane.tty_name === "string" &&
142
+ pane.tty_name === tty &&
143
+ pane.pane_id != null
144
+ ) {
145
+ return {
146
+ type: TerminalType.WEZTERM,
147
+ identifier: String(pane.pane_id),
148
+ tty,
149
+ };
154
150
  }
155
- return null;
151
+ }
152
+ } catch {
153
+ // wezterm not installed, not running, or returned invalid JSON
156
154
  }
155
+ return null;
156
+ }
157
157
 
158
- private async focusWeztermPane(paneId: string): Promise<boolean> {
159
- try {
160
- await execFileAsync('wezterm', ['cli', 'activate-pane', '--pane-id', paneId]);
161
- return true;
162
- } catch {
163
- return false;
164
- }
158
+ private async focusWeztermPane(paneId: string): Promise<boolean> {
159
+ try {
160
+ await execFileAsync("wezterm", ["cli", "activate-pane", "--pane-id", paneId]);
161
+ return true;
162
+ } catch {
163
+ return false;
165
164
  }
165
+ }
166
166
 
167
- private async findTmuxPane(tty: string): Promise<TerminalLocation | null> {
168
- try {
169
- const { stdout } = await execFileAsync('tmux', [
170
- 'list-panes', '-a', '-F', '#{pane_tty}|#{session_name}:#{window_index}.#{pane_index}'
171
- ]);
167
+ private async findTmuxPane(tty: string): Promise<TerminalLocation | null> {
168
+ try {
169
+ const { stdout } = await execFileAsync("tmux", [
170
+ "list-panes",
171
+ "-a",
172
+ "-F",
173
+ "#{pane_tty}|#{session_name}:#{window_index}.#{pane_index}",
174
+ ]);
172
175
 
173
- const lines = stdout.trim().split('\n');
174
- for (const line of lines) {
175
- if (!line.trim()) continue;
176
- const [paneTty, identifier] = line.split('|');
177
- if (paneTty === tty && identifier) {
178
- return {
179
- type: TerminalType.TMUX,
180
- identifier,
181
- tty
182
- };
183
- }
184
- }
185
- } catch {
186
- // tmux might not be installed or running
176
+ const lines = stdout.trim().split("\n");
177
+ for (const line of lines) {
178
+ if (!line.trim()) continue;
179
+ const [paneTty, identifier] = line.split("|");
180
+ if (paneTty === tty && identifier) {
181
+ return {
182
+ type: TerminalType.TMUX,
183
+ identifier,
184
+ tty,
185
+ };
187
186
  }
188
- return null;
187
+ }
188
+ } catch {
189
+ // tmux might not be installed or running
189
190
  }
191
+ return null;
192
+ }
190
193
 
191
- private async findITerm2Session(tty: string): Promise<TerminalLocation | null> {
192
- try {
193
- // Check if iTerm2 is running first to avoid launching it.
194
- if (!await this.isProcessRunning('iTerm2')) return null;
195
- } catch {
196
- return null;
197
- }
194
+ private async findITerm2Session(tty: string): Promise<TerminalLocation | null> {
195
+ try {
196
+ // Check if iTerm2 is running first to avoid launching it.
197
+ if (!(await this.isProcessRunning("iTerm2"))) return null;
198
+ } catch {
199
+ return null;
200
+ }
198
201
 
199
- try {
200
- const escapedTty = escapeAppleScript(tty);
201
- const script = `
202
+ try {
203
+ const escapedTty = escapeAppleScript(tty);
204
+ const script = `
202
205
  tell application "iTerm"
203
206
  repeat with w in windows
204
207
  repeat with t in tabs of w
@@ -212,31 +215,31 @@ export class TerminalFocusManager {
212
215
  end tell
213
216
  `;
214
217
 
215
- const { stdout } = await execFileAsync('osascript', ['-e', script]);
216
- if (stdout.trim() === "found") {
217
- return {
218
- type: TerminalType.ITERM2,
219
- identifier: tty,
220
- tty
221
- };
222
- }
223
- } catch {
224
- // iTerm2 script failed
225
- }
226
- return null;
218
+ const { stdout } = await execFileAsync("osascript", ["-e", script]);
219
+ if (stdout.trim() === "found") {
220
+ return {
221
+ type: TerminalType.ITERM2,
222
+ identifier: tty,
223
+ tty,
224
+ };
225
+ }
226
+ } catch {
227
+ // iTerm2 script failed
227
228
  }
229
+ return null;
230
+ }
228
231
 
229
- private async findTerminalAppWindow(tty: string): Promise<TerminalLocation | null> {
230
- try {
231
- // Check if Terminal.app is running
232
- if (!await this.isProcessRunning('Terminal')) return null;
233
- } catch {
234
- return null;
235
- }
232
+ private async findTerminalAppWindow(tty: string): Promise<TerminalLocation | null> {
233
+ try {
234
+ // Check if Terminal.app is running
235
+ if (!(await this.isProcessRunning("Terminal"))) return null;
236
+ } catch {
237
+ return null;
238
+ }
236
239
 
237
- try {
238
- const escapedTty = escapeAppleScript(tty);
239
- const script = `
240
+ try {
241
+ const escapedTty = escapeAppleScript(tty);
242
+ const script = `
240
243
  tell application "Terminal"
241
244
  repeat with w in windows
242
245
  repeat with t in tabs of w
@@ -248,40 +251,40 @@ export class TerminalFocusManager {
248
251
  end tell
249
252
  `;
250
253
 
251
- const { stdout } = await execFileAsync('osascript', ['-e', script]);
252
- if (stdout.trim() === "found") {
253
- return {
254
- type: TerminalType.TERMINAL_APP,
255
- identifier: tty,
256
- tty
257
- };
258
- }
259
- } catch {
260
- // Terminal.app script failed
261
- }
262
- return null;
254
+ const { stdout } = await execFileAsync("osascript", ["-e", script]);
255
+ if (stdout.trim() === "found") {
256
+ return {
257
+ type: TerminalType.TERMINAL_APP,
258
+ identifier: tty,
259
+ tty,
260
+ };
261
+ }
262
+ } catch {
263
+ // Terminal.app script failed
263
264
  }
265
+ return null;
266
+ }
264
267
 
265
- private async isProcessRunning(name: string): Promise<boolean> {
266
- const { stdout } = await execFileAsync('ps', ['-Axo', 'comm']);
267
- return stdout
268
- .split('\n')
269
- .map((line) => line.trim())
270
- .some((command) => command === name || command.endsWith(`/${name}`));
271
- }
268
+ private async isProcessRunning(name: string): Promise<boolean> {
269
+ const { stdout } = await execFileAsync("ps", ["-Axo", "comm"]);
270
+ return stdout
271
+ .split("\n")
272
+ .map((line) => line.trim())
273
+ .some((command) => command === name || command.endsWith(`/${name}`));
274
+ }
272
275
 
273
- private async focusTmuxPane(identifier: string): Promise<boolean> {
274
- try {
275
- await execFileAsync('tmux', ['switch-client', '-t', identifier]);
276
- return true;
277
- } catch {
278
- return false;
279
- }
276
+ private async focusTmuxPane(identifier: string): Promise<boolean> {
277
+ try {
278
+ await execFileAsync("tmux", ["switch-client", "-t", identifier]);
279
+ return true;
280
+ } catch {
281
+ return false;
280
282
  }
283
+ }
281
284
 
282
- private async focusITerm2Session(tty: string): Promise<boolean> {
283
- const escapedTty = escapeAppleScript(tty);
284
- const script = `
285
+ private async focusITerm2Session(tty: string): Promise<boolean> {
286
+ const escapedTty = escapeAppleScript(tty);
287
+ const script = `
285
288
  tell application "iTerm"
286
289
  activate
287
290
  repeat with w in windows
@@ -296,13 +299,13 @@ export class TerminalFocusManager {
296
299
  end repeat
297
300
  end tell
298
301
  `;
299
- const { stdout } = await execFileAsync('osascript', ['-e', script]);
300
- return stdout.trim() === "true";
301
- }
302
+ const { stdout } = await execFileAsync("osascript", ["-e", script]);
303
+ return stdout.trim() === "true";
304
+ }
302
305
 
303
- private async focusTerminalAppWindow(tty: string): Promise<boolean> {
304
- const escapedTty = escapeAppleScript(tty);
305
- const script = `
306
+ private async focusTerminalAppWindow(tty: string): Promise<boolean> {
307
+ const escapedTty = escapeAppleScript(tty);
308
+ const script = `
306
309
  tell application "Terminal"
307
310
  activate
308
311
  repeat with w in windows
@@ -316,7 +319,7 @@ export class TerminalFocusManager {
316
319
  end repeat
317
320
  end tell
318
321
  `;
319
- const { stdout } = await execFileAsync('osascript', ['-e', script]);
320
- return stdout.trim() === "true";
321
- }
322
+ const { stdout } = await execFileAsync("osascript", ["-e", script]);
323
+ return stdout.trim() === "true";
324
+ }
322
325
  }