@ai-devkit/agent-manager 0.36.0 → 0.38.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 (1046) hide show
  1. package/dist/AgentManager.d.ts +9 -8
  2. package/dist/AgentManager.d.ts.map +1 -1
  3. package/dist/AgentManager.js +23 -4
  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/anthropic.test.js +115 -0
  14. package/dist/__tests__/capacity/anthropic.test.js.map +1 -0
  15. package/dist/__tests__/capacity/boundaries.test.js +45 -0
  16. package/dist/__tests__/capacity/boundaries.test.js.map +1 -0
  17. package/dist/__tests__/capacity/claude.test.js +3 -3
  18. package/dist/__tests__/capacity/claude.test.js.map +1 -1
  19. package/dist/__tests__/capacity/codex.test.js +3 -1
  20. package/dist/__tests__/capacity/codex.test.js.map +1 -1
  21. package/dist/__tests__/capacity/openai.test.js +32 -25
  22. package/dist/__tests__/capacity/openai.test.js.map +1 -1
  23. package/dist/__tests__/capacity/wham.test.js +1 -1
  24. package/dist/__tests__/capacity/wham.test.js.map +1 -1
  25. package/dist/__tests__/capacity/zai.test.js +7 -8
  26. package/dist/__tests__/capacity/zai.test.js.map +1 -1
  27. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js +568 -0
  28. package/dist/__tests__/harnesses/BoundedSummarySkip.test.js.map +1 -0
  29. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js +1089 -0
  30. package/dist/__tests__/harnesses/SessionSummaryEquivalence.test.js.map +1 -0
  31. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js +143 -0
  32. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.js.map +1 -0
  33. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js +462 -0
  34. package/dist/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.js.map +1 -0
  35. package/dist/__tests__/harnesses/builtinAdapters.test.js +33 -0
  36. package/dist/__tests__/harnesses/builtinAdapters.test.js.map +1 -0
  37. package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js +79 -0
  38. package/dist/__tests__/harnesses/claude/ClaudeAgentMapper.test.js.map +1 -0
  39. package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js +1881 -0
  40. package/dist/__tests__/harnesses/claude/ClaudeCodeAdapter.test.js.map +1 -0
  41. package/dist/__tests__/harnesses/claude/ClaudeSessionLocator.test.js +425 -0
  42. package/dist/__tests__/harnesses/claude/ClaudeSessionLocator.test.js.map +1 -0
  43. package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js +314 -0
  44. package/dist/__tests__/harnesses/claude/ClaudeSessionParser.test.js.map +1 -0
  45. package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js +49 -0
  46. package/dist/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.js.map +1 -0
  47. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js +76 -0
  48. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.js.map +1 -0
  49. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js +173 -0
  50. package/dist/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.js.map +1 -0
  51. package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js +181 -0
  52. package/dist/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.js.map +1 -0
  53. package/dist/__tests__/harnesses/codex/CodexAdapter.test.js +685 -0
  54. package/dist/__tests__/harnesses/codex/CodexAdapter.test.js.map +1 -0
  55. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js +463 -0
  56. package/dist/__tests__/harnesses/codex/CodexSessionLocator.test.js.map +1 -0
  57. package/dist/__tests__/harnesses/codex/CodexSessionMapping.test.js +86 -0
  58. package/dist/__tests__/harnesses/codex/CodexSessionMapping.test.js.map +1 -0
  59. package/dist/__tests__/harnesses/codex/CodexSessionParser.test.js +254 -0
  60. package/dist/__tests__/harnesses/codex/CodexSessionParser.test.js.map +1 -0
  61. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js +121 -0
  62. package/dist/__tests__/harnesses/codex/durable/CodexCliProbe.test.js.map +1 -0
  63. package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js +84 -0
  64. package/dist/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.js.map +1 -0
  65. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js +128 -0
  66. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.js.map +1 -0
  67. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js +246 -0
  68. package/dist/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.js.map +1 -0
  69. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js +384 -0
  70. package/dist/__tests__/harnesses/codex/durable/CodexPrintRunner.test.js.map +1 -0
  71. package/dist/__tests__/harnesses/copilot/CopilotAdapter.test.js +659 -0
  72. package/dist/__tests__/harnesses/copilot/CopilotAdapter.test.js.map +1 -0
  73. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js +290 -0
  74. package/dist/__tests__/harnesses/copilot/CopilotRefreshIO.test.js.map +1 -0
  75. package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js +1443 -0
  76. package/dist/__tests__/harnesses/gemini/GeminiCliAdapter.test.js.map +1 -0
  77. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js +491 -0
  78. package/dist/__tests__/harnesses/gemini/GeminiSessionJsonl.test.js.map +1 -0
  79. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js +399 -0
  80. package/dist/__tests__/harnesses/gemini/GeminiSessionLocator.test.js.map +1 -0
  81. package/dist/__tests__/harnesses/grok/GrokAgentMapper.test.js +56 -0
  82. package/dist/__tests__/harnesses/grok/GrokAgentMapper.test.js.map +1 -0
  83. package/dist/__tests__/harnesses/grok/GrokCliAdapter.test.js +421 -0
  84. package/dist/__tests__/harnesses/grok/GrokCliAdapter.test.js.map +1 -0
  85. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js +167 -0
  86. package/dist/__tests__/harnesses/grok/GrokIncrementalRefresh.test.js.map +1 -0
  87. package/dist/__tests__/harnesses/grok/GrokSessionLocator.test.js +133 -0
  88. package/dist/__tests__/harnesses/grok/GrokSessionLocator.test.js.map +1 -0
  89. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js +301 -0
  90. package/dist/__tests__/harnesses/grok/GrokSessionParser.test.js.map +1 -0
  91. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js +662 -0
  92. package/dist/__tests__/harnesses/kiro/KiroAdapter.test.js.map +1 -0
  93. package/dist/__tests__/harnesses/opencode/OpenCodeAdapter.test.js +213 -0
  94. package/dist/__tests__/harnesses/opencode/OpenCodeAdapter.test.js.map +1 -0
  95. package/dist/__tests__/harnesses/opencode/OpenCodeAgentMapper.test.js +89 -0
  96. package/dist/__tests__/harnesses/opencode/OpenCodeAgentMapper.test.js.map +1 -0
  97. package/dist/__tests__/harnesses/opencode/OpenCodeSessionLocator.test.js +94 -0
  98. package/dist/__tests__/harnesses/opencode/OpenCodeSessionLocator.test.js.map +1 -0
  99. package/dist/__tests__/harnesses/opencode/OpenCodeSessionParser.test.js +147 -0
  100. package/dist/__tests__/harnesses/opencode/OpenCodeSessionParser.test.js.map +1 -0
  101. package/dist/__tests__/harnesses/pi/PiAdapter.test.js +367 -0
  102. package/dist/__tests__/harnesses/pi/PiAdapter.test.js.map +1 -0
  103. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js +382 -0
  104. package/dist/__tests__/harnesses/pi/PiDiscoveryIO.test.js.map +1 -0
  105. package/dist/__tests__/harnesses/pi/PiSessionParser.test.js +416 -0
  106. package/dist/__tests__/harnesses/pi/PiSessionParser.test.js.map +1 -0
  107. package/dist/__tests__/harnesses/pi/PiSessionTracker.test.js +108 -0
  108. package/dist/__tests__/harnesses/pi/PiSessionTracker.test.js.map +1 -0
  109. package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js +70 -0
  110. package/dist/__tests__/harnesses/pi/durable/PiCliProbe.test.js.map +1 -0
  111. package/dist/__tests__/harnesses/pi/durable/PiDurableAgentRepository.test.js.map +1 -0
  112. package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js +192 -0
  113. package/dist/__tests__/harnesses/pi/durable/PiPrintAgentService.test.js.map +1 -0
  114. package/dist/__tests__/harnesses/pi/durable/PiPrintProtocol.test.js +119 -0
  115. package/dist/__tests__/harnesses/pi/durable/PiPrintProtocol.test.js.map +1 -0
  116. package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js +382 -0
  117. package/dist/__tests__/harnesses/pi/durable/PiPrintRunner.test.js.map +1 -0
  118. package/dist/__tests__/harnesses/pi/durable/PiStreamParser.test.js +34 -0
  119. package/dist/__tests__/harnesses/pi/durable/PiStreamParser.test.js.map +1 -0
  120. package/dist/__tests__/harnesses/readiness/AgentReadiness.test.js +342 -0
  121. package/dist/__tests__/harnesses/readiness/AgentReadiness.test.js.map +1 -0
  122. package/dist/__tests__/harnesses/runtimeProfiles.test.js +89 -0
  123. package/dist/__tests__/harnesses/runtimeProfiles.test.js.map +1 -0
  124. package/dist/__tests__/print/DurableAgent.test.js +4 -6
  125. package/dist/__tests__/print/DurableAgent.test.js.map +1 -1
  126. package/dist/__tests__/print/DurableAgentRepository.test.js +1 -12
  127. package/dist/__tests__/print/DurableAgentRepository.test.js.map +1 -1
  128. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js +49 -0
  129. package/dist/__tests__/runtime/ManagedAgentRuntime.test.js.map +1 -1
  130. package/dist/__tests__/terminal/TmuxManager.test.js +1 -1
  131. package/dist/__tests__/terminal/TmuxManager.test.js.map +1 -1
  132. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js +650 -0
  133. package/dist/__tests__/utils/IncrementalJsonlSummary.test.js.map +1 -0
  134. package/dist/__tests__/utils/conversationTail.bench.test.js +258 -0
  135. package/dist/__tests__/utils/conversationTail.bench.test.js.map +1 -0
  136. package/dist/__tests__/utils/conversationTailParity.test.js +588 -0
  137. package/dist/__tests__/utils/conversationTailParity.test.js.map +1 -0
  138. package/dist/__tests__/utils/jsonlTail.test.js +360 -0
  139. package/dist/__tests__/utils/jsonlTail.test.js.map +1 -0
  140. package/dist/__tests__/utils/matchingConstants.test.js +35 -0
  141. package/dist/__tests__/utils/matchingConstants.test.js.map +1 -0
  142. package/dist/__tests__/utils/process.test.js +436 -2
  143. package/dist/__tests__/utils/process.test.js.map +1 -1
  144. package/dist/adapters/AgentAdapter.d.ts +25 -6
  145. package/dist/adapters/AgentAdapter.d.ts.map +1 -1
  146. package/dist/adapters/AgentAdapter.js +12 -3
  147. package/dist/adapters/AgentAdapter.js.map +1 -1
  148. package/dist/capacity/index.d.ts +9 -19
  149. package/dist/capacity/index.d.ts.map +1 -1
  150. package/dist/capacity/index.js +11 -4
  151. package/dist/capacity/index.js.map +1 -1
  152. package/dist/capacity/providers/anthropic.d.ts +9 -0
  153. package/dist/capacity/providers/anthropic.d.ts.map +1 -0
  154. package/dist/capacity/providers/anthropic.js +153 -0
  155. package/dist/capacity/providers/anthropic.js.map +1 -0
  156. package/dist/capacity/providers/openai-platform.d.ts +14 -0
  157. package/dist/capacity/providers/openai-platform.d.ts.map +1 -0
  158. package/dist/capacity/providers/openai-platform.js +120 -0
  159. package/dist/capacity/providers/openai-platform.js.map +1 -0
  160. package/dist/capacity/providers/openai-subscription.d.ts +20 -0
  161. package/dist/capacity/providers/openai-subscription.d.ts.map +1 -0
  162. package/dist/capacity/providers/openai-subscription.js +129 -0
  163. package/dist/capacity/providers/openai-subscription.js.map +1 -0
  164. package/dist/capacity/providers/zai.d.ts +8 -0
  165. package/dist/capacity/providers/zai.d.ts.map +1 -0
  166. package/dist/capacity/providers/zai.js +158 -0
  167. package/dist/capacity/providers/zai.js.map +1 -0
  168. package/dist/capacity/sources/claude.d.ts +9 -0
  169. package/dist/capacity/sources/claude.d.ts.map +1 -0
  170. package/dist/capacity/sources/claude.js +17 -0
  171. package/dist/capacity/sources/claude.js.map +1 -0
  172. package/dist/capacity/sources/codex.d.ts +32 -0
  173. package/dist/capacity/sources/codex.d.ts.map +1 -0
  174. package/dist/capacity/sources/codex.js +227 -0
  175. package/dist/capacity/sources/codex.js.map +1 -0
  176. package/dist/capacity/sources/pi.d.ts +30 -0
  177. package/dist/capacity/sources/pi.d.ts.map +1 -0
  178. package/dist/capacity/sources/pi.js +81 -0
  179. package/dist/capacity/sources/pi.js.map +1 -0
  180. package/dist/capacity/types.d.ts +2 -0
  181. package/dist/capacity/types.d.ts.map +1 -1
  182. package/dist/capacity/types.js +1 -1
  183. package/dist/capacity/types.js.map +1 -1
  184. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts +13 -0
  185. package/dist/harnesses/antigravity/AntigravityAgentMapper.d.ts.map +1 -0
  186. package/dist/harnesses/antigravity/AntigravityAgentMapper.js +30 -0
  187. package/dist/harnesses/antigravity/AntigravityAgentMapper.js.map +1 -0
  188. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts +32 -0
  189. package/dist/harnesses/antigravity/AntigravityCliAdapter.d.ts.map +1 -0
  190. package/dist/harnesses/antigravity/AntigravityCliAdapter.js +97 -0
  191. package/dist/harnesses/antigravity/AntigravityCliAdapter.js.map +1 -0
  192. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts +30 -0
  193. package/dist/harnesses/antigravity/AntigravitySessionLocator.d.ts.map +1 -0
  194. package/dist/harnesses/antigravity/AntigravitySessionLocator.js +56 -0
  195. package/dist/harnesses/antigravity/AntigravitySessionLocator.js.map +1 -0
  196. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts +75 -0
  197. package/dist/harnesses/antigravity/AntigravitySessionParser.d.ts.map +1 -0
  198. package/dist/harnesses/antigravity/AntigravitySessionParser.js +174 -0
  199. package/dist/harnesses/antigravity/AntigravitySessionParser.js.map +1 -0
  200. package/dist/harnesses/claude/ClaudeAgentMapper.d.ts.map +1 -0
  201. package/dist/harnesses/claude/ClaudeAgentMapper.js +36 -0
  202. package/dist/harnesses/claude/ClaudeAgentMapper.js.map +1 -0
  203. package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts +30 -0
  204. package/dist/harnesses/claude/ClaudeCodeAdapter.d.ts.map +1 -0
  205. package/dist/harnesses/claude/ClaudeCodeAdapter.js +134 -0
  206. package/dist/harnesses/claude/ClaudeCodeAdapter.js.map +1 -0
  207. package/dist/harnesses/claude/ClaudeSessionLocator.d.ts.map +1 -0
  208. package/dist/harnesses/claude/ClaudeSessionLocator.js +260 -0
  209. package/dist/harnesses/claude/ClaudeSessionLocator.js.map +1 -0
  210. package/dist/harnesses/claude/ClaudeSessionParser.d.ts +148 -0
  211. package/dist/harnesses/claude/ClaudeSessionParser.d.ts.map +1 -0
  212. package/dist/harnesses/claude/ClaudeSessionParser.js +365 -0
  213. package/dist/harnesses/claude/ClaudeSessionParser.js.map +1 -0
  214. package/dist/harnesses/claude/credentials.d.ts +10 -0
  215. package/dist/harnesses/claude/credentials.d.ts.map +1 -0
  216. package/dist/harnesses/claude/credentials.js +112 -0
  217. package/dist/harnesses/claude/credentials.js.map +1 -0
  218. package/dist/harnesses/claude/durable/ClaudeCliProbe.d.ts.map +1 -0
  219. package/dist/harnesses/claude/durable/ClaudeCliProbe.js.map +1 -0
  220. package/dist/harnesses/claude/durable/ClaudePrintAgentService.d.ts.map +1 -0
  221. package/dist/harnesses/claude/durable/ClaudePrintAgentService.js.map +1 -0
  222. package/dist/harnesses/claude/durable/ClaudePrintRunner.d.ts.map +1 -0
  223. package/dist/harnesses/claude/durable/ClaudePrintRunner.js.map +1 -0
  224. package/dist/harnesses/claude/durable/ClaudeStreamParser.d.ts.map +1 -0
  225. package/dist/harnesses/claude/durable/ClaudeStreamParser.js.map +1 -0
  226. package/dist/harnesses/claude/readiness.d.ts +3 -0
  227. package/dist/harnesses/claude/readiness.d.ts.map +1 -0
  228. package/dist/harnesses/claude/readiness.js +63 -0
  229. package/dist/harnesses/claude/readiness.js.map +1 -0
  230. package/dist/harnesses/codex/CodexAdapter.d.ts +29 -0
  231. package/dist/harnesses/codex/CodexAdapter.d.ts.map +1 -0
  232. package/dist/harnesses/codex/CodexAdapter.js +290 -0
  233. package/dist/harnesses/codex/CodexAdapter.js.map +1 -0
  234. package/dist/harnesses/codex/CodexAgentMapper.d.ts.map +1 -0
  235. package/dist/harnesses/codex/CodexAgentMapper.js +28 -0
  236. package/dist/harnesses/codex/CodexAgentMapper.js.map +1 -0
  237. package/dist/harnesses/codex/CodexSessionLocator.d.ts +74 -0
  238. package/dist/harnesses/codex/CodexSessionLocator.d.ts.map +1 -0
  239. package/dist/harnesses/codex/CodexSessionLocator.js +359 -0
  240. package/dist/harnesses/codex/CodexSessionLocator.js.map +1 -0
  241. package/dist/harnesses/codex/CodexSessionMapping.d.ts.map +1 -0
  242. package/dist/harnesses/codex/CodexSessionMapping.js +68 -0
  243. package/dist/harnesses/codex/CodexSessionMapping.js.map +1 -0
  244. package/dist/harnesses/codex/CodexSessionParser.d.ts +89 -0
  245. package/dist/harnesses/codex/CodexSessionParser.d.ts.map +1 -0
  246. package/dist/harnesses/codex/CodexSessionParser.js +308 -0
  247. package/dist/harnesses/codex/CodexSessionParser.js.map +1 -0
  248. package/dist/harnesses/codex/credentials.d.ts +15 -0
  249. package/dist/harnesses/codex/credentials.d.ts.map +1 -0
  250. package/dist/harnesses/codex/credentials.js +58 -0
  251. package/dist/harnesses/codex/credentials.js.map +1 -0
  252. package/dist/harnesses/codex/durable/CodexCliProbe.d.ts.map +1 -0
  253. package/dist/harnesses/codex/durable/CodexCliProbe.js.map +1 -0
  254. package/dist/harnesses/codex/durable/CodexPrintAgentService.d.ts.map +1 -0
  255. package/dist/harnesses/codex/durable/CodexPrintAgentService.js.map +1 -0
  256. package/dist/harnesses/codex/durable/CodexPrintRunner.d.ts.map +1 -0
  257. package/dist/harnesses/codex/durable/CodexPrintRunner.js.map +1 -0
  258. package/dist/harnesses/codex/durable/CodexStreamParser.d.ts.map +1 -0
  259. package/dist/harnesses/codex/durable/CodexStreamParser.js.map +1 -0
  260. package/dist/harnesses/codex/readiness.d.ts +3 -0
  261. package/dist/harnesses/codex/readiness.d.ts.map +1 -0
  262. package/dist/harnesses/codex/readiness.js +60 -0
  263. package/dist/harnesses/codex/readiness.js.map +1 -0
  264. package/dist/harnesses/copilot/CopilotAdapter.d.ts +36 -0
  265. package/dist/harnesses/copilot/CopilotAdapter.d.ts.map +1 -0
  266. package/dist/harnesses/copilot/CopilotAdapter.js +128 -0
  267. package/dist/harnesses/copilot/CopilotAdapter.js.map +1 -0
  268. package/dist/harnesses/copilot/CopilotAgentMapper.d.ts.map +1 -0
  269. package/dist/harnesses/copilot/CopilotAgentMapper.js +30 -0
  270. package/dist/harnesses/copilot/CopilotAgentMapper.js.map +1 -0
  271. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts +42 -0
  272. package/dist/harnesses/copilot/CopilotSessionLocator.d.ts.map +1 -0
  273. package/dist/harnesses/copilot/CopilotSessionLocator.js +126 -0
  274. package/dist/harnesses/copilot/CopilotSessionLocator.js.map +1 -0
  275. package/dist/harnesses/copilot/CopilotSessionParser.d.ts +62 -0
  276. package/dist/harnesses/copilot/CopilotSessionParser.d.ts.map +1 -0
  277. package/dist/harnesses/copilot/CopilotSessionParser.js +236 -0
  278. package/dist/harnesses/copilot/CopilotSessionParser.js.map +1 -0
  279. package/dist/harnesses/copilot/readiness.d.ts +3 -0
  280. package/dist/harnesses/copilot/readiness.d.ts.map +1 -0
  281. package/dist/harnesses/copilot/readiness.js +39 -0
  282. package/dist/harnesses/copilot/readiness.js.map +1 -0
  283. package/dist/harnesses/gemini/GeminiAgentMapper.d.ts.map +1 -0
  284. package/dist/harnesses/gemini/GeminiAgentMapper.js +30 -0
  285. package/dist/harnesses/gemini/GeminiAgentMapper.js.map +1 -0
  286. package/dist/harnesses/gemini/GeminiCliAdapter.d.ts +52 -0
  287. package/dist/harnesses/gemini/GeminiCliAdapter.d.ts.map +1 -0
  288. package/dist/harnesses/gemini/GeminiCliAdapter.js +196 -0
  289. package/dist/harnesses/gemini/GeminiCliAdapter.js.map +1 -0
  290. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts +72 -0
  291. package/dist/harnesses/gemini/GeminiSessionLocator.d.ts.map +1 -0
  292. package/dist/harnesses/gemini/GeminiSessionLocator.js +300 -0
  293. package/dist/harnesses/gemini/GeminiSessionLocator.js.map +1 -0
  294. package/dist/harnesses/gemini/GeminiSessionParser.d.ts +121 -0
  295. package/dist/harnesses/gemini/GeminiSessionParser.d.ts.map +1 -0
  296. package/dist/harnesses/gemini/GeminiSessionParser.js +272 -0
  297. package/dist/harnesses/gemini/GeminiSessionParser.js.map +1 -0
  298. package/dist/harnesses/gemini/fileSignature.d.ts +8 -0
  299. package/dist/harnesses/gemini/fileSignature.d.ts.map +1 -0
  300. package/dist/harnesses/gemini/fileSignature.js +9 -0
  301. package/dist/harnesses/gemini/fileSignature.js.map +1 -0
  302. package/dist/harnesses/grok/GrokAgentMapper.d.ts.map +1 -0
  303. package/dist/harnesses/grok/GrokAgentMapper.js +30 -0
  304. package/dist/harnesses/grok/GrokAgentMapper.js.map +1 -0
  305. package/dist/harnesses/grok/GrokCliAdapter.d.ts +36 -0
  306. package/dist/harnesses/grok/GrokCliAdapter.d.ts.map +1 -0
  307. package/dist/harnesses/grok/GrokCliAdapter.js +102 -0
  308. package/dist/harnesses/grok/GrokCliAdapter.js.map +1 -0
  309. package/dist/harnesses/grok/GrokSessionLocator.d.ts.map +1 -0
  310. package/dist/harnesses/grok/GrokSessionLocator.js +140 -0
  311. package/dist/harnesses/grok/GrokSessionLocator.js.map +1 -0
  312. package/dist/harnesses/grok/GrokSessionParser.d.ts +87 -0
  313. package/dist/harnesses/grok/GrokSessionParser.d.ts.map +1 -0
  314. package/dist/harnesses/grok/GrokSessionParser.js +185 -0
  315. package/dist/harnesses/grok/GrokSessionParser.js.map +1 -0
  316. package/dist/harnesses/index.d.ts +7 -0
  317. package/dist/harnesses/index.d.ts.map +1 -0
  318. package/dist/harnesses/index.js +27 -0
  319. package/dist/harnesses/index.js.map +1 -0
  320. package/dist/harnesses/kiro/KiroAdapter.d.ts +31 -0
  321. package/dist/harnesses/kiro/KiroAdapter.d.ts.map +1 -0
  322. package/dist/harnesses/kiro/KiroAdapter.js +125 -0
  323. package/dist/harnesses/kiro/KiroAdapter.js.map +1 -0
  324. package/dist/harnesses/kiro/KiroAgentMapper.d.ts +13 -0
  325. package/dist/harnesses/kiro/KiroAgentMapper.d.ts.map +1 -0
  326. package/dist/harnesses/kiro/KiroAgentMapper.js +29 -0
  327. package/dist/harnesses/kiro/KiroAgentMapper.js.map +1 -0
  328. package/dist/harnesses/kiro/KiroSessionLocator.d.ts +38 -0
  329. package/dist/harnesses/kiro/KiroSessionLocator.d.ts.map +1 -0
  330. package/dist/harnesses/kiro/KiroSessionLocator.js +95 -0
  331. package/dist/harnesses/kiro/KiroSessionLocator.js.map +1 -0
  332. package/dist/harnesses/kiro/KiroSessionParser.d.ts +81 -0
  333. package/dist/harnesses/kiro/KiroSessionParser.d.ts.map +1 -0
  334. package/dist/harnesses/kiro/KiroSessionParser.js +251 -0
  335. package/dist/harnesses/kiro/KiroSessionParser.js.map +1 -0
  336. package/dist/harnesses/opencode/OpenCodeAdapter.d.ts +29 -0
  337. package/dist/harnesses/opencode/OpenCodeAdapter.d.ts.map +1 -0
  338. package/dist/harnesses/opencode/OpenCodeAdapter.js +86 -0
  339. package/dist/harnesses/opencode/OpenCodeAdapter.js.map +1 -0
  340. package/dist/harnesses/opencode/OpenCodeAgentMapper.d.ts.map +1 -0
  341. package/dist/harnesses/opencode/OpenCodeAgentMapper.js +42 -0
  342. package/dist/harnesses/opencode/OpenCodeAgentMapper.js.map +1 -0
  343. package/dist/harnesses/opencode/OpenCodeSessionLocator.d.ts.map +1 -0
  344. package/dist/harnesses/opencode/OpenCodeSessionLocator.js +118 -0
  345. package/dist/harnesses/opencode/OpenCodeSessionLocator.js.map +1 -0
  346. package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts +16 -0
  347. package/dist/harnesses/opencode/OpenCodeSessionParser.d.ts.map +1 -0
  348. package/dist/harnesses/opencode/OpenCodeSessionParser.js +105 -0
  349. package/dist/harnesses/opencode/OpenCodeSessionParser.js.map +1 -0
  350. package/dist/harnesses/opencode/readiness.d.ts +3 -0
  351. package/dist/harnesses/opencode/readiness.d.ts.map +1 -0
  352. package/dist/harnesses/opencode/readiness.js +50 -0
  353. package/dist/harnesses/opencode/readiness.js.map +1 -0
  354. package/dist/harnesses/pi/PiAdapter.d.ts +30 -0
  355. package/dist/harnesses/pi/PiAdapter.d.ts.map +1 -0
  356. package/dist/harnesses/pi/PiAdapter.js +167 -0
  357. package/dist/harnesses/pi/PiAdapter.js.map +1 -0
  358. package/dist/harnesses/pi/PiAgentMapper.d.ts.map +1 -0
  359. package/dist/harnesses/pi/PiAgentMapper.js +30 -0
  360. package/dist/harnesses/pi/PiAgentMapper.js.map +1 -0
  361. package/dist/harnesses/pi/PiSessionLocator.d.ts +61 -0
  362. package/dist/harnesses/pi/PiSessionLocator.d.ts.map +1 -0
  363. package/dist/harnesses/pi/PiSessionLocator.js +212 -0
  364. package/dist/harnesses/pi/PiSessionLocator.js.map +1 -0
  365. package/dist/harnesses/pi/PiSessionParser.d.ts +88 -0
  366. package/dist/harnesses/pi/PiSessionParser.d.ts.map +1 -0
  367. package/dist/harnesses/pi/PiSessionParser.js +318 -0
  368. package/dist/harnesses/pi/PiSessionParser.js.map +1 -0
  369. package/dist/harnesses/pi/PiSessionTracker.d.ts.map +1 -0
  370. package/dist/harnesses/pi/PiSessionTracker.js +69 -0
  371. package/dist/harnesses/pi/PiSessionTracker.js.map +1 -0
  372. package/dist/harnesses/pi/credentials.d.ts +22 -0
  373. package/dist/harnesses/pi/credentials.d.ts.map +1 -0
  374. package/dist/harnesses/pi/credentials.js +98 -0
  375. package/dist/harnesses/pi/credentials.js.map +1 -0
  376. package/dist/harnesses/pi/durable/PiCliProbe.d.ts.map +1 -0
  377. package/dist/harnesses/pi/durable/PiCliProbe.js.map +1 -0
  378. package/dist/harnesses/pi/durable/PiPrintAgentService.d.ts.map +1 -0
  379. package/dist/harnesses/pi/durable/PiPrintAgentService.js.map +1 -0
  380. package/dist/harnesses/pi/durable/PiPrintProtocol.d.ts.map +1 -0
  381. package/dist/harnesses/pi/durable/PiPrintProtocol.js.map +1 -0
  382. package/dist/harnesses/pi/durable/PiPrintRunner.d.ts.map +1 -0
  383. package/dist/harnesses/pi/durable/PiPrintRunner.js.map +1 -0
  384. package/dist/harnesses/pi/durable/PiStreamParser.d.ts.map +1 -0
  385. package/dist/harnesses/pi/durable/PiStreamParser.js.map +1 -0
  386. package/dist/harnesses/pi/readiness.d.ts +3 -0
  387. package/dist/harnesses/pi/readiness.d.ts.map +1 -0
  388. package/dist/harnesses/pi/readiness.js +96 -0
  389. package/dist/harnesses/pi/readiness.js.map +1 -0
  390. package/dist/harnesses/readiness/AgentReadiness.d.ts +6 -0
  391. package/dist/harnesses/readiness/AgentReadiness.d.ts.map +1 -0
  392. package/dist/harnesses/readiness/AgentReadiness.js +68 -0
  393. package/dist/harnesses/readiness/AgentReadiness.js.map +1 -0
  394. package/dist/harnesses/readiness/checks.d.ts +31 -0
  395. package/dist/harnesses/readiness/checks.d.ts.map +1 -0
  396. package/dist/harnesses/readiness/checks.js +270 -0
  397. package/dist/harnesses/readiness/checks.js.map +1 -0
  398. package/dist/harnesses/readiness/types.d.ts +76 -0
  399. package/dist/harnesses/readiness/types.d.ts.map +1 -0
  400. package/dist/harnesses/readiness/types.js +4 -0
  401. package/dist/harnesses/readiness/types.js.map +1 -0
  402. package/dist/harnesses/runtimeProfiles.d.ts +11 -0
  403. package/dist/harnesses/runtimeProfiles.d.ts.map +1 -0
  404. package/dist/harnesses/runtimeProfiles.js +99 -0
  405. package/dist/harnesses/runtimeProfiles.js.map +1 -0
  406. package/dist/harnesses/shared.d.ts +41 -0
  407. package/dist/harnesses/shared.d.ts.map +1 -0
  408. package/dist/harnesses/shared.js +71 -0
  409. package/dist/harnesses/shared.js.map +1 -0
  410. package/dist/index.d.ts +21 -46
  411. package/dist/index.d.ts.map +1 -1
  412. package/dist/index.js +14 -27
  413. package/dist/index.js.map +1 -1
  414. package/dist/runtime/ManagedAgentRuntime.d.ts +3 -3
  415. package/dist/runtime/ManagedAgentRuntime.d.ts.map +1 -1
  416. package/dist/runtime/ManagedAgentRuntime.js +6 -20
  417. package/dist/runtime/ManagedAgentRuntime.js.map +1 -1
  418. package/dist/runtime/herdr/HerdrAgentDiscovery.d.ts.map +1 -1
  419. package/dist/runtime/herdr/HerdrAgentDiscovery.js +2 -43
  420. package/dist/runtime/herdr/HerdrAgentDiscovery.js.map +1 -1
  421. package/dist/runtime/tmux/PidPolling.d.ts +1 -1
  422. package/dist/runtime/tmux/PidPolling.d.ts.map +1 -1
  423. package/dist/runtime/tmux/PidPolling.js.map +1 -1
  424. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts +1 -1
  425. package/dist/runtime/tmux/TmuxAgentRuntime.d.ts.map +1 -1
  426. package/dist/runtime/tmux/TmuxAgentRuntime.js +1 -1
  427. package/dist/runtime/tmux/TmuxAgentRuntime.js.map +1 -1
  428. package/dist/runtime/tmux/TmuxManager.d.ts +12 -0
  429. package/dist/runtime/tmux/TmuxManager.d.ts.map +1 -0
  430. package/dist/runtime/tmux/TmuxManager.js +116 -0
  431. package/dist/runtime/tmux/TmuxManager.js.map +1 -0
  432. package/dist/runtime/types.d.ts +1 -1
  433. package/dist/runtime/types.d.ts.map +1 -1
  434. package/dist/runtime/types.js.map +1 -1
  435. package/dist/terminal/TerminalFocusManager.d.ts +4 -32
  436. package/dist/terminal/TerminalFocusManager.d.ts.map +1 -1
  437. package/dist/terminal/TerminalFocusManager.js +17 -267
  438. package/dist/terminal/TerminalFocusManager.js.map +1 -1
  439. package/dist/terminal/TtyWriter.d.ts +1 -44
  440. package/dist/terminal/TtyWriter.d.ts.map +1 -1
  441. package/dist/terminal/TtyWriter.js +11 -347
  442. package/dist/terminal/TtyWriter.js.map +1 -1
  443. package/dist/terminal/backends/index.d.ts +5 -0
  444. package/dist/terminal/backends/index.d.ts.map +1 -0
  445. package/dist/terminal/backends/index.js +19 -0
  446. package/dist/terminal/backends/index.js.map +1 -0
  447. package/dist/terminal/backends/iterm2.d.ts +3 -0
  448. package/dist/terminal/backends/iterm2.d.ts.map +1 -0
  449. package/dist/terminal/backends/iterm2.js +135 -0
  450. package/dist/terminal/backends/iterm2.js.map +1 -0
  451. package/dist/terminal/backends/shared.d.ts +7 -0
  452. package/dist/terminal/backends/shared.d.ts.map +1 -0
  453. package/dist/terminal/backends/shared.js +35 -0
  454. package/dist/terminal/backends/shared.js.map +1 -0
  455. package/dist/terminal/backends/terminal-app.d.ts +3 -0
  456. package/dist/terminal/backends/terminal-app.d.ts.map +1 -0
  457. package/dist/terminal/backends/terminal-app.js +129 -0
  458. package/dist/terminal/backends/terminal-app.js.map +1 -0
  459. package/dist/terminal/backends/tmux.d.ts +3 -0
  460. package/dist/terminal/backends/tmux.d.ts.map +1 -0
  461. package/dist/terminal/backends/tmux.js +76 -0
  462. package/dist/terminal/backends/tmux.js.map +1 -0
  463. package/dist/terminal/backends/wezterm.d.ts +3 -0
  464. package/dist/terminal/backends/wezterm.d.ts.map +1 -0
  465. package/dist/terminal/backends/wezterm.js +71 -0
  466. package/dist/terminal/backends/wezterm.js.map +1 -0
  467. package/dist/terminal/types.d.ts +21 -0
  468. package/dist/terminal/types.d.ts.map +1 -0
  469. package/dist/terminal/types.js +10 -0
  470. package/dist/terminal/types.js.map +1 -0
  471. package/dist/utils/IncrementalJsonlSummary.d.ts +100 -0
  472. package/dist/utils/IncrementalJsonlSummary.d.ts.map +1 -0
  473. package/dist/utils/IncrementalJsonlSummary.js +209 -0
  474. package/dist/utils/IncrementalJsonlSummary.js.map +1 -0
  475. package/dist/utils/jsonlTail.d.ts +73 -0
  476. package/dist/utils/jsonlTail.d.ts.map +1 -0
  477. package/dist/utils/jsonlTail.js +238 -0
  478. package/dist/utils/jsonlTail.js.map +1 -0
  479. package/dist/utils/matching.d.ts +2 -0
  480. package/dist/utils/matching.d.ts.map +1 -1
  481. package/dist/utils/matching.js +3 -2
  482. package/dist/utils/matching.js.map +1 -1
  483. package/dist/utils/matchingConstants.d.ts +15 -0
  484. package/dist/utils/matchingConstants.d.ts.map +1 -0
  485. package/dist/utils/matchingConstants.js +14 -0
  486. package/dist/utils/matchingConstants.js.map +1 -0
  487. package/dist/utils/process.d.ts +38 -2
  488. package/dist/utils/process.d.ts.map +1 -1
  489. package/dist/utils/process.js +131 -43
  490. package/dist/utils/process.js.map +1 -1
  491. package/package.json +2 -1
  492. package/scripts/benchmark-cold-start.mjs +350 -0
  493. package/src/AgentManager.ts +27 -6
  494. package/src/__tests__/AgentManager.test.ts +141 -3
  495. package/src/__tests__/adapters/IncrementalSessionRefresh.test.ts +437 -0
  496. package/src/__tests__/adapters/adapterProcessImports.test.ts +58 -0
  497. package/src/__tests__/adapters/adapterSnapshotCandidates.test.ts +243 -0
  498. package/src/__tests__/capacity/anthropic.test.ts +105 -0
  499. package/src/__tests__/capacity/boundaries.test.ts +36 -0
  500. package/src/__tests__/capacity/claude.test.ts +3 -8
  501. package/src/__tests__/capacity/codex.test.ts +12 -35
  502. package/src/__tests__/capacity/fixtures/openai-codex-auth.json +1 -1
  503. package/src/__tests__/capacity/openai.test.ts +20 -30
  504. package/src/__tests__/capacity/wham.test.ts +1 -1
  505. package/src/__tests__/capacity/zai.test.ts +27 -62
  506. package/src/__tests__/harnesses/BoundedSummarySkip.test.ts +496 -0
  507. package/src/__tests__/harnesses/SessionSummaryEquivalence.test.ts +726 -0
  508. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.subprocess.test.ts +133 -0
  509. package/src/__tests__/harnesses/antigravity/AntigravityCliAdapter.test.ts +396 -0
  510. package/src/__tests__/harnesses/builtinAdapters.test.ts +33 -0
  511. package/src/__tests__/harnesses/claude/ClaudeAgentMapper.test.ts +84 -0
  512. package/src/__tests__/harnesses/claude/ClaudeCodeAdapter.test.ts +1793 -0
  513. package/src/__tests__/harnesses/claude/ClaudeSessionLocator.test.ts +423 -0
  514. package/src/__tests__/harnesses/claude/ClaudeSessionParser.test.ts +300 -0
  515. package/src/__tests__/harnesses/claude/durable/ClaudeCliProbe.test.ts +34 -0
  516. package/src/__tests__/harnesses/claude/durable/ClaudePrintAgent.integration.test.ts +61 -0
  517. package/src/__tests__/harnesses/claude/durable/ClaudePrintAgentService.test.ts +129 -0
  518. package/src/__tests__/harnesses/claude/durable/ClaudePrintRunner.test.ts +152 -0
  519. package/src/__tests__/harnesses/codex/CodexAdapter.test.ts +652 -0
  520. package/src/__tests__/harnesses/codex/CodexSessionLocator.test.ts +419 -0
  521. package/src/__tests__/harnesses/codex/CodexSessionMapping.test.ts +63 -0
  522. package/src/__tests__/harnesses/codex/CodexSessionParser.test.ts +192 -0
  523. package/src/__tests__/harnesses/codex/durable/CodexCliProbe.test.ts +80 -0
  524. package/src/__tests__/harnesses/codex/durable/CodexDurableAgentRepository.test.ts +65 -0
  525. package/src/__tests__/harnesses/codex/durable/CodexPrintAgent.integration.test.ts +104 -0
  526. package/src/__tests__/harnesses/codex/durable/CodexPrintAgentService.test.ts +201 -0
  527. package/src/__tests__/harnesses/codex/durable/CodexPrintRunner.test.ts +299 -0
  528. package/src/__tests__/harnesses/copilot/CopilotAdapter.test.ts +614 -0
  529. package/src/__tests__/harnesses/copilot/CopilotRefreshIO.test.ts +270 -0
  530. package/src/__tests__/harnesses/gemini/GeminiCliAdapter.test.ts +1324 -0
  531. package/src/__tests__/harnesses/gemini/GeminiSessionJsonl.test.ts +402 -0
  532. package/src/__tests__/harnesses/gemini/GeminiSessionLocator.test.ts +396 -0
  533. package/src/__tests__/harnesses/grok/GrokAgentMapper.test.ts +57 -0
  534. package/src/__tests__/harnesses/grok/GrokCliAdapter.test.ts +376 -0
  535. package/src/__tests__/harnesses/grok/GrokIncrementalRefresh.test.ts +170 -0
  536. package/src/__tests__/harnesses/grok/GrokSessionLocator.test.ts +106 -0
  537. package/src/__tests__/harnesses/grok/GrokSessionParser.test.ts +230 -0
  538. package/src/__tests__/harnesses/kiro/KiroAdapter.test.ts +552 -0
  539. package/src/__tests__/harnesses/opencode/OpenCodeAdapter.test.ts +215 -0
  540. package/src/__tests__/harnesses/opencode/OpenCodeAgentMapper.test.ts +83 -0
  541. package/src/__tests__/harnesses/opencode/OpenCodeSessionLocator.test.ts +84 -0
  542. package/src/__tests__/harnesses/opencode/OpenCodeSessionParser.test.ts +148 -0
  543. package/src/__tests__/harnesses/pi/PiAdapter.test.ts +325 -0
  544. package/src/__tests__/harnesses/pi/PiDiscoveryIO.test.ts +337 -0
  545. package/src/__tests__/harnesses/pi/PiSessionParser.test.ts +280 -0
  546. package/src/__tests__/harnesses/pi/PiSessionTracker.test.ts +79 -0
  547. package/src/__tests__/harnesses/pi/durable/PiCliProbe.test.ts +50 -0
  548. package/src/__tests__/harnesses/pi/durable/PiPrintAgentService.test.ts +138 -0
  549. package/src/__tests__/harnesses/pi/durable/PiPrintProtocol.test.ts +71 -0
  550. package/src/__tests__/harnesses/pi/durable/PiPrintRunner.test.ts +252 -0
  551. package/src/__tests__/harnesses/pi/durable/PiStreamParser.test.ts +26 -0
  552. package/src/__tests__/harnesses/readiness/AgentReadiness.test.ts +285 -0
  553. package/src/__tests__/harnesses/runtimeProfiles.test.ts +110 -0
  554. package/src/__tests__/print/DurableAgent.test.ts +4 -13
  555. package/src/__tests__/print/DurableAgentRepository.test.ts +1 -13
  556. package/src/__tests__/runtime/ManagedAgentRuntime.test.ts +31 -1
  557. package/src/__tests__/terminal/TmuxManager.test.ts +1 -1
  558. package/src/__tests__/utils/IncrementalJsonlSummary.test.ts +414 -0
  559. package/src/__tests__/utils/conversationTail.bench.test.ts +193 -0
  560. package/src/__tests__/utils/conversationTailParity.test.ts +365 -0
  561. package/src/__tests__/utils/jsonlTail.test.ts +317 -0
  562. package/src/__tests__/utils/matchingConstants.test.ts +40 -0
  563. package/src/__tests__/utils/process.test.ts +254 -0
  564. package/src/adapters/AgentAdapter.ts +37 -14
  565. package/src/capacity/index.ts +29 -23
  566. package/src/capacity/providers/anthropic.ts +198 -0
  567. package/src/capacity/providers/openai-platform.ts +150 -0
  568. package/src/capacity/providers/openai-subscription.ts +162 -0
  569. package/src/capacity/providers/zai.ts +155 -0
  570. package/src/capacity/sources/claude.ts +30 -0
  571. package/src/capacity/sources/codex.ts +262 -0
  572. package/src/capacity/sources/pi.ts +131 -0
  573. package/src/capacity/types.ts +3 -0
  574. package/src/harnesses/antigravity/AntigravityAgentMapper.ts +34 -0
  575. package/src/harnesses/antigravity/AntigravityCliAdapter.ts +126 -0
  576. package/src/harnesses/antigravity/AntigravitySessionLocator.ts +75 -0
  577. package/src/harnesses/antigravity/AntigravitySessionParser.ts +252 -0
  578. package/src/harnesses/claude/ClaudeAgentMapper.ts +55 -0
  579. package/src/harnesses/claude/ClaudeCodeAdapter.ts +175 -0
  580. package/src/harnesses/claude/ClaudeSessionLocator.ts +358 -0
  581. package/src/harnesses/claude/ClaudeSessionParser.ts +524 -0
  582. package/src/harnesses/claude/credentials.ts +122 -0
  583. package/src/harnesses/claude/readiness.ts +69 -0
  584. package/src/harnesses/codex/CodexAdapter.ts +337 -0
  585. package/src/harnesses/codex/CodexAgentMapper.ts +26 -0
  586. package/src/harnesses/codex/CodexSessionLocator.ts +509 -0
  587. package/src/harnesses/codex/CodexSessionMapping.ts +89 -0
  588. package/src/harnesses/codex/CodexSessionParser.ts +462 -0
  589. package/src/harnesses/codex/credentials.ts +81 -0
  590. package/src/harnesses/codex/readiness.ts +72 -0
  591. package/src/harnesses/copilot/CopilotAdapter.ts +161 -0
  592. package/src/harnesses/copilot/CopilotAgentMapper.ts +27 -0
  593. package/src/harnesses/copilot/CopilotSessionLocator.ts +161 -0
  594. package/src/harnesses/copilot/CopilotSessionParser.ts +380 -0
  595. package/src/harnesses/copilot/readiness.ts +33 -0
  596. package/src/harnesses/gemini/GeminiAgentMapper.ts +27 -0
  597. package/src/harnesses/gemini/GeminiCliAdapter.ts +272 -0
  598. package/src/harnesses/gemini/GeminiSessionLocator.ts +394 -0
  599. package/src/harnesses/gemini/GeminiSessionParser.ts +395 -0
  600. package/src/harnesses/gemini/fileSignature.ts +10 -0
  601. package/src/harnesses/grok/GrokAgentMapper.ts +32 -0
  602. package/src/harnesses/grok/GrokCliAdapter.ts +126 -0
  603. package/src/harnesses/grok/GrokSessionLocator.ts +179 -0
  604. package/src/harnesses/grok/GrokSessionParser.ts +251 -0
  605. package/src/harnesses/index.ts +28 -0
  606. package/src/harnesses/kiro/KiroAdapter.ts +143 -0
  607. package/src/harnesses/kiro/KiroAgentMapper.ts +34 -0
  608. package/src/harnesses/kiro/KiroSessionLocator.ts +143 -0
  609. package/src/harnesses/kiro/KiroSessionParser.ts +376 -0
  610. package/src/harnesses/opencode/OpenCodeAdapter.ts +110 -0
  611. package/src/harnesses/opencode/OpenCodeAgentMapper.ts +51 -0
  612. package/src/harnesses/opencode/OpenCodeSessionLocator.ts +151 -0
  613. package/src/harnesses/opencode/OpenCodeSessionParser.ts +146 -0
  614. package/src/harnesses/opencode/readiness.ts +48 -0
  615. package/src/harnesses/pi/PiAdapter.ts +197 -0
  616. package/src/harnesses/pi/PiAgentMapper.ts +27 -0
  617. package/src/harnesses/pi/PiSessionLocator.ts +288 -0
  618. package/src/harnesses/pi/PiSessionParser.ts +488 -0
  619. package/src/harnesses/pi/PiSessionTracker.ts +87 -0
  620. package/src/harnesses/pi/credentials.ts +129 -0
  621. package/src/harnesses/pi/readiness.ts +104 -0
  622. package/src/harnesses/readiness/AgentReadiness.ts +87 -0
  623. package/src/harnesses/readiness/checks.ts +336 -0
  624. package/src/harnesses/readiness/types.ts +90 -0
  625. package/src/harnesses/runtimeProfiles.ts +103 -0
  626. package/src/harnesses/shared.ts +119 -0
  627. package/src/index.ts +20 -131
  628. package/src/runtime/ManagedAgentRuntime.ts +7 -22
  629. package/src/runtime/herdr/HerdrAgentDiscovery.ts +3 -19
  630. package/src/runtime/tmux/PidPolling.ts +1 -1
  631. package/src/runtime/tmux/TmuxAgentRuntime.ts +1 -1
  632. package/src/runtime/tmux/TmuxManager.ts +102 -0
  633. package/src/runtime/types.ts +1 -1
  634. package/src/terminal/TerminalFocusManager.ts +19 -292
  635. package/src/terminal/TtyWriter.ts +16 -336
  636. package/src/terminal/backends/index.ts +21 -0
  637. package/src/terminal/backends/iterm2.ts +126 -0
  638. package/src/terminal/backends/shared.ts +42 -0
  639. package/src/terminal/backends/terminal-app.ts +122 -0
  640. package/src/terminal/backends/tmux.ts +62 -0
  641. package/src/terminal/backends/wezterm.ts +65 -0
  642. package/src/terminal/types.ts +22 -0
  643. package/src/utils/IncrementalJsonlSummary.ts +306 -0
  644. package/src/utils/jsonlTail.ts +349 -0
  645. package/src/utils/matching.ts +3 -3
  646. package/src/utils/matchingConstants.ts +15 -0
  647. package/src/utils/process.ts +189 -45
  648. package/dist/__tests__/adapters/AntigravityCliAdapter.test.js +0 -381
  649. package/dist/__tests__/adapters/AntigravityCliAdapter.test.js.map +0 -1
  650. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js +0 -1853
  651. package/dist/__tests__/adapters/ClaudeCodeAdapter.test.js.map +0 -1
  652. package/dist/__tests__/adapters/CodexAdapter.test.js +0 -391
  653. package/dist/__tests__/adapters/CodexAdapter.test.js.map +0 -1
  654. package/dist/__tests__/adapters/KiroAdapter.test.js +0 -607
  655. package/dist/__tests__/adapters/KiroAdapter.test.js.map +0 -1
  656. package/dist/__tests__/durable/CodexCliProbe.test.js +0 -129
  657. package/dist/__tests__/durable/CodexCliProbe.test.js.map +0 -1
  658. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js +0 -84
  659. package/dist/__tests__/durable/CodexDurableAgentRepository.test.js.map +0 -1
  660. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js +0 -126
  661. package/dist/__tests__/durable/CodexPrintAgent.integration.test.js.map +0 -1
  662. package/dist/__tests__/durable/CodexPrintAgentService.test.js +0 -271
  663. package/dist/__tests__/durable/CodexPrintAgentService.test.js.map +0 -1
  664. package/dist/__tests__/durable/CodexPrintRunner.test.js +0 -393
  665. package/dist/__tests__/durable/CodexPrintRunner.test.js.map +0 -1
  666. package/dist/__tests__/print/ClaudeCliProbe.test.js +0 -49
  667. package/dist/__tests__/print/ClaudeCliProbe.test.js.map +0 -1
  668. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js +0 -75
  669. package/dist/__tests__/print/ClaudePrintAgent.integration.test.js.map +0 -1
  670. package/dist/__tests__/print/ClaudePrintAgentService.test.js +0 -173
  671. package/dist/__tests__/print/ClaudePrintAgentService.test.js.map +0 -1
  672. package/dist/__tests__/print/ClaudePrintRunner.test.js +0 -181
  673. package/dist/__tests__/print/ClaudePrintRunner.test.js.map +0 -1
  674. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js +0 -79
  675. package/dist/__tests__/providers/claude/ClaudeAgentMapper.test.js.map +0 -1
  676. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js +0 -436
  677. package/dist/__tests__/providers/claude/ClaudeSessionLocator.test.js.map +0 -1
  678. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js +0 -194
  679. package/dist/__tests__/providers/codex/CodexSessionLocator.test.js.map +0 -1
  680. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js +0 -86
  681. package/dist/__tests__/providers/codex/CodexSessionMapping.test.js.map +0 -1
  682. package/dist/__tests__/providers/codex/CodexSessionParser.test.js +0 -254
  683. package/dist/__tests__/providers/codex/CodexSessionParser.test.js.map +0 -1
  684. package/dist/__tests__/providers/copilot/CopilotAdapter.test.js +0 -659
  685. package/dist/__tests__/providers/copilot/CopilotAdapter.test.js.map +0 -1
  686. package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js +0 -1434
  687. package/dist/__tests__/providers/gemini/GeminiCliAdapter.test.js.map +0 -1
  688. package/dist/__tests__/providers/grok/GrokAgentMapper.test.js +0 -56
  689. package/dist/__tests__/providers/grok/GrokAgentMapper.test.js.map +0 -1
  690. package/dist/__tests__/providers/grok/GrokCliAdapter.test.js +0 -421
  691. package/dist/__tests__/providers/grok/GrokCliAdapter.test.js.map +0 -1
  692. package/dist/__tests__/providers/grok/GrokSessionLocator.test.js +0 -133
  693. package/dist/__tests__/providers/grok/GrokSessionLocator.test.js.map +0 -1
  694. package/dist/__tests__/providers/opencode/OpenCodeAdapter.test.js +0 -213
  695. package/dist/__tests__/providers/opencode/OpenCodeAdapter.test.js.map +0 -1
  696. package/dist/__tests__/providers/opencode/OpenCodeAgentMapper.test.js +0 -89
  697. package/dist/__tests__/providers/opencode/OpenCodeAgentMapper.test.js.map +0 -1
  698. package/dist/__tests__/providers/opencode/OpenCodeSessionLocator.test.js +0 -94
  699. package/dist/__tests__/providers/opencode/OpenCodeSessionLocator.test.js.map +0 -1
  700. package/dist/__tests__/providers/opencode/OpenCodeSessionParser.test.js +0 -147
  701. package/dist/__tests__/providers/opencode/OpenCodeSessionParser.test.js.map +0 -1
  702. package/dist/__tests__/providers/pi/PiAdapter.test.js +0 -367
  703. package/dist/__tests__/providers/pi/PiAdapter.test.js.map +0 -1
  704. package/dist/__tests__/providers/pi/PiSessionParser.test.js +0 -246
  705. package/dist/__tests__/providers/pi/PiSessionParser.test.js.map +0 -1
  706. package/dist/__tests__/providers/pi/PiSessionTracker.test.js +0 -108
  707. package/dist/__tests__/providers/pi/PiSessionTracker.test.js.map +0 -1
  708. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js +0 -76
  709. package/dist/__tests__/providers/pi/durable/PiCliProbe.test.js.map +0 -1
  710. package/dist/__tests__/providers/pi/durable/PiDurableAgentRepository.test.js.map +0 -1
  711. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js +0 -202
  712. package/dist/__tests__/providers/pi/durable/PiPrintAgentService.test.js.map +0 -1
  713. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js +0 -119
  714. package/dist/__tests__/providers/pi/durable/PiPrintProtocol.test.js.map +0 -1
  715. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js +0 -386
  716. package/dist/__tests__/providers/pi/durable/PiPrintRunner.test.js.map +0 -1
  717. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js +0 -34
  718. package/dist/__tests__/providers/pi/durable/PiStreamParser.test.js.map +0 -1
  719. package/dist/__tests__/readiness/AgentReadiness.test.js +0 -301
  720. package/dist/__tests__/readiness/AgentReadiness.test.js.map +0 -1
  721. package/dist/__tests__/utils/ClaudeSessionParser.test.js +0 -314
  722. package/dist/__tests__/utils/ClaudeSessionParser.test.js.map +0 -1
  723. package/dist/__tests__/utils/agents.test.js +0 -29
  724. package/dist/__tests__/utils/agents.test.js.map +0 -1
  725. package/dist/adapters/AntigravityCliAdapter.d.ts +0 -57
  726. package/dist/adapters/AntigravityCliAdapter.d.ts.map +0 -1
  727. package/dist/adapters/AntigravityCliAdapter.js +0 -273
  728. package/dist/adapters/AntigravityCliAdapter.js.map +0 -1
  729. package/dist/adapters/KiroAdapter.d.ts +0 -46
  730. package/dist/adapters/KiroAdapter.d.ts.map +0 -1
  731. package/dist/adapters/KiroAdapter.js +0 -344
  732. package/dist/adapters/KiroAdapter.js.map +0 -1
  733. package/dist/adapters/index.d.ts +0 -12
  734. package/dist/adapters/index.d.ts.map +0 -1
  735. package/dist/adapters/index.js +0 -12
  736. package/dist/adapters/index.js.map +0 -1
  737. package/dist/capacity/claude.d.ts +0 -17
  738. package/dist/capacity/claude.d.ts.map +0 -1
  739. package/dist/capacity/claude.js +0 -271
  740. package/dist/capacity/claude.js.map +0 -1
  741. package/dist/capacity/codex.d.ts +0 -36
  742. package/dist/capacity/codex.d.ts.map +0 -1
  743. package/dist/capacity/codex.js +0 -280
  744. package/dist/capacity/codex.js.map +0 -1
  745. package/dist/capacity/openai.d.ts +0 -48
  746. package/dist/capacity/openai.d.ts.map +0 -1
  747. package/dist/capacity/openai.js +0 -312
  748. package/dist/capacity/openai.js.map +0 -1
  749. package/dist/capacity/wham.d.ts +0 -16
  750. package/dist/capacity/wham.d.ts.map +0 -1
  751. package/dist/capacity/wham.js +0 -66
  752. package/dist/capacity/wham.js.map +0 -1
  753. package/dist/capacity/zai.d.ts +0 -14
  754. package/dist/capacity/zai.d.ts.map +0 -1
  755. package/dist/capacity/zai.js +0 -203
  756. package/dist/capacity/zai.js.map +0 -1
  757. package/dist/providers/claude/ClaudeAgentMapper.d.ts.map +0 -1
  758. package/dist/providers/claude/ClaudeAgentMapper.js +0 -42
  759. package/dist/providers/claude/ClaudeAgentMapper.js.map +0 -1
  760. package/dist/providers/claude/ClaudeCodeAdapter.d.ts +0 -31
  761. package/dist/providers/claude/ClaudeCodeAdapter.d.ts.map +0 -1
  762. package/dist/providers/claude/ClaudeCodeAdapter.js +0 -132
  763. package/dist/providers/claude/ClaudeCodeAdapter.js.map +0 -1
  764. package/dist/providers/claude/ClaudeSessionLocator.d.ts.map +0 -1
  765. package/dist/providers/claude/ClaudeSessionLocator.js +0 -260
  766. package/dist/providers/claude/ClaudeSessionLocator.js.map +0 -1
  767. package/dist/providers/claude/ClaudeSessionParser.d.ts +0 -114
  768. package/dist/providers/claude/ClaudeSessionParser.d.ts.map +0 -1
  769. package/dist/providers/claude/ClaudeSessionParser.js +0 -309
  770. package/dist/providers/claude/ClaudeSessionParser.js.map +0 -1
  771. package/dist/providers/claude/durable/ClaudeCliProbe.d.ts.map +0 -1
  772. package/dist/providers/claude/durable/ClaudeCliProbe.js.map +0 -1
  773. package/dist/providers/claude/durable/ClaudePrintAgentService.d.ts.map +0 -1
  774. package/dist/providers/claude/durable/ClaudePrintAgentService.js.map +0 -1
  775. package/dist/providers/claude/durable/ClaudePrintRunner.d.ts.map +0 -1
  776. package/dist/providers/claude/durable/ClaudePrintRunner.js.map +0 -1
  777. package/dist/providers/claude/durable/ClaudeStreamParser.d.ts.map +0 -1
  778. package/dist/providers/claude/durable/ClaudeStreamParser.js.map +0 -1
  779. package/dist/providers/codex/CodexAdapter.d.ts +0 -28
  780. package/dist/providers/codex/CodexAdapter.d.ts.map +0 -1
  781. package/dist/providers/codex/CodexAdapter.js +0 -170
  782. package/dist/providers/codex/CodexAdapter.js.map +0 -1
  783. package/dist/providers/codex/CodexAgentMapper.d.ts.map +0 -1
  784. package/dist/providers/codex/CodexAgentMapper.js +0 -35
  785. package/dist/providers/codex/CodexAgentMapper.js.map +0 -1
  786. package/dist/providers/codex/CodexSessionLocator.d.ts +0 -44
  787. package/dist/providers/codex/CodexSessionLocator.d.ts.map +0 -1
  788. package/dist/providers/codex/CodexSessionLocator.js +0 -207
  789. package/dist/providers/codex/CodexSessionLocator.js.map +0 -1
  790. package/dist/providers/codex/CodexSessionMapping.d.ts.map +0 -1
  791. package/dist/providers/codex/CodexSessionMapping.js +0 -68
  792. package/dist/providers/codex/CodexSessionMapping.js.map +0 -1
  793. package/dist/providers/codex/CodexSessionParser.d.ts +0 -58
  794. package/dist/providers/codex/CodexSessionParser.d.ts.map +0 -1
  795. package/dist/providers/codex/CodexSessionParser.js +0 -262
  796. package/dist/providers/codex/CodexSessionParser.js.map +0 -1
  797. package/dist/providers/codex/durable/CodexCliProbe.d.ts.map +0 -1
  798. package/dist/providers/codex/durable/CodexCliProbe.js.map +0 -1
  799. package/dist/providers/codex/durable/CodexPrintAgentService.d.ts.map +0 -1
  800. package/dist/providers/codex/durable/CodexPrintAgentService.js.map +0 -1
  801. package/dist/providers/codex/durable/CodexPrintRunner.d.ts.map +0 -1
  802. package/dist/providers/codex/durable/CodexPrintRunner.js.map +0 -1
  803. package/dist/providers/codex/durable/CodexStreamParser.d.ts.map +0 -1
  804. package/dist/providers/codex/durable/CodexStreamParser.js.map +0 -1
  805. package/dist/providers/copilot/CopilotAdapter.d.ts +0 -35
  806. package/dist/providers/copilot/CopilotAdapter.d.ts.map +0 -1
  807. package/dist/providers/copilot/CopilotAdapter.js +0 -123
  808. package/dist/providers/copilot/CopilotAdapter.js.map +0 -1
  809. package/dist/providers/copilot/CopilotAgentMapper.d.ts.map +0 -1
  810. package/dist/providers/copilot/CopilotAgentMapper.js +0 -37
  811. package/dist/providers/copilot/CopilotAgentMapper.js.map +0 -1
  812. package/dist/providers/copilot/CopilotSessionLocator.d.ts +0 -20
  813. package/dist/providers/copilot/CopilotSessionLocator.d.ts.map +0 -1
  814. package/dist/providers/copilot/CopilotSessionLocator.js +0 -49
  815. package/dist/providers/copilot/CopilotSessionLocator.js.map +0 -1
  816. package/dist/providers/copilot/CopilotSessionParser.d.ts +0 -30
  817. package/dist/providers/copilot/CopilotSessionParser.d.ts.map +0 -1
  818. package/dist/providers/copilot/CopilotSessionParser.js +0 -181
  819. package/dist/providers/copilot/CopilotSessionParser.js.map +0 -1
  820. package/dist/providers/gemini/GeminiAgentMapper.d.ts.map +0 -1
  821. package/dist/providers/gemini/GeminiAgentMapper.js +0 -37
  822. package/dist/providers/gemini/GeminiAgentMapper.js.map +0 -1
  823. package/dist/providers/gemini/GeminiCliAdapter.d.ts +0 -53
  824. package/dist/providers/gemini/GeminiCliAdapter.d.ts.map +0 -1
  825. package/dist/providers/gemini/GeminiCliAdapter.js +0 -197
  826. package/dist/providers/gemini/GeminiCliAdapter.js.map +0 -1
  827. package/dist/providers/gemini/GeminiSessionLocator.d.ts +0 -30
  828. package/dist/providers/gemini/GeminiSessionLocator.d.ts.map +0 -1
  829. package/dist/providers/gemini/GeminiSessionLocator.js +0 -142
  830. package/dist/providers/gemini/GeminiSessionLocator.js.map +0 -1
  831. package/dist/providers/gemini/GeminiSessionParser.d.ts +0 -94
  832. package/dist/providers/gemini/GeminiSessionParser.d.ts.map +0 -1
  833. package/dist/providers/gemini/GeminiSessionParser.js +0 -166
  834. package/dist/providers/gemini/GeminiSessionParser.js.map +0 -1
  835. package/dist/providers/grok/GrokAgentMapper.d.ts.map +0 -1
  836. package/dist/providers/grok/GrokAgentMapper.js +0 -36
  837. package/dist/providers/grok/GrokAgentMapper.js.map +0 -1
  838. package/dist/providers/grok/GrokCliAdapter.d.ts +0 -36
  839. package/dist/providers/grok/GrokCliAdapter.d.ts.map +0 -1
  840. package/dist/providers/grok/GrokCliAdapter.js +0 -98
  841. package/dist/providers/grok/GrokCliAdapter.js.map +0 -1
  842. package/dist/providers/grok/GrokSessionLocator.d.ts.map +0 -1
  843. package/dist/providers/grok/GrokSessionLocator.js +0 -140
  844. package/dist/providers/grok/GrokSessionLocator.js.map +0 -1
  845. package/dist/providers/grok/GrokSessionParser.d.ts +0 -54
  846. package/dist/providers/grok/GrokSessionParser.d.ts.map +0 -1
  847. package/dist/providers/grok/GrokSessionParser.js +0 -122
  848. package/dist/providers/grok/GrokSessionParser.js.map +0 -1
  849. package/dist/providers/opencode/OpenCodeAdapter.d.ts +0 -31
  850. package/dist/providers/opencode/OpenCodeAdapter.d.ts.map +0 -1
  851. package/dist/providers/opencode/OpenCodeAdapter.js +0 -89
  852. package/dist/providers/opencode/OpenCodeAdapter.js.map +0 -1
  853. package/dist/providers/opencode/OpenCodeAgentMapper.d.ts.map +0 -1
  854. package/dist/providers/opencode/OpenCodeAgentMapper.js +0 -50
  855. package/dist/providers/opencode/OpenCodeAgentMapper.js.map +0 -1
  856. package/dist/providers/opencode/OpenCodeSessionLocator.d.ts.map +0 -1
  857. package/dist/providers/opencode/OpenCodeSessionLocator.js +0 -118
  858. package/dist/providers/opencode/OpenCodeSessionLocator.js.map +0 -1
  859. package/dist/providers/opencode/OpenCodeSessionParser.d.ts +0 -18
  860. package/dist/providers/opencode/OpenCodeSessionParser.d.ts.map +0 -1
  861. package/dist/providers/opencode/OpenCodeSessionParser.js +0 -104
  862. package/dist/providers/opencode/OpenCodeSessionParser.js.map +0 -1
  863. package/dist/providers/pi/PiAdapter.d.ts +0 -29
  864. package/dist/providers/pi/PiAdapter.d.ts.map +0 -1
  865. package/dist/providers/pi/PiAdapter.js +0 -163
  866. package/dist/providers/pi/PiAdapter.js.map +0 -1
  867. package/dist/providers/pi/PiAgentMapper.d.ts.map +0 -1
  868. package/dist/providers/pi/PiAgentMapper.js +0 -37
  869. package/dist/providers/pi/PiAgentMapper.js.map +0 -1
  870. package/dist/providers/pi/PiSessionLocator.d.ts +0 -24
  871. package/dist/providers/pi/PiSessionLocator.d.ts.map +0 -1
  872. package/dist/providers/pi/PiSessionLocator.js +0 -86
  873. package/dist/providers/pi/PiSessionLocator.js.map +0 -1
  874. package/dist/providers/pi/PiSessionParser.d.ts +0 -36
  875. package/dist/providers/pi/PiSessionParser.d.ts.map +0 -1
  876. package/dist/providers/pi/PiSessionParser.js +0 -191
  877. package/dist/providers/pi/PiSessionParser.js.map +0 -1
  878. package/dist/providers/pi/PiSessionTracker.d.ts.map +0 -1
  879. package/dist/providers/pi/PiSessionTracker.js +0 -69
  880. package/dist/providers/pi/PiSessionTracker.js.map +0 -1
  881. package/dist/providers/pi/durable/PiCliProbe.d.ts.map +0 -1
  882. package/dist/providers/pi/durable/PiCliProbe.js.map +0 -1
  883. package/dist/providers/pi/durable/PiPrintAgentService.d.ts.map +0 -1
  884. package/dist/providers/pi/durable/PiPrintAgentService.js.map +0 -1
  885. package/dist/providers/pi/durable/PiPrintProtocol.d.ts.map +0 -1
  886. package/dist/providers/pi/durable/PiPrintProtocol.js.map +0 -1
  887. package/dist/providers/pi/durable/PiPrintRunner.d.ts.map +0 -1
  888. package/dist/providers/pi/durable/PiPrintRunner.js.map +0 -1
  889. package/dist/providers/pi/durable/PiStreamParser.d.ts.map +0 -1
  890. package/dist/providers/pi/durable/PiStreamParser.js.map +0 -1
  891. package/dist/readiness/AgentReadiness.d.ts +0 -67
  892. package/dist/readiness/AgentReadiness.d.ts.map +0 -1
  893. package/dist/readiness/AgentReadiness.js +0 -614
  894. package/dist/readiness/AgentReadiness.js.map +0 -1
  895. package/dist/terminal/TmuxManager.d.ts +0 -28
  896. package/dist/terminal/TmuxManager.d.ts.map +0 -1
  897. package/dist/terminal/TmuxManager.js +0 -135
  898. package/dist/terminal/TmuxManager.js.map +0 -1
  899. package/dist/terminal/index.d.ts +0 -5
  900. package/dist/terminal/index.d.ts.map +0 -1
  901. package/dist/terminal/index.js +0 -5
  902. package/dist/terminal/index.js.map +0 -1
  903. package/dist/utils/agents.d.ts +0 -15
  904. package/dist/utils/agents.d.ts.map +0 -1
  905. package/dist/utils/agents.js +0 -82
  906. package/dist/utils/agents.js.map +0 -1
  907. package/dist/utils/index.d.ts +0 -7
  908. package/dist/utils/index.d.ts.map +0 -1
  909. package/dist/utils/index.js +0 -6
  910. package/dist/utils/index.js.map +0 -1
  911. package/src/__tests__/adapters/AntigravityCliAdapter.test.ts +0 -324
  912. package/src/__tests__/adapters/ClaudeCodeAdapter.test.ts +0 -1763
  913. package/src/__tests__/adapters/CodexAdapter.test.ts +0 -387
  914. package/src/__tests__/adapters/KiroAdapter.test.ts +0 -534
  915. package/src/__tests__/durable/CodexCliProbe.test.ts +0 -85
  916. package/src/__tests__/durable/CodexDurableAgentRepository.test.ts +0 -65
  917. package/src/__tests__/durable/CodexPrintAgent.integration.test.ts +0 -104
  918. package/src/__tests__/durable/CodexPrintAgentService.test.ts +0 -217
  919. package/src/__tests__/durable/CodexPrintRunner.test.ts +0 -309
  920. package/src/__tests__/fixtures/fake-claude.cjs +0 -31
  921. package/src/__tests__/fixtures/fake-codex.cjs +0 -56
  922. package/src/__tests__/print/ClaudeCliProbe.test.ts +0 -34
  923. package/src/__tests__/print/ClaudePrintAgent.integration.test.ts +0 -61
  924. package/src/__tests__/print/ClaudePrintAgentService.test.ts +0 -129
  925. package/src/__tests__/print/ClaudePrintRunner.test.ts +0 -152
  926. package/src/__tests__/providers/claude/ClaudeAgentMapper.test.ts +0 -84
  927. package/src/__tests__/providers/claude/ClaudeSessionLocator.test.ts +0 -434
  928. package/src/__tests__/providers/codex/CodexSessionLocator.test.ts +0 -182
  929. package/src/__tests__/providers/codex/CodexSessionMapping.test.ts +0 -63
  930. package/src/__tests__/providers/codex/CodexSessionParser.test.ts +0 -192
  931. package/src/__tests__/providers/copilot/CopilotAdapter.test.ts +0 -614
  932. package/src/__tests__/providers/gemini/GeminiCliAdapter.test.ts +0 -1320
  933. package/src/__tests__/providers/grok/GrokAgentMapper.test.ts +0 -57
  934. package/src/__tests__/providers/grok/GrokCliAdapter.test.ts +0 -376
  935. package/src/__tests__/providers/grok/GrokSessionLocator.test.ts +0 -106
  936. package/src/__tests__/providers/opencode/OpenCodeAdapter.test.ts +0 -215
  937. package/src/__tests__/providers/opencode/OpenCodeAgentMapper.test.ts +0 -83
  938. package/src/__tests__/providers/opencode/OpenCodeSessionLocator.test.ts +0 -84
  939. package/src/__tests__/providers/opencode/OpenCodeSessionParser.test.ts +0 -148
  940. package/src/__tests__/providers/pi/PiAdapter.test.ts +0 -325
  941. package/src/__tests__/providers/pi/PiSessionParser.test.ts +0 -190
  942. package/src/__tests__/providers/pi/PiSessionTracker.test.ts +0 -79
  943. package/src/__tests__/providers/pi/durable/PiCliProbe.test.ts +0 -54
  944. package/src/__tests__/providers/pi/durable/PiPrintAgentService.test.ts +0 -141
  945. package/src/__tests__/providers/pi/durable/PiPrintProtocol.test.ts +0 -71
  946. package/src/__tests__/providers/pi/durable/PiPrintRunner.test.ts +0 -253
  947. package/src/__tests__/providers/pi/durable/PiStreamParser.test.ts +0 -26
  948. package/src/__tests__/readiness/AgentReadiness.test.ts +0 -242
  949. package/src/__tests__/utils/ClaudeSessionParser.test.ts +0 -300
  950. package/src/__tests__/utils/agents.test.ts +0 -31
  951. package/src/adapters/AntigravityCliAdapter.ts +0 -356
  952. package/src/adapters/KiroAdapter.ts +0 -456
  953. package/src/adapters/index.ts +0 -17
  954. package/src/capacity/claude.ts +0 -313
  955. package/src/capacity/codex.ts +0 -332
  956. package/src/capacity/openai.ts +0 -361
  957. package/src/capacity/wham.ts +0 -84
  958. package/src/capacity/zai.ts +0 -237
  959. package/src/providers/claude/ClaudeAgentMapper.ts +0 -63
  960. package/src/providers/claude/ClaudeCodeAdapter.ts +0 -173
  961. package/src/providers/claude/ClaudeSessionLocator.ts +0 -358
  962. package/src/providers/claude/ClaudeSessionParser.ts +0 -432
  963. package/src/providers/codex/CodexAdapter.ts +0 -213
  964. package/src/providers/codex/CodexAgentMapper.ts +0 -35
  965. package/src/providers/codex/CodexSessionLocator.ts +0 -279
  966. package/src/providers/codex/CodexSessionMapping.ts +0 -89
  967. package/src/providers/codex/CodexSessionParser.ts +0 -385
  968. package/src/providers/copilot/CopilotAdapter.ts +0 -161
  969. package/src/providers/copilot/CopilotAgentMapper.ts +0 -36
  970. package/src/providers/copilot/CopilotSessionLocator.ts +0 -63
  971. package/src/providers/copilot/CopilotSessionParser.ts +0 -289
  972. package/src/providers/gemini/GeminiAgentMapper.ts +0 -36
  973. package/src/providers/gemini/GeminiCliAdapter.ts +0 -274
  974. package/src/providers/gemini/GeminiSessionLocator.ts +0 -183
  975. package/src/providers/gemini/GeminiSessionParser.ts +0 -271
  976. package/src/providers/grok/GrokAgentMapper.ts +0 -41
  977. package/src/providers/grok/GrokCliAdapter.ts +0 -125
  978. package/src/providers/grok/GrokSessionLocator.ts +0 -179
  979. package/src/providers/grok/GrokSessionParser.ts +0 -166
  980. package/src/providers/opencode/OpenCodeAdapter.ts +0 -116
  981. package/src/providers/opencode/OpenCodeAgentMapper.ts +0 -61
  982. package/src/providers/opencode/OpenCodeSessionLocator.ts +0 -151
  983. package/src/providers/opencode/OpenCodeSessionParser.ts +0 -145
  984. package/src/providers/pi/PiAdapter.ts +0 -195
  985. package/src/providers/pi/PiAgentMapper.ts +0 -36
  986. package/src/providers/pi/PiSessionLocator.ts +0 -110
  987. package/src/providers/pi/PiSessionParser.ts +0 -284
  988. package/src/providers/pi/PiSessionTracker.ts +0 -87
  989. package/src/readiness/AgentReadiness.ts +0 -730
  990. package/src/terminal/TmuxManager.ts +0 -123
  991. package/src/terminal/index.ts +0 -4
  992. package/src/utils/agents.ts +0 -75
  993. package/src/utils/index.ts +0 -12
  994. /package/dist/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.js +0 -0
  995. /package/dist/{providers → harnesses}/claude/ClaudeAgentMapper.d.ts +0 -0
  996. /package/dist/{providers → harnesses}/claude/ClaudeSessionLocator.d.ts +0 -0
  997. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.d.ts +0 -0
  998. /package/dist/{providers → harnesses}/claude/durable/ClaudeCliProbe.js +0 -0
  999. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.d.ts +0 -0
  1000. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintAgentService.js +0 -0
  1001. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.d.ts +0 -0
  1002. /package/dist/{providers → harnesses}/claude/durable/ClaudePrintRunner.js +0 -0
  1003. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.d.ts +0 -0
  1004. /package/dist/{providers → harnesses}/claude/durable/ClaudeStreamParser.js +0 -0
  1005. /package/dist/{providers → harnesses}/codex/CodexAgentMapper.d.ts +0 -0
  1006. /package/dist/{providers → harnesses}/codex/CodexSessionMapping.d.ts +0 -0
  1007. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.d.ts +0 -0
  1008. /package/dist/{providers → harnesses}/codex/durable/CodexCliProbe.js +0 -0
  1009. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.d.ts +0 -0
  1010. /package/dist/{providers → harnesses}/codex/durable/CodexPrintAgentService.js +0 -0
  1011. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.d.ts +0 -0
  1012. /package/dist/{providers → harnesses}/codex/durable/CodexPrintRunner.js +0 -0
  1013. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.d.ts +0 -0
  1014. /package/dist/{providers → harnesses}/codex/durable/CodexStreamParser.js +0 -0
  1015. /package/dist/{providers → harnesses}/copilot/CopilotAgentMapper.d.ts +0 -0
  1016. /package/dist/{providers → harnesses}/gemini/GeminiAgentMapper.d.ts +0 -0
  1017. /package/dist/{providers → harnesses}/grok/GrokAgentMapper.d.ts +0 -0
  1018. /package/dist/{providers → harnesses}/grok/GrokSessionLocator.d.ts +0 -0
  1019. /package/dist/{providers → harnesses}/opencode/OpenCodeAgentMapper.d.ts +0 -0
  1020. /package/dist/{providers → harnesses}/opencode/OpenCodeSessionLocator.d.ts +0 -0
  1021. /package/dist/{providers → harnesses}/pi/PiAgentMapper.d.ts +0 -0
  1022. /package/dist/{providers → harnesses}/pi/PiSessionTracker.d.ts +0 -0
  1023. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.d.ts +0 -0
  1024. /package/dist/{providers → harnesses}/pi/durable/PiCliProbe.js +0 -0
  1025. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.d.ts +0 -0
  1026. /package/dist/{providers → harnesses}/pi/durable/PiPrintAgentService.js +0 -0
  1027. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.d.ts +0 -0
  1028. /package/dist/{providers → harnesses}/pi/durable/PiPrintProtocol.js +0 -0
  1029. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.d.ts +0 -0
  1030. /package/dist/{providers → harnesses}/pi/durable/PiPrintRunner.js +0 -0
  1031. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.d.ts +0 -0
  1032. /package/dist/{providers → harnesses}/pi/durable/PiStreamParser.js +0 -0
  1033. /package/src/__tests__/{providers → harnesses}/pi/durable/PiDurableAgentRepository.test.ts +0 -0
  1034. /package/src/{providers → harnesses}/claude/durable/ClaudeCliProbe.ts +0 -0
  1035. /package/src/{providers → harnesses}/claude/durable/ClaudePrintAgentService.ts +0 -0
  1036. /package/src/{providers → harnesses}/claude/durable/ClaudePrintRunner.ts +0 -0
  1037. /package/src/{providers → harnesses}/claude/durable/ClaudeStreamParser.ts +0 -0
  1038. /package/src/{providers → harnesses}/codex/durable/CodexCliProbe.ts +0 -0
  1039. /package/src/{providers → harnesses}/codex/durable/CodexPrintAgentService.ts +0 -0
  1040. /package/src/{providers → harnesses}/codex/durable/CodexPrintRunner.ts +0 -0
  1041. /package/src/{providers → harnesses}/codex/durable/CodexStreamParser.ts +0 -0
  1042. /package/src/{providers → harnesses}/pi/durable/PiCliProbe.ts +0 -0
  1043. /package/src/{providers → harnesses}/pi/durable/PiPrintAgentService.ts +0 -0
  1044. /package/src/{providers → harnesses}/pi/durable/PiPrintProtocol.ts +0 -0
  1045. /package/src/{providers → harnesses}/pi/durable/PiPrintRunner.ts +0 -0
  1046. /package/src/{providers → harnesses}/pi/durable/PiStreamParser.ts +0 -0
