@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
@@ -0,0 +1,230 @@
1
+ /**
2
+ * Tests for GrokSessionParser's summary path.
3
+ *
4
+ * `legacyReadSession` is a verbatim copy of the pre-incremental algorithm
5
+ * (full read + ConversationMessage[] build), kept here as an oracle so the
6
+ * reducer-based summary is checked field-for-field against it.
7
+ */
8
+
9
+ import * as fs from "fs";
10
+ import * as os from "os";
11
+ import * as path from "path";
12
+
13
+ import type { ConversationMessage } from "../../../adapters/AgentAdapter.js";
14
+ import { GrokSessionParser } from "../../../harnesses/grok/GrokSessionParser.js";
15
+
16
+ function legacyScan(chatPath: string) {
17
+ let content: string | undefined;
18
+ try {
19
+ content = fs.readFileSync(chatPath, "utf-8");
20
+ } catch {
21
+ content = undefined;
22
+ }
23
+ if (content === undefined) return {} as Record<string, string | undefined>;
24
+
25
+ const extractText = (value: unknown): string => {
26
+ if (typeof value === "string") return value;
27
+ if (Array.isArray(value)) {
28
+ return value
29
+ .map((block) =>
30
+ block && typeof block === "object" && typeof (block as any).text === "string"
31
+ ? (block as any).text
32
+ : "",
33
+ )
34
+ .join("");
35
+ }
36
+ return "";
37
+ };
38
+
39
+ const messages: ConversationMessage[] = [];
40
+ let lastRole: ConversationMessage["role"] | undefined;
41
+ for (const line of content.trim().split("\n")) {
42
+ if (!line.trim()) continue;
43
+ let record: any;
44
+ try {
45
+ record = JSON.parse(line);
46
+ } catch {
47
+ continue;
48
+ }
49
+ const text = extractText(record.content);
50
+ if (record.type === "user") {
51
+ const match = text.match(/<user_query>\s*([\s\S]*?)\s*<\/user_query>/);
52
+ if (!match) continue;
53
+ messages.push({ role: "user", content: match[1].trim() });
54
+ lastRole = "user";
55
+ } else if (record.type === "assistant") {
56
+ if (!text) continue;
57
+ messages.push({ role: "assistant", content: text });
58
+ lastRole = "assistant";
59
+ }
60
+ }
61
+ const userTurns = messages.filter((m) => m.role === "user");
62
+ return {
63
+ firstUserMessage: userTurns[0]?.content,
64
+ lastUserMessage: userTurns[userTurns.length - 1]?.content,
65
+ lastRole,
66
+ };
67
+ }
68
+
69
+ function legacyReadSession(sessionDir: string, defaultCwd: string) {
70
+ const chatPath = path.join(sessionDir, "chat_history.jsonl");
71
+ const chatStat = fs.statSync(chatPath);
72
+ const scan = legacyScan(chatPath);
73
+ const dirStat = fs.statSync(sessionDir);
74
+ return {
75
+ sessionId: path.basename(sessionDir),
76
+ projectPath: defaultCwd,
77
+ sessionFilePath: chatPath,
78
+ sessionStart: dirStat?.birthtime || chatStat.mtime,
79
+ lastActive: chatStat.mtime,
80
+ firstUserMessage: scan.firstUserMessage,
81
+ lastUserMessage: scan.lastUserMessage,
82
+ lastRole: scan.lastRole,
83
+ };
84
+ }
85
+
86
+ const userRecord = (text: string) => ({
87
+ type: "user",
88
+ content: [{ type: "text", text: `<user_query>\n${text}\n</user_query>` }],
89
+ });
90
+ const contextRecord = (text: string) => ({ type: "user", content: [{ type: "text", text }] });
91
+ const assistantRecord = (text: string) => ({
92
+ type: "assistant",
93
+ content: [{ type: "text", text }],
94
+ });
95
+ const systemRecord = (text: string) => ({ type: "system", content: text });
96
+ const lines = (records: object[]) => records.map((r) => JSON.stringify(r)).join("\n");
97
+
98
+ /** Raw chat_history.jsonl bodies covering the existing Grok fixtures plus edge cases. */
99
+ const FIXTURES: Record<string, string> = {
100
+ "single prompt": lines([userRecord("fix the bug")]),
101
+ "user then assistant": lines([userRecord("go"), assistantRecord("done")]),
102
+ "summary is the last prompt": lines([
103
+ userRecord("refactor the parser"),
104
+ assistantRecord("on it"),
105
+ ]),
106
+ "context injection skipped": lines([
107
+ contextRecord("<user_info>OS: macos</user_info>"),
108
+ userRecord("do the thing"),
109
+ ]),
110
+ "context injection after assistant keeps assistant role": lines([
111
+ userRecord("first"),
112
+ assistantRecord("reply"),
113
+ contextRecord("<system-reminder>ping</system-reminder>"),
114
+ ]),
115
+ "system records ignored": lines([systemRecord("You are Grok"), userRecord("go")]),
116
+ "malformed trailing line": `${lines([userRecord("hi")])}\n{bad json`,
117
+ "multiple prompts, first and last differ": lines([
118
+ systemRecord("sys"),
119
+ contextRecord("<user_info>x</user_info>"),
120
+ userRecord(" first prompt "),
121
+ assistantRecord("a1"),
122
+ userRecord("second prompt"),
123
+ assistantRecord(""),
124
+ { type: "user", content: "<user_query>third as string</user_query>" },
125
+ { type: "assistant", content: [{ type: "text", text: "part " }, { text: "two" }, 42, null] },
126
+ ]),
127
+ "empty assistant text does not change role": lines([userRecord("q"), assistantRecord("")]),
128
+ "trailing newline and blank lines": `\n\n${lines([userRecord("a"), assistantRecord("b")])}\n\n`,
129
+ "CRLF line endings": [userRecord("crlf"), assistantRecord("ok")]
130
+ .map((r) => JSON.stringify(r))
131
+ .join("\r\n"),
132
+ "non-object JSON values": `42\n"str"\n[1,2]\n${lines([userRecord("after scalars")])}`,
133
+ "unknown record types": lines([{ type: "tool", content: "x" }, userRecord("z"), { foo: 1 }]),
134
+ "empty file": "",
135
+ "only context injections": lines([contextRecord("<user_info>a</user_info>")]),
136
+ };
137
+
138
+ describe("GrokSessionParser summary", () => {
139
+ let tmpDir: string;
140
+ let parser: GrokSessionParser;
141
+
142
+ beforeEach(() => {
143
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "grok-parser-test-"));
144
+ parser = new GrokSessionParser();
145
+ });
146
+
147
+ afterEach(() => {
148
+ fs.rmSync(tmpDir, { recursive: true, force: true });
149
+ });
150
+
151
+ function writeChat(name: string, body: string): string {
152
+ const sessionDir = path.join(tmpDir, name.replace(/[^a-z0-9]+/gi, "-"));
153
+ fs.mkdirSync(sessionDir, { recursive: true });
154
+ fs.writeFileSync(path.join(sessionDir, "chat_history.jsonl"), body);
155
+ return sessionDir;
156
+ }
157
+
158
+ describe.each(Object.entries(FIXTURES))("fixture: %s", (name, body) => {
159
+ it("readSession matches the legacy full-parse output", () => {
160
+ const dir = writeChat(name, body);
161
+ expect(parser.readSession(dir, "/cwd")).toEqual(legacyReadSession(dir, "/cwd"));
162
+ });
163
+
164
+ it("readSessionIncremental matches the legacy full-parse output", () => {
165
+ const dir = writeChat(name, body);
166
+ expect(parser.readSessionIncremental(dir, "/cwd")).toEqual(legacyReadSession(dir, "/cwd"));
167
+ // cached second read is identical too
168
+ expect(parser.readSessionIncremental(dir, "/cwd")).toEqual(legacyReadSession(dir, "/cwd"));
169
+ });
170
+ });
171
+
172
+ it("incremental result tracks appends and matches a full parse", () => {
173
+ const dir = writeChat("append", `${lines([userRecord("one"), assistantRecord("r1")])}\n`);
174
+ parser.readSessionIncremental(dir, "/cwd");
175
+
176
+ const chatPath = path.join(dir, "chat_history.jsonl");
177
+ fs.appendFileSync(chatPath, `${lines([contextRecord("<user_info/>"), userRecord("two")])}`);
178
+ expect(parser.readSessionIncremental(dir, "/cwd")).toEqual(legacyReadSession(dir, "/cwd"));
179
+
180
+ // completes the previously unterminated line, then adds an assistant turn
181
+ fs.appendFileSync(chatPath, `\n${lines([assistantRecord("r2")])}\n`);
182
+ expect(parser.readSessionIncremental(dir, "/cwd")).toEqual(legacyReadSession(dir, "/cwd"));
183
+ });
184
+
185
+ it("returns null when chat_history.jsonl is missing", () => {
186
+ const dir = path.join(tmpDir, "no-chat");
187
+ fs.mkdirSync(dir);
188
+ expect(parser.readSession(dir, "/cwd")).toBeNull();
189
+ expect(parser.readSessionIncremental(dir, "/cwd")).toBeNull();
190
+ });
191
+
192
+ it("summary paths never build a conversation message array", () => {
193
+ const body = lines(
194
+ Array.from({ length: 500 }, (_, i) =>
195
+ i % 2 === 0 ? userRecord(`prompt ${i}`) : assistantRecord(`reply ${i}`),
196
+ ),
197
+ );
198
+ const dir = writeChat("many", body);
199
+ const buildSpy = vi.spyOn(parser as any, "parseChatHistory");
200
+
201
+ const full = parser.readSession(dir, "/cwd");
202
+ const incremental = parser.readSessionIncremental(dir, "/cwd");
203
+
204
+ expect(buildSpy).not.toHaveBeenCalled();
205
+ expect(full?.lastUserMessage).toBe("prompt 498");
206
+ expect(incremental).toEqual(full);
207
+
208
+ // the cached state is a fixed-shape record of scalars, not a list of turns
209
+ const state = (parser as any).sessionCache.read(path.join(dir, "chat_history.jsonl")).state;
210
+ expect(Object.keys(state).length).toBeLessThanOrEqual(3);
211
+ for (const value of Object.values(state)) {
212
+ expect(value === undefined || typeof value === "string").toBe(true);
213
+ }
214
+ });
215
+
216
+ it("getConversation still returns the full message list", () => {
217
+ const dir = writeChat("conv", FIXTURES["multiple prompts, first and last differ"]);
218
+ expect(parser.getConversation(dir)).toEqual([
219
+ { role: "user", content: "first prompt" },
220
+ { role: "assistant", content: "a1" },
221
+ { role: "user", content: "second prompt" },
222
+ { role: "user", content: "third as string" },
223
+ { role: "assistant", content: "part two" },
224
+ ]);
225
+ expect(parser.getConversation(dir, { verbose: true })[0]).toEqual({
226
+ role: "system",
227
+ content: "sys",
228
+ });
229
+ });
230
+ });
@@ -1,42 +1,27 @@
1
- /**
2
- * Tests for KiroAdapter
3
- */
4
-
5
1
  import type { MockedFunction } from "vitest";
