@ai-devkit/agent-manager 0.36.0 → 0.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (618) hide show
  1. package/dist/AgentManager.d.ts +9 -4
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +21 -2
  4. package/dist/AgentManager.js.map +1 -1
  5. package/dist/__tests__/AgentManager.test.js +151 -3
  6. package/dist/__tests__/AgentManager.test.js.map +1 -1
  7. package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js +486 -0
  8. package/dist/__tests__/adapters/IncrementalSessionRefresh.test.js.map +1 -0
  9. package/dist/__tests__/adapters/adapterProcessImports.test.js +52 -0
  10. package/dist/__tests__/adapters/adapterProcessImports.test.js.map +1 -0
  11. package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js +247 -0
  12. package/dist/__tests__/adapters/adapterSnapshotCandidates.test.js.map +1 -0
  13. package/dist/__tests__/capacity/openai.test.js +12 -14
  14. package/dist/__tests__/capacity/openai.test.js.map +1 -1
  15. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js +568 -0
  16. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js.map +1 -0
  17. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js +1089 -0
  18. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js.map +1 -0
  19. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js +143 -0
  20. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js.map +1 -0
  21. package/dist/__tests__/{adapters → harnesses/antigravity}/AntigravityCliAdapter.test.js +103 -22
  22. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js.map +1 -0
  23. package/dist/__tests__/harnesses/builtinAdapters.test.js +33 -0
  24. package/dist/__tests__/harnesses/builtinAdapters.test.js.map +1 -0
  25. package/dist/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.js +4 -4
  26. package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js.map +1 -0
  27. package/dist/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.js +47 -19
  28. package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js.map +1 -0
  29. package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js +1 -12
  30. package/dist/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.js.map +1 -1
  31. package/dist/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.js +2 -2
  32. package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js.map +1 -0
  33. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.js +1 -1
  34. package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js.map +1 -0
  35. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.js +1 -1
  36. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -0
  37. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.js +4 -4
  38. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js.map +1 -0
  39. package/dist/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.js +1 -1
  40. package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -0
  41. package/dist/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.js +304 -10
  42. package/dist/__tests__/harnesses/codex/CodexAdapter.test.js.map +1 -0
  43. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js +463 -0
  44. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js.map +1 -0
  45. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js +1 -1
  46. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.js.map +1 -1
  47. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js +1 -1
  48. package/dist/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.js.map +1 -1
  49. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.js +4 -4
  50. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -0
  51. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.js +1 -1
  52. package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js.map +1 -0
  53. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.js +1 -1
  54. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -0
  55. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.js +8 -18
  56. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -0
  57. package/dist/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.js +2 -7
  58. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -0
  59. package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js +1 -1
  60. package/dist/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.js.map +1 -1
  61. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js +290 -0
  62. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js.map +1 -0
  63. package/dist/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.js +34 -25
  64. package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js.map +1 -0
  65. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js +491 -0
  66. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js.map +1 -0
  67. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js +399 -0
  68. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js.map +1 -0
  69. package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js +1 -1
  70. package/dist/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.js.map +1 -1
  71. package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js +1 -1
  72. package/dist/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.js.map +1 -1
  73. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js +167 -0
  74. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js.map +1 -0
  75. package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js +1 -1
  76. package/dist/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.js.map +1 -1
  77. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js +301 -0
  78. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js.map +1 -0
  79. package/dist/__tests__/{adapters → harnesses/kiro}/KiroAdapter.test.js +137 -82
  80. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js.map +1 -0
  81. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js +1 -1
  82. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.js.map +1 -1
  83. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js +1 -1
  84. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.js.map +1 -1
  85. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js +2 -2
  86. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.js.map +1 -1
  87. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js +1 -1
  88. package/dist/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.js.map +1 -1
  89. package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js +1 -1
  90. package/dist/__tests__/{providers → harnesses}/pi/PiAdapter.test.js.map +1 -1
  91. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js +382 -0
  92. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js.map +1 -0
  93. package/dist/__tests__/{providers → harnesses}/pi/PiSessionParser.test.js +171 -1
  94. package/dist/__tests__/harnesses/pi/PiSessionParser.test.js.map +1 -0
  95. package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js +1 -1
  96. package/dist/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.js.map +1 -1
  97. package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js.map +1 -1
  98. package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js.map +1 -1
  99. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js.map +1 -1
  100. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js +1 -1
  101. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.js.map +1 -1
  102. package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js.map +1 -1
  103. package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js +1 -1
  104. package/dist/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.js.map +1 -1
  105. package/dist/__tests__/readiness/AgentReadiness.test.js +20 -0
  106. package/dist/__tests__/readiness/AgentReadiness.test.js.map +1 -1
  107. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +49 -0
  108. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
  109. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js +650 -0
  110. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js.map +1 -0
  111. package/dist/__tests__/utils/agents.test.js +66 -2
  112. package/dist/__tests__/utils/agents.test.js.map +1 -1
  113. package/dist/__tests__/utils/conversationTail.bench.test.js +258 -0
  114. package/dist/__tests__/utils/conversationTail.bench.test.js.map +1 -0
  115. package/dist/__tests__/utils/conversationTailParity.test.js +588 -0
  116. package/dist/__tests__/utils/conversationTailParity.test.js.map +1 -0
  117. package/dist/__tests__/utils/jsonlTail.test.js +360 -0
  118. package/dist/__tests__/utils/jsonlTail.test.js.map +1 -0
  119. package/dist/__tests__/utils/matchingConstants.test.js +35 -0
  120. package/dist/__tests__/utils/matchingConstants.test.js.map +1 -0
  121. package/dist/__tests__/utils/process.test.js +436 -2
  122. package/dist/__tests__/utils/process.test.js.map +1 -1
  123. package/dist/adapters/AgentAdapter.d.ts +25 -6
  124. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  125. package/dist/adapters/AgentAdapter.js +12 -3
  126. package/dist/adapters/AgentAdapter.js.map +1 -1
  127. package/dist/capacity/openai.d.ts +0 -1
  128. package/dist/capacity/openai.d.ts.map +1 -1
  129. package/dist/capacity/openai.js +0 -5
  130. package/dist/capacity/openai.js.map +1 -1
  131. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts +13 -0
  132. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts.map +1 -0
  133. package/dist/harnesses/antigravity/AntigravityAgentMapper.js +30 -0
  134. package/dist/harnesses/antigravity/AntigravityAgentMapper.js.map +1 -0
  135. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts +32 -0
  136. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts.map +1 -0
  137. package/dist/harnesses/antigravity/AntigravityCliAdapter.js +97 -0
  138. package/dist/harnesses/antigravity/AntigravityCliAdapter.js.map +1 -0
  139. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts +30 -0
  140. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts.map +1 -0
  141. package/dist/harnesses/antigravity/AntigravitySessionLocator.js +56 -0
  142. package/dist/harnesses/antigravity/AntigravitySessionLocator.js.map +1 -0
  143. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts +75 -0
  144. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts.map +1 -0
  145. package/dist/harnesses/antigravity/AntigravitySessionParser.js +174 -0
  146. package/dist/harnesses/antigravity/AntigravitySessionParser.js.map +1 -0
  147. package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts.map +1 -1
  148. package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.js +4 -10
  149. package/dist/harnesses/claude/ClaudeAgentMapper.js.map +1 -0
  150. package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.d.ts +5 -6
  151. package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts.map +1 -0
  152. package/dist/{providers → harnesses}/claude/ClaudeCodeAdapter.js +17 -15
  153. package/dist/harnesses/claude/ClaudeCodeAdapter.js.map +1 -0
  154. package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts.map +1 -1
  155. package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.js +3 -3
  156. package/dist/harnesses/claude/ClaudeSessionLocator.js.map +1 -0
  157. package/dist/{providers → harnesses}/claude/ClaudeSessionParser.d.ts +40 -6
  158. package/dist/harnesses/claude/ClaudeSessionParser.d.ts.map +1 -0
  159. package/dist/{providers → harnesses}/claude/ClaudeSessionParser.js +141 -85
  160. package/dist/harnesses/claude/ClaudeSessionParser.js.map +1 -0
  161. package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts.map +1 -1
  162. package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js.map +1 -1
  163. package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts.map +1 -1
  164. package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js.map +1 -1
  165. package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts.map +1 -1
  166. package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js.map +1 -1
  167. package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts.map +1 -1
  168. package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js.map +1 -1
  169. package/dist/{providers → harnesses}/codex/CodexAdapter.d.ts +5 -4
  170. package/dist/harnesses/codex/CodexAdapter.d.ts.map +1 -0
  171. package/dist/{providers → harnesses}/codex/CodexAdapter.js +139 -19
  172. package/dist/harnesses/codex/CodexAdapter.js.map +1 -0
  173. package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts.map +1 -1
  174. package/dist/{providers → harnesses}/codex/CodexAgentMapper.js +4 -11
  175. package/dist/harnesses/codex/CodexAgentMapper.js.map +1 -0
  176. package/dist/harnesses/codex/CodexSessionLocator.d.ts +74 -0
  177. package/dist/harnesses/codex/CodexSessionLocator.d.ts.map +1 -0
  178. package/dist/harnesses/codex/CodexSessionLocator.js +359 -0
  179. package/dist/harnesses/codex/CodexSessionLocator.js.map +1 -0
  180. package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts.map +1 -1
  181. package/dist/{providers → harnesses}/codex/CodexSessionMapping.js +3 -3
  182. package/dist/harnesses/codex/CodexSessionMapping.js.map +1 -0
  183. package/dist/harnesses/codex/CodexSessionParser.d.ts +89 -0
  184. package/dist/harnesses/codex/CodexSessionParser.d.ts.map +1 -0
  185. package/dist/{providers → harnesses}/codex/CodexSessionParser.js +124 -78
  186. package/dist/harnesses/codex/CodexSessionParser.js.map +1 -0
  187. package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts.map +1 -1
  188. package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js.map +1 -1
  189. package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts.map +1 -1
  190. package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js.map +1 -1
  191. package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts.map +1 -1
  192. package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js.map +1 -1
  193. package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts.map +1 -1
  194. package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js.map +1 -1
  195. package/dist/{providers → harnesses}/copilot/CopilotAdapter.d.ts +7 -6
  196. package/dist/harnesses/copilot/CopilotAdapter.d.ts.map +1 -0
  197. package/dist/{providers → harnesses}/copilot/CopilotAdapter.js +19 -14
  198. package/dist/harnesses/copilot/CopilotAdapter.js.map +1 -0
  199. package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts.map +1 -1
  200. package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.js +4 -11
  201. package/dist/harnesses/copilot/CopilotAgentMapper.js.map +1 -0
  202. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts +42 -0
  203. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts.map +1 -0
  204. package/dist/harnesses/copilot/CopilotSessionLocator.js +126 -0
  205. package/dist/harnesses/copilot/CopilotSessionLocator.js.map +1 -0
  206. package/dist/harnesses/copilot/CopilotSessionParser.d.ts +62 -0
  207. package/dist/harnesses/copilot/CopilotSessionParser.d.ts.map +1 -0
  208. package/dist/harnesses/copilot/CopilotSessionParser.js +236 -0
  209. package/dist/harnesses/copilot/CopilotSessionParser.js.map +1 -0
  210. package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts.map +1 -1
  211. package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.js +4 -11
  212. package/dist/harnesses/gemini/GeminiAgentMapper.js.map +1 -0
  213. package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.d.ts +4 -5
  214. package/dist/harnesses/gemini/GeminiCliAdapter.d.ts.map +1 -0
  215. package/dist/{providers → harnesses}/gemini/GeminiCliAdapter.js +6 -7
  216. package/dist/harnesses/gemini/GeminiCliAdapter.js.map +1 -0
  217. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts +72 -0
  218. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts.map +1 -0
  219. package/dist/harnesses/gemini/GeminiSessionLocator.js +300 -0
  220. package/dist/harnesses/gemini/GeminiSessionLocator.js.map +1 -0
  221. package/dist/{providers → harnesses}/gemini/GeminiSessionParser.d.ts +34 -7
  222. package/dist/harnesses/gemini/GeminiSessionParser.d.ts.map +1 -0
  223. package/dist/harnesses/gemini/GeminiSessionParser.js +272 -0
  224. package/dist/harnesses/gemini/GeminiSessionParser.js.map +1 -0
  225. package/dist/harnesses/gemini/fileSignature.d.ts +8 -0
  226. package/dist/harnesses/gemini/fileSignature.d.ts.map +1 -0
  227. package/dist/harnesses/gemini/fileSignature.js +9 -0
  228. package/dist/harnesses/gemini/fileSignature.js.map +1 -0
  229. package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts.map +1 -1
  230. package/dist/{providers → harnesses}/grok/GrokAgentMapper.js +4 -10
  231. package/dist/harnesses/grok/GrokAgentMapper.js.map +1 -0
  232. package/dist/{providers → harnesses}/grok/GrokCliAdapter.d.ts +5 -5
  233. package/dist/harnesses/grok/GrokCliAdapter.d.ts.map +1 -0
  234. package/dist/{providers → harnesses}/grok/GrokCliAdapter.js +14 -10
  235. package/dist/harnesses/grok/GrokCliAdapter.js.map +1 -0
  236. package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts.map +1 -1
  237. package/dist/{providers → harnesses}/grok/GrokSessionLocator.js +2 -2
  238. package/dist/harnesses/grok/GrokSessionLocator.js.map +1 -0
  239. package/dist/harnesses/grok/GrokSessionParser.d.ts +87 -0
  240. package/dist/harnesses/grok/GrokSessionParser.d.ts.map +1 -0
  241. package/dist/harnesses/grok/GrokSessionParser.js +185 -0
  242. package/dist/harnesses/grok/GrokSessionParser.js.map +1 -0
  243. package/dist/harnesses/index.d.ts +7 -0
  244. package/dist/harnesses/index.d.ts.map +1 -0
  245. package/dist/harnesses/index.js +27 -0
  246. package/dist/harnesses/index.js.map +1 -0
  247. package/dist/harnesses/kiro/KiroAdapter.d.ts +31 -0
  248. package/dist/harnesses/kiro/KiroAdapter.d.ts.map +1 -0
  249. package/dist/harnesses/kiro/KiroAdapter.js +125 -0
  250. package/dist/harnesses/kiro/KiroAdapter.js.map +1 -0
  251. package/dist/harnesses/kiro/KiroAgentMapper.d.ts +13 -0
  252. package/dist/harnesses/kiro/KiroAgentMapper.d.ts.map +1 -0
  253. package/dist/harnesses/kiro/KiroAgentMapper.js +29 -0
  254. package/dist/harnesses/kiro/KiroAgentMapper.js.map +1 -0
  255. package/dist/harnesses/kiro/KiroSessionLocator.d.ts +38 -0
  256. package/dist/harnesses/kiro/KiroSessionLocator.d.ts.map +1 -0
  257. package/dist/harnesses/kiro/KiroSessionLocator.js +95 -0
  258. package/dist/harnesses/kiro/KiroSessionLocator.js.map +1 -0
  259. package/dist/harnesses/kiro/KiroSessionParser.d.ts +81 -0
  260. package/dist/harnesses/kiro/KiroSessionParser.d.ts.map +1 -0
  261. package/dist/harnesses/kiro/KiroSessionParser.js +251 -0
  262. package/dist/harnesses/kiro/KiroSessionParser.js.map +1 -0
  263. package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.d.ts +2 -4
  264. package/dist/harnesses/opencode/OpenCodeAdapter.d.ts.map +1 -0
  265. package/dist/{providers → harnesses}/opencode/OpenCodeAdapter.js +4 -7
  266. package/dist/harnesses/opencode/OpenCodeAdapter.js.map +1 -0
  267. package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts.map +1 -1
  268. package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.js +5 -13
  269. package/dist/harnesses/opencode/OpenCodeAgentMapper.js.map +1 -0
  270. package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts.map +1 -1
  271. package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.js +2 -2
  272. package/dist/harnesses/opencode/OpenCodeSessionLocator.js.map +1 -0
  273. package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.d.ts +2 -4
  274. package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts.map +1 -0
  275. package/dist/{providers → harnesses}/opencode/OpenCodeSessionParser.js +2 -1
  276. package/dist/harnesses/opencode/OpenCodeSessionParser.js.map +1 -0
  277. package/dist/{providers → harnesses}/pi/PiAdapter.d.ts +5 -4
  278. package/dist/harnesses/pi/PiAdapter.d.ts.map +1 -0
  279. package/dist/{providers → harnesses}/pi/PiAdapter.js +16 -12
  280. package/dist/harnesses/pi/PiAdapter.js.map +1 -0
  281. package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts.map +1 -1
  282. package/dist/{providers → harnesses}/pi/PiAgentMapper.js +4 -11
  283. package/dist/harnesses/pi/PiAgentMapper.js.map +1 -0
  284. package/dist/harnesses/pi/PiSessionLocator.d.ts +61 -0
  285. package/dist/harnesses/pi/PiSessionLocator.d.ts.map +1 -0
  286. package/dist/harnesses/pi/PiSessionLocator.js +212 -0
  287. package/dist/harnesses/pi/PiSessionLocator.js.map +1 -0
  288. package/dist/harnesses/pi/PiSessionParser.d.ts +88 -0
  289. package/dist/harnesses/pi/PiSessionParser.d.ts.map +1 -0
  290. package/dist/harnesses/pi/PiSessionParser.js +318 -0
  291. package/dist/harnesses/pi/PiSessionParser.js.map +1 -0
  292. package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts.map +1 -1
  293. package/dist/{providers → harnesses}/pi/PiSessionTracker.js +2 -2
  294. package/dist/harnesses/pi/PiSessionTracker.js.map +1 -0
  295. package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts.map +1 -1
  296. package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js.map +1 -1
  297. package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts.map +1 -1
  298. package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js.map +1 -1
  299. package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts.map +1 -1
  300. package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js.map +1 -1
  301. package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts.map +1 -1
  302. package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js.map +1 -1
  303. package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts.map +1 -1
  304. package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js.map +1 -1
  305. package/dist/harnesses/shared.d.ts +41 -0
  306. package/dist/harnesses/shared.d.ts.map +1 -0
  307. package/dist/harnesses/shared.js +71 -0
  308. package/dist/harnesses/shared.js.map +1 -0
  309. package/dist/index.d.ts +26 -25
  310. package/dist/index.d.ts.map +1 -1
  311. package/dist/index.js +18 -17
  312. package/dist/index.js.map +1 -1
  313. package/dist/utils/IncrementalJsonlSummary.d.ts +100 -0
  314. package/dist/utils/IncrementalJsonlSummary.d.ts.map +1 -0
  315. package/dist/utils/IncrementalJsonlSummary.js +209 -0
  316. package/dist/utils/IncrementalJsonlSummary.js.map +1 -0
  317. package/dist/utils/agents.d.ts +3 -2
  318. package/dist/utils/agents.d.ts.map +1 -1
  319. package/dist/utils/agents.js +50 -15
  320. package/dist/utils/agents.js.map +1 -1
  321. package/dist/utils/index.d.ts +2 -1
  322. package/dist/utils/index.d.ts.map +1 -1
  323. package/dist/utils/index.js +1 -1
  324. package/dist/utils/index.js.map +1 -1
  325. package/dist/utils/jsonlTail.d.ts +73 -0
  326. package/dist/utils/jsonlTail.d.ts.map +1 -0
  327. package/dist/utils/jsonlTail.js +238 -0
  328. package/dist/utils/jsonlTail.js.map +1 -0
  329. package/dist/utils/matching.d.ts +2 -0
  330. package/dist/utils/matching.d.ts.map +1 -1
  331. package/dist/utils/matching.js +3 -2
  332. package/dist/utils/matching.js.map +1 -1
  333. package/dist/utils/matchingConstants.d.ts +15 -0
  334. package/dist/utils/matchingConstants.d.ts.map +1 -0
  335. package/dist/utils/matchingConstants.js +14 -0
  336. package/dist/utils/matchingConstants.js.map +1 -0
  337. package/dist/utils/process.d.ts +38 -2
  338. package/dist/utils/process.d.ts.map +1 -1
  339. package/dist/utils/process.js +131 -43
  340. package/dist/utils/process.js.map +1 -1
  341. package/package.json +2 -1
  342. package/scripts/benchmark-cold-start.mjs +350 -0
  343. package/src/AgentManager.ts +26 -5
  344. package/src/__tests__/AgentManager.test.ts +141 -3
  345. package/src/__tests__/adapters/IncrementalSessionRefresh.test.ts +437 -0
  346. package/src/__tests__/adapters/adapterProcessImports.test.ts +58 -0
  347. package/src/__tests__/adapters/adapterSnapshotCandidates.test.ts +243 -0
  348. package/src/__tests__/capacity/openai.test.ts +5 -15
  349. package/src/__tests__/harnesses/BoundedSummarySkip.test.ts +496 -0
  350. package/src/__tests__/harnesses/SessionSummaryEquivalence.test.ts +726 -0
  351. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.ts +133 -0
  352. package/src/__tests__/{adapters → harnesses/antigravity}/AntigravityCliAdapter.test.ts +97 -25
  353. package/src/__tests__/harnesses/builtinAdapters.test.ts +33 -0
  354. package/src/__tests__/{providers → harnesses}/claude/ClaudeAgentMapper.test.ts +5 -5
  355. package/src/__tests__/{adapters → harnesses/claude}/ClaudeCodeAdapter.test.ts +54 -24
  356. package/src/__tests__/{providers → harnesses}/claude/ClaudeSessionLocator.test.ts +1 -12
  357. package/src/__tests__/{utils → harnesses/claude}/ClaudeSessionParser.test.ts +2 -2
  358. package/src/__tests__/{print → harnesses/claude/durable}/ClaudeCliProbe.test.ts +1 -1
  359. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgent.integration.test.ts +1 -1
  360. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintAgentService.test.ts +4 -4
  361. package/src/__tests__/{print → harnesses/claude/durable}/ClaudePrintRunner.test.ts +2 -2
  362. package/src/__tests__/{adapters → harnesses/codex}/CodexAdapter.test.ts +277 -12
  363. package/src/__tests__/harnesses/codex/CodexSessionLocator.test.ts +419 -0
  364. package/src/__tests__/{providers → harnesses}/codex/CodexSessionMapping.test.ts +1 -1
  365. package/src/__tests__/{providers → harnesses}/codex/CodexSessionParser.test.ts +1 -1
  366. package/src/__tests__/{durable → harnesses/codex/durable}/CodexCliProbe.test.ts +4 -4
  367. package/src/__tests__/{durable → harnesses/codex/durable}/CodexDurableAgentRepository.test.ts +1 -1
  368. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgent.integration.test.ts +1 -1
  369. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintAgentService.test.ts +8 -18
  370. package/src/__tests__/{durable → harnesses/codex/durable}/CodexPrintRunner.test.ts +3 -9
  371. package/src/__tests__/{providers → harnesses}/copilot/CopilotAdapter.test.ts +1 -1
  372. package/src/__tests__/harnesses/copilot/CopilotRefreshIO.test.ts +270 -0
  373. package/src/__tests__/{providers → harnesses}/gemini/GeminiCliAdapter.test.ts +27 -23
  374. package/src/__tests__/harnesses/gemini/GeminiSessionJsonl.test.ts +402 -0
  375. package/src/__tests__/harnesses/gemini/GeminiSessionLocator.test.ts +396 -0
  376. package/src/__tests__/{providers → harnesses}/grok/GrokAgentMapper.test.ts +2 -2
  377. package/src/__tests__/{providers → harnesses}/grok/GrokCliAdapter.test.ts +1 -1
  378. package/src/__tests__/harnesses/grok/GrokIncrementalRefresh.test.ts +170 -0
  379. package/src/__tests__/{providers → harnesses}/grok/GrokSessionLocator.test.ts +1 -1
  380. package/src/__tests__/harnesses/grok/GrokSessionParser.test.ts +230 -0
  381. package/src/__tests__/{adapters → harnesses/kiro}/KiroAdapter.test.ts +127 -109
  382. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAdapter.test.ts +1 -1
  383. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeAgentMapper.test.ts +1 -1
  384. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionLocator.test.ts +2 -2
  385. package/src/__tests__/{providers → harnesses}/opencode/OpenCodeSessionParser.test.ts +1 -1
  386. package/src/__tests__/{providers → harnesses}/pi/PiAdapter.test.ts +1 -1
  387. package/src/__tests__/harnesses/pi/PiDiscoveryIO.test.ts +337 -0
  388. package/src/__tests__/{providers → harnesses}/pi/PiSessionParser.test.ts +91 -1
  389. package/src/__tests__/{providers → harnesses}/pi/PiSessionTracker.test.ts +1 -1
  390. package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintProtocol.test.ts +1 -1
  391. package/src/__tests__/{providers → harnesses}/pi/durable/PiStreamParser.test.ts +1 -1
  392. package/src/__tests__/readiness/AgentReadiness.test.ts +16 -0
  393. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +30 -0
  394. package/src/__tests__/utils/IncrementalJsonlSummary.test.ts +414 -0
  395. package/src/__tests__/utils/agents.test.ts +76 -2
  396. package/src/__tests__/utils/conversationTail.bench.test.ts +193 -0
  397. package/src/__tests__/utils/conversationTailParity.test.ts +365 -0
  398. package/src/__tests__/utils/jsonlTail.test.ts +317 -0
  399. package/src/__tests__/utils/matchingConstants.test.ts +40 -0
  400. package/src/__tests__/utils/process.test.ts +254 -0
  401. package/src/adapters/AgentAdapter.ts +37 -14
  402. package/src/capacity/openai.ts +0 -6
  403. package/src/harnesses/antigravity/AntigravityAgentMapper.ts +34 -0
  404. package/src/harnesses/antigravity/AntigravityCliAdapter.ts +126 -0
  405. package/src/harnesses/antigravity/AntigravitySessionLocator.ts +75 -0
  406. package/src/harnesses/antigravity/AntigravitySessionParser.ts +252 -0
  407. package/src/{providers → harnesses}/claude/ClaudeAgentMapper.ts +2 -10
  408. package/src/{providers → harnesses}/claude/ClaudeCodeAdapter.ts +22 -20
  409. package/src/{providers → harnesses}/claude/ClaudeSessionLocator.ts +3 -3
  410. package/src/{providers → harnesses}/claude/ClaudeSessionParser.ts +189 -97
  411. package/src/{providers → harnesses}/codex/CodexAdapter.ts +153 -29
  412. package/src/{providers → harnesses}/codex/CodexAgentMapper.ts +2 -11
  413. package/src/harnesses/codex/CodexSessionLocator.ts +509 -0
  414. package/src/{providers → harnesses}/codex/CodexSessionMapping.ts +3 -3
  415. package/src/{providers → harnesses}/codex/CodexSessionParser.ts +169 -92
  416. package/src/{providers → harnesses}/copilot/CopilotAdapter.ts +22 -22
  417. package/src/{providers → harnesses}/copilot/CopilotAgentMapper.ts +2 -11
  418. package/src/harnesses/copilot/CopilotSessionLocator.ts +161 -0
  419. package/src/harnesses/copilot/CopilotSessionParser.ts +380 -0
  420. package/src/{providers → harnesses}/gemini/GeminiAgentMapper.ts +2 -11
  421. package/src/{providers → harnesses}/gemini/GeminiCliAdapter.ts +7 -9
  422. package/src/harnesses/gemini/GeminiSessionLocator.ts +394 -0
  423. package/src/{providers → harnesses}/gemini/GeminiSessionParser.ts +155 -31
  424. package/src/harnesses/gemini/fileSignature.ts +10 -0
  425. package/src/{providers → harnesses}/grok/GrokAgentMapper.ts +2 -11
  426. package/src/{providers → harnesses}/grok/GrokCliAdapter.ts +16 -15
  427. package/src/{providers → harnesses}/grok/GrokSessionLocator.ts +2 -2
  428. package/src/harnesses/grok/GrokSessionParser.ts +251 -0
  429. package/src/harnesses/index.ts +28 -0
  430. package/src/harnesses/kiro/KiroAdapter.ts +143 -0
  431. package/src/harnesses/kiro/KiroAgentMapper.ts +34 -0
  432. package/src/harnesses/kiro/KiroSessionLocator.ts +143 -0
  433. package/src/harnesses/kiro/KiroSessionParser.ts +376 -0
  434. package/src/{providers → harnesses}/opencode/OpenCodeAdapter.ts +5 -11
  435. package/src/{providers → harnesses}/opencode/OpenCodeAgentMapper.ts +3 -13
  436. package/src/{providers → harnesses}/opencode/OpenCodeSessionLocator.ts +2 -2
  437. package/src/{providers → harnesses}/opencode/OpenCodeSessionParser.ts +4 -3
  438. package/src/{providers → harnesses}/pi/PiAdapter.ts +20 -18
  439. package/src/{providers → harnesses}/pi/PiAgentMapper.ts +2 -11
  440. package/src/harnesses/pi/PiSessionLocator.ts +288 -0
  441. package/src/harnesses/pi/PiSessionParser.ts +488 -0
  442. package/src/{providers → harnesses}/pi/PiSessionTracker.ts +2 -2
  443. package/src/harnesses/shared.ts +119 -0
  444. package/src/index.ts +26 -24
  445. package/src/utils/IncrementalJsonlSummary.ts +306 -0
  446. package/src/utils/agents.ts +60 -28
  447. package/src/utils/index.ts +2 -0
  448. package/src/utils/jsonlTail.ts +349 -0
  449. package/src/utils/matching.ts +3 -3
  450. package/src/utils/matchingConstants.ts +15 -0
  451. package/src/utils/process.ts +189 -45
  452. package/dist/__tests__/adapters/AntigravityCliAdapter.test.js.map +0 -1
  453. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +0 -1
  454. package/dist/__tests__/adapters/CodexAdapter.test.js.map +0 -1
  455. package/dist/__tests__/adapters/KiroAdapter.test.js.map +0 -1
  456. package/dist/__tests__/durable/CodexCliProbe.test.js.map +0 -1
  457. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +0 -1
  458. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +0 -1
  459. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +0 -1
  460. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +0 -1
  461. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +0 -1
  462. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +0 -1
  463. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +0 -1
  464. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +0 -1
  465. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +0 -1
  466. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +0 -194
  467. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +0 -1
  468. package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js.map +0 -1
  469. package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +0 -1
  470. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +0 -1
  471. package/dist/adapters/AntigravityCliAdapter.d.ts +0 -57
  472. package/dist/adapters/AntigravityCliAdapter.d.ts.map +0 -1
  473. package/dist/adapters/AntigravityCliAdapter.js +0 -273
  474. package/dist/adapters/AntigravityCliAdapter.js.map +0 -1
  475. package/dist/adapters/KiroAdapter.d.ts +0 -46
  476. package/dist/adapters/KiroAdapter.d.ts.map +0 -1
  477. package/dist/adapters/KiroAdapter.js +0 -344
  478. package/dist/adapters/KiroAdapter.js.map +0 -1
  479. package/dist/adapters/index.d.ts +0 -12
  480. package/dist/adapters/index.d.ts.map +0 -1
  481. package/dist/adapters/index.js +0 -12
  482. package/dist/adapters/index.js.map +0 -1
  483. package/dist/providers/claude/ClaudeAgentMapper.js.map +0 -1
  484. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +0 -1
  485. package/dist/providers/claude/ClaudeCodeAdapter.js.map +0 -1
  486. package/dist/providers/claude/ClaudeSessionLocator.js.map +0 -1
  487. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +0 -1
  488. package/dist/providers/claude/ClaudeSessionParser.js.map +0 -1
  489. package/dist/providers/codex/CodexAdapter.d.ts.map +0 -1
  490. package/dist/providers/codex/CodexAdapter.js.map +0 -1
  491. package/dist/providers/codex/CodexAgentMapper.js.map +0 -1
  492. package/dist/providers/codex/CodexSessionLocator.d.ts +0 -44
  493. package/dist/providers/codex/CodexSessionLocator.d.ts.map +0 -1
  494. package/dist/providers/codex/CodexSessionLocator.js +0 -207
  495. package/dist/providers/codex/CodexSessionLocator.js.map +0 -1
  496. package/dist/providers/codex/CodexSessionMapping.js.map +0 -1
  497. package/dist/providers/codex/CodexSessionParser.d.ts +0 -58
  498. package/dist/providers/codex/CodexSessionParser.d.ts.map +0 -1
  499. package/dist/providers/codex/CodexSessionParser.js.map +0 -1
  500. package/dist/providers/copilot/CopilotAdapter.d.ts.map +0 -1
  501. package/dist/providers/copilot/CopilotAdapter.js.map +0 -1
  502. package/dist/providers/copilot/CopilotAgentMapper.js.map +0 -1
  503. package/dist/providers/copilot/CopilotSessionLocator.d.ts +0 -20
  504. package/dist/providers/copilot/CopilotSessionLocator.d.ts.map +0 -1
  505. package/dist/providers/copilot/CopilotSessionLocator.js +0 -49
  506. package/dist/providers/copilot/CopilotSessionLocator.js.map +0 -1
  507. package/dist/providers/copilot/CopilotSessionParser.d.ts +0 -30
  508. package/dist/providers/copilot/CopilotSessionParser.d.ts.map +0 -1
  509. package/dist/providers/copilot/CopilotSessionParser.js +0 -181
  510. package/dist/providers/copilot/CopilotSessionParser.js.map +0 -1
  511. package/dist/providers/gemini/GeminiAgentMapper.js.map +0 -1
  512. package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +0 -1
  513. package/dist/providers/gemini/GeminiCliAdapter.js.map +0 -1
  514. package/dist/providers/gemini/GeminiSessionLocator.d.ts +0 -30
  515. package/dist/providers/gemini/GeminiSessionLocator.d.ts.map +0 -1
  516. package/dist/providers/gemini/GeminiSessionLocator.js +0 -142
  517. package/dist/providers/gemini/GeminiSessionLocator.js.map +0 -1
  518. package/dist/providers/gemini/GeminiSessionParser.d.ts.map +0 -1
  519. package/dist/providers/gemini/GeminiSessionParser.js +0 -166
  520. package/dist/providers/gemini/GeminiSessionParser.js.map +0 -1
  521. package/dist/providers/grok/GrokAgentMapper.js.map +0 -1
  522. package/dist/providers/grok/GrokCliAdapter.d.ts.map +0 -1
  523. package/dist/providers/grok/GrokCliAdapter.js.map +0 -1
  524. package/dist/providers/grok/GrokSessionLocator.js.map +0 -1
  525. package/dist/providers/grok/GrokSessionParser.d.ts +0 -54
  526. package/dist/providers/grok/GrokSessionParser.d.ts.map +0 -1
  527. package/dist/providers/grok/GrokSessionParser.js +0 -122
  528. package/dist/providers/grok/GrokSessionParser.js.map +0 -1
  529. package/dist/providers/opencode/OpenCodeAdapter.d.ts.map +0 -1
  530. package/dist/providers/opencode/OpenCodeAdapter.js.map +0 -1
  531. package/dist/providers/opencode/OpenCodeAgentMapper.js.map +0 -1
  532. package/dist/providers/opencode/OpenCodeSessionLocator.js.map +0 -1
  533. package/dist/providers/opencode/OpenCodeSessionParser.d.ts.map +0 -1
  534. package/dist/providers/opencode/OpenCodeSessionParser.js.map +0 -1
  535. package/dist/providers/pi/PiAdapter.d.ts.map +0 -1
  536. package/dist/providers/pi/PiAdapter.js.map +0 -1
  537. package/dist/providers/pi/PiAgentMapper.js.map +0 -1
  538. package/dist/providers/pi/PiSessionLocator.d.ts +0 -24
  539. package/dist/providers/pi/PiSessionLocator.d.ts.map +0 -1
  540. package/dist/providers/pi/PiSessionLocator.js +0 -86
  541. package/dist/providers/pi/PiSessionLocator.js.map +0 -1
  542. package/dist/providers/pi/PiSessionParser.d.ts +0 -36
  543. package/dist/providers/pi/PiSessionParser.d.ts.map +0 -1
  544. package/dist/providers/pi/PiSessionParser.js +0 -191
  545. package/dist/providers/pi/PiSessionParser.js.map +0 -1
  546. package/dist/providers/pi/PiSessionTracker.js.map +0 -1
  547. package/src/__tests__/fixtures/fake-claude.cjs +0 -31
  548. package/src/__tests__/fixtures/fake-codex.cjs +0 -56
  549. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +0 -182
  550. package/src/adapters/AntigravityCliAdapter.ts +0 -356
  551. package/src/adapters/KiroAdapter.ts +0 -456
  552. package/src/adapters/index.ts +0 -17
  553. package/src/providers/codex/CodexSessionLocator.ts +0 -279
  554. package/src/providers/copilot/CopilotSessionLocator.ts +0 -63
  555. package/src/providers/copilot/CopilotSessionParser.ts +0 -289
  556. package/src/providers/gemini/GeminiSessionLocator.ts +0 -183
  557. package/src/providers/grok/GrokSessionParser.ts +0 -166
  558. package/src/providers/pi/PiSessionLocator.ts +0 -110
  559. package/src/providers/pi/PiSessionParser.ts +0 -284
  560. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.js +0 -0
  561. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js +0 -0
  562. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.js +0 -0
  563. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.js +0 -0
  564. /package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts +0 -0
  565. /package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts +0 -0
  566. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts +0 -0
  567. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js +0 -0
  568. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts +0 -0
  569. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js +0 -0
  570. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts +0 -0
  571. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js +0 -0
  572. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts +0 -0
  573. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js +0 -0
  574. /package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts +0 -0
  575. /package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts +0 -0
  576. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts +0 -0
  577. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js +0 -0
  578. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts +0 -0
  579. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js +0 -0
  580. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts +0 -0
  581. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js +0 -0
  582. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts +0 -0
  583. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js +0 -0
  584. /package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts +0 -0
  585. /package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts +0 -0
  586. /package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts +0 -0
  587. /package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts +0 -0
  588. /package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts +0 -0
  589. /package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts +0 -0
  590. /package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts +0 -0
  591. /package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts +0 -0
  592. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts +0 -0
  593. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js +0 -0
  594. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts +0 -0
  595. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js +0 -0
  596. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts +0 -0
  597. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js +0 -0
  598. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts +0 -0
  599. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js +0 -0
  600. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts +0 -0
  601. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js +0 -0
  602. /package/src/__tests__/{providers → harnesses}/pi/durable/PiCliProbe.test.ts +0 -0
  603. /package/src/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.ts +0 -0
  604. /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintAgentService.test.ts +0 -0
  605. /package/src/__tests__/{providers → harnesses}/pi/durable/PiPrintRunner.test.ts +0 -0
  606. /package/src/{providers → harnesses}/claude/durable/ClaudeCliProbe.ts +0 -0
  607. /package/src/{providers → harnesses}/claude/durable/ClaudePrintAgentService.ts +0 -0
  608. /package/src/{providers → harnesses}/claude/durable/ClaudePrintRunner.ts +0 -0
  609. /package/src/{providers → harnesses}/claude/durable/ClaudeStreamParser.ts +0 -0
  610. /package/src/{providers → harnesses}/codex/durable/CodexCliProbe.ts +0 -0
  611. /package/src/{providers → harnesses}/codex/durable/CodexPrintAgentService.ts +0 -0
  612. /package/src/{providers → harnesses}/codex/durable/CodexPrintRunner.ts +0 -0
  613. /package/src/{providers → harnesses}/codex/durable/CodexStreamParser.ts +0 -0
  614. /package/src/{providers → harnesses}/pi/durable/PiCliProbe.ts +0 -0
  615. /package/src/{providers → harnesses}/pi/durable/PiPrintAgentService.ts +0 -0
  616. /package/src/{providers → harnesses}/pi/durable/PiPrintProtocol.ts +0 -0
  617. /package/src/{providers → harnesses}/pi/durable/PiPrintRunner.ts +0 -0
  618. /package/src/{providers → harnesses}/pi/durable/PiStreamParser.ts +0 -0