@@ -1,309 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { AgentStatus } from "../../adapters/AgentAdapter.js";
4
- /**
5
- * Top-level JSONL entry types that represent conversation/agent state.
6
- *
7
- * Only these types update `lastEntryType` for status determination. All
8
- * other types Claude Code emits (`attachment`, `permission-mode`,
9
- * `ai-title`, `queued_command`, `tools_changed`, `model_changed`,
10
- * `hook_progress`, …) are UI-state events that must not overwrite the
11
- * last conversation turn — otherwise polling between writes lands on a
12
- * UI-state entry and `determineStatus` falls through to UNKNOWN.
13
- */ const CONVERSATION_ENTRY_TYPES = new Set([
14
- "user",
15
- "assistant",
16
- "system",
17
- "progress",
18
- "thinking"
19
- ]);
20
- /**
21
- * Parses Claude Code session JSONL files into structured data.
22
- *
23
- * Session files live at ~/.claude/projects/<encoded-cwd>/<session-id>.jsonl
24
- * and contain one JSON object per line, each representing a conversation
25
- * event (user turn, assistant response, tool call, etc.).
26
- */ export class ClaudeSessionParser {
27
- /**
28
- * Parse a session JSONL file into a ClaudeSession summary.
29
- *
30
- * Iterates all lines to extract: session start time (from first entry),
31
- * last activity timestamp, last entry type (for status), whether the
32
- * session was interrupted, and the last meaningful user message.
33
- *
34
- * Returns null if the file is unreadable or empty.
35
- */ readSession(filePath, projectPath) {
36
- const sessionId = path.basename(filePath, ".jsonl");
37
- let content;
38
- try {
39
- content = fs.readFileSync(filePath, "utf-8");
40
- } catch {
41
- return null;
42
- }
43
- const allLines = content.trim().split("\n");
44
- if (allLines.length === 0) {
45
- return null;
46
- }
47
- const sessionStart = this.parseSessionStart(allLines[0]);
48
- let lastEntryType;
49
- let lastActive;
50
- let lastCwd;
51
- let isInterrupted = false;
52
- let lastUserMessage;
53
- let firstUserMessage;
54
- for (const line of allLines){
55
- try {
56
- const entry = JSON.parse(line);
57
- if (entry.timestamp) {
58
- const ts = new Date(entry.timestamp);
59
- if (!Number.isNaN(ts.getTime())) {
60
- lastActive = ts;
61
- }
62
- }
63
- if (typeof entry.cwd === "string" && entry.cwd.trim().length > 0) {
64
- lastCwd = entry.cwd;
65
- }
66
- if (entry.type && CONVERSATION_ENTRY_TYPES.has(entry.type)) {
67
- lastEntryType = entry.type;
68
- if (entry.type === "user") {
69
- const msgContent = entry.message?.content;
70
- isInterrupted = Array.isArray(msgContent) && msgContent.some((c)=>c.type === "text" && c.text?.includes("[Request interrupted") || c.type === "tool_result" && c.content?.includes("[Request interrupted"));
71
- const text = this.extractUserMessageText(msgContent);
72
- if (text) {
73
- lastUserMessage = text;
74
- if (!firstUserMessage) {
75
- firstUserMessage = text;
76
- }
77
- }
78
- } else {
79
- isInterrupted = false;
80
- }
81
- }
82
- } catch {
83
- continue;
84
- }
85
- }
86
- return {
87
- sessionId,
88
- projectPath: projectPath || lastCwd || "",
89
- lastCwd,
90
- sessionStart: sessionStart || lastActive || new Date(),
91
- lastActive: lastActive || new Date(),
92
- lastEntryType,
93
- isInterrupted,
94
- lastUserMessage,
95
- firstUserMessage
96
- };
97
- }
98
- /**
99
- * Determine agent status from parsed session state.
100
- *
101
- * Status mapping:
102
- * - "user" + interrupted → WAITING (agent finished, awaiting new input)
103
- * - "user" + not interrupted → RUNNING (agent is processing)
104
- * - "progress" / "thinking" → RUNNING
105
- * - "assistant" → WAITING (agent responded, awaiting user)
106
- * - "system" → IDLE
107
- */ determineStatus(session) {
108
- if (!session.lastEntryType) {
109
- return AgentStatus.UNKNOWN;
110
- }
111
- if (session.lastEntryType === "user") {
112
- return session.isInterrupted ? AgentStatus.WAITING : AgentStatus.RUNNING;
113
- }
114
- if (session.lastEntryType === "progress" || session.lastEntryType === "thinking") {
115
- return AgentStatus.RUNNING;
116
- }
117
- if (session.lastEntryType === "assistant") {
118
- return AgentStatus.WAITING;
119
- }
120
- if (session.lastEntryType === "system") {
121
- return AgentStatus.IDLE;
122
- }
123
- return AgentStatus.UNKNOWN;
124
- }
125
- /**
126
- * Read the full conversation from a session JSONL file.
127
- *
128
- * Default mode returns only text content from user/assistant/system messages.
129
- * Verbose mode also includes tool_use and tool_result blocks.
130
- */ getConversation(sessionFilePath, options) {
131
- const verbose = options?.verbose ?? false;
132
- let content;
133
- try {
134
- content = fs.readFileSync(sessionFilePath, "utf-8");
135
- } catch {
136
- return [];
137
- }
138
- const lines = content.trim().split("\n");
139
- const messages = [];
140
- for (const line of lines){
141
- let entry;
142
- try {
143
- entry = JSON.parse(line);
144
- } catch {
145
- continue;
146
- }
147
- let role;
148
- if (entry.type === "user") {
149
- role = "user";
150
- } else if (entry.type === "assistant") {
151
- role = "assistant";
152
- } else if (entry.type === "system") {
153
- role = "system";
154
- } else {
155
- continue;
156
- }
157
- const text = this.extractConversationContent(entry.message?.content, role, verbose);
158
- if (!text) continue;
159
- messages.push({
160
- role,
161
- content: text,
162
- timestamp: entry.timestamp
163
- });
164
- }
165
- return messages;
166
- }
167
- /**
168
- * Parse session start time from the first JSONL line.
169
- *
170
- * Claude Code may emit a "file-history-snapshot" as the first entry,
171
- * which stores its timestamp inside "snapshot.timestamp" rather than
172
- * at the root level.
173
- */ parseSessionStart(firstLine) {
174
- try {
175
- const firstEntry = JSON.parse(firstLine);
176
- const rawTs = firstEntry.timestamp || firstEntry.snapshot?.timestamp;
177
- if (rawTs) {
178
- const ts = new Date(rawTs);
179
- if (!Number.isNaN(ts.getTime())) {
180
- return ts;
181
- }
182
- }
183
- } catch {
184
- /* malformed first line */ }
185
- return null;
186
- }
187
- /**
188
- * Extract meaningful text from a user message content field.
189
- *
190
- * Handles multiple formats:
191
- * - Plain string content
192
- * - Array of content blocks (extracts first text block)
193
- * - Skill slash-commands (<command-message> tags)
194
- * - Expanded skill content (extracts ARGUMENTS line)
195
- * - Filters noise messages (interruptions, tool loaded, session continued)
196
- */ extractUserMessageText(content) {
197
- if (!content) {
198
- return undefined;
199
- }
200
- let raw;
201
- if (typeof content === "string") {
202
- raw = content.trim();
203
- } else if (Array.isArray(content)) {
204
- for (const block of content){
205
- if (block.type === "text" && block.text?.trim()) {
206
- raw = block.text.trim();
207
- break;
208
- }
209
- }
210
- }
211
- if (!raw) {
212
- return undefined;
213
- }
214
- if (raw.startsWith("<command-message>")) {
215
- return this.parseCommandMessage(raw);
216
- }
217
- if (raw.startsWith("Base directory for this skill:")) {
218
- const argsMatch = raw.match(/\nARGUMENTS:\s*(.+)/);
219
- return argsMatch?.[1]?.trim() || undefined;
220
- }
221
- if (isNoiseMessage(raw)) {
222
- return undefined;
223
- }
224
- return raw;
225
- }
226
- /**
227
- * Parse a <command-message> string into "/command args" format.
228
- */ parseCommandMessage(raw) {
229
- const nameMatch = raw.match(/<command-name>([^<]+)<\/command-name>/);
230
- const argsMatch = raw.match(/<command-args>([^<]+)<\/command-args>/);
231
- const name = nameMatch?.[1]?.trim();
232
- if (!name) {
233
- return undefined;
234
- }
235
- const args = argsMatch?.[1]?.trim();
236
- return args ? `${name} ${args}` : name;
237
- }
238
- /**
239
- * Extract displayable content from a message content field for conversation output.
240
- */ extractConversationContent(content, role, verbose) {
241
- if (!content) return undefined;
242
- if (typeof content === "string") {
243
- const cleaned = stripHarnessTags(content);
244
- if (role === "user" && isNoiseMessage(cleaned)) return undefined;
245
- return cleaned || undefined;
246
- }
247
- if (!Array.isArray(content)) return undefined;
248
- const parts = [];
249
- for (const block of content){
250
- if (block.type === "text" && block.text?.trim()) {
251
- const cleaned = stripHarnessTags(block.text);
252
- if (!cleaned) continue;
253
- if (role === "user" && isNoiseMessage(cleaned)) continue;
254
- parts.push(cleaned);
255
- } else if (block.type === "tool_use" && verbose) {
256
- const inputSummary = block.input?.file_path || block.input?.pattern || block.input?.command || "";
257
- parts.push(`[Tool: ${block.name}]${inputSummary ? " " + inputSummary : ""}`);
258
- } else if (block.type === "tool_result" && verbose) {
259
- const truncated = truncateToolResult(block.content || "");
260
- const prefix = block.is_error ? "[Tool Error]" : "[Tool Result]";
261
- parts.push(`${prefix} ${truncated}`);
262
- }
263
- }
264
- return parts.length > 0 ? parts.join("\n") : undefined;
265
- }
266
- }
267
- /**
268
- * Tags whose entire block (including content) should be dropped — they are
269
- * harness-injected prompt context (system reminders, hook output, command
270
- * stdout), not meaningful conversation content.
271
- */ const HARNESS_DROP_TAGS = [
272
- "system-reminder",
273
- "local-command-stdout",
274
- "local-command-stderr",
275
- "user-prompt-submit-hook",
276
- "command-stdout",
277
- "command-stderr",
278
- "bash-input",
279
- "bash-stdout",
280
- "bash-stderr",
281
- "command-message"
282
- ];
283
- const HARNESS_DROP_RE = new RegExp(`<(${HARNESS_DROP_TAGS.join("|")})>[\\s\\S]*?</\\1>`, "g");
284
- const COMMAND_INVOCATION_RE = /<command-name>([^<]+)<\/command-name>(?:\s*<command-args>([\s\S]*?)<\/command-args>)?/g;
285
- /**
286
- * Remove harness-injected XML blocks from message text and collapse
287
- * <command-name>/<command-args> pairs into a "/name args" shorthand.
288
- *
289
- * Returns the cleaned, trimmed text. Returns an empty string if nothing
290
- * survives stripping.
291
- */ function stripHarnessTags(text) {
292
- let out = text.replace(HARNESS_DROP_RE, "");
293
- out = out.replace(COMMAND_INVOCATION_RE, (_match, rawName, rawArgs)=>{
294
- const name = rawName.trim();
295
- const args = rawArgs?.trim();
296
- return args ? `${name} ${args}` : name;
297
- });
298
- return out.replace(/\n{3,}/g, "\n\n").trim();
299
- }
300
- /** Check if a message is noise (not a meaningful user intent). */ function isNoiseMessage(text) {
301
- return text.startsWith("[Request interrupted") || text === "Tool loaded." || text.startsWith("This session is being continued");
302
- }
303
- function truncateToolResult(content, maxLength = 200) {
304
- const firstLine = content.split("\n")[0] || "";
305
- if (firstLine.length <= maxLength) return firstLine;
306
- return firstLine.slice(0, maxLength - 3) + "...";
307
- }
308
-
309
- //# sourceMappingURL=ClaudeSessionParser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/providers/claude/ClaudeSessionParser.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as path from \"path\";\nimport type { ConversationMessage } from \"../../adapters/AgentAdapter.js\";\nimport { AgentStatus } from \"../../adapters/AgentAdapter.js\";\n\n/**\n * Content block within a Claude Code JSONL message entry.\n * Handles text, tool_use, and tool_result block types.\n */\nexport interface ContentBlock {\n type?: string;\n text?: string;\n content?: string;\n name?: string;\n input?: Record<string, unknown>;\n tool_use_id?: string;\n is_error?: boolean;\n}\n\n/**\n * A single line entry in a Claude Code session JSONL file.\n *\n * Each line is an independent JSON object with a type discriminator:\n * - \"user\" / \"assistant\" / \"system\" — conversation turns\n * - \"progress\" / \"thinking\" — intermediate agent state\n * - \"last-prompt\" / \"file-history-snapshot\" — metadata (not conversation state)\n */\nexport interface SessionEntry {\n type?: string;\n timestamp?: string;\n cwd?: string;\n message?: {\n content?: string | ContentBlock[];\n };\n}\n\n/**\n * Parsed session state extracted from a JSONL file.\n * Aggregates data from all entries into a single summary.\n */\nexport interface ClaudeSession {\n sessionId: string;\n projectPath: string;\n lastCwd?: string;\n sessionStart: Date;\n lastActive: Date;\n lastEntryType?: string;\n isInterrupted: boolean;\n lastUserMessage?: string;\n /** First meaningful user prompt in the session (post noise filter) */\n firstUserMessage?: string;\n}\n\n/**\n * Top-level JSONL entry types that represent conversation/agent state.\n *\n * Only these types update `lastEntryType` for status determination. All\n * other types Claude Code emits (`attachment`, `permission-mode`,\n * `ai-title`, `queued_command`, `tools_changed`, `model_changed`,\n * `hook_progress`, …) are UI-state events that must not overwrite the\n * last conversation turn — otherwise polling between writes lands on a\n * UI-state entry and `determineStatus` falls through to UNKNOWN.\n */\nconst CONVERSATION_ENTRY_TYPES = new Set([\"user\", \"assistant\", \"system\", \"progress\", \"thinking\"]);\n\n/**\n * Parses Claude Code session JSONL files into structured data.\n *\n * Session files live at ~/.claude/projects/<encoded-cwd>/<session-id>.jsonl\n * and contain one JSON object per line, each representing a conversation\n * event (user turn, assistant response, tool call, etc.).\n */\nexport class ClaudeSessionParser {\n /**\n * Parse a session JSONL file into a ClaudeSession summary.\n *\n * Iterates all lines to extract: session start time (from first entry),\n * last activity timestamp, last entry type (for status), whether the\n * session was interrupted, and the last meaningful user message.\n *\n * Returns null if the file is unreadable or empty.\n */\n readSession(filePath: string, projectPath: string): ClaudeSession | null {\n const sessionId = path.basename(filePath, \".jsonl\");\n\n let content: string;\n try {\n content = fs.readFileSync(filePath, \"utf-8\");\n } catch {\n return null;\n }\n\n const allLines = content.trim().split(\"\\n\");\n if (allLines.length === 0) {\n return null;\n }\n\n const sessionStart = this.parseSessionStart(allLines[0]);\n\n let lastEntryType: string | undefined;\n let lastActive: Date | undefined;\n let lastCwd: string | undefined;\n let isInterrupted = false;\n let lastUserMessage: string | undefined;\n let firstUserMessage: string | undefined;\n\n for (const line of allLines) {\n try {\n const entry: SessionEntry = JSON.parse(line);\n\n if (entry.timestamp) {\n const ts = new Date(entry.timestamp);\n if (!Number.isNaN(ts.getTime())) {\n lastActive = ts;\n }\n }\n\n if (typeof entry.cwd === \"string\" && entry.cwd.trim().length > 0) {\n lastCwd = entry.cwd;\n }\n\n if (entry.type && CONVERSATION_ENTRY_TYPES.has(entry.type)) {\n lastEntryType = entry.type;\n\n if (entry.type === \"user\") {\n const msgContent = entry.message?.content;\n isInterrupted =\n Array.isArray(msgContent) &&\n msgContent.some(\n (c) =>\n (c.type === \"text\" && c.text?.includes(\"[Request interrupted\")) ||\n (c.type === \"tool_result\" && c.content?.includes(\"[Request interrupted\")),\n );\n\n const text = this.extractUserMessageText(msgContent);\n if (text) {\n lastUserMessage = text;\n if (!firstUserMessage) {\n firstUserMessage = text;\n }\n }\n } else {\n isInterrupted = false;\n }\n }\n } catch {\n continue;\n }\n }\n\n return {\n sessionId,\n projectPath: projectPath || lastCwd || \"\",\n lastCwd,\n sessionStart: sessionStart || lastActive || new Date(),\n lastActive: lastActive || new Date(),\n lastEntryType,\n isInterrupted,\n lastUserMessage,\n firstUserMessage,\n };\n }\n\n /**\n * Determine agent status from parsed session state.\n *\n * Status mapping:\n * - \"user\" + interrupted → WAITING (agent finished, awaiting new input)\n * - \"user\" + not interrupted → RUNNING (agent is processing)\n * - \"progress\" / \"thinking\" → RUNNING\n * - \"assistant\" → WAITING (agent responded, awaiting user)\n * - \"system\" → IDLE\n */\n determineStatus(session: ClaudeSession): AgentStatus {\n if (!session.lastEntryType) {\n return AgentStatus.UNKNOWN;\n }\n\n if (session.lastEntryType === \"user\") {\n return session.isInterrupted ? AgentStatus.WAITING : AgentStatus.RUNNING;\n }\n\n if (session.lastEntryType === \"progress\" || session.lastEntryType === \"thinking\") {\n return AgentStatus.RUNNING;\n }\n\n if (session.lastEntryType === \"assistant\") {\n return AgentStatus.WAITING;\n }\n\n if (session.lastEntryType === \"system\") {\n return AgentStatus.IDLE;\n }\n\n return AgentStatus.UNKNOWN;\n }\n\n /**\n * Read the full conversation from a session JSONL file.\n *\n * Default mode returns only text content from user/assistant/system messages.\n * Verbose mode also includes tool_use and tool_result blocks.\n */\n getConversation(sessionFilePath: string, options?: { verbose?: boolean }): ConversationMessage[] {\n const verbose = options?.verbose ?? false;\n\n let content: string;\n try {\n content = fs.readFileSync(sessionFilePath, \"utf-8\");\n } catch {\n return [];\n }\n\n const lines = content.trim().split(\"\\n\");\n const messages: ConversationMessage[] = [];\n\n for (const line of lines) {\n let entry: SessionEntry;\n try {\n entry = JSON.parse(line);\n } catch {\n continue;\n }\n\n let role: ConversationMessage[\"role\"];\n if (entry.type === \"user\") {\n role = \"user\";\n } else if (entry.type === \"assistant\") {\n role = \"assistant\";\n } else if (entry.type === \"system\") {\n role = \"system\";\n } else {\n continue;\n }\n\n const text = this.extractConversationContent(entry.message?.content, role, verbose);\n if (!text) continue;\n\n messages.push({\n role,\n content: text,\n timestamp: entry.timestamp,\n });\n }\n\n return messages;\n }\n\n /**\n * Parse session start time from the first JSONL line.\n *\n * Claude Code may emit a \"file-history-snapshot\" as the first entry,\n * which stores its timestamp inside \"snapshot.timestamp\" rather than\n * at the root level.\n */\n private parseSessionStart(firstLine: string): Date | null {\n try {\n const firstEntry = JSON.parse(firstLine);\n const rawTs: string | undefined = firstEntry.timestamp || firstEntry.snapshot?.timestamp;\n if (rawTs) {\n const ts = new Date(rawTs);\n if (!Number.isNaN(ts.getTime())) {\n return ts;\n }\n }\n } catch {\n /* malformed first line */\n }\n return null;\n }\n\n /**\n * Extract meaningful text from a user message content field.\n *\n * Handles multiple formats:\n * - Plain string content\n * - Array of content blocks (extracts first text block)\n * - Skill slash-commands (<command-message> tags)\n * - Expanded skill content (extracts ARGUMENTS line)\n * - Filters noise messages (interruptions, tool loaded, session continued)\n */\n private extractUserMessageText(\n content: string | Array<{ type?: string; text?: string }> | undefined,\n ): string | undefined {\n if (!content) {\n return undefined;\n }\n\n let raw: string | undefined;\n\n if (typeof content === \"string\") {\n raw = content.trim();\n } else if (Array.isArray(content)) {\n for (const block of content) {\n if (block.type === \"text\" && block.text?.trim()) {\n raw = block.text.trim();\n break;\n }\n }\n }\n\n if (!raw) {\n return undefined;\n }\n\n if (raw.startsWith(\"<command-message>\")) {\n return this.parseCommandMessage(raw);\n }\n\n if (raw.startsWith(\"Base directory for this skill:\")) {\n const argsMatch = raw.match(/\\nARGUMENTS:\\s*(.+)/);\n return argsMatch?.[1]?.trim() || undefined;\n }\n\n if (isNoiseMessage(raw)) {\n return undefined;\n }\n\n return raw;\n }\n\n /**\n * Parse a <command-message> string into \"/command args\" format.\n */\n private parseCommandMessage(raw: string): string | undefined {\n const nameMatch = raw.match(/<command-name>([^<]+)<\\/command-name>/);\n const argsMatch = raw.match(/<command-args>([^<]+)<\\/command-args>/);\n const name = nameMatch?.[1]?.trim();\n if (!name) {\n return undefined;\n }\n const args = argsMatch?.[1]?.trim();\n return args ? `${name} ${args}` : name;\n }\n\n /**\n * Extract displayable content from a message content field for conversation output.\n */\n private extractConversationContent(\n content: string | ContentBlock[] | undefined,\n role: ConversationMessage[\"role\"],\n verbose: boolean,\n ): string | undefined {\n if (!content) return undefined;\n\n if (typeof content === \"string\") {\n const cleaned = stripHarnessTags(content);\n if (role === \"user\" && isNoiseMessage(cleaned)) return undefined;\n return cleaned || undefined;\n }\n\n if (!Array.isArray(content)) return undefined;\n\n const parts: string[] = [];\n\n for (const block of content) {\n if (block.type === \"text\" && block.text?.trim()) {\n const cleaned = stripHarnessTags(block.text);\n if (!cleaned) continue;\n if (role === \"user\" && isNoiseMessage(cleaned)) continue;\n parts.push(cleaned);\n } else if (block.type === \"tool_use\" && verbose) {\n const inputSummary =\n block.input?.file_path || block.input?.pattern || block.input?.command || \"\";\n parts.push(`[Tool: ${block.name}]${inputSummary ? \" \" + inputSummary : \"\"}`);\n } else if (block.type === \"tool_result\" && verbose) {\n const truncated = truncateToolResult(block.content || \"\");\n const prefix = block.is_error ? \"[Tool Error]\" : \"[Tool Result]\";\n parts.push(`${prefix} ${truncated}`);\n }\n }\n\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n }\n}\n\n/**\n * Tags whose entire block (including content) should be dropped — they are\n * harness-injected prompt context (system reminders, hook output, command\n * stdout), not meaningful conversation content.\n */\nconst HARNESS_DROP_TAGS = [\n \"system-reminder\",\n \"local-command-stdout\",\n \"local-command-stderr\",\n \"user-prompt-submit-hook\",\n \"command-stdout\",\n \"command-stderr\",\n \"bash-input\",\n \"bash-stdout\",\n \"bash-stderr\",\n \"command-message\",\n] as const;\n\nconst HARNESS_DROP_RE = new RegExp(`<(${HARNESS_DROP_TAGS.join(\"|\")})>[\\\\s\\\\S]*?</\\\\1>`, \"g\");\n\nconst COMMAND_INVOCATION_RE =\n /<command-name>([^<]+)<\\/command-name>(?:\\s*<command-args>([\\s\\S]*?)<\\/command-args>)?/g;\n\n/**\n * Remove harness-injected XML blocks from message text and collapse\n * <command-name>/<command-args> pairs into a \"/name args\" shorthand.\n *\n * Returns the cleaned, trimmed text. Returns an empty string if nothing\n * survives stripping.\n */\nfunction stripHarnessTags(text: string): string {\n let out = text.replace(HARNESS_DROP_RE, \"\");\n\n out = out.replace(COMMAND_INVOCATION_RE, (_match, rawName: string, rawArgs?: string) => {\n const name = rawName.trim();\n const args = rawArgs?.trim();\n return args ? `${name} ${args}` : name;\n });\n\n return out.replace(/\\n{3,}/g, \"\\n\\n\").trim();\n}\n\n/** Check if a message is noise (not a meaningful user intent). */\nfunction isNoiseMessage(text: string): boolean {\n return (\n text.startsWith(\"[Request interrupted\") ||\n text === \"Tool loaded.\" ||\n text.startsWith(\"This session is being continued\")\n );\n}\n\nfunction truncateToolResult(content: string, maxLength = 200): string {\n const firstLine = content.split(\"\\n\")[0] || \"\";\n if (firstLine.length <= maxLength) return firstLine;\n return firstLine.slice(0, maxLength - 3) + \"...\";\n}\n"],"names":["fs","path","AgentStatus","CONVERSATION_ENTRY_TYPES","Set","ClaudeSessionParser","readSession","filePath","projectPath","sessionId","basename","content","readFileSync","allLines","trim","split","length","sessionStart","parseSessionStart","lastEntryType","lastActive","lastCwd","isInterrupted","lastUserMessage","firstUserMessage","line","entry","JSON","parse","timestamp","ts","Date","Number","isNaN","getTime","cwd","type","has","msgContent","message","Array","isArray","some","c","text","includes","extractUserMessageText","determineStatus","session","UNKNOWN","WAITING","RUNNING","IDLE","getConversation","sessionFilePath","options","verbose","lines","messages","role","extractConversationContent","push","firstLine","firstEntry","rawTs","snapshot","undefined","raw","block","startsWith","parseCommandMessage","argsMatch","match","isNoiseMessage","nameMatch","name","args","cleaned","stripHarnessTags","parts","inputSummary","input","file_path","pattern","command","truncated","truncateToolResult","prefix","is_error","join","HARNESS_DROP_TAGS","HARNESS_DROP_RE","RegExp","COMMAND_INVOCATION_RE","out","replace","_match","rawName","rawArgs","maxLength","slice"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClaudeCliProbe.d.ts","sourceRoot":"","sources":["../../../../src/providers/claude/durable/ClaudeCliProbe.ts"],"names":[],"mappings":"AAKA,KAAK,UAAU,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AACrD,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,UAAU,CAAC,CAAC;AAKlE,MAAM,WAAW,qBAAqB;IACpC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,IAAI,CAAC;CACb;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAO;gBAEhB,OAAO,GAAE,qBAA0B;IAazC,QAAQ,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAuBnE"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/providers/claude/durable/ClaudeCliProbe.ts"],"sourcesContent":["import { execFile } from \"child_process\";\nimport { promisify } from \"util\";\nimport { ClaudePrintError } from \"../../../durable/DurableAgent.js\";\nimport { sanitizeText } from \"../../../durable/utils.js\";\n\ntype ExecResult = { stdout: string; stderr: string };\ntype Exec = (file: string, args: string[]) => Promise<ExecResult>;\n\nconst execFileAsync = promisify(execFile);\nconst REQUIRED = [\"--print\", \"--session-id\", \"--resume\", \"--output-format\", \"stream-json\"];\n\nexport interface ClaudeCliProbeOptions {\n executable?: string;\n exec?: Exec;\n}\n\nexport class ClaudeCliProbe {\n private readonly executable: string;\n private readonly exec: Exec;\n\n constructor(options: ClaudeCliProbeOptions = {}) {\n this.executable = options.executable ?? \"claude\";\n this.exec =\n options.exec ??\n (async (file, args) => {\n const result = await execFileAsync(file, args, {\n encoding: \"utf8\",\n maxBuffer: 1024 * 1024,\n });\n return { stdout: result.stdout, stderr: result.stderr };\n });\n }\n\n async validate(): Promise<{ executable: string; version: string }> {\n try {\n const versionResult = await this.exec(this.executable, [\"--version\"]);\n const helpResult = await this.exec(this.executable, [\"--help\"]);\n const missing = REQUIRED.filter((capability) => !helpResult.stdout.includes(capability));\n if (missing.length > 0) {\n throw new ClaudePrintError(\n `Claude CLI does not support required print-mode capabilities: ${missing.join(\", \")}.`,\n \"CLAUDE_CLI_UNSUPPORTED\",\n );\n }\n return {\n executable: this.executable,\n version: sanitizeText(versionResult.stdout, 256) || \"unknown\",\n };\n } catch (error) {\n if (error instanceof ClaudePrintError) throw error;\n throw new ClaudePrintError(\n `Claude CLI validation failed: ${sanitizeText((error as Error).message, 512)}`,\n \"CLAUDE_CLI_UNAVAILABLE\",\n );\n }\n }\n}\n"],"names":["execFile","promisify","ClaudePrintError","sanitizeText","execFileAsync","REQUIRED","ClaudeCliProbe","executable","exec","options","file","args","result","encoding","maxBuffer","stdout","stderr","validate","versionResult","helpResult","missing","filter","capability","includes","length","join","version","error","message"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,SAAS,QAAQ,OAAO;AACjC,SAASC,gBAAgB,QAAQ,mCAAmC;AACpE,SAASC,YAAY,QAAQ,4BAA4B;AAKzD,MAAMC,gBAAgBH,UAAUD;AAChC,MAAMK,WAAW;IAAC;IAAW;IAAgB;IAAY;IAAmB;CAAc;AAO1F,OAAO,MAAMC;IACMC,WAAmB;IACnBC,KAAW;IAE5B,YAAYC,UAAiC,CAAC,CAAC,CAAE;QAC/C,IAAI,CAACF,UAAU,GAAGE,QAAQF,UAAU,IAAI;QACxC,IAAI,CAACC,IAAI,GACPC,QAAQD,IAAI,IACX,CAAA,OAAOE,MAAMC;YACZ,MAAMC,SAAS,MAAMR,cAAcM,MAAMC,MAAM;gBAC7CE,UAAU;gBACVC,WAAW,OAAO;YACpB;YACA,OAAO;gBAAEC,QAAQH,OAAOG,MAAM;gBAAEC,QAAQJ,OAAOI,MAAM;YAAC;QACxD,CAAA;IACJ;IAEA,MAAMC,WAA6D;QACjE,IAAI;YACF,MAAMC,gBAAgB,MAAM,IAAI,CAACV,IAAI,CAAC,IAAI,CAACD,UAAU,EAAE;gBAAC;aAAY;YACpE,MAAMY,aAAa,MAAM,IAAI,CAACX,IAAI,CAAC,IAAI,CAACD,UAAU,EAAE;gBAAC;aAAS;YAC9D,MAAMa,UAAUf,SAASgB,MAAM,CAAC,CAACC,aAAe,CAACH,WAAWJ,MAAM,CAACQ,QAAQ,CAACD;YAC5E,IAAIF,QAAQI,MAAM,GAAG,GAAG;gBACtB,MAAM,IAAItB,iBACR,CAAC,8DAA8D,EAAEkB,QAAQK,IAAI,CAAC,MAAM,CAAC,CAAC,EACtF;YAEJ;YACA,OAAO;gBACLlB,YAAY,IAAI,CAACA,UAAU;gBAC3BmB,SAASvB,aAAae,cAAcH,MAAM,EAAE,QAAQ;YACtD;QACF,EAAE,OAAOY,OAAO;YACd,IAAIA,iBAAiBzB,kBAAkB,MAAMyB;YAC7C,MAAM,IAAIzB,iBACR,CAAC,8BAA8B,EAAEC,aAAa,AAACwB,MAAgBC,OAAO,EAAE,MAAM,EAC9E;QAEJ;IACF;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClaudePrintAgentService.d.ts","sourceRoot":"","sources":["../../../../src/providers/claude/durable/ClaudePrintAgentService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGtF,OAAO,EAAE,iBAAiB,EAAE,KAAK,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACtF,OAAO,EAEL,KAAK,uBAAuB,EAC7B,MAAM,4CAA4C,CAAC;AACpD,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAErF,UAAU,cAAe,SAAQ,oBAAoB;IACnD,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAC9D,IAAI,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChC,qBAAqB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5F;AAED,UAAU,SAAS;IACjB,QAAQ,IAAI,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC9D;AACD,UAAU,UAAU;IAClB,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAAC;CACtF;AAED,MAAM,WAAW,8BAA8B;IAC7C,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,qBAAsB,SAAQ,oBAAoB;IACjE,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,uBAAuB;IAClC,QAAQ,CAAC,UAAU,EAAE,cAAc,CAAC;IACpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAY;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAS;gBAEzB,OAAO,GAAE,8BAAmC;IAOlD,MAAM,CAAC,KAAK,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;IAK7D,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,qBAAqB,CAAC;CAyB9E"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/providers/claude/durable/ClaudePrintAgentService.ts"],"sourcesContent":["import type { DurableAgent, ProcessIdentity } from \"../../../durable/DurableAgent.js\";\nimport { ClaudePrintError } from \"../../../durable/DurableAgent.js\";\nimport { ClaudeCliProbe } from \"./ClaudeCliProbe.js\";\nimport { ClaudePrintRunner, type ClaudePrintRunResult } from \"./ClaudePrintRunner.js\";\nimport {\n DurableAgentRepository,\n type CreateDurableAgentInput,\n} from \"../../../durable/DurableAgentRepository.js\";\nimport { runDurableAgent, type DurableRunRepository } from \"../../../durable/run.js\";\n\ninterface RepositoryLike extends DurableRunRepository {\n create(input: CreateDurableAgentInput): Promise<DurableAgent>;\n list(): Promise<DurableAgent[]>;\n recordProviderProcess(id: string, token: string, identity: ProcessIdentity): Promise<void>;\n}\n\ninterface ProbeLike {\n validate(): Promise<{ executable: string; version: string }>;\n}\ninterface RunnerLike {\n run(request: Parameters<ClaudePrintRunner[\"run\"]>[0]): Promise<ClaudePrintRunResult>;\n}\n\nexport interface ClaudePrintAgentServiceOptions {\n repository?: RepositoryLike;\n probe?: ProbeLike;\n runner?: RunnerLike;\n executable?: string;\n}\n\nexport interface ClaudePrintSendResult extends ClaudePrintRunResult {\n agentId: string;\n agentName: string;\n}\n\nexport class ClaudePrintAgentService {\n readonly repository: RepositoryLike;\n private readonly probe: ProbeLike;\n private readonly runner: RunnerLike;\n private readonly executable?: string;\n\n constructor(options: ClaudePrintAgentServiceOptions = {}) {\n this.repository = options.repository ?? new DurableAgentRepository();\n this.probe = options.probe ?? new ClaudeCliProbe();\n this.runner = options.runner ?? new ClaudePrintRunner();\n this.executable = options.executable;\n }\n\n async create(input: CreateDurableAgentInput): Promise<DurableAgent> {\n await this.probe.validate();\n return this.repository.create(input);\n }\n\n async send(reference: string, prompt: string): Promise<ClaudePrintSendResult> {\n const completed = await runDurableAgent({\n reference,\n provider: \"claude\",\n repository: this.repository,\n ambiguousError: () =>\n new ClaudePrintError(\n `Multiple durable agents match \"${reference}\".`,\n \"DURABLE_AGENT_AMBIGUOUS\",\n ),\n providerError: () =>\n new ClaudePrintError(\"Durable agent provider is not Claude.\", \"CLAUDE_PRINT_UNSUPPORTED\"),\n execute: (agent, token) =>\n this.runner.run({\n agent,\n prompt,\n executable: this.executable,\n firstRun: agent.sessionHealth === \"uninitialized\",\n onSpawn: (identity) => this.repository.recordProviderProcess(agent.id, token, identity),\n }),\n isSessionMismatch: (error) =>\n error instanceof ClaudePrintError && error.code === \"CLAUDE_SESSION_MISMATCH\",\n });\n return { ...completed.result, agentId: completed.agent.id, agentName: completed.agent.name };\n }\n}\n"],"names":["ClaudePrintError","ClaudeCliProbe","ClaudePrintRunner","DurableAgentRepository","runDurableAgent","ClaudePrintAgentService","repository","probe","runner","executable","options","create","input","validate","send","reference","prompt","completed","provider","ambiguousError","providerError","execute","agent","token","run","firstRun","sessionHealth","onSpawn","identity","recordProviderProcess","id","isSessionMismatch","error","code","result","agentId","agentName","name"],"mappings":"AACA,SAASA,gBAAgB,QAAQ,mCAAmC;AACpE,SAASC,cAAc,QAAQ,sBAAsB;AACrD,SAASC,iBAAiB,QAAmC,yBAAyB;AACtF,SACEC,sBAAsB,QAEjB,6CAA6C;AACpD,SAASC,eAAe,QAAmC,0BAA0B;AA2BrF,OAAO,MAAMC;IACFC,WAA2B;IACnBC,MAAiB;IACjBC,OAAmB;IACnBC,WAAoB;IAErC,YAAYC,UAA0C,CAAC,CAAC,CAAE;QACxD,IAAI,CAACJ,UAAU,GAAGI,QAAQJ,UAAU,IAAI,IAAIH;QAC5C,IAAI,CAACI,KAAK,GAAGG,QAAQH,KAAK,IAAI,IAAIN;QAClC,IAAI,CAACO,MAAM,GAAGE,QAAQF,MAAM,IAAI,IAAIN;QACpC,IAAI,CAACO,UAAU,GAAGC,QAAQD,UAAU;IACtC;IAEA,MAAME,OAAOC,KAA8B,EAAyB;QAClE,MAAM,IAAI,CAACL,KAAK,CAACM,QAAQ;QACzB,OAAO,IAAI,CAACP,UAAU,CAACK,MAAM,CAACC;IAChC;IAEA,MAAME,KAAKC,SAAiB,EAAEC,MAAc,EAAkC;QAC5E,MAAMC,YAAY,MAAMb,gBAAgB;YACtCW;YACAG,UAAU;YACVZ,YAAY,IAAI,CAACA,UAAU;YAC3Ba,gBAAgB,IACd,IAAInB,iBACF,CAAC,+BAA+B,EAAEe,UAAU,EAAE,CAAC,EAC/C;YAEJK,eAAe,IACb,IAAIpB,iBAAiB,yCAAyC;YAChEqB,SAAS,CAACC,OAAOC,QACf,IAAI,CAACf,MAAM,CAACgB,GAAG,CAAC;oBACdF;oBACAN;oBACAP,YAAY,IAAI,CAACA,UAAU;oBAC3BgB,UAAUH,MAAMI,aAAa,KAAK;oBAClCC,SAAS,CAACC,WAAa,IAAI,CAACtB,UAAU,CAACuB,qBAAqB,CAACP,MAAMQ,EAAE,EAAEP,OAAOK;gBAChF;YACFG,mBAAmB,CAACC,QAClBA,iBAAiBhC,oBAAoBgC,MAAMC,IAAI,KAAK;QACxD;QACA,OAAO;YAAE,GAAGhB,UAAUiB,MAAM;YAAEC,SAASlB,UAAUK,KAAK,CAACQ,EAAE;YAAEM,WAAWnB,UAAUK,KAAK,CAACe,IAAI;QAAC;IAC7F;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClaudePrintRunner.d.ts","sourceRoot":"","sources":["../../../../src/providers/claude/durable/ClaudePrintRunner.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC9B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAE5F,OAAO,EAAyB,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAI3F,KAAK,KAAK,GAAG,CACX,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,EAAE,wBAAwB,GAAG;IAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,KACpE,8BAA8B,CAAC;AAEpC,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,kBAAkB,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAQ;IAC9B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAmB;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;gBAE1B,OAAO,GAAE,wBAA6B;IAM5C,GAAG,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,oBAAoB,CAAC;CAqDzE"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/providers/claude/durable/ClaudePrintRunner.ts"],"sourcesContent":["import {\n spawn as nodeSpawn,\n type ChildProcessWithoutNullStreams,\n type SpawnOptionsWithoutStdio,\n} from \"child_process\";\nimport type { ClaudeDurableAgent, ProcessIdentity } from \"../../../durable/DurableAgent.js\";\nimport { ClaudePrintError } from \"../../../durable/DurableAgent.js\";\nimport { LocalProcessInspector, type ProcessInspector } from \"../../../durable/process.js\";\nimport { waitForChildClose } from \"../../../durable/utils.js\";\nimport { ClaudeStreamParser } from \"./ClaudeStreamParser.js\";\n\ntype Spawn = (\n command: string,\n args: readonly string[],\n options: SpawnOptionsWithoutStdio & { stdio: [\"pipe\", \"pipe\", \"pipe\"] },\n) => ChildProcessWithoutNullStreams;\n\nexport interface ClaudePrintRunRequest {\n agent: ClaudeDurableAgent;\n prompt: string;\n executable?: string;\n firstRun: boolean;\n onSpawn(identity: ProcessIdentity): Promise<void>;\n}\n\nexport interface ClaudePrintRunResult {\n sessionId: string;\n result: string;\n exitCode: number;\n}\n\nexport interface ClaudePrintRunnerOptions {\n spawn?: Spawn;\n processInspector?: ProcessInspector;\n maxLineBytes?: number;\n}\n\nexport class ClaudePrintRunner {\n private readonly spawn: Spawn;\n private readonly processInspector: ProcessInspector;\n private readonly maxLineBytes: number;\n\n constructor(options: ClaudePrintRunnerOptions = {}) {\n this.spawn = options.spawn ?? (nodeSpawn as Spawn);\n this.processInspector = options.processInspector ?? new LocalProcessInspector();\n this.maxLineBytes = options.maxLineBytes ?? 1024 * 1024;\n }\n\n async run(request: ClaudePrintRunRequest): Promise<ClaudePrintRunResult> {\n const sessionArgs = request.firstRun\n ? [\"--session-id\", request.agent.providerSessionId]\n : [\"--resume\", request.agent.providerSessionId];\n const args = [\"-p\", ...sessionArgs, \"--output-format\", \"stream-json\", \"--verbose\"];\n const child = this.spawn(request.executable ?? \"claude\", args, {\n cwd: request.agent.cwd,\n shell: false,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n if (!child.pid) {\n child.kill();\n throw new ClaudePrintError(\n \"Claude process did not provide a PID.\",\n \"CLAUDE_PROCESS_IDENTITY\",\n );\n }\n const identity = this.processInspector.getIdentity(child.pid);\n if (!identity) {\n child.kill();\n throw new ClaudePrintError(\n \"Cannot verify Claude process identity.\",\n \"CLAUDE_PROCESS_IDENTITY\",\n );\n }\n\n const parser = new ClaudeStreamParser(request.agent.providerSessionId, this.maxLineBytes);\n\n child.stdout.on(\"data\", (chunk: Buffer | string) => {\n if (parser.hasFailed()) return;\n try {\n parser.accept(chunk);\n } catch (error) {\n parser.fail(error);\n }\n });\n // Drain provider diagnostics without reflecting potentially sensitive prompt/tool data.\n child.stderr.resume();\n\n const closed = waitForChildClose(child);\n\n try {\n await request.onSpawn(identity);\n } catch (error) {\n child.kill();\n throw error;\n }\n\n child.stdin.end(request.prompt);\n const { code, signal } = await closed;\n\n return parser.result({ code, signal });\n }\n}\n"],"names":["spawn","nodeSpawn","ClaudePrintError","LocalProcessInspector","waitForChildClose","ClaudeStreamParser","ClaudePrintRunner","processInspector","maxLineBytes","options","run","request","sessionArgs","firstRun","agent","providerSessionId","args","child","executable","cwd","shell","stdio","pid","kill","identity","getIdentity","parser","stdout","on","chunk","hasFailed","accept","error","fail","stderr","resume","closed","onSpawn","stdin","end","prompt","code","signal","result"],"mappings":"AAAA,SACEA,SAASC,SAAS,QAGb,gBAAgB;AAEvB,SAASC,gBAAgB,QAAQ,mCAAmC;AACpE,SAASC,qBAAqB,QAA+B,8BAA8B;AAC3F,SAASC,iBAAiB,QAAQ,4BAA4B;AAC9D,SAASC,kBAAkB,QAAQ,0BAA0B;AA4B7D,OAAO,MAAMC;IACMN,MAAa;IACbO,iBAAmC;IACnCC,aAAqB;IAEtC,YAAYC,UAAoC,CAAC,CAAC,CAAE;QAClD,IAAI,CAACT,KAAK,GAAGS,QAAQT,KAAK,IAAKC;QAC/B,IAAI,CAACM,gBAAgB,GAAGE,QAAQF,gBAAgB,IAAI,IAAIJ;QACxD,IAAI,CAACK,YAAY,GAAGC,QAAQD,YAAY,IAAI,OAAO;IACrD;IAEA,MAAME,IAAIC,OAA8B,EAAiC;QACvE,MAAMC,cAAcD,QAAQE,QAAQ,GAChC;YAAC;YAAgBF,QAAQG,KAAK,CAACC,iBAAiB;SAAC,GACjD;YAAC;YAAYJ,QAAQG,KAAK,CAACC,iBAAiB;SAAC;QACjD,MAAMC,OAAO;YAAC;eAASJ;YAAa;YAAmB;YAAe;SAAY;QAClF,MAAMK,QAAQ,IAAI,CAACjB,KAAK,CAACW,QAAQO,UAAU,IAAI,UAAUF,MAAM;YAC7DG,KAAKR,QAAQG,KAAK,CAACK,GAAG;YACtBC,OAAO;YACPC,OAAO;gBAAC;gBAAQ;gBAAQ;aAAO;QACjC;QACA,IAAI,CAACJ,MAAMK,GAAG,EAAE;YACdL,MAAMM,IAAI;YACV,MAAM,IAAIrB,iBACR,yCACA;QAEJ;QACA,MAAMsB,WAAW,IAAI,CAACjB,gBAAgB,CAACkB,WAAW,CAACR,MAAMK,GAAG;QAC5D,IAAI,CAACE,UAAU;YACbP,MAAMM,IAAI;YACV,MAAM,IAAIrB,iBACR,0CACA;QAEJ;QAEA,MAAMwB,SAAS,IAAIrB,mBAAmBM,QAAQG,KAAK,CAACC,iBAAiB,EAAE,IAAI,CAACP,YAAY;QAExFS,MAAMU,MAAM,CAACC,EAAE,CAAC,QAAQ,CAACC;YACvB,IAAIH,OAAOI,SAAS,IAAI;YACxB,IAAI;gBACFJ,OAAOK,MAAM,CAACF;YAChB,EAAE,OAAOG,OAAO;gBACdN,OAAOO,IAAI,CAACD;YACd;QACF;QACA,wFAAwF;QACxFf,MAAMiB,MAAM,CAACC,MAAM;QAEnB,MAAMC,SAAShC,kBAAkBa;QAEjC,IAAI;YACF,MAAMN,QAAQ0B,OAAO,CAACb;QACxB,EAAE,OAAOQ,OAAO;YACdf,MAAMM,IAAI;YACV,MAAMS;QACR;QAEAf,MAAMqB,KAAK,CAACC,GAAG,CAAC5B,QAAQ6B,MAAM;QAC9B,MAAM,EAAEC,IAAI,EAAEC,MAAM,EAAE,GAAG,MAAMN;QAE/B,OAAOV,OAAOiB,MAAM,CAAC;YAAEF;YAAMC;QAAO;IACtC;AACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ClaudeStreamParser.d.ts","sourceRoot":"","sources":["../../../../src/providers/claude/durable/ClaudeStreamParser.ts"],"names":[],"mappings":"AACA,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAEnE,qBAAa,kBAAkB;IAM3B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IALpC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,aAAa,CAAiC;gBAGnC,iBAAiB,EAAE,MAAM,EAC1C,YAAY,EAAE,MAAM;IAYtB,SAAS,IAAI,OAAO;IAIpB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAMpC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;IAO1B,MAAM,CAAC,KAAK,EAAE,gBAAgB,GAAG,oBAAoB;IAwBrD,OAAO,CAAC,WAAW;IAanB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,oBAAoB;CAc7B"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../../src/providers/claude/durable/ClaudeStreamParser.ts"],"sourcesContent":["import { ClaudePrintError } from \"../../../durable/DurableAgent.js\";\nimport { LineBuffer, type ChildCloseResult } from \"../../../durable/utils.js\";\nimport type { ClaudePrintRunResult } from \"./ClaudePrintRunner.js\";\n\nexport class ClaudeStreamParser {\n private readonly lines: LineBuffer;\n private terminal: ClaudePrintRunResult | null = null;\n private protocolError: ClaudePrintError | null = null;\n\n constructor(\n private readonly expectedSessionId: string,\n maxLineBytes: number,\n ) {\n this.lines = new LineBuffer(\n maxLineBytes,\n () =>\n new ClaudePrintError(\n \"Claude stream line exceeded the safety limit.\",\n \"CLAUDE_STREAM_OVERSIZED\",\n ),\n );\n }\n\n hasFailed(): boolean {\n return this.protocolError !== null;\n }\n\n accept(chunk: Buffer | string): void {\n for (const line of this.lines.accept(chunk)) {\n this.processLine(line);\n }\n }\n\n fail(error: unknown): void {\n this.protocolError =\n error instanceof ClaudePrintError\n ? error\n : new ClaudePrintError(\"Claude stream processing failed.\", \"CLAUDE_STREAM_INVALID\");\n }\n\n result(close: ChildCloseResult): ClaudePrintRunResult {\n if (this.protocolError) throw this.protocolError;\n this.lines.assertComplete(\n () =>\n new ClaudePrintError(\"Claude stream ended with incomplete JSON.\", \"CLAUDE_STREAM_INVALID\"),\n );\n if (close.code !== 0) {\n throw new ClaudePrintError(\n `Claude print run failed${close.signal ? ` (${close.signal})` : \".\"}`,\n \"CLAUDE_PROCESS_FAILED\",\n );\n }\n if (!this.terminal)\n throw new ClaudePrintError(\n \"Claude stream ended without a terminal result.\",\n \"CLAUDE_RESULT_MISSING\",\n );\n return {\n sessionId: this.terminal.sessionId,\n result: this.terminal.result,\n exitCode: close.code,\n };\n }\n\n private processLine(line: Buffer): void {\n if (line.length === 0) return;\n\n const event = this.parseEvent(line);\n if (typeof event.session_id === \"string\" && event.session_id !== this.expectedSessionId) {\n throw new ClaudePrintError(\n \"Claude returned a different session identity.\",\n \"CLAUDE_SESSION_MISMATCH\",\n );\n }\n if (event.type === \"result\") this.recordTerminalResult(event);\n }\n\n private parseEvent(line: Buffer): Record<string, unknown> {\n let value: unknown;\n try {\n value = JSON.parse(line.toString(\"utf8\"));\n } catch {\n throw new ClaudePrintError(\"Claude emitted malformed stream JSON.\", \"CLAUDE_STREAM_INVALID\");\n }\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ClaudePrintError(\n \"Claude emitted a non-object stream message.\",\n \"CLAUDE_STREAM_INVALID\",\n );\n }\n return value as Record<string, unknown>;\n }\n\n private recordTerminalResult(event: Record<string, unknown>): void {\n if (this.terminal)\n throw new ClaudePrintError(\n \"Claude emitted more than one terminal result.\",\n \"CLAUDE_STREAM_INVALID\",\n );\n if (typeof event.session_id !== \"string\" || typeof event.result !== \"string\") {\n throw new ClaudePrintError(\n \"Claude emitted an invalid terminal result.\",\n \"CLAUDE_STREAM_INVALID\",\n );\n }\n this.terminal = { sessionId: event.session_id, result: event.result, exitCode: 0 };\n }\n}\n"],"names":["ClaudePrintError","LineBuffer","ClaudeStreamParser","lines","terminal","protocolError","expectedSessionId","maxLineBytes","hasFailed","accept","chunk","line","processLine","fail","error","result","close","assertComplete","code","signal","sessionId","exitCode","length","event","parseEvent","session_id","type","recordTerminalResult","value","JSON","parse","toString","Array","isArray"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,mCAAmC;AACpE,SAASC,UAAU,QAA+B,4BAA4B;AAG9E,OAAO,MAAMC;;IACMC,MAAkB;IAC3BC,WAAwC,KAAK;IAC7CC,gBAAyC,KAAK;IAEtD,YACE,AAAiBC,iBAAyB,EAC1CC,YAAoB,CACpB;aAFiBD,oBAAAA;QAGjB,IAAI,CAACH,KAAK,GAAG,IAAIF,WACfM,cACA,IACE,IAAIP,iBACF,iDACA;IAGR;IAEAQ,YAAqB;QACnB,OAAO,IAAI,CAACH,aAAa,KAAK;IAChC;IAEAI,OAAOC,KAAsB,EAAQ;QACnC,KAAK,MAAMC,QAAQ,IAAI,CAACR,KAAK,CAACM,MAAM,CAACC,OAAQ;YAC3C,IAAI,CAACE,WAAW,CAACD;QACnB;IACF;IAEAE,KAAKC,KAAc,EAAQ;QACzB,IAAI,CAACT,aAAa,GAChBS,iBAAiBd,mBACbc,QACA,IAAId,iBAAiB,oCAAoC;IACjE;IAEAe,OAAOC,KAAuB,EAAwB;QACpD,IAAI,IAAI,CAACX,aAAa,EAAE,MAAM,IAAI,CAACA,aAAa;QAChD,IAAI,CAACF,KAAK,CAACc,cAAc,CACvB,IACE,IAAIjB,iBAAiB,6CAA6C;QAEtE,IAAIgB,MAAME,IAAI,KAAK,GAAG;YACpB,MAAM,IAAIlB,iBACR,CAAC,uBAAuB,EAAEgB,MAAMG,MAAM,GAAG,CAAC,EAAE,EAAEH,MAAMG,MAAM,CAAC,CAAC,CAAC,GAAG,KAAK,EACrE;QAEJ;QACA,IAAI,CAAC,IAAI,CAACf,QAAQ,EAChB,MAAM,IAAIJ,iBACR,kDACA;QAEJ,OAAO;YACLoB,WAAW,IAAI,CAAChB,QAAQ,CAACgB,SAAS;YAClCL,QAAQ,IAAI,CAACX,QAAQ,CAACW,MAAM;YAC5BM,UAAUL,MAAME,IAAI;QACtB;IACF;IAEQN,YAAYD,IAAY,EAAQ;QACtC,IAAIA,KAAKW,MAAM,KAAK,GAAG;QAEvB,MAAMC,QAAQ,IAAI,CAACC,UAAU,CAACb;QAC9B,IAAI,OAAOY,MAAME,UAAU,KAAK,YAAYF,MAAME,UAAU,KAAK,IAAI,CAACnB,iBAAiB,EAAE;YACvF,MAAM,IAAIN,iBACR,iDACA;QAEJ;QACA,IAAIuB,MAAMG,IAAI,KAAK,UAAU,IAAI,CAACC,oBAAoB,CAACJ;IACzD;IAEQC,WAAWb,IAAY,EAA2B;QACxD,IAAIiB;QACJ,IAAI;YACFA,QAAQC,KAAKC,KAAK,CAACnB,KAAKoB,QAAQ,CAAC;QACnC,EAAE,OAAM;YACN,MAAM,IAAI/B,iBAAiB,yCAAyC;QACtE;QACA,IAAI,CAAC4B,SAAS,OAAOA,UAAU,YAAYI,MAAMC,OAAO,CAACL,QAAQ;YAC/D,MAAM,IAAI5B,iBACR,+CACA;QAEJ;QACA,OAAO4B;IACT;IAEQD,qBAAqBJ,KAA8B,EAAQ;QACjE,IAAI,IAAI,CAACnB,QAAQ,EACf,MAAM,IAAIJ,iBACR,iDACA;QAEJ,IAAI,OAAOuB,MAAME,UAAU,KAAK,YAAY,OAAOF,MAAMR,MAAM,KAAK,UAAU;YAC5E,MAAM,IAAIf,iBACR,8CACA;QAEJ;QACA,IAAI,CAACI,QAAQ,GAAG;YAAEgB,WAAWG,MAAME,UAAU;YAAEV,QAAQQ,MAAMR,MAAM;YAAEM,UAAU;QAAE;IACnF;AACF"}
@@ -1,28 +0,0 @@
1
- import type { AgentAdapter, AgentInfo, ProcessInfo, ConversationMessage, SessionSummary, ListSessionsOptions, AgentDetectionContext } from "../../adapters/AgentAdapter.js";
2
- import { AgentRegistry } from "../../utils/AgentRegistry.js";
3
- export declare class CodexAdapter implements AgentAdapter {
4
- readonly type: "codex";
5
- readonly processNames: readonly ["codex"];
6
- private readonly registry;
7
- private readonly parser;
8
- private readonly mapper;
9
- private readonly codexSessionsDir;
10
- private readonly sessionMappingPath;
11
- constructor(registry?: AgentRegistry);
12
- canHandle(processInfo: ProcessInfo): boolean;
13
- detectAgents(context?: AgentDetectionContext): Promise<AgentInfo[]>;
14
- getConversation(sessionFilePath: string, options?: {
15
- verbose?: boolean;
16
- }): ConversationMessage[];
17
- listSessions(opts?: ListSessionsOptions): Promise<SessionSummary[]>;
18
- findSessionsById(sessionId: string): Promise<SessionSummary[]>;
19
- private getCodexProcesses;
20
- private createLocator;
21
- private createSessionMapping;
22
- private mapSessionMappingMatches;
23
- private mapRegistryCache;
24
- private mapDirectMatches;
25
- private mapLegacyMatches;
26
- private findUnmatchedProcesses;
27
- }
28
- //# sourceMappingURL=CodexAdapter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"CodexAdapter.d.ts","sourceRoot":"","sources":["../../../src/providers/codex/CodexAdapter.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,YAAY,EACZ,SAAS,EACT,WAAW,EACX,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,qBAAqB,EACtB,MAAM,gCAAgC,CAAC;AAOxC,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAW7D,qBAAa,YAAa,YAAW,YAAY;IAC/C,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,YAAY,qBAAsB;IAE3C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAgB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;gBAEhC,QAAQ,GAAE,aAAuC;IAS7D,SAAS,CAAC,WAAW,EAAE,WAAW,GAAG,OAAO;IAKtC,YAAY,CAAC,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IA4BzE,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;IAanE,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;YAQtD,iBAAiB;IAM/B,OAAO,CAAC,aAAa;IAIrB,OAAO,CAAC,oBAAoB;IAO5B,OAAO,CAAC,wBAAwB;IAgBhC,OAAO,CAAC,gBAAgB;IA8BxB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,gBAAgB;IAsBxB,OAAO,CAAC,sBAAsB;CAI/B"}
@@ -1,170 +0,0 @@
1
- import * as fs from "fs";
2
- import * as path from "path";
3
- import { captureProcessSnapshot, executableBasename, filterByProcessNames } from "../../utils/process.js";
4
- import { safeReadFile } from "../../utils/session.js";
5
- import { AgentRegistry } from "../../utils/AgentRegistry.js";
6
- import { CodexAgentMapper } from "./CodexAgentMapper.js";
7
- import { CodexSessionLocator } from "./CodexSessionLocator.js";
8
- import { CodexSessionMapping } from "./CodexSessionMapping.js";
9
- import { CodexSessionParser } from "./CodexSessionParser.js";
10
- export class CodexAdapter {
11
- type = "codex";
12
- processNames = [
13
- "codex"
14
- ];
15
- registry;
16
- parser;
17
- mapper;
18
- codexSessionsDir;
19
- sessionMappingPath;
20
- constructor(registry = AgentRegistry.default()){
21
- const homeDir = process.env.HOME || process.env.USERPROFILE || "";
22
- this.registry = registry;
23
- this.parser = new CodexSessionParser();
24
- this.mapper = new CodexAgentMapper(this.parser);
25
- this.codexSessionsDir = path.join(homeDir, ".codex", "sessions");
26
- this.sessionMappingPath = path.join(homeDir, ".codex", "ai-devkit", "sessions.json");
27
- }
28
- canHandle(processInfo) {
29
- const base = executableBasename(processInfo.command);
30
- return base === "codex" || base === "codex.exe";
31
- }
32
- async detectAgents(context) {
33
- const processes = await this.getCodexProcesses(context);
34
- if (processes.length === 0) return [];
35
- const mappingResult = this.mapSessionMappingMatches(processes);
36
- const cacheResult = this.mapRegistryCache(mappingResult.fallback);
37
- const locatorResult = this.createLocator().matchRunningProcesses(cacheResult.fallback);
38
- const directResult = this.mapDirectMatches(locatorResult.direct);
39
- const legacyResult = this.mapLegacyMatches(locatorResult.legacyMatches, locatorResult.contentCache);
40
- const unmatchedProcesses = this.findUnmatchedProcesses(locatorResult.fallback, [
41
- ...directResult.agents,
42
- ...legacyResult.agents
43
- ]);
44
- return [
45
- ...mappingResult.agents,
46
- ...cacheResult.agents,
47
- ...directResult.agents,
48
- ...legacyResult.agents,
49
- ...directResult.fallback.map((processInfo)=>this.mapper.mapProcessOnlyAgent(processInfo)),
50
- ...unmatchedProcesses.map((processInfo)=>this.mapper.mapProcessOnlyAgent(processInfo))
51
- ];
52
- }
53
- getConversation(sessionFilePath, options) {
54
- return this.parser.getConversation(sessionFilePath, options);
55
- }
56
- async listSessions(opts) {
57
- const summaries = [];
58
- for (const filePath of this.createLocator().discoverHistoricalSessionFiles()){
59
- const summary = this.parser.fileToSessionSummary(filePath);
60
- if (!summary) continue;
61
- if (opts?.cwd !== undefined && summary.cwd !== opts.cwd) continue;
62
- summaries.push(summary);
63
- }
64
- return summaries;
65
- }
66
- async findSessionsById(sessionId) {
67
- const sessionFile = this.createLocator().findSessionFileById(sessionId);
68
- if (!sessionFile) return [];
69
- const summary = this.parser.fileToSessionSummary(sessionFile.filePath);
70
- return summary?.sessionId === sessionId ? [
71
- summary
72
- ] : [];
73
- }
74
- async getCodexProcesses(context) {
75
- const snapshot = context?.processes ?? await captureProcessSnapshot(this.processNames);
76
- const relevant = filterByProcessNames(snapshot, this.processNames);
77
- return relevant.filter((processInfo)=>this.canHandle(processInfo));
78
- }
79
- createLocator() {
80
- return new CodexSessionLocator({
81
- sessionsDir: this.codexSessionsDir
82
- }, this.parser);
83
- }
84
- createSessionMapping() {
85
- return new CodexSessionMapping({
86
- mappingPath: this.sessionMappingPath,
87
- sessionsDir: this.codexSessionsDir
88
- });
89
- }
90
- mapSessionMappingMatches(processes) {
91
- const { matches, fallback } = this.createSessionMapping().match(processes);
92
- const agents = [];
93
- for (const match of matches){
94
- const session = this.parser.readSession(match.filePath);
95
- if (session) {
96
- agents.push(this.mapper.mapSessionToAgent(session, match.process, match.filePath));
97
- } else {
98
- fallback.push(match.process);
99
- }
100
- }
101
- return {
102
- agents,
103
- fallback
104
- };
105
- }
106
- mapRegistryCache(processes) {
107
- const agents = [];
108
- const fallback = [];
109
- const byPid = new Map(this.registry.list().map((entry)=>[
110
- entry.pid,
111
- entry
112
- ]));
113
- for (const processInfo of processes){
114
- const entry = byPid.get(processInfo.pid);
115
- if (!entry || entry.type !== this.type || !entry.sessionFilePath || !fs.existsSync(entry.sessionFilePath)) {
116
- fallback.push(processInfo);
117
- continue;
118
- }
119
- const content = safeReadFile(entry.sessionFilePath);
120
- const session = this.parser.readSession(entry.sessionFilePath, content);
121
- if (!session) {
122
- fallback.push(processInfo);
123
- continue;
124
- }
125
- agents.push(this.mapper.mapSessionToAgent(session, processInfo, entry.sessionFilePath));
126
- }
127
- return {
128
- agents,
129
- fallback
130
- };
131
- }
132
- mapDirectMatches(matches) {
133
- const agents = [];
134
- const fallback = [];
135
- for (const match of matches){
136
- const session = this.parser.readSession(match.sessionFile.filePath);
137
- if (session) {
138
- agents.push(this.mapper.mapSessionToAgent(session, match.process, match.sessionFile.filePath));
139
- } else {
140
- fallback.push(match.process);
141
- }
142
- }
143
- return {
144
- agents,
145
- fallback
146
- };
147
- }
148
- mapLegacyMatches(matches, contentCache) {
149
- const agents = [];
150
- const fallback = [];
151
- for (const match of matches){
152
- const session = this.parser.readSession(match.session.filePath, contentCache.get(match.session.filePath));
153
- if (session) {
154
- agents.push(this.mapper.mapSessionToAgent(session, match.process, match.session.filePath));
155
- } else {
156
- fallback.push(match.process);
157
- }
158
- }
159
- return {
160
- agents,
161
- fallback
162
- };
163
- }
164
- findUnmatchedProcesses(processes, agents) {
165
- const matchedPids = new Set(agents.map((agent)=>agent.pid));
166
- return processes.filter((processInfo)=>!matchedPids.has(processInfo.pid));
167
- }
168
- }
169
-
170
- //# sourceMappingURL=CodexAdapter.js.map