@ai-devkit/agent-manager 0.35.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (651) hide show
  1. package/dist/AgentManager.d.ts +9 -4
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +21 -2
  4. package/dist/AgentManager.js.map +1 -1
  5. package/dist/__tests__/AgentManager.test.js +151 -3
  6. package/dist/__tests__/AgentManager.test.js.map +1 -1
  7. package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js +486 -0
  8. package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js.map +1 -0
  9. package/dist/__tests__/adapters/adapterProcessImports.test.js +52 -0
  10. package/dist/__tests__/adapters/adapterProcessImports.test.js.map +1 -0
  11. package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js +247 -0
  12. package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js.map +1 -0
  13. package/dist/__tests__/capacity/claude.test.js +485 -0
  14. package/dist/__tests__/capacity/claude.test.js.map +1 -0
  15. package/dist/__tests__/capacity/openai.test.js +670 -0
  16. package/dist/__tests__/capacity/openai.test.js.map +1 -0
  17. package/dist/__tests__/capacity/wham.test.js +144 -0
  18. package/dist/__tests__/capacity/wham.test.js.map +1 -0
  19. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js +568 -0
  20. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js.map +1 -0
  21. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js +1089 -0
  22. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js.map +1 -0
  23. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js +143 -0
  24. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js.map +1 -0
  25. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js +462 -0
  26. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js.map +1 -0
  27. package/dist/__tests__/harnesses/builtinAdapters.test.js +33 -0
  28. package/dist/__tests__/harnesses/builtinAdapters.test.js.map +1 -0
  29. package/dist/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.js +4 -4
  30. package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js.map +1 -0
  31. package/dist/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.js +47 -19
  32. package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js.map +1 -0
  33. package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js +1 -12
  34. package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js.map +1 -1
  35. package/dist/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.js +2 -2
  36. package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js.map +1 -0
  37. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.js +1 -1
  38. package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js.map +1 -0
  39. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.js +1 -1
  40. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -0
  41. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.js +4 -4
  42. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js.map +1 -0
  43. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.js +1 -1
  44. package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -0
  45. package/dist/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.js +304 -10
  46. package/dist/__tests__/harnesses/codex/CodexAdapter.test.js.map +1 -0
  47. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js +463 -0
  48. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js.map +1 -0
  49. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js +1 -1
  50. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js.map +1 -1
  51. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js +1 -1
  52. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js.map +1 -1
  53. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.js +4 -4
  54. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -0
  55. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.js +1 -1
  56. package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js.map +1 -0
  57. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.js +1 -1
  58. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -0
  59. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.js +8 -18
  60. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -0
  61. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.js +2 -7
  62. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -0
  63. package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js +1 -1
  64. package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js.map +1 -1
  65. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js +290 -0
  66. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js.map +1 -0
  67. package/dist/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.js +34 -25
  68. package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js.map +1 -0
  69. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js +491 -0
  70. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js.map +1 -0
  71. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js +399 -0
  72. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js.map +1 -0
  73. package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js +1 -1
  74. package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js.map +1 -1
  75. package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js +1 -1
  76. package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js.map +1 -1
  77. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js +167 -0
  78. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js.map +1 -0
  79. package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js +1 -1
  80. package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js.map +1 -1
  81. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js +301 -0
  82. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js.map +1 -0
  83. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js +662 -0
  84. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js.map +1 -0
  85. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js +1 -1
  86. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js.map +1 -1
  87. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js +1 -1
  88. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js.map +1 -1
  89. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js +2 -2
  90. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js.map +1 -1
  91. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js +1 -1
  92. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js.map +1 -1
  93. package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js +1 -1
  94. package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js.map +1 -1
  95. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js +382 -0
  96. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js.map +1 -0
  97. package/dist/__tests__/{providers → harnesses}/pi/PiSessionParser.test.js +171 -1
  98. package/dist/__tests__/harnesses/pi/PiSessionParser.test.js.map +1 -0
  99. package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js +1 -1
  100. package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js.map +1 -1
  101. package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js.map +1 -1
  102. package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
  103. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js.map +1 -1
  104. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js +1 -1
  105. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js.map +1 -1
  106. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js.map +1 -1
  107. package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js +1 -1
  108. package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js.map +1 -1
  109. package/dist/__tests__/readiness/AgentReadiness.test.js +20 -0
  110. package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
  111. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +49 -0
  112. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
  113. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js +650 -0
  114. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js.map +1 -0
  115. package/dist/__tests__/utils/agents.test.js +72 -2
  116. package/dist/__tests__/utils/agents.test.js.map +1 -1
  117. package/dist/__tests__/utils/conversationTail.bench.test.js +258 -0
  118. package/dist/__tests__/utils/conversationTail.bench.test.js.map +1 -0
  119. package/dist/__tests__/utils/conversationTailParity.test.js +588 -0
  120. package/dist/__tests__/utils/conversationTailParity.test.js.map +1 -0
  121. package/dist/__tests__/utils/jsonlTail.test.js +360 -0
  122. package/dist/__tests__/utils/jsonlTail.test.js.map +1 -0
  123. package/dist/__tests__/utils/matchingConstants.test.js +35 -0
  124. package/dist/__tests__/utils/matchingConstants.test.js.map +1 -0
  125. package/dist/__tests__/utils/process.test.js +436 -2
  126. package/dist/__tests__/utils/process.test.js.map +1 -1
  127. package/dist/adapters/AgentAdapter.d.ts +25 -6
  128. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  129. package/dist/adapters/AgentAdapter.js +12 -3
  130. package/dist/adapters/AgentAdapter.js.map +1 -1
  131. package/dist/capacity/claude.d.ts +17 -0
  132. package/dist/capacity/claude.d.ts.map +1 -0
  133. package/dist/capacity/claude.js +271 -0
  134. package/dist/capacity/claude.js.map +1 -0
  135. package/dist/capacity/codex.d.ts +1 -2
  136. package/dist/capacity/codex.d.ts.map +1 -1
  137. package/dist/capacity/codex.js +5 -47
  138. package/dist/capacity/codex.js.map +1 -1
  139. package/dist/capacity/index.d.ts +11 -0
  140. package/dist/capacity/index.d.ts.map +1 -1
  141. package/dist/capacity/index.js +17 -0
  142. package/dist/capacity/index.js.map +1 -1
  143. package/dist/capacity/openai.d.ts +47 -0
  144. package/dist/capacity/openai.d.ts.map +1 -0
  145. package/dist/capacity/openai.js +307 -0
  146. package/dist/capacity/openai.js.map +1 -0
  147. package/dist/capacity/wham.d.ts +16 -0
  148. package/dist/capacity/wham.d.ts.map +1 -0
  149. package/dist/capacity/wham.js +66 -0
  150. package/dist/capacity/wham.js.map +1 -0
  151. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts +13 -0
  152. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts.map +1 -0
  153. package/dist/harnesses/antigravity/AntigravityAgentMapper.js +30 -0
  154. package/dist/harnesses/antigravity/AntigravityAgentMapper.js.map +1 -0
  155. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts +32 -0
  156. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts.map +1 -0
  157. package/dist/harnesses/antigravity/AntigravityCliAdapter.js +97 -0
  158. package/dist/harnesses/antigravity/AntigravityCliAdapter.js.map +1 -0
  159. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts +30 -0
  160. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts.map +1 -0
  161. package/dist/harnesses/antigravity/AntigravitySessionLocator.js +56 -0
  162. package/dist/harnesses/antigravity/AntigravitySessionLocator.js.map +1 -0
  163. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts +75 -0
  164. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts.map +1 -0
  165. package/dist/harnesses/antigravity/AntigravitySessionParser.js +174 -0
  166. package/dist/harnesses/antigravity/AntigravitySessionParser.js.map +1 -0
  167. package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts.map +1 -1
  168. package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.js +4 -10
  169. package/dist/harnesses/claude/ClaudeAgentMapper.js.map +1 -0
  170. package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.d.ts +5 -6
  171. package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts.map +1 -0
  172. package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.js +17 -15
  173. package/dist/harnesses/claude/ClaudeCodeAdapter.js.map +1 -0
  174. package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts.map +1 -1
  175. package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.js +3 -3
  176. package/dist/harnesses/claude/ClaudeSessionLocator.js.map +1 -0
  177. package/dist/{providers → harnesses}/claude/ClaudeSessionParser.d.ts +40 -6
  178. package/dist/harnesses/claude/ClaudeSessionParser.d.ts.map +1 -0
  179. package/dist/{providers → harnesses}/claude/ClaudeSessionParser.js +141 -85
  180. package/dist/harnesses/claude/ClaudeSessionParser.js.map +1 -0
  181. package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
  182. package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js.map +1 -1
  183. package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
  184. package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js.map +1 -1
  185. package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
  186. package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js.map +1 -1
  187. package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
  188. package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js.map +1 -1
  189. package/dist/{providers → harnesses}/codex/CodexAdapter.d.ts +5 -4
  190. package/dist/harnesses/codex/CodexAdapter.d.ts.map +1 -0
  191. package/dist/{providers → harnesses}/codex/CodexAdapter.js +139 -19
  192. package/dist/harnesses/codex/CodexAdapter.js.map +1 -0
  193. package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts.map +1 -1
  194. package/dist/{providers → harnesses}/codex/CodexAgentMapper.js +4 -11
  195. package/dist/harnesses/codex/CodexAgentMapper.js.map +1 -0
  196. package/dist/harnesses/codex/CodexSessionLocator.d.ts +74 -0
  197. package/dist/harnesses/codex/CodexSessionLocator.d.ts.map +1 -0
  198. package/dist/harnesses/codex/CodexSessionLocator.js +359 -0
  199. package/dist/harnesses/codex/CodexSessionLocator.js.map +1 -0
  200. package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts.map +1 -1
  201. package/dist/{providers → harnesses}/codex/CodexSessionMapping.js +3 -3
  202. package/dist/harnesses/codex/CodexSessionMapping.js.map +1 -0
  203. package/dist/harnesses/codex/CodexSessionParser.d.ts +89 -0
  204. package/dist/harnesses/codex/CodexSessionParser.d.ts.map +1 -0
  205. package/dist/{providers → harnesses}/codex/CodexSessionParser.js +124 -78
  206. package/dist/harnesses/codex/CodexSessionParser.js.map +1 -0
  207. package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts.map +1 -1
  208. package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js.map +1 -1
  209. package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
  210. package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js.map +1 -1
  211. package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts.map +1 -1
  212. package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js.map +1 -1
  213. package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts.map +1 -1
  214. package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js.map +1 -1
  215. package/dist/{providers → harnesses}/copilot/CopilotAdapter.d.ts +7 -6
  216. package/dist/harnesses/copilot/CopilotAdapter.d.ts.map +1 -0
  217. package/dist/{providers → harnesses}/copilot/CopilotAdapter.js +19 -14
  218. package/dist/harnesses/copilot/CopilotAdapter.js.map +1 -0
  219. package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts.map +1 -1
  220. package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.js +4 -11
  221. package/dist/harnesses/copilot/CopilotAgentMapper.js.map +1 -0
  222. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts +42 -0
  223. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts.map +1 -0
  224. package/dist/harnesses/copilot/CopilotSessionLocator.js +126 -0
  225. package/dist/harnesses/copilot/CopilotSessionLocator.js.map +1 -0
  226. package/dist/harnesses/copilot/CopilotSessionParser.d.ts +62 -0
  227. package/dist/harnesses/copilot/CopilotSessionParser.d.ts.map +1 -0
  228. package/dist/harnesses/copilot/CopilotSessionParser.js +236 -0
  229. package/dist/harnesses/copilot/CopilotSessionParser.js.map +1 -0
  230. package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts.map +1 -1
  231. package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.js +4 -11
  232. package/dist/harnesses/gemini/GeminiAgentMapper.js.map +1 -0
  233. package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.d.ts +4 -5
  234. package/dist/harnesses/gemini/GeminiCliAdapter.d.ts.map +1 -0
  235. package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.js +6 -7
  236. package/dist/harnesses/gemini/GeminiCliAdapter.js.map +1 -0
  237. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts +72 -0
  238. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts.map +1 -0
  239. package/dist/harnesses/gemini/GeminiSessionLocator.js +300 -0
  240. package/dist/harnesses/gemini/GeminiSessionLocator.js.map +1 -0
  241. package/dist/{providers → harnesses}/gemini/GeminiSessionParser.d.ts +34 -7
  242. package/dist/harnesses/gemini/GeminiSessionParser.d.ts.map +1 -0
  243. package/dist/harnesses/gemini/GeminiSessionParser.js +272 -0
  244. package/dist/harnesses/gemini/GeminiSessionParser.js.map +1 -0
  245. package/dist/harnesses/gemini/fileSignature.d.ts +8 -0
  246. package/dist/harnesses/gemini/fileSignature.d.ts.map +1 -0
  247. package/dist/harnesses/gemini/fileSignature.js +9 -0
  248. package/dist/harnesses/gemini/fileSignature.js.map +1 -0
  249. package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts.map +1 -1
  250. package/dist/{providers → harnesses}/grok/GrokAgentMapper.js +4 -10
  251. package/dist/harnesses/grok/GrokAgentMapper.js.map +1 -0
  252. package/dist/{providers → harnesses}/grok/GrokCliAdapter.d.ts +5 -5
  253. package/dist/harnesses/grok/GrokCliAdapter.d.ts.map +1 -0
  254. package/dist/{providers → harnesses}/grok/GrokCliAdapter.js +14 -10
  255. package/dist/harnesses/grok/GrokCliAdapter.js.map +1 -0
  256. package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts.map +1 -1
  257. package/dist/{providers → harnesses}/grok/GrokSessionLocator.js +2 -2
  258. package/dist/harnesses/grok/GrokSessionLocator.js.map +1 -0
  259. package/dist/harnesses/grok/GrokSessionParser.d.ts +87 -0
  260. package/dist/harnesses/grok/GrokSessionParser.d.ts.map +1 -0
  261. package/dist/harnesses/grok/GrokSessionParser.js +185 -0
  262. package/dist/harnesses/grok/GrokSessionParser.js.map +1 -0
  263. package/dist/harnesses/index.d.ts +7 -0
  264. package/dist/harnesses/index.d.ts.map +1 -0
  265. package/dist/harnesses/index.js +27 -0
  266. package/dist/harnesses/index.js.map +1 -0
  267. package/dist/harnesses/kiro/KiroAdapter.d.ts +31 -0
  268. package/dist/harnesses/kiro/KiroAdapter.d.ts.map +1 -0
  269. package/dist/harnesses/kiro/KiroAdapter.js +125 -0
  270. package/dist/harnesses/kiro/KiroAdapter.js.map +1 -0
  271. package/dist/harnesses/kiro/KiroAgentMapper.d.ts +13 -0
  272. package/dist/harnesses/kiro/KiroAgentMapper.d.ts.map +1 -0
  273. package/dist/harnesses/kiro/KiroAgentMapper.js +29 -0
  274. package/dist/harnesses/kiro/KiroAgentMapper.js.map +1 -0
  275. package/dist/harnesses/kiro/KiroSessionLocator.d.ts +38 -0
  276. package/dist/harnesses/kiro/KiroSessionLocator.d.ts.map +1 -0
  277. package/dist/harnesses/kiro/KiroSessionLocator.js +95 -0
  278. package/dist/harnesses/kiro/KiroSessionLocator.js.map +1 -0
  279. package/dist/harnesses/kiro/KiroSessionParser.d.ts +81 -0
  280. package/dist/harnesses/kiro/KiroSessionParser.d.ts.map +1 -0
  281. package/dist/harnesses/kiro/KiroSessionParser.js +251 -0
  282. package/dist/harnesses/kiro/KiroSessionParser.js.map +1 -0
  283. package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.d.ts +2 -4
  284. package/dist/harnesses/opencode/OpenCodeAdapter.d.ts.map +1 -0
  285. package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.js +4 -7
  286. package/dist/harnesses/opencode/OpenCodeAdapter.js.map +1 -0
  287. package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts.map +1 -1
  288. package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.js +5 -13
  289. package/dist/harnesses/opencode/OpenCodeAgentMapper.js.map +1 -0
  290. package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts.map +1 -1
  291. package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.js +2 -2
  292. package/dist/harnesses/opencode/OpenCodeSessionLocator.js.map +1 -0
  293. package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.d.ts +2 -4
  294. package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts.map +1 -0
  295. package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.js +2 -1
  296. package/dist/harnesses/opencode/OpenCodeSessionParser.js.map +1 -0
  297. package/dist/{providers → harnesses}/pi/PiAdapter.d.ts +5 -4
  298. package/dist/harnesses/pi/PiAdapter.d.ts.map +1 -0
  299. package/dist/{providers → harnesses}/pi/PiAdapter.js +16 -12
  300. package/dist/harnesses/pi/PiAdapter.js.map +1 -0
  301. package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts.map +1 -1
  302. package/dist/{providers → harnesses}/pi/PiAgentMapper.js +4 -11
  303. package/dist/harnesses/pi/PiAgentMapper.js.map +1 -0
  304. package/dist/harnesses/pi/PiSessionLocator.d.ts +61 -0
  305. package/dist/harnesses/pi/PiSessionLocator.d.ts.map +1 -0
  306. package/dist/harnesses/pi/PiSessionLocator.js +212 -0
  307. package/dist/harnesses/pi/PiSessionLocator.js.map +1 -0
  308. package/dist/harnesses/pi/PiSessionParser.d.ts +88 -0
  309. package/dist/harnesses/pi/PiSessionParser.d.ts.map +1 -0
  310. package/dist/harnesses/pi/PiSessionParser.js +318 -0
  311. package/dist/harnesses/pi/PiSessionParser.js.map +1 -0
  312. package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts.map +1 -1
  313. package/dist/{providers → harnesses}/pi/PiSessionTracker.js +2 -2
  314. package/dist/harnesses/pi/PiSessionTracker.js.map +1 -0
  315. package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts.map +1 -1
  316. package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js.map +1 -1
  317. package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts.map +1 -1
  318. package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js.map +1 -1
  319. package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts.map +1 -1
  320. package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js.map +1 -1
  321. package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts.map +1 -1
  322. package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js.map +1 -1
  323. package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts.map +1 -1
  324. package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js.map +1 -1
  325. package/dist/harnesses/shared.d.ts +41 -0
  326. package/dist/harnesses/shared.d.ts.map +1 -0
  327. package/dist/harnesses/shared.js +71 -0
  328. package/dist/harnesses/shared.js.map +1 -0
  329. package/dist/index.d.ts +28 -25
  330. package/dist/index.d.ts.map +1 -1
  331. package/dist/index.js +19 -16
  332. package/dist/index.js.map +1 -1
  333. package/dist/readiness/AgentReadiness.d.ts +1 -1
  334. package/dist/readiness/AgentReadiness.d.ts.map +1 -1
  335. package/dist/readiness/AgentReadiness.js.map +1 -1
  336. package/dist/runtime/ManagedAgentRuntime.js +3 -1
  337. package/dist/runtime/ManagedAgentRuntime.js.map +1 -1
  338. package/dist/runtime/herdr/HerdrAgentDiscovery.js +10 -0
  339. package/dist/runtime/herdr/HerdrAgentDiscovery.js.map +1 -1
  340. package/dist/utils/IncrementalJsonlSummary.d.ts +100 -0
  341. package/dist/utils/IncrementalJsonlSummary.d.ts.map +1 -0
  342. package/dist/utils/IncrementalJsonlSummary.js +209 -0
  343. package/dist/utils/IncrementalJsonlSummary.js.map +1 -0
  344. package/dist/utils/agents.d.ts +3 -2
  345. package/dist/utils/agents.d.ts.map +1 -1
  346. package/dist/utils/agents.js +61 -15
  347. package/dist/utils/agents.js.map +1 -1
  348. package/dist/utils/index.d.ts +2 -1
  349. package/dist/utils/index.d.ts.map +1 -1
  350. package/dist/utils/index.js +1 -1
  351. package/dist/utils/index.js.map +1 -1
  352. package/dist/utils/jsonlTail.d.ts +73 -0
  353. package/dist/utils/jsonlTail.d.ts.map +1 -0
  354. package/dist/utils/jsonlTail.js +238 -0
  355. package/dist/utils/jsonlTail.js.map +1 -0
  356. package/dist/utils/matching.d.ts +2 -0
  357. package/dist/utils/matching.d.ts.map +1 -1
  358. package/dist/utils/matching.js +3 -2
  359. package/dist/utils/matching.js.map +1 -1
  360. package/dist/utils/matchingConstants.d.ts +15 -0
  361. package/dist/utils/matchingConstants.d.ts.map +1 -0
  362. package/dist/utils/matchingConstants.js +14 -0
  363. package/dist/utils/matchingConstants.js.map +1 -0
  364. package/dist/utils/process.d.ts +38 -2
  365. package/dist/utils/process.d.ts.map +1 -1
  366. package/dist/utils/process.js +131 -43
  367. package/dist/utils/process.js.map +1 -1
  368. package/package.json +2 -1
  369. package/scripts/benchmark-cold-start.mjs +350 -0
  370. package/src/AgentManager.ts +26 -5
  371. package/src/__tests__/AgentManager.test.ts +141 -3
  372. package/src/__tests__/adapters/IncrementalSessionRefresh.test.ts +437 -0
  373. package/src/__tests__/adapters/adapterProcessImports.test.ts +58 -0
  374. package/src/__tests__/adapters/adapterSnapshotCandidates.test.ts +243 -0
  375. package/src/__tests__/capacity/claude.test.ts +467 -0
  376. package/src/__tests__/capacity/fixtures/claude-credentials.json +7 -0
  377. package/src/__tests__/capacity/fixtures/claude-usage-malformed.json +1 -0
  378. package/src/__tests__/capacity/fixtures/claude-usage-partial.json +15 -0
  379. package/src/__tests__/capacity/fixtures/claude-usage.json +63 -0
  380. package/src/__tests__/capacity/fixtures/openai-auth.json +6 -0
  381. package/src/__tests__/capacity/fixtures/openai-codex-auth.json +9 -0
  382. package/src/__tests__/capacity/fixtures/openai-usage-completions.json +67 -0
  383. package/src/__tests__/capacity/fixtures/openai-usage-responses.json +20 -0
  384. package/src/__tests__/capacity/fixtures/wham-usage.json +32 -0
  385. package/src/__tests__/capacity/openai.test.ts +560 -0
  386. package/src/__tests__/capacity/wham.test.ts +104 -0
  387. package/src/__tests__/harnesses/BoundedSummarySkip.test.ts +496 -0
  388. package/src/__tests__/harnesses/SessionSummaryEquivalence.test.ts +726 -0
  389. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.ts +133 -0
  390. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.ts +396 -0
  391. package/src/__tests__/harnesses/builtinAdapters.test.ts +33 -0
  392. package/src/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.ts +5 -5
  393. package/src/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.ts +54 -24
  394. package/src/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.ts +1 -12
  395. package/src/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.ts +2 -2
  396. package/src/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.ts +1 -1
  397. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.ts +1 -1
  398. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.ts +4 -4
  399. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.ts +2 -2
  400. package/src/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.ts +277 -12
  401. package/src/__tests__/harnesses/codex/CodexSessionLocator.test.ts +419 -0
  402. package/src/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.ts +1 -1
  403. package/src/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.ts +1 -1
  404. package/src/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.ts +4 -4
  405. package/src/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.ts +1 -1
  406. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.ts +1 -1
  407. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.ts +8 -18
  408. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.ts +3 -9
  409. package/src/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.ts +1 -1
  410. package/src/__tests__/harnesses/copilot/CopilotRefreshIO.test.ts +270 -0
  411. package/src/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.ts +27 -23
  412. package/src/__tests__/harnesses/gemini/GeminiSessionJsonl.test.ts +402 -0
  413. package/src/__tests__/harnesses/gemini/GeminiSessionLocator.test.ts +396 -0
  414. package/src/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.ts +2 -2
  415. package/src/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.ts +1 -1
  416. package/src/__tests__/harnesses/grok/GrokIncrementalRefresh.test.ts +170 -0
  417. package/src/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.ts +1 -1
  418. package/src/__tests__/harnesses/grok/GrokSessionParser.test.ts +230 -0
  419. package/src/__tests__/harnesses/kiro/KiroAdapter.test.ts +552 -0
  420. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.ts +1 -1
  421. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.ts +1 -1
  422. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.ts +2 -2
  423. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.ts +1 -1
  424. package/src/__tests__/{providers → harnesses}/pi/PiAdapter.test.ts +1 -1
  425. package/src/__tests__/harnesses/pi/PiDiscoveryIO.test.ts +337 -0
  426. package/src/__tests__/{providers → harnesses}/pi/PiSessionParser.test.ts +91 -1
  427. package/src/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.ts +1 -1
  428. package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.ts +1 -1
  429. package/src/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.ts +1 -1
  430. package/src/__tests__/readiness/AgentReadiness.test.ts +16 -0
  431. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +30 -0
  432. package/src/__tests__/utils/IncrementalJsonlSummary.test.ts +414 -0
  433. package/src/__tests__/utils/agents.test.ts +83 -2
  434. package/src/__tests__/utils/conversationTail.bench.test.ts +193 -0
  435. package/src/__tests__/utils/conversationTailParity.test.ts +365 -0
  436. package/src/__tests__/utils/jsonlTail.test.ts +317 -0
  437. package/src/__tests__/utils/matchingConstants.test.ts +40 -0
  438. package/src/__tests__/utils/process.test.ts +254 -0
  439. package/src/adapters/AgentAdapter.ts +37 -12
  440. package/src/capacity/claude.ts +313 -0
  441. package/src/capacity/codex.ts +25 -134
  442. package/src/capacity/index.ts +33 -4
  443. package/src/capacity/openai.ts +355 -0
  444. package/src/capacity/wham.ts +84 -0
  445. package/src/harnesses/antigravity/AntigravityAgentMapper.ts +34 -0
  446. package/src/harnesses/antigravity/AntigravityCliAdapter.ts +126 -0
  447. package/src/harnesses/antigravity/AntigravitySessionLocator.ts +75 -0
  448. package/src/harnesses/antigravity/AntigravitySessionParser.ts +252 -0
  449. package/src/{providers → harnesses}/claude/ClaudeAgentMapper.ts +2 -10
  450. package/src/{providers → harnesses}/claude/ClaudeCodeAdapter.ts +22 -20
  451. package/src/{providers → harnesses}/claude/ClaudeSessionLocator.ts +3 -3
  452. package/src/{providers → harnesses}/claude/ClaudeSessionParser.ts +189 -97
  453. package/src/{providers → harnesses}/codex/CodexAdapter.ts +153 -29
  454. package/src/{providers → harnesses}/codex/CodexAgentMapper.ts +2 -11
  455. package/src/harnesses/codex/CodexSessionLocator.ts +509 -0
  456. package/src/{providers → harnesses}/codex/CodexSessionMapping.ts +3 -3
  457. package/src/{providers → harnesses}/codex/CodexSessionParser.ts +169 -92
  458. package/src/{providers → harnesses}/copilot/CopilotAdapter.ts +22 -22
  459. package/src/{providers → harnesses}/copilot/CopilotAgentMapper.ts +2 -11
  460. package/src/harnesses/copilot/CopilotSessionLocator.ts +161 -0
  461. package/src/harnesses/copilot/CopilotSessionParser.ts +380 -0
  462. package/src/{providers → harnesses}/gemini/GeminiAgentMapper.ts +2 -11
  463. package/src/{providers → harnesses}/gemini/GeminiCliAdapter.ts +7 -9
  464. package/src/harnesses/gemini/GeminiSessionLocator.ts +394 -0
  465. package/src/{providers → harnesses}/gemini/GeminiSessionParser.ts +155 -31
  466. package/src/harnesses/gemini/fileSignature.ts +10 -0
  467. package/src/{providers → harnesses}/grok/GrokAgentMapper.ts +2 -11
  468. package/src/{providers → harnesses}/grok/GrokCliAdapter.ts +16 -15
  469. package/src/{providers → harnesses}/grok/GrokSessionLocator.ts +2 -2
  470. package/src/harnesses/grok/GrokSessionParser.ts +251 -0
  471. package/src/harnesses/index.ts +28 -0
  472. package/src/harnesses/kiro/KiroAdapter.ts +143 -0
  473. package/src/harnesses/kiro/KiroAgentMapper.ts +34 -0
  474. package/src/harnesses/kiro/KiroSessionLocator.ts +143 -0
  475. package/src/harnesses/kiro/KiroSessionParser.ts +376 -0
  476. package/src/{providers → harnesses}/opencode/OpenCodeAdapter.ts +5 -11
  477. package/src/{providers → harnesses}/opencode/OpenCodeAgentMapper.ts +3 -13
  478. package/src/{providers → harnesses}/opencode/OpenCodeSessionLocator.ts +2 -2
  479. package/src/{providers → harnesses}/opencode/OpenCodeSessionParser.ts +4 -3
  480. package/src/{providers → harnesses}/pi/PiAdapter.ts +20 -18
  481. package/src/{providers → harnesses}/pi/PiAgentMapper.ts +2 -11
  482. package/src/harnesses/pi/PiSessionLocator.ts +288 -0
  483. package/src/harnesses/pi/PiSessionParser.ts +488 -0
  484. package/src/{providers → harnesses}/pi/PiSessionTracker.ts +2 -2
  485. package/src/harnesses/shared.ts +119 -0
  486. package/src/index.ts +34 -23
  487. package/src/readiness/AgentReadiness.ts +4 -1
  488. package/src/runtime/ManagedAgentRuntime.ts +2 -0
  489. package/src/runtime/herdr/HerdrAgentDiscovery.ts +5 -1
  490. package/src/utils/IncrementalJsonlSummary.ts +306 -0
  491. package/src/utils/agents.ts +62 -20
  492. package/src/utils/index.ts +2 -0
  493. package/src/utils/jsonlTail.ts +349 -0
  494. package/src/utils/matching.ts +3 -3
  495. package/src/utils/matchingConstants.ts +15 -0
  496. package/src/utils/process.ts +189 -45
  497. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +0 -1
  498. package/dist/__tests__/adapters/CodexAdapter.test.js.map +0 -1
  499. package/dist/__tests__/durable/CodexCliProbe.test.js.map +0 -1
  500. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +0 -1
  501. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +0 -1
  502. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +0 -1
  503. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +0 -1
  504. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +0 -1
  505. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +0 -1
  506. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +0 -1
  507. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +0 -1
  508. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +0 -1
  509. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +0 -194
  510. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +0 -1
  511. package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js.map +0 -1
  512. package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +0 -1
  513. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +0 -1
  514. package/dist/adapters/index.d.ts +0 -10
  515. package/dist/adapters/index.d.ts.map +0 -1
  516. package/dist/adapters/index.js +0 -10
  517. package/dist/adapters/index.js.map +0 -1
  518. package/dist/providers/claude/ClaudeAgentMapper.js.map +0 -1
  519. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +0 -1
  520. package/dist/providers/claude/ClaudeCodeAdapter.js.map +0 -1
  521. package/dist/providers/claude/ClaudeSessionLocator.js.map +0 -1
  522. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +0 -1
  523. package/dist/providers/claude/ClaudeSessionParser.js.map +0 -1
  524. package/dist/providers/codex/CodexAdapter.d.ts.map +0 -1
  525. package/dist/providers/codex/CodexAdapter.js.map +0 -1
  526. package/dist/providers/codex/CodexAgentMapper.js.map +0 -1
  527. package/dist/providers/codex/CodexSessionLocator.d.ts +0 -44
  528. package/dist/providers/codex/CodexSessionLocator.d.ts.map +0 -1
  529. package/dist/providers/codex/CodexSessionLocator.js +0 -207
  530. package/dist/providers/codex/CodexSessionLocator.js.map +0 -1
  531. package/dist/providers/codex/CodexSessionMapping.js.map +0 -1
  532. package/dist/providers/codex/CodexSessionParser.d.ts +0 -58
  533. package/dist/providers/codex/CodexSessionParser.d.ts.map +0 -1
  534. package/dist/providers/codex/CodexSessionParser.js.map +0 -1
  535. package/dist/providers/copilot/CopilotAdapter.d.ts.map +0 -1
  536. package/dist/providers/copilot/CopilotAdapter.js.map +0 -1
  537. package/dist/providers/copilot/CopilotAgentMapper.js.map +0 -1
  538. package/dist/providers/copilot/CopilotSessionLocator.d.ts +0 -20
  539. package/dist/providers/copilot/CopilotSessionLocator.d.ts.map +0 -1
  540. package/dist/providers/copilot/CopilotSessionLocator.js +0 -49
  541. package/dist/providers/copilot/CopilotSessionLocator.js.map +0 -1
  542. package/dist/providers/copilot/CopilotSessionParser.d.ts +0 -30
  543. package/dist/providers/copilot/CopilotSessionParser.d.ts.map +0 -1
  544. package/dist/providers/copilot/CopilotSessionParser.js +0 -181
  545. package/dist/providers/copilot/CopilotSessionParser.js.map +0 -1
  546. package/dist/providers/gemini/GeminiAgentMapper.js.map +0 -1
  547. package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +0 -1
  548. package/dist/providers/gemini/GeminiCliAdapter.js.map +0 -1
  549. package/dist/providers/gemini/GeminiSessionLocator.d.ts +0 -30
  550. package/dist/providers/gemini/GeminiSessionLocator.d.ts.map +0 -1
  551. package/dist/providers/gemini/GeminiSessionLocator.js +0 -142
  552. package/dist/providers/gemini/GeminiSessionLocator.js.map +0 -1
  553. package/dist/providers/gemini/GeminiSessionParser.d.ts.map +0 -1
  554. package/dist/providers/gemini/GeminiSessionParser.js +0 -166
  555. package/dist/providers/gemini/GeminiSessionParser.js.map +0 -1
  556. package/dist/providers/grok/GrokAgentMapper.js.map +0 -1
  557. package/dist/providers/grok/GrokCliAdapter.d.ts.map +0 -1
  558. package/dist/providers/grok/GrokCliAdapter.js.map +0 -1
  559. package/dist/providers/grok/GrokSessionLocator.js.map +0 -1
  560. package/dist/providers/grok/GrokSessionParser.d.ts +0 -54
  561. package/dist/providers/grok/GrokSessionParser.d.ts.map +0 -1
  562. package/dist/providers/grok/GrokSessionParser.js +0 -122
  563. package/dist/providers/grok/GrokSessionParser.js.map +0 -1
  564. package/dist/providers/opencode/OpenCodeAdapter.d.ts.map +0 -1
  565. package/dist/providers/opencode/OpenCodeAdapter.js.map +0 -1
  566. package/dist/providers/opencode/OpenCodeAgentMapper.js.map +0 -1
  567. package/dist/providers/opencode/OpenCodeSessionLocator.js.map +0 -1
  568. package/dist/providers/opencode/OpenCodeSessionParser.d.ts.map +0 -1
  569. package/dist/providers/opencode/OpenCodeSessionParser.js.map +0 -1
  570. package/dist/providers/pi/PiAdapter.d.ts.map +0 -1
  571. package/dist/providers/pi/PiAdapter.js.map +0 -1
  572. package/dist/providers/pi/PiAgentMapper.js.map +0 -1
  573. package/dist/providers/pi/PiSessionLocator.d.ts +0 -24
  574. package/dist/providers/pi/PiSessionLocator.d.ts.map +0 -1
  575. package/dist/providers/pi/PiSessionLocator.js +0 -86
  576. package/dist/providers/pi/PiSessionLocator.js.map +0 -1
  577. package/dist/providers/pi/PiSessionParser.d.ts +0 -36
  578. package/dist/providers/pi/PiSessionParser.d.ts.map +0 -1
  579. package/dist/providers/pi/PiSessionParser.js +0 -191
  580. package/dist/providers/pi/PiSessionParser.js.map +0 -1
  581. package/dist/providers/pi/PiSessionTracker.js.map +0 -1
  582. package/src/__tests__/fixtures/fake-claude.cjs +0 -31
  583. package/src/__tests__/fixtures/fake-codex.cjs +0 -56
  584. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +0 -182
  585. package/src/adapters/index.ts +0 -15
  586. package/src/providers/codex/CodexSessionLocator.ts +0 -279
  587. package/src/providers/copilot/CopilotSessionLocator.ts +0 -63
  588. package/src/providers/copilot/CopilotSessionParser.ts +0 -289
  589. package/src/providers/gemini/GeminiSessionLocator.ts +0 -183
  590. package/src/providers/grok/GrokSessionParser.ts +0 -166
  591. package/src/providers/pi/PiSessionLocator.ts +0 -110
  592. package/src/providers/pi/PiSessionParser.ts +0 -284
  593. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js +0 -0
  594. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js +0 -0
  595. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js +0 -0
  596. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js +0 -0
  597. /package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts +0 -0
  598. /package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts +0 -0
  599. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts +0 -0
  600. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js +0 -0
  601. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts +0 -0
  602. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js +0 -0
  603. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts +0 -0
  604. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js +0 -0
  605. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts +0 -0
  606. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js +0 -0
  607. /package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts +0 -0
  608. /package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts +0 -0
  609. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts +0 -0
  610. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js +0 -0
  611. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts +0 -0
  612. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js +0 -0
  613. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts +0 -0
  614. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js +0 -0
  615. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts +0 -0
  616. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js +0 -0
  617. /package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts +0 -0
  618. /package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts +0 -0
  619. /package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts +0 -0
  620. /package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts +0 -0
  621. /package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts +0 -0
  622. /package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts +0 -0
  623. /package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts +0 -0
  624. /package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts +0 -0
  625. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts +0 -0
  626. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js +0 -0
  627. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts +0 -0
  628. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js +0 -0
  629. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts +0 -0
  630. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js +0 -0
  631. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts +0 -0
  632. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js +0 -0
  633. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts +0 -0
  634. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js +0 -0
  635. /package/src/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.ts +0 -0
  636. /package/src/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.ts +0 -0
  637. /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.ts +0 -0
  638. /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.ts +0 -0
  639. /package/src/{providers → harnesses}/claude/durable/ClaudeCliProbe.ts +0 -0
  640. /package/src/{providers → harnesses}/claude/durable/ClaudePrintAgentService.ts +0 -0
  641. /package/src/{providers → harnesses}/claude/durable/ClaudePrintRunner.ts +0 -0
  642. /package/src/{providers → harnesses}/claude/durable/ClaudeStreamParser.ts +0 -0
  643. /package/src/{providers → harnesses}/codex/durable/CodexCliProbe.ts +0 -0
  644. /package/src/{providers → harnesses}/codex/durable/CodexPrintAgentService.ts +0 -0
  645. /package/src/{providers → harnesses}/codex/durable/CodexPrintRunner.ts +0 -0
  646. /package/src/{providers → harnesses}/codex/durable/CodexStreamParser.ts +0 -0
  647. /package/src/{providers → harnesses}/pi/durable/PiCliProbe.ts +0 -0
  648. /package/src/{providers → harnesses}/pi/durable/PiPrintAgentService.ts +0 -0
  649. /package/src/{providers → harnesses}/pi/durable/PiPrintProtocol.ts +0 -0
  650. /package/src/{providers → harnesses}/pi/durable/PiPrintRunner.ts +0 -0
  651. /package/src/{providers → harnesses}/pi/durable/PiStreamParser.ts +0 -0
