@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
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/__tests__/utils/IncrementalJsonlSummary.test.ts"],"sourcesContent":["import * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\n\nimport {\n DEFAULT_HEAD_BYTES,\n DEFAULT_TAIL_BYTES,\n IncrementalJsonlSummary,\n reduceJsonlContent,\n type JsonlSummaryReducer,\n} from \"../../utils/IncrementalJsonlSummary.js\";\n\nvi.mock(\"fs\", async (importOriginal) => {\n const actual = (await importOriginal()) as typeof import(\"fs\");\n return { ...actual, readSync: vi.fn(actual.readSync), readFileSync: vi.fn(actual.readFileSync) };\n});\n\nconst mockedReadSync = vi.mocked(fs.readSync);\nconst mockedReadFileSync = vi.mocked(fs.readFileSync);\n\n/** Records every parsed entry (malformed lines as \"<bad>\") plus a running count. */\ninterface RecordingState {\n count: number;\n entries: unknown[];\n}\n\nconst recordingReducer: JsonlSummaryReducer<RecordingState> = {\n initial: () => ({ count: 0, entries: [] }),\n reduce: (state, entry) => ({\n count: state.count + 1,\n entries: [...state.entries, entry === undefined ? \"<bad>\" : entry],\n }),\n};\n\nfunction bytesRead(): number {\n let total = 0;\n for (const result of mockedReadSync.mock.results) {\n if (result.type === \"return\") total += result.value as number;\n }\n for (const result of mockedReadFileSync.mock.results) {\n if (result.type === \"return\") total += Buffer.byteLength(result.value as string | Buffer);\n }\n return total;\n}\n\nfunction line(value: unknown): string {\n return `${JSON.stringify(value)}\\n`;\n}\n\ndescribe(\"reduceJsonlContent\", () => {\n it(\"folds non-blank lines, passing undefined for malformed JSON\", () => {\n const state = reduceJsonlContent(recordingReducer, '\\n \\n{\"a\":1}\\nnot json\\n\\n{\"b\":2}');\n expect(state.entries).toEqual([{ a: 1 }, \"<bad>\", { b: 2 }]);\n });\n\n it(\"returns the initial state for empty content\", () => {\n expect(reduceJsonlContent(recordingReducer, \"\")).toEqual({ count: 0, entries: [] });\n });\n});\n\ndescribe(\"IncrementalJsonlSummary\", () => {\n let tmpDir: string;\n let filePath: string;\n let cache: IncrementalJsonlSummary<RecordingState>;\n\n beforeEach(() => {\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), \"incremental-jsonl-\"));\n filePath = path.join(tmpDir, \"session.jsonl\");\n cache = new IncrementalJsonlSummary(recordingReducer);\n mockedReadSync.mockClear();\n mockedReadFileSync.mockClear();\n });\n\n afterEach(() => {\n fs.rmSync(tmpDir, { recursive: true, force: true });\n });\n\n it(\"returns null for a missing file\", () => {\n expect(cache.read(path.join(tmpDir, \"missing.jsonl\"))).toBeNull();\n expect(cache.size).toBe(0);\n });\n\n it(\"summarizes a file and reports its size and mtime\", () => {\n fs.writeFileSync(filePath, line({ a: 1 }) + line({ b: 2 }));\n const stat = fs.statSync(filePath);\n\n const result = cache.read(filePath);\n\n expect(result?.state.entries).toEqual([{ a: 1 }, { b: 2 }]);\n expect(result?.size).toBe(stat.size);\n expect(result?.mtime).toEqual(stat.mtime);\n });\n\n it(\"reads 0 bytes when the file is unchanged\", () => {\n fs.writeFileSync(filePath, line({ a: 1 }) + line({ b: 2 }));\n const first = cache.read(filePath);\n mockedReadSync.mockClear();\n mockedReadFileSync.mockClear();\n\n const second = cache.read(filePath);\n\n expect(bytesRead()).toBe(0);\n expect(second?.state).toEqual(first?.state);\n });\n\n it(\"reads only the appended bytes when the file grows\", () => {\n fs.writeFileSync(filePath, line({ a: \"x\".repeat(200_000) }));\n cache.read(filePath);\n mockedReadSync.mockClear();\n\n const appended = line({ b: 2 }) + line({ c: 3 });\n fs.appendFileSync(filePath, appended);\n const result = cache.read(filePath);\n\n expect(bytesRead()).toBe(Buffer.byteLength(appended));\n expect(result?.state.entries.slice(1)).toEqual([{ b: 2 }, { c: 3 }]);\n expect(result?.state.count).toBe(3);\n });\n\n it(\"handles lines spanning read chunks and multi-byte characters\", () => {\n const small = new IncrementalJsonlSummary(recordingReducer, { chunkSize: 7 });\n const entries = [{ text: \"héllo wörld 👋\" }, { text: \"日本語のテキスト\" }, { n: 3 }];\n fs.writeFileSync(filePath, entries.map(line).join(\"\"));\n\n expect(small.read(filePath)?.state.entries).toEqual(entries);\n });\n\n it(\"does not reduce an unterminated line until it is complete, without duplicating it\", () => {\n fs.writeFileSync(filePath, line({ a: 1 }) + '{\"b\":');\n expect(cache.read(filePath)?.state.entries).toEqual([{ a: 1 }]);\n\n fs.appendFileSync(filePath, \"2\");\n expect(cache.read(filePath)?.state.entries).toEqual([{ a: 1 }]);\n\n fs.appendFileSync(filePath, \"}\\n\");\n expect(cache.read(filePath)?.state.entries).toEqual([{ a: 1 }, { b: 2 }]);\n\n fs.appendFileSync(filePath, line({ c: 3 }));\n expect(cache.read(filePath)?.state.entries).toEqual([{ a: 1 }, { b: 2 }, { c: 3 }]);\n });\n\n it(\"includes a valid unterminated last line in the result but re-reads it once terminated\", () => {\n fs.writeFileSync(filePath, line({ a: 1 }) + '{\"b\":2}');\n expect(cache.read(filePath)?.state.entries).toEqual([{ a: 1 }, { b: 2 }]);\n\n fs.appendFileSync(filePath, \"\\n\" + line({ c: 3 }));\n expect(cache.read(filePath)?.state.entries).toEqual([{ a: 1 }, { b: 2 }, { c: 3 }]);\n });\n\n it(\"matches a one-shot fold for every split point of an appended file\", () => {\n const content = [\n line({ a: 1 }),\n \"\\n\",\n \"garbage\\n\",\n line({ b: \"ünïcode\" }),\n line({ c: [1, 2, 3] }),\n '{\"d\":4}',\n ].join(\"\");\n const buffer = Buffer.from(content);\n const expected = reduceJsonlContent(recordingReducer, content);\n\n for (let split = 0; split <= buffer.length; split++) {\n const splitCache = new IncrementalJsonlSummary(recordingReducer, { chunkSize: 5 });\n fs.writeFileSync(filePath, buffer.subarray(0, split));\n splitCache.read(filePath);\n fs.appendFileSync(filePath, buffer.subarray(split));\n expect(splitCache.read(filePath)?.state).toEqual(expected);\n }\n });\n\n it(\"rebuilds when the file shrinks\", () => {\n fs.writeFileSync(filePath, line({ a: 1 }) + line({ b: 2 }));\n cache.read(filePath);\n\n fs.writeFileSync(filePath, line({ z: 9 }));\n\n expect(cache.read(filePath)?.state.entries).toEqual([{ z: 9 }]);\n });\n\n it(\"rebuilds when the file is replaced by a different inode\", () => {\n fs.writeFileSync(filePath, line({ a: 1 }));\n cache.read(filePath);\n\n const replacement = path.join(tmpDir, \"replacement.jsonl\");\n fs.writeFileSync(replacement, line({ a: 1 }) + line({ rotated: true }));\n fs.renameSync(replacement, filePath);\n\n expect(cache.read(filePath)?.state.entries).toEqual([{ a: 1 }, { rotated: true }]);\n });\n\n it(\"rebuilds when the size is unchanged but the mtime moved\", () => {\n fs.writeFileSync(filePath, line({ a: 1 }));\n cache.read(filePath);\n\n fs.writeFileSync(filePath, line({ b: 2 }));\n const future = new Date(Date.now() + 10_000);\n fs.utimesSync(filePath, future, future);\n\n expect(cache.read(filePath)?.state.entries).toEqual([{ b: 2 }]);\n });\n\n it(\"drops the entry when a cached file disappears\", () => {\n fs.writeFileSync(filePath, line({ a: 1 }));\n cache.read(filePath);\n fs.rmSync(filePath);\n\n expect(cache.read(filePath)).toBeNull();\n expect(cache.size).toBe(0);\n });\n\n it(\"evicts entries not read since the previous prune\", () => {\n const other = path.join(tmpDir, \"other.jsonl\");\n fs.writeFileSync(filePath, line({ a: 1 }));\n fs.writeFileSync(other, line({ b: 2 }));\n\n cache.read(filePath);\n cache.read(other);\n cache.prune();\n expect(cache.size).toBe(2);\n\n cache.read(filePath);\n cache.prune();\n expect(cache.size).toBe(1);\n\n cache.prune();\n expect(cache.size).toBe(0);\n });\n\n it(\"keeps only reducer state and stat metadata per entry\", () => {\n fs.writeFileSync(filePath, line({ a: \"x\".repeat(10_000) }) + '{\"partial\":');\n cache.read(filePath);\n\n const entry = (cache as any).entries.get(filePath);\n expect(Object.keys(entry).sort()).toEqual(\n [\n \"committed\",\n \"dev\",\n \"discarding\",\n \"ino\",\n \"mtime\",\n \"mtimeMs\",\n \"offset\",\n \"seen\",\n \"size\",\n \"skippedBytes\",\n \"state\",\n ].sort(),\n );\n });\n});\n\ndescribe(\"IncrementalJsonlSummary bounded cold start\", () => {\n let tmpDir: string;\n let filePath: string;\n\n /** Records entries plus how many times the middle of the file was skipped. */\n interface GapState extends RecordingState {\n gaps: number;\n }\n const gapReducer: JsonlSummaryReducer<GapState> = {\n initial: () => ({ count: 0, entries: [], gaps: 0 }),\n reduce: (state, entry) => ({\n ...state,\n count: state.count + 1,\n entries: [...state.entries, entry === undefined ? \"<bad>\" : entry],\n }),\n skip: (state) => ({ ...state, gaps: state.gaps + 1 }),\n };\n\n const bounds = { headBytes: 64, tailBytes: 128 };\n const pad = (n: number) => line({ pad: \"p\".repeat(n) });\n\n beforeEach(() => {\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), \"bounded-jsonl-\"));\n filePath = path.join(tmpDir, \"session.jsonl\");\n mockedReadSync.mockClear();\n mockedReadFileSync.mockClear();\n });\n\n afterEach(() => {\n fs.rmSync(tmpDir, { recursive: true, force: true });\n });\n\n it(\"parses the whole file when it fits within head + tail\", () => {\n const content = line({ a: 1 }) + pad(100) + line({ z: 9 });\n expect(Buffer.byteLength(content)).toBeLessThanOrEqual(192);\n fs.writeFileSync(filePath, content);\n\n const result = new IncrementalJsonlSummary(gapReducer, { bounds }).read(filePath);\n\n expect(result?.state).toEqual(reduceJsonlContent(gapReducer, content));\n expect(result?.skippedBytes).toBe(0);\n });\n\n it(\"folds head lines, then skip(), then tail lines, reading at most head + tail + 1 bytes\", () => {\n const tail = line({ y: 8 }) + line({ z: 9 });\n const content = line({ a: 1 }) + pad(40) + pad(1000) + pad(40) + tail;\n fs.writeFileSync(filePath, content);\n\n const result = new IncrementalJsonlSummary(gapReducer, { bounds }).read(filePath);\n\n // +1: the byte before the tail window tells whether it starts on a line boundary\n expect(bytesRead()).toBeLessThanOrEqual(bounds.headBytes + bounds.tailBytes + 1);\n expect(result?.state.gaps).toBe(1);\n expect(result?.state.entries[0]).toEqual({ a: 1 });\n expect(result?.state.entries.slice(-2)).toEqual([{ y: 8 }, { z: 9 }]);\n expect(result?.state.entries).not.toContainEqual({ pad: \"p\".repeat(1000) });\n expect(result?.size).toBe(Buffer.byteLength(content));\n expect(result?.skippedBytes).toBe(Buffer.byteLength(content) - 64 - 128);\n });\n\n it(\"drops lines that straddle the head cap or the tail window start\", () => {\n const content = line({ a: 1 }) + pad(500) + line({ z: 9 });\n fs.writeFileSync(filePath, content);\n\n const result = new IncrementalJsonlSummary(gapReducer, { bounds }).read(filePath);\n\n expect(result?.state.entries).toEqual([{ a: 1 }, { z: 9 }]);\n });\n\n it(\"folds the first tail line when the tail window starts exactly on a line boundary\", () => {\n const tail = line({ y: 8 }) + line({ z: 9 });\n fs.writeFileSync(filePath, line({ a: 1 }) + pad(1000) + tail);\n\n const result = new IncrementalJsonlSummary(gapReducer, {\n bounds: { headBytes: 64, tailBytes: Buffer.byteLength(tail) },\n }).read(filePath);\n\n expect(result?.skippedBytes).toBeGreaterThan(0);\n expect(result?.state.entries).toEqual([{ a: 1 }, { y: 8 }, { z: 9 }]);\n });\n\n it(\"still drops the partial line when the tail window starts one byte into it\", () => {\n const tail = line({ y: 8 }) + line({ z: 9 });\n fs.writeFileSync(filePath, line({ a: 1 }) + pad(1000) + tail);\n\n const result = new IncrementalJsonlSummary(gapReducer, {\n bounds: { headBytes: 64, tailBytes: Buffer.byteLength(tail) - 1 },\n }).read(filePath);\n\n expect(result?.state.entries).toEqual([{ a: 1 }, { z: 9 }]);\n });\n\n it(\"folds nothing from a tail window that holds no line start\", () => {\n const content = line({ a: 1 }) + line({ big: \"b\".repeat(1000) });\n fs.writeFileSync(filePath, content);\n\n const result = new IncrementalJsonlSummary(gapReducer, { bounds }).read(filePath);\n\n expect(result?.state.entries).toEqual([{ a: 1 }]);\n expect(result?.state.gaps).toBe(1);\n });\n\n it(\"seeds the cache at end of file, so later appends read only the new bytes\", () => {\n const cache = new IncrementalJsonlSummary(gapReducer, { bounds });\n fs.writeFileSync(filePath, line({ a: 1 }) + pad(1000) + line({ z: 9 }));\n cache.read(filePath);\n mockedReadSync.mockClear();\n\n const appended = line({ n: 10 });\n fs.appendFileSync(filePath, appended);\n const result = cache.read(filePath);\n\n expect(bytesRead()).toBe(Buffer.byteLength(appended));\n expect(result?.state.entries.slice(-2)).toEqual([{ z: 9 }, { n: 10 }]);\n expect(result?.state.gaps).toBe(1);\n expect(result?.skippedBytes).toBeGreaterThan(0);\n });\n\n it(\"resynchronises on the next newline when the tail window ended inside a line\", () => {\n const cache = new IncrementalJsonlSummary(gapReducer, { bounds });\n fs.writeFileSync(filePath, line({ a: 1 }) + '{\"big\":\"' + \"b\".repeat(1000));\n expect(cache.read(filePath)?.state.entries).toEqual([{ a: 1 }]);\n\n fs.appendFileSync(filePath, '\"}\\n' + line({ n: 10 }));\n\n expect(cache.read(filePath)?.state.entries).toEqual([{ a: 1 }, { n: 10 }]);\n });\n\n it(\"uses the bounded scan again when rebuilding a replaced file\", () => {\n const cache = new IncrementalJsonlSummary(gapReducer, { bounds });\n fs.writeFileSync(filePath, line({ a: 1 }));\n cache.read(filePath);\n\n const replacement = path.join(tmpDir, \"replacement.jsonl\");\n fs.writeFileSync(replacement, line({ b: 2 }) + pad(1000) + line({ z: 9 }));\n fs.renameSync(replacement, filePath);\n mockedReadSync.mockClear();\n\n const result = cache.read(filePath);\n // +1: the byte before the tail window tells whether it starts on a line boundary\n expect(bytesRead()).toBeLessThanOrEqual(bounds.headBytes + bounds.tailBytes + 1);\n expect(result?.state.entries).toEqual([{ b: 2 }, { z: 9 }]);\n });\n\n it(\"folds tail lines straight onto the head state when the reducer has no skip()\", () => {\n fs.writeFileSync(filePath, line({ a: 1 }) + pad(1000) + line({ z: 9 }));\n const result = new IncrementalJsonlSummary(recordingReducer, { bounds }).read(filePath);\n expect(result?.state).toEqual({ count: 2, entries: [{ a: 1 }, { z: 9 }] });\n });\n\n it(\"parses from byte 0 when bounds are disabled\", () => {\n const content = line({ a: 1 }) + pad(1000) + line({ z: 9 });\n fs.writeFileSync(filePath, content);\n const result = new IncrementalJsonlSummary(gapReducer, { bounds: false }).read(filePath);\n expect(result?.state).toEqual(reduceJsonlContent(gapReducer, content));\n expect(result?.skippedBytes).toBe(0);\n });\n\n it(\"defaults to a 1 MiB head and 4 MiB tail\", () => {\n expect(DEFAULT_HEAD_BYTES).toBe(1024 * 1024);\n expect(DEFAULT_TAIL_BYTES).toBe(4 * 1024 * 1024);\n });\n});\n"],"names":["fs","os","path","DEFAULT_HEAD_BYTES","DEFAULT_TAIL_BYTES","IncrementalJsonlSummary","reduceJsonlContent","vi","mock","importOriginal","actual","readSync","fn","readFileSync","mockedReadSync","mocked","mockedReadFileSync","recordingReducer","initial","count","entries","reduce","state","entry","undefined","bytesRead","total","result","results","type","value","Buffer","byteLength","line","JSON","stringify","describe","it","expect","toEqual","a","b","tmpDir","filePath","cache","beforeEach","mkdtempSync","join","tmpdir","mockClear","afterEach","rmSync","recursive","force","read","toBeNull","size","toBe","writeFileSync","stat","statSync","mtime","first","second","repeat","appended","c","appendFileSync","slice","small","chunkSize","text","n","map","content","buffer","from","expected","split","length","splitCache","subarray","z","replacement","rotated","renameSync","future","Date","now","utimesSync","other","prune","get","Object","keys","sort","gapReducer","gaps","skip","bounds","headBytes","tailBytes","pad","toBeLessThanOrEqual","skippedBytes","tail","y","not","toContainEqual","toBeGreaterThan","big"],"mappings":"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"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Large-transcript measurement for `getConversation({ tail })` (issue #260).
3
+ *
4
+ * Skipped by default. Run with:
5
+ * AI_DEVKIT_TAIL_BENCH=1 npx vitest run src/__tests__/utils/conversationTail.bench.test.ts
6
+ *
7
+ * Generates a synthetic ~400 MB transcript per adapter under os.tmpdir(),
8
+ * counts bytes read through `fs`, and checks the acceptance limits: the first
9
+ * tail read reads <= 2 MB in <= 50 ms, and a poll after appending K bytes
10
+ * reads <= K + 64 KiB. The file is deleted afterwards.
11
+ */ import * as fs from "fs";
12
+ import * as os from "os";
13
+ import * as path from "path";
14
+ import { afterAll, beforeAll, describe, expect, it, vi } from "vitest";
15
+ import { ClaudeSessionParser } from "../../harnesses/claude/ClaudeSessionParser.js";
16
+ import { CodexSessionParser } from "../../harnesses/codex/CodexSessionParser.js";
17
+ const readBytes = vi.hoisted(()=>({
18
+ total: 0
19
+ }));
20
+ vi.mock("fs", async (importOriginal)=>{
21
+ const actual = await importOriginal();
22
+ const readSync = (...args)=>{
23
+ const n = actual.readSync(...args);
24
+ readBytes.total += n;
25
+ return n;
26
+ };
27
+ const readFileSync = (...args)=>{
28
+ const out = actual.readFileSync(...args);
29
+ readBytes.total += typeof out === "string" ? Buffer.byteLength(out) : out.length;
30
+ return out;
31
+ };
32
+ return {
33
+ ...actual,
34
+ readSync,
35
+ readFileSync,
36
+ default: {
37
+ ...actual,
38
+ readSync,
39
+ readFileSync
40
+ }
41
+ };
42
+ });
43
+ const TARGET_BYTES = 400 * 1024 * 1024;
44
+ const TAIL = 20;
45
+ const MB = 1024 * 1024;
46
+ function writeLargeFile(file, header, turn) {
47
+ const fd = fs.openSync(file, "w");
48
+ try {
49
+ fs.writeSync(fd, header.map((l)=>l + "\n").join(""));
50
+ let written = 0;
51
+ let i = 0;
52
+ while(written < TARGET_BYTES){
53
+ const parts = [];
54
+ for(let k = 0; k < 500; k++, i++){
55
+ for (const line of turn(i))parts.push(line, "\n");
56
+ }
57
+ const block = parts.join("");
58
+ fs.writeSync(fd, block);
59
+ written += Buffer.byteLength(block);
60
+ }
61
+ } finally{
62
+ fs.closeSync(fd);
63
+ }
64
+ }
65
+ const filler = "x".repeat(2000);
66
+ const adapters = [
67
+ {
68
+ name: "codex",
69
+ create: ()=>new CodexSessionParser(),
70
+ header: [
71
+ JSON.stringify({
72
+ type: "session_meta",
73
+ payload: {
74
+ id: "bench",
75
+ cwd: "/repo"
76
+ }
77
+ })
78
+ ],
79
+ turn: (i)=>{
80
+ const turnId = `t${i}`;
81
+ return [
82
+ JSON.stringify({
83
+ type: "response_item",
84
+ timestamp: "2026-01-01T00:00:00Z",
85
+ payload: {
86
+ type: "message",
87
+ role: "user",
88
+ content: [
89
+ {
90
+ type: "input_text",
91
+ text: `question ${i}`
92
+ }
93
+ ],
94
+ internal_chat_message_metadata_passthrough: {
95
+ turn_id: turnId
96
+ }
97
+ }
98
+ }),
99
+ JSON.stringify({
100
+ type: "event_msg",
101
+ payload: {
102
+ type: "item_completed",
103
+ turn_id: turnId,
104
+ item: {
105
+ type: "UserMessage",
106
+ content: [
107
+ {
108
+ type: "text",
109
+ text: `question ${i}`
110
+ }
111
+ ]
112
+ }
113
+ }
114
+ }),
115
+ JSON.stringify({
116
+ type: "response_item",
117
+ payload: {
118
+ type: "function_call_output",
119
+ output: filler
120
+ }
121
+ }),
122
+ JSON.stringify({
123
+ type: "event_msg",
124
+ payload: {
125
+ type: "agent_message",
126
+ message: `answer ${i}`
127
+ }
128
+ })
129
+ ];
130
+ },
131
+ appendTurn: (i)=>JSON.stringify({
132
+ type: "event_msg",
133
+ payload: {
134
+ type: "agent_message",
135
+ message: `appended ${i}`
136
+ }
137
+ })
138
+ },
139
+ {
140
+ name: "claude",
141
+ create: ()=>new ClaudeSessionParser(),
142
+ header: [
143
+ JSON.stringify({
144
+ type: "file-history-snapshot",
145
+ snapshot: {}
146
+ })
147
+ ],
148
+ turn: (i)=>[
149
+ JSON.stringify({
150
+ type: "user",
151
+ message: {
152
+ content: `question ${i}`
153
+ }
154
+ }),
155
+ JSON.stringify({
156
+ type: "assistant",
157
+ message: {
158
+ content: [
159
+ {
160
+ type: "tool_use",
161
+ name: "Bash",
162
+ input: {
163
+ command: "ls"
164
+ }
165
+ }
166
+ ]
167
+ }
168
+ }),
169
+ JSON.stringify({
170
+ type: "user",
171
+ message: {
172
+ content: [
173
+ {
174
+ type: "tool_result",
175
+ content: filler
176
+ }
177
+ ]
178
+ }
179
+ }),
180
+ JSON.stringify({
181
+ type: "assistant",
182
+ message: {
183
+ content: [
184
+ {
185
+ type: "text",
186
+ text: `answer ${i}`
187
+ }
188
+ ]
189
+ }
190
+ })
191
+ ],
192
+ appendTurn: (i)=>JSON.stringify({
193
+ type: "assistant",
194
+ message: {
195
+ content: [
196
+ {
197
+ type: "text",
198
+ text: `appended ${i}`
199
+ }
200
+ ]
201
+ }
202
+ })
203
+ }
204
+ ];
205
+ describe.skipIf(!process.env.AI_DEVKIT_TAIL_BENCH)("getConversation tail on a 400 MB transcript", ()=>{
206
+ let tmpDir;
207
+ beforeAll(()=>{
208
+ tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "tail-bench-"));
209
+ });
210
+ afterAll(()=>{
211
+ fs.rmSync(tmpDir, {
212
+ recursive: true,
213
+ force: true
214
+ });
215
+ });
216
+ it.each(adapters)("$name: first call and incremental polls stay within the byte/time budget", (adapter)=>{
217
+ const file = path.join(tmpDir, `${adapter.name}.jsonl`);
218
+ writeLargeFile(file, adapter.header, adapter.turn);
219
+ const size = fs.statSync(file).size;
220
+ expect(size).toBeGreaterThanOrEqual(TARGET_BYTES);
221
+ const parser = adapter.create();
222
+ readBytes.total = 0;
223
+ const rssBefore = process.memoryUsage().rss;
224
+ const start = performance.now();
225
+ const messages = parser.getConversation(file, {
226
+ tail: TAIL
227
+ });
228
+ const firstMs = performance.now() - start;
229
+ const firstRead = readBytes.total;
230
+ const rssDelta = process.memoryUsage().rss - rssBefore;
231
+ expect(messages).toHaveLength(TAIL);
232
+ expect(messages.at(-1)?.content).toMatch(/^answer \d+$/);
233
+ const polls = [];
234
+ for(let round = 0; round < 3; round++){
235
+ const appended = adapter.appendTurn(round) + "\n";
236
+ fs.appendFileSync(file, appended);
237
+ readBytes.total = 0;
238
+ const t0 = performance.now();
239
+ const next = parser.getConversation(file, {
240
+ tail: TAIL
241
+ });
242
+ const pollMs = performance.now() - t0;
243
+ expect(next.at(-1)?.content).toBe(`appended ${round}`);
244
+ expect(next).toHaveLength(TAIL);
245
+ const k = Buffer.byteLength(appended);
246
+ expect(readBytes.total).toBeLessThanOrEqual(k + 64 * 1024);
247
+ polls.push(`K=${k}B read=${readBytes.total}B ${pollMs.toFixed(2)}ms`);
248
+ }
249
+ console.log(`[${adapter.name}] file=${(size / MB).toFixed(1)} MB first call: ` + `read=${(firstRead / 1024).toFixed(1)} KiB, ${firstMs.toFixed(2)} ms, ` + `rssDelta=${(rssDelta / MB).toFixed(1)} MB; polls: ${polls.join("; ")}`);
250
+ expect(firstRead).toBeLessThanOrEqual(2 * MB);
251
+ expect(firstMs).toBeLessThanOrEqual(50);
252
+ fs.rmSync(file, {
253
+ force: true
254
+ });
255
+ }, 120_000);
256
+ });
257
+
258
+ //# sourceMappingURL=conversationTail.bench.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/__tests__/utils/conversationTail.bench.test.ts"],"sourcesContent":["/**\n * Large-transcript measurement for `getConversation({ tail })` (issue #260).\n *\n * Skipped by default. Run with:\n * AI_DEVKIT_TAIL_BENCH=1 npx vitest run src/__tests__/utils/conversationTail.bench.test.ts\n *\n * Generates a synthetic ~400 MB transcript per adapter under os.tmpdir(),\n * counts bytes read through `fs`, and checks the acceptance limits: the first\n * tail read reads <= 2 MB in <= 50 ms, and a poll after appending K bytes\n * reads <= K + 64 KiB. The file is deleted afterwards.\n */\nimport * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\nimport { afterAll, beforeAll, describe, expect, it, vi } from \"vitest\";\nimport { ClaudeSessionParser } from \"../../harnesses/claude/ClaudeSessionParser.js\";\nimport { CodexSessionParser } from \"../../harnesses/codex/CodexSessionParser.js\";\n\nconst readBytes = vi.hoisted(() => ({ total: 0 }));\n\nvi.mock(\"fs\", async (importOriginal) => {\n const actual = await importOriginal<typeof import(\"fs\")>();\n const readSync = ((...args: Parameters<typeof actual.readSync>) => {\n const n = (actual.readSync as (...a: unknown[]) => number)(...args);\n readBytes.total += n;\n return n;\n }) as typeof actual.readSync;\n const readFileSync = ((...args: Parameters<typeof actual.readFileSync>) => {\n const out = (actual.readFileSync as (...a: unknown[]) => string | Buffer)(...args);\n readBytes.total += typeof out === \"string\" ? Buffer.byteLength(out) : out.length;\n return out;\n }) as typeof actual.readFileSync;\n return { ...actual, readSync, readFileSync, default: { ...actual, readSync, readFileSync } };\n});\n\nconst TARGET_BYTES = 400 * 1024 * 1024;\nconst TAIL = 20;\nconst MB = 1024 * 1024;\n\nfunction writeLargeFile(file: string, header: string[], turn: (i: number) => string[]): void {\n const fd = fs.openSync(file, \"w\");\n try {\n fs.writeSync(fd, header.map((l) => l + \"\\n\").join(\"\"));\n let written = 0;\n let i = 0;\n while (written < TARGET_BYTES) {\n const parts: string[] = [];\n for (let k = 0; k < 500; k++, i++) {\n for (const line of turn(i)) parts.push(line, \"\\n\");\n }\n const block = parts.join(\"\");\n fs.writeSync(fd, block);\n written += Buffer.byteLength(block);\n }\n } finally {\n fs.closeSync(fd);\n }\n}\n\nconst filler = \"x\".repeat(2000);\n\nconst adapters = [\n {\n name: \"codex\",\n create: () => new CodexSessionParser(),\n header: [JSON.stringify({ type: \"session_meta\", payload: { id: \"bench\", cwd: \"/repo\" } })],\n turn: (i: number) => {\n const turnId = `t${i}`;\n return [\n JSON.stringify({\n type: \"response_item\",\n timestamp: \"2026-01-01T00:00:00Z\",\n payload: {\n type: \"message\",\n role: \"user\",\n content: [{ type: \"input_text\", text: `question ${i}` }],\n internal_chat_message_metadata_passthrough: { turn_id: turnId },\n },\n }),\n JSON.stringify({\n type: \"event_msg\",\n payload: {\n type: \"item_completed\",\n turn_id: turnId,\n item: { type: \"UserMessage\", content: [{ type: \"text\", text: `question ${i}` }] },\n },\n }),\n JSON.stringify({\n type: \"response_item\",\n payload: { type: \"function_call_output\", output: filler },\n }),\n JSON.stringify({\n type: \"event_msg\",\n payload: { type: \"agent_message\", message: `answer ${i}` },\n }),\n ];\n },\n appendTurn: (i: number) =>\n JSON.stringify({\n type: \"event_msg\",\n payload: { type: \"agent_message\", message: `appended ${i}` },\n }),\n },\n {\n name: \"claude\",\n create: () => new ClaudeSessionParser(),\n header: [JSON.stringify({ type: \"file-history-snapshot\", snapshot: {} })],\n turn: (i: number) => [\n JSON.stringify({ type: \"user\", message: { content: `question ${i}` } }),\n JSON.stringify({\n type: \"assistant\",\n message: { content: [{ type: \"tool_use\", name: \"Bash\", input: { command: \"ls\" } }] },\n }),\n JSON.stringify({\n type: \"user\",\n message: { content: [{ type: \"tool_result\", content: filler }] },\n }),\n JSON.stringify({\n type: \"assistant\",\n message: { content: [{ type: \"text\", text: `answer ${i}` }] },\n }),\n ],\n appendTurn: (i: number) =>\n JSON.stringify({\n type: \"assistant\",\n message: { content: [{ type: \"text\", text: `appended ${i}` }] },\n }),\n },\n];\n\ndescribe.skipIf(!process.env.AI_DEVKIT_TAIL_BENCH)(\n \"getConversation tail on a 400 MB transcript\",\n () => {\n let tmpDir: string;\n\n beforeAll(() => {\n tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), \"tail-bench-\"));\n });\n\n afterAll(() => {\n fs.rmSync(tmpDir, { recursive: true, force: true });\n });\n\n it.each(adapters)(\n \"$name: first call and incremental polls stay within the byte/time budget\",\n (adapter) => {\n const file = path.join(tmpDir, `${adapter.name}.jsonl`);\n writeLargeFile(file, adapter.header, adapter.turn);\n const size = fs.statSync(file).size;\n expect(size).toBeGreaterThanOrEqual(TARGET_BYTES);\n\n const parser = adapter.create();\n readBytes.total = 0;\n const rssBefore = process.memoryUsage().rss;\n const start = performance.now();\n const messages = parser.getConversation(file, { tail: TAIL });\n const firstMs = performance.now() - start;\n const firstRead = readBytes.total;\n const rssDelta = process.memoryUsage().rss - rssBefore;\n\n expect(messages).toHaveLength(TAIL);\n expect(messages.at(-1)?.content).toMatch(/^answer \\d+$/);\n\n const polls: string[] = [];\n for (let round = 0; round < 3; round++) {\n const appended = adapter.appendTurn(round) + \"\\n\";\n fs.appendFileSync(file, appended);\n readBytes.total = 0;\n const t0 = performance.now();\n const next = parser.getConversation(file, { tail: TAIL });\n const pollMs = performance.now() - t0;\n expect(next.at(-1)?.content).toBe(`appended ${round}`);\n expect(next).toHaveLength(TAIL);\n const k = Buffer.byteLength(appended);\n expect(readBytes.total).toBeLessThanOrEqual(k + 64 * 1024);\n polls.push(`K=${k}B read=${readBytes.total}B ${pollMs.toFixed(2)}ms`);\n }\n\n console.log(\n `[${adapter.name}] file=${(size / MB).toFixed(1)} MB first call: ` +\n `read=${(firstRead / 1024).toFixed(1)} KiB, ${firstMs.toFixed(2)} ms, ` +\n `rssDelta=${(rssDelta / MB).toFixed(1)} MB; polls: ${polls.join(\"; \")}`,\n );\n\n expect(firstRead).toBeLessThanOrEqual(2 * MB);\n expect(firstMs).toBeLessThanOrEqual(50);\n\n fs.rmSync(file, { force: true });\n },\n 120_000,\n );\n },\n);\n"],"names":["fs","os","path","afterAll","beforeAll","describe","expect","it","vi","ClaudeSessionParser","CodexSessionParser","readBytes","hoisted","total","mock","importOriginal","actual","readSync","args","n","readFileSync","out","Buffer","byteLength","length","default","TARGET_BYTES","TAIL","MB","writeLargeFile","file","header","turn","fd","openSync","writeSync","map","l","join","written","i","parts","k","line","push","block","closeSync","filler","repeat","adapters","name","create","JSON","stringify","type","payload","id","cwd","turnId","timestamp","role","content","text","internal_chat_message_metadata_passthrough","turn_id","item","output","message","appendTurn","snapshot","input","command","skipIf","process","env","AI_DEVKIT_TAIL_BENCH","tmpDir","mkdtempSync","tmpdir","rmSync","recursive","force","each","adapter","size","statSync","toBeGreaterThanOrEqual","parser","rssBefore","memoryUsage","rss","start","performance","now","messages","getConversation","tail","firstMs","firstRead","rssDelta","toHaveLength","at","toMatch","polls","round","appended","appendFileSync","t0","next","pollMs","toBe","toBeLessThanOrEqual","toFixed","console","log"],"mappings":"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"}