@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,6 +1,6 @@
1
1
  import type { AgentInfo, ProcessInfo } from "../../adapters/AgentAdapter.js";
2
- import { AgentStatus } from "../../adapters/AgentAdapter.js";
3
2
  import { generateAgentName } from "../../utils/matching.js";
3
+ import { processOnlyAgent } from "../shared.js";
4
4
  import { GrokSessionParser, type GrokSession } from "./GrokSessionParser.js";
5
5
 
6
6
  export interface GrokSessionAgentInput {
@@ -27,15 +27,6 @@ export class GrokAgentMapper {
27
27
 
28
28
  /** `cwd` is already resolved by the locator (registry first, then process cwd). */
29
29
  mapProcessOnlyAgent(processInfo: ProcessInfo, cwd: string): AgentInfo {
30
- return {
31
- name: generateAgentName(cwd, processInfo.pid),
32
- type: "grok_cli",
33
- status: AgentStatus.RUNNING,
34
- summary: "Grok CLI process running",
35
- pid: processInfo.pid,
36
- projectPath: cwd,
37
- sessionId: `pid-${processInfo.pid}`,
38
- lastActive: new Date(),
39
- };
30
+ return processOnlyAgent("grok_cli", processInfo, { summary: "Grok CLI process running", cwd });
40
31
  }
41
32
  }
@@ -3,15 +3,12 @@ import type {
3
3
  AgentInfo,
4
4
  ProcessInfo,
5
5
  ConversationMessage,
6
+ ConversationOptions,
6
7
  SessionSummary,
7
8
  ListSessionsOptions,
8
9
  AgentDetectionContext,
9
10
  } from "../../adapters/AgentAdapter.js";
10
- import {
11
- captureProcessSnapshot,
12
- executableBasename,
13
- filterByProcessNames,
14
- } from "../../utils/process.js";
11
+ import { findHarnessProcesses, matchesExecutable } from "../shared.js";
15
12
  import { GrokAgentMapper } from "./GrokAgentMapper.js";
16
13
  import { GrokSessionLocator } from "./GrokSessionLocator.js";
17
14
  import { GrokSessionParser, type GrokSession } from "./GrokSessionParser.js";
@@ -32,6 +29,8 @@ import { GrokSessionParser, type GrokSession } from "./GrokSessionParser.js";
32
29
  * record of the conversation). The last user turn (the text inside
33
30
  * <user_query>...</user_query>) is the summary; the file's mtime is the last
34
31
  * activity time. summary.json / updates.jsonl are intentionally not used.
32
+ * The summary is cached incrementally across refreshes, so an unchanged
33
+ * transcript is not re-read and an appended one is read only from its tail.
35
34
  */
