@ai-devkit/agent-manager 0.36.0 → 0.38.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 (1046) hide show
  1. package/dist/AgentManager.d.ts +9 -8
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +23 -4
  4. package/dist/AgentManager.js.map +1 -1
  5. package/dist/__tests__/AgentManager.test.js +151 -3
  6. package/dist/__tests__/AgentManager.test.js.map +1 -1
  7. package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js +486 -0
  8. package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js.map +1 -0
  9. package/dist/__tests__/adapters/adapterProcessImports.test.js +52 -0
  10. package/dist/__tests__/adapters/adapterProcessImports.test.js.map +1 -0
  11. package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js +247 -0
  12. package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js.map +1 -0
  13. package/dist/__tests__/capacity/anthropic.test.js +115 -0
  14. package/dist/__tests__/capacity/anthropic.test.js.map +1 -0
  15. package/dist/__tests__/capacity/boundaries.test.js +45 -0
  16. package/dist/__tests__/capacity/boundaries.test.js.map +1 -0
  17. package/dist/__tests__/capacity/claude.test.js +3 -3
  18. package/dist/__tests__/capacity/claude.test.js.map +1 -1
  19. package/dist/__tests__/capacity/codex.test.js +3 -1
  20. package/dist/__tests__/capacity/codex.test.js.map +1 -1
  21. package/dist/__tests__/capacity/openai.test.js +32 -25
  22. package/dist/__tests__/capacity/openai.test.js.map +1 -1
  23. package/dist/__tests__/capacity/wham.test.js +1 -1
  24. package/dist/__tests__/capacity/wham.test.js.map +1 -1
  25. package/dist/__tests__/capacity/zai.test.js +7 -8
  26. package/dist/__tests__/capacity/zai.test.js.map +1 -1
  27. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js +568 -0
  28. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js.map +1 -0
  29. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js +1089 -0
  30. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js.map +1 -0
  31. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js +143 -0
  32. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js.map +1 -0
  33. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js +462 -0
  34. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js.map +1 -0
  35. package/dist/__tests__/harnesses/builtinAdapters.test.js +33 -0
  36. package/dist/__tests__/harnesses/builtinAdapters.test.js.map +1 -0
  37. package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js +79 -0
  38. package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js.map +1 -0
  39. package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js +1881 -0
  40. package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js.map +1 -0
  41. package/dist/__tests__/harnesses/claude/ClaudeSessionLocator.test.js +425 -0
  42. package/dist/__tests__/harnesses/claude/ClaudeSessionLocator.test.js.map +1 -0
  43. package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js +314 -0
  44. package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js.map +1 -0
  45. package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js +49 -0
  46. package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js.map +1 -0
  47. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js +76 -0
  48. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -0
  49. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js +173 -0
  50. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js.map +1 -0
  51. package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js +181 -0
  52. package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -0
  53. package/dist/__tests__/harnesses/codex/CodexAdapter.test.js +685 -0
  54. package/dist/__tests__/harnesses/codex/CodexAdapter.test.js.map +1 -0
  55. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js +463 -0
  56. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js.map +1 -0
  57. package/dist/__tests__/harnesses/codex/CodexSessionMapping.test.js +86 -0
  58. package/dist/__tests__/harnesses/codex/CodexSessionMapping.test.js.map +1 -0
  59. package/dist/__tests__/harnesses/codex/CodexSessionParser.test.js +254 -0
  60. package/dist/__tests__/harnesses/codex/CodexSessionParser.test.js.map +1 -0
  61. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js +121 -0
  62. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -0
  63. package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js +84 -0
  64. package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js.map +1 -0
  65. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js +128 -0
  66. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -0
  67. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js +246 -0
  68. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -0
  69. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js +384 -0
  70. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -0
  71. package/dist/__tests__/harnesses/copilot/CopilotAdapter.test.js +659 -0
  72. package/dist/__tests__/harnesses/copilot/CopilotAdapter.test.js.map +1 -0
  73. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js +290 -0
  74. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js.map +1 -0
  75. package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js +1443 -0
  76. package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js.map +1 -0
  77. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js +491 -0
  78. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js.map +1 -0
  79. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js +399 -0
  80. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js.map +1 -0
  81. package/dist/__tests__/harnesses/grok/GrokAgentMapper.test.js +56 -0
  82. package/dist/__tests__/harnesses/grok/GrokAgentMapper.test.js.map +1 -0
  83. package/dist/__tests__/harnesses/grok/GrokCliAdapter.test.js +421 -0
  84. package/dist/__tests__/harnesses/grok/GrokCliAdapter.test.js.map +1 -0
  85. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js +167 -0
  86. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js.map +1 -0
  87. package/dist/__tests__/harnesses/grok/GrokSessionLocator.test.js +133 -0
  88. package/dist/__tests__/harnesses/grok/GrokSessionLocator.test.js.map +1 -0
  89. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js +301 -0
  90. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js.map +1 -0
  91. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js +662 -0
  92. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js.map +1 -0
  93. package/dist/__tests__/harnesses/opencode/OpenCodeAdapter.test.js +213 -0
  94. package/dist/__tests__/harnesses/opencode/OpenCodeAdapter.test.js.map +1 -0
  95. package/dist/__tests__/harnesses/opencode/OpenCodeAgentMapper.test.js +89 -0
  96. package/dist/__tests__/harnesses/opencode/OpenCodeAgentMapper.test.js.map +1 -0
  97. package/dist/__tests__/harnesses/opencode/OpenCodeSessionLocator.test.js +94 -0
  98. package/dist/__tests__/harnesses/opencode/OpenCodeSessionLocator.test.js.map +1 -0
  99. package/dist/__tests__/harnesses/opencode/OpenCodeSessionParser.test.js +147 -0
  100. package/dist/__tests__/harnesses/opencode/OpenCodeSessionParser.test.js.map +1 -0
  101. package/dist/__tests__/harnesses/pi/PiAdapter.test.js +367 -0
  102. package/dist/__tests__/harnesses/pi/PiAdapter.test.js.map +1 -0
  103. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js +382 -0
  104. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js.map +1 -0
  105. package/dist/__tests__/harnesses/pi/PiSessionParser.test.js +416 -0
  106. package/dist/__tests__/harnesses/pi/PiSessionParser.test.js.map +1 -0
  107. package/dist/__tests__/harnesses/pi/PiSessionTracker.test.js +108 -0
  108. package/dist/__tests__/harnesses/pi/PiSessionTracker.test.js.map +1 -0
  109. package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js +70 -0
  110. package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js.map +1 -0
  111. package/dist/__tests__/harnesses/pi/durable/PiDurableAgentRepository.test.js.map +1 -0
  112. package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js +192 -0
  113. package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js.map +1 -0
  114. package/dist/__tests__/harnesses/pi/durable/PiPrintProtocol.test.js +119 -0
  115. package/dist/__tests__/harnesses/pi/durable/PiPrintProtocol.test.js.map +1 -0
  116. package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js +382 -0
  117. package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js.map +1 -0
  118. package/dist/__tests__/harnesses/pi/durable/PiStreamParser.test.js +34 -0
  119. package/dist/__tests__/harnesses/pi/durable/PiStreamParser.test.js.map +1 -0
  120. package/dist/__tests__/harnesses/readiness/AgentReadiness.test.js +342 -0
  121. package/dist/__tests__/harnesses/readiness/AgentReadiness.test.js.map +1 -0
  122. package/dist/__tests__/harnesses/runtimeProfiles.test.js +89 -0
  123. package/dist/__tests__/harnesses/runtimeProfiles.test.js.map +1 -0
  124. package/dist/__tests__/print/DurableAgent.test.js +4 -6
  125. package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
  126. package/dist/__tests__/print/DurableAgentRepository.test.js +1 -12
  127. package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
  128. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +49 -0
  129. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
  130. package/dist/__tests__/terminal/TmuxManager.test.js +1 -1
  131. package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
  132. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js +650 -0
  133. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js.map +1 -0
  134. package/dist/__tests__/utils/conversationTail.bench.test.js +258 -0
  135. package/dist/__tests__/utils/conversationTail.bench.test.js.map +1 -0
  136. package/dist/__tests__/utils/conversationTailParity.test.js +588 -0
  137. package/dist/__tests__/utils/conversationTailParity.test.js.map +1 -0
  138. package/dist/__tests__/utils/jsonlTail.test.js +360 -0
  139. package/dist/__tests__/utils/jsonlTail.test.js.map +1 -0
  140. package/dist/__tests__/utils/matchingConstants.test.js +35 -0
  141. package/dist/__tests__/utils/matchingConstants.test.js.map +1 -0
  142. package/dist/__tests__/utils/process.test.js +436 -2
  143. package/dist/__tests__/utils/process.test.js.map +1 -1
  144. package/dist/adapters/AgentAdapter.d.ts +25 -6
  145. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  146. package/dist/adapters/AgentAdapter.js +12 -3
  147. package/dist/adapters/AgentAdapter.js.map +1 -1
  148. package/dist/capacity/index.d.ts +9 -19
  149. package/dist/capacity/index.d.ts.map +1 -1
  150. package/dist/capacity/index.js +11 -4
  151. package/dist/capacity/index.js.map +1 -1
  152. package/dist/capacity/providers/anthropic.d.ts +9 -0
  153. package/dist/capacity/providers/anthropic.d.ts.map +1 -0
  154. package/dist/capacity/providers/anthropic.js +153 -0
  155. package/dist/capacity/providers/anthropic.js.map +1 -0
  156. package/dist/capacity/providers/openai-platform.d.ts +14 -0
  157. package/dist/capacity/providers/openai-platform.d.ts.map +1 -0
  158. package/dist/capacity/providers/openai-platform.js +120 -0
  159. package/dist/capacity/providers/openai-platform.js.map +1 -0
  160. package/dist/capacity/providers/openai-subscription.d.ts +20 -0
  161. package/dist/capacity/providers/openai-subscription.d.ts.map +1 -0
  162. package/dist/capacity/providers/openai-subscription.js +129 -0
  163. package/dist/capacity/providers/openai-subscription.js.map +1 -0
  164. package/dist/capacity/providers/zai.d.ts +8 -0
  165. package/dist/capacity/providers/zai.d.ts.map +1 -0
  166. package/dist/capacity/providers/zai.js +158 -0
  167. package/dist/capacity/providers/zai.js.map +1 -0
  168. package/dist/capacity/sources/claude.d.ts +9 -0
  169. package/dist/capacity/sources/claude.d.ts.map +1 -0
  170. package/dist/capacity/sources/claude.js +17 -0
  171. package/dist/capacity/sources/claude.js.map +1 -0
  172. package/dist/capacity/sources/codex.d.ts +32 -0
  173. package/dist/capacity/sources/codex.d.ts.map +1 -0
  174. package/dist/capacity/sources/codex.js +227 -0
  175. package/dist/capacity/sources/codex.js.map +1 -0
  176. package/dist/capacity/sources/pi.d.ts +30 -0
  177. package/dist/capacity/sources/pi.d.ts.map +1 -0
  178. package/dist/capacity/sources/pi.js +81 -0
  179. package/dist/capacity/sources/pi.js.map +1 -0
  180. package/dist/capacity/types.d.ts +2 -0
  181. package/dist/capacity/types.d.ts.map +1 -1
  182. package/dist/capacity/types.js +1 -1
  183. package/dist/capacity/types.js.map +1 -1
  184. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts +13 -0
  185. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts.map +1 -0
  186. package/dist/harnesses/antigravity/AntigravityAgentMapper.js +30 -0
  187. package/dist/harnesses/antigravity/AntigravityAgentMapper.js.map +1 -0
  188. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts +32 -0
  189. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts.map +1 -0
  190. package/dist/harnesses/antigravity/AntigravityCliAdapter.js +97 -0
  191. package/dist/harnesses/antigravity/AntigravityCliAdapter.js.map +1 -0
  192. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts +30 -0
  193. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts.map +1 -0
  194. package/dist/harnesses/antigravity/AntigravitySessionLocator.js +56 -0
  195. package/dist/harnesses/antigravity/AntigravitySessionLocator.js.map +1 -0
  196. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts +75 -0
  197. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts.map +1 -0
  198. package/dist/harnesses/antigravity/AntigravitySessionParser.js +174 -0
  199. package/dist/harnesses/antigravity/AntigravitySessionParser.js.map +1 -0
  200. package/dist/harnesses/claude/ClaudeAgentMapper.d.ts.map +1 -0
  201. package/dist/harnesses/claude/ClaudeAgentMapper.js +36 -0
  202. package/dist/harnesses/claude/ClaudeAgentMapper.js.map +1 -0
  203. package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts +30 -0
  204. package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts.map +1 -0
  205. package/dist/harnesses/claude/ClaudeCodeAdapter.js +134 -0
  206. package/dist/harnesses/claude/ClaudeCodeAdapter.js.map +1 -0
  207. package/dist/harnesses/claude/ClaudeSessionLocator.d.ts.map +1 -0
  208. package/dist/harnesses/claude/ClaudeSessionLocator.js +260 -0
  209. package/dist/harnesses/claude/ClaudeSessionLocator.js.map +1 -0
  210. package/dist/harnesses/claude/ClaudeSessionParser.d.ts +148 -0
  211. package/dist/harnesses/claude/ClaudeSessionParser.d.ts.map +1 -0
  212. package/dist/harnesses/claude/ClaudeSessionParser.js +365 -0
  213. package/dist/harnesses/claude/ClaudeSessionParser.js.map +1 -0
  214. package/dist/harnesses/claude/credentials.d.ts +10 -0
  215. package/dist/harnesses/claude/credentials.d.ts.map +1 -0
  216. package/dist/harnesses/claude/credentials.js +112 -0
  217. package/dist/harnesses/claude/credentials.js.map +1 -0
  218. package/dist/harnesses/claude/durable/ClaudeCliProbe.d.ts.map +1 -0
  219. package/dist/harnesses/claude/durable/ClaudeCliProbe.js.map +1 -0
  220. package/dist/harnesses/claude/durable/ClaudePrintAgentService.d.ts.map +1 -0
  221. package/dist/harnesses/claude/durable/ClaudePrintAgentService.js.map +1 -0
  222. package/dist/harnesses/claude/durable/ClaudePrintRunner.d.ts.map +1 -0
  223. package/dist/harnesses/claude/durable/ClaudePrintRunner.js.map +1 -0
  224. package/dist/harnesses/claude/durable/ClaudeStreamParser.d.ts.map +1 -0
  225. package/dist/harnesses/claude/durable/ClaudeStreamParser.js.map +1 -0
  226. package/dist/harnesses/claude/readiness.d.ts +3 -0
  227. package/dist/harnesses/claude/readiness.d.ts.map +1 -0
  228. package/dist/harnesses/claude/readiness.js +63 -0
  229. package/dist/harnesses/claude/readiness.js.map +1 -0
  230. package/dist/harnesses/codex/CodexAdapter.d.ts +29 -0
  231. package/dist/harnesses/codex/CodexAdapter.d.ts.map +1 -0
  232. package/dist/harnesses/codex/CodexAdapter.js +290 -0
  233. package/dist/harnesses/codex/CodexAdapter.js.map +1 -0
  234. package/dist/harnesses/codex/CodexAgentMapper.d.ts.map +1 -0
  235. package/dist/harnesses/codex/CodexAgentMapper.js +28 -0
  236. package/dist/harnesses/codex/CodexAgentMapper.js.map +1 -0
  237. package/dist/harnesses/codex/CodexSessionLocator.d.ts +74 -0
  238. package/dist/harnesses/codex/CodexSessionLocator.d.ts.map +1 -0
  239. package/dist/harnesses/codex/CodexSessionLocator.js +359 -0
  240. package/dist/harnesses/codex/CodexSessionLocator.js.map +1 -0
  241. package/dist/harnesses/codex/CodexSessionMapping.d.ts.map +1 -0
  242. package/dist/harnesses/codex/CodexSessionMapping.js +68 -0
  243. package/dist/harnesses/codex/CodexSessionMapping.js.map +1 -0
  244. package/dist/harnesses/codex/CodexSessionParser.d.ts +89 -0
  245. package/dist/harnesses/codex/CodexSessionParser.d.ts.map +1 -0
  246. package/dist/harnesses/codex/CodexSessionParser.js +308 -0
  247. package/dist/harnesses/codex/CodexSessionParser.js.map +1 -0
  248. package/dist/harnesses/codex/credentials.d.ts +15 -0
  249. package/dist/harnesses/codex/credentials.d.ts.map +1 -0
  250. package/dist/harnesses/codex/credentials.js +58 -0
  251. package/dist/harnesses/codex/credentials.js.map +1 -0
  252. package/dist/harnesses/codex/durable/CodexCliProbe.d.ts.map +1 -0
  253. package/dist/harnesses/codex/durable/CodexCliProbe.js.map +1 -0
  254. package/dist/harnesses/codex/durable/CodexPrintAgentService.d.ts.map +1 -0
  255. package/dist/harnesses/codex/durable/CodexPrintAgentService.js.map +1 -0
  256. package/dist/harnesses/codex/durable/CodexPrintRunner.d.ts.map +1 -0
  257. package/dist/harnesses/codex/durable/CodexPrintRunner.js.map +1 -0
  258. package/dist/harnesses/codex/durable/CodexStreamParser.d.ts.map +1 -0
  259. package/dist/harnesses/codex/durable/CodexStreamParser.js.map +1 -0
  260. package/dist/harnesses/codex/readiness.d.ts +3 -0
  261. package/dist/harnesses/codex/readiness.d.ts.map +1 -0
  262. package/dist/harnesses/codex/readiness.js +60 -0
  263. package/dist/harnesses/codex/readiness.js.map +1 -0
  264. package/dist/harnesses/copilot/CopilotAdapter.d.ts +36 -0
  265. package/dist/harnesses/copilot/CopilotAdapter.d.ts.map +1 -0
  266. package/dist/harnesses/copilot/CopilotAdapter.js +128 -0
  267. package/dist/harnesses/copilot/CopilotAdapter.js.map +1 -0
  268. package/dist/harnesses/copilot/CopilotAgentMapper.d.ts.map +1 -0
  269. package/dist/harnesses/copilot/CopilotAgentMapper.js +30 -0
  270. package/dist/harnesses/copilot/CopilotAgentMapper.js.map +1 -0
  271. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts +42 -0
  272. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts.map +1 -0
  273. package/dist/harnesses/copilot/CopilotSessionLocator.js +126 -0
  274. package/dist/harnesses/copilot/CopilotSessionLocator.js.map +1 -0
  275. package/dist/harnesses/copilot/CopilotSessionParser.d.ts +62 -0
  276. package/dist/harnesses/copilot/CopilotSessionParser.d.ts.map +1 -0
  277. package/dist/harnesses/copilot/CopilotSessionParser.js +236 -0
  278. package/dist/harnesses/copilot/CopilotSessionParser.js.map +1 -0
  279. package/dist/harnesses/copilot/readiness.d.ts +3 -0
  280. package/dist/harnesses/copilot/readiness.d.ts.map +1 -0
  281. package/dist/harnesses/copilot/readiness.js +39 -0
  282. package/dist/harnesses/copilot/readiness.js.map +1 -0
  283. package/dist/harnesses/gemini/GeminiAgentMapper.d.ts.map +1 -0
  284. package/dist/harnesses/gemini/GeminiAgentMapper.js +30 -0
  285. package/dist/harnesses/gemini/GeminiAgentMapper.js.map +1 -0
  286. package/dist/harnesses/gemini/GeminiCliAdapter.d.ts +52 -0
  287. package/dist/harnesses/gemini/GeminiCliAdapter.d.ts.map +1 -0
  288. package/dist/harnesses/gemini/GeminiCliAdapter.js +196 -0
  289. package/dist/harnesses/gemini/GeminiCliAdapter.js.map +1 -0
  290. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts +72 -0
  291. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts.map +1 -0
  292. package/dist/harnesses/gemini/GeminiSessionLocator.js +300 -0
  293. package/dist/harnesses/gemini/GeminiSessionLocator.js.map +1 -0
  294. package/dist/harnesses/gemini/GeminiSessionParser.d.ts +121 -0
  295. package/dist/harnesses/gemini/GeminiSessionParser.d.ts.map +1 -0
  296. package/dist/harnesses/gemini/GeminiSessionParser.js +272 -0
  297. package/dist/harnesses/gemini/GeminiSessionParser.js.map +1 -0
  298. package/dist/harnesses/gemini/fileSignature.d.ts +8 -0
  299. package/dist/harnesses/gemini/fileSignature.d.ts.map +1 -0
  300. package/dist/harnesses/gemini/fileSignature.js +9 -0
  301. package/dist/harnesses/gemini/fileSignature.js.map +1 -0
  302. package/dist/harnesses/grok/GrokAgentMapper.d.ts.map +1 -0
  303. package/dist/harnesses/grok/GrokAgentMapper.js +30 -0
  304. package/dist/harnesses/grok/GrokAgentMapper.js.map +1 -0
  305. package/dist/harnesses/grok/GrokCliAdapter.d.ts +36 -0
  306. package/dist/harnesses/grok/GrokCliAdapter.d.ts.map +1 -0
  307. package/dist/harnesses/grok/GrokCliAdapter.js +102 -0
  308. package/dist/harnesses/grok/GrokCliAdapter.js.map +1 -0
  309. package/dist/harnesses/grok/GrokSessionLocator.d.ts.map +1 -0
  310. package/dist/harnesses/grok/GrokSessionLocator.js +140 -0
  311. package/dist/harnesses/grok/GrokSessionLocator.js.map +1 -0
  312. package/dist/harnesses/grok/GrokSessionParser.d.ts +87 -0
  313. package/dist/harnesses/grok/GrokSessionParser.d.ts.map +1 -0
  314. package/dist/harnesses/grok/GrokSessionParser.js +185 -0
  315. package/dist/harnesses/grok/GrokSessionParser.js.map +1 -0
  316. package/dist/harnesses/index.d.ts +7 -0
  317. package/dist/harnesses/index.d.ts.map +1 -0
  318. package/dist/harnesses/index.js +27 -0
  319. package/dist/harnesses/index.js.map +1 -0
  320. package/dist/harnesses/kiro/KiroAdapter.d.ts +31 -0
  321. package/dist/harnesses/kiro/KiroAdapter.d.ts.map +1 -0
  322. package/dist/harnesses/kiro/KiroAdapter.js +125 -0
  323. package/dist/harnesses/kiro/KiroAdapter.js.map +1 -0
  324. package/dist/harnesses/kiro/KiroAgentMapper.d.ts +13 -0
  325. package/dist/harnesses/kiro/KiroAgentMapper.d.ts.map +1 -0
  326. package/dist/harnesses/kiro/KiroAgentMapper.js +29 -0
  327. package/dist/harnesses/kiro/KiroAgentMapper.js.map +1 -0
  328. package/dist/harnesses/kiro/KiroSessionLocator.d.ts +38 -0
  329. package/dist/harnesses/kiro/KiroSessionLocator.d.ts.map +1 -0
  330. package/dist/harnesses/kiro/KiroSessionLocator.js +95 -0
  331. package/dist/harnesses/kiro/KiroSessionLocator.js.map +1 -0
  332. package/dist/harnesses/kiro/KiroSessionParser.d.ts +81 -0
  333. package/dist/harnesses/kiro/KiroSessionParser.d.ts.map +1 -0
  334. package/dist/harnesses/kiro/KiroSessionParser.js +251 -0
  335. package/dist/harnesses/kiro/KiroSessionParser.js.map +1 -0
  336. package/dist/harnesses/opencode/OpenCodeAdapter.d.ts +29 -0
  337. package/dist/harnesses/opencode/OpenCodeAdapter.d.ts.map +1 -0
  338. package/dist/harnesses/opencode/OpenCodeAdapter.js +86 -0
  339. package/dist/harnesses/opencode/OpenCodeAdapter.js.map +1 -0
  340. package/dist/harnesses/opencode/OpenCodeAgentMapper.d.ts.map +1 -0
  341. package/dist/harnesses/opencode/OpenCodeAgentMapper.js +42 -0
  342. package/dist/harnesses/opencode/OpenCodeAgentMapper.js.map +1 -0
  343. package/dist/harnesses/opencode/OpenCodeSessionLocator.d.ts.map +1 -0
  344. package/dist/harnesses/opencode/OpenCodeSessionLocator.js +118 -0
  345. package/dist/harnesses/opencode/OpenCodeSessionLocator.js.map +1 -0
  346. package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts +16 -0
  347. package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts.map +1 -0
  348. package/dist/harnesses/opencode/OpenCodeSessionParser.js +105 -0
  349. package/dist/harnesses/opencode/OpenCodeSessionParser.js.map +1 -0
  350. package/dist/harnesses/opencode/readiness.d.ts +3 -0
  351. package/dist/harnesses/opencode/readiness.d.ts.map +1 -0
  352. package/dist/harnesses/opencode/readiness.js +50 -0
  353. package/dist/harnesses/opencode/readiness.js.map +1 -0
  354. package/dist/harnesses/pi/PiAdapter.d.ts +30 -0
  355. package/dist/harnesses/pi/PiAdapter.d.ts.map +1 -0
  356. package/dist/harnesses/pi/PiAdapter.js +167 -0
  357. package/dist/harnesses/pi/PiAdapter.js.map +1 -0
  358. package/dist/harnesses/pi/PiAgentMapper.d.ts.map +1 -0
  359. package/dist/harnesses/pi/PiAgentMapper.js +30 -0
  360. package/dist/harnesses/pi/PiAgentMapper.js.map +1 -0
  361. package/dist/harnesses/pi/PiSessionLocator.d.ts +61 -0
  362. package/dist/harnesses/pi/PiSessionLocator.d.ts.map +1 -0
  363. package/dist/harnesses/pi/PiSessionLocator.js +212 -0
  364. package/dist/harnesses/pi/PiSessionLocator.js.map +1 -0
  365. package/dist/harnesses/pi/PiSessionParser.d.ts +88 -0
  366. package/dist/harnesses/pi/PiSessionParser.d.ts.map +1 -0
  367. package/dist/harnesses/pi/PiSessionParser.js +318 -0
  368. package/dist/harnesses/pi/PiSessionParser.js.map +1 -0
  369. package/dist/harnesses/pi/PiSessionTracker.d.ts.map +1 -0
  370. package/dist/harnesses/pi/PiSessionTracker.js +69 -0
  371. package/dist/harnesses/pi/PiSessionTracker.js.map +1 -0
  372. package/dist/harnesses/pi/credentials.d.ts +22 -0
  373. package/dist/harnesses/pi/credentials.d.ts.map +1 -0
  374. package/dist/harnesses/pi/credentials.js +98 -0
  375. package/dist/harnesses/pi/credentials.js.map +1 -0
  376. package/dist/harnesses/pi/durable/PiCliProbe.d.ts.map +1 -0
  377. package/dist/harnesses/pi/durable/PiCliProbe.js.map +1 -0
  378. package/dist/harnesses/pi/durable/PiPrintAgentService.d.ts.map +1 -0
  379. package/dist/harnesses/pi/durable/PiPrintAgentService.js.map +1 -0
  380. package/dist/harnesses/pi/durable/PiPrintProtocol.d.ts.map +1 -0
  381. package/dist/harnesses/pi/durable/PiPrintProtocol.js.map +1 -0
  382. package/dist/harnesses/pi/durable/PiPrintRunner.d.ts.map +1 -0
  383. package/dist/harnesses/pi/durable/PiPrintRunner.js.map +1 -0
  384. package/dist/harnesses/pi/durable/PiStreamParser.d.ts.map +1 -0
  385. package/dist/harnesses/pi/durable/PiStreamParser.js.map +1 -0
  386. package/dist/harnesses/pi/readiness.d.ts +3 -0
  387. package/dist/harnesses/pi/readiness.d.ts.map +1 -0
  388. package/dist/harnesses/pi/readiness.js +96 -0
  389. package/dist/harnesses/pi/readiness.js.map +1 -0
  390. package/dist/harnesses/readiness/AgentReadiness.d.ts +6 -0
  391. package/dist/harnesses/readiness/AgentReadiness.d.ts.map +1 -0
  392. package/dist/harnesses/readiness/AgentReadiness.js +68 -0
  393. package/dist/harnesses/readiness/AgentReadiness.js.map +1 -0
  394. package/dist/harnesses/readiness/checks.d.ts +31 -0
  395. package/dist/harnesses/readiness/checks.d.ts.map +1 -0
  396. package/dist/harnesses/readiness/checks.js +270 -0
  397. package/dist/harnesses/readiness/checks.js.map +1 -0
  398. package/dist/harnesses/readiness/types.d.ts +76 -0
  399. package/dist/harnesses/readiness/types.d.ts.map +1 -0
  400. package/dist/harnesses/readiness/types.js +4 -0
  401. package/dist/harnesses/readiness/types.js.map +1 -0
  402. package/dist/harnesses/runtimeProfiles.d.ts +11 -0
  403. package/dist/harnesses/runtimeProfiles.d.ts.map +1 -0
  404. package/dist/harnesses/runtimeProfiles.js +99 -0
  405. package/dist/harnesses/runtimeProfiles.js.map +1 -0
  406. package/dist/harnesses/shared.d.ts +41 -0
  407. package/dist/harnesses/shared.d.ts.map +1 -0
  408. package/dist/harnesses/shared.js +71 -0
  409. package/dist/harnesses/shared.js.map +1 -0
  410. package/dist/index.d.ts +21 -46
  411. package/dist/index.d.ts.map +1 -1
  412. package/dist/index.js +14 -27
  413. package/dist/index.js.map +1 -1
  414. package/dist/runtime/ManagedAgentRuntime.d.ts +3 -3
  415. package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -1
  416. package/dist/runtime/ManagedAgentRuntime.js +6 -20
  417. package/dist/runtime/ManagedAgentRuntime.js.map +1 -1
  418. package/dist/runtime/herdr/HerdrAgentDiscovery.d.ts.map +1 -1
  419. package/dist/runtime/herdr/HerdrAgentDiscovery.js +2 -43
  420. package/dist/runtime/herdr/HerdrAgentDiscovery.js.map +1 -1
  421. package/dist/runtime/tmux/PidPolling.d.ts +1 -1
  422. package/dist/runtime/tmux/PidPolling.d.ts.map +1 -1
  423. package/dist/runtime/tmux/PidPolling.js.map +1 -1
  424. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +1 -1
  425. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -1
  426. package/dist/runtime/tmux/TmuxAgentRuntime.js +1 -1
  427. package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -1
  428. package/dist/runtime/tmux/TmuxManager.d.ts +12 -0
  429. package/dist/runtime/tmux/TmuxManager.d.ts.map +1 -0
  430. package/dist/runtime/tmux/TmuxManager.js +116 -0
  431. package/dist/runtime/tmux/TmuxManager.js.map +1 -0
  432. package/dist/runtime/types.d.ts +1 -1
  433. package/dist/runtime/types.d.ts.map +1 -1
  434. package/dist/runtime/types.js.map +1 -1
  435. package/dist/terminal/TerminalFocusManager.d.ts +4 -32
  436. package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
  437. package/dist/terminal/TerminalFocusManager.js +17 -267
  438. package/dist/terminal/TerminalFocusManager.js.map +1 -1
  439. package/dist/terminal/TtyWriter.d.ts +1 -44
  440. package/dist/terminal/TtyWriter.d.ts.map +1 -1
  441. package/dist/terminal/TtyWriter.js +11 -347
  442. package/dist/terminal/TtyWriter.js.map +1 -1
  443. package/dist/terminal/backends/index.d.ts +5 -0
  444. package/dist/terminal/backends/index.d.ts.map +1 -0
  445. package/dist/terminal/backends/index.js +19 -0
  446. package/dist/terminal/backends/index.js.map +1 -0
  447. package/dist/terminal/backends/iterm2.d.ts +3 -0
  448. package/dist/terminal/backends/iterm2.d.ts.map +1 -0
  449. package/dist/terminal/backends/iterm2.js +135 -0
  450. package/dist/terminal/backends/iterm2.js.map +1 -0
  451. package/dist/terminal/backends/shared.d.ts +7 -0
  452. package/dist/terminal/backends/shared.d.ts.map +1 -0
  453. package/dist/terminal/backends/shared.js +35 -0
  454. package/dist/terminal/backends/shared.js.map +1 -0
  455. package/dist/terminal/backends/terminal-app.d.ts +3 -0
  456. package/dist/terminal/backends/terminal-app.d.ts.map +1 -0
  457. package/dist/terminal/backends/terminal-app.js +129 -0
  458. package/dist/terminal/backends/terminal-app.js.map +1 -0
  459. package/dist/terminal/backends/tmux.d.ts +3 -0
  460. package/dist/terminal/backends/tmux.d.ts.map +1 -0
  461. package/dist/terminal/backends/tmux.js +76 -0
  462. package/dist/terminal/backends/tmux.js.map +1 -0
  463. package/dist/terminal/backends/wezterm.d.ts +3 -0
  464. package/dist/terminal/backends/wezterm.d.ts.map +1 -0
  465. package/dist/terminal/backends/wezterm.js +71 -0
  466. package/dist/terminal/backends/wezterm.js.map +1 -0
  467. package/dist/terminal/types.d.ts +21 -0
  468. package/dist/terminal/types.d.ts.map +1 -0
  469. package/dist/terminal/types.js +10 -0
  470. package/dist/terminal/types.js.map +1 -0
  471. package/dist/utils/IncrementalJsonlSummary.d.ts +100 -0
  472. package/dist/utils/IncrementalJsonlSummary.d.ts.map +1 -0
  473. package/dist/utils/IncrementalJsonlSummary.js +209 -0
  474. package/dist/utils/IncrementalJsonlSummary.js.map +1 -0
  475. package/dist/utils/jsonlTail.d.ts +73 -0
  476. package/dist/utils/jsonlTail.d.ts.map +1 -0
  477. package/dist/utils/jsonlTail.js +238 -0
  478. package/dist/utils/jsonlTail.js.map +1 -0
  479. package/dist/utils/matching.d.ts +2 -0
  480. package/dist/utils/matching.d.ts.map +1 -1
  481. package/dist/utils/matching.js +3 -2
  482. package/dist/utils/matching.js.map +1 -1
  483. package/dist/utils/matchingConstants.d.ts +15 -0
  484. package/dist/utils/matchingConstants.d.ts.map +1 -0
  485. package/dist/utils/matchingConstants.js +14 -0
  486. package/dist/utils/matchingConstants.js.map +1 -0
  487. package/dist/utils/process.d.ts +38 -2
  488. package/dist/utils/process.d.ts.map +1 -1
  489. package/dist/utils/process.js +131 -43
  490. package/dist/utils/process.js.map +1 -1
  491. package/package.json +2 -1
  492. package/scripts/benchmark-cold-start.mjs +350 -0
  493. package/src/AgentManager.ts +27 -6
  494. package/src/__tests__/AgentManager.test.ts +141 -3
  495. package/src/__tests__/adapters/IncrementalSessionRefresh.test.ts +437 -0
  496. package/src/__tests__/adapters/adapterProcessImports.test.ts +58 -0
  497. package/src/__tests__/adapters/adapterSnapshotCandidates.test.ts +243 -0
  498. package/src/__tests__/capacity/anthropic.test.ts +105 -0
  499. package/src/__tests__/capacity/boundaries.test.ts +36 -0
  500. package/src/__tests__/capacity/claude.test.ts +3 -8
  501. package/src/__tests__/capacity/codex.test.ts +12 -35
  502. package/src/__tests__/capacity/fixtures/openai-codex-auth.json +1 -1
  503. package/src/__tests__/capacity/openai.test.ts +20 -30
  504. package/src/__tests__/capacity/wham.test.ts +1 -1
  505. package/src/__tests__/capacity/zai.test.ts +27 -62
  506. package/src/__tests__/harnesses/BoundedSummarySkip.test.ts +496 -0
  507. package/src/__tests__/harnesses/SessionSummaryEquivalence.test.ts +726 -0
  508. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.ts +133 -0
  509. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.ts +396 -0
  510. package/src/__tests__/harnesses/builtinAdapters.test.ts +33 -0
  511. package/src/__tests__/harnesses/claude/ClaudeAgentMapper.test.ts +84 -0
  512. package/src/__tests__/harnesses/claude/ClaudeCodeAdapter.test.ts +1793 -0
  513. package/src/__tests__/harnesses/claude/ClaudeSessionLocator.test.ts +423 -0
  514. package/src/__tests__/harnesses/claude/ClaudeSessionParser.test.ts +300 -0
  515. package/src/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.ts +34 -0
  516. package/src/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.ts +61 -0
  517. package/src/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.ts +129 -0
  518. package/src/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.ts +152 -0
  519. package/src/__tests__/harnesses/codex/CodexAdapter.test.ts +652 -0
  520. package/src/__tests__/harnesses/codex/CodexSessionLocator.test.ts +419 -0
  521. package/src/__tests__/harnesses/codex/CodexSessionMapping.test.ts +63 -0
  522. package/src/__tests__/harnesses/codex/CodexSessionParser.test.ts +192 -0
  523. package/src/__tests__/harnesses/codex/durable/CodexCliProbe.test.ts +80 -0
  524. package/src/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.ts +65 -0
  525. package/src/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.ts +104 -0
  526. package/src/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.ts +201 -0
  527. package/src/__tests__/harnesses/codex/durable/CodexPrintRunner.test.ts +299 -0
  528. package/src/__tests__/harnesses/copilot/CopilotAdapter.test.ts +614 -0
  529. package/src/__tests__/harnesses/copilot/CopilotRefreshIO.test.ts +270 -0
  530. package/src/__tests__/harnesses/gemini/GeminiCliAdapter.test.ts +1324 -0
  531. package/src/__tests__/harnesses/gemini/GeminiSessionJsonl.test.ts +402 -0
  532. package/src/__tests__/harnesses/gemini/GeminiSessionLocator.test.ts +396 -0
  533. package/src/__tests__/harnesses/grok/GrokAgentMapper.test.ts +57 -0
  534. package/src/__tests__/harnesses/grok/GrokCliAdapter.test.ts +376 -0
  535. package/src/__tests__/harnesses/grok/GrokIncrementalRefresh.test.ts +170 -0
  536. package/src/__tests__/harnesses/grok/GrokSessionLocator.test.ts +106 -0
  537. package/src/__tests__/harnesses/grok/GrokSessionParser.test.ts +230 -0
  538. package/src/__tests__/harnesses/kiro/KiroAdapter.test.ts +552 -0
  539. package/src/__tests__/harnesses/opencode/OpenCodeAdapter.test.ts +215 -0
  540. package/src/__tests__/harnesses/opencode/OpenCodeAgentMapper.test.ts +83 -0
  541. package/src/__tests__/harnesses/opencode/OpenCodeSessionLocator.test.ts +84 -0
  542. package/src/__tests__/harnesses/opencode/OpenCodeSessionParser.test.ts +148 -0
  543. package/src/__tests__/harnesses/pi/PiAdapter.test.ts +325 -0
  544. package/src/__tests__/harnesses/pi/PiDiscoveryIO.test.ts +337 -0
  545. package/src/__tests__/harnesses/pi/PiSessionParser.test.ts +280 -0
  546. package/src/__tests__/harnesses/pi/PiSessionTracker.test.ts +79 -0
  547. package/src/__tests__/harnesses/pi/durable/PiCliProbe.test.ts +50 -0
  548. package/src/__tests__/harnesses/pi/durable/PiPrintAgentService.test.ts +138 -0
  549. package/src/__tests__/harnesses/pi/durable/PiPrintProtocol.test.ts +71 -0
  550. package/src/__tests__/harnesses/pi/durable/PiPrintRunner.test.ts +252 -0
  551. package/src/__tests__/harnesses/pi/durable/PiStreamParser.test.ts +26 -0
  552. package/src/__tests__/harnesses/readiness/AgentReadiness.test.ts +285 -0
  553. package/src/__tests__/harnesses/runtimeProfiles.test.ts +110 -0
  554. package/src/__tests__/print/DurableAgent.test.ts +4 -13
  555. package/src/__tests__/print/DurableAgentRepository.test.ts +1 -13
  556. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +31 -1
  557. package/src/__tests__/terminal/TmuxManager.test.ts +1 -1
  558. package/src/__tests__/utils/IncrementalJsonlSummary.test.ts +414 -0
  559. package/src/__tests__/utils/conversationTail.bench.test.ts +193 -0
  560. package/src/__tests__/utils/conversationTailParity.test.ts +365 -0
  561. package/src/__tests__/utils/jsonlTail.test.ts +317 -0
  562. package/src/__tests__/utils/matchingConstants.test.ts +40 -0
  563. package/src/__tests__/utils/process.test.ts +254 -0
  564. package/src/adapters/AgentAdapter.ts +37 -14
  565. package/src/capacity/index.ts +29 -23
  566. package/src/capacity/providers/anthropic.ts +198 -0
  567. package/src/capacity/providers/openai-platform.ts +150 -0
  568. package/src/capacity/providers/openai-subscription.ts +162 -0
  569. package/src/capacity/providers/zai.ts +155 -0
  570. package/src/capacity/sources/claude.ts +30 -0
  571. package/src/capacity/sources/codex.ts +262 -0
  572. package/src/capacity/sources/pi.ts +131 -0
  573. package/src/capacity/types.ts +3 -0
  574. package/src/harnesses/antigravity/AntigravityAgentMapper.ts +34 -0
  575. package/src/harnesses/antigravity/AntigravityCliAdapter.ts +126 -0
  576. package/src/harnesses/antigravity/AntigravitySessionLocator.ts +75 -0
  577. package/src/harnesses/antigravity/AntigravitySessionParser.ts +252 -0
  578. package/src/harnesses/claude/ClaudeAgentMapper.ts +55 -0
  579. package/src/harnesses/claude/ClaudeCodeAdapter.ts +175 -0
  580. package/src/harnesses/claude/ClaudeSessionLocator.ts +358 -0
  581. package/src/harnesses/claude/ClaudeSessionParser.ts +524 -0
  582. package/src/harnesses/claude/credentials.ts +122 -0
  583. package/src/harnesses/claude/readiness.ts +69 -0
  584. package/src/harnesses/codex/CodexAdapter.ts +337 -0
  585. package/src/harnesses/codex/CodexAgentMapper.ts +26 -0
  586. package/src/harnesses/codex/CodexSessionLocator.ts +509 -0
  587. package/src/harnesses/codex/CodexSessionMapping.ts +89 -0
  588. package/src/harnesses/codex/CodexSessionParser.ts +462 -0
  589. package/src/harnesses/codex/credentials.ts +81 -0
  590. package/src/harnesses/codex/readiness.ts +72 -0
  591. package/src/harnesses/copilot/CopilotAdapter.ts +161 -0
  592. package/src/harnesses/copilot/CopilotAgentMapper.ts +27 -0
  593. package/src/harnesses/copilot/CopilotSessionLocator.ts +161 -0
  594. package/src/harnesses/copilot/CopilotSessionParser.ts +380 -0
  595. package/src/harnesses/copilot/readiness.ts +33 -0
  596. package/src/harnesses/gemini/GeminiAgentMapper.ts +27 -0
  597. package/src/harnesses/gemini/GeminiCliAdapter.ts +272 -0
  598. package/src/harnesses/gemini/GeminiSessionLocator.ts +394 -0
  599. package/src/harnesses/gemini/GeminiSessionParser.ts +395 -0
  600. package/src/harnesses/gemini/fileSignature.ts +10 -0
  601. package/src/harnesses/grok/GrokAgentMapper.ts +32 -0
  602. package/src/harnesses/grok/GrokCliAdapter.ts +126 -0
  603. package/src/harnesses/grok/GrokSessionLocator.ts +179 -0
  604. package/src/harnesses/grok/GrokSessionParser.ts +251 -0
  605. package/src/harnesses/index.ts +28 -0
  606. package/src/harnesses/kiro/KiroAdapter.ts +143 -0
  607. package/src/harnesses/kiro/KiroAgentMapper.ts +34 -0
  608. package/src/harnesses/kiro/KiroSessionLocator.ts +143 -0
  609. package/src/harnesses/kiro/KiroSessionParser.ts +376 -0
  610. package/src/harnesses/opencode/OpenCodeAdapter.ts +110 -0
  611. package/src/harnesses/opencode/OpenCodeAgentMapper.ts +51 -0
  612. package/src/harnesses/opencode/OpenCodeSessionLocator.ts +151 -0
  613. package/src/harnesses/opencode/OpenCodeSessionParser.ts +146 -0
  614. package/src/harnesses/opencode/readiness.ts +48 -0
  615. package/src/harnesses/pi/PiAdapter.ts +197 -0
  616. package/src/harnesses/pi/PiAgentMapper.ts +27 -0
  617. package/src/harnesses/pi/PiSessionLocator.ts +288 -0
  618. package/src/harnesses/pi/PiSessionParser.ts +488 -0
  619. package/src/harnesses/pi/PiSessionTracker.ts +87 -0
  620. package/src/harnesses/pi/credentials.ts +129 -0
  621. package/src/harnesses/pi/readiness.ts +104 -0
  622. package/src/harnesses/readiness/AgentReadiness.ts +87 -0
  623. package/src/harnesses/readiness/checks.ts +336 -0
  624. package/src/harnesses/readiness/types.ts +90 -0
  625. package/src/harnesses/runtimeProfiles.ts +103 -0
  626. package/src/harnesses/shared.ts +119 -0
  627. package/src/index.ts +20 -131
  628. package/src/runtime/ManagedAgentRuntime.ts +7 -22
  629. package/src/runtime/herdr/HerdrAgentDiscovery.ts +3 -19
  630. package/src/runtime/tmux/PidPolling.ts +1 -1
  631. package/src/runtime/tmux/TmuxAgentRuntime.ts +1 -1
  632. package/src/runtime/tmux/TmuxManager.ts +102 -0
  633. package/src/runtime/types.ts +1 -1
  634. package/src/terminal/TerminalFocusManager.ts +19 -292
  635. package/src/terminal/TtyWriter.ts +16 -336
  636. package/src/terminal/backends/index.ts +21 -0
  637. package/src/terminal/backends/iterm2.ts +126 -0
  638. package/src/terminal/backends/shared.ts +42 -0
  639. package/src/terminal/backends/terminal-app.ts +122 -0
  640. package/src/terminal/backends/tmux.ts +62 -0
  641. package/src/terminal/backends/wezterm.ts +65 -0
  642. package/src/terminal/types.ts +22 -0
  643. package/src/utils/IncrementalJsonlSummary.ts +306 -0
  644. package/src/utils/jsonlTail.ts +349 -0
  645. package/src/utils/matching.ts +3 -3
  646. package/src/utils/matchingConstants.ts +15 -0
  647. package/src/utils/process.ts +189 -45
  648. package/dist/__tests__/adapters/AntigravityCliAdapter.test.js +0 -381
  649. package/dist/__tests__/adapters/AntigravityCliAdapter.test.js.map +0 -1
  650. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +0 -1853
  651. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +0 -1
  652. package/dist/__tests__/adapters/CodexAdapter.test.js +0 -391
  653. package/dist/__tests__/adapters/CodexAdapter.test.js.map +0 -1
  654. package/dist/__tests__/adapters/KiroAdapter.test.js +0 -607
  655. package/dist/__tests__/adapters/KiroAdapter.test.js.map +0 -1
  656. package/dist/__tests__/durable/CodexCliProbe.test.js +0 -129
  657. package/dist/__tests__/durable/CodexCliProbe.test.js.map +0 -1
  658. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +0 -84
  659. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +0 -1
  660. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +0 -126
  661. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +0 -1
  662. package/dist/__tests__/durable/CodexPrintAgentService.test.js +0 -271
  663. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +0 -1
  664. package/dist/__tests__/durable/CodexPrintRunner.test.js +0 -393
  665. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +0 -1
  666. package/dist/__tests__/print/ClaudeCliProbe.test.js +0 -49
  667. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +0 -1
  668. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +0 -75
  669. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +0 -1
  670. package/dist/__tests__/print/ClaudePrintAgentService.test.js +0 -173
  671. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +0 -1
  672. package/dist/__tests__/print/ClaudePrintRunner.test.js +0 -181
  673. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +0 -1
  674. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +0 -79
  675. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +0 -1
  676. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +0 -436
  677. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js.map +0 -1
  678. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +0 -194
  679. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +0 -1
  680. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js +0 -86
  681. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js.map +0 -1
  682. package/dist/__tests__/providers/codex/CodexSessionParser.test.js +0 -254
  683. package/dist/__tests__/providers/codex/CodexSessionParser.test.js.map +0 -1
  684. package/dist/__tests__/providers/copilot/CopilotAdapter.test.js +0 -659
  685. package/dist/__tests__/providers/copilot/CopilotAdapter.test.js.map +0 -1
  686. package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js +0 -1434
  687. package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js.map +0 -1
  688. package/dist/__tests__/providers/grok/GrokAgentMapper.test.js +0 -56
  689. package/dist/__tests__/providers/grok/GrokAgentMapper.test.js.map +0 -1
  690. package/dist/__tests__/providers/grok/GrokCliAdapter.test.js +0 -421
  691. package/dist/__tests__/providers/grok/GrokCliAdapter.test.js.map +0 -1
  692. package/dist/__tests__/providers/grok/GrokSessionLocator.test.js +0 -133
  693. package/dist/__tests__/providers/grok/GrokSessionLocator.test.js.map +0 -1
  694. package/dist/__tests__/providers/opencode/OpenCodeAdapter.test.js +0 -213
  695. package/dist/__tests__/providers/opencode/OpenCodeAdapter.test.js.map +0 -1
  696. package/dist/__tests__/providers/opencode/OpenCodeAgentMapper.test.js +0 -89
  697. package/dist/__tests__/providers/opencode/OpenCodeAgentMapper.test.js.map +0 -1
  698. package/dist/__tests__/providers/opencode/OpenCodeSessionLocator.test.js +0 -94
  699. package/dist/__tests__/providers/opencode/OpenCodeSessionLocator.test.js.map +0 -1
  700. package/dist/__tests__/providers/opencode/OpenCodeSessionParser.test.js +0 -147
  701. package/dist/__tests__/providers/opencode/OpenCodeSessionParser.test.js.map +0 -1
  702. package/dist/__tests__/providers/pi/PiAdapter.test.js +0 -367
  703. package/dist/__tests__/providers/pi/PiAdapter.test.js.map +0 -1
  704. package/dist/__tests__/providers/pi/PiSessionParser.test.js +0 -246
  705. package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +0 -1
  706. package/dist/__tests__/providers/pi/PiSessionTracker.test.js +0 -108
  707. package/dist/__tests__/providers/pi/PiSessionTracker.test.js.map +0 -1
  708. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js +0 -76
  709. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js.map +0 -1
  710. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js.map +0 -1
  711. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js +0 -202
  712. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js.map +0 -1
  713. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js +0 -119
  714. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js.map +0 -1
  715. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js +0 -386
  716. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js.map +0 -1
  717. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js +0 -34
  718. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js.map +0 -1
  719. package/dist/__tests__/readiness/AgentReadiness.test.js +0 -301
  720. package/dist/__tests__/readiness/AgentReadiness.test.js.map +0 -1
  721. package/dist/__tests__/utils/ClaudeSessionParser.test.js +0 -314
  722. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +0 -1
  723. package/dist/__tests__/utils/agents.test.js +0 -29
  724. package/dist/__tests__/utils/agents.test.js.map +0 -1
  725. package/dist/adapters/AntigravityCliAdapter.d.ts +0 -57
  726. package/dist/adapters/AntigravityCliAdapter.d.ts.map +0 -1
  727. package/dist/adapters/AntigravityCliAdapter.js +0 -273
  728. package/dist/adapters/AntigravityCliAdapter.js.map +0 -1
  729. package/dist/adapters/KiroAdapter.d.ts +0 -46
  730. package/dist/adapters/KiroAdapter.d.ts.map +0 -1
  731. package/dist/adapters/KiroAdapter.js +0 -344
  732. package/dist/adapters/KiroAdapter.js.map +0 -1
  733. package/dist/adapters/index.d.ts +0 -12
  734. package/dist/adapters/index.d.ts.map +0 -1
  735. package/dist/adapters/index.js +0 -12
  736. package/dist/adapters/index.js.map +0 -1
  737. package/dist/capacity/claude.d.ts +0 -17
  738. package/dist/capacity/claude.d.ts.map +0 -1
  739. package/dist/capacity/claude.js +0 -271
  740. package/dist/capacity/claude.js.map +0 -1
  741. package/dist/capacity/codex.d.ts +0 -36
  742. package/dist/capacity/codex.d.ts.map +0 -1
  743. package/dist/capacity/codex.js +0 -280
  744. package/dist/capacity/codex.js.map +0 -1
  745. package/dist/capacity/openai.d.ts +0 -48
  746. package/dist/capacity/openai.d.ts.map +0 -1
  747. package/dist/capacity/openai.js +0 -312
  748. package/dist/capacity/openai.js.map +0 -1
  749. package/dist/capacity/wham.d.ts +0 -16
  750. package/dist/capacity/wham.d.ts.map +0 -1
  751. package/dist/capacity/wham.js +0 -66
  752. package/dist/capacity/wham.js.map +0 -1
  753. package/dist/capacity/zai.d.ts +0 -14
  754. package/dist/capacity/zai.d.ts.map +0 -1
  755. package/dist/capacity/zai.js +0 -203
  756. package/dist/capacity/zai.js.map +0 -1
  757. package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +0 -1
  758. package/dist/providers/claude/ClaudeAgentMapper.js +0 -42
  759. package/dist/providers/claude/ClaudeAgentMapper.js.map +0 -1
  760. package/dist/providers/claude/ClaudeCodeAdapter.d.ts +0 -31
  761. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +0 -1
  762. package/dist/providers/claude/ClaudeCodeAdapter.js +0 -132
  763. package/dist/providers/claude/ClaudeCodeAdapter.js.map +0 -1
  764. package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +0 -1
  765. package/dist/providers/claude/ClaudeSessionLocator.js +0 -260
  766. package/dist/providers/claude/ClaudeSessionLocator.js.map +0 -1
  767. package/dist/providers/claude/ClaudeSessionParser.d.ts +0 -114
  768. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +0 -1
  769. package/dist/providers/claude/ClaudeSessionParser.js +0 -309
  770. package/dist/providers/claude/ClaudeSessionParser.js.map +0 -1
  771. package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +0 -1
  772. package/dist/providers/claude/durable/ClaudeCliProbe.js.map +0 -1
  773. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +0 -1
  774. package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +0 -1
  775. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +0 -1
  776. package/dist/providers/claude/durable/ClaudePrintRunner.js.map +0 -1
  777. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +0 -1
  778. package/dist/providers/claude/durable/ClaudeStreamParser.js.map +0 -1
  779. package/dist/providers/codex/CodexAdapter.d.ts +0 -28
  780. package/dist/providers/codex/CodexAdapter.d.ts.map +0 -1
  781. package/dist/providers/codex/CodexAdapter.js +0 -170
  782. package/dist/providers/codex/CodexAdapter.js.map +0 -1
  783. package/dist/providers/codex/CodexAgentMapper.d.ts.map +0 -1
  784. package/dist/providers/codex/CodexAgentMapper.js +0 -35
  785. package/dist/providers/codex/CodexAgentMapper.js.map +0 -1
  786. package/dist/providers/codex/CodexSessionLocator.d.ts +0 -44
  787. package/dist/providers/codex/CodexSessionLocator.d.ts.map +0 -1
  788. package/dist/providers/codex/CodexSessionLocator.js +0 -207
  789. package/dist/providers/codex/CodexSessionLocator.js.map +0 -1
  790. package/dist/providers/codex/CodexSessionMapping.d.ts.map +0 -1
  791. package/dist/providers/codex/CodexSessionMapping.js +0 -68
  792. package/dist/providers/codex/CodexSessionMapping.js.map +0 -1
  793. package/dist/providers/codex/CodexSessionParser.d.ts +0 -58
  794. package/dist/providers/codex/CodexSessionParser.d.ts.map +0 -1
  795. package/dist/providers/codex/CodexSessionParser.js +0 -262
  796. package/dist/providers/codex/CodexSessionParser.js.map +0 -1
  797. package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +0 -1
  798. package/dist/providers/codex/durable/CodexCliProbe.js.map +0 -1
  799. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +0 -1
  800. package/dist/providers/codex/durable/CodexPrintAgentService.js.map +0 -1
  801. package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +0 -1
  802. package/dist/providers/codex/durable/CodexPrintRunner.js.map +0 -1
  803. package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +0 -1
  804. package/dist/providers/codex/durable/CodexStreamParser.js.map +0 -1
  805. package/dist/providers/copilot/CopilotAdapter.d.ts +0 -35
  806. package/dist/providers/copilot/CopilotAdapter.d.ts.map +0 -1
  807. package/dist/providers/copilot/CopilotAdapter.js +0 -123
  808. package/dist/providers/copilot/CopilotAdapter.js.map +0 -1
  809. package/dist/providers/copilot/CopilotAgentMapper.d.ts.map +0 -1
  810. package/dist/providers/copilot/CopilotAgentMapper.js +0 -37
  811. package/dist/providers/copilot/CopilotAgentMapper.js.map +0 -1
  812. package/dist/providers/copilot/CopilotSessionLocator.d.ts +0 -20
  813. package/dist/providers/copilot/CopilotSessionLocator.d.ts.map +0 -1
  814. package/dist/providers/copilot/CopilotSessionLocator.js +0 -49
  815. package/dist/providers/copilot/CopilotSessionLocator.js.map +0 -1
  816. package/dist/providers/copilot/CopilotSessionParser.d.ts +0 -30
  817. package/dist/providers/copilot/CopilotSessionParser.d.ts.map +0 -1
  818. package/dist/providers/copilot/CopilotSessionParser.js +0 -181
  819. package/dist/providers/copilot/CopilotSessionParser.js.map +0 -1
  820. package/dist/providers/gemini/GeminiAgentMapper.d.ts.map +0 -1
  821. package/dist/providers/gemini/GeminiAgentMapper.js +0 -37
  822. package/dist/providers/gemini/GeminiAgentMapper.js.map +0 -1
  823. package/dist/providers/gemini/GeminiCliAdapter.d.ts +0 -53
  824. package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +0 -1
  825. package/dist/providers/gemini/GeminiCliAdapter.js +0 -197
  826. package/dist/providers/gemini/GeminiCliAdapter.js.map +0 -1
  827. package/dist/providers/gemini/GeminiSessionLocator.d.ts +0 -30
  828. package/dist/providers/gemini/GeminiSessionLocator.d.ts.map +0 -1
  829. package/dist/providers/gemini/GeminiSessionLocator.js +0 -142
  830. package/dist/providers/gemini/GeminiSessionLocator.js.map +0 -1
  831. package/dist/providers/gemini/GeminiSessionParser.d.ts +0 -94
  832. package/dist/providers/gemini/GeminiSessionParser.d.ts.map +0 -1
  833. package/dist/providers/gemini/GeminiSessionParser.js +0 -166
  834. package/dist/providers/gemini/GeminiSessionParser.js.map +0 -1
  835. package/dist/providers/grok/GrokAgentMapper.d.ts.map +0 -1
  836. package/dist/providers/grok/GrokAgentMapper.js +0 -36
  837. package/dist/providers/grok/GrokAgentMapper.js.map +0 -1
  838. package/dist/providers/grok/GrokCliAdapter.d.ts +0 -36
  839. package/dist/providers/grok/GrokCliAdapter.d.ts.map +0 -1
  840. package/dist/providers/grok/GrokCliAdapter.js +0 -98
  841. package/dist/providers/grok/GrokCliAdapter.js.map +0 -1
  842. package/dist/providers/grok/GrokSessionLocator.d.ts.map +0 -1
  843. package/dist/providers/grok/GrokSessionLocator.js +0 -140
  844. package/dist/providers/grok/GrokSessionLocator.js.map +0 -1
  845. package/dist/providers/grok/GrokSessionParser.d.ts +0 -54
  846. package/dist/providers/grok/GrokSessionParser.d.ts.map +0 -1
  847. package/dist/providers/grok/GrokSessionParser.js +0 -122
  848. package/dist/providers/grok/GrokSessionParser.js.map +0 -1
  849. package/dist/providers/opencode/OpenCodeAdapter.d.ts +0 -31
  850. package/dist/providers/opencode/OpenCodeAdapter.d.ts.map +0 -1
  851. package/dist/providers/opencode/OpenCodeAdapter.js +0 -89
  852. package/dist/providers/opencode/OpenCodeAdapter.js.map +0 -1
  853. package/dist/providers/opencode/OpenCodeAgentMapper.d.ts.map +0 -1
  854. package/dist/providers/opencode/OpenCodeAgentMapper.js +0 -50
  855. package/dist/providers/opencode/OpenCodeAgentMapper.js.map +0 -1
  856. package/dist/providers/opencode/OpenCodeSessionLocator.d.ts.map +0 -1
  857. package/dist/providers/opencode/OpenCodeSessionLocator.js +0 -118
  858. package/dist/providers/opencode/OpenCodeSessionLocator.js.map +0 -1
  859. package/dist/providers/opencode/OpenCodeSessionParser.d.ts +0 -18
  860. package/dist/providers/opencode/OpenCodeSessionParser.d.ts.map +0 -1
  861. package/dist/providers/opencode/OpenCodeSessionParser.js +0 -104
  862. package/dist/providers/opencode/OpenCodeSessionParser.js.map +0 -1
  863. package/dist/providers/pi/PiAdapter.d.ts +0 -29
  864. package/dist/providers/pi/PiAdapter.d.ts.map +0 -1
  865. package/dist/providers/pi/PiAdapter.js +0 -163
  866. package/dist/providers/pi/PiAdapter.js.map +0 -1
  867. package/dist/providers/pi/PiAgentMapper.d.ts.map +0 -1
  868. package/dist/providers/pi/PiAgentMapper.js +0 -37
  869. package/dist/providers/pi/PiAgentMapper.js.map +0 -1
  870. package/dist/providers/pi/PiSessionLocator.d.ts +0 -24
  871. package/dist/providers/pi/PiSessionLocator.d.ts.map +0 -1
  872. package/dist/providers/pi/PiSessionLocator.js +0 -86
  873. package/dist/providers/pi/PiSessionLocator.js.map +0 -1
  874. package/dist/providers/pi/PiSessionParser.d.ts +0 -36
  875. package/dist/providers/pi/PiSessionParser.d.ts.map +0 -1
  876. package/dist/providers/pi/PiSessionParser.js +0 -191
  877. package/dist/providers/pi/PiSessionParser.js.map +0 -1
  878. package/dist/providers/pi/PiSessionTracker.d.ts.map +0 -1
  879. package/dist/providers/pi/PiSessionTracker.js +0 -69
  880. package/dist/providers/pi/PiSessionTracker.js.map +0 -1
  881. package/dist/providers/pi/durable/PiCliProbe.d.ts.map +0 -1
  882. package/dist/providers/pi/durable/PiCliProbe.js.map +0 -1
  883. package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +0 -1
  884. package/dist/providers/pi/durable/PiPrintAgentService.js.map +0 -1
  885. package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +0 -1
  886. package/dist/providers/pi/durable/PiPrintProtocol.js.map +0 -1
  887. package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +0 -1
  888. package/dist/providers/pi/durable/PiPrintRunner.js.map +0 -1
  889. package/dist/providers/pi/durable/PiStreamParser.d.ts.map +0 -1
  890. package/dist/providers/pi/durable/PiStreamParser.js.map +0 -1
  891. package/dist/readiness/AgentReadiness.d.ts +0 -67
  892. package/dist/readiness/AgentReadiness.d.ts.map +0 -1
  893. package/dist/readiness/AgentReadiness.js +0 -614
  894. package/dist/readiness/AgentReadiness.js.map +0 -1
  895. package/dist/terminal/TmuxManager.d.ts +0 -28
  896. package/dist/terminal/TmuxManager.d.ts.map +0 -1
  897. package/dist/terminal/TmuxManager.js +0 -135
  898. package/dist/terminal/TmuxManager.js.map +0 -1
  899. package/dist/terminal/index.d.ts +0 -5
  900. package/dist/terminal/index.d.ts.map +0 -1
  901. package/dist/terminal/index.js +0 -5
  902. package/dist/terminal/index.js.map +0 -1
  903. package/dist/utils/agents.d.ts +0 -15
  904. package/dist/utils/agents.d.ts.map +0 -1
  905. package/dist/utils/agents.js +0 -82
  906. package/dist/utils/agents.js.map +0 -1
  907. package/dist/utils/index.d.ts +0 -7
  908. package/dist/utils/index.d.ts.map +0 -1
  909. package/dist/utils/index.js +0 -6
  910. package/dist/utils/index.js.map +0 -1
  911. package/src/__tests__/adapters/AntigravityCliAdapter.test.ts +0 -324
  912. package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +0 -1763
  913. package/src/__tests__/adapters/CodexAdapter.test.ts +0 -387
  914. package/src/__tests__/adapters/KiroAdapter.test.ts +0 -534
  915. package/src/__tests__/durable/CodexCliProbe.test.ts +0 -85
  916. package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +0 -65
  917. package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +0 -104
  918. package/src/__tests__/durable/CodexPrintAgentService.test.ts +0 -217
  919. package/src/__tests__/durable/CodexPrintRunner.test.ts +0 -309
  920. package/src/__tests__/fixtures/fake-claude.cjs +0 -31
  921. package/src/__tests__/fixtures/fake-codex.cjs +0 -56
  922. package/src/__tests__/print/ClaudeCliProbe.test.ts +0 -34
  923. package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +0 -61
  924. package/src/__tests__/print/ClaudePrintAgentService.test.ts +0 -129
  925. package/src/__tests__/print/ClaudePrintRunner.test.ts +0 -152
  926. package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +0 -84
  927. package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +0 -434
  928. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +0 -182
  929. package/src/__tests__/providers/codex/CodexSessionMapping.test.ts +0 -63
  930. package/src/__tests__/providers/codex/CodexSessionParser.test.ts +0 -192
  931. package/src/__tests__/providers/copilot/CopilotAdapter.test.ts +0 -614
  932. package/src/__tests__/providers/gemini/GeminiCliAdapter.test.ts +0 -1320
  933. package/src/__tests__/providers/grok/GrokAgentMapper.test.ts +0 -57
  934. package/src/__tests__/providers/grok/GrokCliAdapter.test.ts +0 -376
  935. package/src/__tests__/providers/grok/GrokSessionLocator.test.ts +0 -106
  936. package/src/__tests__/providers/opencode/OpenCodeAdapter.test.ts +0 -215
  937. package/src/__tests__/providers/opencode/OpenCodeAgentMapper.test.ts +0 -83
  938. package/src/__tests__/providers/opencode/OpenCodeSessionLocator.test.ts +0 -84
  939. package/src/__tests__/providers/opencode/OpenCodeSessionParser.test.ts +0 -148
  940. package/src/__tests__/providers/pi/PiAdapter.test.ts +0 -325
  941. package/src/__tests__/providers/pi/PiSessionParser.test.ts +0 -190
  942. package/src/__tests__/providers/pi/PiSessionTracker.test.ts +0 -79
  943. package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +0 -54
  944. package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +0 -141
  945. package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +0 -71
  946. package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +0 -253
  947. package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +0 -26
  948. package/src/__tests__/readiness/AgentReadiness.test.ts +0 -242
  949. package/src/__tests__/utils/ClaudeSessionParser.test.ts +0 -300
  950. package/src/__tests__/utils/agents.test.ts +0 -31
  951. package/src/adapters/AntigravityCliAdapter.ts +0 -356
  952. package/src/adapters/KiroAdapter.ts +0 -456
  953. package/src/adapters/index.ts +0 -17
  954. package/src/capacity/claude.ts +0 -313
  955. package/src/capacity/codex.ts +0 -332
  956. package/src/capacity/openai.ts +0 -361
  957. package/src/capacity/wham.ts +0 -84
  958. package/src/capacity/zai.ts +0 -237
  959. package/src/providers/claude/ClaudeAgentMapper.ts +0 -63
  960. package/src/providers/claude/ClaudeCodeAdapter.ts +0 -173
  961. package/src/providers/claude/ClaudeSessionLocator.ts +0 -358
  962. package/src/providers/claude/ClaudeSessionParser.ts +0 -432
  963. package/src/providers/codex/CodexAdapter.ts +0 -213
  964. package/src/providers/codex/CodexAgentMapper.ts +0 -35
  965. package/src/providers/codex/CodexSessionLocator.ts +0 -279
  966. package/src/providers/codex/CodexSessionMapping.ts +0 -89
  967. package/src/providers/codex/CodexSessionParser.ts +0 -385
  968. package/src/providers/copilot/CopilotAdapter.ts +0 -161
  969. package/src/providers/copilot/CopilotAgentMapper.ts +0 -36
  970. package/src/providers/copilot/CopilotSessionLocator.ts +0 -63
  971. package/src/providers/copilot/CopilotSessionParser.ts +0 -289
  972. package/src/providers/gemini/GeminiAgentMapper.ts +0 -36
  973. package/src/providers/gemini/GeminiCliAdapter.ts +0 -274
  974. package/src/providers/gemini/GeminiSessionLocator.ts +0 -183
  975. package/src/providers/gemini/GeminiSessionParser.ts +0 -271
  976. package/src/providers/grok/GrokAgentMapper.ts +0 -41
  977. package/src/providers/grok/GrokCliAdapter.ts +0 -125
  978. package/src/providers/grok/GrokSessionLocator.ts +0 -179
  979. package/src/providers/grok/GrokSessionParser.ts +0 -166
  980. package/src/providers/opencode/OpenCodeAdapter.ts +0 -116
  981. package/src/providers/opencode/OpenCodeAgentMapper.ts +0 -61
  982. package/src/providers/opencode/OpenCodeSessionLocator.ts +0 -151
  983. package/src/providers/opencode/OpenCodeSessionParser.ts +0 -145
  984. package/src/providers/pi/PiAdapter.ts +0 -195
  985. package/src/providers/pi/PiAgentMapper.ts +0 -36
  986. package/src/providers/pi/PiSessionLocator.ts +0 -110
  987. package/src/providers/pi/PiSessionParser.ts +0 -284
  988. package/src/providers/pi/PiSessionTracker.ts +0 -87
  989. package/src/readiness/AgentReadiness.ts +0 -730
  990. package/src/terminal/TmuxManager.ts +0 -123
  991. package/src/terminal/index.ts +0 -4
  992. package/src/utils/agents.ts +0 -75
  993. package/src/utils/index.ts +0 -12
  994. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js +0 -0
  995. /package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts +0 -0
  996. /package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts +0 -0
  997. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts +0 -0
  998. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js +0 -0
  999. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts +0 -0
  1000. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js +0 -0
  1001. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts +0 -0
  1002. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js +0 -0
  1003. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts +0 -0
  1004. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js +0 -0
  1005. /package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts +0 -0
  1006. /package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts +0 -0
  1007. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts +0 -0
  1008. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js +0 -0
  1009. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts +0 -0
  1010. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js +0 -0
  1011. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts +0 -0
  1012. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js +0 -0
  1013. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts +0 -0
  1014. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js +0 -0
  1015. /package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts +0 -0
  1016. /package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts +0 -0
  1017. /package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts +0 -0
  1018. /package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts +0 -0
  1019. /package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts +0 -0
  1020. /package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts +0 -0
  1021. /package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts +0 -0
  1022. /package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts +0 -0
  1023. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts +0 -0
  1024. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js +0 -0
  1025. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts +0 -0
  1026. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js +0 -0
  1027. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts +0 -0
  1028. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js +0 -0
  1029. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts +0 -0
  1030. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js +0 -0
  1031. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts +0 -0
  1032. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js +0 -0
  1033. /package/src/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.ts +0 -0
  1034. /package/src/{providers → harnesses}/claude/durable/ClaudeCliProbe.ts +0 -0
  1035. /package/src/{providers → harnesses}/claude/durable/ClaudePrintAgentService.ts +0 -0
  1036. /package/src/{providers → harnesses}/claude/durable/ClaudePrintRunner.ts +0 -0
  1037. /package/src/{providers → harnesses}/claude/durable/ClaudeStreamParser.ts +0 -0
  1038. /package/src/{providers → harnesses}/codex/durable/CodexCliProbe.ts +0 -0
  1039. /package/src/{providers → harnesses}/codex/durable/CodexPrintAgentService.ts +0 -0
  1040. /package/src/{providers → harnesses}/codex/durable/CodexPrintRunner.ts +0 -0
  1041. /package/src/{providers → harnesses}/codex/durable/CodexStreamParser.ts +0 -0
  1042. /package/src/{providers → harnesses}/pi/durable/PiCliProbe.ts +0 -0
  1043. /package/src/{providers → harnesses}/pi/durable/PiPrintAgentService.ts +0 -0
  1044. /package/src/{providers → harnesses}/pi/durable/PiPrintProtocol.ts +0 -0
  1045. /package/src/{providers → harnesses}/pi/durable/PiPrintRunner.ts +0 -0
  1046. /package/src/{providers → harnesses}/pi/durable/PiStreamParser.ts +0 -0
