@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
@@ -1,207 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { matchProcessesToSessions } from "../../utils/matching.js";
4
- import { batchGetSessionFileBirthtimes, isDirectory, safeReadFile, safeReaddir, safeStat } from "../../utils/session.js";
5
- import { CodexSessionParser } from "./CodexSessionParser.js";
6
- const PROCESS_START_DAY_WINDOW_DAYS = 1;
7
- export class CodexSessionLocator {
8
- parser;
9
- sessionsDir;
10
- constructor(options = {}, parser = new CodexSessionParser()){
11
- this.parser = parser;
12
- const homeDir = process.env.HOME || process.env.USERPROFILE || "";
13
- this.sessionsDir = options.sessionsDir ?? path.join(homeDir, ".codex", "sessions");
14
- }
15
- matchRunningProcesses(processes) {
16
- const { direct, fallback } = this.tryResumeMatching(processes);
17
- const { sessions, contentCache } = this.discoverLiveSessions(fallback);
18
- const legacyMatches = fallback.length > 0 && sessions.length > 0 ? matchProcessesToSessions(fallback, sessions) : [];
19
- return {
20
- direct,
21
- legacyMatches,
22
- fallback,
23
- contentCache
24
- };
25
- }
26
- tryResumeMatching(processes) {
27
- const direct = [];
28
- const fallback = [];
29
- for (const proc of processes){
30
- const sessionId = this.extractResumeSessionId(proc.command);
31
- if (!sessionId) {
32
- fallback.push(proc);
33
- continue;
34
- }
35
- const sessionFile = this.findSessionFileById(sessionId);
36
- if (!sessionFile) {
37
- fallback.push(proc);
38
- continue;
39
- }
40
- direct.push({
41
- process: proc,
42
- sessionFile
43
- });
44
- }
45
- return {
46
- direct,
47
- fallback
48
- };
49
- }
50
- discoverLiveSessions(processes) {
51
- const empty = {
52
- sessions: [],
53
- contentCache: new Map()
54
- };
55
- if (!fs.existsSync(this.sessionsDir)) return empty;
56
- const dateDirs = this.getDateDirs(processes);
57
- if (dateDirs.length === 0) return empty;
58
- return this.discoverSessionFilesInDateDirs(dateDirs);
59
- }
60
- discoverSessionFilesInDateDirs(dateDirs) {
61
- const files = batchGetSessionFileBirthtimes(dateDirs);
62
- const contentCache = new Map();
63
- for (const file of files){
64
- try {
65
- const content = fs.readFileSync(file.filePath, "utf-8");
66
- contentCache.set(file.filePath, content);
67
- const firstLine = content.split("\n")[0]?.trim();
68
- if (firstLine) {
69
- const parsed = JSON.parse(firstLine);
70
- if (parsed.type === "session_meta") {
71
- file.resolvedCwd = parsed.payload?.cwd || "";
72
- const metaTimestampMs = this.parser.parseMetaTimestampMs(parsed.payload?.timestamp);
73
- if (metaTimestampMs !== null) {
74
- file.birthtimeMs = metaTimestampMs;
75
- }
76
- }
77
- }
78
- } catch {
79
- // Skip unreadable files
80
- }
81
- }
82
- return {
83
- sessions: files,
84
- contentCache
85
- };
86
- }
87
- discoverHistoricalSessionFiles() {
88
- return this.collectAllSessionFiles();
89
- }
90
- findSessionFileById(sessionId) {
91
- for (const filePath of this.getCandidateSessionFiles(sessionId)){
92
- if (!path.basename(filePath).includes(sessionId)) continue;
93
- const content = safeReadFile(filePath);
94
- const firstLine = content?.split("\n")[0]?.trim();
95
- if (!firstLine) continue;
96
- try {
97
- const parsed = JSON.parse(firstLine);
98
- if (parsed.type !== "session_meta" || parsed.payload?.id !== sessionId) {
99
- continue;
100
- }
101
- const stat = safeStat(filePath);
102
- if (!stat) continue;
103
- const metaTimestampMs = this.parser.parseMetaTimestampMs(parsed.payload?.timestamp);
104
- return {
105
- sessionId,
106
- filePath,
107
- projectDir: path.dirname(filePath),
108
- birthtimeMs: metaTimestampMs ?? stat.birthtimeMs,
109
- resolvedCwd: parsed.payload?.cwd || ""
110
- };
111
- } catch {
112
- continue;
113
- }
114
- }
115
- return null;
116
- }
117
- collectAllSessionFiles() {
118
- const out = [];
119
- for (const yearEntry of safeReaddir(this.sessionsDir)){
120
- const yearDir = path.join(this.sessionsDir, yearEntry);
121
- if (!isDirectory(yearDir)) continue;
122
- for (const monthEntry of safeReaddir(yearDir)){
123
- const monthDir = path.join(yearDir, monthEntry);
124
- if (!isDirectory(monthDir)) continue;
125
- for (const dayEntry of safeReaddir(monthDir)){
126
- const dayDir = path.join(monthDir, dayEntry);
127
- if (!isDirectory(dayDir)) continue;
128
- for (const fileEntry of safeReaddir(dayDir)){
129
- if (!fileEntry.endsWith(".jsonl")) continue;
130
- out.push(path.join(dayDir, fileEntry));
131
- }
132
- }
133
- }
134
- }
135
- return out;
136
- }
137
- extractResumeSessionId(command) {
138
- const match = command.match(/(?:^|\s)resume\s+([0-9a-f-]{36})(?:\s|$)/i);
139
- return match?.[1] ?? null;
140
- }
141
- getCandidateSessionFiles(sessionId) {
142
- const sessionDate = this.tryParseUuidV7Date(sessionId);
143
- if (!sessionDate) return this.collectAllSessionFiles();
144
- return this.collectSessionFilesInDateDirs(this.getDateDirsAroundDate(sessionDate, PROCESS_START_DAY_WINDOW_DAYS));
145
- }
146
- getDateDirs(processes) {
147
- const dayKeys = new Set();
148
- for (const proc of processes){
149
- const startTime = proc.startTime || new Date();
150
- for(let offset = -PROCESS_START_DAY_WINDOW_DAYS; offset <= PROCESS_START_DAY_WINDOW_DAYS; offset++){
151
- const day = new Date(startTime.getTime());
152
- day.setDate(day.getDate() + offset);
153
- dayKeys.add(this.toSessionDayKey(day));
154
- }
155
- }
156
- const dirs = [];
157
- for (const dayKey of dayKeys){
158
- const dayDir = path.join(this.sessionsDir, dayKey);
159
- try {
160
- if (fs.statSync(dayDir).isDirectory()) {
161
- dirs.push(dayDir);
162
- }
163
- } catch {
164
- continue;
165
- }
166
- }
167
- return dirs;
168
- }
169
- getDateDirsAroundDate(date, windowDays) {
170
- const dirs = [];
171
- for(let offset = -windowDays; offset <= windowDays; offset++){
172
- const day = new Date(date.getTime());
173
- day.setDate(day.getDate() + offset);
174
- const dayDir = path.join(this.sessionsDir, this.toSessionDayKey(day));
175
- if (isDirectory(dayDir)) {
176
- dirs.push(dayDir);
177
- }
178
- }
179
- return dirs;
180
- }
181
- toSessionDayKey(date) {
182
- const yyyy = String(date.getFullYear()).padStart(4, "0");
183
- const mm = String(date.getMonth() + 1).padStart(2, "0");
184
- const dd = String(date.getDate()).padStart(2, "0");
185
- return path.join(yyyy, mm, dd);
186
- }
187
- tryParseUuidV7Date(sessionId) {
188
- const match = sessionId.match(/^([0-9a-f]{8})-([0-9a-f]{4})-7[0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$/i);
189
- if (!match) return null;
190
- const timestampMs = Number.parseInt(`${match[1]}${match[2]}`, 16);
191
- if (!Number.isSafeInteger(timestampMs) || timestampMs <= 0) return null;
192
- const date = new Date(timestampMs);
193
- return Number.isNaN(date.getTime()) ? null : date;
194
- }
195
- collectSessionFilesInDateDirs(dateDirs) {
196
- const out = [];
197
- for (const dayDir of dateDirs){
198
- for (const fileEntry of safeReaddir(dayDir)){
199
- if (!fileEntry.endsWith(".jsonl")) continue;
200
- out.push(path.join(dayDir, fileEntry));
201
- }
202
- }
203
- return out;
204
- }
205
- }
206
-
207
- //# sourceMappingURL=CodexSessionLocator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/codex/CodexSessionLocator.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { matchProcessesToSessions, type MatchResult } from \"../../utils/matching.js\";\nimport {\n batchGetSessionFileBirthtimes,\n isDirectory,\n safeReadFile,\n safeReaddir,\n safeStat,\n type SessionFile,\n} from \"../../utils/session.js\";\nimport { CodexSessionParser, type CodexEventEntry } from \"./CodexSessionParser.js\";\n\nexport interface CodexDirectMatch {\n process: ProcessInfo;\n sessionFile: SessionFile;\n}\n\nexport interface CodexProcessSessionMatches {\n direct: CodexDirectMatch[];\n legacyMatches: MatchResult[];\n fallback: ProcessInfo[];\n contentCache: Map<string, string>;\n}\n\nexport interface CodexDiscoveredSessions {\n sessions: SessionFile[];\n contentCache: Map<string, string>;\n}\n\nexport interface CodexSessionLocatorOptions {\n sessionsDir?: string;\n}\n\nconst PROCESS_START_DAY_WINDOW_DAYS = 1;\n\nexport class CodexSessionLocator {\n private readonly sessionsDir: string;\n\n constructor(\n options: CodexSessionLocatorOptions = {},\n private readonly parser: CodexSessionParser = new CodexSessionParser(),\n ) {\n const homeDir = process.env.HOME || process.env.USERPROFILE || \"\";\n this.sessionsDir = options.sessionsDir ?? path.join(homeDir, \".codex\", \"sessions\");\n }\n\n matchRunningProcesses(processes: ProcessInfo[]): CodexProcessSessionMatches {\n const { direct, fallback } = this.tryResumeMatching(processes);\n const { sessions, contentCache } = this.discoverLiveSessions(fallback);\n const legacyMatches =\n fallback.length > 0 && sessions.length > 0\n ? matchProcessesToSessions(fallback, sessions)\n : [];\n\n return { direct, legacyMatches, fallback, contentCache };\n }\n\n tryResumeMatching(processes: ProcessInfo[]): {\n direct: CodexDirectMatch[];\n fallback: ProcessInfo[];\n } {\n const direct: CodexDirectMatch[] = [];\n const fallback: ProcessInfo[] = [];\n\n for (const proc of processes) {\n const sessionId = this.extractResumeSessionId(proc.command);\n if (!sessionId) {\n fallback.push(proc);\n continue;\n }\n\n const sessionFile = this.findSessionFileById(sessionId);\n if (!sessionFile) {\n fallback.push(proc);\n continue;\n }\n\n direct.push({ process: proc, sessionFile });\n }\n\n return { direct, fallback };\n }\n\n discoverLiveSessions(processes: ProcessInfo[]): CodexDiscoveredSessions {\n const empty = { sessions: [], contentCache: new Map<string, string>() };\n if (!fs.existsSync(this.sessionsDir)) return empty;\n\n const dateDirs = this.getDateDirs(processes);\n if (dateDirs.length === 0) return empty;\n\n return this.discoverSessionFilesInDateDirs(dateDirs);\n }\n\n discoverSessionFilesInDateDirs(dateDirs: string[]): CodexDiscoveredSessions {\n const files = batchGetSessionFileBirthtimes(dateDirs);\n const contentCache = new Map<string, string>();\n\n for (const file of files) {\n try {\n const content = fs.readFileSync(file.filePath, \"utf-8\");\n contentCache.set(file.filePath, content);\n\n const firstLine = content.split(\"\\n\")[0]?.trim();\n if (firstLine) {\n const parsed = JSON.parse(firstLine) as CodexEventEntry;\n if (parsed.type === \"session_meta\") {\n file.resolvedCwd = parsed.payload?.cwd || \"\";\n const metaTimestampMs = this.parser.parseMetaTimestampMs(parsed.payload?.timestamp);\n if (metaTimestampMs !== null) {\n file.birthtimeMs = metaTimestampMs;\n }\n }\n }\n } catch {\n // Skip unreadable files\n }\n }\n\n return { sessions: files, contentCache };\n }\n\n discoverHistoricalSessionFiles(): string[] {\n return this.collectAllSessionFiles();\n }\n\n findSessionFileById(sessionId: string): SessionFile | null {\n for (const filePath of this.getCandidateSessionFiles(sessionId)) {\n if (!path.basename(filePath).includes(sessionId)) continue;\n\n const content = safeReadFile(filePath);\n const firstLine = content?.split(\"\\n\")[0]?.trim();\n if (!firstLine) continue;\n\n try {\n const parsed = JSON.parse(firstLine) as CodexEventEntry;\n if (parsed.type !== \"session_meta\" || parsed.payload?.id !== sessionId) {\n continue;\n }\n\n const stat = safeStat(filePath);\n if (!stat) continue;\n const metaTimestampMs = this.parser.parseMetaTimestampMs(parsed.payload?.timestamp);\n\n return {\n sessionId,\n filePath,\n projectDir: path.dirname(filePath),\n birthtimeMs: metaTimestampMs ?? stat.birthtimeMs,\n resolvedCwd: parsed.payload?.cwd || \"\",\n };\n } catch {\n continue;\n }\n }\n\n return null;\n }\n\n collectAllSessionFiles(): string[] {\n const out: string[] = [];\n\n for (const yearEntry of safeReaddir(this.sessionsDir)) {\n const yearDir = path.join(this.sessionsDir, yearEntry);\n if (!isDirectory(yearDir)) continue;\n\n for (const monthEntry of safeReaddir(yearDir)) {\n const monthDir = path.join(yearDir, monthEntry);\n if (!isDirectory(monthDir)) continue;\n\n for (const dayEntry of safeReaddir(monthDir)) {\n const dayDir = path.join(monthDir, dayEntry);\n if (!isDirectory(dayDir)) continue;\n\n for (const fileEntry of safeReaddir(dayDir)) {\n if (!fileEntry.endsWith(\".jsonl\")) continue;\n out.push(path.join(dayDir, fileEntry));\n }\n }\n }\n }\n\n return out;\n }\n\n private extractResumeSessionId(command: string): string | null {\n const match = command.match(/(?:^|\\s)resume\\s+([0-9a-f-]{36})(?:\\s|$)/i);\n return match?.[1] ?? null;\n }\n\n private getCandidateSessionFiles(sessionId: string): string[] {\n const sessionDate = this.tryParseUuidV7Date(sessionId);\n if (!sessionDate) return this.collectAllSessionFiles();\n\n return this.collectSessionFilesInDateDirs(\n this.getDateDirsAroundDate(sessionDate, PROCESS_START_DAY_WINDOW_DAYS),\n );\n }\n\n private getDateDirs(processes: ProcessInfo[]): string[] {\n const dayKeys = new Set<string>();\n\n for (const proc of processes) {\n const startTime = proc.startTime || new Date();\n for (\n let offset = -PROCESS_START_DAY_WINDOW_DAYS;\n offset <= PROCESS_START_DAY_WINDOW_DAYS;\n offset++\n ) {\n const day = new Date(startTime.getTime());\n day.setDate(day.getDate() + offset);\n dayKeys.add(this.toSessionDayKey(day));\n }\n }\n\n const dirs: string[] = [];\n for (const dayKey of dayKeys) {\n const dayDir = path.join(this.sessionsDir, dayKey);\n try {\n if (fs.statSync(dayDir).isDirectory()) {\n dirs.push(dayDir);\n }\n } catch {\n continue;\n }\n }\n\n return dirs;\n }\n\n private getDateDirsAroundDate(date: Date, windowDays: number): string[] {\n const dirs: string[] = [];\n\n for (let offset = -windowDays; offset <= windowDays; offset++) {\n const day = new Date(date.getTime());\n day.setDate(day.getDate() + offset);\n const dayDir = path.join(this.sessionsDir, this.toSessionDayKey(day));\n if (isDirectory(dayDir)) {\n dirs.push(dayDir);\n }\n }\n\n return dirs;\n }\n\n private toSessionDayKey(date: Date): string {\n const yyyy = String(date.getFullYear()).padStart(4, \"0\");\n const mm = String(date.getMonth() + 1).padStart(2, \"0\");\n const dd = String(date.getDate()).padStart(2, \"0\");\n return path.join(yyyy, mm, dd);\n }\n\n private tryParseUuidV7Date(sessionId: string): Date | null {\n const match = sessionId.match(\n /^([0-9a-f]{8})-([0-9a-f]{4})-7[0-9a-f]{3}-[0-9a-f]{4}-[0-9a-f]{12}$/i,\n );\n if (!match) return null;\n\n const timestampMs = Number.parseInt(`${match[1]}${match[2]}`, 16);\n if (!Number.isSafeInteger(timestampMs) || timestampMs <= 0) return null;\n\n const date = new Date(timestampMs);\n return Number.isNaN(date.getTime()) ? null : date;\n }\n\n private collectSessionFilesInDateDirs(dateDirs: string[]): string[] {\n const out: string[] = [];\n\n for (const dayDir of dateDirs) {\n for (const fileEntry of safeReaddir(dayDir)) {\n if (!fileEntry.endsWith(\".jsonl\")) continue;\n out.push(path.join(dayDir, fileEntry));\n }\n }\n\n return out;\n }\n}\n"],"names":["fs","path","matchProcessesToSessions","batchGetSessionFileBirthtimes","isDirectory","safeReadFile","safeReaddir","safeStat","CodexSessionParser","PROCESS_START_DAY_WINDOW_DAYS","CodexSessionLocator","sessionsDir","options","parser","homeDir","process","env","HOME","USERPROFILE","join","matchRunningProcesses","processes","direct","fallback","tryResumeMatching","sessions","contentCache","discoverLiveSessions","legacyMatches","length","proc","sessionId","extractResumeSessionId","command","push","sessionFile","findSessionFileById","empty","Map","existsSync","dateDirs","getDateDirs","discoverSessionFilesInDateDirs","files","file","content","readFileSync","filePath","set","firstLine","split","trim","parsed","JSON","parse","type","resolvedCwd","payload","cwd","metaTimestampMs","parseMetaTimestampMs","timestamp","birthtimeMs","discoverHistoricalSessionFiles","collectAllSessionFiles","getCandidateSessionFiles","basename","includes","id","stat","projectDir","dirname","out","yearEntry","yearDir","monthEntry","monthDir","dayEntry","dayDir","fileEntry","endsWith","match","sessionDate","tryParseUuidV7Date","collectSessionFilesInDateDirs","getDateDirsAroundDate","dayKeys","Set","startTime","Date","offset","day","getTime","setDate","getDate","add","toSessionDayKey","dirs","dayKey","statSync","date","windowDays","yyyy","String","getFullYear","padStart","mm","getMonth","dd","timestampMs","Number","parseInt","isSafeInteger","isNaN"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/codex/CodexSessionMapping.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { safeReadFile } from \"../../utils/session.js\";\n\nexport interface CodexSessionMappingOptions {\n mappingPath?: string;\n sessionsDir?: string;\n}\n\nexport interface CodexSessionMappingMatch {\n process: ProcessInfo;\n filePath: string;\n}\n\nexport interface CodexSessionMappingResult {\n matches: CodexSessionMappingMatch[];\n fallback: ProcessInfo[];\n}\n\nexport class CodexSessionMapping {\n private readonly mappingPath: string;\n private readonly sessionsDir: string;\n\n constructor(options: CodexSessionMappingOptions = {}) {\n const homeDir = process.env.HOME || process.env.USERPROFILE || \"\";\n this.mappingPath =\n options.mappingPath ?? path.join(homeDir, \".codex\", \"ai-devkit\", \"sessions.json\");\n this.sessionsDir = options.sessionsDir ?? path.join(homeDir, \".codex\", \"sessions\");\n }\n\n match(processes: ProcessInfo[]): CodexSessionMappingResult {\n const mapping = this.read();\n if (mapping.size === 0) return { matches: [], fallback: processes };\n\n const matches: CodexSessionMappingMatch[] = [];\n const fallback: ProcessInfo[] = [];\n\n for (const processInfo of processes) {\n const filePath = mapping.get(processInfo.pid);\n if (!filePath || !this.isTrustedSessionPath(filePath) || !fs.existsSync(filePath)) {\n fallback.push(processInfo);\n continue;\n }\n\n matches.push({ process: processInfo, filePath });\n }\n\n return { matches, fallback };\n }\n\n private read(): Map<number, string> {\n const content = safeReadFile(this.mappingPath);\n if (content === undefined) return new Map();\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(content);\n } catch {\n return new Map();\n }\n\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return new Map();\n\n const map = new Map<number, string>();\n for (const [key, value] of Object.entries(parsed)) {\n const pid = this.toPid(key);\n if (pid !== null && typeof value === \"string\" && value) {\n map.set(pid, value);\n }\n }\n\n return map;\n }\n\n private toPid(value: unknown): number | null {\n if (typeof value === \"number\" && Number.isInteger(value) && value > 0) return value;\n if (typeof value !== \"string\" || !/^\\d+$/.test(value)) return null;\n\n const parsed = Number(value);\n return Number.isSafeInteger(parsed) && parsed > 0 ? parsed : null;\n }\n\n private isTrustedSessionPath(filePath: string): boolean {\n const resolvedRoot = path.resolve(this.sessionsDir);\n const resolvedPath = path.resolve(filePath);\n return resolvedPath === resolvedRoot || resolvedPath.startsWith(`${resolvedRoot}${path.sep}`);\n }\n}\n"],"names":["fs","path","safeReadFile","CodexSessionMapping","mappingPath","sessionsDir","options","homeDir","process","env","HOME","USERPROFILE","join","match","processes","mapping","read","size","matches","fallback","processInfo","filePath","get","pid","isTrustedSessionPath","existsSync","push","content","undefined","Map","parsed","JSON","parse","Array","isArray","map","key","value","Object","entries","toPid","set","Number","isInteger","test","isSafeInteger","resolvedRoot","resolve","resolvedPath","startsWith","sep"],"mappings":"AAAA,YAAYA,QAAQ,KAAK;AACzB,YAAYC,UAAU,OAAO;AAE7B,SAASC,YAAY,QAAQ,yBAAyB;AAiBtD,OAAO,MAAMC;IACMC,YAAoB;IACpBC,YAAoB;IAErC,YAAYC,UAAsC,CAAC,CAAC,CAAE;QACpD,MAAMC,UAAUC,QAAQC,GAAG,CAACC,IAAI,IAAIF,QAAQC,GAAG,CAACE,WAAW,IAAI;QAC/D,IAAI,CAACP,WAAW,GACdE,QAAQF,WAAW,IAAIH,KAAKW,IAAI,CAACL,SAAS,UAAU,aAAa;QACnE,IAAI,CAACF,WAAW,GAAGC,QAAQD,WAAW,IAAIJ,KAAKW,IAAI,CAACL,SAAS,UAAU;IACzE;IAEAM,MAAMC,SAAwB,EAA6B;QACzD,MAAMC,UAAU,IAAI,CAACC,IAAI;QACzB,IAAID,QAAQE,IAAI,KAAK,GAAG,OAAO;YAAEC,SAAS,EAAE;YAAEC,UAAUL;QAAU;QAElE,MAAMI,UAAsC,EAAE;QAC9C,MAAMC,WAA0B,EAAE;QAElC,KAAK,MAAMC,eAAeN,UAAW;YACnC,MAAMO,WAAWN,QAAQO,GAAG,CAACF,YAAYG,GAAG;YAC5C,IAAI,CAACF,YAAY,CAAC,IAAI,CAACG,oBAAoB,CAACH,aAAa,CAACrB,GAAGyB,UAAU,CAACJ,WAAW;gBACjFF,SAASO,IAAI,CAACN;gBACd;YACF;YAEAF,QAAQQ,IAAI,CAAC;gBAAElB,SAASY;gBAAaC;YAAS;QAChD;QAEA,OAAO;YAAEH;YAASC;QAAS;IAC7B;IAEQH,OAA4B;QAClC,MAAMW,UAAUzB,aAAa,IAAI,CAACE,WAAW;QAC7C,IAAIuB,YAAYC,WAAW,OAAO,IAAIC;QAEtC,IAAIC;QACJ,IAAI;YACFA,SAASC,KAAKC,KAAK,CAACL;QACtB,EAAE,OAAM;YACN,OAAO,IAAIE;QACb;QAEA,IAAI,CAACC,UAAU,OAAOA,WAAW,YAAYG,MAAMC,OAAO,CAACJ,SAAS,OAAO,IAAID;QAE/E,MAAMM,MAAM,IAAIN;QAChB,KAAK,MAAM,CAACO,KAAKC,MAAM,IAAIC,OAAOC,OAAO,CAACT,QAAS;YACjD,MAAMP,MAAM,IAAI,CAACiB,KAAK,CAACJ;YACvB,IAAIb,QAAQ,QAAQ,OAAOc,UAAU,YAAYA,OAAO;gBACtDF,IAAIM,GAAG,CAAClB,KAAKc;YACf;QACF;QAEA,OAAOF;IACT;IAEQK,MAAMH,KAAc,EAAiB;QAC3C,IAAI,OAAOA,UAAU,YAAYK,OAAOC,SAAS,CAACN,UAAUA,QAAQ,GAAG,OAAOA;QAC9E,IAAI,OAAOA,UAAU,YAAY,CAAC,QAAQO,IAAI,CAACP,QAAQ,OAAO;QAE9D,MAAMP,SAASY,OAAOL;QACtB,OAAOK,OAAOG,aAAa,CAACf,WAAWA,SAAS,IAAIA,SAAS;IAC/D;IAEQN,qBAAqBH,QAAgB,EAAW;QACtD,MAAMyB,eAAe7C,KAAK8C,OAAO,CAAC,IAAI,CAAC1C,WAAW;QAClD,MAAM2C,eAAe/C,KAAK8C,OAAO,CAAC1B;QAClC,OAAO2B,iBAAiBF,gBAAgBE,aAAaC,UAAU,CAAC,GAAGH,eAAe7C,KAAKiD,GAAG,EAAE;IAC9F;AACF"}
@@ -1,58 +0,0 @@
1
- import type { ConversationMessage, SessionSummary } from "../../adapters/AgentAdapter.js";
2
- import { AgentStatus } from "../../adapters/AgentAdapter.js";
3
- export interface CodexEventEntry {
4
- timestamp?: string;
5
- type?: string;
6
- payload?: {
7
- type?: string;
8
- message?: string;
9
- id?: string;
10
- cwd?: string;
11
- timestamp?: string;
12
- role?: string;
13
- content?: CodexContent[];
14
- item?: CodexItem;
15
- turn_id?: string;
16
- internal_chat_message_metadata_passthrough?: {
17
- turn_id?: string;
18
- };
19
- };
20
- }
21
- export interface CodexContent {
22
- type?: string;
23
- text?: string;
24
- }
25
- export interface CodexItem {
26
- type?: string;
27
- content?: string | CodexContent[];
28
- }
29
- export interface CodexSession {
30
- sessionId: string;
31
- projectPath: string;
32
- summary: string;
33
- sessionStart: Date;
34
- lastActive: Date;
35
- lastPayloadType?: string;
36
- }
37
- export declare class CodexSessionParser {
38
- readSession(filePath: string, cachedContent?: string): CodexSession | null;
39
- determineStatus(session: CodexSession): AgentStatus;
40
- getConversation(sessionFilePath: string, options?: {
41
- verbose?: boolean;
42
- }): ConversationMessage[];
43
- fileToSessionSummary(filePath: string): SessionSummary | null;
44
- parseTimestamp(value?: string): Date | null;
45
- parseMetaTimestampMs(value?: string): number | null;
46
- private findLastEventEntry;
47
- private extractSummary;
48
- private normalizedPayloadType;
49
- private extractEntryText;
50
- private truncate;
51
- private toConversationMessage;
52
- private mapCodexRole;
53
- private mapCodexItemRole;
54
- private mirroredMessageKey;
55
- private extractContentText;
56
- private isSyntheticUserMessage;
57
- }
58
- //# sourceMappingURL=CodexSessionParser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodexSessionParser.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/CodexSessionParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAG7D,MAAM,WAAW,eAAe;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,YAAY,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,SAAS,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,0CAA0C,CAAC,EAAE;YAC3C,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAID,qBAAa,kBAAkB;IAC7B,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAsD1E,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,WAAW;IAmBnD,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IA0ChG,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAkE7D,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAM3C,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAUnD,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,qBAAqB;IAmB7B,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,QAAQ;IAKhB,OAAO,CAAC,qBAAqB;IA2C7B,OAAO,CAAC,YAAY;IASpB,OAAO,CAAC,gBAAgB;IASxB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,kBAAkB;IAY1B,OAAO,CAAC,sBAAsB;CAK/B"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/codex/CodexSessionParser.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport type { ConversationMessage, SessionSummary } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport { safeReadFile, safeStat } from \"../../utils/session.js\";\n\nexport interface CodexEventEntry {\n timestamp?: string;\n type?: string;\n payload?: {\n type?: string;\n message?: string;\n id?: string;\n cwd?: string;\n timestamp?: string;\n role?: string;\n content?: CodexContent[];\n item?: CodexItem;\n turn_id?: string;\n internal_chat_message_metadata_passthrough?: {\n turn_id?: string;\n };\n };\n}\n\nexport interface CodexContent {\n type?: string;\n text?: string;\n}\n\nexport interface CodexItem {\n type?: string;\n content?: string | CodexContent[];\n}\n\nexport interface CodexSession {\n sessionId: string;\n projectPath: string;\n summary: string;\n sessionStart: Date;\n lastActive: Date;\n lastPayloadType?: string;\n}\n\nconst IDLE_THRESHOLD_MINUTES = 5;\n\nexport class CodexSessionParser {\n readSession(filePath: string, cachedContent?: string): CodexSession | null {\n let content: string;\n if (cachedContent !== undefined) {\n content = cachedContent;\n } else {\n try {\n content = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n }\n\n const allLines = content.trim().split(\"\\n\");\n if (!allLines[0]) return null;\n\n let metaEntry: CodexEventEntry;\n try {\n metaEntry = JSON.parse(allLines[0]);\n } catch {\n return null;\n }\n\n if (metaEntry.type !== \"session_meta\" || !metaEntry.payload?.id) {\n return null;\n }\n\n const entries: CodexEventEntry[] = [];\n for (const line of allLines) {\n try {\n entries.push(JSON.parse(line));\n } catch {\n continue;\n }\n }\n\n const lastEntry = this.findLastEventEntry(entries);\n const lastPayloadType = lastEntry ? this.normalizedPayloadType(lastEntry) : undefined;\n\n const lastActive =\n this.parseTimestamp(lastEntry?.timestamp) ||\n this.parseTimestamp(metaEntry.payload.timestamp) ||\n fs.statSync(filePath).mtime;\n const sessionStart = this.parseTimestamp(metaEntry.payload.timestamp) || lastActive;\n\n return {\n sessionId: metaEntry.payload.id,\n projectPath: metaEntry.payload.cwd || \"\",\n summary: this.extractSummary(entries),\n sessionStart,\n lastActive,\n lastPayloadType,\n };\n }\n\n determineStatus(session: CodexSession): AgentStatus {\n const diffMs = Date.now() - session.lastActive.getTime();\n const diffMinutes = diffMs / 60000;\n\n if (diffMinutes > IDLE_THRESHOLD_MINUTES) {\n return AgentStatus.IDLE;\n }\n\n if (\n session.lastPayloadType === \"agent_message\" ||\n session.lastPayloadType === \"task_complete\" ||\n session.lastPayloadType === \"turn_aborted\"\n ) {\n return AgentStatus.WAITING;\n }\n\n return AgentStatus.RUNNING;\n }\n\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n const verbose = options?.verbose ?? false;\n\n const content = safeReadFile(sessionFilePath);\n if (content === undefined) return [];\n\n const lines = content.trim().split(\"\\n\");\n const entries: CodexEventEntry[] = [];\n const messages: ConversationMessage[] = [];\n\n for (const line of lines) {\n try {\n entries.push(JSON.parse(line));\n } catch {\n continue;\n }\n }\n\n const responseItemMirrorKeys = new Set<string>();\n for (const entry of entries) {\n if (entry.type !== \"response_item\") continue;\n\n const message = this.toConversationMessage(entry, verbose);\n const mirrorKey = message ? this.mirroredMessageKey(entry, message) : null;\n if (mirrorKey) responseItemMirrorKeys.add(mirrorKey);\n }\n\n for (const entry of entries) {\n const message = this.toConversationMessage(entry, verbose);\n if (!message) continue;\n\n const mirrorKey = this.mirroredMessageKey(entry, message);\n if (entry.type === \"event_msg\" && mirrorKey && responseItemMirrorKeys.has(mirrorKey)) {\n continue;\n }\n\n messages.push(message);\n }\n\n return messages;\n }\n\n fileToSessionSummary(filePath: string): SessionSummary | null {\n const content = safeReadFile(filePath);\n if (content === undefined) return null;\n\n const allLines = content.trim().split(\"\\n\");\n if (!allLines[0]) return null;\n\n let metaEntry: CodexEventEntry;\n try {\n metaEntry = JSON.parse(allLines[0]);\n } catch {\n return null;\n }\n\n if (metaEntry.type !== \"session_meta\" || !metaEntry.payload?.id) {\n return null;\n }\n\n let firstUserMessage = \"\";\n let lastTimestamp: Date | null = null;\n\n for (let i = 1; i < allLines.length; i++) {\n let entry: CodexEventEntry;\n try {\n entry = JSON.parse(allLines[i]);\n } catch {\n continue;\n }\n\n const ts = this.parseTimestamp(entry.timestamp);\n if (ts) lastTimestamp = ts;\n\n if (!firstUserMessage) {\n const message = this.toConversationMessage(entry, false);\n const content = message?.content.trim() ?? \"\";\n if (\n message?.role === \"user\" &&\n content.length > 0 &&\n !this.isSyntheticUserMessage(content)\n ) {\n firstUserMessage = content;\n }\n }\n }\n\n const stat = safeStat(filePath);\n\n const startedAt =\n this.parseTimestamp(metaEntry.payload.timestamp) ||\n lastTimestamp ||\n stat?.birthtime ||\n stat?.mtime ||\n new Date();\n const lastActive = lastTimestamp || startedAt;\n\n return {\n type: \"codex\",\n sessionId: metaEntry.payload.id,\n cwd: metaEntry.payload.cwd || \"\",\n firstUserMessage,\n lastActive,\n startedAt,\n sessionFilePath: filePath,\n };\n }\n\n parseTimestamp(value?: string): Date | null {\n if (!value) return null;\n const timestamp = new Date(value);\n return Number.isNaN(timestamp.getTime()) ? null : timestamp;\n }\n\n parseMetaTimestampMs(value?: string): number | null {\n if (typeof value !== \"string\") return null;\n\n const timestamp = this.parseTimestamp(value);\n if (!timestamp) return null;\n\n const timestampMs = timestamp.getTime();\n return Number.isFinite(timestampMs) ? timestampMs : null;\n }\n\n private findLastEventEntry(entries: CodexEventEntry[]): CodexEventEntry | undefined {\n for (let i = entries.length - 1; i >= 0; i--) {\n const entry = entries[i];\n if (entry && typeof entry.type === \"string\") {\n return entry;\n }\n }\n return undefined;\n }\n\n private extractSummary(entries: CodexEventEntry[]): string {\n for (let i = entries.length - 1; i >= 0; i--) {\n const message = this.extractEntryText(entries[i]);\n if (message) return this.truncate(message, 120);\n }\n\n return \"Codex session active\";\n }\n\n private normalizedPayloadType(entry: CodexEventEntry): string | undefined {\n const payloadType = entry.payload?.type;\n\n if (entry.type === \"response_item\" && payloadType === \"message\") {\n if (entry.payload?.role === \"assistant\") return \"agent_message\";\n if (entry.payload?.role === \"user\") return \"user_message\";\n return payloadType;\n }\n\n if (entry.type === \"event_msg\" && payloadType === \"item_completed\") {\n const itemType = entry.payload?.item?.type;\n if (itemType === \"AgentMessage\") return \"agent_message\";\n if (itemType === \"UserMessage\") return \"user_message\";\n return itemType ?? payloadType;\n }\n\n return payloadType;\n }\n\n private extractEntryText(entry: CodexEventEntry | undefined): string {\n if (!entry) return \"\";\n\n const legacyMessage = entry.payload?.message;\n if (typeof legacyMessage === \"string\" && legacyMessage.trim().length > 0) {\n return legacyMessage.trim();\n }\n\n const conversationMessage = this.toConversationMessage(entry, false);\n return conversationMessage?.content.trim() ?? \"\";\n }\n\n private truncate(value: string, maxLength: number): string {\n if (value.length <= maxLength) return value;\n return `${value.slice(0, maxLength - 3)}...`;\n }\n\n private toConversationMessage(\n entry: CodexEventEntry,\n verbose: boolean,\n ): ConversationMessage | null {\n if (entry.type === \"session_meta\") return null;\n\n const payloadType = entry.payload?.type;\n if (entry.type === \"response_item\" && payloadType === \"message\") {\n const role = this.mapCodexRole(entry.payload?.role, verbose);\n const text = this.extractContentText(entry.payload?.content);\n if (!role || !text) return null;\n\n return { role, content: text, timestamp: entry.timestamp };\n }\n\n if (entry.type === \"event_msg\" && payloadType === \"item_completed\") {\n const item = entry.payload?.item;\n const role = this.mapCodexItemRole(item?.type, verbose);\n const text = this.extractContentText(item?.content);\n if (!role || !text) return null;\n\n return { role, content: text, timestamp: entry.timestamp };\n }\n\n if (!payloadType) return null;\n\n let role: ConversationMessage[\"role\"];\n if (payloadType === \"user_message\") {\n role = \"user\";\n } else if (payloadType === \"agent_message\" || payloadType === \"task_complete\") {\n role = \"assistant\";\n } else if (verbose) {\n role = \"system\";\n } else {\n return null;\n }\n\n const text = entry.payload?.message?.trim();\n if (!text) return null;\n\n return { role, content: text, timestamp: entry.timestamp };\n }\n\n private mapCodexRole(\n role: string | undefined,\n verbose: boolean,\n ): ConversationMessage[\"role\"] | null {\n if (role === \"user\") return \"user\";\n if (role === \"assistant\") return \"assistant\";\n return verbose ? \"system\" : null;\n }\n\n private mapCodexItemRole(\n itemType: string | undefined,\n verbose: boolean,\n ): ConversationMessage[\"role\"] | null {\n if (itemType === \"AgentMessage\") return \"assistant\";\n if (itemType === \"UserMessage\") return \"user\";\n return verbose ? \"system\" : null;\n }\n\n private mirroredMessageKey(entry: CodexEventEntry, message: ConversationMessage): string | null {\n const turnId =\n entry.payload?.turn_id || entry.payload?.internal_chat_message_metadata_passthrough?.turn_id;\n\n if (!turnId) return null;\n return `${turnId}\\0${message.role}\\0${message.content}`;\n }\n\n private extractContentText(content: string | CodexContent[] | undefined): string {\n if (typeof content === \"string\") return content.trim();\n if (!Array.isArray(content)) return \"\";\n\n return content\n .map((part) => part.text)\n .filter((text): text is string => typeof text === \"string\" && text.trim().length > 0)\n .map((text) => text.trim())\n .join(\"\\n\")\n .trim();\n }\n\n private isSyntheticUserMessage(content: string): boolean {\n return (\n content.startsWith(\"<environment_context>\") && content.includes(\"</environment_context>\")\n );\n }\n}\n"],"names":["fs","AgentStatus","safeReadFile","safeStat","IDLE_THRESHOLD_MINUTES","CodexSessionParser","readSession","filePath","cachedContent","content","undefined","readFileSync","allLines","trim","split","metaEntry","JSON","parse","type","payload","id","entries","line","push","lastEntry","findLastEventEntry","lastPayloadType","normalizedPayloadType","lastActive","parseTimestamp","timestamp","statSync","mtime","sessionStart","sessionId","projectPath","cwd","summary","extractSummary","determineStatus","session","diffMs","Date","now","getTime","diffMinutes","IDLE","WAITING","RUNNING","getConversation","sessionFilePath","options","verbose","lines","messages","responseItemMirrorKeys","Set","entry","message","toConversationMessage","mirrorKey","mirroredMessageKey","add","has","fileToSessionSummary","firstUserMessage","lastTimestamp","i","length","ts","role","isSyntheticUserMessage","stat","startedAt","birthtime","value","Number","isNaN","parseMetaTimestampMs","timestampMs","isFinite","extractEntryText","truncate","payloadType","itemType","item","legacyMessage","conversationMessage","maxLength","slice","mapCodexRole","text","extractContentText","mapCodexItemRole","turnId","turn_id","internal_chat_message_metadata_passthrough","Array","isArray","map","part","filter","join","startsWith","includes"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CopilotAdapter.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/CopilotAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAQxC,OAAO,EAAE,aAAa,EAAsB,MAAM,8BAA8B,CAAC;AAKjF,MAAM,WAAW,qBAAqB;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,cAAe,YAAW,YAAY;IACjD,QAAQ,CAAC,IAAI,EAAG,SAAS,CAAU;IACnC,QAAQ,CAAC,YAAY,uBAAwB;IAE7C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;IAC9C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;gBAG9C,QAAQ,GAAE,aAAuC,EACjD,OAAO,GAAE,qBAA0B;IAWrC,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAItC,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAsCzE,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAI1F,YAAY,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAcnE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAYpE,OAAO,CAAC,gBAAgB;IAYxB,OAAO,CAAC,wBAAwB;IAahC,OAAO,CAAC,mBAAmB;CAI5B"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/copilot/CopilotAdapter.ts"],"sourcesContent":["/**\n * Copilot Adapter\n *\n * Detects running GitHub Copilot CLI agents by:\n * 1. Filtering Copilot processes from a shared asynchronous process snapshot\n * 2. Using snapshot CWD and start-time enrichment\n * 3. Mapping active ~/.copilot/session-state/{sessionId}/inuse.{pid}.lock files to processes\n * 4. Reading events.jsonl as the primary session/conversation source\n * 5. Reading workspace.yaml as a flat fallback metadata source\n */\n\nimport * as path from \"path\";\nimport type {\n AgentAdapter,\n AgentInfo,\n ConversationMessage,\n ListSessionsOptions,\n ProcessInfo,\n SessionSummary,\n AgentDetectionContext,\n} from \"../../adapters/AgentAdapter.js\";\nimport {\n captureProcessSnapshot,\n executableBasename,\n filterByProcessNames,\n findWrapperProcess,\n findWrapperProcessPids,\n} from \"../../utils/process.js\";\nimport { AgentRegistry, type RegistryEntry } from \"../../utils/AgentRegistry.js\";\nimport { CopilotAgentMapper } from \"./CopilotAgentMapper.js\";\nimport { CopilotSessionLocator } from \"./CopilotSessionLocator.js\";\nimport { CopilotSessionParser, type CopilotSession } from \"./CopilotSessionParser.js\";\n\nexport interface CopilotAdapterOptions {\n sessionStateDir?: string;\n}\n\nexport class CopilotAdapter implements AgentAdapter {\n readonly type = \"copilot\" as const;\n readonly processNames = [\"copilot\"] as const;\n\n private readonly registry: AgentRegistry;\n private readonly parser: CopilotSessionParser;\n private readonly mapper: CopilotAgentMapper;\n private readonly locator: CopilotSessionLocator;\n\n constructor(\n registry: AgentRegistry = AgentRegistry.default(),\n options: CopilotAdapterOptions = {},\n ) {\n const homeDir = process.env.HOME || process.env.USERPROFILE || \"\";\n this.registry = registry;\n this.parser = new CopilotSessionParser();\n this.mapper = new CopilotAgentMapper(this.parser);\n this.locator = new CopilotSessionLocator({\n sessionStateDir: options.sessionStateDir ?? path.join(homeDir, \".copilot\", \"session-state\"),\n });\n }\n\n canHandle(processInfo: ProcessInfo): boolean {\n return this.isCopilotExecutable(processInfo.command);\n }\n\n async detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]> {\n const snapshot = context?.processes ?? (await captureProcessSnapshot(this.processNames));\n const relevant = filterByProcessNames(snapshot, this.processNames);\n const processes = relevant.filter((process) => this.canHandle(process));\n if (processes.length === 0) return [];\n\n const processByPid = new Map(processes.map((proc) => [proc.pid, proc]));\n const registryEntriesByPid = new Map(this.registry.list().map((entry) => [entry.pid, entry]));\n const matchedPids = new Set<number>();\n const matchedProcesses: ProcessInfo[] = [];\n const agents: AgentInfo[] = [];\n\n for (const lock of this.locator.discoverActiveLocks()) {\n const proc = processByPid.get(lock.pid);\n if (!proc) continue;\n\n const session = this.parser.readSessionDir(lock.sessionDir, lock.sessionId);\n if (!session) continue;\n\n const agent = this.mapper.mapSessionToAgent(session, proc);\n this.applyWrapperRegistryName(agent, proc, processes, registryEntriesByPid);\n agents.push(agent);\n matchedPids.add(proc.pid);\n matchedProcesses.push(proc);\n }\n\n const wrapperPids = findWrapperProcessPids(processes, matchedProcesses);\n for (const proc of processes) {\n if (!matchedPids.has(proc.pid) && !wrapperPids.has(proc.pid)) {\n const agent = this.mapper.mapProcessOnlyAgent(proc);\n this.applyWrapperRegistryName(agent, proc, processes, registryEntriesByPid);\n agents.push(agent);\n }\n }\n\n return agents;\n }\n\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n return this.parser.getConversation(sessionFilePath, options);\n }\n\n async listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]> {\n const summaries: SessionSummary[] = [];\n\n for (const { sessionDir, sessionId } of this.locator.listSessionDirs()) {\n const session = this.parser.readSessionDir(sessionDir, sessionId);\n if (!session) continue;\n if (opts?.cwd !== undefined && session.projectPath !== opts.cwd) continue;\n\n summaries.push(this.toSessionSummary(session));\n }\n\n return summaries;\n }\n\n async findSessionsById(sessionId: string): Promise<SessionSummary[]> {\n const match = this.locator.findSessionDirById(sessionId);\n if (match) {\n const session = this.parser.readSessionDir(match.sessionDir, match.sessionId);\n if (session?.sessionId === sessionId) {\n return [this.toSessionSummary(session)];\n }\n }\n\n return (await this.listSessions()).filter((session) => session.sessionId === sessionId);\n }\n\n private toSessionSummary(session: CopilotSession): SessionSummary {\n return {\n type: this.type,\n sessionId: session.sessionId,\n cwd: session.projectPath,\n firstUserMessage: session.firstUserMessage,\n lastActive: session.lastActive,\n startedAt: session.sessionStart,\n sessionFilePath: session.eventsFilePath,\n };\n }\n\n private applyWrapperRegistryName(\n agent: AgentInfo,\n processInfo: ProcessInfo,\n processes: ProcessInfo[],\n registryEntriesByPid: Map<number, RegistryEntry>,\n ): void {\n const wrapper = findWrapperProcess(processes, processInfo);\n const wrapperEntry = wrapper ? registryEntriesByPid.get(wrapper.pid) : undefined;\n if (wrapperEntry?.type === this.type) {\n agent.name = wrapperEntry.name;\n }\n }\n\n private isCopilotExecutable(command: string): boolean {\n const base = executableBasename(command);\n return base === \"copilot\" || base === \"copilot.exe\";\n }\n}\n"],"names":["path","captureProcessSnapshot","executableBasename","filterByProcessNames","findWrapperProcess","findWrapperProcessPids","AgentRegistry","CopilotAgentMapper","CopilotSessionLocator","CopilotSessionParser","CopilotAdapter","type","processNames","registry","parser","mapper","locator","default","options","homeDir","process","env","HOME","USERPROFILE","sessionStateDir","join","canHandle","processInfo","isCopilotExecutable","command","detectAgents","context","snapshot","processes","relevant","filter","length","processByPid","Map","map","proc","pid","registryEntriesByPid","list","entry","matchedPids","Set","matchedProcesses","agents","lock","discoverActiveLocks","get","session","readSessionDir","sessionDir","sessionId","agent","mapSessionToAgent","applyWrapperRegistryName","push","add","wrapperPids","has","mapProcessOnlyAgent","getConversation","sessionFilePath","listSessions","opts","summaries","listSessionDirs","cwd","undefined","projectPath","toSessionSummary","findSessionsById","match","findSessionDirById","firstUserMessage","lastActive","startedAt","sessionStart","eventsFilePath","wrapper","wrapperEntry","name","base"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/copilot/CopilotAgentMapper.ts"],"sourcesContent":["import type { AgentInfo, ProcessInfo } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\nimport { generateAgentName } from \"../../utils/matching.js\";\nimport { CopilotSessionParser, type CopilotSession } from \"./CopilotSessionParser.js\";\n\nexport class CopilotAgentMapper {\n constructor(private readonly parser: CopilotSessionParser = new CopilotSessionParser()) {}\n\n mapSessionToAgent(session: CopilotSession, processInfo: ProcessInfo): AgentInfo {\n const projectPath = session.projectPath || processInfo.cwd || \"\";\n return {\n name: generateAgentName(projectPath, processInfo.pid),\n type: \"copilot\",\n status: this.parser.determineStatus(session),\n summary: session.summary || \"Copilot session active\",\n pid: processInfo.pid,\n projectPath,\n sessionId: session.sessionId,\n lastActive: session.lastActive,\n sessionFilePath: session.eventsFilePath,\n };\n }\n\n mapProcessOnlyAgent(processInfo: ProcessInfo): AgentInfo {\n return {\n name: generateAgentName(processInfo.cwd || \"\", processInfo.pid),\n type: \"copilot\",\n status: AgentStatus.RUNNING,\n summary: \"Copilot process running\",\n pid: processInfo.pid,\n projectPath: processInfo.cwd || \"\",\n sessionId: `pid-${processInfo.pid}`,\n lastActive: new Date(),\n };\n }\n}\n"],"names":["AgentStatus","generateAgentName","CopilotSessionParser","CopilotAgentMapper","parser","mapSessionToAgent","session","processInfo","projectPath","cwd","name","pid","type","status","determineStatus","summary","sessionId","lastActive","sessionFilePath","eventsFilePath","mapProcessOnlyAgent","RUNNING","Date"],"mappings":"AACA,SAASA,WAAW,QAAQ,iCAAiC;AAC7D,SAASC,iBAAiB,QAAQ,0BAA0B;AAC5D,SAASC,oBAAoB,QAA6B,4BAA4B;AAEtF,OAAO,MAAMC;;IACX,YAAY,AAAiBC,SAA+B,IAAIF,sBAAsB,CAAE;aAA3DE,SAAAA;IAA4D;IAEzFC,kBAAkBC,OAAuB,EAAEC,WAAwB,EAAa;QAC9E,MAAMC,cAAcF,QAAQE,WAAW,IAAID,YAAYE,GAAG,IAAI;QAC9D,OAAO;YACLC,MAAMT,kBAAkBO,aAAaD,YAAYI,GAAG;YACpDC,MAAM;YACNC,QAAQ,IAAI,CAACT,MAAM,CAACU,eAAe,CAACR;YACpCS,SAAST,QAAQS,OAAO,IAAI;YAC5BJ,KAAKJ,YAAYI,GAAG;YACpBH;YACAQ,WAAWV,QAAQU,SAAS;YAC5BC,YAAYX,QAAQW,UAAU;YAC9BC,iBAAiBZ,QAAQa,cAAc;QACzC;IACF;IAEAC,oBAAoBb,WAAwB,EAAa;QACvD,OAAO;YACLG,MAAMT,kBAAkBM,YAAYE,GAAG,IAAI,IAAIF,YAAYI,GAAG;YAC9DC,MAAM;YACNC,QAAQb,YAAYqB,OAAO;YAC3BN,SAAS;YACTJ,KAAKJ,YAAYI,GAAG;YACpBH,aAAaD,YAAYE,GAAG,IAAI;YAChCO,WAAW,CAAC,IAAI,EAAET,YAAYI,GAAG,EAAE;YACnCM,YAAY,IAAIK;QAClB;IACF;AACF"}
@@ -1,20 +0,0 @@
1
- export interface CopilotLock {
2
- sessionDir: string;
3
- sessionId: string;
4
- pid: number;
5
- }
6
- export interface CopilotSessionDir {
7
- sessionDir: string;
8
- sessionId: string;
9
- }
10
- export interface CopilotSessionLocatorOptions {
11
- sessionStateDir?: string;
12
- }
13
- export declare class CopilotSessionLocator {
14
- private readonly sessionStateDir;
15
- constructor(options?: CopilotSessionLocatorOptions);
16
- listSessionDirs(): CopilotSessionDir[];
17
- findSessionDirById(sessionId: string): CopilotSessionDir | null;
18
- discoverActiveLocks(): CopilotLock[];
19
- }
20
- //# sourceMappingURL=CopilotSessionLocator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CopilotSessionLocator.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/CopilotSessionLocator.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,4BAA4B;IAC3C,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;gBAE7B,OAAO,GAAE,4BAAiC;IAMtD,eAAe,IAAI,iBAAiB,EAAE;IActC,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,IAAI;IAM/D,mBAAmB,IAAI,WAAW,EAAE;CAerC"}
@@ -1,49 +0,0 @@
1
- import * as path from "path";
2
- import { isDirectory, isSafePathSegment, safeReaddir } from "../../utils/session.js";
3
- export class CopilotSessionLocator {
4
- sessionStateDir;
5
- constructor(options = {}){
6
- const homeDir = process.env.HOME || process.env.USERPROFILE || "";
7
- this.sessionStateDir = options.sessionStateDir ?? path.join(homeDir, ".copilot", "session-state");
8
- }
9
- listSessionDirs() {
10
- if (!isDirectory(this.sessionStateDir)) return [];
11
- const sessionDirs = [];
12
- for (const sessionId of safeReaddir(this.sessionStateDir)){
13
- const sessionDir = path.join(this.sessionStateDir, sessionId);
14
- if (!isDirectory(sessionDir)) continue;
15
- sessionDirs.push({
16
- sessionDir,
17
- sessionId
18
- });
19
- }
20
- return sessionDirs;
21
- }
22
- findSessionDirById(sessionId) {
23
- if (!isSafePathSegment(sessionId)) return null;
24
- const sessionDir = path.join(this.sessionStateDir, sessionId);
25
- return isDirectory(sessionDir) ? {
26
- sessionDir,
27
- sessionId
28
- } : null;
29
- }
30
- discoverActiveLocks() {
31
- const locks = [];
32
- for (const { sessionDir, sessionId } of this.listSessionDirs()){
33
- for (const entry of safeReaddir(sessionDir)){
34
- const match = entry.match(/^inuse\.(\d+)\.lock$/);
35
- if (!match) continue;
36
- const pid = Number.parseInt(match[1], 10);
37
- if (!Number.isFinite(pid)) continue;
38
- locks.push({
39
- sessionDir,
40
- sessionId,
41
- pid
42
- });
43
- }
44
- }
45
- return locks;
46
- }
47
- }
48
-
49
- //# sourceMappingURL=CopilotSessionLocator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/copilot/CopilotSessionLocator.ts"],"sourcesContent":["import * as path from \"path\";\nimport { isDirectory, isSafePathSegment, safeReaddir } from \"../../utils/session.js\";\n\nexport interface CopilotLock {\n sessionDir: string;\n sessionId: string;\n pid: number;\n}\n\nexport interface CopilotSessionDir {\n sessionDir: string;\n sessionId: string;\n}\n\nexport interface CopilotSessionLocatorOptions {\n sessionStateDir?: string;\n}\n\nexport class CopilotSessionLocator {\n private readonly sessionStateDir: string;\n\n constructor(options: CopilotSessionLocatorOptions = {}) {\n const homeDir = process.env.HOME || process.env.USERPROFILE || \"\";\n this.sessionStateDir =\n options.sessionStateDir ?? path.join(homeDir, \".copilot\", \"session-state\");\n }\n\n listSessionDirs(): CopilotSessionDir[] {\n if (!isDirectory(this.sessionStateDir)) return [];\n\n const sessionDirs: CopilotSessionDir[] = [];\n for (const sessionId of safeReaddir(this.sessionStateDir)) {\n const sessionDir = path.join(this.sessionStateDir, sessionId);\n if (!isDirectory(sessionDir)) continue;\n\n sessionDirs.push({ sessionDir, sessionId });\n }\n\n return sessionDirs;\n }\n\n findSessionDirById(sessionId: string): CopilotSessionDir | null {\n if (!isSafePathSegment(sessionId)) return null;\n const sessionDir = path.join(this.sessionStateDir, sessionId);\n return isDirectory(sessionDir) ? { sessionDir, sessionId } : null;\n }\n\n discoverActiveLocks(): CopilotLock[] {\n const locks: CopilotLock[] = [];\n for (const { sessionDir, sessionId } of this.listSessionDirs()) {\n for (const entry of safeReaddir(sessionDir)) {\n const match = entry.match(/^inuse\\.(\\d+)\\.lock$/);\n if (!match) continue;\n\n const pid = Number.parseInt(match[1], 10);\n if (!Number.isFinite(pid)) continue;\n locks.push({ sessionDir, sessionId, pid });\n }\n }\n\n return locks;\n }\n}\n"],"names":["path","isDirectory","isSafePathSegment","safeReaddir","CopilotSessionLocator","sessionStateDir","options","homeDir","process","env","HOME","USERPROFILE","join","listSessionDirs","sessionDirs","sessionId","sessionDir","push","findSessionDirById","discoverActiveLocks","locks","entry","match","pid","Number","parseInt","isFinite"],"mappings":"AAAA,YAAYA,UAAU,OAAO;AAC7B,SAASC,WAAW,EAAEC,iBAAiB,EAAEC,WAAW,QAAQ,yBAAyB;AAiBrF,OAAO,MAAMC;IACMC,gBAAwB;IAEzC,YAAYC,UAAwC,CAAC,CAAC,CAAE;QACtD,MAAMC,UAAUC,QAAQC,GAAG,CAACC,IAAI,IAAIF,QAAQC,GAAG,CAACE,WAAW,IAAI;QAC/D,IAAI,CAACN,eAAe,GAClBC,QAAQD,eAAe,IAAIL,KAAKY,IAAI,CAACL,SAAS,YAAY;IAC9D;IAEAM,kBAAuC;QACrC,IAAI,CAACZ,YAAY,IAAI,CAACI,eAAe,GAAG,OAAO,EAAE;QAEjD,MAAMS,cAAmC,EAAE;QAC3C,KAAK,MAAMC,aAAaZ,YAAY,IAAI,CAACE,eAAe,EAAG;YACzD,MAAMW,aAAahB,KAAKY,IAAI,CAAC,IAAI,CAACP,eAAe,EAAEU;YACnD,IAAI,CAACd,YAAYe,aAAa;YAE9BF,YAAYG,IAAI,CAAC;gBAAED;gBAAYD;YAAU;QAC3C;QAEA,OAAOD;IACT;IAEAI,mBAAmBH,SAAiB,EAA4B;QAC9D,IAAI,CAACb,kBAAkBa,YAAY,OAAO;QAC1C,MAAMC,aAAahB,KAAKY,IAAI,CAAC,IAAI,CAACP,eAAe,EAAEU;QACnD,OAAOd,YAAYe,cAAc;YAAEA;YAAYD;QAAU,IAAI;IAC/D;IAEAI,sBAAqC;QACnC,MAAMC,QAAuB,EAAE;QAC/B,KAAK,MAAM,EAAEJ,UAAU,EAAED,SAAS,EAAE,IAAI,IAAI,CAACF,eAAe,GAAI;YAC9D,KAAK,MAAMQ,SAASlB,YAAYa,YAAa;gBAC3C,MAAMM,QAAQD,MAAMC,KAAK,CAAC;gBAC1B,IAAI,CAACA,OAAO;gBAEZ,MAAMC,MAAMC,OAAOC,QAAQ,CAACH,KAAK,CAAC,EAAE,EAAE;gBACtC,IAAI,CAACE,OAAOE,QAAQ,CAACH,MAAM;gBAC3BH,MAAMH,IAAI,CAAC;oBAAED;oBAAYD;oBAAWQ;gBAAI;YAC1C;QACF;QAEA,OAAOH;IACT;AACF"}
@@ -1,30 +0,0 @@
1
- import type { ConversationMessage } from "../../adapters/AgentAdapter.js";
2
- import { AgentStatus } from "../../adapters/AgentAdapter.js";
3
- export interface CopilotSession {
4
- sessionId: string;
5
- projectPath: string;
6
- summary: string;
7
- sessionStart: Date;
8
- lastActive: Date;
9
- lastEventType?: string;
10
- firstUserMessage: string;
11
- eventsFilePath: string;
12
- }
13
- export declare class CopilotSessionParser {
14
- readSessionDir(sessionDir: string, fallbackSessionId: string): CopilotSession | null;
15
- getConversation(sessionFilePath: string, options?: {
16
- verbose?: boolean;
17
- }): ConversationMessage[];
18
- determineStatus(session: CopilotSession): AgentStatus;
19
- private readEventEntries;
20
- private buildSessionFromEntries;
21
- private hasWorkspaceMetadata;
22
- private readWorkspaceMetadata;
23
- private stripYamlScalar;
24
- private parseEventLines;
25
- private roleForEvent;
26
- private extractEventText;
27
- private parseTimestamp;
28
- private truncate;
29
- }
30
- //# sourceMappingURL=CopilotSessionParser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CopilotSessionParser.d.ts","sourceRoot":"","sources":["../../../src/providers/copilot/CopilotSessionParser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAkC7D,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,IAAI,CAAC;IACnB,UAAU,EAAE,IAAI,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,cAAc,EAAE,MAAM,CAAC;CACxB;AA6BD,qBAAa,oBAAoB;IAC/B,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAqCpF,eAAe,CAAC,eAAe,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,mBAAmB,EAAE;IAwBhG,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,WAAW;IAcrD,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,uBAAuB;IAqC/B,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,qBAAqB;IA0B7B,OAAO,CAAC,eAAe;IAUvB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,QAAQ;CAIjB"}