package/src/index.ts CHANGED
@@ -1,9 +1,16 @@
1
1
  export { AgentManager, AgentNotRunningError } from "./AgentManager.js";
2
- export { getCodexCapacityReport, getZaiCapacityReport } from "./capacity/index.js";
2
+ export {
3
+ getClaudeCapacityReport,
4
+ getCodexCapacityReport,
5
+ getOpenAiCapacityReport,
6
+ getZaiCapacityReport,
7
+ } from "./capacity/index.js";
3
8
  export type {
9
+ ClaudeCapacityOptions,
4
10
  CapacityProbeOptions,
5
11
  CapacityReport,
6
12
  CapacityWindow,
13
+ OpenAiCapacityOptions,
7
14
  ZaiCapacityOptions,
8
15
  } from "./capacity/index.js";
9
16
  export {
@@ -25,20 +32,24 @@ export type {
25
32
  ReadinessStatus,
26
33
  } from "./readiness/AgentReadiness.js";
27
34
 
28
- export { ClaudeCodeAdapter } from "./providers/claude/ClaudeCodeAdapter.js";
29
- export { CodexAdapter } from "./providers/codex/CodexAdapter.js";
30
- export { CopilotAdapter } from "./providers/copilot/CopilotAdapter.js";
31
- export { GeminiCliAdapter } from "./providers/gemini/GeminiCliAdapter.js";
32
- export { GrokCliAdapter } from "./providers/grok/GrokCliAdapter.js";
33
- export { OpenCodeAdapter } from "./providers/opencode/OpenCodeAdapter.js";
34
- export { PiAdapter } from "./providers/pi/PiAdapter.js";
35
- export { AgentStatus } from "./adapters/AgentAdapter.js";
35
+ export { ClaudeCodeAdapter } from "./harnesses/claude/ClaudeCodeAdapter.js";
36
+ export { CodexAdapter } from "./harnesses/codex/CodexAdapter.js";
37
+ export { CopilotAdapter } from "./harnesses/copilot/CopilotAdapter.js";
38
+ export { GeminiCliAdapter } from "./harnesses/gemini/GeminiCliAdapter.js";
39
+ export { GrokCliAdapter } from "./harnesses/grok/GrokCliAdapter.js";
40
+ export { AntigravityCliAdapter } from "./harnesses/antigravity/AntigravityCliAdapter.js";
41
+ export { KiroAdapter } from "./harnesses/kiro/KiroAdapter.js";
42
+ export { OpenCodeAdapter } from "./harnesses/opencode/OpenCodeAdapter.js";
43
+ export { PiAdapter } from "./harnesses/pi/PiAdapter.js";
44
+ export { createBuiltinAdapters } from "./harnesses/index.js";
45
+ export { AGENT_TYPES, AgentStatus } from "./adapters/AgentAdapter.js";
36
46
  export type {
37
47
  AgentAdapter,
38
48
  AgentType,
39
49
  AgentInfo,
40
50
  ProcessInfo,
41
51
  ConversationMessage,
52
+ ConversationOptions,
42
53
  SessionSummary,
43
54
  ListSessionsOptions,
44
55
  AgentDetectionContext,
@@ -138,34 +149,34 @@ export type {
138
149
  ProcessInspector,
139
150
  DurableRunCompletion,
140
151
  } from "./durable/DurableAgentRepository.js";
141
- export { ClaudePrintAgentService } from "./providers/claude/durable/ClaudePrintAgentService.js";
152
+ export { ClaudePrintAgentService } from "./harnesses/claude/durable/ClaudePrintAgentService.js";
142
153
  export type {
143
154
  ClaudePrintAgentServiceOptions,
144
155
  ClaudePrintSendResult,
145
- } from "./providers/claude/durable/ClaudePrintAgentService.js";
146
- export { CodexCliProbe } from "./providers/codex/durable/CodexCliProbe.js";
147
- export type { CodexCliProbeOptions } from "./providers/codex/durable/CodexCliProbe.js";
148
- export { CodexPrintRunner } from "./providers/codex/durable/CodexPrintRunner.js";
156
+ } from "./harnesses/claude/durable/ClaudePrintAgentService.js";
157
+ export { CodexCliProbe } from "./harnesses/codex/durable/CodexCliProbe.js";
158
+ export type { CodexCliProbeOptions } from "./harnesses/codex/durable/CodexCliProbe.js";
159
+ export { CodexPrintRunner } from "./harnesses/codex/durable/CodexPrintRunner.js";
149
160
  export type {
150
161
  CodexPrintRunnerOptions,
151
162
  CodexPrintRunRequest,
152
163
  CodexPrintRunResult,
153
- } from "./providers/codex/durable/CodexPrintRunner.js";
154
- export { CodexPrintAgentService } from "./providers/codex/durable/CodexPrintAgentService.js";
164
+ } from "./harnesses/codex/durable/CodexPrintRunner.js";
165
+ export { CodexPrintAgentService } from "./harnesses/codex/durable/CodexPrintAgentService.js";
155
166
  export type {
156
167
  CodexPrintAgentServiceOptions,
157
168
  CodexPrintSendResult,
158
- } from "./providers/codex/durable/CodexPrintAgentService.js";
159
- export { PiCliProbe } from "./providers/pi/durable/PiCliProbe.js";
160
- export type { PiCliProbeOptions } from "./providers/pi/durable/PiCliProbe.js";
161
- export { PiPrintRunner } from "./providers/pi/durable/PiPrintRunner.js";
169
+ } from "./harnesses/codex/durable/CodexPrintAgentService.js";
170
+ export { PiCliProbe } from "./harnesses/pi/durable/PiCliProbe.js";
171
+ export type { PiCliProbeOptions } from "./harnesses/pi/durable/PiCliProbe.js";
172
+ export { PiPrintRunner } from "./harnesses/pi/durable/PiPrintRunner.js";
162
173
  export type {
163
174
  PiPrintRunnerOptions,
164
175
  PiPrintRunRequest,
165
176
  PiPrintRunResult,
166
- } from "./providers/pi/durable/PiPrintRunner.js";
167
- export { PiPrintAgentService } from "./providers/pi/durable/PiPrintAgentService.js";
177
+ } from "./harnesses/pi/durable/PiPrintRunner.js";
178
+ export { PiPrintAgentService } from "./harnesses/pi/durable/PiPrintAgentService.js";
168
179
  export type {
169
180
  PiPrintAgentServiceOptions,
170
181
  PiPrintSendResult,
171
- } from "./providers/pi/durable/PiPrintAgentService.js";
182
+ } from "./harnesses/pi/durable/PiPrintAgentService.js";
@@ -12,7 +12,10 @@ const ANSI_ESCAPE_PATTERN = new RegExp(`${String.fromCharCode(27)}\\[[0-?]*[ -/]
12
12
 
13
13
  export type ReadinessStatus = "pass" | "warn" | "fail";
14
14
  export type ReadinessAuthState = "authenticated" | "unauthenticated" | "unknown";
15
- export type ReadinessAgentType = Exclude<StartableAgentType, "gemini_cli">;
15
+ export type ReadinessAgentType = Exclude<
16
+ StartableAgentType,
17
+ "gemini_cli" | "kiro" | "antigravity_cli"
18
+ >;
16
19
  type ReadinessInfoStatus = ReadinessStatus | "info";
17
20
 
18
21
  type CommandResult = { stdout: string; stderr: string };
@@ -260,7 +260,9 @@ function agentRuntimeKind(type: StartableAgentType, provider: AgentRuntimeProvid
260
260
  copilot: "copilot",
261
261
  gemini_cli: "gemini",
262
262
  grok_cli: "grok",
263
+ antigravity_cli: "agy",
263
264
  opencode: "opencode",
264
265
  pi: "pi",
266
+ kiro: "kiro",
265
267
  }[type];
266
268
  }
@@ -93,6 +93,8 @@ function herdrAgentMatchesType(herdrAgent: string, agentType: AgentType): boolea
93
93
  copilot: ["copilot"],
94
94
  gemini_cli: ["gemini", "gemini_cli"],
95
95
  grok_cli: ["grok", "grok_cli"],
96
+ antigravity_cli: ["agy", "antigravity", "antigravity_cli"],
97
+ kiro: ["kiro", "kiro_cli", "kiro-cli"],
96
98
  opencode: ["opencode"],
97
99
  pi: ["pi"],
98
100
  other: ["other"],
@@ -119,7 +121,9 @@ async function enrichHerdrAgentPanes(
119
121
  );
120
122
  }
121
123
 
122
- function extractPaneProcessIds(value: unknown): Pick<HerdrAgentPane, "foregroundPids" | "shellPid"> {
124
+ function extractPaneProcessIds(
125
+ value: unknown,
126
+ ): Pick<HerdrAgentPane, "foregroundPids" | "shellPid"> {
123
127
  const processInfo = getObject(value, ["result", "process_info"]);
124
128
  if (!processInfo) return {};
125
129
 
@@ -0,0 +1,306 @@
1
+ /**
2
+ * Incremental JSONL Summary
3
+ *
4
+ * Keeps a small per-file summary of append-only JSONL transcripts so repeated
5
+ * refreshes only parse bytes that were appended since the previous read.
6
+ *
7
+ * Usage:
8
+ * ```ts
9
+ * const summaries = new IncrementalJsonlSummary<MyState>({
10
+ * initial: () => ({ lastType: undefined }),
11
+ * reduce: (state, entry) => ({ ...state, lastType: (entry as any)?.type }),
12
+ * });
13
+ *
14
+ * const result = summaries.read(filePath); // { state, size, mtime, skippedBytes } | null
15
+ * summaries.prune(); // once per refresh: evict paths not read since the last prune
16
+ * ```
17
+ *
18
+ * Read rules, keyed by file path:
19
+ * - dev, ino, size and mtimeMs unchanged → cached state, 0 bytes read.
20
+ * - same dev/ino and size grew → read only the bytes after the last complete line.
21
+ * - anything else (first read, shrink, rotation, in-place rewrite) → rebuild.
22
+ *
23
+ * A rebuild of a file larger than `headBytes + tailBytes` (default 1 MiB +
24
+ * 4 MiB) is a bounded cold start rather than a full parse: it folds the
25
+ * complete lines in `[0, headBytes)`, calls `reducer.skip(state)`, then folds
26
+ * the lines that start inside `[size - tailBytes, size)`, including a line
27
+ * that starts exactly at `size - tailBytes` (one extra byte before the window
28
+ * is read to tell). Lines straddling a window edge are dropped. A field whose
29
+ * entries all sit in the skipped middle keeps whatever `skip` leaves; there is
30
+ * never a hidden full scan. The result's `skippedBytes` reports the unread
31
+ * middle, and the cache is seeded at end of file so later appends stay
32
+ * incremental.
33
+ *
34
+ * An unterminated last line is never folded into the committed state. If it
35
+ * already parses as JSON it is applied to the returned state only, and it is
36
+ * re-read (from its start offset) once more bytes arrive.
37
+ */
38
+
39
+ import * as fs from "fs";
40
+
41
+ /**
42
+ * Pure fold over the entries of a JSONL file.
43
+ *
44
+ * `reduce` receives each non-blank line in file order: the parsed JSON value,
45
+ * or `undefined` when the line is not valid JSON. It must return a new state
46
+ * rather than mutate `state`, and the state should stay O(1) in file size
47
+ * (no entry arrays or raw file contents).
48
+ *
49
+ * `skip` is called once when a bounded cold start skips the middle of a file,
50
+ * between the head lines and the tail lines. It returns the state the tail
51
+ * lines fold onto: keep what the head established (e.g. the first entry) and
52
+ * reset fields that track the latest entry, so those come only from lines
53
+ * actually read. Without `skip`, tail lines fold straight onto the head state.
54
+ */
55
+ export interface JsonlSummaryReducer<S> {
56
+ initial(): S;
57
+ reduce(state: S, entry: unknown): S;
58
+ skip?(state: S): S;
59
+ }
60
+
61
+ export interface JsonlSummaryResult<S> {
62
+ state: S;
63
+ /** File size in bytes when the state was computed. */
64
+ size: number;
65
+ /** File mtime (`fs.Stats.mtime`) when the state was computed. */
66
+ mtime: Date;
67
+ /** Bytes the bounded cold start did not read; 0 when the whole file was parsed. */
68
+ skippedBytes: number;
69
+ }
70
+
71
+ export interface JsonlSummaryBounds {
72
+ /** Bytes scanned from the start of the file on a cold start. */
73
+ headBytes: number;
74
+ /** Bytes scanned at the end of the file on a cold start. */
75
+ tailBytes: number;
76
+ }
77
+
78
+ export interface IncrementalJsonlSummaryOptions {
79
+ /** Bytes read per `fs.readSync` call. */
80
+ chunkSize?: number;
81
+ /** Cold-start scan bounds; `false` parses rebuilt files from byte 0. */
82
+ bounds?: JsonlSummaryBounds | false;
83
+ }
84
+
85
+ interface CacheEntry<S> {
86
+ dev: number;
87
+ ino: number;
88
+ size: number;
89
+ mtimeMs: number;
90
+ mtime: Date;
91
+ /** Byte offset just past the last newline folded into `committed`. */
92
+ offset: number;
93
+ /** `offset` is mid-line: drop bytes up to and including the next newline. */
94
+ discarding: boolean;
95
+ /** State after every newline-terminated line. */
96
+ committed: S;
97
+ /** `committed` plus the unterminated last line, when it parses as JSON. */
98
+ state: S;
99
+ /** Bytes the cold start did not read. */
100
+ skippedBytes: number;
101
+ /** Prune generation in which this entry was last read. */
102
+ seen: number;
103
+ }
104
+
105
+ export const DEFAULT_HEAD_BYTES = 1024 * 1024;
106
+ export const DEFAULT_TAIL_BYTES = 4 * 1024 * 1024;
107
+ const DEFAULT_CHUNK_SIZE = 1024 * 1024;
108
+ const NEWLINE = 0x0a;
109
+
110
+ /** Fold a whole JSONL string with a reducer (one-shot, uncached). */
111
+ export function reduceJsonlContent<S>(reducer: JsonlSummaryReducer<S>, content: string): S {
112
+ let state = reducer.initial();
113
+ for (const line of content.split("\n")) {
114
+ state = reduceLine(reducer, state, line);
115
+ }
116
+ return state;
117
+ }
118
+
119
+ export class IncrementalJsonlSummary<S> {
120
+ private readonly entries = new Map<string, CacheEntry<S>>();
121
+ private readonly chunkSize: number;
122
+ private readonly bounds: JsonlSummaryBounds | false;
123
+ private generation = 0;
124
+
125
+ constructor(
126
+ private readonly reducer: JsonlSummaryReducer<S>,
127
+ options: IncrementalJsonlSummaryOptions = {},
128
+ ) {
129
+ this.chunkSize = options.chunkSize ?? DEFAULT_CHUNK_SIZE;
130
+ this.bounds = options.bounds ?? {
131
+ headBytes: DEFAULT_HEAD_BYTES,
132
+ tailBytes: DEFAULT_TAIL_BYTES,
133
+ };
134
+ }
135
+
136
+ /** Number of cached files. */
137
+ get size(): number {
138
+ return this.entries.size;
139
+ }
140
+
141
+ /** Return the summary of `filePath`, reading only what changed. Null if unreadable. */
142
+ read(filePath: string): JsonlSummaryResult<S> | null {
143
+ let stat: fs.Stats;
144
+ try {
145
+ stat = fs.statSync(filePath);
146
+ } catch {
147
+ this.entries.delete(filePath);
148
+ return null;
149
+ }
150
+
151
+ const cached = this.entries.get(filePath);
152
+ const sameFile = cached !== undefined && cached.dev === stat.dev && cached.ino === stat.ino;
153
+
154
+ if (sameFile && cached.size === stat.size && cached.mtimeMs === stat.mtimeMs) {
155
+ cached.seen = this.generation;
156
+ return toResult(cached);
157
+ }
158
+
159
+ const appended = sameFile && stat.size > cached.size;
160
+ const entry: CacheEntry<S> = appended
161
+ ? { ...cached }
162
+ : {
163
+ dev: stat.dev,
164
+ ino: stat.ino,
165
+ size: 0,
166
+ mtimeMs: 0,
167
+ mtime: stat.mtime,
168
+ offset: 0,
169
+ discarding: false,
170
+ committed: this.reducer.initial(),
171
+ state: this.reducer.initial(),
172
+ skippedBytes: 0,
173
+ seen: this.generation,
174
+ };
175
+
176
+ try {
177
+ const fd = fs.openSync(filePath, "r");
178
+ try {
179
+ const bounds = this.bounds;
180
+ if (!appended && bounds && stat.size > bounds.headBytes + bounds.tailBytes) {
181
+ this.readBounded(fd, entry, stat.size, bounds);
182
+ } else {
183
+ this.readRange(fd, entry, stat.size);
184
+ }
185
+ } finally {
186
+ fs.closeSync(fd);
187
+ }
188
+ } catch {
189
+ this.entries.delete(filePath);
190
+ return null;
191
+ }
192
+
193
+ entry.mtimeMs = stat.mtimeMs;
194
+ entry.mtime = stat.mtime;
195
+ entry.seen = this.generation;
196
+ this.entries.set(filePath, entry);
197
+ return toResult(entry);
198
+ }
199
+
200
+ /** Evict entries not read since the previous `prune()` call. Call once per refresh. */
201
+ prune(): void {
202
+ for (const [filePath, entry] of this.entries) {
203
+ if (entry.seen !== this.generation) {
204
+ this.entries.delete(filePath);
205
+ }
206
+ }
207
+ this.generation++;
208
+ }
209
+
210
+ /** Cold start: fold the head lines, `skip`, then the lines starting in the tail window. */
211
+ private readBounded(
212
+ fd: number,
213
+ entry: CacheEntry<S>,
214
+ size: number,
215
+ { headBytes, tailBytes }: JsonlSummaryBounds,
216
+ ): void {
217
+ this.readRange(fd, entry, headBytes);
218
+
219
+ const tailStart = size - tailBytes;
220
+ const head = entry.committed;
221
+ entry.committed = this.reducer.skip ? this.reducer.skip(head) : head;
222
+ // Lines are only folded from their first byte, and tailStart may fall
223
+ // mid-line. Discard from one byte earlier (tailStart > headBytes >= 0): if
224
+ // that byte is the newline ending the previous line, discarding stops there
225
+ // and the line starting at tailStart is folded; otherwise the partial line
226
+ // is dropped up to its newline.
227
+ entry.offset = tailStart - 1;
228
+ entry.discarding = true;
229
+ entry.skippedBytes = tailStart - headBytes;
230
+ this.readRange(fd, entry, size);
231
+ }
232
+
233
+ /** Fold complete lines in `[entry.offset, end)` into `entry`. */
234
+ private readRange(fd: number, entry: CacheEntry<S>, end: number): void {
235
+ const chunk = Buffer.allocUnsafe(Math.min(this.chunkSize, Math.max(end - entry.offset, 1)));
236
+ let position = entry.offset;
237
+ let carry: Buffer | undefined;
238
+ let committed = entry.committed;
239
+ let discarding = entry.discarding;
240
+
241
+ while (position < end) {
242
+ const bytesRead = fs.readSync(fd, chunk, 0, Math.min(chunk.length, end - position), position);
243
+ if (bytesRead === 0) break;
244
+ position += bytesRead;
245
+
246
+ let lineStart = 0;
247
+ let newline = chunk.indexOf(NEWLINE, 0);
248
+ while (newline !== -1 && newline < bytesRead) {
249
+ if (discarding) {
250
+ discarding = false;
251
+ } else {
252
+ const lineBytes = carry
253
+ ? Buffer.concat([carry, chunk.subarray(lineStart, newline)])
254
+ : chunk.subarray(lineStart, newline);
255
+ committed = reduceLine(this.reducer, committed, lineBytes.toString("utf8"));
256
+ }
257
+ carry = undefined;
258
+ lineStart = newline + 1;
259
+ newline = chunk.indexOf(NEWLINE, lineStart);
260
+ }
261
+
262
+ if (lineStart < bytesRead && !discarding) {
263
+ const rest = Buffer.from(chunk.subarray(lineStart, bytesRead));
264
+ carry = carry ? Buffer.concat([carry, rest]) : rest;
265
+ }
266
+ }
267
+
268
+ entry.committed = committed;
269
+ entry.discarding = discarding;
270
+ entry.offset = position - (carry?.length ?? 0);
271
+ entry.size = position;
272
+ entry.state = carry
273
+ ? reduceTentative(this.reducer, committed, carry.toString("utf8"))
274
+ : committed;
275
+ }
276
+ }
277
+
278
+ function toResult<S>(entry: CacheEntry<S>): JsonlSummaryResult<S> {
279
+ return {
280
+ state: entry.state,
281
+ size: entry.size,
282
+ mtime: entry.mtime,
283
+ skippedBytes: entry.skippedBytes,
284
+ };
285
+ }
286
+
287
+ function reduceLine<S>(reducer: JsonlSummaryReducer<S>, state: S, line: string): S {
288
+ if (!/\S/.test(line)) return state;
289
+ let entry: unknown;
290
+ try {
291
+ entry = JSON.parse(line);
292
+ } catch {
293
+ entry = undefined;
294
+ }
295
+ return reducer.reduce(state, entry);
296
+ }
297
+
298
+ /** Apply an unterminated line only if it is already valid JSON (i.e. fully written). */
299
+ function reduceTentative<S>(reducer: JsonlSummaryReducer<S>, state: S, line: string): S {
300
+ if (!/\S/.test(line)) return state;
301
+ try {
302
+ return reducer.reduce(state, JSON.parse(line));
303
+ } catch {
304
+ return state;
305
+ }
306
+ }
@@ -1,10 +1,9 @@
1
1
  import path from "path";
2
- import type { AgentType } from "../adapters/AgentAdapter.js";
2
+ import type { AGENT_TYPES } from "../adapters/AgentAdapter.js";
3
+ import { executablePath } from "./process.js";
3
4
 
4
- export type StartableAgentType = Extract<
5
- AgentType,
6
- "claude" | "codex" | "copilot" | "gemini_cli" | "grok_cli" | "opencode" | "pi"
7
- >;
5
+ /** Every built-in harness can be started, so each needs an {@link AGENTS} entry. */
6
+ export type StartableAgentType = (typeof AGENT_TYPES)[number];
8
7
 
9
8
  export interface AgentConfig {
10
9
  /** Shell command to launch the agent (sent to tmux via `send-keys`). */
@@ -24,42 +23,85 @@ export const AGENTS: Record<StartableAgentType, AgentConfig> = {
24
23
  copilot: { command: "copilot", matches: matchArgv0Name("copilot-cli") },
25
24
  gemini_cli: { command: "gemini", matches: matchAnyToken("gemini") },
26
25
  grok_cli: { command: "grok", matches: matchArgv0("grok") },
26
+ antigravity_cli: { command: "agy", matches: matchArgv0("agy") },
27
27
  opencode: { command: "opencode", matches: matchArgv0("opencode") },
28
28
  pi: { command: "pi", matches: matchAnyBasename(["pi"]) },
29
+ kiro: { command: "kiro-cli", matches: matchAnyBasename(["kiro-cli", "kiro"]) },
29
30
  };
30
31
 
32
+ /**
33
+ * Matchers read a `ps` command line, where argv is joined with spaces. argv[0]
34
+ * is resolved with {@link executablePath} so executables installed under
35
+ * directories containing spaces are recognised, while arguments are never
36
+ * folded into the executable path unless that combined path is a real file.
37
+ *
38
+ * The filesystem is consulted only when a token after the first could be part
39
+ * of a matching argv[0]; commands whose first token already decides the match,
40
+ * or that contain no candidate token at all, are handled with string checks.
41
+ */
42
+ const ABSOLUTE_PATH = /^(?:\/|[a-zA-Z]:[\\/])/;
43
+ const PATH_SEPARATOR = /[\\/]/;
44
+
45
+ function basenameOf(token: string): string {
46
+ return path.basename(token).toLowerCase();
47
+ }
48
+
49
+ function tokensOf(psCommand: string): string[] {
50
+ return psCommand.trim().split(/\s+/).filter(Boolean);
51
+ }
52
+
53
+ /** Split a command line into its resolved argv[0] and the remaining argument tokens. */
54
+ function splitArgv0(psCommand: string): { argv0: string; args: string[] } {
55
+ const command = psCommand.trim();
56
+ const argv0 = executablePath(command);
57
+ return { argv0, args: tokensOf(command.slice(argv0.length)) };
58
+ }
59
+
60
+ /** Whether argv[0] may span several tokens, i.e. a later path-like token satisfies `test`. */
61
+ function mayContinueArgv0(tokens: string[], test: (token: string) => boolean): boolean {
62
+ return (
63
+ ABSOLUTE_PATH.test(tokens[0]) &&
64
+ tokens.slice(1).some((token) => PATH_SEPARATOR.test(token) && test(token))
65
+ );
66
+ }
67
+
31
68
  function matchArgv0(name: string): (psCommand: string) => boolean {
32
69
  const lower = name.toLowerCase();
70
+ const test = (token: string) => basenameOf(token) === lower;
33
71
  return (psCommand) => {
34
- const token = psCommand.trim().split(/\s+/)[0];
35
- return token ? path.basename(token).toLowerCase() === lower : false;
72
+ const tokens = tokensOf(psCommand);
73
+ if (tokens.length === 0) return false;
74
+ if (test(tokens[0])) return true;
75
+ return mayContinueArgv0(tokens, test) && test(executablePath(psCommand));
36
76
  };
37
77
  }
38
78
 
39
79
  function matchArgv0Name(name: string): (psCommand: string) => boolean {
40
80
  const lower = name.toLowerCase();
81
+ const test = (token: string) => token.toLowerCase().includes(lower);
41
82
  return (psCommand) => {
42
- const token = psCommand.trim().split(/\s+/)[0];
43
- return token ? token.toLowerCase().includes(lower) : false;
83
+ const tokens = tokensOf(psCommand);
84
+ if (tokens.length === 0) return false;
85
+ if (test(tokens[0])) return true;
86
+ return mayContinueArgv0(tokens, test) && test(executablePath(psCommand));
44
87
  };
45
88
  }
46
89
 
47
90
  function matchAnyToken(name: string): (psCommand: string) => boolean {
48
- const lower = name.toLowerCase();
49
- return (psCommand) => {
50
- for (const token of psCommand.trim().split(/\s+/)) {
51
- if (path.basename(token).toLowerCase() === lower) return true;
52
- }
53
- return false;
54
- };
91
+ return matchAnyBasename([name]);
55
92
  }
56
93
 
57
94
  function matchAnyBasename(names: string[]): (psCommand: string) => boolean {
58
95
  const lowers = new Set(names.map((name) => name.toLowerCase()));
96
+ const test = (token: string) => lowers.has(basenameOf(token));
59
97
  return (psCommand) => {
60
- for (const token of psCommand.trim().split(/\s+/)) {
61
- if (lowers.has(path.basename(token).toLowerCase())) return true;
62
- }
63
- return false;
98
+ const tokens = tokensOf(psCommand);
99
+ if (tokens.length === 0) return false;
100
+ if (test(tokens[0])) return true;
101
+ if (!tokens.slice(1).some(test)) return false;
102
+ if (!ABSOLUTE_PATH.test(tokens[0])) return true;
103
+
104
+ const { argv0, args } = splitArgv0(psCommand);
105
+ return test(argv0) || args.some(test);
64
106
  };
65
107
  }
@@ -4,7 +4,9 @@ export {
4
4
  batchGetProcessStartTimes,
5
5
  enrichProcesses,
6
6
  captureProcessSnapshot,
7
+ createProcessSnapshotCapture,
7
8
  } from "./process.js";
9
+ export type { ProcessExec, ProcessSnapshotCapture, ProcessSnapshotOptions } from "./process.js";
8
10
  export { getProcessTty } from "./process.js";
9
11
  export { batchGetSessionFileBirthtimes } from "./session.js";
10
12
  export type { SessionFile } from "./session.js";