@ai-devkit/agent-manager 0.36.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 (618) 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/openai.test.js +12 -14
  14. package/dist/__tests__/capacity/openai.test.js.map +1 -1
  15. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js +568 -0
  16. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js.map +1 -0
  17. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js +1089 -0
  18. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js.map +1 -0
  19. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js +143 -0
  20. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js.map +1 -0
  21. package/dist/__tests__/{adapters → harnesses/antigravity}/AntigravityCliAdapter.test.js +103 -22
  22. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js.map +1 -0
  23. package/dist/__tests__/harnesses/builtinAdapters.test.js +33 -0
  24. package/dist/__tests__/harnesses/builtinAdapters.test.js.map +1 -0
  25. package/dist/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.js +4 -4
  26. package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js.map +1 -0
  27. package/dist/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.js +47 -19
  28. package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js.map +1 -0
  29. package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js +1 -12
  30. package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js.map +1 -1
  31. package/dist/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.js +2 -2
  32. package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js.map +1 -0
  33. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.js +1 -1
  34. package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js.map +1 -0
  35. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.js +1 -1
  36. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -0
  37. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.js +4 -4
  38. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js.map +1 -0
  39. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.js +1 -1
  40. package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -0
  41. package/dist/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.js +304 -10
  42. package/dist/__tests__/harnesses/codex/CodexAdapter.test.js.map +1 -0
  43. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js +463 -0
  44. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js.map +1 -0
  45. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js +1 -1
  46. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js.map +1 -1
  47. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js +1 -1
  48. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js.map +1 -1
  49. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.js +4 -4
  50. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -0
  51. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.js +1 -1
  52. package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js.map +1 -0
  53. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.js +1 -1
  54. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -0
  55. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.js +8 -18
  56. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -0
  57. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.js +2 -7
  58. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -0
  59. package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js +1 -1
  60. package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js.map +1 -1
  61. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js +290 -0
  62. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js.map +1 -0
  63. package/dist/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.js +34 -25
  64. package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js.map +1 -0
  65. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js +491 -0
  66. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js.map +1 -0
  67. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js +399 -0
  68. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js.map +1 -0
  69. package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js +1 -1
  70. package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js.map +1 -1
  71. package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js +1 -1
  72. package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js.map +1 -1
  73. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js +167 -0
  74. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js.map +1 -0
  75. package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js +1 -1
  76. package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js.map +1 -1
  77. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js +301 -0
  78. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js.map +1 -0
  79. package/dist/__tests__/{adapters → harnesses/kiro}/KiroAdapter.test.js +137 -82
  80. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js.map +1 -0
  81. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js +1 -1
  82. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js.map +1 -1
  83. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js +1 -1
  84. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js.map +1 -1
  85. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js +2 -2
  86. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js.map +1 -1
  87. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js +1 -1
  88. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js.map +1 -1
  89. package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js +1 -1
  90. package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js.map +1 -1
  91. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js +382 -0
  92. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js.map +1 -0
  93. package/dist/__tests__/{providers → harnesses}/pi/PiSessionParser.test.js +171 -1
  94. package/dist/__tests__/harnesses/pi/PiSessionParser.test.js.map +1 -0
  95. package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js +1 -1
  96. package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js.map +1 -1
  97. package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js.map +1 -1
  98. package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
  99. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js.map +1 -1
  100. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js +1 -1
  101. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js.map +1 -1
  102. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js.map +1 -1
  103. package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js +1 -1
  104. package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js.map +1 -1
  105. package/dist/__tests__/readiness/AgentReadiness.test.js +20 -0
  106. package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
  107. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +49 -0
  108. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
  109. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js +650 -0
  110. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js.map +1 -0
  111. package/dist/__tests__/utils/agents.test.js +66 -2
  112. package/dist/__tests__/utils/agents.test.js.map +1 -1
  113. package/dist/__tests__/utils/conversationTail.bench.test.js +258 -0
  114. package/dist/__tests__/utils/conversationTail.bench.test.js.map +1 -0
  115. package/dist/__tests__/utils/conversationTailParity.test.js +588 -0
  116. package/dist/__tests__/utils/conversationTailParity.test.js.map +1 -0
  117. package/dist/__tests__/utils/jsonlTail.test.js +360 -0
  118. package/dist/__tests__/utils/jsonlTail.test.js.map +1 -0
  119. package/dist/__tests__/utils/matchingConstants.test.js +35 -0
  120. package/dist/__tests__/utils/matchingConstants.test.js.map +1 -0
  121. package/dist/__tests__/utils/process.test.js +436 -2
  122. package/dist/__tests__/utils/process.test.js.map +1 -1
  123. package/dist/adapters/AgentAdapter.d.ts +25 -6
  124. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  125. package/dist/adapters/AgentAdapter.js +12 -3
  126. package/dist/adapters/AgentAdapter.js.map +1 -1
  127. package/dist/capacity/openai.d.ts +0 -1
  128. package/dist/capacity/openai.d.ts.map +1 -1
  129. package/dist/capacity/openai.js +0 -5
  130. package/dist/capacity/openai.js.map +1 -1
  131. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts +13 -0
  132. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts.map +1 -0
  133. package/dist/harnesses/antigravity/AntigravityAgentMapper.js +30 -0
  134. package/dist/harnesses/antigravity/AntigravityAgentMapper.js.map +1 -0
  135. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts +32 -0
  136. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts.map +1 -0
  137. package/dist/harnesses/antigravity/AntigravityCliAdapter.js +97 -0
  138. package/dist/harnesses/antigravity/AntigravityCliAdapter.js.map +1 -0
  139. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts +30 -0
  140. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts.map +1 -0
  141. package/dist/harnesses/antigravity/AntigravitySessionLocator.js +56 -0
  142. package/dist/harnesses/antigravity/AntigravitySessionLocator.js.map +1 -0
  143. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts +75 -0
  144. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts.map +1 -0
  145. package/dist/harnesses/antigravity/AntigravitySessionParser.js +174 -0
  146. package/dist/harnesses/antigravity/AntigravitySessionParser.js.map +1 -0
  147. package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts.map +1 -1
  148. package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.js +4 -10
  149. package/dist/harnesses/claude/ClaudeAgentMapper.js.map +1 -0
  150. package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.d.ts +5 -6
  151. package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts.map +1 -0
  152. package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.js +17 -15
  153. package/dist/harnesses/claude/ClaudeCodeAdapter.js.map +1 -0
  154. package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts.map +1 -1
  155. package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.js +3 -3
  156. package/dist/harnesses/claude/ClaudeSessionLocator.js.map +1 -0
  157. package/dist/{providers → harnesses}/claude/ClaudeSessionParser.d.ts +40 -6
  158. package/dist/harnesses/claude/ClaudeSessionParser.d.ts.map +1 -0
  159. package/dist/{providers → harnesses}/claude/ClaudeSessionParser.js +141 -85
  160. package/dist/harnesses/claude/ClaudeSessionParser.js.map +1 -0
  161. package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
  162. package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js.map +1 -1
  163. package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
  164. package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js.map +1 -1
  165. package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
  166. package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js.map +1 -1
  167. package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
  168. package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js.map +1 -1
  169. package/dist/{providers → harnesses}/codex/CodexAdapter.d.ts +5 -4
  170. package/dist/harnesses/codex/CodexAdapter.d.ts.map +1 -0
  171. package/dist/{providers → harnesses}/codex/CodexAdapter.js +139 -19
  172. package/dist/harnesses/codex/CodexAdapter.js.map +1 -0
  173. package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts.map +1 -1
  174. package/dist/{providers → harnesses}/codex/CodexAgentMapper.js +4 -11
  175. package/dist/harnesses/codex/CodexAgentMapper.js.map +1 -0
  176. package/dist/harnesses/codex/CodexSessionLocator.d.ts +74 -0
  177. package/dist/harnesses/codex/CodexSessionLocator.d.ts.map +1 -0
  178. package/dist/harnesses/codex/CodexSessionLocator.js +359 -0
  179. package/dist/harnesses/codex/CodexSessionLocator.js.map +1 -0
  180. package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts.map +1 -1
  181. package/dist/{providers → harnesses}/codex/CodexSessionMapping.js +3 -3
  182. package/dist/harnesses/codex/CodexSessionMapping.js.map +1 -0
  183. package/dist/harnesses/codex/CodexSessionParser.d.ts +89 -0
  184. package/dist/harnesses/codex/CodexSessionParser.d.ts.map +1 -0
  185. package/dist/{providers → harnesses}/codex/CodexSessionParser.js +124 -78
  186. package/dist/harnesses/codex/CodexSessionParser.js.map +1 -0
  187. package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts.map +1 -1
  188. package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js.map +1 -1
  189. package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
  190. package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js.map +1 -1
  191. package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts.map +1 -1
  192. package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js.map +1 -1
  193. package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts.map +1 -1
  194. package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js.map +1 -1
  195. package/dist/{providers → harnesses}/copilot/CopilotAdapter.d.ts +7 -6
  196. package/dist/harnesses/copilot/CopilotAdapter.d.ts.map +1 -0
  197. package/dist/{providers → harnesses}/copilot/CopilotAdapter.js +19 -14
  198. package/dist/harnesses/copilot/CopilotAdapter.js.map +1 -0
  199. package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts.map +1 -1
  200. package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.js +4 -11
  201. package/dist/harnesses/copilot/CopilotAgentMapper.js.map +1 -0
  202. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts +42 -0
  203. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts.map +1 -0
  204. package/dist/harnesses/copilot/CopilotSessionLocator.js +126 -0
  205. package/dist/harnesses/copilot/CopilotSessionLocator.js.map +1 -0
  206. package/dist/harnesses/copilot/CopilotSessionParser.d.ts +62 -0
  207. package/dist/harnesses/copilot/CopilotSessionParser.d.ts.map +1 -0
  208. package/dist/harnesses/copilot/CopilotSessionParser.js +236 -0
  209. package/dist/harnesses/copilot/CopilotSessionParser.js.map +1 -0
  210. package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts.map +1 -1
  211. package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.js +4 -11
  212. package/dist/harnesses/gemini/GeminiAgentMapper.js.map +1 -0
  213. package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.d.ts +4 -5
  214. package/dist/harnesses/gemini/GeminiCliAdapter.d.ts.map +1 -0
  215. package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.js +6 -7
  216. package/dist/harnesses/gemini/GeminiCliAdapter.js.map +1 -0
  217. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts +72 -0
  218. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts.map +1 -0
  219. package/dist/harnesses/gemini/GeminiSessionLocator.js +300 -0
  220. package/dist/harnesses/gemini/GeminiSessionLocator.js.map +1 -0
  221. package/dist/{providers → harnesses}/gemini/GeminiSessionParser.d.ts +34 -7
  222. package/dist/harnesses/gemini/GeminiSessionParser.d.ts.map +1 -0
  223. package/dist/harnesses/gemini/GeminiSessionParser.js +272 -0
  224. package/dist/harnesses/gemini/GeminiSessionParser.js.map +1 -0
  225. package/dist/harnesses/gemini/fileSignature.d.ts +8 -0
  226. package/dist/harnesses/gemini/fileSignature.d.ts.map +1 -0
  227. package/dist/harnesses/gemini/fileSignature.js +9 -0
  228. package/dist/harnesses/gemini/fileSignature.js.map +1 -0
  229. package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts.map +1 -1
  230. package/dist/{providers → harnesses}/grok/GrokAgentMapper.js +4 -10
  231. package/dist/harnesses/grok/GrokAgentMapper.js.map +1 -0
  232. package/dist/{providers → harnesses}/grok/GrokCliAdapter.d.ts +5 -5
  233. package/dist/harnesses/grok/GrokCliAdapter.d.ts.map +1 -0
  234. package/dist/{providers → harnesses}/grok/GrokCliAdapter.js +14 -10
  235. package/dist/harnesses/grok/GrokCliAdapter.js.map +1 -0
  236. package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts.map +1 -1
  237. package/dist/{providers → harnesses}/grok/GrokSessionLocator.js +2 -2
  238. package/dist/harnesses/grok/GrokSessionLocator.js.map +1 -0
  239. package/dist/harnesses/grok/GrokSessionParser.d.ts +87 -0
  240. package/dist/harnesses/grok/GrokSessionParser.d.ts.map +1 -0
  241. package/dist/harnesses/grok/GrokSessionParser.js +185 -0
  242. package/dist/harnesses/grok/GrokSessionParser.js.map +1 -0
  243. package/dist/harnesses/index.d.ts +7 -0
  244. package/dist/harnesses/index.d.ts.map +1 -0
  245. package/dist/harnesses/index.js +27 -0
  246. package/dist/harnesses/index.js.map +1 -0
  247. package/dist/harnesses/kiro/KiroAdapter.d.ts +31 -0
  248. package/dist/harnesses/kiro/KiroAdapter.d.ts.map +1 -0
  249. package/dist/harnesses/kiro/KiroAdapter.js +125 -0
  250. package/dist/harnesses/kiro/KiroAdapter.js.map +1 -0
  251. package/dist/harnesses/kiro/KiroAgentMapper.d.ts +13 -0
  252. package/dist/harnesses/kiro/KiroAgentMapper.d.ts.map +1 -0
  253. package/dist/harnesses/kiro/KiroAgentMapper.js +29 -0
  254. package/dist/harnesses/kiro/KiroAgentMapper.js.map +1 -0
  255. package/dist/harnesses/kiro/KiroSessionLocator.d.ts +38 -0
  256. package/dist/harnesses/kiro/KiroSessionLocator.d.ts.map +1 -0
  257. package/dist/harnesses/kiro/KiroSessionLocator.js +95 -0
  258. package/dist/harnesses/kiro/KiroSessionLocator.js.map +1 -0
  259. package/dist/harnesses/kiro/KiroSessionParser.d.ts +81 -0
  260. package/dist/harnesses/kiro/KiroSessionParser.d.ts.map +1 -0
  261. package/dist/harnesses/kiro/KiroSessionParser.js +251 -0
  262. package/dist/harnesses/kiro/KiroSessionParser.js.map +1 -0
  263. package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.d.ts +2 -4
  264. package/dist/harnesses/opencode/OpenCodeAdapter.d.ts.map +1 -0
  265. package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.js +4 -7
  266. package/dist/harnesses/opencode/OpenCodeAdapter.js.map +1 -0
  267. package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts.map +1 -1
  268. package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.js +5 -13
  269. package/dist/harnesses/opencode/OpenCodeAgentMapper.js.map +1 -0
  270. package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts.map +1 -1
  271. package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.js +2 -2
  272. package/dist/harnesses/opencode/OpenCodeSessionLocator.js.map +1 -0
  273. package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.d.ts +2 -4
  274. package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts.map +1 -0
  275. package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.js +2 -1
  276. package/dist/harnesses/opencode/OpenCodeSessionParser.js.map +1 -0
  277. package/dist/{providers → harnesses}/pi/PiAdapter.d.ts +5 -4
  278. package/dist/harnesses/pi/PiAdapter.d.ts.map +1 -0
  279. package/dist/{providers → harnesses}/pi/PiAdapter.js +16 -12
  280. package/dist/harnesses/pi/PiAdapter.js.map +1 -0
  281. package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts.map +1 -1
  282. package/dist/{providers → harnesses}/pi/PiAgentMapper.js +4 -11
  283. package/dist/harnesses/pi/PiAgentMapper.js.map +1 -0
  284. package/dist/harnesses/pi/PiSessionLocator.d.ts +61 -0
  285. package/dist/harnesses/pi/PiSessionLocator.d.ts.map +1 -0
  286. package/dist/harnesses/pi/PiSessionLocator.js +212 -0
  287. package/dist/harnesses/pi/PiSessionLocator.js.map +1 -0
  288. package/dist/harnesses/pi/PiSessionParser.d.ts +88 -0
  289. package/dist/harnesses/pi/PiSessionParser.d.ts.map +1 -0
  290. package/dist/harnesses/pi/PiSessionParser.js +318 -0
  291. package/dist/harnesses/pi/PiSessionParser.js.map +1 -0
  292. package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts.map +1 -1
  293. package/dist/{providers → harnesses}/pi/PiSessionTracker.js +2 -2
  294. package/dist/harnesses/pi/PiSessionTracker.js.map +1 -0
  295. package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts.map +1 -1
  296. package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js.map +1 -1
  297. package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts.map +1 -1
  298. package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js.map +1 -1
  299. package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts.map +1 -1
  300. package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js.map +1 -1
  301. package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts.map +1 -1
  302. package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js.map +1 -1
  303. package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts.map +1 -1
  304. package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js.map +1 -1
  305. package/dist/harnesses/shared.d.ts +41 -0
  306. package/dist/harnesses/shared.d.ts.map +1 -0
  307. package/dist/harnesses/shared.js +71 -0
  308. package/dist/harnesses/shared.js.map +1 -0
  309. package/dist/index.d.ts +26 -25
  310. package/dist/index.d.ts.map +1 -1
  311. package/dist/index.js +18 -17
  312. package/dist/index.js.map +1 -1
  313. package/dist/utils/IncrementalJsonlSummary.d.ts +100 -0
  314. package/dist/utils/IncrementalJsonlSummary.d.ts.map +1 -0
  315. package/dist/utils/IncrementalJsonlSummary.js +209 -0
  316. package/dist/utils/IncrementalJsonlSummary.js.map +1 -0
  317. package/dist/utils/agents.d.ts +3 -2
  318. package/dist/utils/agents.d.ts.map +1 -1
  319. package/dist/utils/agents.js +50 -15
  320. package/dist/utils/agents.js.map +1 -1
  321. package/dist/utils/index.d.ts +2 -1
  322. package/dist/utils/index.d.ts.map +1 -1
  323. package/dist/utils/index.js +1 -1
  324. package/dist/utils/index.js.map +1 -1
  325. package/dist/utils/jsonlTail.d.ts +73 -0
  326. package/dist/utils/jsonlTail.d.ts.map +1 -0
  327. package/dist/utils/jsonlTail.js +238 -0
  328. package/dist/utils/jsonlTail.js.map +1 -0
  329. package/dist/utils/matching.d.ts +2 -0
  330. package/dist/utils/matching.d.ts.map +1 -1
  331. package/dist/utils/matching.js +3 -2
  332. package/dist/utils/matching.js.map +1 -1
  333. package/dist/utils/matchingConstants.d.ts +15 -0
  334. package/dist/utils/matchingConstants.d.ts.map +1 -0
  335. package/dist/utils/matchingConstants.js +14 -0
  336. package/dist/utils/matchingConstants.js.map +1 -0
  337. package/dist/utils/process.d.ts +38 -2
  338. package/dist/utils/process.d.ts.map +1 -1
  339. package/dist/utils/process.js +131 -43
  340. package/dist/utils/process.js.map +1 -1
  341. package/package.json +2 -1
  342. package/scripts/benchmark-cold-start.mjs +350 -0
  343. package/src/AgentManager.ts +26 -5
  344. package/src/__tests__/AgentManager.test.ts +141 -3
  345. package/src/__tests__/adapters/IncrementalSessionRefresh.test.ts +437 -0
  346. package/src/__tests__/adapters/adapterProcessImports.test.ts +58 -0
  347. package/src/__tests__/adapters/adapterSnapshotCandidates.test.ts +243 -0
  348. package/src/__tests__/capacity/openai.test.ts +5 -15
  349. package/src/__tests__/harnesses/BoundedSummarySkip.test.ts +496 -0
  350. package/src/__tests__/harnesses/SessionSummaryEquivalence.test.ts +726 -0
  351. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.ts +133 -0
  352. package/src/__tests__/{adapters → harnesses/antigravity}/AntigravityCliAdapter.test.ts +97 -25
  353. package/src/__tests__/harnesses/builtinAdapters.test.ts +33 -0
  354. package/src/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.ts +5 -5
  355. package/src/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.ts +54 -24
  356. package/src/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.ts +1 -12
  357. package/src/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.ts +2 -2
  358. package/src/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.ts +1 -1
  359. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.ts +1 -1
  360. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.ts +4 -4
  361. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.ts +2 -2
  362. package/src/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.ts +277 -12
  363. package/src/__tests__/harnesses/codex/CodexSessionLocator.test.ts +419 -0
  364. package/src/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.ts +1 -1
  365. package/src/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.ts +1 -1
  366. package/src/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.ts +4 -4
  367. package/src/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.ts +1 -1
  368. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.ts +1 -1
  369. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.ts +8 -18
  370. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.ts +3 -9
  371. package/src/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.ts +1 -1
  372. package/src/__tests__/harnesses/copilot/CopilotRefreshIO.test.ts +270 -0
  373. package/src/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.ts +27 -23
  374. package/src/__tests__/harnesses/gemini/GeminiSessionJsonl.test.ts +402 -0
  375. package/src/__tests__/harnesses/gemini/GeminiSessionLocator.test.ts +396 -0
  376. package/src/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.ts +2 -2
  377. package/src/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.ts +1 -1
  378. package/src/__tests__/harnesses/grok/GrokIncrementalRefresh.test.ts +170 -0
  379. package/src/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.ts +1 -1
  380. package/src/__tests__/harnesses/grok/GrokSessionParser.test.ts +230 -0
  381. package/src/__tests__/{adapters → harnesses/kiro}/KiroAdapter.test.ts +127 -109
  382. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.ts +1 -1
  383. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.ts +1 -1
  384. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.ts +2 -2
  385. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.ts +1 -1
  386. package/src/__tests__/{providers → harnesses}/pi/PiAdapter.test.ts +1 -1
  387. package/src/__tests__/harnesses/pi/PiDiscoveryIO.test.ts +337 -0
  388. package/src/__tests__/{providers → harnesses}/pi/PiSessionParser.test.ts +91 -1
  389. package/src/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.ts +1 -1
  390. package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.ts +1 -1
  391. package/src/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.ts +1 -1
  392. package/src/__tests__/readiness/AgentReadiness.test.ts +16 -0
  393. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +30 -0
  394. package/src/__tests__/utils/IncrementalJsonlSummary.test.ts +414 -0
  395. package/src/__tests__/utils/agents.test.ts +76 -2
  396. package/src/__tests__/utils/conversationTail.bench.test.ts +193 -0
  397. package/src/__tests__/utils/conversationTailParity.test.ts +365 -0
  398. package/src/__tests__/utils/jsonlTail.test.ts +317 -0
  399. package/src/__tests__/utils/matchingConstants.test.ts +40 -0
  400. package/src/__tests__/utils/process.test.ts +254 -0
  401. package/src/adapters/AgentAdapter.ts +37 -14
  402. package/src/capacity/openai.ts +0 -6
  403. package/src/harnesses/antigravity/AntigravityAgentMapper.ts +34 -0
  404. package/src/harnesses/antigravity/AntigravityCliAdapter.ts +126 -0
  405. package/src/harnesses/antigravity/AntigravitySessionLocator.ts +75 -0
  406. package/src/harnesses/antigravity/AntigravitySessionParser.ts +252 -0
  407. package/src/{providers → harnesses}/claude/ClaudeAgentMapper.ts +2 -10
  408. package/src/{providers → harnesses}/claude/ClaudeCodeAdapter.ts +22 -20
  409. package/src/{providers → harnesses}/claude/ClaudeSessionLocator.ts +3 -3
  410. package/src/{providers → harnesses}/claude/ClaudeSessionParser.ts +189 -97
  411. package/src/{providers → harnesses}/codex/CodexAdapter.ts +153 -29
  412. package/src/{providers → harnesses}/codex/CodexAgentMapper.ts +2 -11
  413. package/src/harnesses/codex/CodexSessionLocator.ts +509 -0
  414. package/src/{providers → harnesses}/codex/CodexSessionMapping.ts +3 -3
  415. package/src/{providers → harnesses}/codex/CodexSessionParser.ts +169 -92
  416. package/src/{providers → harnesses}/copilot/CopilotAdapter.ts +22 -22
  417. package/src/{providers → harnesses}/copilot/CopilotAgentMapper.ts +2 -11
  418. package/src/harnesses/copilot/CopilotSessionLocator.ts +161 -0
  419. package/src/harnesses/copilot/CopilotSessionParser.ts +380 -0
  420. package/src/{providers → harnesses}/gemini/GeminiAgentMapper.ts +2 -11
  421. package/src/{providers → harnesses}/gemini/GeminiCliAdapter.ts +7 -9
  422. package/src/harnesses/gemini/GeminiSessionLocator.ts +394 -0
  423. package/src/{providers → harnesses}/gemini/GeminiSessionParser.ts +155 -31
  424. package/src/harnesses/gemini/fileSignature.ts +10 -0
  425. package/src/{providers → harnesses}/grok/GrokAgentMapper.ts +2 -11
  426. package/src/{providers → harnesses}/grok/GrokCliAdapter.ts +16 -15
  427. package/src/{providers → harnesses}/grok/GrokSessionLocator.ts +2 -2
  428. package/src/harnesses/grok/GrokSessionParser.ts +251 -0
  429. package/src/harnesses/index.ts +28 -0
  430. package/src/harnesses/kiro/KiroAdapter.ts +143 -0
  431. package/src/harnesses/kiro/KiroAgentMapper.ts +34 -0
  432. package/src/harnesses/kiro/KiroSessionLocator.ts +143 -0
  433. package/src/harnesses/kiro/KiroSessionParser.ts +376 -0
  434. package/src/{providers → harnesses}/opencode/OpenCodeAdapter.ts +5 -11
  435. package/src/{providers → harnesses}/opencode/OpenCodeAgentMapper.ts +3 -13
  436. package/src/{providers → harnesses}/opencode/OpenCodeSessionLocator.ts +2 -2
  437. package/src/{providers → harnesses}/opencode/OpenCodeSessionParser.ts +4 -3
  438. package/src/{providers → harnesses}/pi/PiAdapter.ts +20 -18
  439. package/src/{providers → harnesses}/pi/PiAgentMapper.ts +2 -11
  440. package/src/harnesses/pi/PiSessionLocator.ts +288 -0
  441. package/src/harnesses/pi/PiSessionParser.ts +488 -0
  442. package/src/{providers → harnesses}/pi/PiSessionTracker.ts +2 -2
  443. package/src/harnesses/shared.ts +119 -0
  444. package/src/index.ts +26 -24
  445. package/src/utils/IncrementalJsonlSummary.ts +306 -0
  446. package/src/utils/agents.ts +60 -28
  447. package/src/utils/index.ts +2 -0
  448. package/src/utils/jsonlTail.ts +349 -0
  449. package/src/utils/matching.ts +3 -3
  450. package/src/utils/matchingConstants.ts +15 -0
  451. package/src/utils/process.ts +189 -45
  452. package/dist/__tests__/adapters/AntigravityCliAdapter.test.js.map +0 -1
  453. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +0 -1
  454. package/dist/__tests__/adapters/CodexAdapter.test.js.map +0 -1
  455. package/dist/__tests__/adapters/KiroAdapter.test.js.map +0 -1
  456. package/dist/__tests__/durable/CodexCliProbe.test.js.map +0 -1
  457. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +0 -1
  458. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +0 -1
  459. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +0 -1
  460. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +0 -1
  461. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +0 -1
  462. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +0 -1
  463. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +0 -1
  464. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +0 -1
  465. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +0 -1
  466. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +0 -194
  467. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +0 -1
  468. package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js.map +0 -1
  469. package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +0 -1
  470. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +0 -1
  471. package/dist/adapters/AntigravityCliAdapter.d.ts +0 -57
  472. package/dist/adapters/AntigravityCliAdapter.d.ts.map +0 -1
  473. package/dist/adapters/AntigravityCliAdapter.js +0 -273
  474. package/dist/adapters/AntigravityCliAdapter.js.map +0 -1
  475. package/dist/adapters/KiroAdapter.d.ts +0 -46
  476. package/dist/adapters/KiroAdapter.d.ts.map +0 -1
  477. package/dist/adapters/KiroAdapter.js +0 -344
  478. package/dist/adapters/KiroAdapter.js.map +0 -1
  479. package/dist/adapters/index.d.ts +0 -12
  480. package/dist/adapters/index.d.ts.map +0 -1
  481. package/dist/adapters/index.js +0 -12
  482. package/dist/adapters/index.js.map +0 -1
  483. package/dist/providers/claude/ClaudeAgentMapper.js.map +0 -1
  484. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +0 -1
  485. package/dist/providers/claude/ClaudeCodeAdapter.js.map +0 -1
  486. package/dist/providers/claude/ClaudeSessionLocator.js.map +0 -1
  487. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +0 -1
  488. package/dist/providers/claude/ClaudeSessionParser.js.map +0 -1
  489. package/dist/providers/codex/CodexAdapter.d.ts.map +0 -1
  490. package/dist/providers/codex/CodexAdapter.js.map +0 -1
  491. package/dist/providers/codex/CodexAgentMapper.js.map +0 -1
  492. package/dist/providers/codex/CodexSessionLocator.d.ts +0 -44
  493. package/dist/providers/codex/CodexSessionLocator.d.ts.map +0 -1
  494. package/dist/providers/codex/CodexSessionLocator.js +0 -207
  495. package/dist/providers/codex/CodexSessionLocator.js.map +0 -1
  496. package/dist/providers/codex/CodexSessionMapping.js.map +0 -1
  497. package/dist/providers/codex/CodexSessionParser.d.ts +0 -58
  498. package/dist/providers/codex/CodexSessionParser.d.ts.map +0 -1
  499. package/dist/providers/codex/CodexSessionParser.js.map +0 -1
  500. package/dist/providers/copilot/CopilotAdapter.d.ts.map +0 -1
  501. package/dist/providers/copilot/CopilotAdapter.js.map +0 -1
  502. package/dist/providers/copilot/CopilotAgentMapper.js.map +0 -1
  503. package/dist/providers/copilot/CopilotSessionLocator.d.ts +0 -20
  504. package/dist/providers/copilot/CopilotSessionLocator.d.ts.map +0 -1
  505. package/dist/providers/copilot/CopilotSessionLocator.js +0 -49
  506. package/dist/providers/copilot/CopilotSessionLocator.js.map +0 -1
  507. package/dist/providers/copilot/CopilotSessionParser.d.ts +0 -30
  508. package/dist/providers/copilot/CopilotSessionParser.d.ts.map +0 -1
  509. package/dist/providers/copilot/CopilotSessionParser.js +0 -181
  510. package/dist/providers/copilot/CopilotSessionParser.js.map +0 -1
  511. package/dist/providers/gemini/GeminiAgentMapper.js.map +0 -1
  512. package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +0 -1
  513. package/dist/providers/gemini/GeminiCliAdapter.js.map +0 -1
  514. package/dist/providers/gemini/GeminiSessionLocator.d.ts +0 -30
  515. package/dist/providers/gemini/GeminiSessionLocator.d.ts.map +0 -1
  516. package/dist/providers/gemini/GeminiSessionLocator.js +0 -142
  517. package/dist/providers/gemini/GeminiSessionLocator.js.map +0 -1
  518. package/dist/providers/gemini/GeminiSessionParser.d.ts.map +0 -1
  519. package/dist/providers/gemini/GeminiSessionParser.js +0 -166
  520. package/dist/providers/gemini/GeminiSessionParser.js.map +0 -1
  521. package/dist/providers/grok/GrokAgentMapper.js.map +0 -1
  522. package/dist/providers/grok/GrokCliAdapter.d.ts.map +0 -1
  523. package/dist/providers/grok/GrokCliAdapter.js.map +0 -1
  524. package/dist/providers/grok/GrokSessionLocator.js.map +0 -1
  525. package/dist/providers/grok/GrokSessionParser.d.ts +0 -54
  526. package/dist/providers/grok/GrokSessionParser.d.ts.map +0 -1
  527. package/dist/providers/grok/GrokSessionParser.js +0 -122
  528. package/dist/providers/grok/GrokSessionParser.js.map +0 -1
  529. package/dist/providers/opencode/OpenCodeAdapter.d.ts.map +0 -1
  530. package/dist/providers/opencode/OpenCodeAdapter.js.map +0 -1
  531. package/dist/providers/opencode/OpenCodeAgentMapper.js.map +0 -1
  532. package/dist/providers/opencode/OpenCodeSessionLocator.js.map +0 -1
  533. package/dist/providers/opencode/OpenCodeSessionParser.d.ts.map +0 -1
  534. package/dist/providers/opencode/OpenCodeSessionParser.js.map +0 -1
  535. package/dist/providers/pi/PiAdapter.d.ts.map +0 -1
  536. package/dist/providers/pi/PiAdapter.js.map +0 -1
  537. package/dist/providers/pi/PiAgentMapper.js.map +0 -1
  538. package/dist/providers/pi/PiSessionLocator.d.ts +0 -24
  539. package/dist/providers/pi/PiSessionLocator.d.ts.map +0 -1
  540. package/dist/providers/pi/PiSessionLocator.js +0 -86
  541. package/dist/providers/pi/PiSessionLocator.js.map +0 -1
  542. package/dist/providers/pi/PiSessionParser.d.ts +0 -36
  543. package/dist/providers/pi/PiSessionParser.d.ts.map +0 -1
  544. package/dist/providers/pi/PiSessionParser.js +0 -191
  545. package/dist/providers/pi/PiSessionParser.js.map +0 -1
  546. package/dist/providers/pi/PiSessionTracker.js.map +0 -1
  547. package/src/__tests__/fixtures/fake-claude.cjs +0 -31
  548. package/src/__tests__/fixtures/fake-codex.cjs +0 -56
  549. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +0 -182
  550. package/src/adapters/AntigravityCliAdapter.ts +0 -356
  551. package/src/adapters/KiroAdapter.ts +0 -456
  552. package/src/adapters/index.ts +0 -17
  553. package/src/providers/codex/CodexSessionLocator.ts +0 -279
  554. package/src/providers/copilot/CopilotSessionLocator.ts +0 -63
  555. package/src/providers/copilot/CopilotSessionParser.ts +0 -289
  556. package/src/providers/gemini/GeminiSessionLocator.ts +0 -183
  557. package/src/providers/grok/GrokSessionParser.ts +0 -166
  558. package/src/providers/pi/PiSessionLocator.ts +0 -110
  559. package/src/providers/pi/PiSessionParser.ts +0 -284
  560. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js +0 -0
  561. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js +0 -0
  562. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js +0 -0
  563. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js +0 -0
  564. /package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts +0 -0
  565. /package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts +0 -0
  566. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts +0 -0
  567. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js +0 -0
  568. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts +0 -0
  569. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js +0 -0
  570. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts +0 -0
  571. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js +0 -0
  572. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts +0 -0
  573. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js +0 -0
  574. /package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts +0 -0
  575. /package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts +0 -0
  576. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts +0 -0
  577. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js +0 -0
  578. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts +0 -0
  579. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js +0 -0
  580. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts +0 -0
  581. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js +0 -0
  582. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts +0 -0
  583. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js +0 -0
  584. /package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts +0 -0
  585. /package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts +0 -0
  586. /package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts +0 -0
  587. /package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts +0 -0
  588. /package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts +0 -0
  589. /package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts +0 -0
  590. /package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts +0 -0
  591. /package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts +0 -0
  592. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts +0 -0
  593. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js +0 -0
  594. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts +0 -0
  595. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js +0 -0
  596. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts +0 -0
  597. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js +0 -0
  598. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts +0 -0
  599. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js +0 -0
  600. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts +0 -0
  601. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js +0 -0
  602. /package/src/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.ts +0 -0
  603. /package/src/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.ts +0 -0
  604. /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.ts +0 -0
  605. /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.ts +0 -0
  606. /package/src/{providers → harnesses}/claude/durable/ClaudeCliProbe.ts +0 -0
  607. /package/src/{providers → harnesses}/claude/durable/ClaudePrintAgentService.ts +0 -0
  608. /package/src/{providers → harnesses}/claude/durable/ClaudePrintRunner.ts +0 -0
  609. /package/src/{providers → harnesses}/claude/durable/ClaudeStreamParser.ts +0 -0
  610. /package/src/{providers → harnesses}/codex/durable/CodexCliProbe.ts +0 -0
  611. /package/src/{providers → harnesses}/codex/durable/CodexPrintAgentService.ts +0 -0
  612. /package/src/{providers → harnesses}/codex/durable/CodexPrintRunner.ts +0 -0
  613. /package/src/{providers → harnesses}/codex/durable/CodexStreamParser.ts +0 -0
  614. /package/src/{providers → harnesses}/pi/durable/PiCliProbe.ts +0 -0
  615. /package/src/{providers → harnesses}/pi/durable/PiPrintAgentService.ts +0 -0
  616. /package/src/{providers → harnesses}/pi/durable/PiPrintProtocol.ts +0 -0
  617. /package/src/{providers → harnesses}/pi/durable/PiPrintRunner.ts +0 -0
  618. /package/src/{providers → harnesses}/pi/durable/PiStreamParser.ts +0 -0