@@ -1,49 +1,6 @@
1
- import type { TerminalLocation } from "./TerminalFocusManager.js";
1
+ import type { TerminalLocation } from "./types.js";
2
2
  export declare class TtyWriter {
3
- /**
4
- * Send a message as keyboard input to a terminal session.
5
- *
6
- * Dispatches to the correct mechanism based on terminal type:
7
- * - tmux: `tmux send-keys`
8
- * - iTerm2: Two separate AppleScript `write text` calls (text then newline)
9
- * - Terminal.app: Two separate AppleScript `do script` calls (text then newline)
10
- *
11
- * All AppleScript is executed via `execFile('osascript', ['-e', script])`
12
- * to avoid shell interpolation and command injection.
13
- *
14
- * @param location Terminal location from TerminalFocusManager.findTerminal()
15
- * @param message Text to send
16
- * @throws Error if terminal type is unsupported or send fails
17
- */
18
3
  static send(location: TerminalLocation, message: string): Promise<void>;
19
- /**
20
- * Send a single raw key (e.g. "1", "Enter", "Up") to the terminal as a
21
- * keystroke — bypassing bracketed paste and without auto-appending Enter.
22
- *
23
- * Use this when the target TUI distinguishes between typed text and raw
24
- * keypresses (e.g. an `AskUserQuestion` picker that selects on digit-key
25
- * press, not on a pasted digit followed by Enter).
26
- *
27
- * - tmux: `tmux send-keys -t <id> <key>` — direct keystroke, no paste buffer.
28
- * - WezTerm: `wezterm cli send-text --pane-id <id> --no-paste <key>`.
29
- * - iTerm2 / Terminal.app: AppleScript via System Events. Requires
30
- * Accessibility permissions.
31
- */
32
4
  static sendKey(location: TerminalLocation, key: string): Promise<void>;
33
- private static sendKeyViaTmux;
34
- private static sendKeyViaWezterm;
35
- private static sendKeyViaITerm2;
36
- private static sendKeyViaTerminalApp;
37
- private static sendViaWezterm;
38
- private static sendViaTmux;
39
- private static execFileWithInput;
40
- /**
41
- * Build an AppleScript that finds an iTerm2 session by TTY and runs a
42
- * command against it. The `sessionCommand` is inserted inside a
43
- * `tell targetSession` block.
44
- */
45
- private static iterm2SessionScript;
46
- private static sendViaITerm2;
47
- private static sendViaTerminalApp;
48
5
  }