@@ -1,12 +1,127 @@
1
1
  import * as fs from "fs";
2
2
  import * as path from "path";
3
- import { captureProcessSnapshot, executableBasename, filterByProcessNames } from "../../utils/process.js";
4
- import { safeReadFile } from "../../utils/session.js";
3
+ import { executablePath } from "../../utils/process.js";
5
4
  import { AgentRegistry } from "../../utils/AgentRegistry.js";
6
5
  import { CodexAgentMapper } from "./CodexAgentMapper.js";
7
6
  import { CodexSessionLocator } from "./CodexSessionLocator.js";
8
7
  import { CodexSessionMapping } from "./CodexSessionMapping.js";
9
8
  import { CodexSessionParser } from "./CodexSessionParser.js";
9
+ import { findHarnessProcesses, homeDir, matchesExecutable } from "../shared.js";
10
+ /**
11
+ * Codex subcommands that never own a local agent session: long-running helpers
12
+ * (app-server, sandbox, MCP/exec servers) and short-lived management commands.
13
+ * Interactive `codex`, `resume`, `fork`, `exec` and `review` remain detected.
14
+ *
15
+ * Classification of `review`, `cloud` and `agents` checked against Codex CLI
16
+ * 0.157.1 (source tag rust-v0.157.1, codex-rs/cli/src/main.rs):
17
+ * - `review` is detected: it runs as `codex exec review`, starting a
18
+ * non-ephemeral thread in-process (source `exec`, originator `codex_exec`), so
19
+ * it writes a `session_meta` rollout under ~/.codex/sessions like `codex exec`.
20
+ * - `cloud` is excluded: it browses and applies Codex Cloud tasks over HTTP and
21
+ * never starts a local thread or rollout.
22
+ * - `agents` is excluded: it opens a dashboard over every session on the shared
23
+ * app-server daemon without starting a thread of its own; the daemon, not
24
+ * this process, owns and writes those sessions' rollouts.
25
+ */ const CODEX_HELPER_SUBCOMMANDS = new Set([
26
+ "agents",
27
+ "app",
28
+ "app-server",
29
+ "apply",
30
+ "a",
31
+ "archive",
32
+ "cloud",
33
+ "cloud-tasks",
34
+ "completion",
35
+ "debug",
36
+ "delete",
37
+ "doctor",
38
+ "exec-server",
39
+ "features",
40
+ "help",
41
+ "login",
42
+ "logout",
43
+ "mcp",
44
+ "mcp-server",
45
+ "migrate-rollouts",
46
+ "plugin",
47
+ "queue",
48
+ "remote-control",
49
+ "responses-api-proxy",
50
+ "sandbox",
51
+ "stdio-to-uds",
52
+ "unarchive",
53
+ "update"
54
+ ]);
55
+ /**
56
+ * Known root Codex subcommand names and aliases, including the hidden ones in
57
+ * Codex CLI 0.157.1. A variadic flag's values stop at these, as clap stops there.
58
+ */ const CODEX_SUBCOMMANDS = new Set([
59
+ ...CODEX_HELPER_SUBCOMMANDS,
60
+ "e",
61
+ "exec",
62
+ "execpolicy",
63
+ "fork",
64
+ "resume",
65
+ "review",
66
+ "tcp-tunnel"
67
+ ]);
68
+ /** Global Codex flags that consume the following argument as their value. */ const CODEX_VALUE_FLAGS = new Set([
69
+ "-c",
70
+ "--config",
71
+ "-m",
72
+ "--model",
73
+ "-p",
74
+ "--profile",
75
+ "-s",
76
+ "--sandbox",
77
+ "-a",
78
+ "--ask-for-approval",
79
+ "-C",
80
+ "--cd",
81
+ "--add-dir",
82
+ "--enable",
83
+ "--disable",
84
+ "--local-provider",
85
+ "--remote",
86
+ "--remote-auth-token-env"
87
+ ]);
88
+ /**
89
+ * Global Codex flags that take one or more values (clap `num_args = 1..`).
90
+ * `-i, --image <FILE>...` is the only one in Codex CLI 0.157.1.
91
+ */ const CODEX_VARIADIC_VALUE_FLAGS = new Set([
92
+ "-i",
93
+ "--image"
94
+ ]);
95
+ const CODEX_APP_SERVER_DAEMON_DIR = "app-server-daemon";
96
+ function isCodexHelperCommand(command) {
97
+ const trimmed = command.trim();
98
+ // Resolve argv[0] first so an install path containing spaces is not read as arguments.
99
+ const executable = executablePath(trimmed);
100
+ const args = trimmed.slice(executable.length).trim().split(/\s+/).filter(Boolean);
101
+ if (executable.replace(/\\/g, "/").split("/").includes(CODEX_APP_SERVER_DAEMON_DIR)) {
102
+ return true;
103
+ }
104
+ const subcommand = firstPositionalArgument(args);
105
+ return subcommand !== undefined && CODEX_HELPER_SUBCOMMANDS.has(subcommand);
106
+ }
107
+ function firstPositionalArgument(args) {
108
+ for(let index = 0; index < args.length; index++){
109
+ const arg = args[index];
110
+ if (arg === "--") return undefined;
111
+ if (!arg.startsWith("-")) return arg;
112
+ if (arg.includes("=")) continue;
113
+ if (CODEX_VALUE_FLAGS.has(arg)) {
114
+ index++;
115
+ } else if (CODEX_VARIADIC_VALUE_FLAGS.has(arg)) {
116
+ // Like clap, take values until the next flag or subcommand name.
117
+ while(index + 1 < args.length && isVariadicFlagValue(args[index + 1]))index++;
118
+ }
119
+ }
120
+ return undefined;
121
+ }
122
+ function isVariadicFlagValue(arg) {
123
+ return !arg.startsWith("-") && !CODEX_SUBCOMMANDS.has(arg);
124
+ }
10
125
  export class CodexAdapter {
11
126
  type = "codex";
12
127
  processNames = [
@@ -17,26 +132,33 @@ export class CodexAdapter {
17
132
  mapper;
18
133
  codexSessionsDir;
19
134
  sessionMappingPath;
135
+ locator;
20
136
  constructor(registry = AgentRegistry.default()){
21
- const homeDir = process.env.HOME || process.env.USERPROFILE || "";
22
137
  this.registry = registry;
23
138
  this.parser = new CodexSessionParser();
24
139
  this.mapper = new CodexAgentMapper(this.parser);
25
- this.codexSessionsDir = path.join(homeDir, ".codex", "sessions");
26
- this.sessionMappingPath = path.join(homeDir, ".codex", "ai-devkit", "sessions.json");
140
+ this.codexSessionsDir = path.join(homeDir(), ".codex", "sessions");
141
+ this.sessionMappingPath = path.join(homeDir(), ".codex", "ai-devkit", "sessions.json");
27
142
  }
28
143
  canHandle(processInfo) {
29
- const base = executableBasename(processInfo.command);
30
- return base === "codex" || base === "codex.exe";
144
+ return matchesExecutable(processInfo.command, "codex") && !isCodexHelperCommand(processInfo.command);
31
145
  }
32
146
  async detectAgents(context) {
147
+ try {
148
+ return await this.detectRunningAgents(context);
149
+ } finally{
150
+ // Drop cached summaries for sessions that were not part of this refresh
151
+ this.parser.pruneSessionCache();
152
+ }
153
+ }
154
+ async detectRunningAgents(context) {
33
155
  const processes = await this.getCodexProcesses(context);
34
156
  if (processes.length === 0) return [];
35
157
  const mappingResult = this.mapSessionMappingMatches(processes);
36
158
  const cacheResult = this.mapRegistryCache(mappingResult.fallback);
37
159
  const locatorResult = this.createLocator().matchRunningProcesses(cacheResult.fallback);
38
160
  const directResult = this.mapDirectMatches(locatorResult.direct);
39
- const legacyResult = this.mapLegacyMatches(locatorResult.legacyMatches, locatorResult.contentCache);
161
+ const legacyResult = this.mapLegacyMatches(locatorResult.legacyMatches);
40
162
  const unmatchedProcesses = this.findUnmatchedProcesses(locatorResult.fallback, [
41
163
  ...directResult.agents,
42
164
  ...legacyResult.agents
@@ -72,14 +194,13 @@ export class CodexAdapter {
72
194
  ] : [];
73
195
  }
74
196
  async getCodexProcesses(context) {
75
- const snapshot = context?.processes ?? await captureProcessSnapshot(this.processNames);
76
- const relevant = filterByProcessNames(snapshot, this.processNames);
77
- return relevant.filter((processInfo)=>this.canHandle(processInfo));
197
+ return (await findHarnessProcesses(this, context)).processes;
78
198
  }
79
- createLocator() {
80
- return new CodexSessionLocator({
199
+ /** Reused across refreshes so the locator's session_meta and negative caches persist. */ createLocator() {
200
+ this.locator ??= new CodexSessionLocator({
81
201
  sessionsDir: this.codexSessionsDir
82
202
  }, this.parser);
203
+ return this.locator;
83
204
  }
84
205
  createSessionMapping() {
85
206
  return new CodexSessionMapping({
@@ -91,7 +212,7 @@ export class CodexAdapter {
91
212
  const { matches, fallback } = this.createSessionMapping().match(processes);
92
213
  const agents = [];
93
214
  for (const match of matches){
94
- const session = this.parser.readSession(match.filePath);
215
+ const session = this.parser.readSessionIncremental(match.filePath);
95
216
  if (session) {
96
217
  agents.push(this.mapper.mapSessionToAgent(session, match.process, match.filePath));
97
218
  } else {
@@ -116,8 +237,7 @@ export class CodexAdapter {
116
237
  fallback.push(processInfo);
117
238
  continue;
118
239
  }
119
- const content = safeReadFile(entry.sessionFilePath);
120
- const session = this.parser.readSession(entry.sessionFilePath, content);
240
+ const session = this.parser.readSessionIncremental(entry.sessionFilePath);
121
241
  if (!session) {
122
242
  fallback.push(processInfo);
123
243
  continue;
@@ -133,7 +253,7 @@ export class CodexAdapter {
133
253
  const agents = [];
134
254
  const fallback = [];
135
255
  for (const match of matches){
136
- const session = this.parser.readSession(match.sessionFile.filePath);
256
+ const session = this.parser.readSessionIncremental(match.sessionFile.filePath);
137
257
  if (session) {
138
258
  agents.push(this.mapper.mapSessionToAgent(session, match.process, match.sessionFile.filePath));
139
259
  } else {
@@ -145,11 +265,11 @@ export class CodexAdapter {
145
265
  fallback
146
266
  };
147
267
  }
148
- mapLegacyMatches(matches, contentCache) {
268
+ mapLegacyMatches(matches) {
149
269
  const agents = [];
150
270
  const fallback = [];
151
271
  for (const match of matches){
152
- const session = this.parser.readSession(match.session.filePath, contentCache.get(match.session.filePath));
272
+ const session = this.parser.readSessionIncremental(match.session.filePath);
153
273
  if (session) {
154
274
  agents.push(this.mapper.mapSessionToAgent(session, match.process, match.session.filePath));
155
275
  } else {
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/codex/CodexAdapter.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type {\n AgentAdapter,\n AgentInfo,\n ProcessInfo,\n ConversationMessage,\n ConversationOptions,\n SessionSummary,\n ListSessionsOptions,\n AgentDetectionContext,\n} from \"../../adapters/AgentAdapter.js\";\nimport { executablePath } from \"../../utils/process.js\";\nimport { AgentRegistry } from \"../../utils/AgentRegistry.js\";\nimport { CodexAgentMapper } from \"./CodexAgentMapper.js\";\nimport { CodexSessionLocator, type CodexDirectMatch } from \"./CodexSessionLocator.js\";\nimport { CodexSessionMapping } from \"./CodexSessionMapping.js\";\nimport { CodexSessionParser } from \"./CodexSessionParser.js\";\nimport { findHarnessProcesses, homeDir, matchesExecutable } from \"../shared.js\";\n\n/**\n * Codex subcommands that never own a local agent session: long-running helpers\n * (app-server, sandbox, MCP/exec servers) and short-lived management commands.\n * Interactive `codex`, `resume`, `fork`, `exec` and `review` remain detected.\n *\n * Classification of `review`, `cloud` and `agents` checked against Codex CLI\n * 0.157.1 (source tag rust-v0.157.1, codex-rs/cli/src/main.rs):\n * - `review` is detected: it runs as `codex exec review`, starting a\n * non-ephemeral thread in-process (source `exec`, originator `codex_exec`), so\n * it writes a `session_meta` rollout under ~/.codex/sessions like `codex exec`.\n * - `cloud` is excluded: it browses and applies Codex Cloud tasks over HTTP and\n * never starts a local thread or rollout.\n * - `agents` is excluded: it opens a dashboard over every session on the shared\n * app-server daemon without starting a thread of its own; the daemon, not\n * this process, owns and writes those sessions' rollouts.\n */\nconst CODEX_HELPER_SUBCOMMANDS = new Set([\n \"agents\",\n \"app\",\n \"app-server\",\n \"apply\",\n \"a\",\n \"archive\",\n \"cloud\",\n \"cloud-tasks\",\n \"completion\",\n \"debug\",\n \"delete\",\n \"doctor\",\n \"exec-server\",\n \"features\",\n \"help\",\n \"login\",\n \"logout\",\n \"mcp\",\n \"mcp-server\",\n \"migrate-rollouts\",\n \"plugin\",\n \"queue\",\n \"remote-control\",\n \"responses-api-proxy\",\n \"sandbox\",\n \"stdio-to-uds\",\n \"unarchive\",\n \"update\",\n]);\n\n/**\n * Known root Codex subcommand names and aliases, including the hidden ones in\n * Codex CLI 0.157.1. A variadic flag's values stop at these, as clap stops there.\n */\nconst CODEX_SUBCOMMANDS = new Set([\n ...CODEX_HELPER_SUBCOMMANDS,\n \"e\",\n \"exec\",\n \"execpolicy\",\n \"fork\",\n \"resume\",\n \"review\",\n \"tcp-tunnel\",\n]);\n\n/** Global Codex flags that consume the following argument as their value. */\nconst CODEX_VALUE_FLAGS = new Set([\n \"-c\",\n \"--config\",\n \"-m\",\n \"--model\",\n \"-p\",\n \"--profile\",\n \"-s\",\n \"--sandbox\",\n \"-a\",\n \"--ask-for-approval\",\n \"-C\",\n \"--cd\",\n \"--add-dir\",\n \"--enable\",\n \"--disable\",\n \"--local-provider\",\n \"--remote\",\n \"--remote-auth-token-env\",\n]);\n\n/**\n * Global Codex flags that take one or more values (clap `num_args = 1..`).\n * `-i, --image <FILE>...` is the only one in Codex CLI 0.157.1.\n */\nconst CODEX_VARIADIC_VALUE_FLAGS = new Set([\"-i\", \"--image\"]);\n\nconst CODEX_APP_SERVER_DAEMON_DIR = \"app-server-daemon\";\n\nfunction isCodexHelperCommand(command: string): boolean {\n const trimmed = command.trim();\n // Resolve argv[0] first so an install path containing spaces is not read as arguments.\n const executable = executablePath(trimmed);\n const args = trimmed.slice(executable.length).trim().split(/\\s+/).filter(Boolean);\n if (executable.replace(/\\\\/g, \"/\").split(\"/\").includes(CODEX_APP_SERVER_DAEMON_DIR)) {\n return true;\n }\n\n const subcommand = firstPositionalArgument(args);\n return subcommand !== undefined && CODEX_HELPER_SUBCOMMANDS.has(subcommand);\n}\n\nfunction firstPositionalArgument(args: string[]): string | undefined {\n for (let index = 0; index < args.length; index++) {\n const arg = args[index];\n if (arg === \"--\") return undefined;\n if (!arg.startsWith(\"-\")) return arg;\n if (arg.includes(\"=\")) continue;\n if (CODEX_VALUE_FLAGS.has(arg)) {\n index++;\n } else if (CODEX_VARIADIC_VALUE_FLAGS.has(arg)) {\n // Like clap, take values until the next flag or subcommand name.\n while (index + 1 < args.length && isVariadicFlagValue(args[index + 1])) index++;\n }\n }\n return undefined;\n}\n\nfunction isVariadicFlagValue(arg: string): boolean {\n return !arg.startsWith(\"-\") && !CODEX_SUBCOMMANDS.has(arg);\n}\n\ninterface MappedAgentResult {\n agents: AgentInfo[];\n fallback: ProcessInfo[];\n}\n\nexport class CodexAdapter implements AgentAdapter {\n readonly type = \"codex\" as const;\n readonly processNames = [\"codex\"] as const;\n\n private readonly registry: AgentRegistry;\n private readonly parser: CodexSessionParser;\n private readonly mapper: CodexAgentMapper;\n private readonly codexSessionsDir: string;\n private readonly sessionMappingPath: string;\n private locator?: CodexSessionLocator;\n\n constructor(registry: AgentRegistry = AgentRegistry.default()) {\n this.registry = registry;\n this.parser = new CodexSessionParser();\n this.mapper = new CodexAgentMapper(this.parser);\n this.codexSessionsDir = path.join(homeDir(), \".codex\", \"sessions\");\n this.sessionMappingPath = path.join(homeDir(), \".codex\", \"ai-devkit\", \"sessions.json\");\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return (\n matchesExecutable(processInfo.command, \"codex\") && !isCodexHelperCommand(processInfo.command)\n );\n }\n\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n try {\n return await this.detectRunningAgents(context);\n } finally {\n // Drop cached summaries for sessions that were not part of this refresh\n this.parser.pruneSessionCache();\n }\n }\n\n private async detectRunningAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const processes = await this.getCodexProcesses(context);\n if (processes.length === 0) return [];\n\n const mappingResult = this.mapSessionMappingMatches(processes);\n const cacheResult = this.mapRegistryCache(mappingResult.fallback);\n const locatorResult = this.createLocator().matchRunningProcesses(cacheResult.fallback);\n\n const directResult = this.mapDirectMatches(locatorResult.direct);\n const legacyResult = this.mapLegacyMatches(locatorResult.legacyMatches);\n const unmatchedProcesses = this.findUnmatchedProcesses(locatorResult.fallback, [\n ...directResult.agents,\n ...legacyResult.agents,\n ]);\n\n return [\n ...mappingResult.agents,\n ...cacheResult.agents,\n ...directResult.agents,\n ...legacyResult.agents,\n ...directResult.fallback.map((processInfo) => this.mapper.mapProcessOnlyAgent(processInfo)),\n ...unmatchedProcesses.map((processInfo) => this.mapper.mapProcessOnlyAgent(processInfo)),\n ];\n }\n\n getConversation(sessionFilePath: string, options?: ConversationOptions): ConversationMessage[] {\n return this.parser.getConversation(sessionFilePath, options);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n const summaries: SessionSummary[] = [];\n\n for (const filePath of this.createLocator().discoverHistoricalSessionFiles()) {\n const summary = this.parser.fileToSessionSummary(filePath);\n if (!summary) continue;\n if (opts?.cwd !== undefined && summary.cwd !== opts.cwd) continue;\n summaries.push(summary);\n }\n\n return summaries;\n }\n\n async findSessionsById(sessionId: string): Promise<SessionSummary[]> {\n const sessionFile = this.createLocator().findSessionFileById(sessionId);\n if (!sessionFile) return [];\n\n const summary = this.parser.fileToSessionSummary(sessionFile.filePath);\n return summary?.sessionId === sessionId ? [summary] : [];\n }\n\n private async getCodexProcesses(context?: AgentDetectionContext): Promise<ProcessInfo[]> {\n return (await findHarnessProcesses(this, context)).processes;\n }\n\n /** Reused across refreshes so the locator's session_meta and negative caches persist. */\n private createLocator(): CodexSessionLocator {\n this.locator ??= new CodexSessionLocator({ sessionsDir: this.codexSessionsDir }, this.parser);\n return this.locator;\n }\n\n private createSessionMapping(): CodexSessionMapping {\n return new CodexSessionMapping({\n mappingPath: this.sessionMappingPath,\n sessionsDir: this.codexSessionsDir,\n });\n }\n\n private mapSessionMappingMatches(processes: ProcessInfo[]): MappedAgentResult {\n const { matches, fallback } = this.createSessionMapping().match(processes);\n const agents: AgentInfo[] = [];\n\n for (const match of matches) {\n const session = this.parser.readSessionIncremental(match.filePath);\n if (session) {\n agents.push(this.mapper.mapSessionToAgent(session, match.process, match.filePath));\n } else {\n fallback.push(match.process);\n }\n }\n\n return { agents, fallback };\n }\n\n private mapRegistryCache(processes: ProcessInfo[]): MappedAgentResult {\n const agents: AgentInfo[] = [];\n const fallback: ProcessInfo[] = [];\n const byPid = new Map(this.registry.list().map((entry) => [entry.pid, entry]));\n\n for (const processInfo of processes) {\n const entry = byPid.get(processInfo.pid);\n if (\n !entry ||\n entry.type !== this.type ||\n !entry.sessionFilePath ||\n !fs.existsSync(entry.sessionFilePath)\n ) {\n fallback.push(processInfo);\n continue;\n }\n\n const session = this.parser.readSessionIncremental(entry.sessionFilePath);\n if (!session) {\n fallback.push(processInfo);\n continue;\n }\n\n agents.push(this.mapper.mapSessionToAgent(session, processInfo, entry.sessionFilePath));\n }\n\n return { agents, fallback };\n }\n\n private mapDirectMatches(matches: CodexDirectMatch[]): MappedAgentResult {\n const agents: AgentInfo[] = [];\n const fallback: ProcessInfo[] = [];\n\n for (const match of matches) {\n const session = this.parser.readSessionIncremental(match.sessionFile.filePath);\n if (session) {\n agents.push(\n this.mapper.mapSessionToAgent(session, match.process, match.sessionFile.filePath),\n );\n } else {\n fallback.push(match.process);\n }\n }\n\n return { agents, fallback };\n }\n\n private mapLegacyMatches(\n matches: Array<{ process: ProcessInfo; session: { filePath: string } }>,\n ): MappedAgentResult {\n const agents: AgentInfo[] = [];\n const fallback: ProcessInfo[] = [];\n\n for (const match of matches) {\n const session = this.parser.readSessionIncremental(match.session.filePath);\n if (session) {\n agents.push(this.mapper.mapSessionToAgent(session, match.process, match.session.filePath));\n } else {\n fallback.push(match.process);\n }\n }\n\n return { agents, fallback };\n }\n\n private findUnmatchedProcesses(processes: ProcessInfo[], agents: AgentInfo[]): ProcessInfo[] {\n const matchedPids = new Set(agents.map((agent) => agent.pid));\n return processes.filter((processInfo) => !matchedPids.has(processInfo.pid));\n }\n}\n"],"names":["fs","path","executablePath","AgentRegistry","CodexAgentMapper","CodexSessionLocator","CodexSessionMapping","CodexSessionParser","findHarnessProcesses","homeDir","matchesExecutable","CODEX_HELPER_SUBCOMMANDS","Set","CODEX_SUBCOMMANDS","CODEX_VALUE_FLAGS","CODEX_VARIADIC_VALUE_FLAGS","CODEX_APP_SERVER_DAEMON_DIR","isCodexHelperCommand","command","trimmed","trim","executable","args","slice","length","split","filter","Boolean","replace","includes","subcommand","firstPositionalArgument","undefined","has","index","arg","startsWith","isVariadicFlagValue","CodexAdapter","type","processNames","registry","parser","mapper","codexSessionsDir","sessionMappingPath","locator","default","join","canHandle","processInfo","detectAgents","context","detectRunningAgents","pruneSessionCache","processes","getCodexProcesses","mappingResult","mapSessionMappingMatches","cacheResult","mapRegistryCache","fallback","locatorResult","createLocator","matchRunningProcesses","directResult","mapDirectMatches","direct","legacyResult","mapLegacyMatches","legacyMatches","unmatchedProcesses","findUnmatchedProcesses","agents","map","mapProcessOnlyAgent","getConversation","sessionFilePath","options","listSessions","opts","summaries","filePath","discoverHistoricalSessionFiles","summary","fileToSessionSummary","cwd","push","findSessionsById","sessionId","sessionFile","findSessionFileById","sessionsDir","createSessionMapping","mappingPath","matches","match","session","readSessionIncremental","mapSessionToAgent","process","byPid","Map","list","entry","pid","get","existsSync","matchedPids","agent"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CodexAgentMapper.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/CodexAgentMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAG7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAEhF,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,kBAAkB;IAEvD,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS;IAc/F,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS;CAYzD"}
1
+ {"version":3,"file":"CodexAgentMapper.d.ts","sourceRoot":"","sources":["../../../src/harnesses/codex/CodexAgentMapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE7E,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGhF,qBAAa,gBAAgB;IACf,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,kBAAkB;IAEvD,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS;IAc/F,mBAAmB,CAAC,WAAW,EAAE,WAAW,GAAG,SAAS;CAGzD"}
@@ -1,5 +1,5 @@
1
- import { AgentStatus } from "../../adapters/AgentAdapter.js";
2
1
  import { generateAgentName } from "../../utils/matching.js";
2
+ import { processOnlyAgent } from "../shared.js";
3
3
  export class CodexAgentMapper {
4
4
  parser;
5
5
  constructor(parser){
@@ -19,16 +19,9 @@ export class CodexAgentMapper {
19
19
  };
20
20
  }
21
21
  mapProcessOnlyAgent(processInfo) {
22
- return {
23
- name: generateAgentName(processInfo.cwd || "", processInfo.pid),
24
- type: "codex",
25
- status: AgentStatus.RUNNING,
26
- summary: "Codex process running",
27
- pid: processInfo.pid,
28
- projectPath: processInfo.cwd || "",
29
- sessionId: `pid-${processInfo.pid}`,
30
- lastActive: new Date()
31
- };
22
+ return processOnlyAgent("codex", processInfo, {
23
+ summary: "Codex process running"
24
+ });
32
25
  }
33
26
  }
34
27
 
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/harnesses/codex/CodexAgentMapper.ts"],"sourcesContent":["import type { AgentInfo, ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { generateAgentName } from \"../../utils/matching.js\";\nimport type { CodexSessionParser, CodexSession } from \"./CodexSessionParser.js\";\nimport { processOnlyAgent } from \"../shared.js\";\n\nexport class CodexAgentMapper {\n constructor(private readonly parser: CodexSessionParser) {}\n\n mapSessionToAgent(session: CodexSession, processInfo: ProcessInfo, filePath: string): AgentInfo {\n return {\n name: generateAgentName(session.projectPath || processInfo.cwd || \"\", processInfo.pid),\n type: \"codex\",\n status: this.parser.determineStatus(session),\n summary: session.summary || \"Codex session active\",\n pid: processInfo.pid,\n projectPath: session.projectPath || processInfo.cwd || \"\",\n sessionId: session.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: filePath,\n };\n }\n\n mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {\n return processOnlyAgent(\"codex\", processInfo, { summary: \"Codex process running\" });\n }\n}\n"],"names":["generateAgentName","processOnlyAgent","CodexAgentMapper","parser","mapSessionToAgent","session","processInfo","filePath","name","projectPath","cwd","pid","type","status","determineStatus","summary","sessionId","lastActive","sessionFilePath","mapProcessOnlyAgent"],"mappings":"AACA,SAASA,iBAAiB,QAAQ,0BAA0B;AAE5D,SAASC,gBAAgB,QAAQ,eAAe;AAEhD,OAAO,MAAMC;;IACX,YAAY,AAAiBC,MAA0B,CAAE;aAA5BA,SAAAA;IAA6B;IAE1DC,kBAAkBC,OAAqB,EAAEC,WAAwB,EAAEC,QAAgB,EAAa;QAC9F,OAAO;YACLC,MAAMR,kBAAkBK,QAAQI,WAAW,IAAIH,YAAYI,GAAG,IAAI,IAAIJ,YAAYK,GAAG;YACrFC,MAAM;YACNC,QAAQ,IAAI,CAACV,MAAM,CAACW,eAAe,CAACT;YACpCU,SAASV,QAAQU,OAAO,IAAI;YAC5BJ,KAAKL,YAAYK,GAAG;YACpBF,aAAaJ,QAAQI,WAAW,IAAIH,YAAYI,GAAG,IAAI;YACvDM,WAAWX,QAAQW,SAAS;YAC5BC,YAAYZ,QAAQY,UAAU;YAC9BC,iBAAiBX;QACnB;IACF;IAEAY,oBAAoBb,WAAwB,EAAa;QACvD,OAAOL,iBAAiB,SAASK,aAAa;YAAES,SAAS;QAAwB;IACnF;AACF"}
@@ -0,0 +1,74 @@
1
+ import type { ProcessInfo } from "../../adapters/AgentAdapter.js";
2
+ import { type MatchResult } from "../../utils/matching.js";
3
+ import { type SessionFile } from "../../utils/session.js";
4
+ import { CodexSessionParser } from "./CodexSessionParser.js";
5
+ export interface CodexDirectMatch {
6
+ process: ProcessInfo;
7
+ sessionFile: SessionFile;
8
+ }
9
+ export interface CodexProcessSessionMatches {
10
+ direct: CodexDirectMatch[];
11
+ legacyMatches: MatchResult[];
12
+ fallback: ProcessInfo[];
13
+ }
14
+ export interface CodexDiscoveredSessions {
15
+ sessions: SessionFile[];
16
+ }
17
+ export interface CodexSessionLocatorOptions {
18
+ sessionsDir?: string;
19
+ /** Clock used for negative-cache re-checks. Defaults to `Date.now`. */
20
+ now?: () => number;
21
+ }
22
+ /** Upper bound of bytes read from a session file to find its `session_meta` line. */
23
+ export declare const SESSION_META_HEAD_MAX_BYTES: number;
24
+ /** Unmatched processes are re-scanned at least this often, even when their date dirs are unchanged. */
25
+ export declare const UNMATCHED_PROCESS_RECHECK_MS = 30000;
26
+ export declare class CodexSessionLocator {
27
+ private readonly parser;
28
+ private readonly sessionsDir;
29
+ private readonly now;
30
+ /** `session_meta` is written once at the head of an append-only file, so it is cached by path + inode. */
31
+ private readonly sessionMetaCache;
32
+ /** `(pid, startTime)` of processes that matched no session, keyed to their date-dir mtimes. */
33
+ private readonly unmatchedProcesses;
34
+ constructor(options?: CodexSessionLocatorOptions, parser?: CodexSessionParser);
35
+ matchRunningProcesses(processes: ProcessInfo[]): CodexProcessSessionMatches;
36
+ tryResumeMatching(processes: ProcessInfo[]): {
37
+ direct: CodexDirectMatch[];
38
+ fallback: ProcessInfo[];
39
+ };
40
+ discoverLiveSessions(processes: ProcessInfo[]): CodexDiscoveredSessions;
41
+ discoverSessionFilesInDateDirs(dateDirs: string[]): CodexDiscoveredSessions;
42
+ discoverHistoricalSessionFiles(): string[];
43
+ findSessionFileById(sessionId: string): SessionFile | null;
44
+ collectAllSessionFiles(): string[];
45
+ private extractResumeSessionId;
46
+ private getCandidateSessionFiles;
47
+ /**
48
+ * Read `session_meta` from at most {@link SESSION_META_HEAD_MAX_BYTES} of the
49
+ * file head. Cached per path while the inode is unchanged and the file has
50
+ * not shrunk below the parsed head, so growing session files are not re-read.
51
+ */
52
+ private readSessionMeta;
53
+ private isSessionMetaCacheValid;
54
+ private parseSessionMetaHead;
55
+ /**
56
+ * Best-effort extraction for a `session_meta` line longer than the head limit
57
+ * (e.g. large embedded instructions). `id`, `timestamp` and `cwd` precede the
58
+ * bulky payload fields, so they are read from the payload prefix.
59
+ */
60
+ private parseTruncatedSessionMeta;
61
+ private pruneSessionMetaCache;
62
+ private isKnownUnmatched;
63
+ private updateUnmatchedProcesses;
64
+ private toProcessKey;
65
+ /** Day-window directories with their mtimes; changes when session files are added or removed. */
66
+ private getDateDirSignature;
67
+ private getProcessDayKeys;
68
+ private getDateDirs;
69
+ private getDateDirsAroundDate;
70
+ private toSessionDayKey;
71
+ private tryParseUuidV7Date;
72
+ private collectSessionFilesInDateDirs;
73
+ }
74
+ //# sourceMappingURL=CodexSessionLocator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CodexSessionLocator.d.ts","sourceRoot":"","sources":["../../../src/harnesses/codex/CodexSessionLocator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAA4B,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACrF,OAAO,EAKL,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAwB,MAAM,yBAAyB,CAAC;AAGnF,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B,aAAa,EAAE,WAAW,EAAE,CAAC;IAC7B,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,0BAA0B;IACzC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACpB;AAGD,qFAAqF;AACrF,eAAO,MAAM,2BAA2B,QAAY,CAAC;AAErD,uGAAuG;AACvG,eAAO,MAAM,4BAA4B,QAAS,CAAC;AAiCnD,qBAAa,mBAAmB;IAU5B,OAAO,CAAC,QAAQ,CAAC,MAAM;IATzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,0GAA0G;IAC1G,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA4C;IAC7E,+FAA+F;IAC/F,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA4C;gBAG7E,OAAO,GAAE,0BAA+B,EACvB,MAAM,GAAE,kBAA6C;IAMxE,qBAAqB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,0BAA0B;IAqB3E,iBAAiB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG;QAC3C,MAAM,EAAE,gBAAgB,EAAE,CAAC;QAC3B,QAAQ,EAAE,WAAW,EAAE,CAAC;KACzB;IAuBD,oBAAoB,CAAC,SAAS,EAAE,WAAW,EAAE,GAAG,uBAAuB;IAWvE,8BAA8B,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,uBAAuB;IAiB3E,8BAA8B,IAAI,MAAM,EAAE;IAI1C,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAsB1D,sBAAsB,IAAI,MAAM,EAAE;IA0BlC,OAAO,CAAC,sBAAsB;IAK9B,OAAO,CAAC,wBAAwB;IAShC;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAwBvB,OAAO,CAAC,uBAAuB;IAK/B,OAAO,CAAC,oBAAoB;IAiB5B;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAcjC,OAAO,CAAC,qBAAqB;IAU7B,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,wBAAwB;IA0BhC,OAAO,CAAC,YAAY;IAIpB,iGAAiG;IACjG,OAAO,CAAC,mBAAmB;IAS3B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,WAAW;IAwBnB,OAAO,CAAC,qBAAqB;IAe7B,OAAO,CAAC,eAAe;IAOvB,OAAO,CAAC,kBAAkB;IAa1B,OAAO,CAAC,6BAA6B;CAYtC"}