6
2
  import * as fs from "fs";
7
3
  import * as os from "os";
8
4
  import * as path from "path";
9
5
 
10
- import { KiroAdapter } from "../../adapters/KiroAdapter.js";
11
- import type { ProcessInfo } from "../../adapters/AgentAdapter.js";
12
- import { AgentStatus } from "../../adapters/AgentAdapter.js";
13
- import {
14
- listAgentProcesses,
15
- enrichProcesses,
16
- captureProcessSnapshot,
17
- } from "../../utils/process.js";
18
- import { generateAgentName } from "../../utils/matching.js";
19
-
20
- vi.mock("../../utils/process.js", async (importOriginal) => {
21
- const actual = (await importOriginal()) as typeof import("../../utils/process.js");
22
- return {
23
- ...actual,
24
- listAgentProcesses: vi.fn(),
25
- enrichProcesses: vi.fn(),
26
- captureProcessSnapshot: vi.fn(),
27
- };
6
+ import { KiroAdapter } from "../../../harnesses/kiro/KiroAdapter.js";
7
+ import type { ProcessInfo } from "../../../adapters/AgentAdapter.js";
8
+ import { AgentStatus } from "../../../adapters/AgentAdapter.js";
9
+ import { captureProcessSnapshot } from "../../../utils/process.js";
10
+ import { generateAgentName } from "../../../utils/matching.js";
11
+
12
+ vi.mock("../../../utils/process.js", async (importOriginal) => {
13
+ const actual = (await importOriginal()) as typeof import("../../../utils/process.js");
14
+ return { ...actual, captureProcessSnapshot: vi.fn() };
28
15
  });
29
16
 
30
- vi.mock("../../utils/matching.js", async (importOriginal) => {
31
- const actual = (await importOriginal()) as typeof import("../../utils/matching.js");
17
+ vi.mock("../../../utils/matching.js", async (importOriginal) => {
18
+ const actual = (await importOriginal()) as typeof import("../../../utils/matching.js");
32
19
  return {
33
20
  ...actual,
34
21
  generateAgentName: vi.fn(),
35
22
  };
36
23
  });
37
24
 
38
- const mockedListAgentProcesses = listAgentProcesses as MockedFunction<typeof listAgentProcesses>;
39
- const mockedEnrichProcesses = enrichProcesses as MockedFunction<typeof enrichProcesses>;
40
25
  const mockedCaptureProcessSnapshot = captureProcessSnapshot as MockedFunction<
41
26
  typeof captureProcessSnapshot
42
27
  >;
@@ -55,16 +40,8 @@ describe("KiroAdapter", () => {
55
40
 
56
41
  adapter = new KiroAdapter();
57
42
 
58
- mockedListAgentProcesses.mockReset();
59
- mockedEnrichProcesses.mockReset();
60
43
  mockedCaptureProcessSnapshot.mockReset();
61
44
  mockedGenerateAgentName.mockReset();
62
-
63
- mockedEnrichProcesses.mockImplementation((procs) => procs);
64
- // Compatibility shim for standalone adapter discovery; the manager captures once and slices by name.
65
- mockedCaptureProcessSnapshot.mockImplementation(async (names) =>
66
- enrichProcesses(names.flatMap((name) => listAgentProcesses(name))),
67
- );
68
45
  mockedGenerateAgentName.mockImplementation((cwd: string, pid: number) => {
69
46
  const folder = path.basename(cwd) || "unknown";
70
47
  return `${folder} (${pid})`;
@@ -75,88 +52,60 @@ describe("KiroAdapter", () => {
75
52
  fs.rmSync(tmpHome, { recursive: true, force: true });
76
53
  });
77
54
 
78
- describe("initialization", () => {
79
- it("exposes the kiro type and process names", () => {
80
- expect(adapter.type).toBe("kiro");
81
- expect(adapter.processNames).toEqual(["kiro-cli", "kiro", "kiro-cli-chat", "node"]);
82
- });
55
+ it("exposes the kiro type and process names", () => {
56
+ expect(adapter.type).toBe("kiro");
57
+ expect(adapter.processNames).toEqual(["kiro-cli", "kiro", "kiro-cli-chat", "node", "bun"]);
83
58
  });
84
59
 
85
60
  describe("canHandle", () => {
86
- it("identifies Kiro commands without matching unrelated paths", () => {
87
- expect(adapter.canHandle({ pid: 1, command: "kiro-cli", cwd: "/repo", tty: "ttys001" })).toBe(
88
- true,
89
- );
90
- expect(
91
- adapter.canHandle({
92
- pid: 2,
93
- command: "/usr/local/bin/kiro --model x",
94
- cwd: "/repo",
95
- tty: "ttys002",
96
- }),
97
- ).toBe(true);
98
- expect(
99
- adapter.canHandle({
100
- pid: 3,
101
- command: "node /opt/kiro/bin/kiro-cli.js",
102
- cwd: "/repo",
103
- tty: "ttys003",
104
- }),
105
- ).toBe(true);
106
- expect(
107
- adapter.canHandle({
108
- pid: 4,
109
- command: "node /repo/feature-kiro-adapter/script.js",
110
- cwd: "/repo",
111
- tty: "ttys004",
112
- }),
113
- ).toBe(false);
114
- expect(
115
- adapter.canHandle({
116
- pid: 5,
117
- command: "kiro-cli chat",
118
- cwd: "/repo",
119
- tty: "ttys005",
120
- }),
121
- ).toBe(true);
122
- expect(
123
- adapter.canHandle({
124
- pid: 6,
125
- command: "bun /opt/kiro/bin/kiro-cli.js",
126
- cwd: "/repo",
127
- tty: "ttys006",
128
- }),
129
- ).toBe(true);
130
- expect(
131
- adapter.canHandle({
132
- pid: 7,
133
- command: "node /usr/local/bin/ai-devkit agent start --type kiro",
134
- cwd: "/repo",
135
- tty: "ttys007",
136
- }),
137
- ).toBe(false);
138
- expect(
139
- adapter.canHandle({
140
- pid: 8,
141
- command: "node server.js --name kiro",
142
- cwd: "/repo",
143
- tty: "ttys008",
144
- }),
145
- ).toBe(false);
146
- expect(
147
- adapter.canHandle({
148
- pid: 9,
149
- command: "kiro-cli-chat acp",
150
- cwd: "/repo",
151
- tty: "ttys009",
152
- }),
153
- ).toBe(false);
61
+ const handles = (command: string) =>
62
+ adapter.canHandle({ pid: 1, command, cwd: "/repo", tty: "ttys001" });
63
+
64
+ it.each([
65
+ "kiro-cli",
66
+ "kiro-cli chat",
67
+ "/usr/local/bin/kiro --model x",
68
+ "node /opt/kiro/bin/kiro-cli.js",
69
+ "bun /opt/kiro/bin/kiro-cli.js",
70
+ ])("handles %s", (command) => {
71
+ expect(handles(command)).toBe(true);
72
+ });
73
+
74
+ it.each([
75
+ "node /repo/feature-kiro-adapter/script.js",
76
+ "node /usr/local/bin/ai-devkit agent start --type kiro",
77
+ "node server.js --name kiro",
78
+ "kiro-cli-chat acp",
79
+ ])("ignores %s", (command) => {
80
+ expect(handles(command)).toBe(false);
81
+ });
82
+
83
+ it("identifies Kiro when the runtime or script path contains spaces", () => {
84
+ const root = fs.mkdtempSync(path.join(os.tmpdir(), "kiro-spaces-"));
85
+ try {
86
+ const install = (relativePath: string) => {
87
+ const fullPath = path.join(root, relativePath);
88
+ fs.mkdirSync(path.dirname(fullPath), { recursive: true });
89
+ fs.writeFileSync(fullPath, "");
90
+ return fullPath;
91
+ };
92
+ const node = install("Applications/Dev Tools/bin/node");
93
+ const kiro = install("Applications/Kiro App.app/Contents/Resources/kiro-cli");
94
+ const script = install("My Tools/kiro/bin/kiro-cli.js");
95
+
96
+ expect(handles(`${kiro} chat --trust-all-tools`)).toBe(true);
97
+ expect(handles(`${node} /opt/kiro/bin/kiro-cli.js`)).toBe(true);
98
+ expect(handles(`${node} --no-warnings ${script} chat`)).toBe(true);
99
+ expect(handles(`${node} /repo/server.js --name My Dir/kiro-cli`)).toBe(false);
100
+ } finally {
101
+ fs.rmSync(root, { recursive: true, force: true });
102
+ }
154
103
  });
155
104
  });
156
105
 
157
106
  describe("detectAgents", () => {
158
107
  it("returns [] when there are no Kiro processes", async () => {
159
- mockedListAgentProcesses.mockReturnValue([]);
108
+ mockedCaptureProcessSnapshot.mockResolvedValue([]);
160
109
  expect(await adapter.detectAgents()).toEqual([]);
161
110
  });
162
111
 
@@ -188,7 +137,50 @@ describe("KiroAdapter", () => {
188
137
  });
189
138
  });
190
139
 
191
- it("matches a lock held by a kiro-cli-chat acp descendant when bun is not collected", async () => {
140
+ it("walks through the bundled bun TUI to the kiro-cli that owns an acp lock", async () => {
141
+ // Real kiro-cli tree: the acp helper has no tty, so only the parent chain links it.
142
+ const bun = path.join(tmpHome, "Library", "Application Support", "kiro-cli", "bun");
143
+ fs.mkdirSync(path.dirname(bun), { recursive: true });
144
+ fs.writeFileSync(bun, "");
145
+ const sessionFile = writeKiroSession(
146
+ "sess-bun",
147
+ "/repo/bun",
148
+ [prompt("hello", 1781098057)],
149
+ 35355,
150
+ );
151
+ const kiro = makeProcess({ pid: 35261, command: "kiro-cli", ppid: 28496, tty: "ttys007" });
152
+ const chat = makeProcess({
153
+ pid: 35320,
154
+ command: "/home/.local/bin/kiro-cli-chat chat",
155
+ ppid: 35261,
156
+ tty: "ttys007",
157
+ });
158
+ const tui = makeProcess({
159
+ pid: 35349,
160
+ command: `${bun} --no-env-file ${path.dirname(bun)}/tui.js chat`,
161
+ ppid: 35320,
162
+ tty: "ttys007",
163
+ });
164
+ const acp = makeProcess({
165
+ pid: 35355,
166
+ command: "/home/.local/bin/kiro-cli-chat acp",
167
+ ppid: 35349,
168
+ tty: "??",
169
+ });
170
+ mockedCaptureProcessSnapshot.mockResolvedValue([kiro, chat, tui, acp]);
171
+
172
+ const agents = await adapter.detectAgents();
173
+
174
+ expect(agents).toEqual([
175
+ expect.objectContaining({
176
+ pid: 35261,
177
+ sessionId: "sess-bun",
178
+ sessionFilePath: sessionFile,
179
+ }),
180
+ ]);
181
+ });
182
+
183
+ it("falls back to the sole kiro-cli on the lock holder tty when its parent chain is broken", async () => {
192
184
  const cwd = "/repo/project-a";
193
185
  const sessionFile = writeKiroSession(
194
186
  "sess-acp",
@@ -436,6 +428,32 @@ describe("KiroAdapter", () => {
436
428
  });
437
429
  });
438
430
 
431
+ describe("findSessionsById", () => {
432
+ it("reads only the session stored under that id", async () => {
433
+ const sessionFile = writeKiroSession("sess-find", "/repo/find", [
434
+ prompt("find me", 1781098057),
435
+ ]);
436
+ writeKiroSession("sess-other", "/repo/other", [prompt("not me", 1781098057)]);
437
+
438
+ expect(await adapter.findSessionsById("sess-find")).toEqual([
439
+ expect.objectContaining({
440
+ type: "kiro",
441
+ sessionId: "sess-find",
442
+ cwd: "/repo/find",
443
+ firstUserMessage: "find me",
444
+ sessionFilePath: sessionFile,
445
+ }),
446
+ ]);
447
+ });
448
+
449
+ it("returns [] for a missing or unsafe id", async () => {
450
+ writeKiroSession("sess-find", "/repo/find", [prompt("find me", 1781098057)]);
451
+
452
+ expect(await adapter.findSessionsById("missing")).toEqual([]);
453
+ expect(await adapter.findSessionsById("../cli/sess-find")).toEqual([]);
454
+ });
455
+ });
456
+
439
457
  function makeProcess(overrides: Partial<ProcessInfo>): ProcessInfo {
440
458
  return {
441
459
  pid: 1,
@@ -4,7 +4,7 @@ import * as os from "os";
4
4
  import * as path from "path";
5
5
  import { afterEach, beforeEach, describe, expect, it } from "vitest";
6
6
  import { AgentStatus, type ProcessInfo } from "../../../adapters/AgentAdapter.js";
7
- import { OpenCodeAdapter } from "../../../providers/opencode/OpenCodeAdapter.js";
7
+ import { OpenCodeAdapter } from "../../../harnesses/opencode/OpenCodeAdapter.js";
8
8
 
9
9
  describe("OpenCodeAdapter", () => {
10
10
  let adapter: OpenCodeAdapter;
@@ -1,6 +1,6 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { AgentStatus } from "../../../adapters/AgentAdapter.js";
3
- import { OpenCodeAgentMapper } from "../../../providers/opencode/OpenCodeAgentMapper.js";
3
+ import { OpenCodeAgentMapper } from "../../../harnesses/opencode/OpenCodeAgentMapper.js";
4
4
 
5
5
  describe("OpenCodeAgentMapper", () => {
6
6
  const mapper = new OpenCodeAgentMapper("/tmp/opencode.db");
@@ -3,8 +3,8 @@ import * as fs from "fs";
3
3
  import * as os from "os";
4
4
  import * as path from "path";
5
5
  import { afterEach, beforeEach, describe, expect, it } from "vitest";
6
- import { OpenCodeSessionLocator } from "../../../providers/opencode/OpenCodeSessionLocator.js";
7
- import { OpenCodeSessionParser } from "../../../providers/opencode/OpenCodeSessionParser.js";
6
+ import { OpenCodeSessionLocator } from "../../../harnesses/opencode/OpenCodeSessionLocator.js";
7
+ import { OpenCodeSessionParser } from "../../../harnesses/opencode/OpenCodeSessionParser.js";
8
8
 
9
9
  describe("OpenCodeSessionLocator", () => {
10
10
  let tmpDir: string;
@@ -1,6 +1,6 @@
1
1
  import Database from "better-sqlite3";
2
2
  import { afterEach, beforeEach, describe, expect, it } from "vitest";
3
- import { OpenCodeSessionParser } from "../../../providers/opencode/OpenCodeSessionParser.js";
3
+ import { OpenCodeSessionParser } from "../../../harnesses/opencode/OpenCodeSessionParser.js";
4
4
 
5
5
  describe("OpenCodeSessionParser", () => {
6
6
  let db: Database.Database;
@@ -8,7 +8,7 @@ import * as os from "os";
8
8
  import * as path from "path";
9
9
 
10
10
  import { AgentStatus, type ProcessInfo } from "../../../adapters/AgentAdapter.js";
11
- import { PiAdapter } from "../../../providers/pi/PiAdapter.js";
11
+ import { PiAdapter } from "../../../harnesses/pi/PiAdapter.js";
12
12
  import { AgentRegistry } from "../../../utils/AgentRegistry.js";
13
13
  import { captureProcessSnapshot } from "../../../utils/process.js";
14
14
  import { generateAgentName, matchProcessesToSessions } from "../../../utils/matching.js";