@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 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/gemini/GeminiCliAdapter.ts"],"sourcesContent":["/**\n * Gemini CLI Adapter\n *\n * Detects running Gemini CLI agents by:\n * 1. Filtering Gemini Node processes from a shared asynchronous process snapshot\n * 2. Using snapshot CWD and start-time enrichment\n * 3. Discovering session files from ~/.gemini/tmp/<shortId>/chats/session-*.json\n * 4. Matching sessions to processes via shared matchProcessesToSessions()\n * using sha256(cwd) === session.projectHash as the resolvedCwd source\n * 5. Extracting summary from the most recent user message in the session JSON\n */\n\nimport type {\n AgentAdapter,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from \"../../adapters/AgentAdapter.js\";\nimport {\n captureProcessSnapshot,\n executableBasename,\n filterByProcessNames,\n findWrapperProcess,\n findWrapperProcessPids,\n} from \"../../utils/process.js\";\nimport { matchProcessesToSessions } from \"../../utils/matching.js\";\nimport { AgentRegistry, type RegistryEntry } from \"../../utils/AgentRegistry.js\";\nimport { GeminiAgentMapper } from \"./GeminiAgentMapper.js\";\nimport { GeminiSessionLocator, type GeminiSessionDiscovery } from \"./GeminiSessionLocator.js\";\nimport { GeminiSessionParser } from \"./GeminiSessionParser.js\";\n\nexport interface GeminiCliAdapterOptions {\n geminiTmpDir?: string;\n}\n\nexport class GeminiCliAdapter implements AgentAdapter {\n readonly type = \"gemini_cli\" as const;\n readonly processNames = [\"node\"] as const;\n\n private readonly registry: AgentRegistry;\n private readonly parser: GeminiSessionParser;\n private readonly mapper: GeminiAgentMapper;\n private readonly locator: GeminiSessionLocator;\n\n constructor(\n registry: AgentRegistry = AgentRegistry.default(),\n options: GeminiCliAdapterOptions = {},\n ) {\n this.registry = registry;\n this.parser = new GeminiSessionParser();\n this.mapper = new GeminiAgentMapper(this.parser);\n this.locator = new GeminiSessionLocator(options);\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return this.isGeminiExecutable(processInfo.command);\n }\n\n /**\n * Detect running Gemini CLI agents.\n *\n * Gemini CLI ships as a Node script (`bundle/gemini.js` with shebang\n * `#!/usr/bin/env node`) — unlike Claude Code (native binary per\n * platform) or Codex CLI (Node wrapper that execs a native Rust\n * binary). The primary running process is therefore the Node runtime\n * itself, and `ps aux` lists it as `node /path/to/gemini ...` with\n * argv[0] = `node`. We scan the Node process pool via the shared\n * snapshot and keep only those whose command line references the gemini\n * executable or script via isGeminiExecutable().\n */\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const processes = await this.getGeminiProcesses(context);\n if (processes.length === 0) return [];\n\n const wrapperPids = findWrapperProcessPids(processes);\n const { cachedAgents, remaining } = this.tryRegistryCache(processes, wrapperPids);\n if (remaining.length === 0) return this.deduplicateSessionAgents(cachedAgents);\n\n const candidateProcesses = remaining.filter((proc) => !wrapperPids.has(proc.pid));\n const registryEntriesByPid = new Map(this.registry.list().map((entry) => [entry.pid, entry]));\n const discovery = this.locator.discoverSessions(candidateProcesses);\n\n const agents =\n discovery.sessions.length === 0\n ? this.mapProcessOnlyAgents(candidateProcesses, processes, registryEntriesByPid)\n : this.mapSessionDiscovery(discovery, candidateProcesses, processes, registryEntriesByPid);\n\n return this.deduplicateSessionAgents([...cachedAgents, ...agents]);\n }\n\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n return this.parser.getConversation(sessionFilePath, options);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n const summaries: SessionSummary[] = [];\n\n for (const filePath of this.locator.discoverHistoricalSessionFiles()) {\n const summary = this.parser.fileToSessionSummary(filePath);\n if (!summary) continue;\n if (opts?.cwd !== undefined && summary.cwd !== opts.cwd) continue;\n summaries.push(summary);\n }\n\n return summaries;\n }\n\n async findSessionsById(sessionId: string): Promise<SessionSummary[]> {\n for (const filePath of this.locator.discoverHistoricalSessionFiles()) {\n const summary = this.parser.fileToSessionSummary(filePath);\n if (summary?.sessionId === sessionId) return [summary];\n }\n return [];\n }\n\n private async getGeminiProcesses(context?: AgentDetectionContext): Promise<ProcessInfo[]> {\n const snapshot = context?.processes ?? (await captureProcessSnapshot(this.processNames));\n const relevant = filterByProcessNames(snapshot, this.processNames);\n return relevant.filter((process) => this.canHandle(process));\n }\n\n private mapSessionDiscovery(\n discovery: GeminiSessionDiscovery,\n candidateProcesses: ProcessInfo[],\n allProcesses: ProcessInfo[],\n registryEntriesByPid: Map<number, RegistryEntry>,\n ): AgentInfo[] {\n const matches = matchProcessesToSessions(candidateProcesses, discovery.sessions);\n const matchedPids = new Set(matches.map((m) => m.process.pid));\n const matchedProcesses: ProcessInfo[] = [];\n const agents: AgentInfo[] = [];\n\n for (const match of matches) {\n const cachedContent = discovery.contentCache.get(match.session.filePath);\n const sessionData = this.parser.parseSession(cachedContent, match.session.filePath);\n if (!sessionData) {\n matchedPids.delete(match.process.pid);\n continue;\n }\n\n const agent = this.mapper.mapSessionToAgent(\n sessionData,\n match.process,\n match.session.filePath,\n );\n this.applyWrapperRegistryName(agent, match.process, allProcesses, registryEntriesByPid);\n agents.push(agent);\n matchedProcesses.push(match.process);\n }\n\n const matchedWrapperPids = findWrapperProcessPids(candidateProcesses, matchedProcesses);\n const unmatchedProcesses = candidateProcesses.filter(\n (process) => !matchedPids.has(process.pid) && !matchedWrapperPids.has(process.pid),\n );\n\n agents.push(\n ...this.mapProcessOnlyAgents(unmatchedProcesses, allProcesses, registryEntriesByPid),\n );\n return agents;\n }\n\n private mapProcessOnlyAgents(\n processes: ProcessInfo[],\n allProcesses: ProcessInfo[],\n registryEntriesByPid: Map<number, RegistryEntry>,\n ): AgentInfo[] {\n return processes.map((processInfo) => {\n const agent = this.mapper.mapProcessOnlyAgent(processInfo);\n this.applyWrapperRegistryName(agent, processInfo, allProcesses, registryEntriesByPid);\n return agent;\n });\n }\n\n private applyWrapperRegistryName(\n agent: AgentInfo,\n processInfo: ProcessInfo,\n processes: ProcessInfo[],\n registryEntriesByPid: Map<number, RegistryEntry>,\n ): void {\n const wrapper = findWrapperProcess(processes, processInfo);\n const wrapperEntry = wrapper ? registryEntriesByPid.get(wrapper.pid) : undefined;\n if (wrapperEntry?.type === this.type) {\n agent.name = wrapperEntry.name;\n }\n }\n\n private deduplicateSessionAgents(agents: AgentInfo[]): AgentInfo[] {\n const bySession = new Map<string, AgentInfo>();\n const result: AgentInfo[] = [];\n\n for (const agent of agents) {\n const sessionKey = this.sessionDeduplicationKey(agent);\n if (!sessionKey) {\n result.push(agent);\n continue;\n }\n\n const existing = bySession.get(sessionKey);\n if (!existing) {\n bySession.set(sessionKey, agent);\n result.push(agent);\n continue;\n }\n\n if (agent.pid > existing.pid) {\n bySession.set(sessionKey, agent);\n const index = result.indexOf(existing);\n if (index >= 0) result[index] = agent;\n }\n }\n\n return result;\n }\n\n private sessionDeduplicationKey(agent: AgentInfo): string | null {\n if (agent.sessionFilePath) return `file:${agent.sessionFilePath}`;\n if (agent.sessionId && !agent.sessionId.startsWith(\"pid-\")) {\n return `session:${agent.sessionId}`;\n }\n return null;\n }\n\n private tryRegistryCache(\n processes: ProcessInfo[],\n wrapperPids: Set<number>,\n ): {\n cachedAgents: AgentInfo[];\n remaining: ProcessInfo[];\n } {\n const cachedAgents: AgentInfo[] = [];\n const remaining: ProcessInfo[] = [];\n const byPid = new Map(this.registry.list().map((e) => [e.pid, e]));\n\n for (const proc of processes) {\n const entry = byPid.get(proc.pid);\n if (\n wrapperPids.has(proc.pid) ||\n !entry ||\n entry.type !== this.type ||\n !entry.sessionFilePath\n ) {\n remaining.push(proc);\n continue;\n }\n\n const sessionData = this.parser.parseSession(undefined, entry.sessionFilePath);\n if (!sessionData) {\n remaining.push(proc);\n continue;\n }\n\n cachedAgents.push(this.mapper.mapSessionToAgent(sessionData, proc, entry.sessionFilePath));\n }\n\n return { cachedAgents, remaining };\n }\n\n private isGeminiExecutable(command: string): boolean {\n // Accept any token in the command line whose basename matches a\n // known gemini entrypoint. This is intentionally broader than the\n // other adapters' argv[0]-only check because the Node-script\n // distribution puts the real gemini path in argv[1..], not argv[0].\n for (const token of command.trim().split(/\\s+/)) {\n const base = executableBasename(token);\n if (base === \"gemini\" || base === \"gemini.exe\" || base === \"gemini.js\") {\n return true;\n }\n }\n return false;\n }\n}\n"],"names":["captureProcessSnapshot","executableBasename","filterByProcessNames","findWrapperProcess","findWrapperProcessPids","matchProcessesToSessions","AgentRegistry","GeminiAgentMapper","GeminiSessionLocator","GeminiSessionParser","GeminiCliAdapter","type","processNames","registry","parser","mapper","locator","default","options","canHandle","processInfo","isGeminiExecutable","command","detectAgents","context","processes","getGeminiProcesses","length","wrapperPids","cachedAgents","remaining","tryRegistryCache","deduplicateSessionAgents","candidateProcesses","filter","proc","has","pid","registryEntriesByPid","Map","list","map","entry","discovery","discoverSessions","agents","sessions","mapProcessOnlyAgents","mapSessionDiscovery","getConversation","sessionFilePath","listSessions","opts","summaries","filePath","discoverHistoricalSessionFiles","summary","fileToSessionSummary","cwd","undefined","push","findSessionsById","sessionId","snapshot","relevant","process","allProcesses","matches","matchedPids","Set","m","matchedProcesses","match","cachedContent","contentCache","get","session","sessionData","parseSession","delete","agent","mapSessionToAgent","applyWrapperRegistryName","matchedWrapperPids","unmatchedProcesses","mapProcessOnlyAgent","wrapper","wrapperEntry","name","bySession","result","sessionKey","sessionDeduplicationKey","existing","set","index","indexOf","startsWith","byPid","e","token","trim","split","base"],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- import type { ProcessInfo } from "../../adapters/AgentAdapter.js";
2
- import type { SessionFile } from "../../utils/session.js";
3
- export interface GeminiSessionDiscovery {
4
- sessions: SessionFile[];
5
- contentCache: Map<string, string>;
6
- }
7
- export interface GeminiSessionLocatorOptions {
8
- geminiTmpDir?: string;
9
- }
10
- export declare class GeminiSessionLocator {
11
- private readonly geminiTmpDir;
12
- constructor(options?: GeminiSessionLocatorOptions);
13
- /**
14
- * Discover session files for the given processes.
15
- *
16
- * Gemini CLI writes sessions to ~/.gemini/tmp/<shortId>/chats/session-*.json
17
- * where <shortId> is opaque (managed by a project registry). We scan every
18
- * shortId directory and filter by matching session.projectHash against
19
- * sha256(process.cwd) to bind each session to a candidate process CWD.
20
- */
21
- discoverSessions(processes: ProcessInfo[]): GeminiSessionDiscovery;
22
- discoverHistoricalSessionFiles(): string[];
23
- private readCandidateSession;
24
- private buildCwdHashMap;
25
- private candidateProjectRoots;
26
- private hashProjectRoot;
27
- private isSessionFile;
28
- private parseSessionMetadata;
29
- }
30
- //# sourceMappingURL=GeminiSessionLocator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GeminiSessionLocator.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/GeminiSessionLocator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACnC;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAUD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,OAAO,GAAE,2BAAgC;IAKrD;;;;;;;OAOG;IACH,gBAAgB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,sBAAsB;IAmClE,8BAA8B,IAAI,MAAM,EAAE;IAkB1C,OAAO,CAAC,oBAAoB;IAwC5B,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,qBAAqB;IAa7B,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,oBAAoB;CAO7B"}
@@ -1,142 +0,0 @@
1
- import * as crypto from "crypto";
2
- import * as fs from "fs";
3
- import * as path from "path";
4
- import { isDirectory, safeReaddir } from "../../utils/session.js";
5
- const SESSION_FILE_PREFIX = "session-";
6
- const CHATS_DIR_NAME = "chats";
7
- export class GeminiSessionLocator {
8
- geminiTmpDir;
9
- constructor(options = {}){
10
- const homeDir = process.env.HOME || process.env.USERPROFILE || "";
11
- this.geminiTmpDir = options.geminiTmpDir ?? path.join(homeDir, ".gemini", "tmp");
12
- }
13
- /**
14
- * Discover session files for the given processes.
15
- *
16
- * Gemini CLI writes sessions to ~/.gemini/tmp/<shortId>/chats/session-*.json
17
- * where <shortId> is opaque (managed by a project registry). We scan every
18
- * shortId directory and filter by matching session.projectHash against
19
- * sha256(process.cwd) to bind each session to a candidate process CWD.
20
- */ discoverSessions(processes) {
21
- const empty = {
22
- sessions: [],
23
- contentCache: new Map()
24
- };
25
- if (!fs.existsSync(this.geminiTmpDir)) return empty;
26
- const cwdHashMap = this.buildCwdHashMap(processes);
27
- if (cwdHashMap.size === 0) return empty;
28
- const contentCache = new Map();
29
- const sessions = [];
30
- let shortIdEntries;
31
- try {
32
- shortIdEntries = fs.readdirSync(this.geminiTmpDir);
33
- } catch {
34
- return empty;
35
- }
36
- for (const shortId of shortIdEntries){
37
- const chatsDir = path.join(this.geminiTmpDir, shortId, CHATS_DIR_NAME);
38
- if (!isDirectory(chatsDir)) continue;
39
- for (const fileName of safeReaddir(chatsDir)){
40
- if (!this.isSessionFile(fileName)) continue;
41
- const session = this.readCandidateSession(chatsDir, fileName, cwdHashMap);
42
- if (!session) continue;
43
- contentCache.set(session.filePath, session.content);
44
- sessions.push(session.sessionFile);
45
- }
46
- }
47
- return {
48
- sessions,
49
- contentCache
50
- };
51
- }
52
- discoverHistoricalSessionFiles() {
53
- if (!isDirectory(this.geminiTmpDir)) return [];
54
- const files = [];
55
- for (const shortId of safeReaddir(this.geminiTmpDir)){
56
- const chatsDir = path.join(this.geminiTmpDir, shortId, CHATS_DIR_NAME);
57
- if (!isDirectory(chatsDir)) continue;
58
- for (const fileName of safeReaddir(chatsDir)){
59
- if (this.isSessionFile(fileName)) {
60
- files.push(path.join(chatsDir, fileName));
61
- }
62
- }
63
- }
64
- return files;
65
- }
66
- readCandidateSession(chatsDir, fileName, cwdHashMap) {
67
- const filePath = path.join(chatsDir, fileName);
68
- let content;
69
- try {
70
- content = fs.readFileSync(filePath, "utf-8");
71
- } catch {
72
- return null;
73
- }
74
- const parsed = this.parseSessionMetadata(content);
75
- if (!parsed?.projectHash) return null;
76
- const resolvedCwd = cwdHashMap.get(parsed.projectHash);
77
- if (!resolvedCwd) return null;
78
- let birthtimeMs = 0;
79
- try {
80
- birthtimeMs = fs.statSync(filePath).birthtimeMs;
81
- } catch {
82
- return null;
83
- }
84
- return {
85
- filePath,
86
- content,
87
- sessionFile: {
88
- sessionId: parsed.sessionId || fileName.replace(/\.json$/, ""),
89
- filePath,
90
- projectDir: chatsDir,
91
- birthtimeMs,
92
- resolvedCwd
93
- }
94
- };
95
- }
96
- buildCwdHashMap(processes) {
97
- const map = new Map();
98
- for (const proc of processes){
99
- if (!proc.cwd) continue;
100
- // Gemini CLI resolves its project root by walking up from the
101
- // startup directory looking for a `.git` boundary marker. A
102
- // session's projectHash therefore tracks that ancestor rather
103
- // than the process' actual CWD. Enumerate every ancestor as a
104
- // candidate so subdirectory invocations still line up with the
105
- // session the Gemini process wrote.
106
- for (const candidate of this.candidateProjectRoots(proc.cwd)){
107
- const hash = this.hashProjectRoot(candidate);
108
- if (!map.has(hash)) {
109
- map.set(hash, proc.cwd);
110
- }
111
- }
112
- }
113
- return map;
114
- }
115
- candidateProjectRoots(cwd) {
116
- const roots = [];
117
- let current = path.resolve(cwd);
118
- let parent = path.dirname(current);
119
- while(parent !== current){
120
- roots.push(current);
121
- current = parent;
122
- parent = path.dirname(current);
123
- }
124
- roots.push(current);
125
- return roots;
126
- }
127
- hashProjectRoot(projectRoot) {
128
- return crypto.createHash("sha256").update(projectRoot).digest("hex");
129
- }
130
- isSessionFile(fileName) {
131
- return fileName.startsWith(SESSION_FILE_PREFIX) && fileName.endsWith(".json");
132
- }
133
- parseSessionMetadata(content) {
134
- try {
135
- return JSON.parse(content);
136
- } catch {
137
- return null;
138
- }
139
- }
140
- }
141
-
142
- //# sourceMappingURL=GeminiSessionLocator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/gemini/GeminiSessionLocator.ts"],"sourcesContent":["import * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport type { SessionFile } from \"../../utils/session.js\";\nimport { isDirectory, safeReaddir } from \"../../utils/session.js\";\n\nexport interface GeminiSessionDiscovery {\n sessions: SessionFile[];\n contentCache: Map<string, string>;\n}\n\nexport interface GeminiSessionLocatorOptions {\n geminiTmpDir?: string;\n}\n\ninterface GeminiSessionMetadata {\n sessionId?: string;\n projectHash?: string;\n}\n\nconst SESSION_FILE_PREFIX = \"session-\";\nconst CHATS_DIR_NAME = \"chats\";\n\nexport class GeminiSessionLocator {\n private readonly geminiTmpDir: string;\n\n constructor(options: GeminiSessionLocatorOptions = {}) {\n const homeDir = process.env.HOME || process.env.USERPROFILE || \"\";\n this.geminiTmpDir = options.geminiTmpDir ?? path.join(homeDir, \".gemini\", \"tmp\");\n }\n\n /**\n * Discover session files for the given processes.\n *\n * Gemini CLI writes sessions to ~/.gemini/tmp/<shortId>/chats/session-*.json\n * where <shortId> is opaque (managed by a project registry). We scan every\n * shortId directory and filter by matching session.projectHash against\n * sha256(process.cwd) to bind each session to a candidate process CWD.\n */\n discoverSessions(processes: ProcessInfo[]): GeminiSessionDiscovery {\n const empty = { sessions: [] as SessionFile[], contentCache: new Map<string, string>() };\n if (!fs.existsSync(this.geminiTmpDir)) return empty;\n\n const cwdHashMap = this.buildCwdHashMap(processes);\n if (cwdHashMap.size === 0) return empty;\n\n const contentCache = new Map<string, string>();\n const sessions: SessionFile[] = [];\n\n let shortIdEntries: string[];\n try {\n shortIdEntries = fs.readdirSync(this.geminiTmpDir);\n } catch {\n return empty;\n }\n\n for (const shortId of shortIdEntries) {\n const chatsDir = path.join(this.geminiTmpDir, shortId, CHATS_DIR_NAME);\n if (!isDirectory(chatsDir)) continue;\n\n for (const fileName of safeReaddir(chatsDir)) {\n if (!this.isSessionFile(fileName)) continue;\n\n const session = this.readCandidateSession(chatsDir, fileName, cwdHashMap);\n if (!session) continue;\n\n contentCache.set(session.filePath, session.content);\n sessions.push(session.sessionFile);\n }\n }\n\n return { sessions, contentCache };\n }\n\n discoverHistoricalSessionFiles(): string[] {\n if (!isDirectory(this.geminiTmpDir)) return [];\n\n const files: string[] = [];\n for (const shortId of safeReaddir(this.geminiTmpDir)) {\n const chatsDir = path.join(this.geminiTmpDir, shortId, CHATS_DIR_NAME);\n if (!isDirectory(chatsDir)) continue;\n\n for (const fileName of safeReaddir(chatsDir)) {\n if (this.isSessionFile(fileName)) {\n files.push(path.join(chatsDir, fileName));\n }\n }\n }\n\n return files;\n }\n\n private readCandidateSession(\n chatsDir: string,\n fileName: string,\n cwdHashMap: Map<string, string>,\n ): { filePath: string; content: string; sessionFile: SessionFile } | null {\n const filePath = path.join(chatsDir, fileName);\n\n let content: string;\n try {\n content = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n\n const parsed = this.parseSessionMetadata(content);\n if (!parsed?.projectHash) return null;\n\n const resolvedCwd = cwdHashMap.get(parsed.projectHash);\n if (!resolvedCwd) return null;\n\n let birthtimeMs = 0;\n try {\n birthtimeMs = fs.statSync(filePath).birthtimeMs;\n } catch {\n return null;\n }\n\n return {\n filePath,\n content,\n sessionFile: {\n sessionId: parsed.sessionId || fileName.replace(/\\.json$/, \"\"),\n filePath,\n projectDir: chatsDir,\n birthtimeMs,\n resolvedCwd,\n },\n };\n }\n\n private buildCwdHashMap(processes: ProcessInfo[]): Map<string, string> {\n const map = new Map<string, string>();\n for (const proc of processes) {\n if (!proc.cwd) continue;\n\n // Gemini CLI resolves its project root by walking up from the\n // startup directory looking for a `.git` boundary marker. A\n // session's projectHash therefore tracks that ancestor rather\n // than the process' actual CWD. Enumerate every ancestor as a\n // candidate so subdirectory invocations still line up with the\n // session the Gemini process wrote.\n for (const candidate of this.candidateProjectRoots(proc.cwd)) {\n const hash = this.hashProjectRoot(candidate);\n if (!map.has(hash)) {\n map.set(hash, proc.cwd);\n }\n }\n }\n return map;\n }\n\n private candidateProjectRoots(cwd: string): string[] {\n const roots: string[] = [];\n let current = path.resolve(cwd);\n let parent = path.dirname(current);\n while (parent !== current) {\n roots.push(current);\n current = parent;\n parent = path.dirname(current);\n }\n roots.push(current);\n return roots;\n }\n\n private hashProjectRoot(projectRoot: string): string {\n return crypto.createHash(\"sha256\").update(projectRoot).digest(\"hex\");\n }\n\n private isSessionFile(fileName: string): boolean {\n return fileName.startsWith(SESSION_FILE_PREFIX) && fileName.endsWith(\".json\");\n }\n\n private parseSessionMetadata(content: string): GeminiSessionMetadata | null {\n try {\n return JSON.parse(content) as GeminiSessionMetadata;\n } catch {\n return null;\n }\n }\n}\n"],"names":["crypto","fs","path","isDirectory","safeReaddir","SESSION_FILE_PREFIX","CHATS_DIR_NAME","GeminiSessionLocator","geminiTmpDir","options","homeDir","process","env","HOME","USERPROFILE","join","discoverSessions","processes","empty","sessions","contentCache","Map","existsSync","cwdHashMap","buildCwdHashMap","size","shortIdEntries","readdirSync","shortId","chatsDir","fileName","isSessionFile","session","readCandidateSession","set","filePath","content","push","sessionFile","discoverHistoricalSessionFiles","files","readFileSync","parsed","parseSessionMetadata","projectHash","resolvedCwd","get","birthtimeMs","statSync","sessionId","replace","projectDir","map","proc","cwd","candidate","candidateProjectRoots","hash","hashProjectRoot","has","roots","current","resolve","parent","dirname","projectRoot","createHash","update","digest","startsWith","endsWith","JSON","parse"],"mappings":"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"}
@@ -1,94 +0,0 @@
1
- import type { ConversationMessage, SessionSummary } from "../../adapters/AgentAdapter.js";
2
- import { AgentStatus } from "../../adapters/AgentAdapter.js";
3
- /**
4
- * A single Gemini CLI message content part. Mirrors the `{text?: string}`
5
- * shape that Gemini writes for user message parts (derived from the
6
- * Gemini API `Content.parts[]` schema). Non-text part variants (data,
7
- * file, etc.) are preserved via the index signature but ignored by
8
- * `resolveContent` since the adapter only surfaces human-readable text.
9
- */
10
- interface GeminiContentPart {
11
- text?: string;
12
- [key: string]: unknown;
13
- }
14
- type GeminiMessageContent = string | GeminiContentPart[];
15
- export interface GeminiMessageEntry {
16
- id?: string;
17
- timestamp?: string;
18
- type?: string;
19
- /**
20
- * Gemini CLI stores two different content shapes depending on the
21
- * message origin:
22
- * - `type: "user"` messages carry the raw Part[] from userContent.parts
23
- * (e.g. `[{ text: "hello" }]`).
24
- * - `type: "gemini"` (assistant) messages carry a pre-joined string
25
- * built from `consolidatedParts.filter(p => p.text).join('').trim()`.
26
- * Both forms must be normalized via resolveContent before any string
27
- * operation is applied.
28
- */
29
- content?: GeminiMessageContent;
30
- displayContent?: GeminiMessageContent;
31
- }
32
- export interface GeminiSessionFile {
33
- sessionId?: string;
34
- projectHash?: string;
35
- startTime?: string;
36
- lastUpdated?: string;
37
- messages?: GeminiMessageEntry[];
38
- directories?: string[];
39
- kind?: string;
40
- }
41
- export interface GeminiSession {
42
- sessionId: string;
43
- projectPath: string;
44
- summary: string;
45
- sessionStart: Date;
46
- lastActive: Date;
47
- lastMessageType?: string;
48
- }
49
- export declare class GeminiSessionParser {
50
- /**
51
- * Parse session file content into GeminiSession.
52
- * Uses cached content if available, otherwise reads from disk.
53
- */
54
- parseSession(cachedContent: string | undefined, filePath: string): GeminiSession | null;
55
- determineStatus(session: GeminiSession): AgentStatus;
56
- /**
57
- * Read the full conversation from a Gemini CLI session JSON file.
58
- *
59
- * Gemini sessions store messages in an array with `type` field — typically
60
- * 'user' or 'gemini' for visible turns, with tool and system entries mixed in.
61
- */
62
- getConversation(sessionFilePath: string, options?: {
63
- verbose?: boolean;
64
- }): ConversationMessage[];
65
- /**
66
- * Read a Gemini session JSON file and produce a {@link SessionSummary}.
67
- * Returns null when the file is unreadable, the JSON doesn't parse,
68
- * or the body lacks a sessionId.
69
- */
70
- fileToSessionSummary(filePath: string): SessionSummary | null;
71
- private parseSessionJson;
72
- private readSessionFile;
73
- private roleForEntry;
74
- private extractSummary;
75
- /**
76
- * Normalize an entry's content/displayContent into a plain string.
77
- * Prefers displayContent when both are present (matches Gemini CLI's
78
- * own rendering priority for the /chat UI).
79
- */
80
- private messageText;
81
- /**
82
- * Collapse a Gemini message content field into plain text.
83
- * Accepts either a pre-joined string (assistant turns) or a Part[]
84
- * list (user turns carrying `[{text: "..."}]`). Non-text part
85
- * variants (data, file) are dropped since this helper is only used
86
- * for summary/conversation rendering.
87
- */
88
- private resolveContent;
89
- private extractFirstUserMessage;
90
- private parseTimestamp;
91
- private truncate;
92
- }
93
- export {};
94
- //# sourceMappingURL=GeminiSessionParser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GeminiSessionParser.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini/GeminiSessionParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAG7D;;;;;;GAMG;AACH,UAAU,iBAAiB;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,KAAK,oBAAoB,GAAG,MAAM,GAAG,iBAAiB,EAAE,CAAC;AAEzD,MAAM,WAAW,kBAAkB;IACjC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;;;;OASG;IACH,OAAO,CAAC,EAAE,oBAAoB,CAAC;IAC/B,cAAc,CAAC,EAAE,oBAAoB,CAAC;CACvC;AAED,MAAM,WAAW,iBAAiB;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,kBAAkB,EAAE,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,qBAAa,mBAAmB;IAC9B;;;OAGG;IACH,YAAY,CAAC,aAAa,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAiCvF,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW;IAepD;;;;;OAKG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IA0BhG;;;;OAIG;IACH,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAkC7D,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,eAAe;IAQvB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,cAAc;IAWtB;;;;OAIG;IACH,OAAO,CAAC,WAAW;IAMnB;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,uBAAuB;IAS/B,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,QAAQ;CAIjB"}
@@ -1,166 +0,0 @@
1
- import * as fs from "fs";
2
- import { AgentStatus } from "../../adapters/AgentAdapter.js";
3
- import { safeReadFile, safeStat } from "../../utils/session.js";
4
- const IDLE_THRESHOLD_MINUTES = 5;
5
- export class GeminiSessionParser {
6
- /**
7
- * Parse session file content into GeminiSession.
8
- * Uses cached content if available, otherwise reads from disk.
9
- */ parseSession(cachedContent, filePath) {
10
- const content = cachedContent ?? this.readSessionFile(filePath);
11
- if (content === null) return null;
12
- const parsed = this.parseSessionJson(content);
13
- if (!parsed?.sessionId) return null;
14
- const messages = Array.isArray(parsed.messages) ? parsed.messages : [];
15
- const lastEntry = messages.length > 0 ? messages[messages.length - 1] : undefined;
16
- const fileStat = safeStat(filePath);
17
- const lastActive = this.parseTimestamp(parsed.lastUpdated) || this.parseTimestamp(lastEntry?.timestamp) || fileStat?.mtime || new Date();
18
- const sessionStart = this.parseTimestamp(parsed.startTime) || lastActive;
19
- const projectPath = Array.isArray(parsed.directories) && parsed.directories.length > 0 ? parsed.directories[0] : "";
20
- return {
21
- sessionId: parsed.sessionId,
22
- projectPath,
23
- summary: this.extractSummary(messages),
24
- sessionStart,
25
- lastActive,
26
- lastMessageType: lastEntry?.type
27
- };
28
- }
29
- determineStatus(session) {
30
- const diffMs = Date.now() - session.lastActive.getTime();
31
- const diffMinutes = diffMs / 60000;
32
- if (diffMinutes > IDLE_THRESHOLD_MINUTES) {
33
- return AgentStatus.IDLE;
34
- }
35
- if (session.lastMessageType === "gemini" || session.lastMessageType === "assistant") {
36
- return AgentStatus.WAITING;
37
- }
38
- return AgentStatus.RUNNING;
39
- }
40
- /**
41
- * Read the full conversation from a Gemini CLI session JSON file.
42
- *
43
- * Gemini sessions store messages in an array with `type` field — typically
44
- * 'user' or 'gemini' for visible turns, with tool and system entries mixed in.
45
- */ getConversation(sessionFilePath, options) {
46
- const verbose = options?.verbose ?? false;
47
- const content = safeReadFile(sessionFilePath);
48
- if (content === undefined) return [];
49
- const parsed = this.parseSessionJson(content);
50
- if (!Array.isArray(parsed?.messages)) return [];
51
- const messages = [];
52
- for (const entry of parsed.messages){
53
- const role = this.roleForEntry(entry?.type, verbose);
54
- if (!role) continue;
55
- const text = this.messageText(entry).trim();
56
- if (!text) continue;
57
- messages.push({
58
- role,
59
- content: text,
60
- timestamp: entry.timestamp
61
- });
62
- }
63
- return messages;
64
- }
65
- /**
66
- * Read a Gemini session JSON file and produce a {@link SessionSummary}.
67
- * Returns null when the file is unreadable, the JSON doesn't parse,
68
- * or the body lacks a sessionId.
69
- */ fileToSessionSummary(filePath) {
70
- const content = safeReadFile(filePath);
71
- if (content === undefined) return null;
72
- const parsed = this.parseSessionJson(content);
73
- if (!parsed?.sessionId) return null;
74
- const messages = Array.isArray(parsed.messages) ? parsed.messages : [];
75
- const firstUserMessage = this.extractFirstUserMessage(messages);
76
- const cwd = Array.isArray(parsed.directories) && parsed.directories.length > 0 ? parsed.directories[0] : "";
77
- const stat = safeStat(filePath);
78
- const lastEntryTimestamp = this.parseTimestamp(messages.length > 0 ? messages[messages.length - 1]?.timestamp : undefined);
79
- const lastActive = this.parseTimestamp(parsed.lastUpdated) || lastEntryTimestamp || stat?.mtime || new Date();
80
- const startedAt = this.parseTimestamp(parsed.startTime) || stat?.birthtime || stat?.mtime || lastActive;
81
- return {
82
- type: "gemini_cli",
83
- sessionId: parsed.sessionId,
84
- cwd,
85
- firstUserMessage,
86
- lastActive,
87
- startedAt,
88
- sessionFilePath: filePath
89
- };
90
- }
91
- parseSessionJson(content) {
92
- try {
93
- return JSON.parse(content);
94
- } catch {
95
- return null;
96
- }
97
- }
98
- readSessionFile(filePath) {
99
- try {
100
- return fs.readFileSync(filePath, "utf-8");
101
- } catch {
102
- return null;
103
- }
104
- }
105
- roleForEntry(entryType, verbose) {
106
- if (entryType === "user") return "user";
107
- if (entryType === "gemini" || entryType === "assistant") return "assistant";
108
- if (verbose && entryType) return "system";
109
- return null;
110
- }
111
- extractSummary(messages) {
112
- for(let i = messages.length - 1; i >= 0; i--){
113
- const entry = messages[i];
114
- if (entry?.type !== "user") continue;
115
- const text = this.messageText(entry).trim();
116
- if (text) return this.truncate(text, 120);
117
- }
118
- return "Gemini CLI session active";
119
- }
120
- /**
121
- * Normalize an entry's content/displayContent into a plain string.
122
- * Prefers displayContent when both are present (matches Gemini CLI's
123
- * own rendering priority for the /chat UI).
124
- */ messageText(entry) {
125
- const displayText = this.resolveContent(entry.displayContent);
126
- if (displayText) return displayText;
127
- return this.resolveContent(entry.content);
128
- }
129
- /**
130
- * Collapse a Gemini message content field into plain text.
131
- * Accepts either a pre-joined string (assistant turns) or a Part[]
132
- * list (user turns carrying `[{text: "..."}]`). Non-text part
133
- * variants (data, file) are dropped since this helper is only used
134
- * for summary/conversation rendering.
135
- */ resolveContent(content) {
136
- if (!content) return "";
137
- if (typeof content === "string") return content;
138
- if (!Array.isArray(content)) return "";
139
- const parts = [];
140
- for (const part of content){
141
- if (part && typeof part.text === "string" && part.text) {
142
- parts.push(part.text);
143
- }
144
- }
145
- return parts.join("");
146
- }
147
- extractFirstUserMessage(messages) {
148
- for (const entry of messages){
149
- if (entry?.type !== "user") continue;
150
- const text = this.messageText(entry).trim();
151
- if (text) return text;
152
- }
153
- return "";
154
- }
155
- parseTimestamp(value) {
156
- if (!value) return null;
157
- const timestamp = new Date(value);
158
- return Number.isNaN(timestamp.getTime()) ? null : timestamp;
159
- }
160
- truncate(value, maxLength) {
161
- if (value.length <= maxLength) return value;
162
- return `${value.slice(0, maxLength - 3)}...`;
163
- }
164
- }
165
-
166
- //# sourceMappingURL=GeminiSessionParser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/gemini/GeminiSessionParser.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport type { ConversationMessage, SessionSummary } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport { safeReadFile, safeStat } from \"../../utils/session.js\";\n\n/**\n * A single Gemini CLI message content part. Mirrors the `{text?: string}`\n * shape that Gemini writes for user message parts (derived from the\n * Gemini API `Content.parts[]` schema). Non-text part variants (data,\n * file, etc.) are preserved via the index signature but ignored by\n * `resolveContent` since the adapter only surfaces human-readable text.\n */\ninterface GeminiContentPart {\n text?: string;\n [key: string]: unknown;\n}\n\ntype GeminiMessageContent = string | GeminiContentPart[];\n\nexport interface GeminiMessageEntry {\n id?: string;\n timestamp?: string;\n type?: string;\n /**\n * Gemini CLI stores two different content shapes depending on the\n * message origin:\n * - `type: \"user\"` messages carry the raw Part[] from userContent.parts\n * (e.g. `[{ text: \"hello\" }]`).\n * - `type: \"gemini\"` (assistant) messages carry a pre-joined string\n * built from `consolidatedParts.filter(p => p.text).join('').trim()`.\n * Both forms must be normalized via resolveContent before any string\n * operation is applied.\n */\n content?: GeminiMessageContent;\n displayContent?: GeminiMessageContent;\n}\n\nexport interface GeminiSessionFile {\n sessionId?: string;\n projectHash?: string;\n startTime?: string;\n lastUpdated?: string;\n messages?: GeminiMessageEntry[];\n directories?: string[];\n kind?: string;\n}\n\nexport interface GeminiSession {\n sessionId: string;\n projectPath: string;\n summary: string;\n sessionStart: Date;\n lastActive: Date;\n lastMessageType?: string;\n}\n\nconst IDLE_THRESHOLD_MINUTES = 5;\n\nexport class GeminiSessionParser {\n /**\n * Parse session file content into GeminiSession.\n * Uses cached content if available, otherwise reads from disk.\n */\n parseSession(cachedContent: string | undefined, filePath: string): GeminiSession | null {\n const content = cachedContent ?? this.readSessionFile(filePath);\n if (content === null) return null;\n\n const parsed = this.parseSessionJson(content);\n if (!parsed?.sessionId) return null;\n\n const messages = Array.isArray(parsed.messages) ? parsed.messages : [];\n const lastEntry = messages.length > 0 ? messages[messages.length - 1] : undefined;\n const fileStat = safeStat(filePath);\n\n const lastActive =\n this.parseTimestamp(parsed.lastUpdated) ||\n this.parseTimestamp(lastEntry?.timestamp) ||\n fileStat?.mtime ||\n new Date();\n\n const sessionStart = this.parseTimestamp(parsed.startTime) || lastActive;\n const projectPath =\n Array.isArray(parsed.directories) && parsed.directories.length > 0\n ? parsed.directories[0]\n : \"\";\n\n return {\n sessionId: parsed.sessionId,\n projectPath,\n summary: this.extractSummary(messages),\n sessionStart,\n lastActive,\n lastMessageType: lastEntry?.type,\n };\n }\n\n determineStatus(session: GeminiSession): AgentStatus {\n const diffMs = Date.now() - session.lastActive.getTime();\n const diffMinutes = diffMs / 60000;\n\n if (diffMinutes > IDLE_THRESHOLD_MINUTES) {\n return AgentStatus.IDLE;\n }\n\n if (session.lastMessageType === \"gemini\" || session.lastMessageType === \"assistant\") {\n return AgentStatus.WAITING;\n }\n\n return AgentStatus.RUNNING;\n }\n\n /**\n * Read the full conversation from a Gemini CLI session JSON file.\n *\n * Gemini sessions store messages in an array with `type` field — typically\n * 'user' or 'gemini' for visible turns, with tool and system entries mixed in.\n */\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n const verbose = options?.verbose ?? false;\n const content = safeReadFile(sessionFilePath);\n if (content === undefined) return [];\n\n const parsed = this.parseSessionJson(content);\n if (!Array.isArray(parsed?.messages)) return [];\n\n const messages: ConversationMessage[] = [];\n for (const entry of parsed.messages) {\n const role = this.roleForEntry(entry?.type, verbose);\n if (!role) continue;\n\n const text = this.messageText(entry).trim();\n if (!text) continue;\n\n messages.push({\n role,\n content: text,\n timestamp: entry.timestamp,\n });\n }\n\n return messages;\n }\n\n /**\n * Read a Gemini session JSON file and produce a {@link SessionSummary}.\n * Returns null when the file is unreadable, the JSON doesn't parse,\n * or the body lacks a sessionId.\n */\n fileToSessionSummary(filePath: string): SessionSummary | null {\n const content = safeReadFile(filePath);\n if (content === undefined) return null;\n\n const parsed = this.parseSessionJson(content);\n if (!parsed?.sessionId) return null;\n\n const messages = Array.isArray(parsed.messages) ? parsed.messages : [];\n const firstUserMessage = this.extractFirstUserMessage(messages);\n const cwd =\n Array.isArray(parsed.directories) && parsed.directories.length > 0\n ? parsed.directories[0]\n : \"\";\n\n const stat = safeStat(filePath);\n const lastEntryTimestamp = this.parseTimestamp(\n messages.length > 0 ? messages[messages.length - 1]?.timestamp : undefined,\n );\n const lastActive =\n this.parseTimestamp(parsed.lastUpdated) || lastEntryTimestamp || stat?.mtime || new Date();\n const startedAt =\n this.parseTimestamp(parsed.startTime) || stat?.birthtime || stat?.mtime || lastActive;\n\n return {\n type: \"gemini_cli\",\n sessionId: parsed.sessionId,\n cwd,\n firstUserMessage,\n lastActive,\n startedAt,\n sessionFilePath: filePath,\n };\n }\n\n private parseSessionJson(content: string): GeminiSessionFile | null {\n try {\n return JSON.parse(content) as GeminiSessionFile;\n } catch {\n return null;\n }\n }\n\n private readSessionFile(filePath: string): string | null {\n try {\n return fs.readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n }\n\n private roleForEntry(\n entryType: string | undefined,\n verbose: boolean,\n ): ConversationMessage[\"role\"] | null {\n if (entryType === \"user\") return \"user\";\n if (entryType === \"gemini\" || entryType === \"assistant\") return \"assistant\";\n if (verbose && entryType) return \"system\";\n return null;\n }\n\n private extractSummary(messages: GeminiMessageEntry[]): string {\n for (let i = messages.length - 1; i >= 0; i--) {\n const entry = messages[i];\n if (entry?.type !== \"user\") continue;\n const text = this.messageText(entry).trim();\n if (text) return this.truncate(text, 120);\n }\n\n return \"Gemini CLI session active\";\n }\n\n /**\n * Normalize an entry's content/displayContent into a plain string.\n * Prefers displayContent when both are present (matches Gemini CLI's\n * own rendering priority for the /chat UI).\n */\n private messageText(entry: GeminiMessageEntry): string {\n const displayText = this.resolveContent(entry.displayContent);\n if (displayText) return displayText;\n return this.resolveContent(entry.content);\n }\n\n /**\n * Collapse a Gemini message content field into plain text.\n * Accepts either a pre-joined string (assistant turns) or a Part[]\n * list (user turns carrying `[{text: \"...\"}]`). Non-text part\n * variants (data, file) are dropped since this helper is only used\n * for summary/conversation rendering.\n */\n private resolveContent(content: GeminiMessageContent | undefined): string {\n if (!content) return \"\";\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return \"\";\n\n const parts: string[] = [];\n for (const part of content) {\n if (part && typeof part.text === \"string\" && part.text) {\n parts.push(part.text);\n }\n }\n return parts.join(\"\");\n }\n\n private extractFirstUserMessage(messages: GeminiMessageEntry[]): string {\n for (const entry of messages) {\n if (entry?.type !== \"user\") continue;\n const text = this.messageText(entry).trim();\n if (text) return text;\n }\n return \"\";\n }\n\n private parseTimestamp(value?: string): Date | null {\n if (!value) return null;\n const timestamp = new Date(value);\n return Number.isNaN(timestamp.getTime()) ? null : timestamp;\n }\n\n private truncate(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return `${value.slice(0, maxLength - 3)}...`;\n }\n}\n"],"names":["fs","AgentStatus","safeReadFile","safeStat","IDLE_THRESHOLD_MINUTES","GeminiSessionParser","parseSession","cachedContent","filePath","content","readSessionFile","parsed","parseSessionJson","sessionId","messages","Array","isArray","lastEntry","length","undefined","fileStat","lastActive","parseTimestamp","lastUpdated","timestamp","mtime","Date","sessionStart","startTime","projectPath","directories","summary","extractSummary","lastMessageType","type","determineStatus","session","diffMs","now","getTime","diffMinutes","IDLE","WAITING","RUNNING","getConversation","sessionFilePath","options","verbose","entry","role","roleForEntry","text","messageText","trim","push","fileToSessionSummary","firstUserMessage","extractFirstUserMessage","cwd","stat","lastEntryTimestamp","startedAt","birthtime","JSON","parse","readFileSync","entryType","i","truncate","displayText","resolveContent","displayContent","parts","part","join","value","Number","isNaN","maxLength","slice"],"mappings":"AAAA,YAAYA,QAAQ,KAAK;AAEzB,SAASC,WAAW,QAAQ,iCAAiC;AAC7D,SAASC,YAAY,EAAEC,QAAQ,QAAQ,yBAAyB;AAqDhE,MAAMC,yBAAyB;AAE/B,OAAO,MAAMC;IACX;;;GAGC,GACDC,aAAaC,aAAiC,EAAEC,QAAgB,EAAwB;QACtF,MAAMC,UAAUF,iBAAiB,IAAI,CAACG,eAAe,CAACF;QACtD,IAAIC,YAAY,MAAM,OAAO;QAE7B,MAAME,SAAS,IAAI,CAACC,gBAAgB,CAACH;QACrC,IAAI,CAACE,QAAQE,WAAW,OAAO;QAE/B,MAAMC,WAAWC,MAAMC,OAAO,CAACL,OAAOG,QAAQ,IAAIH,OAAOG,QAAQ,GAAG,EAAE;QACtE,MAAMG,YAAYH,SAASI,MAAM,GAAG,IAAIJ,QAAQ,CAACA,SAASI,MAAM,GAAG,EAAE,GAAGC;QACxE,MAAMC,WAAWjB,SAASK;QAE1B,MAAMa,aACJ,IAAI,CAACC,cAAc,CAACX,OAAOY,WAAW,KACtC,IAAI,CAACD,cAAc,CAACL,WAAWO,cAC/BJ,UAAUK,SACV,IAAIC;QAEN,MAAMC,eAAe,IAAI,CAACL,cAAc,CAACX,OAAOiB,SAAS,KAAKP;QAC9D,MAAMQ,cACJd,MAAMC,OAAO,CAACL,OAAOmB,WAAW,KAAKnB,OAAOmB,WAAW,CAACZ,MAAM,GAAG,IAC7DP,OAAOmB,WAAW,CAAC,EAAE,GACrB;QAEN,OAAO;YACLjB,WAAWF,OAAOE,SAAS;YAC3BgB;YACAE,SAAS,IAAI,CAACC,cAAc,CAAClB;YAC7Ba;YACAN;YACAY,iBAAiBhB,WAAWiB;QAC9B;IACF;IAEAC,gBAAgBC,OAAsB,EAAe;QACnD,MAAMC,SAASX,KAAKY,GAAG,KAAKF,QAAQf,UAAU,CAACkB,OAAO;QACtD,MAAMC,cAAcH,SAAS;QAE7B,IAAIG,cAAcpC,wBAAwB;YACxC,OAAOH,YAAYwC,IAAI;QACzB;QAEA,IAAIL,QAAQH,eAAe,KAAK,YAAYG,QAAQH,eAAe,KAAK,aAAa;YACnF,OAAOhC,YAAYyC,OAAO;QAC5B;QAEA,OAAOzC,YAAY0C,OAAO;IAC5B;IAEA;;;;;GAKC,GACDC,gBAAgBC,eAAuB,EAAEC,OAA+B,EAAyB;QAC/F,MAAMC,UAAUD,SAASC,WAAW;QACpC,MAAMtC,UAAUP,aAAa2C;QAC7B,IAAIpC,YAAYU,WAAW,OAAO,EAAE;QAEpC,MAAMR,SAAS,IAAI,CAACC,gBAAgB,CAACH;QACrC,IAAI,CAACM,MAAMC,OAAO,CAACL,QAAQG,WAAW,OAAO,EAAE;QAE/C,MAAMA,WAAkC,EAAE;QAC1C,KAAK,MAAMkC,SAASrC,OAAOG,QAAQ,CAAE;YACnC,MAAMmC,OAAO,IAAI,CAACC,YAAY,CAACF,OAAOd,MAAMa;YAC5C,IAAI,CAACE,MAAM;YAEX,MAAME,OAAO,IAAI,CAACC,WAAW,CAACJ,OAAOK,IAAI;YACzC,IAAI,CAACF,MAAM;YAEXrC,SAASwC,IAAI,CAAC;gBACZL;gBACAxC,SAAS0C;gBACT3B,WAAWwB,MAAMxB,SAAS;YAC5B;QACF;QAEA,OAAOV;IACT;IAEA;;;;GAIC,GACDyC,qBAAqB/C,QAAgB,EAAyB;QAC5D,MAAMC,UAAUP,aAAaM;QAC7B,IAAIC,YAAYU,WAAW,OAAO;QAElC,MAAMR,SAAS,IAAI,CAACC,gBAAgB,CAACH;QACrC,IAAI,CAACE,QAAQE,WAAW,OAAO;QAE/B,MAAMC,WAAWC,MAAMC,OAAO,CAACL,OAAOG,QAAQ,IAAIH,OAAOG,QAAQ,GAAG,EAAE;QACtE,MAAM0C,mBAAmB,IAAI,CAACC,uBAAuB,CAAC3C;QACtD,MAAM4C,MACJ3C,MAAMC,OAAO,CAACL,OAAOmB,WAAW,KAAKnB,OAAOmB,WAAW,CAACZ,MAAM,GAAG,IAC7DP,OAAOmB,WAAW,CAAC,EAAE,GACrB;QAEN,MAAM6B,OAAOxD,SAASK;QACtB,MAAMoD,qBAAqB,IAAI,CAACtC,cAAc,CAC5CR,SAASI,MAAM,GAAG,IAAIJ,QAAQ,CAACA,SAASI,MAAM,GAAG,EAAE,EAAEM,YAAYL;QAEnE,MAAME,aACJ,IAAI,CAACC,cAAc,CAACX,OAAOY,WAAW,KAAKqC,sBAAsBD,MAAMlC,SAAS,IAAIC;QACtF,MAAMmC,YACJ,IAAI,CAACvC,cAAc,CAACX,OAAOiB,SAAS,KAAK+B,MAAMG,aAAaH,MAAMlC,SAASJ;QAE7E,OAAO;YACLa,MAAM;YACNrB,WAAWF,OAAOE,SAAS;YAC3B6C;YACAF;YACAnC;YACAwC;YACAhB,iBAAiBrC;QACnB;IACF;IAEQI,iBAAiBH,OAAe,EAA4B;QAClE,IAAI;YACF,OAAOsD,KAAKC,KAAK,CAACvD;QACpB,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEQC,gBAAgBF,QAAgB,EAAiB;QACvD,IAAI;YACF,OAAOR,GAAGiE,YAAY,CAACzD,UAAU;QACnC,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEQ0C,aACNgB,SAA6B,EAC7BnB,OAAgB,EACoB;QACpC,IAAImB,cAAc,QAAQ,OAAO;QACjC,IAAIA,cAAc,YAAYA,cAAc,aAAa,OAAO;QAChE,IAAInB,WAAWmB,WAAW,OAAO;QACjC,OAAO;IACT;IAEQlC,eAAelB,QAA8B,EAAU;QAC7D,IAAK,IAAIqD,IAAIrD,SAASI,MAAM,GAAG,GAAGiD,KAAK,GAAGA,IAAK;YAC7C,MAAMnB,QAAQlC,QAAQ,CAACqD,EAAE;YACzB,IAAInB,OAAOd,SAAS,QAAQ;YAC5B,MAAMiB,OAAO,IAAI,CAACC,WAAW,CAACJ,OAAOK,IAAI;YACzC,IAAIF,MAAM,OAAO,IAAI,CAACiB,QAAQ,CAACjB,MAAM;QACvC;QAEA,OAAO;IACT;IAEA;;;;GAIC,GACD,AAAQC,YAAYJ,KAAyB,EAAU;QACrD,MAAMqB,cAAc,IAAI,CAACC,cAAc,CAACtB,MAAMuB,cAAc;QAC5D,IAAIF,aAAa,OAAOA;QACxB,OAAO,IAAI,CAACC,cAAc,CAACtB,MAAMvC,OAAO;IAC1C;IAEA;;;;;;GAMC,GACD,AAAQ6D,eAAe7D,OAAyC,EAAU;QACxE,IAAI,CAACA,SAAS,OAAO;QACrB,IAAI,OAAOA,YAAY,UAAU,OAAOA;QACxC,IAAI,CAACM,MAAMC,OAAO,CAACP,UAAU,OAAO;QAEpC,MAAM+D,QAAkB,EAAE;QAC1B,KAAK,MAAMC,QAAQhE,QAAS;YAC1B,IAAIgE,QAAQ,OAAOA,KAAKtB,IAAI,KAAK,YAAYsB,KAAKtB,IAAI,EAAE;gBACtDqB,MAAMlB,IAAI,CAACmB,KAAKtB,IAAI;YACtB;QACF;QACA,OAAOqB,MAAME,IAAI,CAAC;IACpB;IAEQjB,wBAAwB3C,QAA8B,EAAU;QACtE,KAAK,MAAMkC,SAASlC,SAAU;YAC5B,IAAIkC,OAAOd,SAAS,QAAQ;YAC5B,MAAMiB,OAAO,IAAI,CAACC,WAAW,CAACJ,OAAOK,IAAI;YACzC,IAAIF,MAAM,OAAOA;QACnB;QACA,OAAO;IACT;IAEQ7B,eAAeqD,KAAc,EAAe;QAClD,IAAI,CAACA,OAAO,OAAO;QACnB,MAAMnD,YAAY,IAAIE,KAAKiD;QAC3B,OAAOC,OAAOC,KAAK,CAACrD,UAAUe,OAAO,MAAM,OAAOf;IACpD;IAEQ4C,SAASO,KAAa,EAAEG,SAAiB,EAAU;QACzD,IAAIH,MAAMzD,MAAM,IAAI4D,WAAW,OAAOH;QACtC,OAAO,GAAGA,MAAMI,KAAK,CAAC,GAAGD,YAAY,GAAG,GAAG,CAAC;IAC9C;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"GrokAgentMapper.d.ts","sourceRoot":"","sources":["../../../src/providers/grok/GrokAgentMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAG7E,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE7E,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,qBAAa,eAAe;IACd,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,iBAA2C;IAEhF,iBAAiB,CAAC,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,qBAAqB,GAAG,SAAS;IAc7E,mFAAmF;IACnF,mBAAmB,CAAC,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS;CAYtE"}
@@ -1,36 +0,0 @@
1
- import { AgentStatus } from "../../adapters/AgentAdapter.js";
2
- import { generateAgentName } from "../../utils/matching.js";
3
- import { GrokSessionParser } from "./GrokSessionParser.js";
4
- export class GrokAgentMapper {
5
- parser;
6
- constructor(parser = new GrokSessionParser()){
7
- this.parser = parser;
8
- }
9
- mapSessionToAgent({ session, processInfo }) {
10
- return {
11
- name: generateAgentName(session.projectPath, processInfo.pid),
12
- type: "grok_cli",
13
- status: this.parser.determineStatus(session),
14
- summary: session.lastUserMessage || "Grok CLI session active",
15
- pid: processInfo.pid,
16
- projectPath: session.projectPath,
17
- sessionId: session.sessionId,
18
- lastActive: session.lastActive,
19
- sessionFilePath: session.sessionFilePath
20
- };
21
- }
22
- /** `cwd` is already resolved by the locator (registry first, then process cwd). */ mapProcessOnlyAgent(processInfo, cwd) {
23
- return {
24
- name: generateAgentName(cwd, processInfo.pid),
25
- type: "grok_cli",
26
- status: AgentStatus.RUNNING,
27
- summary: "Grok CLI process running",
28
- pid: processInfo.pid,
29
- projectPath: cwd,
30
- sessionId: `pid-${processInfo.pid}`,
31
- lastActive: new Date()
32
- };
33
- }
34
- }
35
-
36
- //# sourceMappingURL=GrokAgentMapper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/grok/GrokAgentMapper.ts"],"sourcesContent":["import type { AgentInfo, ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport { generateAgentName } from \"../../utils/matching.js\";\nimport { GrokSessionParser, type GrokSession } from \"./GrokSessionParser.js\";\n\nexport interface GrokSessionAgentInput {\n session: GrokSession;\n processInfo: ProcessInfo;\n}\n\nexport class GrokAgentMapper {\n constructor(private readonly parser: GrokSessionParser = new GrokSessionParser()) {}\n\n mapSessionToAgent({ session, processInfo }: GrokSessionAgentInput): AgentInfo {\n return {\n name: generateAgentName(session.projectPath, processInfo.pid),\n type: \"grok_cli\",\n status: this.parser.determineStatus(session),\n summary: session.lastUserMessage || \"Grok CLI session active\",\n pid: processInfo.pid,\n projectPath: session.projectPath,\n sessionId: session.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: session.sessionFilePath,\n };\n }\n\n /** `cwd` is already resolved by the locator (registry first, then process cwd). */\n mapProcessOnlyAgent(processInfo: ProcessInfo, cwd: string): AgentInfo {\n return {\n name: generateAgentName(cwd, processInfo.pid),\n type: \"grok_cli\",\n status: AgentStatus.RUNNING,\n summary: \"Grok CLI process running\",\n pid: processInfo.pid,\n projectPath: cwd,\n sessionId: `pid-${processInfo.pid}`,\n lastActive: new Date(),\n };\n }\n}\n"],"names":["AgentStatus","generateAgentName","GrokSessionParser","GrokAgentMapper","parser","mapSessionToAgent","session","processInfo","name","projectPath","pid","type","status","determineStatus","summary","lastUserMessage","sessionId","lastActive","sessionFilePath","mapProcessOnlyAgent","cwd","RUNNING","Date"],"mappings":"AACA,SAASA,WAAW,QAAQ,iCAAiC;AAC7D,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,iBAAiB,QAA0B,yBAAyB;AAO7E,OAAO,MAAMC;;IACX,YAAY,AAAiBC,SAA4B,IAAIF,mBAAmB,CAAE;aAArDE,SAAAA;IAAsD;IAEnFC,kBAAkB,EAAEC,OAAO,EAAEC,WAAW,EAAyB,EAAa;QAC5E,OAAO;YACLC,MAAMP,kBAAkBK,QAAQG,WAAW,EAAEF,YAAYG,GAAG;YAC5DC,MAAM;YACNC,QAAQ,IAAI,CAACR,MAAM,CAACS,eAAe,CAACP;YACpCQ,SAASR,QAAQS,eAAe,IAAI;YACpCL,KAAKH,YAAYG,GAAG;YACpBD,aAAaH,QAAQG,WAAW;YAChCO,WAAWV,QAAQU,SAAS;YAC5BC,YAAYX,QAAQW,UAAU;YAC9BC,iBAAiBZ,QAAQY,eAAe;QAC1C;IACF;IAEA,iFAAiF,GACjFC,oBAAoBZ,WAAwB,EAAEa,GAAW,EAAa;QACpE,OAAO;YACLZ,MAAMP,kBAAkBmB,KAAKb,YAAYG,GAAG;YAC5CC,MAAM;YACNC,QAAQZ,YAAYqB,OAAO;YAC3BP,SAAS;YACTJ,KAAKH,YAAYG,GAAG;YACpBD,aAAaW;YACbJ,WAAW,CAAC,IAAI,EAAET,YAAYG,GAAG,EAAE;YACnCO,YAAY,IAAIK;QAClB;IACF;AACF"}
@@ -1,36 +0,0 @@
1
- import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext } from "../../adapters/AgentAdapter.js";
2
- /**
3
- * Grok Build CLI Adapter
4
- *
5
- * Detects running Grok Build CLI agents by:
6
- * 1. Filtering `grok` processes from a shared asynchronous snapshot — Grok is
7
- * a native binary at ~/.grok/bin/grok, so argv[0] basename is `grok`.
8
- * 2. Resolving each live process to its working directory via
9
- * ~/.grok/active_sessions.json, which Grok maintains as a list of
10
- * { pid, cwd, opened_at } for every running session. The cwd is then encoded
11
- * into the session group dir ~/.grok/sessions/<encodeURIComponent(cwd)>/, and
12
- * the most recently active session subdirectory is picked from it. The
13
- * process cwd from lsof is only a fallback when the PID is not registered.
14
- * 3. Reading the session transcript from chat_history.jsonl (the authoritative
15
- * record of the conversation). The last user turn (the text inside
16
- * <user_query>...</user_query>) is the summary; the file's mtime is the last
17
- * activity time. summary.json / updates.jsonl are intentionally not used.
18
- */
19
- export declare class GrokCliAdapter implements AgentAdapter {
20
- readonly type: "grok_cli";
21
- readonly processNames: readonly ["grok"];
22
- private parser;
23
- private mapper;
24
- private locator;
25
- constructor();
26
- canHandle(processInfo: ProcessInfo): boolean;
27
- private isGrokExecutable;
28
- detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
29
- getConversation(sessionFilePath: string, options?: {
30
- verbose?: boolean;
31
- }): ConversationMessage[];
32
- listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
33
- findSessionsById(sessionId: string): Promise<SessionSummary[]>;
34
- private toSessionSummary;
35
- }
36
- //# sourceMappingURL=GrokCliAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"GrokCliAdapter.d.ts","sourceRoot":"","sources":["../../../src/providers/grok/GrokCliAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAUxC;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,YAAY;IACjD,QAAQ,CAAC,IAAI,EAAG,UAAU,CAAU;IACpC,QAAQ,CAAC,YAAY,oBAAqB;IAE1C,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,OAAO,CAAqB;;IAQpC,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAI5C,OAAO,CAAC,gBAAgB;IAKlB,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAsBzE,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAI1F,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBnE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAapE,OAAO,CAAC,gBAAgB;CAWzB"}