36
35
  export class GrokCliAdapter implements AgentAdapter {
37
36
  readonly type = "grok_cli" as const;
@@ -48,18 +47,20 @@ export class GrokCliAdapter implements AgentAdapter {
48
47
  }
49
48
 
50
49
  canHandle(processInfo: ProcessInfo): boolean {
51
- return this.isGrokExecutable(processInfo.command);
50
+ return matchesExecutable(processInfo.command, "grok");
52
51
  }
53
52
 
54
- private isGrokExecutable(command: string): boolean {
55
- const base = executableBasename(command);
56
- return base === "grok" || base === "grok.exe";
53
+ async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {
54
+ try {
55
+ return await this.detectRunningAgents(context);
56
+ } finally {
57
+ // Drop cached summaries for sessions that were not part of this refresh
58
+ this.parser.pruneSessionCache();
59
+ }
57
60
  }
58
61
 
59
- async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {
60
- const snapshot = context?.processes ?? (await captureProcessSnapshot(this.processNames));
61
- const relevant = filterByProcessNames(snapshot, this.processNames);
62
- const processes = relevant.filter((process) => this.canHandle(process));
62
+ private async detectRunningAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {
63
+ const { processes } = await findHarnessProcesses(this, context);
63
64
  if (processes.length === 0) {
64
65
  return [];
65
66
  }
@@ -68,7 +69,7 @@ export class GrokCliAdapter implements AgentAdapter {
68
69
  for (const { process: proc, cwd, sessionDir } of this.locator.matchRunningProcesses(
69
70
  processes,
70
71
  )) {
71
- const session = sessionDir ? this.parser.readSession(sessionDir, cwd) : null;
72
+ const session = sessionDir ? this.parser.readSessionIncremental(sessionDir, cwd) : null;
72
73
  if (session) {
73
74
  agents.push(this.mapper.mapSessionToAgent({ session, processInfo: proc }));
74
75
  } else {
@@ -78,7 +79,7 @@ export class GrokCliAdapter implements AgentAdapter {
78
79
  return agents;
79
80
  }
80
81
 
81
- getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {
82
+ getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[] {
82
83
  return this.parser.getConversation(sessionFilePath, options);
83
84
  }
84
85
 
@@ -7,6 +7,7 @@ import {
7
7
  safeReaddir,
8
8
  safeStat,
9
9
  } from "../../utils/session.js";
10
+ import { homeDir } from "../shared.js";
10
11
  import { CHAT_HISTORY_FILE } from "./GrokSessionParser.js";
11
12
 
12
13
  const ACTIVE_SESSIONS_FILE = "active_sessions.json";
@@ -45,8 +46,7 @@ export class GrokSessionLocator {
45
46
  // GROK_HOME overrides the ~/.grok base directory; sessions live under
46
47
  // <base>/sessions/ and the active-session registry at
47
48
  // <base>/active_sessions.json.
48
- const homeDir = process.env.HOME || process.env.USERPROFILE || "";
49
- this.baseDir = options.baseDir ?? (process.env.GROK_HOME || path.join(homeDir, ".grok"));
49
+ this.baseDir = options.baseDir ?? (process.env.GROK_HOME || path.join(homeDir(), ".grok"));
50
50
  this.sessionsDir = path.join(this.baseDir, "sessions");
51
51
  }
52
52
 
@@ -0,0 +1,251 @@
1
+ import * as path from "path";
2
+ import type { ConversationMessage, ConversationOptions } from "../../adapters/AgentAdapter.js";
3
+ import { AgentStatus } from "../../adapters/AgentAdapter.js";
4
+ import {
5
+ IncrementalJsonlSummary,
6
+ reduceJsonlContent,
7
+ type JsonlSummaryBounds,
8
+ type JsonlSummaryReducer,
9
+ } from "../../utils/IncrementalJsonlSummary.js";
10
+ import { JsonlTailReader, normalizeTail } from "../../utils/jsonlTail.js";
11
+ import { safeReadFile, safeStat } from "../../utils/session.js";
12
+ import { flattenTextBlocks, isIdle } from "../shared.js";
13
+
14
+ export const CHAT_HISTORY_FILE = "chat_history.jsonl";
15
+
16
+ /** One line of chat_history.jsonl. */
17
+ interface ChatRecord {
18
+ type?: string;
19
+ content?: unknown;
20
+ }
21
+
22
+ /**
23
+ * O(1) running summary folded from chat records: only the first/last real
24
+ * prompt and the role of the last user/assistant turn, never the turns.
25
+ */
26
+ interface GrokSummaryState {
27
+ /** A bounded cold start skipped the middle: later lines are not the session's first. */
28
+ pastHead?: boolean;
29
+ firstUserMessage?: string;
30
+ lastUserMessage?: string;
31
+ lastRole?: ConversationMessage["role"];
32
+ }
33
+
34
+ /** Parsed state for a single ~/.grok/sessions/<cwd>/<id>/ directory. */
35
+ export interface GrokSession {
36
+ sessionId: string;
37
+ projectPath: string;
38
+ sessionFilePath: string;
39
+ sessionStart: Date;
40
+ lastActive: Date;
41
+ firstUserMessage?: string;
42
+ lastUserMessage?: string;
43
+ lastRole?: ConversationMessage["role"];
44
+ }
45
+
46
+ export interface GrokSessionParserOptions {
47
+ /** Cold-start scan bounds for `readSessionIncremental` (see IncrementalJsonlSummary). */
48
+ summaryBounds?: JsonlSummaryBounds | false;
49
+ }
50
+
51
+ export class GrokSessionParser {
52
+ /** Incremental reader backing `getConversation({ tail })`. */
53
+ private readonly tailReader = new JsonlTailReader();
54
+
55
+ private readonly sessionCache: IncrementalJsonlSummary<GrokSummaryState>;
56
+
57
+ constructor(options: GrokSessionParserOptions = {}) {
58
+ this.sessionCache = new IncrementalJsonlSummary(this.summaryReducer, {
59
+ bounds: options.summaryBounds,
60
+ });
61
+ }
62
+
63
+ /**
64
+ * Parse a session directory into a {@link GrokSession} from its
65
+ * chat_history.jsonl transcript. Returns null when the transcript is
66
+ * missing — i.e. there is no real session to surface.
67
+ */
68
+ readSession(sessionDir: string, defaultCwd: string): GrokSession | null {
69
+ const chatPath = path.join(sessionDir, CHAT_HISTORY_FILE);
70
+ const chatStat = safeStat(chatPath);
71
+ if (!chatStat) return null;
72
+
73
+ const content = safeReadFile(chatPath);
74
+ const state = content === undefined ? {} : reduceJsonlContent(this.summaryReducer, content);
75
+ return this.toSession(sessionDir, defaultCwd, chatPath, chatStat.mtime, state);
76
+ }
77
+
78
+ /**
79
+ * Same result as `readSession`, but backed by a per-instance incremental
80
+ * cache so repeated refreshes only parse bytes appended since the last call.
81
+ * Call `pruneSessionCache()` once per refresh to evict files no longer read.
82
+ *
83
+ * The first read of a large transcript is a bounded head + tail scan (see
84
+ * `summaryReducer.skip`); fields whose entries lie only in the skipped
85
+ * middle fall back to their defaults instead of forcing a full parse.
86
+ */
87
+ readSessionIncremental(sessionDir: string, defaultCwd: string): GrokSession | null {
88
+ const chatPath = path.join(sessionDir, CHAT_HISTORY_FILE);
89
+ const result = this.sessionCache.read(chatPath);
90
+ if (result) {
91
+ return this.toSession(sessionDir, defaultCwd, chatPath, result.mtime, result.state);
92
+ }
93
+ // Present but unreadable: surface the session without a summary, like readSession.
94
+ const chatStat = safeStat(chatPath);
95
+ return chatStat ? this.toSession(sessionDir, defaultCwd, chatPath, chatStat.mtime, {}) : null;
96
+ }
97
+
98
+ /** Evict cached summaries for files not read since the previous prune. */
99
+ pruneSessionCache(): void {
100
+ this.sessionCache.prune();
101
+ }
102
+
103
+ /** Accepts a session dir or an explicit chat_history.jsonl path. */
104
+ getConversation(sessionPath: string, options?: ConversationOptions): ConversationMessage[] {
105
+ const chatPath = this.resolveChatPath(sessionPath);
106
+ const verbose = options?.verbose ?? false;
107
+ const tail = normalizeTail(options?.tail);
108
+ if (tail !== undefined) {
109
+ return this.tailReader.read(
110
+ chatPath,
111
+ tail,
112
+ { parseLine: (line) => this.lineToMessage(line, verbose) },
113
+ String(verbose),
114
+ );
115
+ }
116
+ return this.parseChatHistory(chatPath, verbose);
117
+ }
118
+
119
+ /**
120
+ * Determine agent status from parsed session state.
121
+ *
122
+ * - past the idle threshold → IDLE
123
+ * - last transcript turn is an assistant message → WAITING (awaiting user)
124
+ * - otherwise (last turn was a user message, or unknown) → RUNNING
125
+ */
126
+ determineStatus(session: GrokSession): AgentStatus {
127
+ if (isIdle(session.lastActive)) {
128
+ return AgentStatus.IDLE;
129
+ }
130
+ if (session.lastRole === "assistant") {
131
+ return AgentStatus.WAITING;
132
+ }
133
+ return AgentStatus.RUNNING;
134
+ }
135
+
136
+ /**
137
+ * Fold one chat_history.jsonl entry into the O(1) summary. Uses the same
138
+ * record rules as `getConversation` (see `toMessage`), minus system records.
139
+ *
140
+ * `skip` (bounded cold start) keeps the head's first user message and
141
+ * clears the last user message and last role, so those come from the tail
142
+ * only. A first user message beyond the head stays undefined rather than
143
+ * being filled from the tail; latest fields before the tail window stay
144
+ * undefined.
145
+ */
146
+ private readonly summaryReducer: JsonlSummaryReducer<GrokSummaryState> = {
147
+ initial: () => ({}),
148
+ reduce: (state, value) => {
149
+ const message = this.toMessage(value, false);
150
+ if (!message) return state;
151
+ if (message.role === "user") {
152
+ return {
153
+ ...state,
154
+ firstUserMessage:
155
+ state.firstUserMessage ?? (state.pastHead ? undefined : message.content),
156
+ lastUserMessage: message.content,
157
+ lastRole: "user",
158
+ };
159
+ }
160
+ return { ...state, lastRole: message.role };
161
+ },
162
+ skip: (state) => ({ pastHead: true, firstUserMessage: state.firstUserMessage }),
163
+ };
164
+
165
+ private toSession(
166
+ sessionDir: string,
167
+ defaultCwd: string,
168
+ chatPath: string,
169
+ lastActive: Date,
170
+ state: GrokSummaryState,
171
+ ): GrokSession {
172
+ const dirStat = safeStat(sessionDir);
173
+ return {
174
+ sessionId: path.basename(sessionDir),
175
+ projectPath: defaultCwd,
176
+ sessionFilePath: chatPath,
177
+ sessionStart: dirStat?.birthtime || lastActive,
178
+ lastActive,
179
+ firstUserMessage: state.firstUserMessage,
180
+ lastUserMessage: state.lastUserMessage,
181
+ lastRole: state.lastRole,
182
+ };
183
+ }
184
+
185
+ /** Full pass over chat_history.jsonl building every conversation turn. */
186
+ private parseChatHistory(chatPath: string, verbose: boolean): ConversationMessage[] {
187
+ const content = safeReadFile(chatPath);
188
+ if (content === undefined) return [];
189
+
190
+ const messages: ConversationMessage[] = [];
191
+ for (const line of content.trim().split("\n")) {
192
+ const message = this.lineToMessage(line, verbose);
193
+ if (message) messages.push(message);
194
+ }
195
+ return messages;
196
+ }
197
+
198
+ /**
199
+ * Map one parsed chat record to a conversation turn, or null to skip it.
200
+ * Each record is a { type: 'system' | 'user' | 'assistant', content } object
201
+ * where content is either a string or an array of { type: 'text', text } blocks.
202
+ *
203
+ * Grok wraps the real user prompt in <user_query>...</user_query>; the other
204
+ * user records are context injections (<user_info>, <system-reminder>, ...)
205
+ * and are skipped so the summary is the actual prompt, not boilerplate.
206
+ */
207
+ private toMessage(value: unknown, verbose: boolean): ConversationMessage | null {
208
+ if (!value || typeof value !== "object") return null;
209
+ const record = value as ChatRecord;
210
+
211
+ const text = flattenTextBlocks(record.content);
212
+ if (record.type === "user") {
213
+ const query = this.extractUserQuery(text);
214
+ return query === null ? null : { role: "user", content: query };
215
+ }
216
+ if (record.type === "assistant") {
217
+ return text ? { role: "assistant", content: text } : null;
218
+ }
219
+ if (verbose && record.type === "system") {
220
+ return text ? { role: "system", content: text } : null;
221
+ }
222
+ return null;
223
+ }
224
+
225
+ /** Convert one chat_history.jsonl line into a message, or null when it is not one. */
226
+ private lineToMessage(line: string, verbose: boolean): ConversationMessage | null {
227
+ if (!line.trim()) return null;
228
+
229
+ let record: unknown;
230
+ try {
231
+ record = JSON.parse(line);
232
+ } catch {
233
+ return null;
234
+ }
235
+ return this.toMessage(record, verbose);
236
+ }
237
+
238
+ /**
239
+ * Extract the prompt inside <user_query>...</user_query>. Returns null when
240
+ * the record has no such tag (a context injection rather than a prompt).
241
+ */
242
+ private extractUserQuery(text: string): string | null {
243
+ const match = text.match(/<user_query>\s*([\s\S]*?)\s*<\/user_query>/);
244
+ return match ? match[1].trim() : null;
245
+ }
246
+
247
+ /** Resolve a session dir or an explicit chat_history.jsonl path to the file. */
248
+ private resolveChatPath(sessionPath: string): string {
249
+ return sessionPath.endsWith(".jsonl") ? sessionPath : path.join(sessionPath, CHAT_HISTORY_FILE);
250
+ }
251
+ }
@@ -0,0 +1,28 @@
1
+ import type { AgentAdapter } from "../adapters/AgentAdapter.js";
2
+ import { AntigravityCliAdapter } from "./antigravity/AntigravityCliAdapter.js";
3
+ import { ClaudeCodeAdapter } from "./claude/ClaudeCodeAdapter.js";
4
+ import { CodexAdapter } from "./codex/CodexAdapter.js";
5
+ import { CopilotAdapter } from "./copilot/CopilotAdapter.js";
6
+ import { GeminiCliAdapter } from "./gemini/GeminiCliAdapter.js";
7
+ import { GrokCliAdapter } from "./grok/GrokCliAdapter.js";
8
+ import { KiroAdapter } from "./kiro/KiroAdapter.js";
9
+ import { OpenCodeAdapter } from "./opencode/OpenCodeAdapter.js";
10
+ import { PiAdapter } from "./pi/PiAdapter.js";
11
+
12
+ /**
13
+ * One instance of every built-in harness adapter, in registration order
14
+ * (which is also the order agents are listed in). Register a new harness here.
15
+ */
16
+ export function createBuiltinAdapters(): AgentAdapter[] {
17
+ return [
18
+ new ClaudeCodeAdapter(),
19
+ new CodexAdapter(),
20
+ new CopilotAdapter(),
21
+ new GeminiCliAdapter(),
22
+ new GrokCliAdapter(),
23
+ new KiroAdapter(),
24
+ new AntigravityCliAdapter(),
25
+ new OpenCodeAdapter(),
26
+ new PiAdapter(),
27
+ ];
28
+ }
@@ -0,0 +1,143 @@
1
+ import * as path from "path";
2
+ import type {
3
+ AgentAdapter,
4
+ AgentInfo,
5
+ ProcessInfo,
6
+ ConversationMessage,
7
+ ConversationOptions,
8
+ SessionSummary,
9
+ ListSessionsOptions,
10
+ AgentDetectionContext,
11
+ } from "../../adapters/AgentAdapter.js";
12
+ import { executablePath } from "../../utils/process.js";
13
+ import { findHarnessProcesses } from "../shared.js";
14
+ import { KiroAgentMapper } from "./KiroAgentMapper.js";
15
+ import { KiroSessionLocator } from "./KiroSessionLocator.js";
16
+ import { KiroSessionParser, type KiroSession } from "./KiroSessionParser.js";
17
+
18
+ const KIRO_BASENAMES = new Set(["kiro-cli", "kiro"]);
19
+ const SCRIPT_RUNTIMES = new Set(["node", "bun"]);
20
+
21
+ /**
22
+ * Kiro Adapter
23
+ *
24
+ * Detects running Kiro agents by matching the PID in each
25
+ * ~/.kiro/sessions/cli/<session-id>.lock to a running Kiro process (walking up
26
+ * from helper processes such as `kiro-cli-chat acp`), then reading the sibling
27
+ * <session-id>.json metadata and <session-id>.jsonl transcript.
28
+ */
29
+ export class KiroAdapter implements AgentAdapter {
30
+ readonly type = "kiro" as const;
31
+ /**
32
+ * Also collects the helpers between a lock holder and its kiro-cli, such as
33
+ * the bundled `bun … tui.js`; `canHandle` still decides which are agents.
34
+ */
35
+ readonly processNames = ["kiro-cli", "kiro", "kiro-cli-chat", "node", "bun"] as const;
36
+
37
+ private parser: KiroSessionParser;
38
+ private mapper: KiroAgentMapper;
39
+ private locator: KiroSessionLocator;
40
+
41
+ constructor() {
42
+ this.parser = new KiroSessionParser();
43
+ this.mapper = new KiroAgentMapper(this.parser);
44
+ this.locator = new KiroSessionLocator();
45
+ }
46
+
47
+ canHandle(processInfo: ProcessInfo): boolean {
48
+ return this.isKiroExecutable(processInfo.command);
49
+ }
50
+
51
+ async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {
52
+ try {
53
+ return await this.detectRunningAgents(context);
54
+ } finally {
55
+ // Drop cached summaries for sessions that were not part of this refresh
56
+ this.parser.pruneSessionCache();
57
+ }
58
+ }
59
+
60
+ private async detectRunningAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {
61
+ const { relevant, processes } = await findHarnessProcesses(this, context);
62
+ if (processes.length === 0) return [];
63
+
64
+ const agents: AgentInfo[] = [];
65
+ const matchedPids = new Set<number>();
66
+ for (const match of this.locator.matchRunningProcesses(relevant, processes, (process) =>
67
+ this.canHandle(process),
68
+ )) {
69
+ const session = this.parser.readSessionIncremental(match.session, match.process.cwd);
70
+ if (!session) continue;
71
+
72
+ agents.push(this.mapper.mapSessionToAgent({ session, processInfo: match.process }));
73
+ matchedPids.add(match.process.pid);
74
+ }
75
+
76
+ for (const proc of processes) {
77
+ if (!matchedPids.has(proc.pid)) {
78
+ agents.push(this.mapper.mapProcessOnlyAgent(proc));
79
+ }
80
+ }
81
+ return agents;
82
+ }
83
+
84
+ getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[] {
85
+ return this.parser.getConversation(sessionFilePath, options);
86
+ }
87
+
88
+ async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {
89
+ const summaries: SessionSummary[] = [];
90
+ for (const paths of this.locator.listSessions()) {
91
+ const session = this.parser.readSession(paths);
92
+ if (!session) continue;
93
+ if (opts?.cwd !== undefined && session.projectPath !== opts.cwd) continue;
94
+
95
+ summaries.push(this.toSessionSummary(session));
96
+ }
97
+ return summaries;
98
+ }
99
+
100
+ async findSessionsById(sessionId: string): Promise<SessionSummary[]> {
101
+ const paths = this.locator.findSession(sessionId);
102
+ const session = paths ? this.parser.readSession(paths) : null;
103
+ // listSessions reports the metadata's id, so only an exact match counts.
104
+ return session?.sessionId === sessionId ? [this.toSessionSummary(session)] : [];
105
+ }
106
+
107
+ private toSessionSummary(session: KiroSession): SessionSummary {
108
+ return {
109
+ type: this.type,
110
+ sessionId: session.sessionId,
111
+ cwd: session.projectPath,
112
+ firstUserMessage: session.firstUserMessage,
113
+ lastActive: session.lastActive,
114
+ startedAt: session.sessionStart,
115
+ sessionFilePath: session.sessionFilePath,
116
+ };
117
+ }
118
+
119
+ /** `kiro-cli` / `kiro`, directly or as a script run by node or bun. */
120
+ private isKiroExecutable(command: string): boolean {
121
+ const trimmed = command.trim();
122
+ const executable = executablePath(trimmed);
123
+ if (!executable) return false;
124
+
125
+ const executableName = kiroBasename(executable);
126
+ if (KIRO_BASENAMES.has(executableName)) return true;
127
+ if (!SCRIPT_RUNTIMES.has(executableName)) return false;
128
+
129
+ const args = trimmed.slice(executable.length).trim().split(/\s+/);
130
+ const scriptIndex = args.findIndex((token) => token !== "" && !token.startsWith("-"));
131
+ if (scriptIndex === -1) return false;
132
+ // The script path may also contain spaces; resolve it like argv[0].
133
+ const script = executablePath(args.slice(scriptIndex).join(" "));
134
+ return KIRO_BASENAMES.has(kiroBasename(script));
135
+ }
136
+ }
137
+
138
+ function kiroBasename(executable: string): string {
139
+ return path
140
+ .basename(executable.replace(/\\/g, "/"))
141
+ .toLowerCase()
142
+ .replace(/\.(exe|js)$/, "");
143
+ }
@@ -0,0 +1,34 @@
1
+ import type { AgentInfo, ProcessInfo } from "../../adapters/AgentAdapter.js";
2
+ import { generateAgentName } from "../../utils/matching.js";
3
+ import { processOnlyAgent, SUMMARY_MAX_LENGTH, truncate } from "../shared.js";
4
+ import { KiroSessionParser, type KiroSession } from "./KiroSessionParser.js";
5
+
6
+ export interface KiroSessionAgentInput {
7
+ session: KiroSession;
8
+ processInfo: ProcessInfo;
9
+ }
10
+
11
+ export class KiroAgentMapper {
12
+ constructor(private readonly parser: KiroSessionParser = new KiroSessionParser()) {}
13
+
14
+ mapSessionToAgent({ session, processInfo }: KiroSessionAgentInput): AgentInfo {
15
+ return {
16
+ name: generateAgentName(session.projectPath, processInfo.pid),
17
+ type: "kiro",
18
+ status: this.parser.determineStatus(session),
19
+ summary: truncate(
20
+ session.lastUserMessage || session.title || "Kiro session active",
21
+ SUMMARY_MAX_LENGTH,
22
+ ),
23
+ pid: processInfo.pid,
24
+ projectPath: session.projectPath,
25
+ sessionId: session.sessionId,
26
+ lastActive: session.lastActive,
27
+ sessionFilePath: session.sessionFilePath,
28
+ };
29
+ }
30
+
31
+ mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {
32
+ return processOnlyAgent("kiro", processInfo, { summary: "Kiro process running" });
33
+ }
34
+ }