@@ -1,344 +0,0 @@
1
- /**
2
- * Kiro Adapter
3
- *
4
- * Detects running Kiro agents by matching process IDs from
5
- * ~/.kiro/sessions/cli/<session-id>.lock to the sibling metadata and transcript files.
6
- */ import * as path from "path";
7
- import { AgentStatus } from "./AgentAdapter.js";
8
- import { captureProcessSnapshot, executableBasename, filterByProcessNames } from "../utils/process.js";
9
- import { isDirectory, safeReadFile, safeReaddir, safeStat } from "../utils/session.js";
10
- import { generateAgentName } from "../utils/matching.js";
11
- const IDLE_THRESHOLD_MINUTES = 5;
12
- const KIRO_BASENAMES = new Set([
13
- "kiro-cli",
14
- "kiro"
15
- ]);
16
- const SCRIPT_RUNTIMES = new Set([
17
- "node",
18
- "bun"
19
- ]);
20
- export class KiroAdapter {
21
- type = "kiro";
22
- processNames = [
23
- "kiro-cli",
24
- "kiro",
25
- "kiro-cli-chat",
26
- "node"
27
- ];
28
- kiroSessionsDir;
29
- constructor(){
30
- const homeDir = process.env.HOME || process.env.USERPROFILE || "";
31
- this.kiroSessionsDir = path.join(homeDir, ".kiro", "sessions", "cli");
32
- }
33
- canHandle(processInfo) {
34
- return this.isKiroExecutable(processInfo.command);
35
- }
36
- async detectAgents(context) {
37
- const snapshot = context?.processes ?? await captureProcessSnapshot(this.processNames);
38
- const relevant = filterByProcessNames(snapshot, this.processNames);
39
- const processes = relevant.filter((process1)=>this.canHandle(process1));
40
- if (processes.length === 0) return [];
41
- const collectedByPid = new Map(relevant.map((proc)=>[
42
- proc.pid,
43
- proc
44
- ]));
45
- const matchedPids = new Set();
46
- const agents = [];
47
- for (const lock of this.discoverActiveLocks()){
48
- const proc = this.resolveLockProcess(lock.pid, collectedByPid, processes);
49
- if (!proc) continue;
50
- const session = this.readSession(lock.sessionId, proc.cwd);
51
- if (!session) continue;
52
- agents.push(this.mapSessionToAgent(session, proc));
53
- matchedPids.add(proc.pid);
54
- }
55
- for (const proc of processes){
56
- if (!matchedPids.has(proc.pid)) {
57
- agents.push(this.mapProcessOnlyAgent(proc));
58
- }
59
- }
60
- return agents;
61
- }
62
- getConversation(sessionFilePath, options) {
63
- return this.entriesToMessages(this.readJsonl(sessionFilePath), options?.verbose ?? false);
64
- }
65
- async listSessions(opts) {
66
- if (!isDirectory(this.kiroSessionsDir)) return [];
67
- const summaries = [];
68
- for (const entry of safeReaddir(this.kiroSessionsDir)){
69
- if (!entry.endsWith(".jsonl")) continue;
70
- const sessionId = entry.slice(0, -".jsonl".length);
71
- const session = this.readSession(sessionId);
72
- if (!session) continue;
73
- if (opts?.cwd !== undefined && session.projectPath !== opts.cwd) continue;
74
- summaries.push({
75
- type: this.type,
76
- sessionId: session.sessionId,
77
- cwd: session.projectPath,
78
- firstUserMessage: session.firstUserMessage,
79
- lastActive: session.lastActive,
80
- startedAt: session.sessionStart,
81
- sessionFilePath: session.filePath
82
- });
83
- }
84
- return summaries;
85
- }
86
- discoverActiveLocks() {
87
- if (!isDirectory(this.kiroSessionsDir)) return [];
88
- const locks = [];
89
- for (const entry of safeReaddir(this.kiroSessionsDir)){
90
- if (!entry.endsWith(".lock")) continue;
91
- const content = safeReadFile(path.join(this.kiroSessionsDir, entry));
92
- if (content === undefined) continue;
93
- try {
94
- const parsed = JSON.parse(content);
95
- const record = this.asRecord(parsed);
96
- const pid = this.toPid(record?.pid);
97
- if (pid === null) continue;
98
- locks.push({
99
- sessionId: entry.slice(0, -".lock".length),
100
- pid
101
- });
102
- } catch {
103
- continue;
104
- }
105
- }
106
- return locks;
107
- }
108
- readSession(sessionId, fallbackCwd = "") {
109
- const filePath = path.join(this.kiroSessionsDir, `${sessionId}.jsonl`);
110
- const stat = safeStat(filePath);
111
- if (!stat?.isFile()) return null;
112
- const entries = this.readJsonl(filePath);
113
- const metadata = this.readMetadata(sessionId);
114
- const messages = this.entriesToMessages(entries, false);
115
- const userMessages = messages.filter((message)=>message.role === "user");
116
- const timestamps = entries.map((entry)=>this.entryDate(entry)).filter((value)=>value !== null);
117
- const sessionStart = metadata.createdAt ?? timestamps[0] ?? stat.birthtime ?? stat.mtime;
118
- const lastActive = metadata.updatedAt ?? timestamps[timestamps.length - 1] ?? stat.mtime;
119
- const lastEntry = entries[entries.length - 1];
120
- return {
121
- sessionId: metadata.sessionId || sessionId,
122
- projectPath: metadata.cwd || fallbackCwd,
123
- summary: this.truncate(userMessages.at(-1)?.content || metadata.title || "Kiro session active", 120),
124
- firstUserMessage: userMessages[0]?.content ?? "",
125
- sessionStart,
126
- lastActive,
127
- lastEventKind: lastEntry?.kind,
128
- lastAssistantHasToolUse: lastEntry?.kind === "AssistantMessage" && this.hasContentKind(lastEntry, "toolUse"),
129
- filePath
130
- };
131
- }
132
- readMetadata(sessionId) {
133
- const empty = {
134
- sessionId,
135
- cwd: "",
136
- title: "",
137
- createdAt: null,
138
- updatedAt: null
139
- };
140
- const content = safeReadFile(path.join(this.kiroSessionsDir, `${sessionId}.json`));
141
- if (content === undefined) return empty;
142
- try {
143
- const parsed = this.asRecord(JSON.parse(content));
144
- if (!parsed) return empty;
145
- return {
146
- sessionId: this.firstString(parsed.session_id, parsed.sessionId) ?? sessionId,
147
- cwd: this.firstString(parsed.cwd) ?? "",
148
- title: this.firstString(parsed.title) ?? "",
149
- createdAt: this.parseDate(parsed.created_at ?? parsed.createdAt),
150
- updatedAt: this.parseDate(parsed.updated_at ?? parsed.updatedAt)
151
- };
152
- } catch {
153
- return empty;
154
- }
155
- }
156
- readJsonl(filePath) {
157
- const content = safeReadFile(filePath);
158
- if (content === undefined) return [];
159
- const entries = [];
160
- for (const line of content.split(/\r?\n/)){
161
- const trimmed = line.trim();
162
- if (!trimmed) continue;
163
- try {
164
- const parsed = this.asRecord(JSON.parse(trimmed));
165
- if (parsed) entries.push(parsed);
166
- } catch {
167
- continue;
168
- }
169
- }
170
- return entries;
171
- }
172
- entriesToMessages(entries, verbose) {
173
- const messages = [];
174
- for (const entry of entries){
175
- const message = this.entryToMessage(entry, verbose);
176
- if (message) messages.push(message);
177
- }
178
- return messages;
179
- }
180
- entryToMessage(entry, verbose) {
181
- let role;
182
- let content;
183
- if (entry.kind === "Prompt") {
184
- role = "user";
185
- content = this.textContent(entry);
186
- } else if (entry.kind === "AssistantMessage") {
187
- role = "assistant";
188
- const parts = [
189
- this.textContent(entry)
190
- ];
191
- if (verbose) parts.push(...this.toolUseContent(entry));
192
- content = parts.filter(Boolean).join("\n");
193
- } else if (entry.kind === "ToolResults" && verbose) {
194
- role = "system";
195
- content = this.toolResultContent(entry).join("\n");
196
- } else {
197
- return null;
198
- }
199
- if (!content) return null;
200
- return {
201
- role,
202
- content,
203
- timestamp: this.entryTimestamp(entry)
204
- };
205
- }
206
- textContent(entry) {
207
- return this.contentBlocks(entry).filter((block)=>block.kind === "text").map((block)=>typeof block.data === "string" ? block.data : "").filter(Boolean).join("");
208
- }
209
- toolUseContent(entry) {
210
- return this.contentBlocks(entry).filter((block)=>block.kind === "toolUse").map((block)=>{
211
- const data = this.asRecord(block.data);
212
- const name = this.firstString(data?.name) ?? "unknown";
213
- const input = this.formatValue(data?.input);
214
- return `[Tool: ${name}]${input ? ` ${input}` : ""}`;
215
- });
216
- }
217
- toolResultContent(entry) {
218
- return this.contentBlocks(entry).filter((block)=>block.kind === "toolResult").map((block)=>{
219
- const data = this.asRecord(block.data);
220
- const prefix = data?.status === "error" ? "[Tool Error]" : "[Tool Result]";
221
- const result = this.formatValue(data?.result ?? data?.results ?? data?.content);
222
- return `${prefix}${result ? ` ${result}` : ""}`;
223
- });
224
- }
225
- contentBlocks(entry) {
226
- const content = entry.data?.content;
227
- if (!Array.isArray(content)) return [];
228
- return content.map((block)=>this.asRecord(block)).filter((block)=>block !== null);
229
- }
230
- hasContentKind(entry, kind) {
231
- return this.contentBlocks(entry).some((block)=>block.kind === kind);
232
- }
233
- entryTimestamp(entry) {
234
- const direct = this.firstString(entry.timestamp);
235
- if (direct) return direct;
236
- const meta = this.asRecord(entry.data?.meta);
237
- const parsed = this.parseDate(meta?.timestamp);
238
- return parsed?.toISOString();
239
- }
240
- entryDate(entry) {
241
- return this.parseDate(this.entryTimestamp(entry));
242
- }
243
- mapSessionToAgent(session, processInfo) {
244
- const projectPath = session.projectPath || processInfo.cwd || "";
245
- return {
246
- name: generateAgentName(projectPath, processInfo.pid),
247
- type: this.type,
248
- status: this.determineStatus(session),
249
- summary: session.summary,
250
- pid: processInfo.pid,
251
- projectPath,
252
- sessionId: session.sessionId,
253
- lastActive: session.lastActive,
254
- sessionFilePath: session.filePath
255
- };
256
- }
257
- mapProcessOnlyAgent(processInfo) {
258
- return {
259
- name: generateAgentName(processInfo.cwd || "", processInfo.pid),
260
- type: this.type,
261
- status: AgentStatus.RUNNING,
262
- summary: "Kiro process running",
263
- pid: processInfo.pid,
264
- projectPath: processInfo.cwd || "",
265
- sessionId: `pid-${processInfo.pid}`,
266
- lastActive: new Date()
267
- };
268
- }
269
- determineStatus(session) {
270
- const diffMinutes = (Date.now() - session.lastActive.getTime()) / 60000;
271
- if (diffMinutes > IDLE_THRESHOLD_MINUTES) return AgentStatus.IDLE;
272
- if (session.lastEventKind === "AssistantMessage" && !session.lastAssistantHasToolUse) {
273
- return AgentStatus.WAITING;
274
- }
275
- return AgentStatus.RUNNING;
276
- }
277
- resolveLockProcess(lockPid, collectedByPid, topLevel) {
278
- let current = collectedByPid.get(lockPid);
279
- const seen = new Set();
280
- let resolved = null;
281
- while(current && !seen.has(current.pid)){
282
- seen.add(current.pid);
283
- if (this.canHandle(current)) resolved = current;
284
- const parentPid = current.ppid;
285
- current = parentPid === undefined ? undefined : collectedByPid.get(parentPid);
286
- }
287
- if (resolved) return resolved;
288
- return this.matchSoleTopLevelOnTty(collectedByPid.get(lockPid)?.tty, topLevel);
289
- }
290
- matchSoleTopLevelOnTty(tty, topLevel) {
291
- if (!tty || tty === "??" || tty === "?") return null;
292
- const matches = topLevel.filter((proc)=>proc.tty === tty);
293
- return matches.length === 1 ? matches[0] : null;
294
- }
295
- isKiroExecutable(command) {
296
- const tokens = command.trim().split(/\s+/).filter(Boolean);
297
- if (tokens.length === 0) return false;
298
- const executable = this.kiroBasename(tokens[0]);
299
- if (KIRO_BASENAMES.has(executable)) return true;
300
- if (!SCRIPT_RUNTIMES.has(executable)) return false;
301
- const script = tokens.slice(1).find((token)=>!token.startsWith("-"));
302
- return script !== undefined && KIRO_BASENAMES.has(this.kiroBasename(script));
303
- }
304
- kiroBasename(token) {
305
- return executableBasename(token).replace(/\.(exe|js)$/, "");
306
- }
307
- toPid(value) {
308
- if (typeof value === "number" && Number.isSafeInteger(value) && value > 0) return value;
309
- if (typeof value !== "string" || !/^\d+$/.test(value)) return null;
310
- const parsed = Number(value);
311
- return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null;
312
- }
313
- parseDate(value) {
314
- if (typeof value === "number") {
315
- const date = new Date(value < 1_000_000_000_000 ? value * 1000 : value);
316
- return Number.isNaN(date.getTime()) ? null : date;
317
- }
318
- if (typeof value !== "string" || !value) return null;
319
- const date = new Date(value);
320
- return Number.isNaN(date.getTime()) ? null : date;
321
- }
322
- firstString(...values) {
323
- return values.find((value)=>typeof value === "string" && value.length > 0);
324
- }
325
- asRecord(value) {
326
- if (!value || typeof value !== "object" || Array.isArray(value)) return null;
327
- return value;
328
- }
329
- formatValue(value) {
330
- if (typeof value === "string") return value;
331
- if (value === undefined || value === null) return "";
332
- try {
333
- return JSON.stringify(value);
334
- } catch {
335
- return "";
336
- }
337
- }
338
- truncate(value, maxLength) {
339
- if (value.length <= maxLength) return value;
340
- return `${value.slice(0, maxLength - 3)}...`;
341
- }
342
- }
343
-
344
- //# sourceMappingURL=KiroAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/adapters/KiroAdapter.ts"],"sourcesContent":["/**\n * Kiro Adapter\n *\n * Detects running Kiro agents by matching process IDs from\n * ~/.kiro/sessions/cli/<session-id>.lock to the sibling metadata and transcript files.\n */\n\nimport * as path from \"path\";\nimport type {\n AgentAdapter,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from \"./AgentAdapter.js\";\nimport { AgentStatus } from \"./AgentAdapter.js\";\nimport {\n captureProcessSnapshot,\n executableBasename,\n filterByProcessNames,\n} from \"../utils/process.js\";\nimport { isDirectory, safeReadFile, safeReaddir, safeStat } from \"../utils/session.js\";\nimport { generateAgentName } from \"../utils/matching.js\";\n\ntype KiroRecord = Record<string, unknown>;\n\ninterface KiroMetadata {\n sessionId: string;\n cwd: string;\n title: string;\n createdAt: Date | null;\n updatedAt: Date | null;\n}\n\ninterface KiroLine {\n kind?: string;\n timestamp?: string;\n data?: KiroRecord;\n}\n\ninterface KiroSession {\n sessionId: string;\n projectPath: string;\n summary: string;\n firstUserMessage: string;\n sessionStart: Date;\n lastActive: Date;\n lastEventKind?: string;\n lastAssistantHasToolUse: boolean;\n filePath: string;\n}\n\ninterface KiroLock {\n sessionId: string;\n pid: number;\n}\n\nconst IDLE_THRESHOLD_MINUTES = 5;\nconst KIRO_BASENAMES = new Set([\"kiro-cli\", \"kiro\"]);\nconst SCRIPT_RUNTIMES = new Set([\"node\", \"bun\"]);\n\nexport class KiroAdapter implements AgentAdapter {\n readonly type = \"kiro\" as const;\n readonly processNames = [\"kiro-cli\", \"kiro\", \"kiro-cli-chat\", \"node\"] as const;\n\n private kiroSessionsDir: string;\n\n constructor() {\n const homeDir = process.env.HOME || process.env.USERPROFILE || \"\";\n this.kiroSessionsDir = path.join(homeDir, \".kiro\", \"sessions\", \"cli\");\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return this.isKiroExecutable(processInfo.command);\n }\n\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const snapshot = context?.processes ?? (await captureProcessSnapshot(this.processNames));\n const relevant = filterByProcessNames(snapshot, this.processNames);\n const processes = relevant.filter((process) => this.canHandle(process));\n if (processes.length === 0) return [];\n\n const collectedByPid = new Map(relevant.map((proc) => [proc.pid, proc]));\n const matchedPids = new Set<number>();\n const agents: AgentInfo[] = [];\n\n for (const lock of this.discoverActiveLocks()) {\n const proc = this.resolveLockProcess(lock.pid, collectedByPid, processes);\n if (!proc) continue;\n\n const session = this.readSession(lock.sessionId, proc.cwd);\n if (!session) continue;\n\n agents.push(this.mapSessionToAgent(session, proc));\n matchedPids.add(proc.pid);\n }\n\n for (const proc of processes) {\n if (!matchedPids.has(proc.pid)) {\n agents.push(this.mapProcessOnlyAgent(proc));\n }\n }\n\n return agents;\n }\n\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n return this.entriesToMessages(this.readJsonl(sessionFilePath), options?.verbose ?? false);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n if (!isDirectory(this.kiroSessionsDir)) return [];\n\n const summaries: SessionSummary[] = [];\n for (const entry of safeReaddir(this.kiroSessionsDir)) {\n if (!entry.endsWith(\".jsonl\")) continue;\n\n const sessionId = entry.slice(0, -\".jsonl\".length);\n const session = this.readSession(sessionId);\n if (!session) continue;\n if (opts?.cwd !== undefined && session.projectPath !== opts.cwd) continue;\n\n summaries.push({\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.filePath,\n });\n }\n return summaries;\n }\n\n private discoverActiveLocks(): KiroLock[] {\n if (!isDirectory(this.kiroSessionsDir)) return [];\n\n const locks: KiroLock[] = [];\n for (const entry of safeReaddir(this.kiroSessionsDir)) {\n if (!entry.endsWith(\".lock\")) continue;\n\n const content = safeReadFile(path.join(this.kiroSessionsDir, entry));\n if (content === undefined) continue;\n\n try {\n const parsed = JSON.parse(content) as unknown;\n const record = this.asRecord(parsed);\n const pid = this.toPid(record?.pid);\n if (pid === null) continue;\n\n locks.push({\n sessionId: entry.slice(0, -\".lock\".length),\n pid,\n });\n } catch {\n continue;\n }\n }\n return locks;\n }\n\n private readSession(sessionId: string, fallbackCwd = \"\"): KiroSession | null {\n const filePath = path.join(this.kiroSessionsDir, `${sessionId}.jsonl`);\n const stat = safeStat(filePath);\n if (!stat?.isFile()) return null;\n\n const entries = this.readJsonl(filePath);\n const metadata = this.readMetadata(sessionId);\n const messages = this.entriesToMessages(entries, false);\n const userMessages = messages.filter((message) => message.role === \"user\");\n const timestamps = entries\n .map((entry) => this.entryDate(entry))\n .filter((value): value is Date => value !== null);\n const sessionStart = metadata.createdAt ?? timestamps[0] ?? stat.birthtime ?? stat.mtime;\n const lastActive = metadata.updatedAt ?? timestamps[timestamps.length - 1] ?? stat.mtime;\n const lastEntry = entries[entries.length - 1];\n\n return {\n sessionId: metadata.sessionId || sessionId,\n projectPath: metadata.cwd || fallbackCwd,\n summary: this.truncate(\n userMessages.at(-1)?.content || metadata.title || \"Kiro session active\",\n 120,\n ),\n firstUserMessage: userMessages[0]?.content ?? \"\",\n sessionStart,\n lastActive,\n lastEventKind: lastEntry?.kind,\n lastAssistantHasToolUse:\n lastEntry?.kind === \"AssistantMessage\" && this.hasContentKind(lastEntry, \"toolUse\"),\n filePath,\n };\n }\n\n private readMetadata(sessionId: string): KiroMetadata {\n const empty: KiroMetadata = {\n sessionId,\n cwd: \"\",\n title: \"\",\n createdAt: null,\n updatedAt: null,\n };\n const content = safeReadFile(path.join(this.kiroSessionsDir, `${sessionId}.json`));\n if (content === undefined) return empty;\n\n try {\n const parsed = this.asRecord(JSON.parse(content));\n if (!parsed) return empty;\n return {\n sessionId: this.firstString(parsed.session_id, parsed.sessionId) ?? sessionId,\n cwd: this.firstString(parsed.cwd) ?? \"\",\n title: this.firstString(parsed.title) ?? \"\",\n createdAt: this.parseDate(parsed.created_at ?? parsed.createdAt),\n updatedAt: this.parseDate(parsed.updated_at ?? parsed.updatedAt),\n };\n } catch {\n return empty;\n }\n }\n\n private readJsonl(filePath: string): KiroLine[] {\n const content = safeReadFile(filePath);\n if (content === undefined) return [];\n\n const entries: KiroLine[] = [];\n for (const line of content.split(/\\r?\\n/)) {\n const trimmed = line.trim();\n if (!trimmed) continue;\n try {\n const parsed = this.asRecord(JSON.parse(trimmed));\n if (parsed) entries.push(parsed as KiroLine);\n } catch {\n continue;\n }\n }\n return entries;\n }\n\n private entriesToMessages(entries: KiroLine[], verbose: boolean): ConversationMessage[] {\n const messages: ConversationMessage[] = [];\n for (const entry of entries) {\n const message = this.entryToMessage(entry, verbose);\n if (message) messages.push(message);\n }\n return messages;\n }\n\n private entryToMessage(entry: KiroLine, verbose: boolean): ConversationMessage | null {\n let role: ConversationMessage[\"role\"];\n let content: string;\n\n if (entry.kind === \"Prompt\") {\n role = \"user\";\n content = this.textContent(entry);\n } else if (entry.kind === \"AssistantMessage\") {\n role = \"assistant\";\n const parts = [this.textContent(entry)];\n if (verbose) parts.push(...this.toolUseContent(entry));\n content = parts.filter(Boolean).join(\"\\n\");\n } else if (entry.kind === \"ToolResults\" && verbose) {\n role = \"system\";\n content = this.toolResultContent(entry).join(\"\\n\");\n } else {\n return null;\n }\n\n if (!content) return null;\n return {\n role,\n content,\n timestamp: this.entryTimestamp(entry),\n };\n }\n\n private textContent(entry: KiroLine): string {\n return this.contentBlocks(entry)\n .filter((block) => block.kind === \"text\")\n .map((block) => (typeof block.data === \"string\" ? block.data : \"\"))\n .filter(Boolean)\n .join(\"\");\n }\n\n private toolUseContent(entry: KiroLine): string[] {\n return this.contentBlocks(entry)\n .filter((block) => block.kind === \"toolUse\")\n .map((block) => {\n const data = this.asRecord(block.data);\n const name = this.firstString(data?.name) ?? \"unknown\";\n const input = this.formatValue(data?.input);\n return `[Tool: ${name}]${input ? ` ${input}` : \"\"}`;\n });\n }\n\n private toolResultContent(entry: KiroLine): string[] {\n return this.contentBlocks(entry)\n .filter((block) => block.kind === \"toolResult\")\n .map((block) => {\n const data = this.asRecord(block.data);\n const prefix = data?.status === \"error\" ? \"[Tool Error]\" : \"[Tool Result]\";\n const result = this.formatValue(data?.result ?? data?.results ?? data?.content);\n return `${prefix}${result ? ` ${result}` : \"\"}`;\n });\n }\n\n private contentBlocks(entry: KiroLine): Array<{ kind?: string; data?: unknown }> {\n const content = entry.data?.content;\n if (!Array.isArray(content)) return [];\n return content\n .map((block) => this.asRecord(block))\n .filter((block): block is KiroRecord => block !== null);\n }\n\n private hasContentKind(entry: KiroLine, kind: string): boolean {\n return this.contentBlocks(entry).some((block) => block.kind === kind);\n }\n\n private entryTimestamp(entry: KiroLine): string | undefined {\n const direct = this.firstString(entry.timestamp);\n if (direct) return direct;\n\n const meta = this.asRecord(entry.data?.meta);\n const parsed = this.parseDate(meta?.timestamp);\n return parsed?.toISOString();\n }\n\n private entryDate(entry: KiroLine): Date | null {\n return this.parseDate(this.entryTimestamp(entry));\n }\n\n private mapSessionToAgent(session: KiroSession, processInfo: ProcessInfo): AgentInfo {\n const projectPath = session.projectPath || processInfo.cwd || \"\";\n return {\n name: generateAgentName(projectPath, processInfo.pid),\n type: this.type,\n status: this.determineStatus(session),\n summary: session.summary,\n pid: processInfo.pid,\n projectPath,\n sessionId: session.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: session.filePath,\n };\n }\n\n private mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {\n return {\n name: generateAgentName(processInfo.cwd || \"\", processInfo.pid),\n type: this.type,\n status: AgentStatus.RUNNING,\n summary: \"Kiro process running\",\n pid: processInfo.pid,\n projectPath: processInfo.cwd || \"\",\n sessionId: `pid-${processInfo.pid}`,\n lastActive: new Date(),\n };\n }\n\n private determineStatus(session: KiroSession): AgentStatus {\n const diffMinutes = (Date.now() - session.lastActive.getTime()) / 60000;\n if (diffMinutes > IDLE_THRESHOLD_MINUTES) return AgentStatus.IDLE;\n if (session.lastEventKind === \"AssistantMessage\" && !session.lastAssistantHasToolUse) {\n return AgentStatus.WAITING;\n }\n return AgentStatus.RUNNING;\n }\n\n private resolveLockProcess(\n lockPid: number,\n collectedByPid: Map<number, ProcessInfo>,\n topLevel: ProcessInfo[],\n ): ProcessInfo | null {\n let current = collectedByPid.get(lockPid);\n const seen = new Set<number>();\n let resolved: ProcessInfo | null = null;\n\n while (current && !seen.has(current.pid)) {\n seen.add(current.pid);\n if (this.canHandle(current)) resolved = current;\n\n const parentPid = current.ppid;\n current = parentPid === undefined ? undefined : collectedByPid.get(parentPid);\n }\n\n if (resolved) return resolved;\n return this.matchSoleTopLevelOnTty(collectedByPid.get(lockPid)?.tty, topLevel);\n }\n\n private matchSoleTopLevelOnTty(\n tty: string | undefined,\n topLevel: readonly ProcessInfo[],\n ): ProcessInfo | null {\n if (!tty || tty === \"??\" || tty === \"?\") return null;\n const matches = topLevel.filter((proc) => proc.tty === tty);\n return matches.length === 1 ? matches[0] : null;\n }\n\n private isKiroExecutable(command: string): boolean {\n const tokens = command.trim().split(/\\s+/).filter(Boolean);\n if (tokens.length === 0) return false;\n\n const executable = this.kiroBasename(tokens[0]);\n if (KIRO_BASENAMES.has(executable)) return true;\n if (!SCRIPT_RUNTIMES.has(executable)) return false;\n\n const script = tokens.slice(1).find((token) => !token.startsWith(\"-\"));\n return script !== undefined && KIRO_BASENAMES.has(this.kiroBasename(script));\n }\n\n private kiroBasename(token: string): string {\n return executableBasename(token).replace(/\\.(exe|js)$/, \"\");\n }\n\n private toPid(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isSafeInteger(value) && value > 0) return value;\n if (typeof value !== \"string\" || !/^\\d+$/.test(value)) return null;\n const parsed = Number(value);\n return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null;\n }\n\n private parseDate(value: unknown): Date | null {\n if (typeof value === \"number\") {\n const date = new Date(value < 1_000_000_000_000 ? value * 1000 : value);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n if (typeof value !== \"string\" || !value) return null;\n const date = new Date(value);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n\n private firstString(...values: unknown[]): string | undefined {\n return values.find((value): value is string => typeof value === \"string\" && value.length > 0);\n }\n\n private asRecord(value: unknown): KiroRecord | null {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) return null;\n return value as KiroRecord;\n }\n\n private formatValue(value: unknown): string {\n if (typeof value === \"string\") return value;\n if (value === undefined || value === null) return \"\";\n try {\n return JSON.stringify(value);\n } catch {\n return \"\";\n }\n }\n\n private truncate(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return `${value.slice(0, maxLength - 3)}...`;\n }\n}\n"],"names":["path","AgentStatus","captureProcessSnapshot","executableBasename","filterByProcessNames","isDirectory","safeReadFile","safeReaddir","safeStat","generateAgentName","IDLE_THRESHOLD_MINUTES","KIRO_BASENAMES","Set","SCRIPT_RUNTIMES","KiroAdapter","type","processNames","kiroSessionsDir","homeDir","process","env","HOME","USERPROFILE","join","canHandle","processInfo","isKiroExecutable","command","detectAgents","context","snapshot","processes","relevant","filter","length","collectedByPid","Map","map","proc","pid","matchedPids","agents","lock","discoverActiveLocks","resolveLockProcess","session","readSession","sessionId","cwd","push","mapSessionToAgent","add","has","mapProcessOnlyAgent","getConversation","sessionFilePath","options","entriesToMessages","readJsonl","verbose","listSessions","opts","summaries","entry","endsWith","slice","undefined","projectPath","firstUserMessage","lastActive","startedAt","sessionStart","filePath","locks","content","parsed","JSON","parse","record","asRecord","toPid","fallbackCwd","stat","isFile","entries","metadata","readMetadata","messages","userMessages","message","role","timestamps","entryDate","value","createdAt","birthtime","mtime","updatedAt","lastEntry","summary","truncate","at","title","lastEventKind","kind","lastAssistantHasToolUse","hasContentKind","empty","firstString","session_id","parseDate","created_at","updated_at","line","split","trimmed","trim","entryToMessage","textContent","parts","toolUseContent","Boolean","toolResultContent","timestamp","entryTimestamp","contentBlocks","block","data","name","input","formatValue","prefix","status","result","results","Array","isArray","some","direct","meta","toISOString","determineStatus","RUNNING","Date","diffMinutes","now","getTime","IDLE","WAITING","lockPid","topLevel","current","get","seen","resolved","parentPid","ppid","matchSoleTopLevelOnTty","tty","matches","tokens","executable","kiroBasename","script","find","token","startsWith","replace","Number","isSafeInteger","test","date","isNaN","values","stringify","maxLength"],"mappings":"AAAA;;;;;CAKC,GAED,YAAYA,UAAU,OAAO;AAU7B,SAASC,WAAW,QAAQ,oBAAoB;AAChD,SACEC,sBAAsB,EACtBC,kBAAkB,EAClBC,oBAAoB,QACf,sBAAsB;AAC7B,SAASC,WAAW,EAAEC,YAAY,EAAEC,WAAW,EAAEC,QAAQ,QAAQ,sBAAsB;AACvF,SAASC,iBAAiB,QAAQ,uBAAuB;AAmCzD,MAAMC,yBAAyB;AAC/B,MAAMC,iBAAiB,IAAIC,IAAI;IAAC;IAAY;CAAO;AACnD,MAAMC,kBAAkB,IAAID,IAAI;IAAC;IAAQ;CAAM;AAE/C,OAAO,MAAME;IACFC,OAAO,OAAgB;IACvBC,eAAe;QAAC;QAAY;QAAQ;QAAiB;KAAO,CAAU;IAEvEC,gBAAwB;IAEhC,aAAc;QACZ,MAAMC,UAAUC,QAAQC,GAAG,CAACC,IAAI,IAAIF,QAAQC,GAAG,CAACE,WAAW,IAAI;QAC/D,IAAI,CAACL,eAAe,GAAGjB,KAAKuB,IAAI,CAACL,SAAS,SAAS,YAAY;IACjE;IAEAM,UAAUC,WAAwB,EAAW;QAC3C,OAAO,IAAI,CAACC,gBAAgB,CAACD,YAAYE,OAAO;IAClD;IAEA,MAAMC,aAAaC,OAA+B,EAAwB;QACxE,MAAMC,WAAWD,SAASE,aAAc,MAAM7B,uBAAuB,IAAI,CAACc,YAAY;QACtF,MAAMgB,WAAW5B,qBAAqB0B,UAAU,IAAI,CAACd,YAAY;QACjE,MAAMe,YAAYC,SAASC,MAAM,CAAC,CAACd,WAAY,IAAI,CAACK,SAAS,CAACL;QAC9D,IAAIY,UAAUG,MAAM,KAAK,GAAG,OAAO,EAAE;QAErC,MAAMC,iBAAiB,IAAIC,IAAIJ,SAASK,GAAG,CAAC,CAACC,OAAS;gBAACA,KAAKC,GAAG;gBAAED;aAAK;QACtE,MAAME,cAAc,IAAI5B;QACxB,MAAM6B,SAAsB,EAAE;QAE9B,KAAK,MAAMC,QAAQ,IAAI,CAACC,mBAAmB,GAAI;YAC7C,MAAML,OAAO,IAAI,CAACM,kBAAkB,CAACF,KAAKH,GAAG,EAAEJ,gBAAgBJ;YAC/D,IAAI,CAACO,MAAM;YAEX,MAAMO,UAAU,IAAI,CAACC,WAAW,CAACJ,KAAKK,SAAS,EAAET,KAAKU,GAAG;YACzD,IAAI,CAACH,SAAS;YAEdJ,OAAOQ,IAAI,CAAC,IAAI,CAACC,iBAAiB,CAACL,SAASP;YAC5CE,YAAYW,GAAG,CAACb,KAAKC,GAAG;QAC1B;QAEA,KAAK,MAAMD,QAAQP,UAAW;YAC5B,IAAI,CAACS,YAAYY,GAAG,CAACd,KAAKC,GAAG,GAAG;gBAC9BE,OAAOQ,IAAI,CAAC,IAAI,CAACI,mBAAmB,CAACf;YACvC;QACF;QAEA,OAAOG;IACT;IAEAa,gBAAgBC,eAAuB,EAAEC,OAA+B,EAAyB;QAC/F,OAAO,IAAI,CAACC,iBAAiB,CAAC,IAAI,CAACC,SAAS,CAACH,kBAAkBC,SAASG,WAAW;IACrF;IAEA,MAAMC,aAAaC,IAA0B,EAA6B;QACxE,IAAI,CAACxD,YAAY,IAAI,CAACY,eAAe,GAAG,OAAO,EAAE;QAEjD,MAAM6C,YAA8B,EAAE;QACtC,KAAK,MAAMC,SAASxD,YAAY,IAAI,CAACU,eAAe,EAAG;YACrD,IAAI,CAAC8C,MAAMC,QAAQ,CAAC,WAAW;YAE/B,MAAMjB,YAAYgB,MAAME,KAAK,CAAC,GAAG,CAAC,SAAS/B,MAAM;YACjD,MAAMW,UAAU,IAAI,CAACC,WAAW,CAACC;YACjC,IAAI,CAACF,SAAS;YACd,IAAIgB,MAAMb,QAAQkB,aAAarB,QAAQsB,WAAW,KAAKN,KAAKb,GAAG,EAAE;YAEjEc,UAAUb,IAAI,CAAC;gBACblC,MAAM,IAAI,CAACA,IAAI;gBACfgC,WAAWF,QAAQE,SAAS;gBAC5BC,KAAKH,QAAQsB,WAAW;gBACxBC,kBAAkBvB,QAAQuB,gBAAgB;gBAC1CC,YAAYxB,QAAQwB,UAAU;gBAC9BC,WAAWzB,QAAQ0B,YAAY;gBAC/BhB,iBAAiBV,QAAQ2B,QAAQ;YACnC;QACF;QACA,OAAOV;IACT;IAEQnB,sBAAkC;QACxC,IAAI,CAACtC,YAAY,IAAI,CAACY,eAAe,GAAG,OAAO,EAAE;QAEjD,MAAMwD,QAAoB,EAAE;QAC5B,KAAK,MAAMV,SAASxD,YAAY,IAAI,CAACU,eAAe,EAAG;YACrD,IAAI,CAAC8C,MAAMC,QAAQ,CAAC,UAAU;YAE9B,MAAMU,UAAUpE,aAAaN,KAAKuB,IAAI,CAAC,IAAI,CAACN,eAAe,EAAE8C;YAC7D,IAAIW,YAAYR,WAAW;YAE3B,IAAI;gBACF,MAAMS,SAASC,KAAKC,KAAK,CAACH;gBAC1B,MAAMI,SAAS,IAAI,CAACC,QAAQ,CAACJ;gBAC7B,MAAMpC,MAAM,IAAI,CAACyC,KAAK,CAACF,QAAQvC;gBAC/B,IAAIA,QAAQ,MAAM;gBAElBkC,MAAMxB,IAAI,CAAC;oBACTF,WAAWgB,MAAME,KAAK,CAAC,GAAG,CAAC,QAAQ/B,MAAM;oBACzCK;gBACF;YACF,EAAE,OAAM;gBACN;YACF;QACF;QACA,OAAOkC;IACT;IAEQ3B,YAAYC,SAAiB,EAAEkC,cAAc,EAAE,EAAsB;QAC3E,MAAMT,WAAWxE,KAAKuB,IAAI,CAAC,IAAI,CAACN,eAAe,EAAE,GAAG8B,UAAU,MAAM,CAAC;QACrE,MAAMmC,OAAO1E,SAASgE;QACtB,IAAI,CAACU,MAAMC,UAAU,OAAO;QAE5B,MAAMC,UAAU,IAAI,CAAC1B,SAAS,CAACc;QAC/B,MAAMa,WAAW,IAAI,CAACC,YAAY,CAACvC;QACnC,MAAMwC,WAAW,IAAI,CAAC9B,iBAAiB,CAAC2B,SAAS;QACjD,MAAMI,eAAeD,SAAStD,MAAM,CAAC,CAACwD,UAAYA,QAAQC,IAAI,KAAK;QACnE,MAAMC,aAAaP,QAChB/C,GAAG,CAAC,CAAC0B,QAAU,IAAI,CAAC6B,SAAS,CAAC7B,QAC9B9B,MAAM,CAAC,CAAC4D,QAAyBA,UAAU;QAC9C,MAAMtB,eAAec,SAASS,SAAS,IAAIH,UAAU,CAAC,EAAE,IAAIT,KAAKa,SAAS,IAAIb,KAAKc,KAAK;QACxF,MAAM3B,aAAagB,SAASY,SAAS,IAAIN,UAAU,CAACA,WAAWzD,MAAM,GAAG,EAAE,IAAIgD,KAAKc,KAAK;QACxF,MAAME,YAAYd,OAAO,CAACA,QAAQlD,MAAM,GAAG,EAAE;QAE7C,OAAO;YACLa,WAAWsC,SAAStC,SAAS,IAAIA;YACjCoB,aAAakB,SAASrC,GAAG,IAAIiC;YAC7BkB,SAAS,IAAI,CAACC,QAAQ,CACpBZ,aAAaa,EAAE,CAAC,CAAC,IAAI3B,WAAWW,SAASiB,KAAK,IAAI,uBAClD;YAEFlC,kBAAkBoB,YAAY,CAAC,EAAE,EAAEd,WAAW;YAC9CH;YACAF;YACAkC,eAAeL,WAAWM;YAC1BC,yBACEP,WAAWM,SAAS,sBAAsB,IAAI,CAACE,cAAc,CAACR,WAAW;YAC3E1B;QACF;IACF;IAEQc,aAAavC,SAAiB,EAAgB;QACpD,MAAM4D,QAAsB;YAC1B5D;YACAC,KAAK;YACLsD,OAAO;YACPR,WAAW;YACXG,WAAW;QACb;QACA,MAAMvB,UAAUpE,aAAaN,KAAKuB,IAAI,CAAC,IAAI,CAACN,eAAe,EAAE,GAAG8B,UAAU,KAAK,CAAC;QAChF,IAAI2B,YAAYR,WAAW,OAAOyC;QAElC,IAAI;YACF,MAAMhC,SAAS,IAAI,CAACI,QAAQ,CAACH,KAAKC,KAAK,CAACH;YACxC,IAAI,CAACC,QAAQ,OAAOgC;YACpB,OAAO;gBACL5D,WAAW,IAAI,CAAC6D,WAAW,CAACjC,OAAOkC,UAAU,EAAElC,OAAO5B,SAAS,KAAKA;gBACpEC,KAAK,IAAI,CAAC4D,WAAW,CAACjC,OAAO3B,GAAG,KAAK;gBACrCsD,OAAO,IAAI,CAACM,WAAW,CAACjC,OAAO2B,KAAK,KAAK;gBACzCR,WAAW,IAAI,CAACgB,SAAS,CAACnC,OAAOoC,UAAU,IAAIpC,OAAOmB,SAAS;gBAC/DG,WAAW,IAAI,CAACa,SAAS,CAACnC,OAAOqC,UAAU,IAAIrC,OAAOsB,SAAS;YACjE;QACF,EAAE,OAAM;YACN,OAAOU;QACT;IACF;IAEQjD,UAAUc,QAAgB,EAAc;QAC9C,MAAME,UAAUpE,aAAakE;QAC7B,IAAIE,YAAYR,WAAW,OAAO,EAAE;QAEpC,MAAMkB,UAAsB,EAAE;QAC9B,KAAK,MAAM6B,QAAQvC,QAAQwC,KAAK,CAAC,SAAU;YACzC,MAAMC,UAAUF,KAAKG,IAAI;YACzB,IAAI,CAACD,SAAS;YACd,IAAI;gBACF,MAAMxC,SAAS,IAAI,CAACI,QAAQ,CAACH,KAAKC,KAAK,CAACsC;gBACxC,IAAIxC,QAAQS,QAAQnC,IAAI,CAAC0B;YAC3B,EAAE,OAAM;gBACN;YACF;QACF;QACA,OAAOS;IACT;IAEQ3B,kBAAkB2B,OAAmB,EAAEzB,OAAgB,EAAyB;QACtF,MAAM4B,WAAkC,EAAE;QAC1C,KAAK,MAAMxB,SAASqB,QAAS;YAC3B,MAAMK,UAAU,IAAI,CAAC4B,cAAc,CAACtD,OAAOJ;YAC3C,IAAI8B,SAASF,SAAStC,IAAI,CAACwC;QAC7B;QACA,OAAOF;IACT;IAEQ8B,eAAetD,KAAe,EAAEJ,OAAgB,EAA8B;QACpF,IAAI+B;QACJ,IAAIhB;QAEJ,IAAIX,MAAMyC,IAAI,KAAK,UAAU;YAC3Bd,OAAO;YACPhB,UAAU,IAAI,CAAC4C,WAAW,CAACvD;QAC7B,OAAO,IAAIA,MAAMyC,IAAI,KAAK,oBAAoB;YAC5Cd,OAAO;YACP,MAAM6B,QAAQ;gBAAC,IAAI,CAACD,WAAW,CAACvD;aAAO;YACvC,IAAIJ,SAAS4D,MAAMtE,IAAI,IAAI,IAAI,CAACuE,cAAc,CAACzD;YAC/CW,UAAU6C,MAAMtF,MAAM,CAACwF,SAASlG,IAAI,CAAC;QACvC,OAAO,IAAIwC,MAAMyC,IAAI,KAAK,iBAAiB7C,SAAS;YAClD+B,OAAO;YACPhB,UAAU,IAAI,CAACgD,iBAAiB,CAAC3D,OAAOxC,IAAI,CAAC;QAC/C,OAAO;YACL,OAAO;QACT;QAEA,IAAI,CAACmD,SAAS,OAAO;QACrB,OAAO;YACLgB;YACAhB;YACAiD,WAAW,IAAI,CAACC,cAAc,CAAC7D;QACjC;IACF;IAEQuD,YAAYvD,KAAe,EAAU;QAC3C,OAAO,IAAI,CAAC8D,aAAa,CAAC9D,OACvB9B,MAAM,CAAC,CAAC6F,QAAUA,MAAMtB,IAAI,KAAK,QACjCnE,GAAG,CAAC,CAACyF,QAAW,OAAOA,MAAMC,IAAI,KAAK,WAAWD,MAAMC,IAAI,GAAG,IAC9D9F,MAAM,CAACwF,SACPlG,IAAI,CAAC;IACV;IAEQiG,eAAezD,KAAe,EAAY;QAChD,OAAO,IAAI,CAAC8D,aAAa,CAAC9D,OACvB9B,MAAM,CAAC,CAAC6F,QAAUA,MAAMtB,IAAI,KAAK,WACjCnE,GAAG,CAAC,CAACyF;YACJ,MAAMC,OAAO,IAAI,CAAChD,QAAQ,CAAC+C,MAAMC,IAAI;YACrC,MAAMC,OAAO,IAAI,CAACpB,WAAW,CAACmB,MAAMC,SAAS;YAC7C,MAAMC,QAAQ,IAAI,CAACC,WAAW,CAACH,MAAME;YACrC,OAAO,CAAC,OAAO,EAAED,KAAK,CAAC,EAAEC,QAAQ,CAAC,CAAC,EAAEA,OAAO,GAAG,IAAI;QACrD;IACJ;IAEQP,kBAAkB3D,KAAe,EAAY;QACnD,OAAO,IAAI,CAAC8D,aAAa,CAAC9D,OACvB9B,MAAM,CAAC,CAAC6F,QAAUA,MAAMtB,IAAI,KAAK,cACjCnE,GAAG,CAAC,CAACyF;YACJ,MAAMC,OAAO,IAAI,CAAChD,QAAQ,CAAC+C,MAAMC,IAAI;YACrC,MAAMI,SAASJ,MAAMK,WAAW,UAAU,iBAAiB;YAC3D,MAAMC,SAAS,IAAI,CAACH,WAAW,CAACH,MAAMM,UAAUN,MAAMO,WAAWP,MAAMrD;YACvE,OAAO,GAAGyD,SAASE,SAAS,CAAC,CAAC,EAAEA,QAAQ,GAAG,IAAI;QACjD;IACJ;IAEQR,cAAc9D,KAAe,EAA4C;QAC/E,MAAMW,UAAUX,MAAMgE,IAAI,EAAErD;QAC5B,IAAI,CAAC6D,MAAMC,OAAO,CAAC9D,UAAU,OAAO,EAAE;QACtC,OAAOA,QACJrC,GAAG,CAAC,CAACyF,QAAU,IAAI,CAAC/C,QAAQ,CAAC+C,QAC7B7F,MAAM,CAAC,CAAC6F,QAA+BA,UAAU;IACtD;IAEQpB,eAAe3C,KAAe,EAAEyC,IAAY,EAAW;QAC7D,OAAO,IAAI,CAACqB,aAAa,CAAC9D,OAAO0E,IAAI,CAAC,CAACX,QAAUA,MAAMtB,IAAI,KAAKA;IAClE;IAEQoB,eAAe7D,KAAe,EAAsB;QAC1D,MAAM2E,SAAS,IAAI,CAAC9B,WAAW,CAAC7C,MAAM4D,SAAS;QAC/C,IAAIe,QAAQ,OAAOA;QAEnB,MAAMC,OAAO,IAAI,CAAC5D,QAAQ,CAAChB,MAAMgE,IAAI,EAAEY;QACvC,MAAMhE,SAAS,IAAI,CAACmC,SAAS,CAAC6B,MAAMhB;QACpC,OAAOhD,QAAQiE;IACjB;IAEQhD,UAAU7B,KAAe,EAAe;QAC9C,OAAO,IAAI,CAAC+C,SAAS,CAAC,IAAI,CAACc,cAAc,CAAC7D;IAC5C;IAEQb,kBAAkBL,OAAoB,EAAEpB,WAAwB,EAAa;QACnF,MAAM0C,cAActB,QAAQsB,WAAW,IAAI1C,YAAYuB,GAAG,IAAI;QAC9D,OAAO;YACLgF,MAAMvH,kBAAkB0D,aAAa1C,YAAYc,GAAG;YACpDxB,MAAM,IAAI,CAACA,IAAI;YACfqH,QAAQ,IAAI,CAACS,eAAe,CAAChG;YAC7BsD,SAAStD,QAAQsD,OAAO;YACxB5D,KAAKd,YAAYc,GAAG;YACpB4B;YACApB,WAAWF,QAAQE,SAAS;YAC5BsB,YAAYxB,QAAQwB,UAAU;YAC9Bd,iBAAiBV,QAAQ2B,QAAQ;QACnC;IACF;IAEQnB,oBAAoB5B,WAAwB,EAAa;QAC/D,OAAO;YACLuG,MAAMvH,kBAAkBgB,YAAYuB,GAAG,IAAI,IAAIvB,YAAYc,GAAG;YAC9DxB,MAAM,IAAI,CAACA,IAAI;YACfqH,QAAQnI,YAAY6I,OAAO;YAC3B3C,SAAS;YACT5D,KAAKd,YAAYc,GAAG;YACpB4B,aAAa1C,YAAYuB,GAAG,IAAI;YAChCD,WAAW,CAAC,IAAI,EAAEtB,YAAYc,GAAG,EAAE;YACnC8B,YAAY,IAAI0E;QAClB;IACF;IAEQF,gBAAgBhG,OAAoB,EAAe;QACzD,MAAMmG,cAAc,AAACD,CAAAA,KAAKE,GAAG,KAAKpG,QAAQwB,UAAU,CAAC6E,OAAO,EAAC,IAAK;QAClE,IAAIF,cAActI,wBAAwB,OAAOT,YAAYkJ,IAAI;QACjE,IAAItG,QAAQ0D,aAAa,KAAK,sBAAsB,CAAC1D,QAAQ4D,uBAAuB,EAAE;YACpF,OAAOxG,YAAYmJ,OAAO;QAC5B;QACA,OAAOnJ,YAAY6I,OAAO;IAC5B;IAEQlG,mBACNyG,OAAe,EACflH,cAAwC,EACxCmH,QAAuB,EACH;QACpB,IAAIC,UAAUpH,eAAeqH,GAAG,CAACH;QACjC,MAAMI,OAAO,IAAI7I;QACjB,IAAI8I,WAA+B;QAEnC,MAAOH,WAAW,CAACE,KAAKrG,GAAG,CAACmG,QAAQhH,GAAG,EAAG;YACxCkH,KAAKtG,GAAG,CAACoG,QAAQhH,GAAG;YACpB,IAAI,IAAI,CAACf,SAAS,CAAC+H,UAAUG,WAAWH;YAExC,MAAMI,YAAYJ,QAAQK,IAAI;YAC9BL,UAAUI,cAAczF,YAAYA,YAAY/B,eAAeqH,GAAG,CAACG;QACrE;QAEA,IAAID,UAAU,OAAOA;QACrB,OAAO,IAAI,CAACG,sBAAsB,CAAC1H,eAAeqH,GAAG,CAACH,UAAUS,KAAKR;IACvE;IAEQO,uBACNC,GAAuB,EACvBR,QAAgC,EACZ;QACpB,IAAI,CAACQ,OAAOA,QAAQ,QAAQA,QAAQ,KAAK,OAAO;QAChD,MAAMC,UAAUT,SAASrH,MAAM,CAAC,CAACK,OAASA,KAAKwH,GAAG,KAAKA;QACvD,OAAOC,QAAQ7H,MAAM,KAAK,IAAI6H,OAAO,CAAC,EAAE,GAAG;IAC7C;IAEQrI,iBAAiBC,OAAe,EAAW;QACjD,MAAMqI,SAASrI,QAAQyF,IAAI,GAAGF,KAAK,CAAC,OAAOjF,MAAM,CAACwF;QAClD,IAAIuC,OAAO9H,MAAM,KAAK,GAAG,OAAO;QAEhC,MAAM+H,aAAa,IAAI,CAACC,YAAY,CAACF,MAAM,CAAC,EAAE;QAC9C,IAAIrJ,eAAeyC,GAAG,CAAC6G,aAAa,OAAO;QAC3C,IAAI,CAACpJ,gBAAgBuC,GAAG,CAAC6G,aAAa,OAAO;QAE7C,MAAME,SAASH,OAAO/F,KAAK,CAAC,GAAGmG,IAAI,CAAC,CAACC,QAAU,CAACA,MAAMC,UAAU,CAAC;QACjE,OAAOH,WAAWjG,aAAavD,eAAeyC,GAAG,CAAC,IAAI,CAAC8G,YAAY,CAACC;IACtE;IAEQD,aAAaG,KAAa,EAAU;QAC1C,OAAOlK,mBAAmBkK,OAAOE,OAAO,CAAC,eAAe;IAC1D;IAEQvF,MAAMa,KAAc,EAAiB;QAC3C,IAAI,OAAOA,UAAU,YAAY2E,OAAOC,aAAa,CAAC5E,UAAUA,QAAQ,GAAG,OAAOA;QAClF,IAAI,OAAOA,UAAU,YAAY,CAAC,QAAQ6E,IAAI,CAAC7E,QAAQ,OAAO;QAC9D,MAAMlB,SAAS6F,OAAO3E;QACtB,OAAO2E,OAAOC,aAAa,CAAC9F,WAAWA,SAAS,IAAIA,SAAS;IAC/D;IAEQmC,UAAUjB,KAAc,EAAe;QAC7C,IAAI,OAAOA,UAAU,UAAU;YAC7B,MAAM8E,OAAO,IAAI5B,KAAKlD,QAAQ,oBAAoBA,QAAQ,OAAOA;YACjE,OAAO2E,OAAOI,KAAK,CAACD,KAAKzB,OAAO,MAAM,OAAOyB;QAC/C;QACA,IAAI,OAAO9E,UAAU,YAAY,CAACA,OAAO,OAAO;QAChD,MAAM8E,OAAO,IAAI5B,KAAKlD;QACtB,OAAO2E,OAAOI,KAAK,CAACD,KAAKzB,OAAO,MAAM,OAAOyB;IAC/C;IAEQ/D,YAAY,GAAGiE,MAAiB,EAAsB;QAC5D,OAAOA,OAAOT,IAAI,CAAC,CAACvE,QAA2B,OAAOA,UAAU,YAAYA,MAAM3D,MAAM,GAAG;IAC7F;IAEQ6C,SAASc,KAAc,EAAqB;QAClD,IAAI,CAACA,SAAS,OAAOA,UAAU,YAAY0C,MAAMC,OAAO,CAAC3C,QAAQ,OAAO;QACxE,OAAOA;IACT;IAEQqC,YAAYrC,KAAc,EAAU;QAC1C,IAAI,OAAOA,UAAU,UAAU,OAAOA;QACtC,IAAIA,UAAU3B,aAAa2B,UAAU,MAAM,OAAO;QAClD,IAAI;YACF,OAAOjB,KAAKkG,SAAS,CAACjF;QACxB,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEQO,SAASP,KAAa,EAAEkF,SAAiB,EAAU;QACzD,IAAIlF,MAAM3D,MAAM,IAAI6I,WAAW,OAAOlF;QACtC,OAAO,GAAGA,MAAM5B,KAAK,CAAC,GAAG8G,YAAY,GAAG,GAAG,CAAC;IAC9C;AACF"}
@@ -1,12 +0,0 @@
1
- export { ClaudeCodeAdapter } from "../providers/claude/ClaudeCodeAdapter.js";
2
- export { CodexAdapter } from "../providers/codex/CodexAdapter.js";
3
- export { CopilotAdapter } from "../providers/copilot/CopilotAdapter.js";
4
- export { GeminiCliAdapter } from "../providers/gemini/GeminiCliAdapter.js";
5
- export { GrokCliAdapter } from "../providers/grok/GrokCliAdapter.js";
6
- export { AntigravityCliAdapter } from "./AntigravityCliAdapter.js";
7
- export { KiroAdapter } from "./KiroAdapter.js";
8
- export { OpenCodeAdapter } from "../providers/opencode/OpenCodeAdapter.js";
9
- export { PiAdapter } from "../providers/pi/PiAdapter.js";
10
- export { AgentStatus } from "./AgentAdapter.js";
11
- export type { AgentAdapter, AgentType, AgentInfo, ProcessInfo, AgentDetectionContext, } from "./AgentAdapter.js";
12
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/adapters/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,0CAA0C,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAC;AAClE,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AACxE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,qCAAqC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAC3E,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,YAAY,EACV,YAAY,EACZ,SAAS,EACT,SAAS,EACT,WAAW,EACX,qBAAqB,GACtB,MAAM,mBAAmB,CAAC"}
@@ -1,12 +0,0 @@
1
- export { ClaudeCodeAdapter } from "../providers/claude/ClaudeCodeAdapter.js";
2
- export { CodexAdapter } from "../providers/codex/CodexAdapter.js";
3
- export { CopilotAdapter } from "../providers/copilot/CopilotAdapter.js";
4
- export { GeminiCliAdapter } from "../providers/gemini/GeminiCliAdapter.js";
5
- export { GrokCliAdapter } from "../providers/grok/GrokCliAdapter.js";
6
- export { AntigravityCliAdapter } from "./AntigravityCliAdapter.js";
7
- export { KiroAdapter } from "./KiroAdapter.js";
8
- export { OpenCodeAdapter } from "../providers/opencode/OpenCodeAdapter.js";
9
- export { PiAdapter } from "../providers/pi/PiAdapter.js";
10
- export { AgentStatus } from "./AgentAdapter.js";
11
-
12
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../src/adapters/index.ts"],"sourcesContent":["export { ClaudeCodeAdapter } from \"../providers/claude/ClaudeCodeAdapter.js\";\nexport { CodexAdapter } from \"../providers/codex/CodexAdapter.js\";\nexport { CopilotAdapter } from \"../providers/copilot/CopilotAdapter.js\";\nexport { GeminiCliAdapter } from \"../providers/gemini/GeminiCliAdapter.js\";\nexport { GrokCliAdapter } from \"../providers/grok/GrokCliAdapter.js\";\nexport { AntigravityCliAdapter } from \"./AntigravityCliAdapter.js\";\nexport { KiroAdapter } from \"./KiroAdapter.js\";\nexport { OpenCodeAdapter } from \"../providers/opencode/OpenCodeAdapter.js\";\nexport { PiAdapter } from \"../providers/pi/PiAdapter.js\";\nexport { AgentStatus } from \"./AgentAdapter.js\";\nexport type {\n AgentAdapter,\n AgentType,\n AgentInfo,\n ProcessInfo,\n AgentDetectionContext,\n} from \"./AgentAdapter.js\";\n"],"names":["ClaudeCodeAdapter","CodexAdapter","CopilotAdapter","GeminiCliAdapter","GrokCliAdapter","AntigravityCliAdapter","KiroAdapter","OpenCodeAdapter","PiAdapter","AgentStatus"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,2CAA2C;AAC7E,SAASC,YAAY,QAAQ,qCAAqC;AAClE,SAASC,cAAc,QAAQ,yCAAyC;AACxE,SAASC,gBAAgB,QAAQ,0CAA0C;AAC3E,SAASC,cAAc,QAAQ,sCAAsC;AACrE,SAASC,qBAAqB,QAAQ,6BAA6B;AACnE,SAASC,WAAW,QAAQ,mBAAmB;AAC/C,SAASC,eAAe,QAAQ,2CAA2C;AAC3E,SAASC,SAAS,QAAQ,+BAA+B;AACzD,SAASC,WAAW,QAAQ,oBAAoB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/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\";\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 {\n name: generateAgentName(processInfo.cwd || \"\", processInfo.pid),\n type: \"claude\",\n status: AgentStatus.IDLE,\n summary: \"Unknown\",\n pid: processInfo.pid,\n projectPath: processInfo.cwd || \"\",\n sessionId: `pid-${processInfo.pid}`,\n lastActive: new Date(),\n };\n }\n}\n"],"names":["AgentStatus","generateAgentName","ClaudeSessionParser","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","IDLE","Date"],"mappings":"AACA,SAASA,WAAW,QAAQ,iCAAiC;AAC7D,SAASC,iBAAiB,QAAQ,0BAA0B;AAE5D,SAASC,mBAAmB,QAA4B,2BAA2B;AAcnF,OAAO,MAAMC;;IACX,YAAY,AAAiBC,SAA8B,IAAIF,qBAAqB,CAAE;aAAzDE,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,WAAWV,YAAYgB,OAAO,IAAIP,UAAUQ,aACxC,GAAGJ,YAAY,eAAe,EAAEJ,SAASQ,UAAU,EAAE,GACrDJ;QAEN,OAAO;YACLK,MAAMjB,kBAAkBM,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,OAAO;YACLW,MAAMjB,kBAAkBM,YAAYY,GAAG,IAAI,IAAIZ,YAAYa,GAAG;YAC9DC,MAAM;YACNX,QAAQV,YAAY6B,IAAI;YACxBd,SAAS;YACTK,KAAKb,YAAYa,GAAG;YACpBE,aAAaf,YAAYY,GAAG,IAAI;YAChCK,WAAW,CAAC,IAAI,EAAEjB,YAAYa,GAAG,EAAE;YACnCK,YAAY,IAAIK;QAClB;IACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClaudeCodeAdapter.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/ClaudeCodeAdapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAWxC;;;;;;;;;GASG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IACpD,QAAQ,CAAC,IAAI,EAAG,QAAQ,CAAU;IAClC,QAAQ,CAAC,YAAY,sBAAuB;IAE5C,OAAO,CAAC,MAAM,CAAsB;IACpC,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAS;;IAU5B,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAI5C,OAAO,CAAC,kBAAkB;IAKpB,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAmEzE,OAAO,CAAC,aAAa;IAOrB,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAI1F,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAenE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAOpE,OAAO,CAAC,gBAAgB;CAgBzB"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/claude/ClaudeCodeAdapter.ts"],"sourcesContent":["import * as path from \"path\";\nimport type {\n AgentAdapter,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from \"../../adapters/AgentAdapter.js\";\nimport {\n captureProcessSnapshot,\n executableBasename,\n filterByProcessNames,\n} from \"../../utils/process.js\";\nimport { safeStat } from \"../../utils/session.js\";\nimport { ClaudeSessionParser } from \"./ClaudeSessionParser.js\";\nimport { ClaudeAgentMapper } from \"./ClaudeAgentMapper.js\";\nimport { ClaudeSessionLocator } from \"./ClaudeSessionLocator.js\";\n\n/**\n * Claude Code Adapter\n *\n * Detects Claude Code agents by:\n * 1. Filtering Claude processes from a shared asynchronous process snapshot\n * 2. Using snapshot CWD and start-time enrichment\n * 3. Attempting authoritative PID-file matching via ~/.claude/sessions/<pid>.json\n * 4. Falling back to CWD+birthtime heuristic (matchProcessesToSessions) for processes without a PID file\n * 5. Extracting summary from last user message in session JSONL\n */\nexport class ClaudeCodeAdapter implements AgentAdapter {\n readonly type = \"claude\" as const;\n readonly processNames = [\"claude\"] as const;\n\n private parser: ClaudeSessionParser;\n private mapper: ClaudeAgentMapper;\n private projectsDir: string;\n private sessionsDir: string;\n\n constructor() {\n const homeDir = process.env.HOME || process.env.USERPROFILE || \"\";\n this.projectsDir = path.join(homeDir, \".claude\", \"projects\");\n this.sessionsDir = path.join(homeDir, \".claude\", \"sessions\");\n this.parser = new ClaudeSessionParser();\n this.mapper = new ClaudeAgentMapper(this.parser);\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return this.isClaudeExecutable(processInfo.command);\n }\n\n private isClaudeExecutable(command: string): boolean {\n const base = executableBasename(command);\n return base === \"claude\" || base === \"claude.exe\";\n }\n\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const snapshot = context?.processes ?? (await captureProcessSnapshot(this.processNames));\n const relevant = filterByProcessNames(snapshot, this.processNames);\n const processes = relevant.filter((process) => this.canHandle(process));\n if (processes.length === 0) {\n return [];\n }\n\n const { direct, legacyMatches } = this.createLocator().matchRunningProcesses(processes);\n\n const matchedPids = new Set([\n ...direct.map((d) => d.process.pid),\n ...legacyMatches.map((m) => m.process.pid),\n ]);\n\n const agents: AgentInfo[] = [];\n\n // Build agents from direct (resume + PID-file) matches\n for (const match of direct) {\n const { process: proc, sessionFile } = match;\n const sessionData = this.parser.readSession(sessionFile.filePath, sessionFile.resolvedCwd);\n if (sessionData) {\n agents.push(\n this.mapper.mapSessionToAgent({\n session: sessionData,\n processInfo: proc,\n sessionFile,\n liveInfo: {\n pidStatus: match.pidStatus,\n waitingFor: match.waitingFor,\n },\n }),\n );\n } else {\n matchedPids.delete(proc.pid);\n }\n }\n\n // Build agents from legacy matches\n for (const match of legacyMatches) {\n const sessionData = this.parser.readSession(\n match.session.filePath,\n match.session.resolvedCwd,\n );\n if (sessionData) {\n agents.push(\n this.mapper.mapSessionToAgent({\n session: sessionData,\n processInfo: match.process,\n sessionFile: match.session,\n }),\n );\n } else {\n matchedPids.delete(match.process.pid);\n }\n }\n\n // Any process with no match (direct or legacy) appears as IDLE\n for (const proc of processes) {\n if (!matchedPids.has(proc.pid)) {\n agents.push(this.mapper.mapProcessOnlyAgent(proc));\n }\n }\n\n return agents;\n }\n\n private createLocator(): ClaudeSessionLocator {\n return new ClaudeSessionLocator({\n projectsDir: this.projectsDir,\n sessionsDir: this.sessionsDir,\n });\n }\n\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n return this.parser.getConversation(sessionFilePath, options);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n const filterCwd = opts?.cwd;\n const candidates = this.createLocator().discoverHistoricalSessionFiles();\n const summaries: SessionSummary[] = [];\n\n for (const { filePath, defaultCwd } of candidates) {\n const summary = this.toSessionSummary(filePath, defaultCwd);\n if (!summary) continue;\n if (filterCwd !== undefined && summary.cwd !== filterCwd) continue;\n summaries.push(summary);\n }\n\n return summaries;\n }\n\n async findSessionsById(sessionId: string): Promise<SessionSummary[]> {\n return this.createLocator()\n .findHistoricalSessionFilesById(sessionId)\n .map(({ filePath, defaultCwd }) => this.toSessionSummary(filePath, defaultCwd))\n .filter((summary): summary is SessionSummary => summary?.sessionId === sessionId);\n }\n\n private toSessionSummary(filePath: string, defaultCwd: string): SessionSummary | null {\n const session = this.parser.readSession(filePath, defaultCwd);\n if (!session?.lastEntryType) return null;\n\n const recordedCwd = session.lastCwd || defaultCwd;\n const stat = safeStat(filePath);\n return {\n type: \"claude\",\n sessionId: session.sessionId,\n cwd: recordedCwd,\n firstUserMessage: session.firstUserMessage || \"\",\n lastActive: session.lastActive ?? stat?.mtime ?? new Date(),\n startedAt: session.sessionStart ?? stat?.birthtime ?? stat?.mtime ?? new Date(),\n sessionFilePath: filePath,\n };\n }\n}\n"],"names":["path","captureProcessSnapshot","executableBasename","filterByProcessNames","safeStat","ClaudeSessionParser","ClaudeAgentMapper","ClaudeSessionLocator","ClaudeCodeAdapter","type","processNames","parser","mapper","projectsDir","sessionsDir","homeDir","process","env","HOME","USERPROFILE","join","canHandle","processInfo","isClaudeExecutable","command","base","detectAgents","context","snapshot","processes","relevant","filter","length","direct","legacyMatches","createLocator","matchRunningProcesses","matchedPids","Set","map","d","pid","m","agents","match","proc","sessionFile","sessionData","readSession","filePath","resolvedCwd","push","mapSessionToAgent","session","liveInfo","pidStatus","waitingFor","delete","has","mapProcessOnlyAgent","getConversation","sessionFilePath","options","listSessions","opts","filterCwd","cwd","candidates","discoverHistoricalSessionFiles","summaries","defaultCwd","summary","toSessionSummary","undefined","findSessionsById","sessionId","findHistoricalSessionFilesById","lastEntryType","recordedCwd","lastCwd","stat","firstUserMessage","lastActive","mtime","Date","startedAt","sessionStart","birthtime"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/claude/ClaudeSessionLocator.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport { matchProcessesToSessions, type MatchResult } from \"../../utils/matching.js\";\nimport {\n batchGetSessionFileBirthtimes,\n isDirectory,\n isSafePathSegment,\n listJsonl,\n safeReaddir,\n safeStat,\n type SessionFile,\n} from \"../../utils/session.js\";\n\n/**\n * Entry in ~/.claude/sessions/<pid>.json written by Claude Code.\n * Maps a running process to its session file via PID.\n */\ninterface PidFileEntry {\n pid: number;\n sessionId: string;\n cwd: string;\n /** Epoch milliseconds when the Claude Code process started */\n startedAt: number;\n kind: string;\n entrypoint: string;\n /**\n * Authoritative live status published by the Claude Code process\n * (e.g., 'running', 'waiting', 'idle'). Preferred over JSONL-derived\n * status because trailing entries like 'permission-mode' / 'ai-title'\n * can mask the real conversational state.\n */\n status?: string;\n /** Short description of what the agent is waiting on (e.g., \"approve Read\"). */\n waitingFor?: string;\n}\n\n/**\n * A process directly matched to a session via PID file (authoritative path).\n *\n * When the matching PID file also exposes live status/waitingFor metadata,\n * those values are carried here so the agent mapper can prefer them over\n * the JSONL-derived heuristic.\n */\nexport interface ClaudeDirectMatch {\n process: ProcessInfo;\n sessionFile: SessionFile;\n pidStatus?: AgentStatus;\n waitingFor?: string;\n}\n\nexport interface ClaudeProcessSessionMatches {\n direct: ClaudeDirectMatch[];\n legacyMatches: MatchResult[];\n}\n\nexport interface ClaudeSessionLocatorOptions {\n projectsDir?: string;\n sessionsDir?: string;\n}\n\n/** Maximum allowed delta (ms) between process start time and PID file startedAt. */\nconst PID_FILE_STALENESS_MS = 60000;\n\nexport class ClaudeSessionLocator {\n private readonly projectsDir: string;\n private readonly sessionsDir: string;\n\n constructor(options: ClaudeSessionLocatorOptions = {}) {\n const homeDir = process.env.HOME || process.env.USERPROFILE || \"\";\n this.projectsDir = options.projectsDir ?? path.join(homeDir, \".claude\", \"projects\");\n this.sessionsDir = options.sessionsDir ?? path.join(homeDir, \".claude\", \"sessions\");\n }\n\n /**\n * Pair live Claude processes with their session files.\n *\n * Runs three staged strategies, each handing its unmatched processes\n * to the next:\n * 1. `--resume <id>` on the command line — authoritative for resumed\n * sessions whose JSONL predates the process.\n * 2. PID-file matching via ~/.claude/sessions/<pid>.json.\n * 3. Legacy CWD+birthtime heuristic, for processes with no PID file.\n */\n matchRunningProcesses(processes: ProcessInfo[]): ClaudeProcessSessionMatches {\n const { direct: resumeDirect, fallback: noResume } = this.tryResumeMatching(processes);\n const { direct: pidDirect, fallback } = this.tryPidFileMatching(noResume);\n const legacySessions = this.discoverLiveSessions(fallback);\n const legacyMatches =\n fallback.length > 0 && legacySessions.length > 0\n ? matchProcessesToSessions(fallback, legacySessions)\n : [];\n\n return {\n direct: [...resumeDirect, ...pidDirect],\n legacyMatches,\n };\n }\n\n /**\n * Discover candidate session files for listing historical sessions.\n *\n * Always walks every subdirectory of `projectsDir`. We can't use the\n * encoded-dir shortcut for the cwd-scoped path because Claude Code\n * indexes session files by where the *process was launched*, not by\n * the recorded `cwd` field inside the session — these diverge in\n * worktrees and similar setups. The cwd filter is applied later\n * against `session.lastCwd` so callers see exactly the sessions whose\n * recorded cwd matches.\n */\n discoverHistoricalSessionFiles(): Array<{ filePath: string; defaultCwd: string }> {\n const out: Array<{ filePath: string; defaultCwd: string }> = [];\n\n if (!isDirectory(this.projectsDir)) return out;\n\n for (const dirName of safeReaddir(this.projectsDir)) {\n const projectDir = path.join(this.projectsDir, dirName);\n if (!isDirectory(projectDir)) continue;\n\n // Best-effort decode for the rare case session content has no\n // recorded cwd: '-Users-foo-bar' → '/Users/foo/bar'. Lossy for\n // paths containing '-'; session content's lastCwd overrides\n // this when available.\n const decoded = dirName.replace(/-/g, \"/\");\n for (const name of listJsonl(projectDir)) {\n out.push({ filePath: path.join(projectDir, name), defaultCwd: decoded });\n }\n }\n\n return out;\n }\n\n findHistoricalSessionFilesById(\n sessionId: string,\n ): Array<{ filePath: string; defaultCwd: string }> {\n if (!isSafePathSegment(sessionId) || !isDirectory(this.projectsDir)) {\n return [];\n }\n\n const matches: Array<{ filePath: string; defaultCwd: string }> = [];\n for (const dirName of safeReaddir(this.projectsDir)) {\n const projectDir = path.join(this.projectsDir, dirName);\n if (!isDirectory(projectDir)) continue;\n\n const filePath = path.join(projectDir, `${sessionId}.jsonl`);\n if (!safeStat(filePath)?.isFile()) continue;\n matches.push({ filePath, defaultCwd: dirName.replace(/-/g, \"/\") });\n }\n return matches;\n }\n\n /**\n * Derive the Claude Code project directory for a given CWD.\n *\n * Claude Code encodes paths by replacing every non-alphanumeric\n * character with '-', so '/', '_', '.', spaces, etc. all collapse:\n * /Users/foo/bar → -Users-foo-bar\n * /Users/foo/my_project → -Users-foo-my-project\n * /Users/foo/.worktrees/x → -Users-foo--worktrees-x\n *\n * The encoding is lossy — multiple real paths can collide on the\n * same encoded dir. Callers that need to disambiguate must read the\n * `cwd` field inside each session JSONL.\n */\n private getProjectDir(cwd: string): string {\n const encoded = cwd.replace(/[^a-zA-Z0-9]/g, \"-\");\n return path.join(this.projectsDir, encoded);\n }\n\n /**\n * Discover session files for the given processes.\n *\n * For each unique process CWD, encodes it to derive the expected\n * ~/.claude/projects/<encoded>/ directory, then gets session file birthtimes\n * via a single batched stat call across all directories.\n */\n discoverLiveSessions(processes: ProcessInfo[]): SessionFile[] {\n const dirToCwd = new Map<string, string>();\n\n for (const proc of processes) {\n if (!proc.cwd) continue;\n\n const projectDir = this.getProjectDir(proc.cwd);\n if (dirToCwd.has(projectDir)) continue;\n\n try {\n if (!fs.statSync(projectDir).isDirectory()) continue;\n } catch {\n continue;\n }\n\n dirToCwd.set(projectDir, proc.cwd);\n }\n\n if (dirToCwd.size === 0) return [];\n\n const files = batchGetSessionFileBirthtimes([...dirToCwd.keys()]);\n\n for (const file of files) {\n file.resolvedCwd = dirToCwd.get(file.projectDir) || \"\";\n }\n\n return files;\n }\n\n /**\n * Match processes via `claude --resume <uuid>` in their command line.\n * This works for resumed sessions, where the JSONL was created earlier\n * (so its birthtime is far from the process startTime and the legacy\n * matcher can't pair them) and the PID file may also be misaligned.\n */\n private tryResumeMatching(processes: ProcessInfo[]): {\n direct: ClaudeDirectMatch[];\n fallback: ProcessInfo[];\n } {\n const direct: ClaudeDirectMatch[] = [];\n const fallback: ProcessInfo[] = [];\n\n for (const proc of processes) {\n const sessionId = this.extractResumeSessionId(proc.command);\n if (!sessionId || !proc.cwd) {\n fallback.push(proc);\n continue;\n }\n\n const projectDir = this.getProjectDir(proc.cwd);\n const jsonlPath = path.join(projectDir, `${sessionId}.jsonl`);\n\n const stat = safeStat(jsonlPath);\n if (!stat) {\n fallback.push(proc);\n continue;\n }\n\n // Best-effort: the PID file (if present for this proc) is the\n // authoritative source of live status. We still match the session\n // via --resume, but we read the PID file alongside to capture\n // status/waitingFor.\n const pidEntry = this.readMatchingPidFile(proc.pid, proc.startTime);\n\n direct.push({\n process: proc,\n sessionFile: {\n sessionId,\n filePath: jsonlPath,\n projectDir,\n birthtimeMs: stat.birthtimeMs,\n resolvedCwd: proc.cwd,\n },\n pidStatus: this.mapPidStatus(pidEntry?.status),\n waitingFor: pidEntry?.waitingFor,\n });\n }\n\n return { direct, fallback };\n }\n\n private extractResumeSessionId(command: string): string | null {\n const match = command.match(/--resume\\s+([0-9a-f-]{36})/i);\n return match?.[1] ?? null;\n }\n\n /**\n * Read and parse ~/.claude/sessions/<pid>.json, returning null on any\n * I/O / parse failure or when the file is stale relative to the live\n * process.\n *\n * \"Stale\" means the PID file's startedAt diverges from the process's\n * start time by more than {@link PID_FILE_STALENESS_MS} — typically\n * a previous Claude Code process recycled the same PID without cleanup.\n */\n private readMatchingPidFile(pid: number, procStartTime?: Date): PidFileEntry | null {\n const pidFilePath = path.join(this.sessionsDir, `${pid}.json`);\n try {\n const entry = JSON.parse(fs.readFileSync(pidFilePath, \"utf-8\")) as PidFileEntry;\n\n if (procStartTime) {\n const deltaMs = Math.abs(procStartTime.getTime() - entry.startedAt);\n if (deltaMs > PID_FILE_STALENESS_MS) {\n return null;\n }\n }\n\n return entry;\n } catch {\n return null;\n }\n }\n\n /**\n * Map the PID file's live status string to {@link AgentStatus}.\n *\n * Returns undefined for missing / unrecognized values so the caller\n * can fall back to JSONL-derived heuristics.\n */\n private mapPidStatus(status: string | undefined): AgentStatus | undefined {\n switch (status) {\n case \"running\":\n return AgentStatus.RUNNING;\n case \"waiting\":\n return AgentStatus.WAITING;\n case \"idle\":\n return AgentStatus.IDLE;\n default:\n return undefined;\n }\n }\n\n /**\n * Attempt to match each process to its session via ~/.claude/sessions/<pid>.json.\n *\n * Returns:\n * direct — processes matched authoritatively via PID file\n * fallback — processes with no valid PID file (sent to legacy matching)\n *\n * Per-process fallback triggers on: file absent, malformed JSON,\n * stale startedAt (>60s from proc.startTime), or missing JSONL.\n */\n private tryPidFileMatching(processes: ProcessInfo[]): {\n direct: ClaudeDirectMatch[];\n fallback: ProcessInfo[];\n } {\n const direct: ClaudeDirectMatch[] = [];\n const fallback: ProcessInfo[] = [];\n\n for (const proc of processes) {\n const entry = this.readMatchingPidFile(proc.pid, proc.startTime);\n if (!entry) {\n fallback.push(proc);\n continue;\n }\n\n const projectDir = this.getProjectDir(entry.cwd);\n const jsonlPath = path.join(projectDir, `${entry.sessionId}.jsonl`);\n\n if (!fs.existsSync(jsonlPath)) {\n fallback.push(proc);\n continue;\n }\n\n direct.push({\n process: proc,\n sessionFile: {\n sessionId: entry.sessionId,\n filePath: jsonlPath,\n projectDir,\n birthtimeMs: entry.startedAt,\n resolvedCwd: entry.cwd,\n },\n pidStatus: this.mapPidStatus(entry.status),\n waitingFor: entry.waitingFor,\n });\n }\n\n return { direct, fallback };\n }\n}\n"],"names":["fs","path","AgentStatus","matchProcessesToSessions","batchGetSessionFileBirthtimes","isDirectory","isSafePathSegment","listJsonl","safeReaddir","safeStat","PID_FILE_STALENESS_MS","ClaudeSessionLocator","projectsDir","sessionsDir","options","homeDir","process","env","HOME","USERPROFILE","join","matchRunningProcesses","processes","direct","resumeDirect","fallback","noResume","tryResumeMatching","pidDirect","tryPidFileMatching","legacySessions","discoverLiveSessions","legacyMatches","length","discoverHistoricalSessionFiles","out","dirName","projectDir","decoded","replace","name","push","filePath","defaultCwd","findHistoricalSessionFilesById","sessionId","matches","isFile","getProjectDir","cwd","encoded","dirToCwd","Map","proc","has","statSync","set","size","files","keys","file","resolvedCwd","get","extractResumeSessionId","command","jsonlPath","stat","pidEntry","readMatchingPidFile","pid","startTime","sessionFile","birthtimeMs","pidStatus","mapPidStatus","status","waitingFor","match","procStartTime","pidFilePath","entry","JSON","parse","readFileSync","deltaMs","Math","abs","getTime","startedAt","RUNNING","WAITING","IDLE","undefined","existsSync"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClaudeSessionParser.d.ts","sourceRoot":"","sources":["../../../src/providers/claude/ClaudeSessionParser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7D;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;GAOG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;KACnC,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAcD;;;;;;GAMG;AACH,qBAAa,mBAAmB;IAC9B;;;;;;;;OAQG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI;IAiFxE;;;;;;;;;OASG;IACH,eAAe,CAAC,OAAO,EAAE,aAAa,GAAG,WAAW;IAwBpD;;;;;OAKG;IACH,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IA6ChG;;;;;;OAMG;IACH,OAAO,CAAC,iBAAiB;IAgBzB;;;;;;;;;OASG;IACH,OAAO,CAAC,sBAAsB;IAwC9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACH,OAAO,CAAC,0BAA0B;CAoCnC"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/claude/ClaudeSessionParser.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ConversationMessage } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\n\n/**\n * Content block within a Claude Code JSONL message entry.\n * Handles text, tool_use, and tool_result block types.\n */\nexport interface ContentBlock {\n type?: string;\n text?: string;\n content?: string;\n name?: string;\n input?: Record<string, unknown>;\n tool_use_id?: string;\n is_error?: boolean;\n}\n\n/**\n * A single line entry in a Claude Code session JSONL file.\n *\n * Each line is an independent JSON object with a type discriminator:\n * - \"user\" / \"assistant\" / \"system\" — conversation turns\n * - \"progress\" / \"thinking\" — intermediate agent state\n * - \"last-prompt\" / \"file-history-snapshot\" — metadata (not conversation state)\n */\nexport interface SessionEntry {\n type?: string;\n timestamp?: string;\n cwd?: string;\n message?: {\n content?: string | ContentBlock[];\n };\n}\n\n/**\n * Parsed session state extracted from a JSONL file.\n * Aggregates data from all entries into a single summary.\n */\nexport interface ClaudeSession {\n sessionId: string;\n projectPath: string;\n lastCwd?: string;\n sessionStart: Date;\n lastActive: Date;\n lastEntryType?: string;\n isInterrupted: boolean;\n lastUserMessage?: string;\n /** First meaningful user prompt in the session (post noise filter) */\n firstUserMessage?: string;\n}\n\n/**\n * Top-level JSONL entry types that represent conversation/agent state.\n *\n * Only these types update `lastEntryType` for status determination. All\n * other types Claude Code emits (`attachment`, `permission-mode`,\n * `ai-title`, `queued_command`, `tools_changed`, `model_changed`,\n * `hook_progress`, …) are UI-state events that must not overwrite the\n * last conversation turn — otherwise polling between writes lands on a\n * UI-state entry and `determineStatus` falls through to UNKNOWN.\n */\nconst CONVERSATION_ENTRY_TYPES = new Set([\"user\", \"assistant\", \"system\", \"progress\", \"thinking\"]);\n\n/**\n * Parses Claude Code session JSONL files into structured data.\n *\n * Session files live at ~/.claude/projects/<encoded-cwd>/<session-id>.jsonl\n * and contain one JSON object per line, each representing a conversation\n * event (user turn, assistant response, tool call, etc.).\n */\nexport class ClaudeSessionParser {\n /**\n * Parse a session JSONL file into a ClaudeSession summary.\n *\n * Iterates all lines to extract: session start time (from first entry),\n * last activity timestamp, last entry type (for status), whether the\n * session was interrupted, and the last meaningful user message.\n *\n * Returns null if the file is unreadable or empty.\n */\n readSession(filePath: string, projectPath: string): ClaudeSession | null {\n const sessionId = path.basename(filePath, \".jsonl\");\n\n let content: string;\n try {\n content = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n\n const allLines = content.trim().split(\"\\n\");\n if (allLines.length === 0) {\n return null;\n }\n\n const sessionStart = this.parseSessionStart(allLines[0]);\n\n let lastEntryType: string | undefined;\n let lastActive: Date | undefined;\n let lastCwd: string | undefined;\n let isInterrupted = false;\n let lastUserMessage: string | undefined;\n let firstUserMessage: string | undefined;\n\n for (const line of allLines) {\n try {\n const entry: SessionEntry = JSON.parse(line);\n\n if (entry.timestamp) {\n const ts = new Date(entry.timestamp);\n if (!Number.isNaN(ts.getTime())) {\n lastActive = ts;\n }\n }\n\n if (typeof entry.cwd === \"string\" && entry.cwd.trim().length > 0) {\n lastCwd = entry.cwd;\n }\n\n if (entry.type && CONVERSATION_ENTRY_TYPES.has(entry.type)) {\n lastEntryType = entry.type;\n\n if (entry.type === \"user\") {\n const msgContent = entry.message?.content;\n isInterrupted =\n Array.isArray(msgContent) &&\n msgContent.some(\n (c) =>\n (c.type === \"text\" && c.text?.includes(\"[Request interrupted\")) ||\n (c.type === \"tool_result\" && c.content?.includes(\"[Request interrupted\")),\n );\n\n const text = this.extractUserMessageText(msgContent);\n if (text) {\n lastUserMessage = text;\n if (!firstUserMessage) {\n firstUserMessage = text;\n }\n }\n } else {\n isInterrupted = false;\n }\n }\n } catch {\n continue;\n }\n }\n\n return {\n sessionId,\n projectPath: projectPath || lastCwd || \"\",\n lastCwd,\n sessionStart: sessionStart || lastActive || new Date(),\n lastActive: lastActive || new Date(),\n lastEntryType,\n isInterrupted,\n lastUserMessage,\n firstUserMessage,\n };\n }\n\n /**\n * Determine agent status from parsed session state.\n *\n * Status mapping:\n * - \"user\" + interrupted → WAITING (agent finished, awaiting new input)\n * - \"user\" + not interrupted → RUNNING (agent is processing)\n * - \"progress\" / \"thinking\" → RUNNING\n * - \"assistant\" → WAITING (agent responded, awaiting user)\n * - \"system\" → IDLE\n */\n determineStatus(session: ClaudeSession): AgentStatus {\n if (!session.lastEntryType) {\n return AgentStatus.UNKNOWN;\n }\n\n if (session.lastEntryType === \"user\") {\n return session.isInterrupted ? AgentStatus.WAITING : AgentStatus.RUNNING;\n }\n\n if (session.lastEntryType === \"progress\" || session.lastEntryType === \"thinking\") {\n return AgentStatus.RUNNING;\n }\n\n if (session.lastEntryType === \"assistant\") {\n return AgentStatus.WAITING;\n }\n\n if (session.lastEntryType === \"system\") {\n return AgentStatus.IDLE;\n }\n\n return AgentStatus.UNKNOWN;\n }\n\n /**\n * Read the full conversation from a session JSONL file.\n *\n * Default mode returns only text content from user/assistant/system messages.\n * Verbose mode also includes tool_use and tool_result blocks.\n */\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n const verbose = options?.verbose ?? false;\n\n let content: string;\n try {\n content = fs.readFileSync(sessionFilePath, \"utf-8\");\n } catch {\n return [];\n }\n\n const lines = content.trim().split(\"\\n\");\n const messages: ConversationMessage[] = [];\n\n for (const line of lines) {\n let entry: SessionEntry;\n try {\n entry = JSON.parse(line);\n } catch {\n continue;\n }\n\n let role: ConversationMessage[\"role\"];\n if (entry.type === \"user\") {\n role = \"user\";\n } else if (entry.type === \"assistant\") {\n role = \"assistant\";\n } else if (entry.type === \"system\") {\n role = \"system\";\n } else {\n continue;\n }\n\n const text = this.extractConversationContent(entry.message?.content, role, verbose);\n if (!text) continue;\n\n messages.push({\n role,\n content: text,\n timestamp: entry.timestamp,\n });\n }\n\n return messages;\n }\n\n /**\n * Parse session start time from the first JSONL line.\n *\n * Claude Code may emit a \"file-history-snapshot\" as the first entry,\n * which stores its timestamp inside \"snapshot.timestamp\" rather than\n * at the root level.\n */\n private parseSessionStart(firstLine: string): Date | null {\n try {\n const firstEntry = JSON.parse(firstLine);\n const rawTs: string | undefined = firstEntry.timestamp || firstEntry.snapshot?.timestamp;\n if (rawTs) {\n const ts = new Date(rawTs);\n if (!Number.isNaN(ts.getTime())) {\n return ts;\n }\n }\n } catch {\n /* malformed first line */\n }\n return null;\n }\n\n /**\n * Extract meaningful text from a user message content field.\n *\n * Handles multiple formats:\n * - Plain string content\n * - Array of content blocks (extracts first text block)\n * - Skill slash-commands (<command-message> tags)\n * - Expanded skill content (extracts ARGUMENTS line)\n * - Filters noise messages (interruptions, tool loaded, session continued)\n */\n private extractUserMessageText(\n content: string | Array<{ type?: string; text?: string }> | undefined,\n ): string | undefined {\n if (!content) {\n return undefined;\n }\n\n let raw: string | undefined;\n\n if (typeof content === \"string\") {\n raw = content.trim();\n } else if (Array.isArray(content)) {\n for (const block of content) {\n if (block.type === \"text\" && block.text?.trim()) {\n raw = block.text.trim();\n break;\n }\n }\n }\n\n if (!raw) {\n return undefined;\n }\n\n if (raw.startsWith(\"<command-message>\")) {\n return this.parseCommandMessage(raw);\n }\n\n if (raw.startsWith(\"Base directory for this skill:\")) {\n const argsMatch = raw.match(/\\nARGUMENTS:\\s*(.+)/);\n return argsMatch?.[1]?.trim() || undefined;\n }\n\n if (isNoiseMessage(raw)) {\n return undefined;\n }\n\n return raw;\n }\n\n /**\n * Parse a <command-message> string into \"/command args\" format.\n */\n private parseCommandMessage(raw: string): string | undefined {\n const nameMatch = raw.match(/<command-name>([^<]+)<\\/command-name>/);\n const argsMatch = raw.match(/<command-args>([^<]+)<\\/command-args>/);\n const name = nameMatch?.[1]?.trim();\n if (!name) {\n return undefined;\n }\n const args = argsMatch?.[1]?.trim();\n return args ? `${name} ${args}` : name;\n }\n\n /**\n * Extract displayable content from a message content field for conversation output.\n */\n private extractConversationContent(\n content: string | ContentBlock[] | undefined,\n role: ConversationMessage[\"role\"],\n verbose: boolean,\n ): string | undefined {\n if (!content) return undefined;\n\n if (typeof content === \"string\") {\n const cleaned = stripHarnessTags(content);\n if (role === \"user\" && isNoiseMessage(cleaned)) return undefined;\n return cleaned || undefined;\n }\n\n if (!Array.isArray(content)) return undefined;\n\n const parts: string[] = [];\n\n for (const block of content) {\n if (block.type === \"text\" && block.text?.trim()) {\n const cleaned = stripHarnessTags(block.text);\n if (!cleaned) continue;\n if (role === \"user\" && isNoiseMessage(cleaned)) continue;\n parts.push(cleaned);\n } else if (block.type === \"tool_use\" && verbose) {\n const inputSummary =\n block.input?.file_path || block.input?.pattern || block.input?.command || \"\";\n parts.push(`[Tool: ${block.name}]${inputSummary ? \" \" + inputSummary : \"\"}`);\n } else if (block.type === \"tool_result\" && verbose) {\n const truncated = truncateToolResult(block.content || \"\");\n const prefix = block.is_error ? \"[Tool Error]\" : \"[Tool Result]\";\n parts.push(`${prefix} ${truncated}`);\n }\n }\n\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n }\n}\n\n/**\n * Tags whose entire block (including content) should be dropped — they are\n * harness-injected prompt context (system reminders, hook output, command\n * stdout), not meaningful conversation content.\n */\nconst HARNESS_DROP_TAGS = [\n \"system-reminder\",\n \"local-command-stdout\",\n \"local-command-stderr\",\n \"user-prompt-submit-hook\",\n \"command-stdout\",\n \"command-stderr\",\n \"bash-input\",\n \"bash-stdout\",\n \"bash-stderr\",\n \"command-message\",\n] as const;\n\nconst HARNESS_DROP_RE = new RegExp(`<(${HARNESS_DROP_TAGS.join(\"|\")})>[\\\\s\\\\S]*?</\\\\1>`, \"g\");\n\nconst COMMAND_INVOCATION_RE =\n /<command-name>([^<]+)<\\/command-name>(?:\\s*<command-args>([\\s\\S]*?)<\\/command-args>)?/g;\n\n/**\n * Remove harness-injected XML blocks from message text and collapse\n * <command-name>/<command-args> pairs into a \"/name args\" shorthand.\n *\n * Returns the cleaned, trimmed text. Returns an empty string if nothing\n * survives stripping.\n */\nfunction stripHarnessTags(text: string): string {\n let out = text.replace(HARNESS_DROP_RE, \"\");\n\n out = out.replace(COMMAND_INVOCATION_RE, (_match, rawName: string, rawArgs?: string) => {\n const name = rawName.trim();\n const args = rawArgs?.trim();\n return args ? `${name} ${args}` : name;\n });\n\n return out.replace(/\\n{3,}/g, \"\\n\\n\").trim();\n}\n\n/** Check if a message is noise (not a meaningful user intent). */\nfunction isNoiseMessage(text: string): boolean {\n return (\n text.startsWith(\"[Request interrupted\") ||\n text === \"Tool loaded.\" ||\n text.startsWith(\"This session is being continued\")\n );\n}\n\nfunction truncateToolResult(content: string, maxLength = 200): string {\n const firstLine = content.split(\"\\n\")[0] || \"\";\n if (firstLine.length <= maxLength) return firstLine;\n return firstLine.slice(0, maxLength - 3) + \"...\";\n}\n"],"names":["fs","path","AgentStatus","CONVERSATION_ENTRY_TYPES","Set","ClaudeSessionParser","readSession","filePath","projectPath","sessionId","basename","content","readFileSync","allLines","trim","split","length","sessionStart","parseSessionStart","lastEntryType","lastActive","lastCwd","isInterrupted","lastUserMessage","firstUserMessage","line","entry","JSON","parse","timestamp","ts","Date","Number","isNaN","getTime","cwd","type","has","msgContent","message","Array","isArray","some","c","text","includes","extractUserMessageText","determineStatus","session","UNKNOWN","WAITING","RUNNING","IDLE","getConversation","sessionFilePath","options","verbose","lines","messages","role","extractConversationContent","push","firstLine","firstEntry","rawTs","snapshot","undefined","raw","block","startsWith","parseCommandMessage","argsMatch","match","isNoiseMessage","nameMatch","name","args","cleaned","stripHarnessTags","parts","inputSummary","input","file_path","pattern","command","truncated","truncateToolResult","prefix","is_error","join","HARNESS_DROP_TAGS","HARNESS_DROP_RE","RegExp","COMMAND_INVOCATION_RE","out","replace","_match","rawName","rawArgs","maxLength","slice"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodexAdapter.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/CodexAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAW7D,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,YAAY,qBAAsB;IAE3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,QAAQ,GAAE,aAAuC;IAS7D,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAKtC,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA4BzE,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAI1F,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAanE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAQtD,iBAAiB;IAM/B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,sBAAsB;CAI/B"}