@ai-devkit/agent-manager 0.35.0 → 0.37.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 (651) hide show
  1. package/dist/AgentManager.d.ts +9 -4
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +21 -2
  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/claude.test.js +485 -0
  14. package/dist/__tests__/capacity/claude.test.js.map +1 -0
  15. package/dist/__tests__/capacity/openai.test.js +670 -0
  16. package/dist/__tests__/capacity/openai.test.js.map +1 -0
  17. package/dist/__tests__/capacity/wham.test.js +144 -0
  18. package/dist/__tests__/capacity/wham.test.js.map +1 -0
  19. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js +568 -0
  20. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js.map +1 -0
  21. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js +1089 -0
  22. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js.map +1 -0
  23. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js +143 -0
  24. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js.map +1 -0
  25. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js +462 -0
  26. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js.map +1 -0
  27. package/dist/__tests__/harnesses/builtinAdapters.test.js +33 -0
  28. package/dist/__tests__/harnesses/builtinAdapters.test.js.map +1 -0
  29. package/dist/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.js +4 -4
  30. package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js.map +1 -0
  31. package/dist/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.js +47 -19
  32. package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js.map +1 -0
  33. package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js +1 -12
  34. package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js.map +1 -1
  35. package/dist/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.js +2 -2
  36. package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js.map +1 -0
  37. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.js +1 -1
  38. package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js.map +1 -0
  39. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.js +1 -1
  40. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -0
  41. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.js +4 -4
  42. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js.map +1 -0
  43. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.js +1 -1
  44. package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -0
  45. package/dist/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.js +304 -10
  46. package/dist/__tests__/harnesses/codex/CodexAdapter.test.js.map +1 -0
  47. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js +463 -0
  48. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js.map +1 -0
  49. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js +1 -1
  50. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js.map +1 -1
  51. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js +1 -1
  52. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js.map +1 -1
  53. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.js +4 -4
  54. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -0
  55. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.js +1 -1
  56. package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js.map +1 -0
  57. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.js +1 -1
  58. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -0
  59. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.js +8 -18
  60. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -0
  61. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.js +2 -7
  62. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -0
  63. package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js +1 -1
  64. package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js.map +1 -1
  65. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js +290 -0
  66. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js.map +1 -0
  67. package/dist/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.js +34 -25
  68. package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js.map +1 -0
  69. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js +491 -0
  70. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js.map +1 -0
  71. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js +399 -0
  72. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js.map +1 -0
  73. package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js +1 -1
  74. package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js.map +1 -1
  75. package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js +1 -1
  76. package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js.map +1 -1
  77. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js +167 -0
  78. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js.map +1 -0
  79. package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js +1 -1
  80. package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js.map +1 -1
  81. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js +301 -0
  82. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js.map +1 -0
  83. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js +662 -0
  84. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js.map +1 -0
  85. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js +1 -1
  86. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js.map +1 -1
  87. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js +1 -1
  88. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js.map +1 -1
  89. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js +2 -2
  90. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js.map +1 -1
  91. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js +1 -1
  92. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js.map +1 -1
  93. package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js +1 -1
  94. package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js.map +1 -1
  95. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js +382 -0
  96. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js.map +1 -0
  97. package/dist/__tests__/{providers → harnesses}/pi/PiSessionParser.test.js +171 -1
  98. package/dist/__tests__/harnesses/pi/PiSessionParser.test.js.map +1 -0
  99. package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js +1 -1
  100. package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js.map +1 -1
  101. package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js.map +1 -1
  102. package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
  103. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js.map +1 -1
  104. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js +1 -1
  105. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js.map +1 -1
  106. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js.map +1 -1
  107. package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js +1 -1
  108. package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js.map +1 -1
  109. package/dist/__tests__/readiness/AgentReadiness.test.js +20 -0
  110. package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
  111. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +49 -0
  112. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
  113. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js +650 -0
  114. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js.map +1 -0
  115. package/dist/__tests__/utils/agents.test.js +72 -2
  116. package/dist/__tests__/utils/agents.test.js.map +1 -1
  117. package/dist/__tests__/utils/conversationTail.bench.test.js +258 -0
  118. package/dist/__tests__/utils/conversationTail.bench.test.js.map +1 -0
  119. package/dist/__tests__/utils/conversationTailParity.test.js +588 -0
  120. package/dist/__tests__/utils/conversationTailParity.test.js.map +1 -0
  121. package/dist/__tests__/utils/jsonlTail.test.js +360 -0
  122. package/dist/__tests__/utils/jsonlTail.test.js.map +1 -0
  123. package/dist/__tests__/utils/matchingConstants.test.js +35 -0
  124. package/dist/__tests__/utils/matchingConstants.test.js.map +1 -0
  125. package/dist/__tests__/utils/process.test.js +436 -2
  126. package/dist/__tests__/utils/process.test.js.map +1 -1
  127. package/dist/adapters/AgentAdapter.d.ts +25 -6
  128. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  129. package/dist/adapters/AgentAdapter.js +12 -3
  130. package/dist/adapters/AgentAdapter.js.map +1 -1
  131. package/dist/capacity/claude.d.ts +17 -0
  132. package/dist/capacity/claude.d.ts.map +1 -0
  133. package/dist/capacity/claude.js +271 -0
  134. package/dist/capacity/claude.js.map +1 -0
  135. package/dist/capacity/codex.d.ts +1 -2
  136. package/dist/capacity/codex.d.ts.map +1 -1
  137. package/dist/capacity/codex.js +5 -47
  138. package/dist/capacity/codex.js.map +1 -1
  139. package/dist/capacity/index.d.ts +11 -0
  140. package/dist/capacity/index.d.ts.map +1 -1
  141. package/dist/capacity/index.js +17 -0
  142. package/dist/capacity/index.js.map +1 -1
  143. package/dist/capacity/openai.d.ts +47 -0
  144. package/dist/capacity/openai.d.ts.map +1 -0
  145. package/dist/capacity/openai.js +307 -0
  146. package/dist/capacity/openai.js.map +1 -0
  147. package/dist/capacity/wham.d.ts +16 -0
  148. package/dist/capacity/wham.d.ts.map +1 -0
  149. package/dist/capacity/wham.js +66 -0
  150. package/dist/capacity/wham.js.map +1 -0
  151. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts +13 -0
  152. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts.map +1 -0
  153. package/dist/harnesses/antigravity/AntigravityAgentMapper.js +30 -0
  154. package/dist/harnesses/antigravity/AntigravityAgentMapper.js.map +1 -0
  155. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts +32 -0
  156. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts.map +1 -0
  157. package/dist/harnesses/antigravity/AntigravityCliAdapter.js +97 -0
  158. package/dist/harnesses/antigravity/AntigravityCliAdapter.js.map +1 -0
  159. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts +30 -0
  160. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts.map +1 -0
  161. package/dist/harnesses/antigravity/AntigravitySessionLocator.js +56 -0
  162. package/dist/harnesses/antigravity/AntigravitySessionLocator.js.map +1 -0
  163. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts +75 -0
  164. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts.map +1 -0
  165. package/dist/harnesses/antigravity/AntigravitySessionParser.js +174 -0
  166. package/dist/harnesses/antigravity/AntigravitySessionParser.js.map +1 -0
  167. package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts.map +1 -1
  168. package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.js +4 -10
  169. package/dist/harnesses/claude/ClaudeAgentMapper.js.map +1 -0
  170. package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.d.ts +5 -6
  171. package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts.map +1 -0
  172. package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.js +17 -15
  173. package/dist/harnesses/claude/ClaudeCodeAdapter.js.map +1 -0
  174. package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts.map +1 -1
  175. package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.js +3 -3
  176. package/dist/harnesses/claude/ClaudeSessionLocator.js.map +1 -0
  177. package/dist/{providers → harnesses}/claude/ClaudeSessionParser.d.ts +40 -6
  178. package/dist/harnesses/claude/ClaudeSessionParser.d.ts.map +1 -0
  179. package/dist/{providers → harnesses}/claude/ClaudeSessionParser.js +141 -85
  180. package/dist/harnesses/claude/ClaudeSessionParser.js.map +1 -0
  181. package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
  182. package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js.map +1 -1
  183. package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
  184. package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js.map +1 -1
  185. package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
  186. package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js.map +1 -1
  187. package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
  188. package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js.map +1 -1
  189. package/dist/{providers → harnesses}/codex/CodexAdapter.d.ts +5 -4
  190. package/dist/harnesses/codex/CodexAdapter.d.ts.map +1 -0
  191. package/dist/{providers → harnesses}/codex/CodexAdapter.js +139 -19
  192. package/dist/harnesses/codex/CodexAdapter.js.map +1 -0
  193. package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts.map +1 -1
  194. package/dist/{providers → harnesses}/codex/CodexAgentMapper.js +4 -11
  195. package/dist/harnesses/codex/CodexAgentMapper.js.map +1 -0
  196. package/dist/harnesses/codex/CodexSessionLocator.d.ts +74 -0
  197. package/dist/harnesses/codex/CodexSessionLocator.d.ts.map +1 -0
  198. package/dist/harnesses/codex/CodexSessionLocator.js +359 -0
  199. package/dist/harnesses/codex/CodexSessionLocator.js.map +1 -0
  200. package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts.map +1 -1
  201. package/dist/{providers → harnesses}/codex/CodexSessionMapping.js +3 -3
  202. package/dist/harnesses/codex/CodexSessionMapping.js.map +1 -0
  203. package/dist/harnesses/codex/CodexSessionParser.d.ts +89 -0
  204. package/dist/harnesses/codex/CodexSessionParser.d.ts.map +1 -0
  205. package/dist/{providers → harnesses}/codex/CodexSessionParser.js +124 -78
  206. package/dist/harnesses/codex/CodexSessionParser.js.map +1 -0
  207. package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts.map +1 -1
  208. package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js.map +1 -1
  209. package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
  210. package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js.map +1 -1
  211. package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts.map +1 -1
  212. package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js.map +1 -1
  213. package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts.map +1 -1
  214. package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js.map +1 -1
  215. package/dist/{providers → harnesses}/copilot/CopilotAdapter.d.ts +7 -6
  216. package/dist/harnesses/copilot/CopilotAdapter.d.ts.map +1 -0
  217. package/dist/{providers → harnesses}/copilot/CopilotAdapter.js +19 -14
  218. package/dist/harnesses/copilot/CopilotAdapter.js.map +1 -0
  219. package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts.map +1 -1
  220. package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.js +4 -11
  221. package/dist/harnesses/copilot/CopilotAgentMapper.js.map +1 -0
  222. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts +42 -0
  223. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts.map +1 -0
  224. package/dist/harnesses/copilot/CopilotSessionLocator.js +126 -0
  225. package/dist/harnesses/copilot/CopilotSessionLocator.js.map +1 -0
  226. package/dist/harnesses/copilot/CopilotSessionParser.d.ts +62 -0
  227. package/dist/harnesses/copilot/CopilotSessionParser.d.ts.map +1 -0
  228. package/dist/harnesses/copilot/CopilotSessionParser.js +236 -0
  229. package/dist/harnesses/copilot/CopilotSessionParser.js.map +1 -0
  230. package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts.map +1 -1
  231. package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.js +4 -11
  232. package/dist/harnesses/gemini/GeminiAgentMapper.js.map +1 -0
  233. package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.d.ts +4 -5
  234. package/dist/harnesses/gemini/GeminiCliAdapter.d.ts.map +1 -0
  235. package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.js +6 -7
  236. package/dist/harnesses/gemini/GeminiCliAdapter.js.map +1 -0
  237. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts +72 -0
  238. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts.map +1 -0
  239. package/dist/harnesses/gemini/GeminiSessionLocator.js +300 -0
  240. package/dist/harnesses/gemini/GeminiSessionLocator.js.map +1 -0
  241. package/dist/{providers → harnesses}/gemini/GeminiSessionParser.d.ts +34 -7
  242. package/dist/harnesses/gemini/GeminiSessionParser.d.ts.map +1 -0
  243. package/dist/harnesses/gemini/GeminiSessionParser.js +272 -0
  244. package/dist/harnesses/gemini/GeminiSessionParser.js.map +1 -0
  245. package/dist/harnesses/gemini/fileSignature.d.ts +8 -0
  246. package/dist/harnesses/gemini/fileSignature.d.ts.map +1 -0
  247. package/dist/harnesses/gemini/fileSignature.js +9 -0
  248. package/dist/harnesses/gemini/fileSignature.js.map +1 -0
  249. package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts.map +1 -1
  250. package/dist/{providers → harnesses}/grok/GrokAgentMapper.js +4 -10
  251. package/dist/harnesses/grok/GrokAgentMapper.js.map +1 -0
  252. package/dist/{providers → harnesses}/grok/GrokCliAdapter.d.ts +5 -5
  253. package/dist/harnesses/grok/GrokCliAdapter.d.ts.map +1 -0
  254. package/dist/{providers → harnesses}/grok/GrokCliAdapter.js +14 -10
  255. package/dist/harnesses/grok/GrokCliAdapter.js.map +1 -0
  256. package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts.map +1 -1
  257. package/dist/{providers → harnesses}/grok/GrokSessionLocator.js +2 -2
  258. package/dist/harnesses/grok/GrokSessionLocator.js.map +1 -0
  259. package/dist/harnesses/grok/GrokSessionParser.d.ts +87 -0
  260. package/dist/harnesses/grok/GrokSessionParser.d.ts.map +1 -0
  261. package/dist/harnesses/grok/GrokSessionParser.js +185 -0
  262. package/dist/harnesses/grok/GrokSessionParser.js.map +1 -0
  263. package/dist/harnesses/index.d.ts +7 -0
  264. package/dist/harnesses/index.d.ts.map +1 -0
  265. package/dist/harnesses/index.js +27 -0
  266. package/dist/harnesses/index.js.map +1 -0
  267. package/dist/harnesses/kiro/KiroAdapter.d.ts +31 -0
  268. package/dist/harnesses/kiro/KiroAdapter.d.ts.map +1 -0
  269. package/dist/harnesses/kiro/KiroAdapter.js +125 -0
  270. package/dist/harnesses/kiro/KiroAdapter.js.map +1 -0
  271. package/dist/harnesses/kiro/KiroAgentMapper.d.ts +13 -0
  272. package/dist/harnesses/kiro/KiroAgentMapper.d.ts.map +1 -0
  273. package/dist/harnesses/kiro/KiroAgentMapper.js +29 -0
  274. package/dist/harnesses/kiro/KiroAgentMapper.js.map +1 -0
  275. package/dist/harnesses/kiro/KiroSessionLocator.d.ts +38 -0
  276. package/dist/harnesses/kiro/KiroSessionLocator.d.ts.map +1 -0
  277. package/dist/harnesses/kiro/KiroSessionLocator.js +95 -0
  278. package/dist/harnesses/kiro/KiroSessionLocator.js.map +1 -0
  279. package/dist/harnesses/kiro/KiroSessionParser.d.ts +81 -0
  280. package/dist/harnesses/kiro/KiroSessionParser.d.ts.map +1 -0
  281. package/dist/harnesses/kiro/KiroSessionParser.js +251 -0
  282. package/dist/harnesses/kiro/KiroSessionParser.js.map +1 -0
  283. package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.d.ts +2 -4
  284. package/dist/harnesses/opencode/OpenCodeAdapter.d.ts.map +1 -0
  285. package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.js +4 -7
  286. package/dist/harnesses/opencode/OpenCodeAdapter.js.map +1 -0
  287. package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts.map +1 -1
  288. package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.js +5 -13
  289. package/dist/harnesses/opencode/OpenCodeAgentMapper.js.map +1 -0
  290. package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts.map +1 -1
  291. package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.js +2 -2
  292. package/dist/harnesses/opencode/OpenCodeSessionLocator.js.map +1 -0
  293. package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.d.ts +2 -4
  294. package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts.map +1 -0
  295. package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.js +2 -1
  296. package/dist/harnesses/opencode/OpenCodeSessionParser.js.map +1 -0
  297. package/dist/{providers → harnesses}/pi/PiAdapter.d.ts +5 -4
  298. package/dist/harnesses/pi/PiAdapter.d.ts.map +1 -0
  299. package/dist/{providers → harnesses}/pi/PiAdapter.js +16 -12
  300. package/dist/harnesses/pi/PiAdapter.js.map +1 -0
  301. package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts.map +1 -1
  302. package/dist/{providers → harnesses}/pi/PiAgentMapper.js +4 -11
  303. package/dist/harnesses/pi/PiAgentMapper.js.map +1 -0
  304. package/dist/harnesses/pi/PiSessionLocator.d.ts +61 -0
  305. package/dist/harnesses/pi/PiSessionLocator.d.ts.map +1 -0
  306. package/dist/harnesses/pi/PiSessionLocator.js +212 -0
  307. package/dist/harnesses/pi/PiSessionLocator.js.map +1 -0
  308. package/dist/harnesses/pi/PiSessionParser.d.ts +88 -0
  309. package/dist/harnesses/pi/PiSessionParser.d.ts.map +1 -0
  310. package/dist/harnesses/pi/PiSessionParser.js +318 -0
  311. package/dist/harnesses/pi/PiSessionParser.js.map +1 -0
  312. package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts.map +1 -1
  313. package/dist/{providers → harnesses}/pi/PiSessionTracker.js +2 -2
  314. package/dist/harnesses/pi/PiSessionTracker.js.map +1 -0
  315. package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts.map +1 -1
  316. package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js.map +1 -1
  317. package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts.map +1 -1
  318. package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js.map +1 -1
  319. package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts.map +1 -1
  320. package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js.map +1 -1
  321. package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts.map +1 -1
  322. package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js.map +1 -1
  323. package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts.map +1 -1
  324. package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js.map +1 -1
  325. package/dist/harnesses/shared.d.ts +41 -0
  326. package/dist/harnesses/shared.d.ts.map +1 -0
  327. package/dist/harnesses/shared.js +71 -0
  328. package/dist/harnesses/shared.js.map +1 -0
  329. package/dist/index.d.ts +28 -25
  330. package/dist/index.d.ts.map +1 -1
  331. package/dist/index.js +19 -16
  332. package/dist/index.js.map +1 -1
  333. package/dist/readiness/AgentReadiness.d.ts +1 -1
  334. package/dist/readiness/AgentReadiness.d.ts.map +1 -1
  335. package/dist/readiness/AgentReadiness.js.map +1 -1
  336. package/dist/runtime/ManagedAgentRuntime.js +3 -1
  337. package/dist/runtime/ManagedAgentRuntime.js.map +1 -1
  338. package/dist/runtime/herdr/HerdrAgentDiscovery.js +10 -0
  339. package/dist/runtime/herdr/HerdrAgentDiscovery.js.map +1 -1
  340. package/dist/utils/IncrementalJsonlSummary.d.ts +100 -0
  341. package/dist/utils/IncrementalJsonlSummary.d.ts.map +1 -0
  342. package/dist/utils/IncrementalJsonlSummary.js +209 -0
  343. package/dist/utils/IncrementalJsonlSummary.js.map +1 -0
  344. package/dist/utils/agents.d.ts +3 -2
  345. package/dist/utils/agents.d.ts.map +1 -1
  346. package/dist/utils/agents.js +61 -15
  347. package/dist/utils/agents.js.map +1 -1
  348. package/dist/utils/index.d.ts +2 -1
  349. package/dist/utils/index.d.ts.map +1 -1
  350. package/dist/utils/index.js +1 -1
  351. package/dist/utils/index.js.map +1 -1
  352. package/dist/utils/jsonlTail.d.ts +73 -0
  353. package/dist/utils/jsonlTail.d.ts.map +1 -0
  354. package/dist/utils/jsonlTail.js +238 -0
  355. package/dist/utils/jsonlTail.js.map +1 -0
  356. package/dist/utils/matching.d.ts +2 -0
  357. package/dist/utils/matching.d.ts.map +1 -1
  358. package/dist/utils/matching.js +3 -2
  359. package/dist/utils/matching.js.map +1 -1
  360. package/dist/utils/matchingConstants.d.ts +15 -0
  361. package/dist/utils/matchingConstants.d.ts.map +1 -0
  362. package/dist/utils/matchingConstants.js +14 -0
  363. package/dist/utils/matchingConstants.js.map +1 -0
  364. package/dist/utils/process.d.ts +38 -2
  365. package/dist/utils/process.d.ts.map +1 -1
  366. package/dist/utils/process.js +131 -43
  367. package/dist/utils/process.js.map +1 -1
  368. package/package.json +2 -1
  369. package/scripts/benchmark-cold-start.mjs +350 -0
  370. package/src/AgentManager.ts +26 -5
  371. package/src/__tests__/AgentManager.test.ts +141 -3
  372. package/src/__tests__/adapters/IncrementalSessionRefresh.test.ts +437 -0
  373. package/src/__tests__/adapters/adapterProcessImports.test.ts +58 -0
  374. package/src/__tests__/adapters/adapterSnapshotCandidates.test.ts +243 -0
  375. package/src/__tests__/capacity/claude.test.ts +467 -0
  376. package/src/__tests__/capacity/fixtures/claude-credentials.json +7 -0
  377. package/src/__tests__/capacity/fixtures/claude-usage-malformed.json +1 -0
  378. package/src/__tests__/capacity/fixtures/claude-usage-partial.json +15 -0
  379. package/src/__tests__/capacity/fixtures/claude-usage.json +63 -0
  380. package/src/__tests__/capacity/fixtures/openai-auth.json +6 -0
  381. package/src/__tests__/capacity/fixtures/openai-codex-auth.json +9 -0
  382. package/src/__tests__/capacity/fixtures/openai-usage-completions.json +67 -0
  383. package/src/__tests__/capacity/fixtures/openai-usage-responses.json +20 -0
  384. package/src/__tests__/capacity/fixtures/wham-usage.json +32 -0
  385. package/src/__tests__/capacity/openai.test.ts +560 -0
  386. package/src/__tests__/capacity/wham.test.ts +104 -0
  387. package/src/__tests__/harnesses/BoundedSummarySkip.test.ts +496 -0
  388. package/src/__tests__/harnesses/SessionSummaryEquivalence.test.ts +726 -0
  389. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.ts +133 -0
  390. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.ts +396 -0
  391. package/src/__tests__/harnesses/builtinAdapters.test.ts +33 -0
  392. package/src/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.ts +5 -5
  393. package/src/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.ts +54 -24
  394. package/src/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.ts +1 -12
  395. package/src/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.ts +2 -2
  396. package/src/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.ts +1 -1
  397. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.ts +1 -1
  398. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.ts +4 -4
  399. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.ts +2 -2
  400. package/src/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.ts +277 -12
  401. package/src/__tests__/harnesses/codex/CodexSessionLocator.test.ts +419 -0
  402. package/src/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.ts +1 -1
  403. package/src/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.ts +1 -1
  404. package/src/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.ts +4 -4
  405. package/src/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.ts +1 -1
  406. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.ts +1 -1
  407. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.ts +8 -18
  408. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.ts +3 -9
  409. package/src/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.ts +1 -1
  410. package/src/__tests__/harnesses/copilot/CopilotRefreshIO.test.ts +270 -0
  411. package/src/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.ts +27 -23
  412. package/src/__tests__/harnesses/gemini/GeminiSessionJsonl.test.ts +402 -0
  413. package/src/__tests__/harnesses/gemini/GeminiSessionLocator.test.ts +396 -0
  414. package/src/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.ts +2 -2
  415. package/src/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.ts +1 -1
  416. package/src/__tests__/harnesses/grok/GrokIncrementalRefresh.test.ts +170 -0
  417. package/src/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.ts +1 -1
  418. package/src/__tests__/harnesses/grok/GrokSessionParser.test.ts +230 -0
  419. package/src/__tests__/harnesses/kiro/KiroAdapter.test.ts +552 -0
  420. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.ts +1 -1
  421. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.ts +1 -1
  422. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.ts +2 -2
  423. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.ts +1 -1
  424. package/src/__tests__/{providers → harnesses}/pi/PiAdapter.test.ts +1 -1
  425. package/src/__tests__/harnesses/pi/PiDiscoveryIO.test.ts +337 -0
  426. package/src/__tests__/{providers → harnesses}/pi/PiSessionParser.test.ts +91 -1
  427. package/src/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.ts +1 -1
  428. package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.ts +1 -1
  429. package/src/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.ts +1 -1
  430. package/src/__tests__/readiness/AgentReadiness.test.ts +16 -0
  431. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +30 -0
  432. package/src/__tests__/utils/IncrementalJsonlSummary.test.ts +414 -0
  433. package/src/__tests__/utils/agents.test.ts +83 -2
  434. package/src/__tests__/utils/conversationTail.bench.test.ts +193 -0
  435. package/src/__tests__/utils/conversationTailParity.test.ts +365 -0
  436. package/src/__tests__/utils/jsonlTail.test.ts +317 -0
  437. package/src/__tests__/utils/matchingConstants.test.ts +40 -0
  438. package/src/__tests__/utils/process.test.ts +254 -0
  439. package/src/adapters/AgentAdapter.ts +37 -12
  440. package/src/capacity/claude.ts +313 -0
  441. package/src/capacity/codex.ts +25 -134
  442. package/src/capacity/index.ts +33 -4
  443. package/src/capacity/openai.ts +355 -0
  444. package/src/capacity/wham.ts +84 -0
  445. package/src/harnesses/antigravity/AntigravityAgentMapper.ts +34 -0
  446. package/src/harnesses/antigravity/AntigravityCliAdapter.ts +126 -0
  447. package/src/harnesses/antigravity/AntigravitySessionLocator.ts +75 -0
  448. package/src/harnesses/antigravity/AntigravitySessionParser.ts +252 -0
  449. package/src/{providers → harnesses}/claude/ClaudeAgentMapper.ts +2 -10
  450. package/src/{providers → harnesses}/claude/ClaudeCodeAdapter.ts +22 -20
  451. package/src/{providers → harnesses}/claude/ClaudeSessionLocator.ts +3 -3
  452. package/src/{providers → harnesses}/claude/ClaudeSessionParser.ts +189 -97
  453. package/src/{providers → harnesses}/codex/CodexAdapter.ts +153 -29
  454. package/src/{providers → harnesses}/codex/CodexAgentMapper.ts +2 -11
  455. package/src/harnesses/codex/CodexSessionLocator.ts +509 -0
  456. package/src/{providers → harnesses}/codex/CodexSessionMapping.ts +3 -3
  457. package/src/{providers → harnesses}/codex/CodexSessionParser.ts +169 -92
  458. package/src/{providers → harnesses}/copilot/CopilotAdapter.ts +22 -22
  459. package/src/{providers → harnesses}/copilot/CopilotAgentMapper.ts +2 -11
  460. package/src/harnesses/copilot/CopilotSessionLocator.ts +161 -0
  461. package/src/harnesses/copilot/CopilotSessionParser.ts +380 -0
  462. package/src/{providers → harnesses}/gemini/GeminiAgentMapper.ts +2 -11
  463. package/src/{providers → harnesses}/gemini/GeminiCliAdapter.ts +7 -9
  464. package/src/harnesses/gemini/GeminiSessionLocator.ts +394 -0
  465. package/src/{providers → harnesses}/gemini/GeminiSessionParser.ts +155 -31
  466. package/src/harnesses/gemini/fileSignature.ts +10 -0
  467. package/src/{providers → harnesses}/grok/GrokAgentMapper.ts +2 -11
  468. package/src/{providers → harnesses}/grok/GrokCliAdapter.ts +16 -15
  469. package/src/{providers → harnesses}/grok/GrokSessionLocator.ts +2 -2
  470. package/src/harnesses/grok/GrokSessionParser.ts +251 -0
  471. package/src/harnesses/index.ts +28 -0
  472. package/src/harnesses/kiro/KiroAdapter.ts +143 -0
  473. package/src/harnesses/kiro/KiroAgentMapper.ts +34 -0
  474. package/src/harnesses/kiro/KiroSessionLocator.ts +143 -0
  475. package/src/harnesses/kiro/KiroSessionParser.ts +376 -0
  476. package/src/{providers → harnesses}/opencode/OpenCodeAdapter.ts +5 -11
  477. package/src/{providers → harnesses}/opencode/OpenCodeAgentMapper.ts +3 -13
  478. package/src/{providers → harnesses}/opencode/OpenCodeSessionLocator.ts +2 -2
  479. package/src/{providers → harnesses}/opencode/OpenCodeSessionParser.ts +4 -3
  480. package/src/{providers → harnesses}/pi/PiAdapter.ts +20 -18
  481. package/src/{providers → harnesses}/pi/PiAgentMapper.ts +2 -11
  482. package/src/harnesses/pi/PiSessionLocator.ts +288 -0
  483. package/src/harnesses/pi/PiSessionParser.ts +488 -0
  484. package/src/{providers → harnesses}/pi/PiSessionTracker.ts +2 -2
  485. package/src/harnesses/shared.ts +119 -0
  486. package/src/index.ts +34 -23
  487. package/src/readiness/AgentReadiness.ts +4 -1
  488. package/src/runtime/ManagedAgentRuntime.ts +2 -0
  489. package/src/runtime/herdr/HerdrAgentDiscovery.ts +5 -1
  490. package/src/utils/IncrementalJsonlSummary.ts +306 -0
  491. package/src/utils/agents.ts +62 -20
  492. package/src/utils/index.ts +2 -0
  493. package/src/utils/jsonlTail.ts +349 -0
  494. package/src/utils/matching.ts +3 -3
  495. package/src/utils/matchingConstants.ts +15 -0
  496. package/src/utils/process.ts +189 -45
  497. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +0 -1
  498. package/dist/__tests__/adapters/CodexAdapter.test.js.map +0 -1
  499. package/dist/__tests__/durable/CodexCliProbe.test.js.map +0 -1
  500. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +0 -1
  501. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +0 -1
  502. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +0 -1
  503. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +0 -1
  504. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +0 -1
  505. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +0 -1
  506. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +0 -1
  507. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +0 -1
  508. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +0 -1
  509. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +0 -194
  510. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +0 -1
  511. package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js.map +0 -1
  512. package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +0 -1
  513. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +0 -1
  514. package/dist/adapters/index.d.ts +0 -10
  515. package/dist/adapters/index.d.ts.map +0 -1
  516. package/dist/adapters/index.js +0 -10
  517. package/dist/adapters/index.js.map +0 -1
  518. package/dist/providers/claude/ClaudeAgentMapper.js.map +0 -1
  519. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +0 -1
  520. package/dist/providers/claude/ClaudeCodeAdapter.js.map +0 -1
  521. package/dist/providers/claude/ClaudeSessionLocator.js.map +0 -1
  522. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +0 -1
  523. package/dist/providers/claude/ClaudeSessionParser.js.map +0 -1
  524. package/dist/providers/codex/CodexAdapter.d.ts.map +0 -1
  525. package/dist/providers/codex/CodexAdapter.js.map +0 -1
  526. package/dist/providers/codex/CodexAgentMapper.js.map +0 -1
  527. package/dist/providers/codex/CodexSessionLocator.d.ts +0 -44
  528. package/dist/providers/codex/CodexSessionLocator.d.ts.map +0 -1
  529. package/dist/providers/codex/CodexSessionLocator.js +0 -207
  530. package/dist/providers/codex/CodexSessionLocator.js.map +0 -1
  531. package/dist/providers/codex/CodexSessionMapping.js.map +0 -1
  532. package/dist/providers/codex/CodexSessionParser.d.ts +0 -58
  533. package/dist/providers/codex/CodexSessionParser.d.ts.map +0 -1
  534. package/dist/providers/codex/CodexSessionParser.js.map +0 -1
  535. package/dist/providers/copilot/CopilotAdapter.d.ts.map +0 -1
  536. package/dist/providers/copilot/CopilotAdapter.js.map +0 -1
  537. package/dist/providers/copilot/CopilotAgentMapper.js.map +0 -1
  538. package/dist/providers/copilot/CopilotSessionLocator.d.ts +0 -20
  539. package/dist/providers/copilot/CopilotSessionLocator.d.ts.map +0 -1
  540. package/dist/providers/copilot/CopilotSessionLocator.js +0 -49
  541. package/dist/providers/copilot/CopilotSessionLocator.js.map +0 -1
  542. package/dist/providers/copilot/CopilotSessionParser.d.ts +0 -30
  543. package/dist/providers/copilot/CopilotSessionParser.d.ts.map +0 -1
  544. package/dist/providers/copilot/CopilotSessionParser.js +0 -181
  545. package/dist/providers/copilot/CopilotSessionParser.js.map +0 -1
  546. package/dist/providers/gemini/GeminiAgentMapper.js.map +0 -1
  547. package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +0 -1
  548. package/dist/providers/gemini/GeminiCliAdapter.js.map +0 -1
  549. package/dist/providers/gemini/GeminiSessionLocator.d.ts +0 -30
  550. package/dist/providers/gemini/GeminiSessionLocator.d.ts.map +0 -1
  551. package/dist/providers/gemini/GeminiSessionLocator.js +0 -142
  552. package/dist/providers/gemini/GeminiSessionLocator.js.map +0 -1
  553. package/dist/providers/gemini/GeminiSessionParser.d.ts.map +0 -1
  554. package/dist/providers/gemini/GeminiSessionParser.js +0 -166
  555. package/dist/providers/gemini/GeminiSessionParser.js.map +0 -1
  556. package/dist/providers/grok/GrokAgentMapper.js.map +0 -1
  557. package/dist/providers/grok/GrokCliAdapter.d.ts.map +0 -1
  558. package/dist/providers/grok/GrokCliAdapter.js.map +0 -1
  559. package/dist/providers/grok/GrokSessionLocator.js.map +0 -1
  560. package/dist/providers/grok/GrokSessionParser.d.ts +0 -54
  561. package/dist/providers/grok/GrokSessionParser.d.ts.map +0 -1
  562. package/dist/providers/grok/GrokSessionParser.js +0 -122
  563. package/dist/providers/grok/GrokSessionParser.js.map +0 -1
  564. package/dist/providers/opencode/OpenCodeAdapter.d.ts.map +0 -1
  565. package/dist/providers/opencode/OpenCodeAdapter.js.map +0 -1
  566. package/dist/providers/opencode/OpenCodeAgentMapper.js.map +0 -1
  567. package/dist/providers/opencode/OpenCodeSessionLocator.js.map +0 -1
  568. package/dist/providers/opencode/OpenCodeSessionParser.d.ts.map +0 -1
  569. package/dist/providers/opencode/OpenCodeSessionParser.js.map +0 -1
  570. package/dist/providers/pi/PiAdapter.d.ts.map +0 -1
  571. package/dist/providers/pi/PiAdapter.js.map +0 -1
  572. package/dist/providers/pi/PiAgentMapper.js.map +0 -1
  573. package/dist/providers/pi/PiSessionLocator.d.ts +0 -24
  574. package/dist/providers/pi/PiSessionLocator.d.ts.map +0 -1
  575. package/dist/providers/pi/PiSessionLocator.js +0 -86
  576. package/dist/providers/pi/PiSessionLocator.js.map +0 -1
  577. package/dist/providers/pi/PiSessionParser.d.ts +0 -36
  578. package/dist/providers/pi/PiSessionParser.d.ts.map +0 -1
  579. package/dist/providers/pi/PiSessionParser.js +0 -191
  580. package/dist/providers/pi/PiSessionParser.js.map +0 -1
  581. package/dist/providers/pi/PiSessionTracker.js.map +0 -1
  582. package/src/__tests__/fixtures/fake-claude.cjs +0 -31
  583. package/src/__tests__/fixtures/fake-codex.cjs +0 -56
  584. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +0 -182
  585. package/src/adapters/index.ts +0 -15
  586. package/src/providers/codex/CodexSessionLocator.ts +0 -279
  587. package/src/providers/copilot/CopilotSessionLocator.ts +0 -63
  588. package/src/providers/copilot/CopilotSessionParser.ts +0 -289
  589. package/src/providers/gemini/GeminiSessionLocator.ts +0 -183
  590. package/src/providers/grok/GrokSessionParser.ts +0 -166
  591. package/src/providers/pi/PiSessionLocator.ts +0 -110
  592. package/src/providers/pi/PiSessionParser.ts +0 -284
  593. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js +0 -0
  594. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js +0 -0
  595. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js +0 -0
  596. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js +0 -0
  597. /package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts +0 -0
  598. /package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts +0 -0
  599. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts +0 -0
  600. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js +0 -0
  601. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts +0 -0
  602. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js +0 -0
  603. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts +0 -0
  604. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js +0 -0
  605. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts +0 -0
  606. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js +0 -0
  607. /package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts +0 -0
  608. /package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts +0 -0
  609. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts +0 -0
  610. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js +0 -0
  611. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts +0 -0
  612. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js +0 -0
  613. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts +0 -0
  614. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js +0 -0
  615. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts +0 -0
  616. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js +0 -0
  617. /package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts +0 -0
  618. /package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts +0 -0
  619. /package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts +0 -0
  620. /package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts +0 -0
  621. /package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts +0 -0
  622. /package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts +0 -0
  623. /package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts +0 -0
  624. /package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts +0 -0
  625. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts +0 -0
  626. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js +0 -0
  627. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts +0 -0
  628. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js +0 -0
  629. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts +0 -0
  630. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js +0 -0
  631. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts +0 -0
  632. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js +0 -0
  633. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts +0 -0
  634. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js +0 -0
  635. /package/src/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.ts +0 -0
  636. /package/src/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.ts +0 -0
  637. /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.ts +0 -0
  638. /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.ts +0 -0
  639. /package/src/{providers → harnesses}/claude/durable/ClaudeCliProbe.ts +0 -0
  640. /package/src/{providers → harnesses}/claude/durable/ClaudePrintAgentService.ts +0 -0
  641. /package/src/{providers → harnesses}/claude/durable/ClaudePrintRunner.ts +0 -0
  642. /package/src/{providers → harnesses}/claude/durable/ClaudeStreamParser.ts +0 -0
  643. /package/src/{providers → harnesses}/codex/durable/CodexCliProbe.ts +0 -0
  644. /package/src/{providers → harnesses}/codex/durable/CodexPrintAgentService.ts +0 -0
  645. /package/src/{providers → harnesses}/codex/durable/CodexPrintRunner.ts +0 -0
  646. /package/src/{providers → harnesses}/codex/durable/CodexStreamParser.ts +0 -0
  647. /package/src/{providers → harnesses}/pi/durable/PiCliProbe.ts +0 -0
  648. /package/src/{providers → harnesses}/pi/durable/PiPrintAgentService.ts +0 -0
  649. /package/src/{providers → harnesses}/pi/durable/PiPrintProtocol.ts +0 -0
  650. /package/src/{providers → harnesses}/pi/durable/PiPrintRunner.ts +0 -0
  651. /package/src/{providers → harnesses}/pi/durable/PiStreamParser.ts +0 -0