49
6
  //# sourceMappingURL=TtyWriter.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TtyWriter.d.ts","sourceRoot":"","sources":["../../src/terminal/TtyWriter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAmBlE,qBAAa,SAAS;IACpB;;;;;;;;;;;;;;OAcG;WACU,IAAI,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB7E;;;;;;;;;;;;OAYG;WACU,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;mBAkBvD,cAAc;mBAOd,iBAAiB;mBAOjB,gBAAgB;mBAkChB,qBAAqB;mBA+BrB,cAAc;mBA8Bd,WAAW;mBAWX,iBAAiB;IAqBtC;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;mBAsBb,aAAa;mBAuBb,kBAAkB;CA0DxC"}
1
+ {"version":3,"file":"TtyWriter.d.ts","sourceRoot":"","sources":["../../src/terminal/TtyWriter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,qBAAa,SAAS;WACP,IAAI,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WAWhE,OAAO,CAAC,QAAQ,EAAE,gBAAgB,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAU7E"}
@@ -1,355 +1,19 @@
1
- import { execFile } from "child_process";
2
- import { promisify } from "util";
3
- import { TerminalType } from "./TerminalFocusManager.js";
4
- import { escapeAppleScript } from "../utils/applescript.js";
5
- const execFileAsync = promisify(execFile);
6
- /**
7
- * Carriage return byte (0x0d). Sent as a fixed discrete argv element with
8
- * `--no-paste` to deliver Enter literally (shell equivalent: $'\x0d').
9
- */ const CARRIAGE_RETURN = "\x0d";
10
- /**
11
- * Escape byte (0x1b). Recognized by `sendKey` and translated to the
12
- * backend-native representation (`Escape` for tmux, `key code 53` for
13
- * AppleScript, the literal byte for WezTerm).
14
- */ const ESCAPE_BYTE = "\x1b";
1
+ import { terminalBackendFor } from "./backends/index.js";
15
2
  export class TtyWriter {
16
- /**
17
- * Send a message as keyboard input to a terminal session.
18
- *
19
- * Dispatches to the correct mechanism based on terminal type:
20
- * - tmux: `tmux send-keys`
21
- * - iTerm2: Two separate AppleScript `write text` calls (text then newline)
22
- * - Terminal.app: Two separate AppleScript `do script` calls (text then newline)
23
- *
24
- * All AppleScript is executed via `execFile('osascript', ['-e', script])`
25
- * to avoid shell interpolation and command injection.
26
- *
27
- * @param location Terminal location from TerminalFocusManager.findTerminal()
28
- * @param message Text to send
29
- * @throws Error if terminal type is unsupported or send fails
30
- */ static async send(location, message) {
31
- switch(location.type){
32
- case TerminalType.TMUX:
33
- return TtyWriter.sendViaTmux(location.identifier, message);
34
- case TerminalType.WEZTERM:
35
- return TtyWriter.sendViaWezterm(location.identifier, message);
36
- case TerminalType.ITERM2:
37
- return TtyWriter.sendViaITerm2(location.tty, message);
38
- case TerminalType.TERMINAL_APP:
39
- return TtyWriter.sendViaTerminalApp(location.tty, message);
40
- default:
41
- throw new Error(`Cannot send input: unsupported terminal type "${location.type}". ` + "Supported: tmux, WezTerm, iTerm2, Terminal.app.");
3
+ static async send(location, message) {
4
+ const backend = terminalBackendFor(location.type);
5
+ if (!backend) {
6
+ throw new Error(`Cannot send input: unsupported terminal type "${location.type}". ` + "Supported: tmux, WezTerm, iTerm2, Terminal.app.");
42
7
  }
8
+ await backend.send(location, message);
43
9
  }
44
- /**
45
- * Send a single raw key (e.g. "1", "Enter", "Up") to the terminal as a
46
- * keystroke — bypassing bracketed paste and without auto-appending Enter.
47
- *
48
- * Use this when the target TUI distinguishes between typed text and raw
49
- * keypresses (e.g. an `AskUserQuestion` picker that selects on digit-key
50
- * press, not on a pasted digit followed by Enter).
51
- *
52
- * - tmux: `tmux send-keys -t <id> <key>` — direct keystroke, no paste buffer.
53
- * - WezTerm: `wezterm cli send-text --pane-id <id> --no-paste <key>`.
54
- * - iTerm2 / Terminal.app: AppleScript via System Events. Requires
55
- * Accessibility permissions.
56
- */ static async sendKey(location, key) {
57
- switch(location.type){
58
- case TerminalType.TMUX:
59
- return TtyWriter.sendKeyViaTmux(location.identifier, key);
60
- case TerminalType.WEZTERM:
61
- return TtyWriter.sendKeyViaWezterm(location.identifier, key);
62
- case TerminalType.ITERM2:
63
- return TtyWriter.sendKeyViaITerm2(location.tty, key);
64
- case TerminalType.TERMINAL_APP:
65
- return TtyWriter.sendKeyViaTerminalApp(location.tty, key);
66
- default:
67
- throw new Error(`Cannot send key: unsupported terminal type "${location.type}". ` + "Supported: tmux, WezTerm, iTerm2, Terminal.app.");
10
+ static async sendKey(location, key) {
11
+ const backend = terminalBackendFor(location.type);
12
+ if (!backend) {
13
+ throw new Error(`Cannot send key: unsupported terminal type "${location.type}". ` + "Supported: tmux, WezTerm, iTerm2, Terminal.app.");
68
14
  }
15
+ await backend.sendKey(location, key);
69
16
  }
70
- static async sendKeyViaTmux(identifier, key) {
71
- // tmux send-keys interprets named keys (Enter, Up, Escape, ...) and
72
- // passes literals through. No bracketed paste, no auto-Enter.
73
- const arg = key === ESCAPE_BYTE ? "Escape" : key;
74
- await execFileAsync("tmux", [
75
- "send-keys",
76
- "-t",
77
- identifier,
78
- arg
79
- ]);
80
- }
81
- static async sendKeyViaWezterm(paneId, key) {
82
- // --no-paste delivers the key bytes literally outside bracketed-paste
83
- // markers; the TUI sees a raw keystroke. For Esc (`\x1b`), wezterm
84
- // accepts the byte directly.
85
- await execFileAsync("wezterm", [
86
- "cli",
87
- "send-text",
88
- "--pane-id",
89
- paneId,
90
- "--no-paste",
91
- key
92
- ]);
93
- }
94
- static async sendKeyViaITerm2(tty, key) {
95
- // Focus the target session, then press the key via System Events so the
96
- // inner TUI sees a raw keystroke (not a bracketed-paste text run).
97
- const action = appleScriptKeyAction(key);
98
- const script = `
99
- tell application "iTerm"
100
- set targetSession to missing value
101
- repeat with w in windows
102
- repeat with t in tabs of w
103
- repeat with s in sessions of t
104
- if tty of s is "${tty}" then
105
- set targetSession to s
106
- set frontmost of w to true
107
- tell t to select
108
- tell s to select
109
- exit repeat
110
- end if
111
- end repeat
112
- if targetSession is not missing value then exit repeat
113
- end repeat
114
- if targetSession is not missing value then exit repeat
115
- end repeat
116
- if targetSession is missing value then return "not_found"
117
- activate
118
- end tell
119
- tell application "System Events" to ${action}
120
- return "ok"`;
121
- const { stdout } = await execFileAsync("osascript", [
122
- "-e",
123
- script
124
- ]);
125
- if (stdout.trim() !== "ok") {
126
- throw new Error(`iTerm2 session not found for TTY ${tty}`);
127
- }
128
- }
129
- static async sendKeyViaTerminalApp(tty, key) {
130
- const action = appleScriptKeyAction(key);
131
- const script = `
132
- tell application "Terminal"
133
- set targetTab to missing value
134
- set targetWindow to missing value
135
- repeat with w in windows
136
- repeat with i from 1 to count of tabs of w
137
- set t to tab i of w
138
- if tty of t is "${tty}" then
139
- set targetTab to t
140
- set targetWindow to w
141
- exit repeat
142
- end if
143
- end repeat
144
- if targetTab is not missing value then exit repeat
145
- end repeat
146
- if targetTab is missing value then return "not_found"
147
- set selected of targetTab to true
148
- set frontmost of targetWindow to true
149
- activate
150
- end tell
151
- tell application "System Events" to ${action}
152
- return "ok"`;
153
- const { stdout } = await execFileAsync("osascript", [
154
- "-e",
155
- script
156
- ]);
157
- if (stdout.trim() !== "ok") {
158
- throw new Error(`Terminal.app tab not found for TTY ${tty}`);
159
- }
160
- }
161
- static async sendViaWezterm(paneId, message) {
162
- // Two explicit CLI calls, mirroring the text-then-Enter convention used
163
- // by tmux / iTerm2 / Terminal.app so a bracketed-paste-aware TUI still
164
- // sees Enter as a submit.
165
- //
166
- // Step 1 (text): write the message to stdin so prompt contents are not
167
- // exposed through process arguments. execFile still spawns wezterm
168
- // directly (no shell), so shell metacharacters remain inert.
169
- // Step 2 (Enter): pass a fixed carriage return (0x0d) as a discrete
170
- // argv element (the JS char '\x0d') with --no-paste, so the CR is
171
- // delivered literally rather than wrapped in paste brackets. The
172
- // equivalent shell command is:
173
- // wezterm cli send-text --pane-id <id> --no-paste $'\x0d'
174
- // (ANSI-C quoting, note the leading $).
175
- await TtyWriter.execFileWithInput("wezterm", [
176
- "cli",
177
- "send-text",
178
- "--pane-id",
179
- paneId
180
- ], message);
181
- await new Promise((resolve)=>setTimeout(resolve, 150));
182
- await execFileAsync("wezterm", [
183
- "cli",
184
- "send-text",
185
- "--pane-id",
186
- paneId,
187
- "--no-paste",
188
- CARRIAGE_RETURN
189
- ]);
190
- }
191
- static async sendViaTmux(identifier, message) {
192
- // Paste the message body using tmux bracketed paste, then send Enter as
193
- // a separate key so the inner TUI treats it as submission rather than
194
- // pasted content.
195
- const bufferName = `ai-devkit-send-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;
196
- await TtyWriter.execFileWithInput("tmux", [
197
- "load-buffer",
198
- "-b",
199
- bufferName,
200
- "-"
201
- ], message);
202
- await execFileAsync("tmux", [
203
- "paste-buffer",
204
- "-t",
205
- identifier,
206
- "-b",
207
- bufferName,
208
- "-p",
209
- "-d"
210
- ]);
211
- await new Promise((resolve)=>setTimeout(resolve, 150));
212
- await execFileAsync("tmux", [
213
- "send-keys",
214
- "-t",
215
- identifier,
216
- "Enter"
217
- ]);
218
- }
219
- static async execFileWithInput(command, args, input) {
220
- await new Promise((resolve, reject)=>{
221
- const child = execFile(command, args, (error)=>{
222
- if (error) {
223
- reject(error);
224
- return;
225
- }
226
- resolve();
227
- });
228
- if (!child.stdin) {
229
- reject(new Error(`Cannot write stdin to ${command}`));
230
- return;
231
- }
232
- child.stdin.end(input);
233
- });
234
- }
235
- /**
236
- * Build an AppleScript that finds an iTerm2 session by TTY and runs a
237
- * command against it. The `sessionCommand` is inserted inside a
238
- * `tell targetSession` block.
239
- */ static iterm2SessionScript(tty, sessionCommand) {
240
- return `
241
- tell application "iTerm"
242
- set targetSession to missing value
243
- repeat with w in windows
244
- repeat with t in tabs of w
245
- repeat with s in sessions of t
246
- if tty of s is "${tty}" then
247
- set targetSession to s
248
- exit repeat
249
- end if
250
- end repeat
251
- if targetSession is not missing value then exit repeat
252
- end repeat
253
- if targetSession is not missing value then exit repeat
254
- end repeat
255
- if targetSession is missing value then return "not_found"
256
- tell targetSession to ${sessionCommand}
257
- end tell
258
- return "ok"`;
259
- }
260
- static async sendViaITerm2(tty, message) {
261
- const escaped = escapeAppleScript(message);
262
- // Send text and Enter as two separate write text calls so the newline
263
- // is delivered outside the bracketed paste sequence of the message body.
264
- // iTerm2 appends the newline after the paste-end marker (\e[201~), so
265
- // the inner TUI (Claude Code, Codex) sees it as a real submit action.
266
- const textScript = TtyWriter.iterm2SessionScript(tty, `write text "${escaped}" newline no`);
267
- const { stdout: textResult } = await execFileAsync("osascript", [
268
- "-e",
269
- textScript
270
- ]);
271
- if (textResult.trim() !== "ok") {
272
- throw new Error(`iTerm2 session not found for TTY ${tty}`);
273
- }
274
- // Wait for the paste to complete before sending Enter separately
275
- await new Promise((resolve)=>setTimeout(resolve, 150));
276
- const enterScript = TtyWriter.iterm2SessionScript(tty, 'write text "" newline yes');
277
- const { stdout: enterResult } = await execFileAsync("osascript", [
278
- "-e",
279
- enterScript
280
- ]);
281
- if (enterResult.trim() !== "ok") {
282
- throw new Error(`iTerm2 session disappeared before Enter could be sent for TTY ${tty}`);
283
- }
284
- }
285
- static async sendViaTerminalApp(tty, message) {
286
- const escaped = escapeAppleScript(message);
287
- // Use Terminal.app's `do script` to send text to the correct tab by TTY.
288
- // We avoid System Events `keystroke` + `key code 36` because it requires
289
- // accessibility permissions and unreliably delivers the Return key.
290
- //
291
- // `do script` with `in` targets a specific tab without opening a new one.
292
- // We send text and Enter as two separate calls so the newline arrives
293
- // outside of bracketed paste mode — same pattern as iTerm2 and tmux.
294
- const textScript = `
295
- tell application "Terminal"
296
- set targetTab to missing value
297
- repeat with w in windows
298
- repeat with i from 1 to count of tabs of w
299
- set t to tab i of w
300
- if tty of t is "${tty}" then
301
- set targetTab to t
302
- exit repeat
303
- end if
304
- end repeat
305
- if targetTab is not missing value then exit repeat
306
- end repeat
307
- if targetTab is missing value then return "not_found"
308
- do script "${escaped}" in targetTab
309
- end tell
310
- return "ok"`;
311
- const { stdout: textResult } = await execFileAsync("osascript", [
312
- "-e",
313
- textScript
314
- ]);
315
- if (textResult.trim() !== "ok") {
316
- throw new Error(`Terminal.app tab not found for TTY ${tty}`);
317
- }
318
- // Wait for the text to be delivered before sending Enter
319
- await new Promise((resolve)=>setTimeout(resolve, 150));
320
- const enterScript = `
321
- tell application "Terminal"
322
- set targetTab to missing value
323
- repeat with w in windows
324
- repeat with i from 1 to count of tabs of w
325
- set t to tab i of w
326
- if tty of t is "${tty}" then
327
- set targetTab to t
328
- exit repeat
329
- end if
330
- end repeat
331
- if targetTab is not missing value then exit repeat
332
- end repeat
333
- if targetTab is missing value then return "not_found"
334
- do script "" in targetTab
335
- end tell
336
- return "ok"`;
337
- const { stdout: enterResult } = await execFileAsync("osascript", [
338
- "-e",
339
- enterScript
340
- ]);
341
- if (enterResult.trim() !== "ok") {
342
- throw new Error(`Terminal.app tab disappeared before Enter could be sent for TTY ${tty}`);
343
- }
344
- }
345
- }
346
- /**
347
- * AppleScript `keystroke` only delivers typeable characters; non-typeable
348
- * keys (Esc, arrows, F-keys, …) must be sent via `key code <N>`. Add more
349
- * mappings here as new special keys are needed.
350
- */ function appleScriptKeyAction(key) {
351
- if (key === ESCAPE_BYTE) return "key code 53";
352
- return `keystroke "${escapeAppleScript(key)}"`;
353
17
  }
354
18
 
355
19
  //# sourceMappingURL=TtyWriter.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/terminal/TtyWriter.ts"],"sourcesContent":["import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\nimport type { TerminalLocation } from \"./TerminalFocusManager.js\";\nimport { TerminalType } from \"./TerminalFocusManager.js\";\nimport { escapeAppleScript } from \"../utils/applescript.js\";\n\nconst execFileAsync = promisify(execFile);\n\n/**\n * Carriage return byte (0x0d). Sent as a fixed discrete argv element with\n * `--no-paste` to deliver Enter literally (shell equivalent: $'\\x0d').\n */\nconst CARRIAGE_RETURN = \"\\x0d\";\n\n/**\n * Escape byte (0x1b). Recognized by `sendKey` and translated to the\n * backend-native representation (`Escape` for tmux, `key code 53` for\n * AppleScript, the literal byte for WezTerm).\n */\nconst ESCAPE_BYTE = \"\\x1b\";\n\nexport class TtyWriter {\n /**\n * Send a message as keyboard input to a terminal session.\n *\n * Dispatches to the correct mechanism based on terminal type:\n * - tmux: `tmux send-keys`\n * - iTerm2: Two separate AppleScript `write text` calls (text then newline)\n * - Terminal.app: Two separate AppleScript `do script` calls (text then newline)\n *\n * All AppleScript is executed via `execFile('osascript', ['-e', script])`\n * to avoid shell interpolation and command injection.\n *\n * @param location Terminal location from TerminalFocusManager.findTerminal()\n * @param message Text to send\n * @throws Error if terminal type is unsupported or send fails\n */\n static async send(location: TerminalLocation, message: string): Promise<void> {\n switch (location.type) {\n case TerminalType.TMUX:\n return TtyWriter.sendViaTmux(location.identifier, message);\n case TerminalType.WEZTERM:\n return TtyWriter.sendViaWezterm(location.identifier, message);\n case TerminalType.ITERM2:\n return TtyWriter.sendViaITerm2(location.tty, message);\n case TerminalType.TERMINAL_APP:\n return TtyWriter.sendViaTerminalApp(location.tty, message);\n default:\n throw new Error(\n `Cannot send input: unsupported terminal type \"${location.type}\". ` +\n \"Supported: tmux, WezTerm, iTerm2, Terminal.app.\",\n );\n }\n }\n\n /**\n * Send a single raw key (e.g. \"1\", \"Enter\", \"Up\") to the terminal as a\n * keystroke — bypassing bracketed paste and without auto-appending Enter.\n *\n * Use this when the target TUI distinguishes between typed text and raw\n * keypresses (e.g. an `AskUserQuestion` picker that selects on digit-key\n * press, not on a pasted digit followed by Enter).\n *\n * - tmux: `tmux send-keys -t <id> <key>` — direct keystroke, no paste buffer.\n * - WezTerm: `wezterm cli send-text --pane-id <id> --no-paste <key>`.\n * - iTerm2 / Terminal.app: AppleScript via System Events. Requires\n * Accessibility permissions.\n */\n static async sendKey(location: TerminalLocation, key: string): Promise<void> {\n switch (location.type) {\n case TerminalType.TMUX:\n return TtyWriter.sendKeyViaTmux(location.identifier, key);\n case TerminalType.WEZTERM:\n return TtyWriter.sendKeyViaWezterm(location.identifier, key);\n case TerminalType.ITERM2:\n return TtyWriter.sendKeyViaITerm2(location.tty, key);\n case TerminalType.TERMINAL_APP:\n return TtyWriter.sendKeyViaTerminalApp(location.tty, key);\n default:\n throw new Error(\n `Cannot send key: unsupported terminal type \"${location.type}\". ` +\n \"Supported: tmux, WezTerm, iTerm2, Terminal.app.\",\n );\n }\n }\n\n private static async sendKeyViaTmux(identifier: string, key: string): Promise<void> {\n // tmux send-keys interprets named keys (Enter, Up, Escape, ...) and\n // passes literals through. No bracketed paste, no auto-Enter.\n const arg = key === ESCAPE_BYTE ? \"Escape\" : key;\n await execFileAsync(\"tmux\", [\"send-keys\", \"-t\", identifier, arg]);\n }\n\n private static async sendKeyViaWezterm(paneId: string, key: string): Promise<void> {\n // --no-paste delivers the key bytes literally outside bracketed-paste\n // markers; the TUI sees a raw keystroke. For Esc (`\\x1b`), wezterm\n // accepts the byte directly.\n await execFileAsync(\"wezterm\", [\"cli\", \"send-text\", \"--pane-id\", paneId, \"--no-paste\", key]);\n }\n\n private static async sendKeyViaITerm2(tty: string, key: string): Promise<void> {\n // Focus the target session, then press the key via System Events so the\n // inner TUI sees a raw keystroke (not a bracketed-paste text run).\n const action = appleScriptKeyAction(key);\n const script = `\ntell application \"iTerm\"\n set targetSession to missing value\n repeat with w in windows\n repeat with t in tabs of w\n repeat with s in sessions of t\n if tty of s is \"${tty}\" then\n set targetSession to s\n set frontmost of w to true\n tell t to select\n tell s to select\n exit repeat\n end if\n end repeat\n if targetSession is not missing value then exit repeat\n end repeat\n if targetSession is not missing value then exit repeat\n end repeat\n if targetSession is missing value then return \"not_found\"\n activate\nend tell\ntell application \"System Events\" to ${action}\nreturn \"ok\"`;\n\n const { stdout } = await execFileAsync(\"osascript\", [\"-e\", script]);\n if (stdout.trim() !== \"ok\") {\n throw new Error(`iTerm2 session not found for TTY ${tty}`);\n }\n }\n\n private static async sendKeyViaTerminalApp(tty: string, key: string): Promise<void> {\n const action = appleScriptKeyAction(key);\n const script = `\ntell application \"Terminal\"\n set targetTab to missing value\n set targetWindow to missing value\n repeat with w in windows\n repeat with i from 1 to count of tabs of w\n set t to tab i of w\n if tty of t is \"${tty}\" then\n set targetTab to t\n set targetWindow to w\n exit repeat\n end if\n end repeat\n if targetTab is not missing value then exit repeat\n end repeat\n if targetTab is missing value then return \"not_found\"\n set selected of targetTab to true\n set frontmost of targetWindow to true\n activate\nend tell\ntell application \"System Events\" to ${action}\nreturn \"ok\"`;\n\n const { stdout } = await execFileAsync(\"osascript\", [\"-e\", script]);\n if (stdout.trim() !== \"ok\") {\n throw new Error(`Terminal.app tab not found for TTY ${tty}`);\n }\n }\n\n private static async sendViaWezterm(paneId: string, message: string): Promise<void> {\n // Two explicit CLI calls, mirroring the text-then-Enter convention used\n // by tmux / iTerm2 / Terminal.app so a bracketed-paste-aware TUI still\n // sees Enter as a submit.\n //\n // Step 1 (text): write the message to stdin so prompt contents are not\n // exposed through process arguments. execFile still spawns wezterm\n // directly (no shell), so shell metacharacters remain inert.\n // Step 2 (Enter): pass a fixed carriage return (0x0d) as a discrete\n // argv element (the JS char '\\x0d') with --no-paste, so the CR is\n // delivered literally rather than wrapped in paste brackets. The\n // equivalent shell command is:\n // wezterm cli send-text --pane-id <id> --no-paste $'\\x0d'\n // (ANSI-C quoting, note the leading $).\n await TtyWriter.execFileWithInput(\n \"wezterm\",\n [\"cli\", \"send-text\", \"--pane-id\", paneId],\n message,\n );\n await new Promise((resolve) => setTimeout(resolve, 150));\n await execFileAsync(\"wezterm\", [\n \"cli\",\n \"send-text\",\n \"--pane-id\",\n paneId,\n \"--no-paste\",\n CARRIAGE_RETURN,\n ]);\n }\n\n private static async sendViaTmux(identifier: string, message: string): Promise<void> {\n // Paste the message body using tmux bracketed paste, then send Enter as\n // a separate key so the inner TUI treats it as submission rather than\n // pasted content.\n const bufferName = `ai-devkit-send-${process.pid}-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n await TtyWriter.execFileWithInput(\"tmux\", [\"load-buffer\", \"-b\", bufferName, \"-\"], message);\n await execFileAsync(\"tmux\", [\"paste-buffer\", \"-t\", identifier, \"-b\", bufferName, \"-p\", \"-d\"]);\n await new Promise((resolve) => setTimeout(resolve, 150));\n await execFileAsync(\"tmux\", [\"send-keys\", \"-t\", identifier, \"Enter\"]);\n }\n\n private static async execFileWithInput(\n command: string,\n args: string[],\n input: string,\n ): Promise<void> {\n await new Promise<void>((resolve, reject) => {\n const child = execFile(command, args, (error) => {\n if (error) {\n reject(error);\n return;\n }\n resolve();\n });\n if (!child.stdin) {\n reject(new Error(`Cannot write stdin to ${command}`));\n return;\n }\n child.stdin.end(input);\n });\n }\n\n /**\n * Build an AppleScript that finds an iTerm2 session by TTY and runs a\n * command against it. The `sessionCommand` is inserted inside a\n * `tell targetSession` block.\n */\n private static iterm2SessionScript(tty: string, sessionCommand: string): string {\n return `\ntell application \"iTerm\"\n set targetSession to missing value\n repeat with w in windows\n repeat with t in tabs of w\n repeat with s in sessions of t\n if tty of s is \"${tty}\" then\n set targetSession to s\n exit repeat\n end if\n end repeat\n if targetSession is not missing value then exit repeat\n end repeat\n if targetSession is not missing value then exit repeat\n end repeat\n if targetSession is missing value then return \"not_found\"\n tell targetSession to ${sessionCommand}\nend tell\nreturn \"ok\"`;\n }\n\n private static async sendViaITerm2(tty: string, message: string): Promise<void> {\n const escaped = escapeAppleScript(message);\n // Send text and Enter as two separate write text calls so the newline\n // is delivered outside the bracketed paste sequence of the message body.\n // iTerm2 appends the newline after the paste-end marker (\\e[201~), so\n // the inner TUI (Claude Code, Codex) sees it as a real submit action.\n const textScript = TtyWriter.iterm2SessionScript(tty, `write text \"${escaped}\" newline no`);\n\n const { stdout: textResult } = await execFileAsync(\"osascript\", [\"-e\", textScript]);\n if (textResult.trim() !== \"ok\") {\n throw new Error(`iTerm2 session not found for TTY ${tty}`);\n }\n\n // Wait for the paste to complete before sending Enter separately\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n const enterScript = TtyWriter.iterm2SessionScript(tty, 'write text \"\" newline yes');\n const { stdout: enterResult } = await execFileAsync(\"osascript\", [\"-e\", enterScript]);\n if (enterResult.trim() !== \"ok\") {\n throw new Error(`iTerm2 session disappeared before Enter could be sent for TTY ${tty}`);\n }\n }\n\n private static async sendViaTerminalApp(tty: string, message: string): Promise<void> {\n const escaped = escapeAppleScript(message);\n // Use Terminal.app's `do script` to send text to the correct tab by TTY.\n // We avoid System Events `keystroke` + `key code 36` because it requires\n // accessibility permissions and unreliably delivers the Return key.\n //\n // `do script` with `in` targets a specific tab without opening a new one.\n // We send text and Enter as two separate calls so the newline arrives\n // outside of bracketed paste mode — same pattern as iTerm2 and tmux.\n const textScript = `\ntell application \"Terminal\"\n set targetTab to missing value\n repeat with w in windows\n repeat with i from 1 to count of tabs of w\n set t to tab i of w\n if tty of t is \"${tty}\" then\n set targetTab to t\n exit repeat\n end if\n end repeat\n if targetTab is not missing value then exit repeat\n end repeat\n if targetTab is missing value then return \"not_found\"\n do script \"${escaped}\" in targetTab\nend tell\nreturn \"ok\"`;\n\n const { stdout: textResult } = await execFileAsync(\"osascript\", [\"-e\", textScript]);\n if (textResult.trim() !== \"ok\") {\n throw new Error(`Terminal.app tab not found for TTY ${tty}`);\n }\n\n // Wait for the text to be delivered before sending Enter\n await new Promise((resolve) => setTimeout(resolve, 150));\n\n const enterScript = `\ntell application \"Terminal\"\n set targetTab to missing value\n repeat with w in windows\n repeat with i from 1 to count of tabs of w\n set t to tab i of w\n if tty of t is \"${tty}\" then\n set targetTab to t\n exit repeat\n end if\n end repeat\n if targetTab is not missing value then exit repeat\n end repeat\n if targetTab is missing value then return \"not_found\"\n do script \"\" in targetTab\nend tell\nreturn \"ok\"`;\n\n const { stdout: enterResult } = await execFileAsync(\"osascript\", [\"-e\", enterScript]);\n if (enterResult.trim() !== \"ok\") {\n throw new Error(`Terminal.app tab disappeared before Enter could be sent for TTY ${tty}`);\n }\n }\n}\n\n/**\n * AppleScript `keystroke` only delivers typeable characters; non-typeable\n * keys (Esc, arrows, F-keys, …) must be sent via `key code <N>`. Add more\n * mappings here as new special keys are needed.\n */\nfunction appleScriptKeyAction(key: string): string {\n if (key === ESCAPE_BYTE) return \"key code 53\";\n return `keystroke \"${escapeAppleScript(key)}\"`;\n}\n"],"names":["execFile","promisify","TerminalType","escapeAppleScript","execFileAsync","CARRIAGE_RETURN","ESCAPE_BYTE","TtyWriter","send","location","message","type","TMUX","sendViaTmux","identifier","WEZTERM","sendViaWezterm","ITERM2","sendViaITerm2","tty","TERMINAL_APP","sendViaTerminalApp","Error","sendKey","key","sendKeyViaTmux","sendKeyViaWezterm","sendKeyViaITerm2","sendKeyViaTerminalApp","arg","paneId","action","appleScriptKeyAction","script","stdout","trim","execFileWithInput","Promise","resolve","setTimeout","bufferName","process","pid","Date","now","Math","random","toString","slice","command","args","input","reject","child","error","stdin","end","iterm2SessionScript","sessionCommand","escaped","textScript","textResult","enterScript","enterResult"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,SAAS,QAAQ,OAAO;AAEjC,SAASC,YAAY,QAAQ,4BAA4B;AACzD,SAASC,iBAAiB,QAAQ,0BAA0B;AAE5D,MAAMC,gBAAgBH,UAAUD;AAEhC;;;CAGC,GACD,MAAMK,kBAAkB;AAExB;;;;CAIC,GACD,MAAMC,cAAc;AAEpB,OAAO,MAAMC;IACX;;;;;;;;;;;;;;GAcC,GACD,aAAaC,KAAKC,QAA0B,EAAEC,OAAe,EAAiB;QAC5E,OAAQD,SAASE,IAAI;YACnB,KAAKT,aAAaU,IAAI;gBACpB,OAAOL,UAAUM,WAAW,CAACJ,SAASK,UAAU,EAAEJ;YACpD,KAAKR,aAAaa,OAAO;gBACvB,OAAOR,UAAUS,cAAc,CAACP,SAASK,UAAU,EAAEJ;YACvD,KAAKR,aAAae,MAAM;gBACtB,OAAOV,UAAUW,aAAa,CAACT,SAASU,GAAG,EAAET;YAC/C,KAAKR,aAAakB,YAAY;gBAC5B,OAAOb,UAAUc,kBAAkB,CAACZ,SAASU,GAAG,EAAET;YACpD;gBACE,MAAM,IAAIY,MACR,CAAC,8CAA8C,EAAEb,SAASE,IAAI,CAAC,GAAG,CAAC,GACjE;QAER;IACF;IAEA;;;;;;;;;;;;GAYC,GACD,aAAaY,QAAQd,QAA0B,EAAEe,GAAW,EAAiB;QAC3E,OAAQf,SAASE,IAAI;YACnB,KAAKT,aAAaU,IAAI;gBACpB,OAAOL,UAAUkB,cAAc,CAAChB,SAASK,UAAU,EAAEU;YACvD,KAAKtB,aAAaa,OAAO;gBACvB,OAAOR,UAAUmB,iBAAiB,CAACjB,SAASK,UAAU,EAAEU;YAC1D,KAAKtB,aAAae,MAAM;gBACtB,OAAOV,UAAUoB,gBAAgB,CAAClB,SAASU,GAAG,EAAEK;YAClD,KAAKtB,aAAakB,YAAY;gBAC5B,OAAOb,UAAUqB,qBAAqB,CAACnB,SAASU,GAAG,EAAEK;YACvD;gBACE,MAAM,IAAIF,MACR,CAAC,4CAA4C,EAAEb,SAASE,IAAI,CAAC,GAAG,CAAC,GAC/D;QAER;IACF;IAEA,aAAqBc,eAAeX,UAAkB,EAAEU,GAAW,EAAiB;QAClF,oEAAoE;QACpE,8DAA8D;QAC9D,MAAMK,MAAML,QAAQlB,cAAc,WAAWkB;QAC7C,MAAMpB,cAAc,QAAQ;YAAC;YAAa;YAAMU;YAAYe;SAAI;IAClE;IAEA,aAAqBH,kBAAkBI,MAAc,EAAEN,GAAW,EAAiB;QACjF,sEAAsE;QACtE,mEAAmE;QACnE,6BAA6B;QAC7B,MAAMpB,cAAc,WAAW;YAAC;YAAO;YAAa;YAAa0B;YAAQ;YAAcN;SAAI;IAC7F;IAEA,aAAqBG,iBAAiBR,GAAW,EAAEK,GAAW,EAAiB;QAC7E,wEAAwE;QACxE,mEAAmE;QACnE,MAAMO,SAASC,qBAAqBR;QACpC,MAAMS,SAAS,CAAC;;;;;;wBAMI,EAAEd,IAAI;;;;;;;;;;;;;;;oCAeM,EAAEY,OAAO;WAClC,CAAC;QAER,MAAM,EAAEG,MAAM,EAAE,GAAG,MAAM9B,cAAc,aAAa;YAAC;YAAM6B;SAAO;QAClE,IAAIC,OAAOC,IAAI,OAAO,MAAM;YAC1B,MAAM,IAAIb,MAAM,CAAC,iCAAiC,EAAEH,KAAK;QAC3D;IACF;IAEA,aAAqBS,sBAAsBT,GAAW,EAAEK,GAAW,EAAiB;QAClF,MAAMO,SAASC,qBAAqBR;QACpC,MAAMS,SAAS,CAAC;;;;;;;sBAOE,EAAEd,IAAI;;;;;;;;;;;;;oCAaQ,EAAEY,OAAO;WAClC,CAAC;QAER,MAAM,EAAEG,MAAM,EAAE,GAAG,MAAM9B,cAAc,aAAa;YAAC;YAAM6B;SAAO;QAClE,IAAIC,OAAOC,IAAI,OAAO,MAAM;YAC1B,MAAM,IAAIb,MAAM,CAAC,mCAAmC,EAAEH,KAAK;QAC7D;IACF;IAEA,aAAqBH,eAAec,MAAc,EAAEpB,OAAe,EAAiB;QAClF,wEAAwE;QACxE,uEAAuE;QACvE,0BAA0B;QAC1B,EAAE;QACF,uEAAuE;QACvE,mEAAmE;QACnE,6DAA6D;QAC7D,oEAAoE;QACpE,kEAAkE;QAClE,iEAAiE;QACjE,+BAA+B;QAC/B,4DAA4D;QAC5D,wCAAwC;QACxC,MAAMH,UAAU6B,iBAAiB,CAC/B,WACA;YAAC;YAAO;YAAa;YAAaN;SAAO,EACzCpB;QAEF,MAAM,IAAI2B,QAAQ,CAACC,UAAYC,WAAWD,SAAS;QACnD,MAAMlC,cAAc,WAAW;YAC7B;YACA;YACA;YACA0B;YACA;YACAzB;SACD;IACH;IAEA,aAAqBQ,YAAYC,UAAkB,EAAEJ,OAAe,EAAiB;QACnF,wEAAwE;QACxE,sEAAsE;QACtE,kBAAkB;QAClB,MAAM8B,aAAa,CAAC,eAAe,EAAEC,QAAQC,GAAG,CAAC,CAAC,EAAEC,KAAKC,GAAG,GAAG,CAAC,EAAEC,KAAKC,MAAM,GAAGC,QAAQ,CAAC,IAAIC,KAAK,CAAC,IAAI;QACvG,MAAMzC,UAAU6B,iBAAiB,CAAC,QAAQ;YAAC;YAAe;YAAMI;YAAY;SAAI,EAAE9B;QAClF,MAAMN,cAAc,QAAQ;YAAC;YAAgB;YAAMU;YAAY;YAAM0B;YAAY;YAAM;SAAK;QAC5F,MAAM,IAAIH,QAAQ,CAACC,UAAYC,WAAWD,SAAS;QACnD,MAAMlC,cAAc,QAAQ;YAAC;YAAa;YAAMU;YAAY;SAAQ;IACtE;IAEA,aAAqBsB,kBACnBa,OAAe,EACfC,IAAc,EACdC,KAAa,EACE;QACf,MAAM,IAAId,QAAc,CAACC,SAASc;YAChC,MAAMC,QAAQrD,SAASiD,SAASC,MAAM,CAACI;gBACrC,IAAIA,OAAO;oBACTF,OAAOE;oBACP;gBACF;gBACAhB;YACF;YACA,IAAI,CAACe,MAAME,KAAK,EAAE;gBAChBH,OAAO,IAAI9B,MAAM,CAAC,sBAAsB,EAAE2B,SAAS;gBACnD;YACF;YACAI,MAAME,KAAK,CAACC,GAAG,CAACL;QAClB;IACF;IAEA;;;;GAIC,GACD,OAAeM,oBAAoBtC,GAAW,EAAEuC,cAAsB,EAAU;QAC9E,OAAO,CAAC;;;;;;wBAMY,EAAEvC,IAAI;;;;;;;;;;wBAUN,EAAEuC,eAAe;;WAE9B,CAAC;IACV;IAEA,aAAqBxC,cAAcC,GAAW,EAAET,OAAe,EAAiB;QAC9E,MAAMiD,UAAUxD,kBAAkBO;QAClC,sEAAsE;QACtE,yEAAyE;QACzE,sEAAsE;QACtE,sEAAsE;QACtE,MAAMkD,aAAarD,UAAUkD,mBAAmB,CAACtC,KAAK,CAAC,YAAY,EAAEwC,QAAQ,YAAY,CAAC;QAE1F,MAAM,EAAEzB,QAAQ2B,UAAU,EAAE,GAAG,MAAMzD,cAAc,aAAa;YAAC;YAAMwD;SAAW;QAClF,IAAIC,WAAW1B,IAAI,OAAO,MAAM;YAC9B,MAAM,IAAIb,MAAM,CAAC,iCAAiC,EAAEH,KAAK;QAC3D;QAEA,iEAAiE;QACjE,MAAM,IAAIkB,QAAQ,CAACC,UAAYC,WAAWD,SAAS;QAEnD,MAAMwB,cAAcvD,UAAUkD,mBAAmB,CAACtC,KAAK;QACvD,MAAM,EAAEe,QAAQ6B,WAAW,EAAE,GAAG,MAAM3D,cAAc,aAAa;YAAC;YAAM0D;SAAY;QACpF,IAAIC,YAAY5B,IAAI,OAAO,MAAM;YAC/B,MAAM,IAAIb,MAAM,CAAC,8DAA8D,EAAEH,KAAK;QACxF;IACF;IAEA,aAAqBE,mBAAmBF,GAAW,EAAET,OAAe,EAAiB;QACnF,MAAMiD,UAAUxD,kBAAkBO;QAClC,yEAAyE;QACzE,yEAAyE;QACzE,oEAAoE;QACpE,EAAE;QACF,0EAA0E;QAC1E,sEAAsE;QACtE,qEAAqE;QACrE,MAAMkD,aAAa,CAAC;;;;;;sBAMF,EAAEzC,IAAI;;;;;;;;aAQf,EAAEwC,QAAQ;;WAEZ,CAAC;QAER,MAAM,EAAEzB,QAAQ2B,UAAU,EAAE,GAAG,MAAMzD,cAAc,aAAa;YAAC;YAAMwD;SAAW;QAClF,IAAIC,WAAW1B,IAAI,OAAO,MAAM;YAC9B,MAAM,IAAIb,MAAM,CAAC,mCAAmC,EAAEH,KAAK;QAC7D;QAEA,yDAAyD;QACzD,MAAM,IAAIkB,QAAQ,CAACC,UAAYC,WAAWD,SAAS;QAEnD,MAAMwB,cAAc,CAAC;;;;;;sBAMH,EAAE3C,IAAI;;;;;;;;;;WAUjB,CAAC;QAER,MAAM,EAAEe,QAAQ6B,WAAW,EAAE,GAAG,MAAM3D,cAAc,aAAa;YAAC;YAAM0D;SAAY;QACpF,IAAIC,YAAY5B,IAAI,OAAO,MAAM;YAC/B,MAAM,IAAIb,MAAM,CAAC,gEAAgE,EAAEH,KAAK;QAC1F;IACF;AACF;AAEA;;;;CAIC,GACD,SAASa,qBAAqBR,GAAW;IACvC,IAAIA,QAAQlB,aAAa,OAAO;IAChC,OAAO,CAAC,WAAW,EAAEH,kBAAkBqB,KAAK,CAAC,CAAC;AAChD"}
1
+ {"version":3,"sources":["../../src/terminal/TtyWriter.ts"],"sourcesContent":["import { terminalBackendFor } from \"./backends/index.js\";\nimport type { TerminalLocation } from \"./types.js\";\n\nexport class TtyWriter {\n static async send(location: TerminalLocation, message: string): Promise<void> {\n const backend = terminalBackendFor(location.type);\n if (!backend) {\n throw new Error(\n `Cannot send input: unsupported terminal type \"${location.type}\". ` +\n \"Supported: tmux, WezTerm, iTerm2, Terminal.app.\",\n );\n }\n await backend.send(location, message);\n }\n\n static async sendKey(location: TerminalLocation, key: string): Promise<void> {\n const backend = terminalBackendFor(location.type);\n if (!backend) {\n throw new Error(\n `Cannot send key: unsupported terminal type \"${location.type}\". ` +\n \"Supported: tmux, WezTerm, iTerm2, Terminal.app.\",\n );\n }\n await backend.sendKey(location, key);\n }\n}\n"],"names":["terminalBackendFor","TtyWriter","send","location","message","backend","type","Error","sendKey","key"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,sBAAsB;AAGzD,OAAO,MAAMC;IACX,aAAaC,KAAKC,QAA0B,EAAEC,OAAe,EAAiB;QAC5E,MAAMC,UAAUL,mBAAmBG,SAASG,IAAI;QAChD,IAAI,CAACD,SAAS;YACZ,MAAM,IAAIE,MACR,CAAC,8CAA8C,EAAEJ,SAASG,IAAI,CAAC,GAAG,CAAC,GACjE;QAEN;QACA,MAAMD,QAAQH,IAAI,CAACC,UAAUC;IAC/B;IAEA,aAAaI,QAAQL,QAA0B,EAAEM,GAAW,EAAiB;QAC3E,MAAMJ,UAAUL,mBAAmBG,SAASG,IAAI;QAChD,IAAI,CAACD,SAAS;YACZ,MAAM,IAAIE,MACR,CAAC,4CAA4C,EAAEJ,SAASG,IAAI,CAAC,GAAG,CAAC,GAC/D;QAEN;QACA,MAAMD,QAAQG,OAAO,CAACL,UAAUM;IAClC;AACF"}
@@ -0,0 +1,5 @@
1
+ import type { TerminalBackend } from "../types.js";
2
+ import { TerminalType } from "../types.js";
3
+ export declare const TERMINAL_BACKENDS: readonly TerminalBackend[];
4
+ export declare function terminalBackendFor(type: TerminalType): TerminalBackend | undefined;
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/terminal/backends/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAM3C,eAAO,MAAM,iBAAiB,EAAE,SAAS,eAAe,EAKvD,CAAC;AAMF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,eAAe,GAAG,SAAS,CAElF"}
@@ -0,0 +1,19 @@
1
+ import { iterm2Backend } from "./iterm2.js";
2
+ import { terminalAppBackend } from "./terminal-app.js";
3
+ import { tmuxBackend } from "./tmux.js";
4
+ import { weztermBackend } from "./wezterm.js";
5
+ export const TERMINAL_BACKENDS = [
6
+ tmuxBackend,
7
+ weztermBackend,
8
+ iterm2Backend,
9
+ terminalAppBackend
10
+ ];
11
+ const BACKENDS_BY_TYPE = new Map(TERMINAL_BACKENDS.map((backend)=>[
12
+ backend.type,
13
+ backend
14
+ ]));
15
+ export function terminalBackendFor(type) {
16
+ return BACKENDS_BY_TYPE.get(type);
17
+ }
18
+
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/terminal/backends/index.ts"],"sourcesContent":["import type { TerminalBackend } from \"../types.js\";\nimport { TerminalType } from \"../types.js\";\nimport { iterm2Backend } from \"./iterm2.js\";\nimport { terminalAppBackend } from \"./terminal-app.js\";\nimport { tmuxBackend } from \"./tmux.js\";\nimport { weztermBackend } from \"./wezterm.js\";\n\nexport const TERMINAL_BACKENDS: readonly TerminalBackend[] = [\n tmuxBackend,\n weztermBackend,\n iterm2Backend,\n terminalAppBackend,\n];\n\nconst BACKENDS_BY_TYPE = new Map<TerminalType, TerminalBackend>(\n TERMINAL_BACKENDS.map((backend) => [backend.type, backend]),\n);\n\nexport function terminalBackendFor(type: TerminalType): TerminalBackend | undefined {\n return BACKENDS_BY_TYPE.get(type);\n}\n"],"names":["iterm2Backend","terminalAppBackend","tmuxBackend","weztermBackend","TERMINAL_BACKENDS","BACKENDS_BY_TYPE","Map","map","backend","type","terminalBackendFor","get"],"mappings":"AAEA,SAASA,aAAa,QAAQ,cAAc;AAC5C,SAASC,kBAAkB,QAAQ,oBAAoB;AACvD,SAASC,WAAW,QAAQ,YAAY;AACxC,SAASC,cAAc,QAAQ,eAAe;AAE9C,OAAO,MAAMC,oBAAgD;IAC3DF;IACAC;IACAH;IACAC;CACD,CAAC;AAEF,MAAMI,mBAAmB,IAAIC,IAC3BF,kBAAkBG,GAAG,CAAC,CAACC,UAAY;QAACA,QAAQC,IAAI;QAAED;KAAQ;AAG5D,OAAO,SAASE,mBAAmBD,IAAkB;IACnD,OAAOJ,iBAAiBM,GAAG,CAACF;AAC9B"}
@@ -0,0 +1,3 @@
1
+ import { type TerminalBackend } from "../types.js";
2
+ export declare const iterm2Backend: TerminalBackend;
3
+ //# sourceMappingURL=iterm2.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"iterm2.d.ts","sourceRoot":"","sources":["../../../src/terminal/backends/iterm2.ts"],"names":[],"mappings":"AAGA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,aAAa,CAAC;AA2BjE,eAAO,MAAM,aAAa,EAAE,eA+F3B,CAAC"}
@@ -0,0 +1,135 @@
1
+ import { execFile } from "child_process";
2
+ import { promisify } from "util";
3
+ import { escapeAppleScript } from "../../utils/applescript.js";
4
+ import { TerminalType } from "../types.js";
5
+ import { appleScriptKeyAction, isProcessRunning, sleep } from "./shared.js";
6
+ const execFileAsync = promisify(execFile);
7
+ function sessionScript(tty, sessionCommand) {
8
+ return `
9
+ tell application "iTerm"
10
+ set targetSession to missing value
11
+ repeat with w in windows
12
+ repeat with t in tabs of w
13
+ repeat with s in sessions of t
14
+ if tty of s is "${escapeAppleScript(tty)}" then
15
+ set targetSession to s
16
+ exit repeat
17
+ end if
18
+ end repeat
19
+ if targetSession is not missing value then exit repeat
20
+ end repeat
21
+ if targetSession is not missing value then exit repeat
22
+ end repeat
23
+ if targetSession is missing value then return "not_found"
24
+ tell targetSession to ${sessionCommand}
25
+ end tell
26
+ return "ok"`;
27
+ }
28
+ export const iterm2Backend = {
29
+ type: TerminalType.ITERM2,
30
+ label: "iTerm2",
31
+ async find (tty) {
32
+ try {
33
+ if (!await isProcessRunning("iTerm2")) return null;
34
+ const script = `
35
+ tell application "iTerm"
36
+ repeat with w in windows
37
+ repeat with t in tabs of w
38
+ repeat with s in sessions of t
39
+ if tty of s is "${escapeAppleScript(tty)}" then
40
+ return "found"
41
+ end if
42
+ end repeat
43
+ end repeat
44
+ end repeat
45
+ end tell
46
+ `;
47
+ const { stdout } = await execFileAsync("osascript", [
48
+ "-e",
49
+ script
50
+ ]);
51
+ return stdout.trim() === "found" ? {
52
+ type: TerminalType.ITERM2,
53
+ identifier: tty,
54
+ tty
55
+ } : null;
56
+ } catch {
57
+ return null;
58
+ }
59
+ },
60
+ async focus (location) {
61
+ const script = `
62
+ tell application "iTerm"
63
+ activate
64
+ repeat with w in windows
65
+ repeat with t in tabs of w
66
+ repeat with s in sessions of t
67
+ if tty of s is "${escapeAppleScript(location.tty)}" then
68
+ select s
69
+ return "true"
70
+ end if
71
+ end repeat
72
+ end repeat
73
+ end repeat
74
+ end tell
75
+ `;
76
+ const { stdout } = await execFileAsync("osascript", [
77
+ "-e",
78
+ script
79
+ ]);
80
+ return stdout.trim() === "true";
81
+ },
82
+ async send (location, message) {
83
+ const textScript = sessionScript(location.tty, `write text "${escapeAppleScript(message)}" newline no`);
84
+ const { stdout: textResult } = await execFileAsync("osascript", [
85
+ "-e",
86
+ textScript
87
+ ]);
88
+ if (textResult.trim() !== "ok") {
89
+ throw new Error(`iTerm2 session not found for TTY ${location.tty}`);
90
+ }
91
+ await sleep(150);
92
+ const enterScript = sessionScript(location.tty, 'write text "" newline yes');
93
+ const { stdout: enterResult } = await execFileAsync("osascript", [
94
+ "-e",
95
+ enterScript
96
+ ]);
97
+ if (enterResult.trim() !== "ok") {
98
+ throw new Error(`iTerm2 session disappeared before Enter could be sent for TTY ${location.tty}`);
99
+ }
100
+ },
101
+ async sendKey (location, key) {
102
+ const script = `
103
+ tell application "iTerm"
104
+ set targetSession to missing value
105
+ repeat with w in windows
106
+ repeat with t in tabs of w
107
+ repeat with s in sessions of t
108
+ if tty of s is "${escapeAppleScript(location.tty)}" then
109
+ set targetSession to s
110
+ set frontmost of w to true
111
+ tell t to select
112
+ tell s to select
113
+ exit repeat
114
+ end if
115
+ end repeat
116
+ if targetSession is not missing value then exit repeat
117
+ end repeat
118
+ if targetSession is not missing value then exit repeat
119
+ end repeat
120
+ if targetSession is missing value then return "not_found"
121
+ activate
122
+ end tell
123
+ tell application "System Events" to ${appleScriptKeyAction(key)}
124
+ return "ok"`;
125
+ const { stdout } = await execFileAsync("osascript", [
126
+ "-e",
127
+ script
128
+ ]);
129
+ if (stdout.trim() !== "ok") {
130
+ throw new Error(`iTerm2 session not found for TTY ${location.tty}`);
131
+ }
132
+ }
133
+ };
134
+
135
+ //# sourceMappingURL=iterm2.js.map