@@ -0,0 +1,30 @@
1
+ import { generateAgentName } from "../../utils/matching.js";
2
+ import { processOnlyAgent } from "../shared.js";
3
+ import { AntigravitySessionParser } from "./AntigravitySessionParser.js";
4
+ export class AntigravityAgentMapper {
5
+ parser;
6
+ constructor(parser = new AntigravitySessionParser()){
7
+ this.parser = parser;
8
+ }
9
+ mapSessionToAgent({ session, processInfo }) {
10
+ return {
11
+ name: generateAgentName(session.projectPath, processInfo.pid),
12
+ type: "antigravity_cli",
13
+ status: this.parser.determineStatus(session),
14
+ summary: session.lastUserMessage || "Antigravity 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
+ mapProcessOnlyAgent(processInfo, cwd) {
23
+ return processOnlyAgent("antigravity_cli", processInfo, {
24
+ summary: "Antigravity CLI process running",
25
+ cwd
26
+ });
27
+ }
28
+ }
29
+
30
+ //# sourceMappingURL=AntigravityAgentMapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/antigravity/AntigravityAgentMapper.ts"],"sourcesContent":["import type { AgentInfo, ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { generateAgentName } from \"../../utils/matching.js\";\nimport { processOnlyAgent } from \"../shared.js\";\nimport { AntigravitySessionParser, type AntigravitySession } from \"./AntigravitySessionParser.js\";\n\nexport interface AntigravitySessionAgentInput {\n session: AntigravitySession;\n processInfo: ProcessInfo;\n}\n\nexport class AntigravityAgentMapper {\n constructor(private readonly parser: AntigravitySessionParser = new AntigravitySessionParser()) {}\n\n mapSessionToAgent({ session, processInfo }: AntigravitySessionAgentInput): AgentInfo {\n return {\n name: generateAgentName(session.projectPath, processInfo.pid),\n type: \"antigravity_cli\",\n status: this.parser.determineStatus(session),\n summary: session.lastUserMessage || \"Antigravity 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 mapProcessOnlyAgent(processInfo: ProcessInfo, cwd: string): AgentInfo {\n return processOnlyAgent(\"antigravity_cli\", processInfo, {\n summary: \"Antigravity CLI process running\",\n cwd,\n });\n }\n}\n"],"names":["generateAgentName","processOnlyAgent","AntigravitySessionParser","AntigravityAgentMapper","parser","mapSessionToAgent","session","processInfo","name","projectPath","pid","type","status","determineStatus","summary","lastUserMessage","sessionId","lastActive","sessionFilePath","mapProcessOnlyAgent","cwd"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,gBAAgB,QAAQ,eAAe;AAChD,SAASC,wBAAwB,QAAiC,gCAAgC;AAOlG,OAAO,MAAMC;;IACX,YAAY,AAAiBC,SAAmC,IAAIF,0BAA0B,CAAE;aAAnEE,SAAAA;IAAoE;IAEjGC,kBAAkB,EAAEC,OAAO,EAAEC,WAAW,EAAgC,EAAa;QACnF,OAAO;YACLC,MAAMR,kBAAkBM,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;IAEAC,oBAAoBZ,WAAwB,EAAEa,GAAW,EAAa;QACpE,OAAOnB,iBAAiB,mBAAmBM,aAAa;YACtDO,SAAS;YACTM;QACF;IACF;AACF"}
@@ -0,0 +1,32 @@
1
+ import type { AgentAdapter, AgentDetectionContext, AgentInfo, ProcessInfo, ConversationMessage, ConversationOptions, SessionSummary, ListSessionsOptions } from "../../adapters/AgentAdapter.js";
2
+ /**
3
+ * Antigravity CLI Adapter
4
+ *
5
+ * Detects running Antigravity CLI agents (Google's `agy` native binary) by:
6
+ * 1. Filtering `agy` processes from the shared process snapshot.
7
+ * 2. Resolving each process to its conversation via
8
+ * ~/.gemini/antigravity-cli/cache/last_conversations.json, a
9
+ * `{ <cwd>: <conversationId> }` map keyed by the process cwd.
10
+ * 3. Reading brain/<conversationId>/.system_generated/logs/transcript.jsonl;
11
+ * the last user request is the summary.
12
+ *
13
+ * This is the runtime side of Antigravity, independent of the `antigravity`
14
+ * environment that configures the Antigravity IDE.
15
+ */
16
+ export declare class AntigravityCliAdapter implements AgentAdapter {
17
+ readonly type: "antigravity_cli";
18
+ readonly processNames: readonly ["agy"];
19
+ private parser;
20
+ private mapper;
21
+ private locator;
22
+ constructor();
23
+ canHandle(processInfo: ProcessInfo): boolean;
24
+ detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
25
+ private detectRunningAgents;
26
+ getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[];
27
+ listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
28
+ /** Only registered conversations are listed, so look the id up in the registry. */
29
+ findSessionsById(sessionId: string): Promise<SessionSummary[]>;
30
+ private toSessionSummary;
31
+ }
32
+ //# sourceMappingURL=AntigravityCliAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AntigravityCliAdapter.d.ts","sourceRoot":"","sources":["../../../src/harnesses/antigravity/AntigravityCliAdapter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,qBAAqB,EACrB,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACpB,MAAM,gCAAgC,CAAC;AAMxC;;;;;;;;;;;;;GAaG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACxD,QAAQ,CAAC,IAAI,EAAG,iBAAiB,CAAU;IAC3C,QAAQ,CAAC,YAAY,mBAAoB;IAEzC,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,OAAO,CAA4B;;IAQ3C,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAItC,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;YAS3D,mBAAmB;IA0BjC,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE;IAIxF,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAgBzE,mFAAmF;IAC7E,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAWpE,OAAO,CAAC,gBAAgB;CAWzB"}
@@ -0,0 +1,97 @@
1
+ import { findHarnessProcesses, matchesExecutable } from "../shared.js";
2
+ import { AntigravityAgentMapper } from "./AntigravityAgentMapper.js";
3
+ import { AntigravitySessionLocator } from "./AntigravitySessionLocator.js";
4
+ import { AntigravitySessionParser } from "./AntigravitySessionParser.js";
5
+ /**
6
+ * Antigravity CLI Adapter
7
+ *
8
+ * Detects running Antigravity CLI agents (Google's `agy` native binary) by:
9
+ * 1. Filtering `agy` processes from the shared process snapshot.
10
+ * 2. Resolving each process to its conversation via
11
+ * ~/.gemini/antigravity-cli/cache/last_conversations.json, a
12
+ * `{ <cwd>: <conversationId> }` map keyed by the process cwd.
13
+ * 3. Reading brain/<conversationId>/.system_generated/logs/transcript.jsonl;
14
+ * the last user request is the summary.
15
+ *
16
+ * This is the runtime side of Antigravity, independent of the `antigravity`
17
+ * environment that configures the Antigravity IDE.
18
+ */ export class AntigravityCliAdapter {
19
+ type = "antigravity_cli";
20
+ processNames = [
21
+ "agy"
22
+ ];
23
+ parser;
24
+ mapper;
25
+ locator;
26
+ constructor(){
27
+ this.parser = new AntigravitySessionParser();
28
+ this.mapper = new AntigravityAgentMapper(this.parser);
29
+ this.locator = new AntigravitySessionLocator();
30
+ }
31
+ canHandle(processInfo) {
32
+ return matchesExecutable(processInfo.command, "agy");
33
+ }
34
+ async detectAgents(context) {
35
+ try {
36
+ return await this.detectRunningAgents(context);
37
+ } finally{
38
+ // Drop cached summaries for sessions that were not part of this refresh
39
+ this.parser.pruneSessionCache();
40
+ }
41
+ }
42
+ async detectRunningAgents(context) {
43
+ const { processes } = await findHarnessProcesses(this, context);
44
+ if (processes.length === 0) {
45
+ return [];
46
+ }
47
+ const agents = [];
48
+ for (const { process: proc, cwd, conversation } of this.locator.matchRunningProcesses(processes)){
49
+ const session = conversation ? this.parser.readSessionIncremental(conversation.conversationId, conversation.transcriptPath, cwd) : null;
50
+ if (session) {
51
+ agents.push(this.mapper.mapSessionToAgent({
52
+ session,
53
+ processInfo: proc
54
+ }));
55
+ } else {
56
+ agents.push(this.mapper.mapProcessOnlyAgent(proc, cwd));
57
+ }
58
+ }
59
+ return agents;
60
+ }
61
+ getConversation(sessionFilePath, options) {
62
+ return this.parser.getConversation(sessionFilePath, options);
63
+ }
64
+ async listSessions(opts) {
65
+ const filterCwd = opts?.cwd;
66
+ const summaries = [];
67
+ for (const { cwd, conversationId, transcriptPath } of this.locator.listConversations()){
68
+ if (filterCwd !== undefined && cwd !== filterCwd) continue;
69
+ const session = this.parser.readSession(conversationId, transcriptPath, cwd);
70
+ if (!session) continue;
71
+ summaries.push(this.toSessionSummary(session));
72
+ }
73
+ return summaries;
74
+ }
75
+ /** Only registered conversations are listed, so look the id up in the registry. */ async findSessionsById(sessionId) {
76
+ const summaries = [];
77
+ for (const { cwd, conversationId, transcriptPath } of this.locator.listConversations()){
78
+ if (conversationId !== sessionId) continue;
79
+ const session = this.parser.readSession(conversationId, transcriptPath, cwd);
80
+ if (session) summaries.push(this.toSessionSummary(session));
81
+ }
82
+ return summaries;
83
+ }
84
+ toSessionSummary(session) {
85
+ return {
86
+ type: this.type,
87
+ sessionId: session.sessionId,
88
+ cwd: session.projectPath,
89
+ firstUserMessage: session.firstUserMessage || "",
90
+ lastActive: session.lastActive,
91
+ startedAt: session.sessionStart,
92
+ sessionFilePath: session.sessionFilePath
93
+ };
94
+ }
95
+ }
96
+
97
+ //# sourceMappingURL=AntigravityCliAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/antigravity/AntigravityCliAdapter.ts"],"sourcesContent":["import type {\n AgentAdapter,\n AgentDetectionContext,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n ConversationOptions,\n SessionSummary,\n ListSessionsOptions,\n} from \"../../adapters/AgentAdapter.js\";\nimport { findHarnessProcesses, matchesExecutable } from \"../shared.js\";\nimport { AntigravityAgentMapper } from \"./AntigravityAgentMapper.js\";\nimport { AntigravitySessionLocator } from \"./AntigravitySessionLocator.js\";\nimport { AntigravitySessionParser, type AntigravitySession } from \"./AntigravitySessionParser.js\";\n\n/**\n * Antigravity CLI Adapter\n *\n * Detects running Antigravity CLI agents (Google's `agy` native binary) by:\n * 1. Filtering `agy` processes from the shared process snapshot.\n * 2. Resolving each process to its conversation via\n * ~/.gemini/antigravity-cli/cache/last_conversations.json, a\n * `{ <cwd>: <conversationId> }` map keyed by the process cwd.\n * 3. Reading brain/<conversationId>/.system_generated/logs/transcript.jsonl;\n * the last user request is the summary.\n *\n * This is the runtime side of Antigravity, independent of the `antigravity`\n * environment that configures the Antigravity IDE.\n */\nexport class AntigravityCliAdapter implements AgentAdapter {\n readonly type = \"antigravity_cli\" as const;\n readonly processNames = [\"agy\"] as const;\n\n private parser: AntigravitySessionParser;\n private mapper: AntigravityAgentMapper;\n private locator: AntigravitySessionLocator;\n\n constructor() {\n this.parser = new AntigravitySessionParser();\n this.mapper = new AntigravityAgentMapper(this.parser);\n this.locator = new AntigravitySessionLocator();\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return matchesExecutable(processInfo.command, \"agy\");\n }\n\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n try {\n return await this.detectRunningAgents(context);\n } finally {\n // Drop cached summaries for sessions that were not part of this refresh\n this.parser.pruneSessionCache();\n }\n }\n\n private async detectRunningAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const { processes } = await findHarnessProcesses(this, context);\n if (processes.length === 0) {\n return [];\n }\n\n const agents: AgentInfo[] = [];\n for (const { process: proc, cwd, conversation } of this.locator.matchRunningProcesses(\n processes,\n )) {\n const session = conversation\n ? this.parser.readSessionIncremental(\n conversation.conversationId,\n conversation.transcriptPath,\n cwd,\n )\n : null;\n if (session) {\n agents.push(this.mapper.mapSessionToAgent({ session, processInfo: proc }));\n } else {\n agents.push(this.mapper.mapProcessOnlyAgent(proc, cwd));\n }\n }\n return agents;\n }\n\n getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[] {\n return this.parser.getConversation(sessionFilePath, options);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n const filterCwd = opts?.cwd;\n const summaries: SessionSummary[] = [];\n\n for (const { cwd, conversationId, transcriptPath } of this.locator.listConversations()) {\n if (filterCwd !== undefined && cwd !== filterCwd) continue;\n\n const session = this.parser.readSession(conversationId, transcriptPath, cwd);\n if (!session) continue;\n\n summaries.push(this.toSessionSummary(session));\n }\n\n return summaries;\n }\n\n /** Only registered conversations are listed, so look the id up in the registry. */\n async findSessionsById(sessionId: string): Promise<SessionSummary[]> {\n const summaries: SessionSummary[] = [];\n for (const { cwd, conversationId, transcriptPath } of this.locator.listConversations()) {\n if (conversationId !== sessionId) continue;\n\n const session = this.parser.readSession(conversationId, transcriptPath, cwd);\n if (session) summaries.push(this.toSessionSummary(session));\n }\n return summaries;\n }\n\n private toSessionSummary(session: AntigravitySession): SessionSummary {\n return {\n type: this.type,\n sessionId: session.sessionId,\n cwd: session.projectPath,\n firstUserMessage: session.firstUserMessage || \"\",\n lastActive: session.lastActive,\n startedAt: session.sessionStart,\n sessionFilePath: session.sessionFilePath,\n };\n }\n}\n"],"names":["findHarnessProcesses","matchesExecutable","AntigravityAgentMapper","AntigravitySessionLocator","AntigravitySessionParser","AntigravityCliAdapter","type","processNames","parser","mapper","locator","canHandle","processInfo","command","detectAgents","context","detectRunningAgents","pruneSessionCache","processes","length","agents","process","proc","cwd","conversation","matchRunningProcesses","session","readSessionIncremental","conversationId","transcriptPath","push","mapSessionToAgent","mapProcessOnlyAgent","getConversation","sessionFilePath","options","listSessions","opts","filterCwd","summaries","listConversations","undefined","readSession","toSessionSummary","findSessionsById","sessionId","projectPath","firstUserMessage","lastActive","startedAt","sessionStart"],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import type { ProcessInfo } from "../../adapters/AgentAdapter.js";
2
+ /** A workspace cwd and the conversation the CLI last used there. */
3
+ export interface AntigravityConversationRef {
4
+ cwd: string;
5
+ conversationId: string;
6
+ transcriptPath: string;
7
+ }
8
+ /** A live `agy` process paired with its cwd and (if registered) conversation. */
9
+ export interface AntigravityProcessMatch {
10
+ process: ProcessInfo;
11
+ cwd: string;
12
+ conversation: AntigravityConversationRef | null;
13
+ }
14
+ export interface AntigravitySessionLocatorOptions {
15
+ /** Overrides the base dir (defaults to ANTIGRAVITY_CLI_HOME or ~/.gemini/antigravity-cli). */
16
+ baseDir?: string;
17
+ }
18
+ export declare class AntigravitySessionLocator {
19
+ private readonly baseDir;
20
+ constructor(options?: AntigravitySessionLocatorOptions);
21
+ /** Pair live processes with their conversation, joined on the process cwd. */
22
+ matchRunningProcesses(processes: ProcessInfo[]): AntigravityProcessMatch[];
23
+ /**
24
+ * Read cache/last_conversations.json, a `{ <cwd>: <conversationId> }` map the
25
+ * CLI rewrites as the current conversation per workspace changes.
26
+ */
27
+ listConversations(): AntigravityConversationRef[];
28
+ private transcriptPath;
29
+ }
30
+ //# sourceMappingURL=AntigravitySessionLocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AntigravitySessionLocator.d.ts","sourceRoot":"","sources":["../../../src/harnesses/antigravity/AntigravitySessionLocator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAQlE,oEAAoE;AACpE,MAAM,WAAW,0BAA0B;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,iFAAiF;AACjF,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,WAAW,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,YAAY,EAAE,0BAA0B,GAAG,IAAI,CAAC;CACjD;AAED,MAAM,WAAW,gCAAgC;IAC/C,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,yBAAyB;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,OAAO,GAAE,gCAAqC;IAM1D,8EAA8E;IAC9E,qBAAqB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,uBAAuB,EAAE;IAQ1E;;;OAGG;IACH,iBAAiB,IAAI,0BAA0B,EAAE;IAqBjD,OAAO,CAAC,cAAc;CAGvB"}
@@ -0,0 +1,56 @@
1
+ import * as path from "path";
2
+ import { safeReadFile } from "../../utils/session.js";
3
+ import { homeDir } from "../shared.js";
4
+ const REGISTRY_FILE = path.join("cache", "last_conversations.json");
5
+ const BRAIN_DIR = "brain";
6
+ const TRANSCRIPT_REL = path.join(".system_generated", "logs", "transcript.jsonl");
7
+ export class AntigravitySessionLocator {
8
+ baseDir;
9
+ constructor(options = {}){
10
+ this.baseDir = options.baseDir ?? (process.env.ANTIGRAVITY_CLI_HOME || path.join(homeDir(), ".gemini", "antigravity-cli"));
11
+ }
12
+ /** Pair live processes with their conversation, joined on the process cwd. */ matchRunningProcesses(processes) {
13
+ const byCwd = new Map(this.listConversations().map((ref)=>[
14
+ ref.cwd,
15
+ ref
16
+ ]));
17
+ return processes.map((proc)=>{
18
+ const cwd = proc.cwd || "";
19
+ return {
20
+ process: proc,
21
+ cwd,
22
+ conversation: byCwd.get(cwd) ?? null
23
+ };
24
+ });
25
+ }
26
+ /**
27
+ * Read cache/last_conversations.json, a `{ <cwd>: <conversationId> }` map the
28
+ * CLI rewrites as the current conversation per workspace changes.
29
+ */ listConversations() {
30
+ const content = safeReadFile(path.join(this.baseDir, REGISTRY_FILE));
31
+ if (content === undefined) return [];
32
+ let parsed;
33
+ try {
34
+ parsed = JSON.parse(content);
35
+ } catch {
36
+ return [];
37
+ }
38
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) return [];
39
+ const refs = [];
40
+ for (const [cwd, conversationId] of Object.entries(parsed)){
41
+ if (cwd && typeof conversationId === "string" && conversationId) {
42
+ refs.push({
43
+ cwd,
44
+ conversationId,
45
+ transcriptPath: this.transcriptPath(conversationId)
46
+ });
47
+ }
48
+ }
49
+ return refs;
50
+ }
51
+ transcriptPath(conversationId) {
52
+ return path.join(this.baseDir, BRAIN_DIR, conversationId, TRANSCRIPT_REL);
53
+ }
54
+ }
55
+
56
+ //# sourceMappingURL=AntigravitySessionLocator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/antigravity/AntigravitySessionLocator.ts"],"sourcesContent":["import * as path from \"path\";\nimport type { ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { safeReadFile } from \"../../utils/session.js\";\nimport { homeDir } from \"../shared.js\";\n\nconst REGISTRY_FILE = path.join(\"cache\", \"last_conversations.json\");\nconst BRAIN_DIR = \"brain\";\nconst TRANSCRIPT_REL = path.join(\".system_generated\", \"logs\", \"transcript.jsonl\");\n\n/** A workspace cwd and the conversation the CLI last used there. */\nexport interface AntigravityConversationRef {\n cwd: string;\n conversationId: string;\n transcriptPath: string;\n}\n\n/** A live `agy` process paired with its cwd and (if registered) conversation. */\nexport interface AntigravityProcessMatch {\n process: ProcessInfo;\n cwd: string;\n conversation: AntigravityConversationRef | null;\n}\n\nexport interface AntigravitySessionLocatorOptions {\n /** Overrides the base dir (defaults to ANTIGRAVITY_CLI_HOME or ~/.gemini/antigravity-cli). */\n baseDir?: string;\n}\n\nexport class AntigravitySessionLocator {\n private readonly baseDir: string;\n\n constructor(options: AntigravitySessionLocatorOptions = {}) {\n this.baseDir =\n options.baseDir ??\n (process.env.ANTIGRAVITY_CLI_HOME || path.join(homeDir(), \".gemini\", \"antigravity-cli\"));\n }\n\n /** Pair live processes with their conversation, joined on the process cwd. */\n matchRunningProcesses(processes: ProcessInfo[]): AntigravityProcessMatch[] {\n const byCwd = new Map(this.listConversations().map((ref) => [ref.cwd, ref]));\n return processes.map((proc) => {\n const cwd = proc.cwd || \"\";\n return { process: proc, cwd, conversation: byCwd.get(cwd) ?? null };\n });\n }\n\n /**\n * Read cache/last_conversations.json, a `{ <cwd>: <conversationId> }` map the\n * CLI rewrites as the current conversation per workspace changes.\n */\n listConversations(): AntigravityConversationRef[] {\n const content = safeReadFile(path.join(this.baseDir, REGISTRY_FILE));\n if (content === undefined) return [];\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(content);\n } catch {\n return [];\n }\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return [];\n\n const refs: AntigravityConversationRef[] = [];\n for (const [cwd, conversationId] of Object.entries(parsed as Record<string, unknown>)) {\n if (cwd && typeof conversationId === \"string\" && conversationId) {\n refs.push({ cwd, conversationId, transcriptPath: this.transcriptPath(conversationId) });\n }\n }\n return refs;\n }\n\n private transcriptPath(conversationId: string): string {\n return path.join(this.baseDir, BRAIN_DIR, conversationId, TRANSCRIPT_REL);\n }\n}\n"],"names":["path","safeReadFile","homeDir","REGISTRY_FILE","join","BRAIN_DIR","TRANSCRIPT_REL","AntigravitySessionLocator","baseDir","options","process","env","ANTIGRAVITY_CLI_HOME","matchRunningProcesses","processes","byCwd","Map","listConversations","map","ref","cwd","proc","conversation","get","content","undefined","parsed","JSON","parse","Array","isArray","refs","conversationId","Object","entries","push","transcriptPath"],"mappings":"AAAA,YAAYA,UAAU,OAAO;AAE7B,SAASC,YAAY,QAAQ,yBAAyB;AACtD,SAASC,OAAO,QAAQ,eAAe;AAEvC,MAAMC,gBAAgBH,KAAKI,IAAI,CAAC,SAAS;AACzC,MAAMC,YAAY;AAClB,MAAMC,iBAAiBN,KAAKI,IAAI,CAAC,qBAAqB,QAAQ;AAqB9D,OAAO,MAAMG;IACMC,QAAgB;IAEjC,YAAYC,UAA4C,CAAC,CAAC,CAAE;QAC1D,IAAI,CAACD,OAAO,GACVC,QAAQD,OAAO,IACdE,CAAAA,QAAQC,GAAG,CAACC,oBAAoB,IAAIZ,KAAKI,IAAI,CAACF,WAAW,WAAW,kBAAiB;IAC1F;IAEA,4EAA4E,GAC5EW,sBAAsBC,SAAwB,EAA6B;QACzE,MAAMC,QAAQ,IAAIC,IAAI,IAAI,CAACC,iBAAiB,GAAGC,GAAG,CAAC,CAACC,MAAQ;gBAACA,IAAIC,GAAG;gBAAED;aAAI;QAC1E,OAAOL,UAAUI,GAAG,CAAC,CAACG;YACpB,MAAMD,MAAMC,KAAKD,GAAG,IAAI;YACxB,OAAO;gBAAEV,SAASW;gBAAMD;gBAAKE,cAAcP,MAAMQ,GAAG,CAACH,QAAQ;YAAK;QACpE;IACF;IAEA;;;GAGC,GACDH,oBAAkD;QAChD,MAAMO,UAAUvB,aAAaD,KAAKI,IAAI,CAAC,IAAI,CAACI,OAAO,EAAEL;QACrD,IAAIqB,YAAYC,WAAW,OAAO,EAAE;QAEpC,IAAIC;QACJ,IAAI;YACFA,SAASC,KAAKC,KAAK,CAACJ;QACtB,EAAE,OAAM;YACN,OAAO,EAAE;QACX;QACA,IAAI,CAACE,UAAU,OAAOA,WAAW,YAAYG,MAAMC,OAAO,CAACJ,SAAS,OAAO,EAAE;QAE7E,MAAMK,OAAqC,EAAE;QAC7C,KAAK,MAAM,CAACX,KAAKY,eAAe,IAAIC,OAAOC,OAAO,CAACR,QAAoC;YACrF,IAAIN,OAAO,OAAOY,mBAAmB,YAAYA,gBAAgB;gBAC/DD,KAAKI,IAAI,CAAC;oBAAEf;oBAAKY;oBAAgBI,gBAAgB,IAAI,CAACA,cAAc,CAACJ;gBAAgB;YACvF;QACF;QACA,OAAOD;IACT;IAEQK,eAAeJ,cAAsB,EAAU;QACrD,OAAOhC,KAAKI,IAAI,CAAC,IAAI,CAACI,OAAO,EAAEH,WAAW2B,gBAAgB1B;IAC5D;AACF"}
@@ -0,0 +1,75 @@
1
+ import type { ConversationMessage, ConversationOptions } from "../../adapters/AgentAdapter.js";
2
+ import { AgentStatus } from "../../adapters/AgentAdapter.js";
3
+ import { type JsonlSummaryBounds } from "../../utils/IncrementalJsonlSummary.js";
4
+ /** Parsed state for a single conversation. */
5
+ export interface AntigravitySession {
6
+ sessionId: string;
7
+ projectPath: string;
8
+ sessionFilePath: string;
9
+ sessionStart: Date;
10
+ lastActive: Date;
11
+ firstUserMessage?: string;
12
+ lastUserMessage?: string;
13
+ lastRole?: ConversationMessage["role"];
14
+ }
15
+ export interface AntigravitySessionParserOptions {
16
+ /** Cold-start scan bounds for `readSessionIncremental` (see IncrementalJsonlSummary). */
17
+ summaryBounds?: JsonlSummaryBounds | false;
18
+ }
19
+ export declare class AntigravitySessionParser {
20
+ /** Incremental reader backing `getConversation({ tail })`. */
21
+ private readonly tailReader;
22
+ private readonly sessionCache;
23
+ constructor(options?: AntigravitySessionParserOptions);
24
+ /**
25
+ * Parse a conversation's transcript.jsonl into an {@link AntigravitySession}.
26
+ * Returns null when the transcript is missing — there is no real session to
27
+ * surface.
28
+ */
29
+ readSession(conversationId: string, transcriptPath: string, projectPath: string): AntigravitySession | null;
30
+ /**
31
+ * Same result as `readSession`, but backed by a per-instance incremental
32
+ * cache so repeated refreshes only parse bytes appended since the last call.
33
+ * Call `pruneSessionCache()` once per refresh to evict files no longer read.
34
+ *
35
+ * The first read of a large transcript is a bounded head + tail scan (see
36
+ * `summaryReducer.skip`).
37
+ */
38
+ readSessionIncremental(conversationId: string, transcriptPath: string, projectPath: string): AntigravitySession | null;
39
+ /** Evict cached summaries for files not read since the previous prune. */
40
+ pruneSessionCache(): void;
41
+ getConversation(transcriptPath: string, options?: ConversationOptions): ConversationMessage[];
42
+ /**
43
+ * - past the idle threshold → IDLE
44
+ * - last turn is an assistant reply → WAITING (awaiting user)
45
+ * - otherwise (last turn was a user message, or unknown) → RUNNING
46
+ */
47
+ determineStatus(session: AntigravitySession): AgentStatus;
48
+ /**
49
+ * Fold one transcript record into the O(1) summary: first/last user request,
50
+ * the role of the last user/assistant turn, and the latest `created_at`.
51
+ * Uses the same record rules as `getConversation` (see `recordToMessage`).
52
+ *
53
+ * `skip` (bounded cold start) keeps the head's first user request and resets
54
+ * the latest fields, so those come from the tail only; without a timestamp in
55
+ * the tail, `lastActive` falls back to the file mtime.
56
+ */
57
+ private readonly summaryReducer;
58
+ private toSession;
59
+ /** Full pass over transcript.jsonl building every conversation turn. */
60
+ private parseTranscript;
61
+ private parseRecord;
62
+ /**
63
+ * USER_INPUT records are user turns and PLANNER_RESPONSE records are the
64
+ * model's reply. Everything else — MODEL tool calls (RUN_COMMAND, ...) and
65
+ * SYSTEM records (history, checkpoints) — is execution detail, shown as a
66
+ * system message only in verbose mode.
67
+ */
68
+ private recordToMessage;
69
+ /**
70
+ * The prompt inside <USER_REQUEST>...</USER_REQUEST>, or the whole trimmed
71
+ * text when the record has no wrapper. Null for an unwrapped blank record.
72
+ */
73
+ private extractUserRequest;
74
+ }
75
+ //# sourceMappingURL=AntigravitySessionParser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AntigravitySessionParser.d.ts","sourceRoot":"","sources":["../../../src/harnesses/antigravity/AntigravitySessionParser.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC/F,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAGL,KAAK,kBAAkB,EAExB,MAAM,wCAAwC,CAAC;AAwBhD,8CAA8C;AAC9C,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,mBAAmB,CAAC,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,+BAA+B;IAC9C,yFAAyF;IACzF,aAAa,CAAC,EAAE,kBAAkB,GAAG,KAAK,CAAC;CAC5C;AAED,qBAAa,wBAAwB;IACnC,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAyB;IAEpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAmD;gBAEpE,OAAO,GAAE,+BAAoC;IAMzD;;;;OAIG;IACH,WAAW,CACT,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,kBAAkB,GAAG,IAAI;IAS5B;;;;;;;OAOG;IACH,sBAAsB,CACpB,cAAc,EAAE,MAAM,EACtB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,MAAM,GAClB,kBAAkB,GAAG,IAAI;IAgB5B,0EAA0E;IAC1E,iBAAiB,IAAI,IAAI;IAIzB,eAAe,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,mBAAmB,EAAE;IAoB7F;;;;OAIG;IACH,eAAe,CAAC,OAAO,EAAE,kBAAkB,GAAG,WAAW;IAUzD;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAyB7B;IAEF,OAAO,CAAC,SAAS;IAoBjB,wEAAwE;IACxE,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,WAAW;IASnB;;;;;OAKG;IACH,OAAO,CAAC,eAAe;IAWvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAK3B"}
@@ -0,0 +1,174 @@
1
+ import { AgentStatus } from "../../adapters/AgentAdapter.js";
2
+ import { IncrementalJsonlSummary, reduceJsonlContent } from "../../utils/IncrementalJsonlSummary.js";
3
+ import { JsonlTailReader, normalizeTail } from "../../utils/jsonlTail.js";
4
+ import { safeReadFile, safeStat } from "../../utils/session.js";
5
+ import { flattenTextBlocks, isIdle, parseTimestamp } from "../shared.js";
6
+ export class AntigravitySessionParser {
7
+ /** Incremental reader backing `getConversation({ tail })`. */ tailReader = new JsonlTailReader();
8
+ sessionCache;
9
+ constructor(options = {}){
10
+ this.sessionCache = new IncrementalJsonlSummary(this.summaryReducer, {
11
+ bounds: options.summaryBounds
12
+ });
13
+ }
14
+ /**
15
+ * Parse a conversation's transcript.jsonl into an {@link AntigravitySession}.
16
+ * Returns null when the transcript is missing — there is no real session to
17
+ * surface.
18
+ */ readSession(conversationId, transcriptPath, projectPath) {
19
+ const stat = safeStat(transcriptPath);
20
+ if (!stat) return null;
21
+ const content = safeReadFile(transcriptPath);
22
+ const state = content === undefined ? {} : reduceJsonlContent(this.summaryReducer, content);
23
+ return this.toSession(conversationId, transcriptPath, projectPath, stat, stat.mtime, state);
24
+ }
25
+ /**
26
+ * Same result as `readSession`, but backed by a per-instance incremental
27
+ * cache so repeated refreshes only parse bytes appended since the last call.
28
+ * Call `pruneSessionCache()` once per refresh to evict files no longer read.
29
+ *
30
+ * The first read of a large transcript is a bounded head + tail scan (see
31
+ * `summaryReducer.skip`).
32
+ */ readSessionIncremental(conversationId, transcriptPath, projectPath) {
33
+ const stat = safeStat(transcriptPath);
34
+ if (!stat) return null;
35
+ // Present but unreadable: surface the session without a summary, like readSession.
36
+ const result = this.sessionCache.read(transcriptPath);
37
+ return this.toSession(conversationId, transcriptPath, projectPath, stat, result?.mtime ?? stat.mtime, result?.state ?? {});
38
+ }
39
+ /** Evict cached summaries for files not read since the previous prune. */ pruneSessionCache() {
40
+ this.sessionCache.prune();
41
+ }
42
+ getConversation(transcriptPath, options) {
43
+ const verbose = options?.verbose ?? false;
44
+ const tail = normalizeTail(options?.tail);
45
+ if (tail === undefined) {
46
+ return this.parseTranscript(transcriptPath, verbose);
47
+ }
48
+ return this.tailReader.read(transcriptPath, tail, {
49
+ parseLine: (line)=>{
50
+ const record = this.parseRecord(line);
51
+ return record ? this.recordToMessage(record, verbose) : null;
52
+ }
53
+ }, String(verbose));
54
+ }
55
+ /**
56
+ * - past the idle threshold → IDLE
57
+ * - last turn is an assistant reply → WAITING (awaiting user)
58
+ * - otherwise (last turn was a user message, or unknown) → RUNNING
59
+ */ determineStatus(session) {
60
+ if (isIdle(session.lastActive)) {
61
+ return AgentStatus.IDLE;
62
+ }
63
+ if (session.lastRole === "assistant") {
64
+ return AgentStatus.WAITING;
65
+ }
66
+ return AgentStatus.RUNNING;
67
+ }
68
+ /**
69
+ * Fold one transcript record into the O(1) summary: first/last user request,
70
+ * the role of the last user/assistant turn, and the latest `created_at`.
71
+ * Uses the same record rules as `getConversation` (see `recordToMessage`).
72
+ *
73
+ * `skip` (bounded cold start) keeps the head's first user request and resets
74
+ * the latest fields, so those come from the tail only; without a timestamp in
75
+ * the tail, `lastActive` falls back to the file mtime.
76
+ */ summaryReducer = {
77
+ initial: ()=>({}),
78
+ reduce: (state, value)=>{
79
+ if (value === null || value === undefined) return state;
80
+ const record = value;
81
+ let next = state;
82
+ const atMs = parseTimestamp(record.created_at)?.getTime();
83
+ if (atMs !== undefined && (next.lastActiveMs === undefined || atMs > next.lastActiveMs)) {
84
+ next = {
85
+ ...next,
86
+ lastActiveMs: atMs
87
+ };
88
+ }
89
+ const message = this.recordToMessage(record, false);
90
+ if (message?.role === "user") {
91
+ return {
92
+ ...next,
93
+ firstUserMessage: next.firstUserMessage ?? (next.pastHead ? undefined : message.content),
94
+ lastUserMessage: message.content,
95
+ lastRole: "user"
96
+ };
97
+ }
98
+ if (message?.role === "assistant") return {
99
+ ...next,
100
+ lastRole: "assistant"
101
+ };
102
+ return next;
103
+ },
104
+ skip: (state)=>({
105
+ pastHead: true,
106
+ firstUserMessage: state.firstUserMessage
107
+ })
108
+ };
109
+ toSession(conversationId, transcriptPath, projectPath, stat, mtime, state) {
110
+ return {
111
+ sessionId: conversationId,
112
+ projectPath,
113
+ sessionFilePath: transcriptPath,
114
+ sessionStart: stat.birthtime,
115
+ lastActive: state.lastActiveMs === undefined ? mtime : new Date(state.lastActiveMs),
116
+ firstUserMessage: state.firstUserMessage,
117
+ lastUserMessage: state.lastUserMessage,
118
+ lastRole: state.lastRole
119
+ };
120
+ }
121
+ /** Full pass over transcript.jsonl building every conversation turn. */ parseTranscript(transcriptPath, verbose) {
122
+ const content = safeReadFile(transcriptPath);
123
+ if (content === undefined) return [];
124
+ const messages = [];
125
+ for (const line of content.trim().split("\n")){
126
+ const record = this.parseRecord(line);
127
+ const message = record ? this.recordToMessage(record, verbose) : null;
128
+ if (message) messages.push(message);
129
+ }
130
+ return messages;
131
+ }
132
+ parseRecord(line) {
133
+ if (!line.trim()) return null;
134
+ try {
135
+ return JSON.parse(line);
136
+ } catch {
137
+ return null;
138
+ }
139
+ }
140
+ /**
141
+ * USER_INPUT records are user turns and PLANNER_RESPONSE records are the
142
+ * model's reply. Everything else — MODEL tool calls (RUN_COMMAND, ...) and
143
+ * SYSTEM records (history, checkpoints) — is execution detail, shown as a
144
+ * system message only in verbose mode.
145
+ */ recordToMessage(record, verbose) {
146
+ const text = flattenTextBlocks(record.content);
147
+ if (record.type === "USER_INPUT") {
148
+ const request = this.extractUserRequest(text);
149
+ return request === null ? null : {
150
+ role: "user",
151
+ content: request
152
+ };
153
+ }
154
+ if (!text) return null;
155
+ if (record.type === "PLANNER_RESPONSE") return {
156
+ role: "assistant",
157
+ content: text
158
+ };
159
+ return verbose ? {
160
+ role: "system",
161
+ content: text
162
+ } : null;
163
+ }
164
+ /**
165
+ * The prompt inside <USER_REQUEST>...</USER_REQUEST>, or the whole trimmed
166
+ * text when the record has no wrapper. Null for an unwrapped blank record.
167
+ */ extractUserRequest(text) {
168
+ const match = text.match(/<USER_REQUEST>\s*([\s\S]*?)\s*<\/USER_REQUEST>/);
169
+ if (match) return match[1].trim();
170
+ return text.trim() || null;
171
+ }
172
+ }
173
+
174
+ //# sourceMappingURL=AntigravitySessionParser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/antigravity/AntigravitySessionParser.ts"],"sourcesContent":["import type { ConversationMessage, ConversationOptions } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport {\n IncrementalJsonlSummary,\n reduceJsonlContent,\n type JsonlSummaryBounds,\n type JsonlSummaryReducer,\n} from \"../../utils/IncrementalJsonlSummary.js\";\nimport { JsonlTailReader, normalizeTail } from \"../../utils/jsonlTail.js\";\nimport { safeReadFile, safeStat } from \"../../utils/session.js\";\nimport { flattenTextBlocks, isIdle, parseTimestamp } from \"../shared.js\";\n\n/** One line of transcript.jsonl. */\ninterface TranscriptRecord {\n source?: string;\n type?: string;\n created_at?: string;\n content?: unknown;\n}\n\n/** O(1) running summary folded from transcript records, never the turns themselves. */\ninterface AntigravitySummaryState {\n /** A bounded cold start skipped the middle: later lines are not the session's first. */\n pastHead?: boolean;\n firstUserMessage?: string;\n lastUserMessage?: string;\n lastRole?: ConversationMessage[\"role\"];\n /** Latest `created_at` seen, in epoch ms. */\n lastActiveMs?: number;\n}\n\n/** Parsed state for a single conversation. */\nexport interface AntigravitySession {\n sessionId: string;\n projectPath: string;\n sessionFilePath: string;\n sessionStart: Date;\n lastActive: Date;\n firstUserMessage?: string;\n lastUserMessage?: string;\n lastRole?: ConversationMessage[\"role\"];\n}\n\nexport interface AntigravitySessionParserOptions {\n /** Cold-start scan bounds for `readSessionIncremental` (see IncrementalJsonlSummary). */\n summaryBounds?: JsonlSummaryBounds | false;\n}\n\nexport class AntigravitySessionParser {\n /** Incremental reader backing `getConversation({ tail })`. */\n private readonly tailReader = new JsonlTailReader();\n\n private readonly sessionCache: IncrementalJsonlSummary<AntigravitySummaryState>;\n\n constructor(options: AntigravitySessionParserOptions = {}) {\n this.sessionCache = new IncrementalJsonlSummary(this.summaryReducer, {\n bounds: options.summaryBounds,\n });\n }\n\n /**\n * Parse a conversation's transcript.jsonl into an {@link AntigravitySession}.\n * Returns null when the transcript is missing — there is no real session to\n * surface.\n */\n readSession(\n conversationId: string,\n transcriptPath: string,\n projectPath: string,\n ): AntigravitySession | null {\n const stat = safeStat(transcriptPath);\n if (!stat) return null;\n\n const content = safeReadFile(transcriptPath);\n const state = content === undefined ? {} : reduceJsonlContent(this.summaryReducer, content);\n return this.toSession(conversationId, transcriptPath, projectPath, stat, stat.mtime, state);\n }\n\n /**\n * Same result as `readSession`, but backed by a per-instance incremental\n * cache so repeated refreshes only parse bytes appended since the last call.\n * Call `pruneSessionCache()` once per refresh to evict files no longer read.\n *\n * The first read of a large transcript is a bounded head + tail scan (see\n * `summaryReducer.skip`).\n */\n readSessionIncremental(\n conversationId: string,\n transcriptPath: string,\n projectPath: string,\n ): AntigravitySession | null {\n const stat = safeStat(transcriptPath);\n if (!stat) return null;\n\n // Present but unreadable: surface the session without a summary, like readSession.\n const result = this.sessionCache.read(transcriptPath);\n return this.toSession(\n conversationId,\n transcriptPath,\n projectPath,\n stat,\n result?.mtime ?? stat.mtime,\n result?.state ?? {},\n );\n }\n\n /** Evict cached summaries for files not read since the previous prune. */\n pruneSessionCache(): void {\n this.sessionCache.prune();\n }\n\n getConversation(transcriptPath: string, options?: ConversationOptions): ConversationMessage[] {\n const verbose = options?.verbose ?? false;\n const tail = normalizeTail(options?.tail);\n if (tail === undefined) {\n return this.parseTranscript(transcriptPath, verbose);\n }\n\n return this.tailReader.read(\n transcriptPath,\n tail,\n {\n parseLine: (line) => {\n const record = this.parseRecord(line);\n return record ? this.recordToMessage(record, verbose) : null;\n },\n },\n String(verbose),\n );\n }\n\n /**\n * - past the idle threshold → IDLE\n * - last turn is an assistant reply → WAITING (awaiting user)\n * - otherwise (last turn was a user message, or unknown) → RUNNING\n */\n determineStatus(session: AntigravitySession): AgentStatus {\n if (isIdle(session.lastActive)) {\n return AgentStatus.IDLE;\n }\n if (session.lastRole === \"assistant\") {\n return AgentStatus.WAITING;\n }\n return AgentStatus.RUNNING;\n }\n\n /**\n * Fold one transcript record into the O(1) summary: first/last user request,\n * the role of the last user/assistant turn, and the latest `created_at`.\n * Uses the same record rules as `getConversation` (see `recordToMessage`).\n *\n * `skip` (bounded cold start) keeps the head's first user request and resets\n * the latest fields, so those come from the tail only; without a timestamp in\n * the tail, `lastActive` falls back to the file mtime.\n */\n private readonly summaryReducer: JsonlSummaryReducer<AntigravitySummaryState> = {\n initial: () => ({}),\n reduce: (state, value) => {\n if (value === null || value === undefined) return state;\n const record = value as TranscriptRecord;\n\n let next = state;\n const atMs = parseTimestamp(record.created_at)?.getTime();\n if (atMs !== undefined && (next.lastActiveMs === undefined || atMs > next.lastActiveMs)) {\n next = { ...next, lastActiveMs: atMs };\n }\n\n const message = this.recordToMessage(record, false);\n if (message?.role === \"user\") {\n return {\n ...next,\n firstUserMessage: next.firstUserMessage ?? (next.pastHead ? undefined : message.content),\n lastUserMessage: message.content,\n lastRole: \"user\",\n };\n }\n if (message?.role === \"assistant\") return { ...next, lastRole: \"assistant\" };\n return next;\n },\n skip: (state) => ({ pastHead: true, firstUserMessage: state.firstUserMessage }),\n };\n\n private toSession(\n conversationId: string,\n transcriptPath: string,\n projectPath: string,\n stat: { birthtime: Date },\n mtime: Date,\n state: AntigravitySummaryState,\n ): AntigravitySession {\n return {\n sessionId: conversationId,\n projectPath,\n sessionFilePath: transcriptPath,\n sessionStart: stat.birthtime,\n lastActive: state.lastActiveMs === undefined ? mtime : new Date(state.lastActiveMs),\n firstUserMessage: state.firstUserMessage,\n lastUserMessage: state.lastUserMessage,\n lastRole: state.lastRole,\n };\n }\n\n /** Full pass over transcript.jsonl building every conversation turn. */\n private parseTranscript(transcriptPath: string, verbose: boolean): ConversationMessage[] {\n const content = safeReadFile(transcriptPath);\n if (content === undefined) return [];\n\n const messages: ConversationMessage[] = [];\n for (const line of content.trim().split(\"\\n\")) {\n const record = this.parseRecord(line);\n const message = record ? this.recordToMessage(record, verbose) : null;\n if (message) messages.push(message);\n }\n return messages;\n }\n\n private parseRecord(line: string): TranscriptRecord | null {\n if (!line.trim()) return null;\n try {\n return JSON.parse(line) as TranscriptRecord;\n } catch {\n return null;\n }\n }\n\n /**\n * USER_INPUT records are user turns and PLANNER_RESPONSE records are the\n * model's reply. Everything else — MODEL tool calls (RUN_COMMAND, ...) and\n * SYSTEM records (history, checkpoints) — is execution detail, shown as a\n * system message only in verbose mode.\n */\n private recordToMessage(record: TranscriptRecord, verbose: boolean): ConversationMessage | null {\n const text = flattenTextBlocks(record.content);\n if (record.type === \"USER_INPUT\") {\n const request = this.extractUserRequest(text);\n return request === null ? null : { role: \"user\", content: request };\n }\n if (!text) return null;\n if (record.type === \"PLANNER_RESPONSE\") return { role: \"assistant\", content: text };\n return verbose ? { role: \"system\", content: text } : null;\n }\n\n /**\n * The prompt inside <USER_REQUEST>...</USER_REQUEST>, or the whole trimmed\n * text when the record has no wrapper. Null for an unwrapped blank record.\n */\n private extractUserRequest(text: string): string | null {\n const match = text.match(/<USER_REQUEST>\\s*([\\s\\S]*?)\\s*<\\/USER_REQUEST>/);\n if (match) return match[1].trim();\n return text.trim() || null;\n }\n}\n"],"names":["AgentStatus","IncrementalJsonlSummary","reduceJsonlContent","JsonlTailReader","normalizeTail","safeReadFile","safeStat","flattenTextBlocks","isIdle","parseTimestamp","AntigravitySessionParser","tailReader","sessionCache","options","summaryReducer","bounds","summaryBounds","readSession","conversationId","transcriptPath","projectPath","stat","content","state","undefined","toSession","mtime","readSessionIncremental","result","read","pruneSessionCache","prune","getConversation","verbose","tail","parseTranscript","parseLine","line","record","parseRecord","recordToMessage","String","determineStatus","session","lastActive","IDLE","lastRole","WAITING","RUNNING","initial","reduce","value","next","atMs","created_at","getTime","lastActiveMs","message","role","firstUserMessage","pastHead","lastUserMessage","skip","sessionId","sessionFilePath","sessionStart","birthtime","Date","messages","trim","split","push","JSON","parse","text","type","request","extractUserRequest","match"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ClaudeAgentMapper.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/ClaudeAgentMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEnF,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,mBAA+C;IAEpF,iBAAiB,CAAC,EAChB,OAAO,EACP,WAAW,EACX,WAAW,EACX,QAAQ,GACT,EAAE,uBAAuB,GAAG,SAAS;IAwBtC,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS;CAYzD"}
1
+ {"version":3,"file":"ClaudeAgentMapper.d.ts","sourceRoot":"","sources":["../../../src/harnesses/claude/ClaudeAgentMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,KAAK,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAGnF,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,WAAW,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAED,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,GAAE,mBAA+C;IAEpF,iBAAiB,CAAC,EAChB,OAAO,EACP,WAAW,EACX,WAAW,EACX,QAAQ,GACT,EAAE,uBAAuB,GAAG,SAAS;IAwBtC,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS;CAGzD"}
@@ -1,6 +1,7 @@
1
1
  import { AgentStatus } from "../../adapters/AgentAdapter.js";
2
2
  import { generateAgentName } from "../../utils/matching.js";
3
3
  import { ClaudeSessionParser } from "./ClaudeSessionParser.js";
4
+ import { processOnlyAgent } from "../shared.js";
4
5
  export class ClaudeAgentMapper {
5
6
  parser;
6
7
  constructor(parser = new ClaudeSessionParser()){
@@ -26,16 +27,9 @@ export class ClaudeAgentMapper {
26
27
  };
27
28
  }
28
29
  mapProcessOnlyAgent(processInfo) {
29
- return {
30
- name: generateAgentName(processInfo.cwd || "", processInfo.pid),
31
- type: "claude",
32
- status: AgentStatus.IDLE,
33
- summary: "Unknown",
34
- pid: processInfo.pid,
35
- projectPath: processInfo.cwd || "",
36
- sessionId: `pid-${processInfo.pid}`,
37
- lastActive: new Date()
38
- };
30
+ return processOnlyAgent("claude", processInfo, {
31
+ summary: "Claude Code process running"
32
+ });
39
33
  }
40
34
  }
41
35
 
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/claude/ClaudeAgentMapper.ts"],"sourcesContent":["import type { AgentInfo, ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport { generateAgentName } from \"../../utils/matching.js\";\nimport type { SessionFile } from \"../../utils/session.js\";\nimport { ClaudeSessionParser, type ClaudeSession } from \"./ClaudeSessionParser.js\";\nimport { processOnlyAgent } from \"../shared.js\";\n\nexport interface ClaudeAgentLiveInfo {\n pidStatus?: AgentStatus;\n waitingFor?: string;\n}\n\nexport interface ClaudeSessionAgentInput {\n session: ClaudeSession;\n processInfo: ProcessInfo;\n sessionFile: SessionFile;\n liveInfo?: ClaudeAgentLiveInfo;\n}\n\nexport class ClaudeAgentMapper {\n constructor(private readonly parser: ClaudeSessionParser = new ClaudeSessionParser()) {}\n\n mapSessionToAgent({\n session,\n processInfo,\n sessionFile,\n liveInfo,\n }: ClaudeSessionAgentInput): AgentInfo {\n // Live PID-file status is authoritative when present — JSONL-derived\n // status mis-classifies sessions whose latest entry is a UI-state\n // event like `permission-mode` or `ai-title`.\n const status = liveInfo?.pidStatus ?? this.parser.determineStatus(session);\n const baseSummary = session.lastUserMessage || \"Session started\";\n const summary =\n status === AgentStatus.WAITING && liveInfo?.waitingFor\n ? `${baseSummary} — waiting for ${liveInfo.waitingFor}`\n : baseSummary;\n\n return {\n name: generateAgentName(processInfo.cwd, processInfo.pid),\n type: \"claude\",\n status,\n summary,\n pid: processInfo.pid,\n projectPath: sessionFile.resolvedCwd || processInfo.cwd || \"\",\n sessionId: sessionFile.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: sessionFile.filePath,\n };\n }\n\n mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {\n return processOnlyAgent(\"claude\", processInfo, { summary: \"Claude Code process running\" });\n }\n}\n"],"names":["AgentStatus","generateAgentName","ClaudeSessionParser","processOnlyAgent","ClaudeAgentMapper","parser","mapSessionToAgent","session","processInfo","sessionFile","liveInfo","status","pidStatus","determineStatus","baseSummary","lastUserMessage","summary","WAITING","waitingFor","name","cwd","pid","type","projectPath","resolvedCwd","sessionId","lastActive","sessionFilePath","filePath","mapProcessOnlyAgent"],"mappings":"AACA,SAASA,WAAW,QAAQ,iCAAiC;AAC7D,SAASC,iBAAiB,QAAQ,0BAA0B;AAE5D,SAASC,mBAAmB,QAA4B,2BAA2B;AACnF,SAASC,gBAAgB,QAAQ,eAAe;AAchD,OAAO,MAAMC;;IACX,YAAY,AAAiBC,SAA8B,IAAIH,qBAAqB,CAAE;aAAzDG,SAAAA;IAA0D;IAEvFC,kBAAkB,EAChBC,OAAO,EACPC,WAAW,EACXC,WAAW,EACXC,QAAQ,EACgB,EAAa;QACrC,qEAAqE;QACrE,kEAAkE;QAClE,8CAA8C;QAC9C,MAAMC,SAASD,UAAUE,aAAa,IAAI,CAACP,MAAM,CAACQ,eAAe,CAACN;QAClE,MAAMO,cAAcP,QAAQQ,eAAe,IAAI;QAC/C,MAAMC,UACJL,WAAWX,YAAYiB,OAAO,IAAIP,UAAUQ,aACxC,GAAGJ,YAAY,eAAe,EAAEJ,SAASQ,UAAU,EAAE,GACrDJ;QAEN,OAAO;YACLK,MAAMlB,kBAAkBO,YAAYY,GAAG,EAAEZ,YAAYa,GAAG;YACxDC,MAAM;YACNX;YACAK;YACAK,KAAKb,YAAYa,GAAG;YACpBE,aAAad,YAAYe,WAAW,IAAIhB,YAAYY,GAAG,IAAI;YAC3DK,WAAWhB,YAAYgB,SAAS;YAChCC,YAAYnB,QAAQmB,UAAU;YAC9BC,iBAAiBlB,YAAYmB,QAAQ;QACvC;IACF;IAEAC,oBAAoBrB,WAAwB,EAAa;QACvD,OAAOL,iBAAiB,UAAUK,aAAa;YAAEQ,SAAS;QAA8B;IAC1F;AACF"}