@prestyj/cli 5.12.0 → 5.16.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 (1245) hide show
  1. package/README.md +51 -36
  2. package/assets/skills/bulletproof/SKILL.md +158 -0
  3. package/assets/skills/bulletproof/references/agent-surface.md +82 -0
  4. package/assets/skills/bulletproof/references/audit-protocol.md +147 -0
  5. package/assets/skills/bulletproof/references/platform-playbooks.md +176 -0
  6. package/assets/skills/bulletproof/references/provenance.md +45 -0
  7. package/assets/skills/bulletproof/references/secure-defaults.md +108 -0
  8. package/assets/skills/bulletproof/references/supply-chain.md +76 -0
  9. package/assets/skills/bulletproof/references/threat-landscape.md +74 -0
  10. package/assets/skills/bulletproof/references/verification.md +65 -0
  11. package/assets/skills/clarify/SKILL.md +30 -0
  12. package/assets/skills/code-review/SKILL.md +30 -0
  13. package/assets/skills/durable/SKILL.md +111 -0
  14. package/assets/skills/durable/references/backups-and-runtime.md +86 -0
  15. package/assets/skills/durable/references/migrations-and-schema.md +79 -0
  16. package/assets/skills/lean/SKILL.md +110 -0
  17. package/assets/skills/lean/references/memory-and-processes.md +98 -0
  18. package/assets/skills/lean/references/playbooks.md +107 -0
  19. package/assets/skills/root-cause/SKILL.md +36 -0
  20. package/assets/skills/shared-language/SKILL.md +30 -0
  21. package/assets/skills/tdd/SKILL.md +30 -0
  22. package/dist/app-sidecar.js +486 -95
  23. package/dist/app-sidecar.js.map +1 -1
  24. package/dist/chat-agents/research.d.ts +1 -1
  25. package/dist/chat-agents/research.d.ts.map +1 -1
  26. package/dist/chat-agents/research.js +1 -1
  27. package/dist/chat-agents/research.js.map +1 -1
  28. package/dist/cli/mcp.js +30 -10
  29. package/dist/cli/mcp.js.map +1 -1
  30. package/dist/cli/shared.d.ts.map +1 -1
  31. package/dist/cli/shared.js +2 -0
  32. package/dist/cli/shared.js.map +1 -1
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +16 -7
  35. package/dist/cli.js.map +1 -1
  36. package/dist/config.d.ts +12 -0
  37. package/dist/config.d.ts.map +1 -1
  38. package/dist/config.js +16 -0
  39. package/dist/config.js.map +1 -1
  40. package/dist/core/agent-session.d.ts +65 -4
  41. package/dist/core/agent-session.d.ts.map +1 -1
  42. package/dist/core/agent-session.js +281 -22
  43. package/dist/core/agent-session.js.map +1 -1
  44. package/dist/core/agents.d.ts +2 -3
  45. package/dist/core/agents.d.ts.map +1 -1
  46. package/dist/core/agents.js +4 -5
  47. package/dist/core/agents.js.map +1 -1
  48. package/dist/core/api-benchmark.d.ts +1 -1
  49. package/dist/core/api-benchmark.js +2 -2
  50. package/dist/core/ask-user.d.ts +63 -0
  51. package/dist/core/ask-user.d.ts.map +1 -0
  52. package/dist/core/ask-user.js +40 -0
  53. package/dist/core/ask-user.js.map +1 -0
  54. package/dist/core/auth-providers.d.ts +6 -0
  55. package/dist/core/auth-providers.d.ts.map +1 -1
  56. package/dist/core/auth-providers.js +30 -24
  57. package/dist/core/auth-providers.js.map +1 -1
  58. package/dist/core/bundled-agents.d.ts.map +1 -1
  59. package/dist/core/bundled-agents.js +17 -5
  60. package/dist/core/bundled-agents.js.map +1 -1
  61. package/dist/core/context-limits.d.ts +35 -0
  62. package/dist/core/context-limits.d.ts.map +1 -0
  63. package/dist/core/context-limits.js +35 -0
  64. package/dist/core/context-limits.js.map +1 -0
  65. package/dist/core/env-delta.d.ts +27 -0
  66. package/dist/core/env-delta.d.ts.map +1 -0
  67. package/dist/core/env-delta.js +65 -0
  68. package/dist/core/env-delta.js.map +1 -0
  69. package/dist/core/event-bus.d.ts +12 -2
  70. package/dist/core/event-bus.d.ts.map +1 -1
  71. package/dist/core/event-bus.js +1 -0
  72. package/dist/core/event-bus.js.map +1 -1
  73. package/dist/core/goal-worker.js +1 -1
  74. package/dist/core/goal-worker.js.map +1 -1
  75. package/dist/core/hashline-edit-benchmark.d.ts +2 -0
  76. package/dist/core/hashline-edit-benchmark.d.ts.map +1 -1
  77. package/dist/core/hashline-edit-benchmark.js +5 -1
  78. package/dist/core/hashline-edit-benchmark.js.map +1 -1
  79. package/dist/core/lsp/edit-telemetry.d.ts +27 -0
  80. package/dist/core/lsp/edit-telemetry.d.ts.map +1 -0
  81. package/dist/core/lsp/edit-telemetry.js +50 -0
  82. package/dist/core/lsp/edit-telemetry.js.map +1 -0
  83. package/dist/core/lsp/manager.d.ts +24 -1
  84. package/dist/core/lsp/manager.d.ts.map +1 -1
  85. package/dist/core/lsp/manager.js +53 -2
  86. package/dist/core/lsp/manager.js.map +1 -1
  87. package/dist/core/mcp/client.js +1 -1
  88. package/dist/core/mcp/client.js.map +1 -1
  89. package/dist/core/mcp/content.d.ts +5 -0
  90. package/dist/core/mcp/content.d.ts.map +1 -1
  91. package/dist/core/mcp/content.js +20 -2
  92. package/dist/core/mcp/content.js.map +1 -1
  93. package/dist/core/mcp/defaults.d.ts +7 -3
  94. package/dist/core/mcp/defaults.d.ts.map +1 -1
  95. package/dist/core/mcp/defaults.js +19 -14
  96. package/dist/core/mcp/defaults.js.map +1 -1
  97. package/dist/core/mcp/deferred-catalog.d.ts +9 -0
  98. package/dist/core/mcp/deferred-catalog.d.ts.map +1 -1
  99. package/dist/core/mcp/deferred-catalog.js +15 -1
  100. package/dist/core/mcp/deferred-catalog.js.map +1 -1
  101. package/dist/core/mcp/elicitation-bridge.d.ts.map +1 -1
  102. package/dist/core/mcp/elicitation-bridge.js +12 -28
  103. package/dist/core/mcp/elicitation-bridge.js.map +1 -1
  104. package/dist/core/mcp/shared-pool.d.ts +2 -2
  105. package/dist/core/mcp/shared-pool.js +2 -2
  106. package/dist/core/nolan-prompt.d.ts +1 -1
  107. package/dist/core/nolan-prompt.js +16 -8
  108. package/dist/core/nolan-prompt.js.map +1 -1
  109. package/dist/core/parked-requests.d.ts +44 -0
  110. package/dist/core/parked-requests.d.ts.map +1 -0
  111. package/dist/core/parked-requests.js +34 -0
  112. package/dist/core/parked-requests.js.map +1 -0
  113. package/dist/core/platform-clis.d.ts +16 -0
  114. package/dist/core/platform-clis.d.ts.map +1 -0
  115. package/dist/core/platform-clis.js +299 -0
  116. package/dist/core/platform-clis.js.map +1 -0
  117. package/dist/core/process-manager.d.ts +50 -1
  118. package/dist/core/process-manager.d.ts.map +1 -1
  119. package/dist/core/process-manager.js +155 -4
  120. package/dist/core/process-manager.js.map +1 -1
  121. package/dist/core/prompt-commands.d.ts.map +1 -1
  122. package/dist/core/prompt-commands.js +75 -37
  123. package/dist/core/prompt-commands.js.map +1 -1
  124. package/dist/core/sandbox.d.ts +17 -1
  125. package/dist/core/sandbox.d.ts.map +1 -1
  126. package/dist/core/sandbox.js +140 -9
  127. package/dist/core/sandbox.js.map +1 -1
  128. package/dist/core/session-manager.d.ts +18 -1
  129. package/dist/core/session-manager.d.ts.map +1 -1
  130. package/dist/core/session-manager.js +62 -23
  131. package/dist/core/session-manager.js.map +1 -1
  132. package/dist/core/settings-manager.d.ts +22 -2
  133. package/dist/core/settings-manager.d.ts.map +1 -1
  134. package/dist/core/settings-manager.js +64 -0
  135. package/dist/core/settings-manager.js.map +1 -1
  136. package/dist/core/skills.d.ts +16 -1
  137. package/dist/core/skills.d.ts.map +1 -1
  138. package/dist/core/skills.js +38 -6
  139. package/dist/core/skills.js.map +1 -1
  140. package/dist/core/steroids.d.ts +59 -0
  141. package/dist/core/steroids.d.ts.map +1 -0
  142. package/dist/core/steroids.js +227 -0
  143. package/dist/core/steroids.js.map +1 -0
  144. package/dist/core/subagent-manager.d.ts +17 -0
  145. package/dist/core/subagent-manager.d.ts.map +1 -1
  146. package/dist/core/subagent-manager.js +92 -1
  147. package/dist/core/subagent-manager.js.map +1 -1
  148. package/dist/core/subagent-turn-record.d.ts +17 -0
  149. package/dist/core/subagent-turn-record.d.ts.map +1 -0
  150. package/dist/core/subagent-turn-record.js +82 -0
  151. package/dist/core/subagent-turn-record.js.map +1 -0
  152. package/dist/core/verification-gate.d.ts +123 -0
  153. package/dist/core/verification-gate.d.ts.map +1 -0
  154. package/dist/core/verification-gate.js +446 -0
  155. package/dist/core/verification-gate.js.map +1 -0
  156. package/dist/core/workspace-guard.d.ts +6 -0
  157. package/dist/core/workspace-guard.d.ts.map +1 -1
  158. package/dist/core/workspace-guard.js +58 -7
  159. package/dist/core/workspace-guard.js.map +1 -1
  160. package/dist/hf-pull.d.ts +102 -0
  161. package/dist/hf-pull.d.ts.map +1 -0
  162. package/dist/hf-pull.js +225 -0
  163. package/dist/hf-pull.js.map +1 -0
  164. package/dist/modes/json-mode.d.ts +2 -2
  165. package/dist/modes/json-mode.d.ts.map +1 -1
  166. package/dist/modes/json-mode.js +2 -8
  167. package/dist/modes/json-mode.js.map +1 -1
  168. package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
  169. package/dist/modes/subagent-worker-mode.js +66 -18
  170. package/dist/modes/subagent-worker-mode.js.map +1 -1
  171. package/dist/system-prompt.d.ts +5 -2
  172. package/dist/system-prompt.d.ts.map +1 -1
  173. package/dist/system-prompt.js +136 -36
  174. package/dist/system-prompt.js.map +1 -1
  175. package/dist/tools/ask-user.d.ts +35 -0
  176. package/dist/tools/ask-user.d.ts.map +1 -0
  177. package/dist/tools/ask-user.js +157 -0
  178. package/dist/tools/ask-user.js.map +1 -0
  179. package/dist/tools/bash.d.ts +4 -0
  180. package/dist/tools/bash.d.ts.map +1 -1
  181. package/dist/tools/bash.js +63 -4
  182. package/dist/tools/bash.js.map +1 -1
  183. package/dist/tools/edit.d.ts +2 -1
  184. package/dist/tools/edit.d.ts.map +1 -1
  185. package/dist/tools/edit.js +58 -9
  186. package/dist/tools/edit.js.map +1 -1
  187. package/dist/tools/index.d.ts +9 -0
  188. package/dist/tools/index.d.ts.map +1 -1
  189. package/dist/tools/index.js +8 -2
  190. package/dist/tools/index.js.map +1 -1
  191. package/dist/tools/operations.d.ts +48 -0
  192. package/dist/tools/operations.d.ts.map +1 -1
  193. package/dist/tools/operations.js +92 -2
  194. package/dist/tools/operations.js.map +1 -1
  195. package/dist/tools/path-utils.d.ts +28 -1
  196. package/dist/tools/path-utils.d.ts.map +1 -1
  197. package/dist/tools/path-utils.js +44 -2
  198. package/dist/tools/path-utils.js.map +1 -1
  199. package/dist/tools/prompt-hints.d.ts.map +1 -1
  200. package/dist/tools/prompt-hints.js +8 -6
  201. package/dist/tools/prompt-hints.js.map +1 -1
  202. package/dist/tools/read-only-bash.d.ts +6 -0
  203. package/dist/tools/read-only-bash.d.ts.map +1 -1
  204. package/dist/tools/read-only-bash.js +168 -9
  205. package/dist/tools/read-only-bash.js.map +1 -1
  206. package/dist/tools/read.d.ts.map +1 -1
  207. package/dist/tools/read.js +35 -3
  208. package/dist/tools/read.js.map +1 -1
  209. package/dist/tools/skill.d.ts +3 -2
  210. package/dist/tools/skill.d.ts.map +1 -1
  211. package/dist/tools/skill.js +11 -7
  212. package/dist/tools/skill.js.map +1 -1
  213. package/dist/tools/steroids.d.ts +46 -0
  214. package/dist/tools/steroids.d.ts.map +1 -0
  215. package/dist/tools/steroids.js +233 -0
  216. package/dist/tools/steroids.js.map +1 -0
  217. package/dist/tools/subagent-shared.d.ts +1 -1
  218. package/dist/tools/subagent-shared.d.ts.map +1 -1
  219. package/dist/tools/subagent-shared.js +1 -4
  220. package/dist/tools/subagent-shared.js.map +1 -1
  221. package/dist/tools/subagent.js +1 -1
  222. package/dist/tools/subagent.js.map +1 -1
  223. package/dist/tools/tool-search.d.ts +2 -1
  224. package/dist/tools/tool-search.d.ts.map +1 -1
  225. package/dist/tools/tool-search.js +28 -3
  226. package/dist/tools/tool-search.js.map +1 -1
  227. package/dist/tools/tool-tiers.d.ts.map +1 -1
  228. package/dist/tools/tool-tiers.js +5 -0
  229. package/dist/tools/tool-tiers.js.map +1 -1
  230. package/dist/tools/web-fetch.d.ts +7 -0
  231. package/dist/tools/web-fetch.d.ts.map +1 -1
  232. package/dist/tools/web-fetch.js +308 -20
  233. package/dist/tools/web-fetch.js.map +1 -1
  234. package/dist/tools/write.d.ts +1 -1
  235. package/dist/tools/write.d.ts.map +1 -1
  236. package/dist/tools/write.js +1 -1
  237. package/dist/tools/write.js.map +1 -1
  238. package/dist/ui/App.d.ts +3 -0
  239. package/dist/ui/App.d.ts.map +1 -1
  240. package/dist/ui/App.js +56 -30
  241. package/dist/ui/App.js.map +1 -1
  242. package/dist/ui/app-items.d.ts +5 -0
  243. package/dist/ui/app-items.d.ts.map +1 -1
  244. package/dist/ui/app-items.js +5 -0
  245. package/dist/ui/app-items.js.map +1 -1
  246. package/dist/ui/components/Footer.js +1 -1
  247. package/dist/ui/components/Footer.js.map +1 -1
  248. package/dist/ui/components/ModelSelector.d.ts.map +1 -1
  249. package/dist/ui/components/ModelSelector.js +1 -0
  250. package/dist/ui/components/ModelSelector.js.map +1 -1
  251. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  252. package/dist/ui/components/ToolExecution.js +10 -3
  253. package/dist/ui/components/ToolExecution.js.map +1 -1
  254. package/dist/ui/hooks/useAgentLoop.d.ts +1 -1
  255. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  256. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  257. package/dist/ui/login.d.ts.map +1 -1
  258. package/dist/ui/login.js +5 -33
  259. package/dist/ui/login.js.map +1 -1
  260. package/dist/ui/prompt-routing.d.ts +2 -2
  261. package/dist/ui/prompt-routing.d.ts.map +1 -1
  262. package/dist/ui/prompt-routing.js +20 -8
  263. package/dist/ui/prompt-routing.js.map +1 -1
  264. package/dist/ui/submit-prompt-command.d.ts.map +1 -1
  265. package/dist/ui/submit-prompt-command.js +1 -1
  266. package/dist/ui/submit-prompt-command.js.map +1 -1
  267. package/dist/ui/terminal-history.js +4 -2
  268. package/dist/ui/terminal-history.js.map +1 -1
  269. package/dist/ui/tool-group-summary.d.ts +2 -0
  270. package/dist/ui/tool-group-summary.d.ts.map +1 -1
  271. package/dist/ui/tool-group-summary.js +11 -25
  272. package/dist/ui/tool-group-summary.js.map +1 -1
  273. package/dist/ui/tool-line-summary.d.ts.map +1 -1
  274. package/dist/ui/tool-line-summary.js +12 -9
  275. package/dist/ui/tool-line-summary.js.map +1 -1
  276. package/dist/ui/transcript/tool-presentation.d.ts.map +1 -1
  277. package/dist/ui/transcript/tool-presentation.js +2 -7
  278. package/dist/ui/transcript/tool-presentation.js.map +1 -1
  279. package/dist/ui/utils/text-utils.d.ts +0 -6
  280. package/dist/ui/utils/text-utils.d.ts.map +1 -1
  281. package/dist/ui/utils/text-utils.js +8 -3
  282. package/dist/ui/utils/text-utils.js.map +1 -1
  283. package/dist/utils/image.d.ts.map +1 -1
  284. package/dist/utils/image.js.map +1 -1
  285. package/dist/utils/text.d.ts +41 -0
  286. package/dist/utils/text.d.ts.map +1 -1
  287. package/dist/utils/text.js +46 -0
  288. package/dist/utils/text.js.map +1 -1
  289. package/package.json +7 -8
  290. package/dist/app-sidecar-auth-broadcast.test.d.ts +0 -2
  291. package/dist/app-sidecar-auth-broadcast.test.d.ts.map +0 -1
  292. package/dist/app-sidecar-auth-broadcast.test.js +0 -348
  293. package/dist/app-sidecar-auth-broadcast.test.js.map +0 -1
  294. package/dist/app-sidecar-sessions.test.d.ts +0 -2
  295. package/dist/app-sidecar-sessions.test.d.ts.map +0 -1
  296. package/dist/app-sidecar-sessions.test.js +0 -178
  297. package/dist/app-sidecar-sessions.test.js.map +0 -1
  298. package/dist/chat-agents/general.test.d.ts +0 -2
  299. package/dist/chat-agents/general.test.d.ts.map +0 -1
  300. package/dist/chat-agents/general.test.js +0 -52
  301. package/dist/chat-agents/general.test.js.map +0 -1
  302. package/dist/chat-agents/jiwa.test.d.ts +0 -2
  303. package/dist/chat-agents/jiwa.test.d.ts.map +0 -1
  304. package/dist/chat-agents/jiwa.test.js +0 -66
  305. package/dist/chat-agents/jiwa.test.js.map +0 -1
  306. package/dist/chat-agents/memory.test.d.ts +0 -2
  307. package/dist/chat-agents/memory.test.d.ts.map +0 -1
  308. package/dist/chat-agents/memory.test.js +0 -165
  309. package/dist/chat-agents/memory.test.js.map +0 -1
  310. package/dist/chat-agents/specialists.test.d.ts +0 -2
  311. package/dist/chat-agents/specialists.test.d.ts.map +0 -1
  312. package/dist/chat-agents/specialists.test.js +0 -98
  313. package/dist/chat-agents/specialists.test.js.map +0 -1
  314. package/dist/cli/command-routing.test.d.ts +0 -2
  315. package/dist/cli/command-routing.test.d.ts.map +0 -1
  316. package/dist/cli/command-routing.test.js +0 -61
  317. package/dist/cli/command-routing.test.js.map +0 -1
  318. package/dist/config.test.d.ts +0 -2
  319. package/dist/config.test.d.ts.map +0 -1
  320. package/dist/config.test.js +0 -123
  321. package/dist/config.test.js.map +0 -1
  322. package/dist/core/agent-mcp-passthrough.test.d.ts +0 -2
  323. package/dist/core/agent-mcp-passthrough.test.d.ts.map +0 -1
  324. package/dist/core/agent-mcp-passthrough.test.js +0 -61
  325. package/dist/core/agent-mcp-passthrough.test.js.map +0 -1
  326. package/dist/core/agent-notifications.test.d.ts +0 -2
  327. package/dist/core/agent-notifications.test.d.ts.map +0 -1
  328. package/dist/core/agent-notifications.test.js +0 -97
  329. package/dist/core/agent-notifications.test.js.map +0 -1
  330. package/dist/core/agent-session-add-dir.test.d.ts +0 -2
  331. package/dist/core/agent-session-add-dir.test.d.ts.map +0 -1
  332. package/dist/core/agent-session-add-dir.test.js +0 -110
  333. package/dist/core/agent-session-add-dir.test.js.map +0 -1
  334. package/dist/core/agent-session-checkpoint-flush.test.d.ts +0 -2
  335. package/dist/core/agent-session-checkpoint-flush.test.d.ts.map +0 -1
  336. package/dist/core/agent-session-checkpoint-flush.test.js +0 -201
  337. package/dist/core/agent-session-checkpoint-flush.test.js.map +0 -1
  338. package/dist/core/agent-session-compaction.test.d.ts +0 -2
  339. package/dist/core/agent-session-compaction.test.d.ts.map +0 -1
  340. package/dist/core/agent-session-compaction.test.js +0 -1096
  341. package/dist/core/agent-session-compaction.test.js.map +0 -1
  342. package/dist/core/agent-session-crash-durability.test.d.ts +0 -2
  343. package/dist/core/agent-session-crash-durability.test.d.ts.map +0 -1
  344. package/dist/core/agent-session-crash-durability.test.js +0 -102
  345. package/dist/core/agent-session-crash-durability.test.js.map +0 -1
  346. package/dist/core/agent-session-marker-anchors.test.d.ts +0 -2
  347. package/dist/core/agent-session-marker-anchors.test.d.ts.map +0 -1
  348. package/dist/core/agent-session-marker-anchors.test.js +0 -326
  349. package/dist/core/agent-session-marker-anchors.test.js.map +0 -1
  350. package/dist/core/agent-session-memory-tail.test.d.ts +0 -2
  351. package/dist/core/agent-session-memory-tail.test.d.ts.map +0 -1
  352. package/dist/core/agent-session-memory-tail.test.js +0 -119
  353. package/dist/core/agent-session-memory-tail.test.js.map +0 -1
  354. package/dist/core/agent-session-model-switch.test.d.ts +0 -2
  355. package/dist/core/agent-session-model-switch.test.d.ts.map +0 -1
  356. package/dist/core/agent-session-model-switch.test.js +0 -161
  357. package/dist/core/agent-session-model-switch.test.js.map +0 -1
  358. package/dist/core/agent-session-notifications.test.d.ts +0 -2
  359. package/dist/core/agent-session-notifications.test.d.ts.map +0 -1
  360. package/dist/core/agent-session-notifications.test.js +0 -114
  361. package/dist/core/agent-session-notifications.test.js.map +0 -1
  362. package/dist/core/agent-session-process-gate.test.d.ts +0 -2
  363. package/dist/core/agent-session-process-gate.test.d.ts.map +0 -1
  364. package/dist/core/agent-session-process-gate.test.js +0 -98
  365. package/dist/core/agent-session-process-gate.test.js.map +0 -1
  366. package/dist/core/agent-session-queue.test.d.ts +0 -2
  367. package/dist/core/agent-session-queue.test.d.ts.map +0 -1
  368. package/dist/core/agent-session-queue.test.js +0 -184
  369. package/dist/core/agent-session-queue.test.js.map +0 -1
  370. package/dist/core/agent-session-review-coverage.test.d.ts +0 -2
  371. package/dist/core/agent-session-review-coverage.test.d.ts.map +0 -1
  372. package/dist/core/agent-session-review-coverage.test.js +0 -140
  373. package/dist/core/agent-session-review-coverage.test.js.map +0 -1
  374. package/dist/core/agent-session-slash-restore.test.d.ts +0 -2
  375. package/dist/core/agent-session-slash-restore.test.d.ts.map +0 -1
  376. package/dist/core/agent-session-slash-restore.test.js +0 -121
  377. package/dist/core/agent-session-slash-restore.test.js.map +0 -1
  378. package/dist/core/agent-session-subagent-policy.test.d.ts +0 -2
  379. package/dist/core/agent-session-subagent-policy.test.d.ts.map +0 -1
  380. package/dist/core/agent-session-subagent-policy.test.js +0 -40
  381. package/dist/core/agent-session-subagent-policy.test.js.map +0 -1
  382. package/dist/core/agent-session-tool-result-policy.test.d.ts +0 -2
  383. package/dist/core/agent-session-tool-result-policy.test.d.ts.map +0 -1
  384. package/dist/core/agent-session-tool-result-policy.test.js +0 -25
  385. package/dist/core/agent-session-tool-result-policy.test.js.map +0 -1
  386. package/dist/core/agent-session-tool-tiers.test.d.ts +0 -2
  387. package/dist/core/agent-session-tool-tiers.test.d.ts.map +0 -1
  388. package/dist/core/agent-session-tool-tiers.test.js +0 -138
  389. package/dist/core/agent-session-tool-tiers.test.js.map +0 -1
  390. package/dist/core/agent-tools-allowlist.test.d.ts +0 -2
  391. package/dist/core/agent-tools-allowlist.test.d.ts.map +0 -1
  392. package/dist/core/agent-tools-allowlist.test.js +0 -74
  393. package/dist/core/agent-tools-allowlist.test.js.map +0 -1
  394. package/dist/core/agents.test.d.ts +0 -2
  395. package/dist/core/agents.test.d.ts.map +0 -1
  396. package/dist/core/agents.test.js +0 -147
  397. package/dist/core/agents.test.js.map +0 -1
  398. package/dist/core/auto-update.test.d.ts +0 -2
  399. package/dist/core/auto-update.test.d.ts.map +0 -1
  400. package/dist/core/auto-update.test.js +0 -204
  401. package/dist/core/auto-update.test.js.map +0 -1
  402. package/dist/core/autopilot-cycle.test.d.ts +0 -2
  403. package/dist/core/autopilot-cycle.test.d.ts.map +0 -1
  404. package/dist/core/autopilot-cycle.test.js +0 -375
  405. package/dist/core/autopilot-cycle.test.js.map +0 -1
  406. package/dist/core/autopilot-gate.test.d.ts +0 -2
  407. package/dist/core/autopilot-gate.test.d.ts.map +0 -1
  408. package/dist/core/autopilot-gate.test.js +0 -295
  409. package/dist/core/autopilot-gate.test.js.map +0 -1
  410. package/dist/core/autopilot-verdict.test.d.ts +0 -2
  411. package/dist/core/autopilot-verdict.test.d.ts.map +0 -1
  412. package/dist/core/autopilot-verdict.test.js +0 -153
  413. package/dist/core/autopilot-verdict.test.js.map +0 -1
  414. package/dist/core/checkpoint-store.test.d.ts +0 -2
  415. package/dist/core/checkpoint-store.test.d.ts.map +0 -1
  416. package/dist/core/checkpoint-store.test.js +0 -111
  417. package/dist/core/checkpoint-store.test.js.map +0 -1
  418. package/dist/core/code-retrieval-chunkers.test.d.ts +0 -2
  419. package/dist/core/code-retrieval-chunkers.test.d.ts.map +0 -1
  420. package/dist/core/code-retrieval-chunkers.test.js +0 -203
  421. package/dist/core/code-retrieval-chunkers.test.js.map +0 -1
  422. package/dist/core/compaction/active-context.test.d.ts +0 -2
  423. package/dist/core/compaction/active-context.test.d.ts.map +0 -1
  424. package/dist/core/compaction/active-context.test.js +0 -57
  425. package/dist/core/compaction/active-context.test.js.map +0 -1
  426. package/dist/core/compaction/compactor.test.d.ts +0 -2
  427. package/dist/core/compaction/compactor.test.d.ts.map +0 -1
  428. package/dist/core/compaction/compactor.test.js +0 -1072
  429. package/dist/core/compaction/compactor.test.js.map +0 -1
  430. package/dist/core/compaction/policy.test.d.ts +0 -2
  431. package/dist/core/compaction/policy.test.d.ts.map +0 -1
  432. package/dist/core/compaction/policy.test.js +0 -35
  433. package/dist/core/compaction/policy.test.js.map +0 -1
  434. package/dist/core/compaction/query-aware-selector.test.d.ts +0 -2
  435. package/dist/core/compaction/query-aware-selector.test.d.ts.map +0 -1
  436. package/dist/core/compaction/query-aware-selector.test.js +0 -96
  437. package/dist/core/compaction/query-aware-selector.test.js.map +0 -1
  438. package/dist/core/compaction/token-estimator.test.d.ts +0 -2
  439. package/dist/core/compaction/token-estimator.test.d.ts.map +0 -1
  440. package/dist/core/compaction/token-estimator.test.js +0 -283
  441. package/dist/core/compaction/token-estimator.test.js.map +0 -1
  442. package/dist/core/compaction/tool-result-pruner.test.d.ts +0 -2
  443. package/dist/core/compaction/tool-result-pruner.test.d.ts.map +0 -1
  444. package/dist/core/compaction/tool-result-pruner.test.js +0 -320
  445. package/dist/core/compaction/tool-result-pruner.test.js.map +0 -1
  446. package/dist/core/continue-replay-inventory.test.d.ts +0 -2
  447. package/dist/core/continue-replay-inventory.test.d.ts.map +0 -1
  448. package/dist/core/continue-replay-inventory.test.js +0 -42
  449. package/dist/core/continue-replay-inventory.test.js.map +0 -1
  450. package/dist/core/encode-cwd.test.d.ts +0 -2
  451. package/dist/core/encode-cwd.test.d.ts.map +0 -1
  452. package/dist/core/encode-cwd.test.js +0 -80
  453. package/dist/core/encode-cwd.test.js.map +0 -1
  454. package/dist/core/extensions/plugin-bundles.test.d.ts +0 -2
  455. package/dist/core/extensions/plugin-bundles.test.d.ts.map +0 -1
  456. package/dist/core/extensions/plugin-bundles.test.js +0 -110
  457. package/dist/core/extensions/plugin-bundles.test.js.map +0 -1
  458. package/dist/core/foreign-session-import.test.d.ts +0 -2
  459. package/dist/core/foreign-session-import.test.d.ts.map +0 -1
  460. package/dist/core/foreign-session-import.test.js +0 -220
  461. package/dist/core/foreign-session-import.test.js.map +0 -1
  462. package/dist/core/goal-controller.test.d.ts +0 -2
  463. package/dist/core/goal-controller.test.d.ts.map +0 -1
  464. package/dist/core/goal-controller.test.js +0 -784
  465. package/dist/core/goal-controller.test.js.map +0 -1
  466. package/dist/core/goal-lifecycle-smoke.test.d.ts +0 -2
  467. package/dist/core/goal-lifecycle-smoke.test.d.ts.map +0 -1
  468. package/dist/core/goal-lifecycle-smoke.test.js +0 -248
  469. package/dist/core/goal-lifecycle-smoke.test.js.map +0 -1
  470. package/dist/core/goal-prerequisites.test.d.ts +0 -2
  471. package/dist/core/goal-prerequisites.test.d.ts.map +0 -1
  472. package/dist/core/goal-prerequisites.test.js +0 -118
  473. package/dist/core/goal-prerequisites.test.js.map +0 -1
  474. package/dist/core/goal-store.test.d.ts +0 -2
  475. package/dist/core/goal-store.test.d.ts.map +0 -1
  476. package/dist/core/goal-store.test.js +0 -398
  477. package/dist/core/goal-store.test.js.map +0 -1
  478. package/dist/core/goal-verifier.test.d.ts +0 -2
  479. package/dist/core/goal-verifier.test.d.ts.map +0 -1
  480. package/dist/core/goal-verifier.test.js +0 -131
  481. package/dist/core/goal-verifier.test.js.map +0 -1
  482. package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts +0 -2
  483. package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts.map +0 -1
  484. package/dist/core/goal-worker-dev-server-lifecycle.test.js +0 -68
  485. package/dist/core/goal-worker-dev-server-lifecycle.test.js.map +0 -1
  486. package/dist/core/goal-worker.test.d.ts +0 -2
  487. package/dist/core/goal-worker.test.d.ts.map +0 -1
  488. package/dist/core/goal-worker.test.js +0 -269
  489. package/dist/core/goal-worker.test.js.map +0 -1
  490. package/dist/core/hashline-edit-benchmark.test.d.ts +0 -2
  491. package/dist/core/hashline-edit-benchmark.test.d.ts.map +0 -1
  492. package/dist/core/hashline-edit-benchmark.test.js +0 -190
  493. package/dist/core/hashline-edit-benchmark.test.js.map +0 -1
  494. package/dist/core/ideal-review.test.d.ts +0 -2
  495. package/dist/core/ideal-review.test.d.ts.map +0 -1
  496. package/dist/core/ideal-review.test.js +0 -242
  497. package/dist/core/ideal-review.test.js.map +0 -1
  498. package/dist/core/input-normalization.test.d.ts +0 -2
  499. package/dist/core/input-normalization.test.d.ts.map +0 -1
  500. package/dist/core/input-normalization.test.js +0 -75
  501. package/dist/core/input-normalization.test.js.map +0 -1
  502. package/dist/core/json-mode-flag-parity.test.d.ts +0 -2
  503. package/dist/core/json-mode-flag-parity.test.d.ts.map +0 -1
  504. package/dist/core/json-mode-flag-parity.test.js +0 -66
  505. package/dist/core/json-mode-flag-parity.test.js.map +0 -1
  506. package/dist/core/language-detector.test.d.ts +0 -2
  507. package/dist/core/language-detector.test.d.ts.map +0 -1
  508. package/dist/core/language-detector.test.js +0 -109
  509. package/dist/core/language-detector.test.js.map +0 -1
  510. package/dist/core/local-endpoint-store.test.d.ts +0 -2
  511. package/dist/core/local-endpoint-store.test.d.ts.map +0 -1
  512. package/dist/core/local-endpoint-store.test.js +0 -131
  513. package/dist/core/local-endpoint-store.test.js.map +0 -1
  514. package/dist/core/loop-breaker.test.d.ts +0 -2
  515. package/dist/core/loop-breaker.test.d.ts.map +0 -1
  516. package/dist/core/loop-breaker.test.js +0 -238
  517. package/dist/core/loop-breaker.test.js.map +0 -1
  518. package/dist/core/lsp/client-navigation.test.d.ts +0 -2
  519. package/dist/core/lsp/client-navigation.test.d.ts.map +0 -1
  520. package/dist/core/lsp/client-navigation.test.js +0 -135
  521. package/dist/core/lsp/client-navigation.test.js.map +0 -1
  522. package/dist/core/lsp/format.test.d.ts +0 -2
  523. package/dist/core/lsp/format.test.d.ts.map +0 -1
  524. package/dist/core/lsp/format.test.js +0 -56
  525. package/dist/core/lsp/format.test.js.map +0 -1
  526. package/dist/core/lsp/integration.test.d.ts +0 -2
  527. package/dist/core/lsp/integration.test.d.ts.map +0 -1
  528. package/dist/core/lsp/integration.test.js +0 -60
  529. package/dist/core/lsp/integration.test.js.map +0 -1
  530. package/dist/core/lsp/jsonrpc.test.d.ts +0 -2
  531. package/dist/core/lsp/jsonrpc.test.d.ts.map +0 -1
  532. package/dist/core/lsp/jsonrpc.test.js +0 -127
  533. package/dist/core/lsp/jsonrpc.test.js.map +0 -1
  534. package/dist/core/lsp/manager-navigation.test.d.ts +0 -2
  535. package/dist/core/lsp/manager-navigation.test.d.ts.map +0 -1
  536. package/dist/core/lsp/manager-navigation.test.js +0 -121
  537. package/dist/core/lsp/manager-navigation.test.js.map +0 -1
  538. package/dist/core/lsp/manager.test.d.ts +0 -2
  539. package/dist/core/lsp/manager.test.d.ts.map +0 -1
  540. package/dist/core/lsp/manager.test.js +0 -220
  541. package/dist/core/lsp/manager.test.js.map +0 -1
  542. package/dist/core/lsp/pool.test.d.ts +0 -2
  543. package/dist/core/lsp/pool.test.d.ts.map +0 -1
  544. package/dist/core/lsp/pool.test.js +0 -286
  545. package/dist/core/lsp/pool.test.js.map +0 -1
  546. package/dist/core/lsp/servers.test.d.ts +0 -2
  547. package/dist/core/lsp/servers.test.d.ts.map +0 -1
  548. package/dist/core/lsp/servers.test.js +0 -67
  549. package/dist/core/lsp/servers.test.js.map +0 -1
  550. package/dist/core/lsp/uri.test.d.ts +0 -2
  551. package/dist/core/lsp/uri.test.d.ts.map +0 -1
  552. package/dist/core/lsp/uri.test.js +0 -56
  553. package/dist/core/lsp/uri.test.js.map +0 -1
  554. package/dist/core/lsp/windows.test.d.ts +0 -2
  555. package/dist/core/lsp/windows.test.d.ts.map +0 -1
  556. package/dist/core/lsp/windows.test.js +0 -239
  557. package/dist/core/lsp/windows.test.js.map +0 -1
  558. package/dist/core/mcp/catalog-cache.test.d.ts +0 -2
  559. package/dist/core/mcp/catalog-cache.test.d.ts.map +0 -1
  560. package/dist/core/mcp/catalog-cache.test.js +0 -99
  561. package/dist/core/mcp/catalog-cache.test.js.map +0 -1
  562. package/dist/core/mcp/client-session-recovery.test.d.ts +0 -2
  563. package/dist/core/mcp/client-session-recovery.test.d.ts.map +0 -1
  564. package/dist/core/mcp/client-session-recovery.test.js +0 -231
  565. package/dist/core/mcp/client-session-recovery.test.js.map +0 -1
  566. package/dist/core/mcp/content.test.d.ts +0 -2
  567. package/dist/core/mcp/content.test.d.ts.map +0 -1
  568. package/dist/core/mcp/content.test.js +0 -135
  569. package/dist/core/mcp/content.test.js.map +0 -1
  570. package/dist/core/mcp/elicitation.test.d.ts +0 -2
  571. package/dist/core/mcp/elicitation.test.d.ts.map +0 -1
  572. package/dist/core/mcp/elicitation.test.js +0 -158
  573. package/dist/core/mcp/elicitation.test.js.map +0 -1
  574. package/dist/core/mcp/legacy-negotiation.test.d.ts +0 -2
  575. package/dist/core/mcp/legacy-negotiation.test.d.ts.map +0 -1
  576. package/dist/core/mcp/legacy-negotiation.test.js +0 -80
  577. package/dist/core/mcp/legacy-negotiation.test.js.map +0 -1
  578. package/dist/core/mcp/loopback.test.d.ts +0 -2
  579. package/dist/core/mcp/loopback.test.d.ts.map +0 -1
  580. package/dist/core/mcp/loopback.test.js +0 -87
  581. package/dist/core/mcp/loopback.test.js.map +0 -1
  582. package/dist/core/mcp/oauth-store.test.d.ts +0 -2
  583. package/dist/core/mcp/oauth-store.test.d.ts.map +0 -1
  584. package/dist/core/mcp/oauth-store.test.js +0 -94
  585. package/dist/core/mcp/oauth-store.test.js.map +0 -1
  586. package/dist/core/mcp/parse-add-command.test.d.ts +0 -2
  587. package/dist/core/mcp/parse-add-command.test.d.ts.map +0 -1
  588. package/dist/core/mcp/parse-add-command.test.js +0 -81
  589. package/dist/core/mcp/parse-add-command.test.js.map +0 -1
  590. package/dist/core/mcp/resolve-stdio.test.d.ts +0 -2
  591. package/dist/core/mcp/resolve-stdio.test.d.ts.map +0 -1
  592. package/dist/core/mcp/resolve-stdio.test.js +0 -239
  593. package/dist/core/mcp/resolve-stdio.test.js.map +0 -1
  594. package/dist/core/mcp/session-elicitation-wiring.test.d.ts +0 -2
  595. package/dist/core/mcp/session-elicitation-wiring.test.d.ts.map +0 -1
  596. package/dist/core/mcp/session-elicitation-wiring.test.js +0 -138
  597. package/dist/core/mcp/session-elicitation-wiring.test.js.map +0 -1
  598. package/dist/core/mcp/shared-pool.test.d.ts +0 -2
  599. package/dist/core/mcp/shared-pool.test.d.ts.map +0 -1
  600. package/dist/core/mcp/shared-pool.test.js +0 -425
  601. package/dist/core/mcp/shared-pool.test.js.map +0 -1
  602. package/dist/core/mcp/store.test.d.ts +0 -2
  603. package/dist/core/mcp/store.test.d.ts.map +0 -1
  604. package/dist/core/mcp/store.test.js +0 -110
  605. package/dist/core/mcp/store.test.js.map +0 -1
  606. package/dist/core/mcp/when-connected.test.d.ts +0 -2
  607. package/dist/core/mcp/when-connected.test.d.ts.map +0 -1
  608. package/dist/core/mcp/when-connected.test.js +0 -46
  609. package/dist/core/mcp/when-connected.test.js.map +0 -1
  610. package/dist/core/message-images.test.d.ts +0 -2
  611. package/dist/core/message-images.test.d.ts.map +0 -1
  612. package/dist/core/message-images.test.js +0 -62
  613. package/dist/core/message-images.test.js.map +0 -1
  614. package/dist/core/network-guard.test.d.ts +0 -2
  615. package/dist/core/network-guard.test.d.ts.map +0 -1
  616. package/dist/core/network-guard.test.js +0 -72
  617. package/dist/core/network-guard.test.js.map +0 -1
  618. package/dist/core/nolan-context.test.d.ts +0 -2
  619. package/dist/core/nolan-context.test.d.ts.map +0 -1
  620. package/dist/core/nolan-context.test.js +0 -342
  621. package/dist/core/nolan-context.test.js.map +0 -1
  622. package/dist/core/nolan-model.test.d.ts +0 -2
  623. package/dist/core/nolan-model.test.d.ts.map +0 -1
  624. package/dist/core/nolan-model.test.js +0 -51
  625. package/dist/core/nolan-model.test.js.map +0 -1
  626. package/dist/core/nolan-prompt.test.d.ts +0 -2
  627. package/dist/core/nolan-prompt.test.d.ts.map +0 -1
  628. package/dist/core/nolan-prompt.test.js +0 -160
  629. package/dist/core/nolan-prompt.test.js.map +0 -1
  630. package/dist/core/persistent-shell.test.d.ts +0 -2
  631. package/dist/core/persistent-shell.test.d.ts.map +0 -1
  632. package/dist/core/persistent-shell.test.js +0 -84
  633. package/dist/core/persistent-shell.test.js.map +0 -1
  634. package/dist/core/pixel-fix.test.d.ts +0 -2
  635. package/dist/core/pixel-fix.test.d.ts.map +0 -1
  636. package/dist/core/pixel-fix.test.js +0 -310
  637. package/dist/core/pixel-fix.test.js.map +0 -1
  638. package/dist/core/pixel.test.d.ts +0 -2
  639. package/dist/core/pixel.test.d.ts.map +0 -1
  640. package/dist/core/pixel.test.js +0 -269
  641. package/dist/core/pixel.test.js.map +0 -1
  642. package/dist/core/process-gate.test.d.ts +0 -2
  643. package/dist/core/process-gate.test.d.ts.map +0 -1
  644. package/dist/core/process-gate.test.js +0 -87
  645. package/dist/core/process-gate.test.js.map +0 -1
  646. package/dist/core/process-manager-dev-server-repro.test.d.ts +0 -2
  647. package/dist/core/process-manager-dev-server-repro.test.d.ts.map +0 -1
  648. package/dist/core/process-manager-dev-server-repro.test.js +0 -225
  649. package/dist/core/process-manager-dev-server-repro.test.js.map +0 -1
  650. package/dist/core/process-manager-notifications.test.d.ts +0 -2
  651. package/dist/core/process-manager-notifications.test.d.ts.map +0 -1
  652. package/dist/core/process-manager-notifications.test.js +0 -227
  653. package/dist/core/process-manager-notifications.test.js.map +0 -1
  654. package/dist/core/progress/engine.test.d.ts +0 -2
  655. package/dist/core/progress/engine.test.d.ts.map +0 -1
  656. package/dist/core/progress/engine.test.js +0 -136
  657. package/dist/core/progress/engine.test.js.map +0 -1
  658. package/dist/core/progress/git-xp.test.d.ts +0 -2
  659. package/dist/core/progress/git-xp.test.d.ts.map +0 -1
  660. package/dist/core/progress/git-xp.test.js +0 -88
  661. package/dist/core/progress/git-xp.test.js.map +0 -1
  662. package/dist/core/progress/ranks.test.d.ts +0 -2
  663. package/dist/core/progress/ranks.test.d.ts.map +0 -1
  664. package/dist/core/progress/ranks.test.js +0 -100
  665. package/dist/core/progress/ranks.test.js.map +0 -1
  666. package/dist/core/progress/rebuild.test.d.ts +0 -2
  667. package/dist/core/progress/rebuild.test.d.ts.map +0 -1
  668. package/dist/core/progress/rebuild.test.js +0 -103
  669. package/dist/core/progress/rebuild.test.js.map +0 -1
  670. package/dist/core/progress/store.test.d.ts +0 -2
  671. package/dist/core/progress/store.test.d.ts.map +0 -1
  672. package/dist/core/progress/store.test.js +0 -108
  673. package/dist/core/progress/store.test.js.map +0 -1
  674. package/dist/core/project-discovery.test.d.ts +0 -2
  675. package/dist/core/project-discovery.test.d.ts.map +0 -1
  676. package/dist/core/project-discovery.test.js +0 -519
  677. package/dist/core/project-discovery.test.js.map +0 -1
  678. package/dist/core/prompt-commands.test.d.ts +0 -2
  679. package/dist/core/prompt-commands.test.d.ts.map +0 -1
  680. package/dist/core/prompt-commands.test.js +0 -175
  681. package/dist/core/prompt-commands.test.js.map +0 -1
  682. package/dist/core/radio.test.d.ts +0 -2
  683. package/dist/core/radio.test.d.ts.map +0 -1
  684. package/dist/core/radio.test.js +0 -117
  685. package/dist/core/radio.test.js.map +0 -1
  686. package/dist/core/regrounding.test.d.ts +0 -2
  687. package/dist/core/regrounding.test.d.ts.map +0 -1
  688. package/dist/core/regrounding.test.js +0 -38
  689. package/dist/core/regrounding.test.js.map +0 -1
  690. package/dist/core/resolve-start.test.d.ts +0 -2
  691. package/dist/core/resolve-start.test.d.ts.map +0 -1
  692. package/dist/core/resolve-start.test.js +0 -68
  693. package/dist/core/resolve-start.test.js.map +0 -1
  694. package/dist/core/run-claim.test.d.ts +0 -2
  695. package/dist/core/run-claim.test.d.ts.map +0 -1
  696. package/dist/core/run-claim.test.js +0 -107
  697. package/dist/core/run-claim.test.js.map +0 -1
  698. package/dist/core/run-journal.test.d.ts +0 -2
  699. package/dist/core/run-journal.test.d.ts.map +0 -1
  700. package/dist/core/run-journal.test.js +0 -195
  701. package/dist/core/run-journal.test.js.map +0 -1
  702. package/dist/core/run-lifecycle.test.d.ts +0 -2
  703. package/dist/core/run-lifecycle.test.d.ts.map +0 -1
  704. package/dist/core/run-lifecycle.test.js +0 -64
  705. package/dist/core/run-lifecycle.test.js.map +0 -1
  706. package/dist/core/sandbox-feedback.test.d.ts +0 -2
  707. package/dist/core/sandbox-feedback.test.d.ts.map +0 -1
  708. package/dist/core/sandbox-feedback.test.js +0 -32
  709. package/dist/core/sandbox-feedback.test.js.map +0 -1
  710. package/dist/core/sandbox.test.d.ts +0 -2
  711. package/dist/core/sandbox.test.d.ts.map +0 -1
  712. package/dist/core/sandbox.test.js +0 -157
  713. package/dist/core/sandbox.test.js.map +0 -1
  714. package/dist/core/semantic-search-benchmark.test.d.ts +0 -2
  715. package/dist/core/semantic-search-benchmark.test.d.ts.map +0 -1
  716. package/dist/core/semantic-search-benchmark.test.js +0 -89
  717. package/dist/core/semantic-search-benchmark.test.js.map +0 -1
  718. package/dist/core/session-compaction.test.d.ts +0 -2
  719. package/dist/core/session-compaction.test.d.ts.map +0 -1
  720. package/dist/core/session-compaction.test.js +0 -92
  721. package/dist/core/session-compaction.test.js.map +0 -1
  722. package/dist/core/session-export.test.d.ts +0 -2
  723. package/dist/core/session-export.test.d.ts.map +0 -1
  724. package/dist/core/session-export.test.js +0 -353
  725. package/dist/core/session-export.test.js.map +0 -1
  726. package/dist/core/session-history.test.d.ts +0 -2
  727. package/dist/core/session-history.test.d.ts.map +0 -1
  728. package/dist/core/session-history.test.js +0 -272
  729. package/dist/core/session-history.test.js.map +0 -1
  730. package/dist/core/session-manager.test.d.ts +0 -2
  731. package/dist/core/session-manager.test.d.ts.map +0 -1
  732. package/dist/core/session-manager.test.js +0 -573
  733. package/dist/core/session-manager.test.js.map +0 -1
  734. package/dist/core/session-notification-visibility.test.d.ts +0 -2
  735. package/dist/core/session-notification-visibility.test.d.ts.map +0 -1
  736. package/dist/core/session-notification-visibility.test.js +0 -113
  737. package/dist/core/session-notification-visibility.test.js.map +0 -1
  738. package/dist/core/session-restore-display.test.d.ts +0 -2
  739. package/dist/core/session-restore-display.test.d.ts.map +0 -1
  740. package/dist/core/session-restore-display.test.js +0 -103
  741. package/dist/core/session-restore-display.test.js.map +0 -1
  742. package/dist/core/session-storage-fd-leak.test.d.ts +0 -2
  743. package/dist/core/session-storage-fd-leak.test.d.ts.map +0 -1
  744. package/dist/core/session-storage-fd-leak.test.js +0 -116
  745. package/dist/core/session-storage-fd-leak.test.js.map +0 -1
  746. package/dist/core/session-storage.test.d.ts +0 -2
  747. package/dist/core/session-storage.test.d.ts.map +0 -1
  748. package/dist/core/session-storage.test.js +0 -277
  749. package/dist/core/session-storage.test.js.map +0 -1
  750. package/dist/core/setup-history.test.d.ts +0 -2
  751. package/dist/core/setup-history.test.d.ts.map +0 -1
  752. package/dist/core/setup-history.test.js +0 -59
  753. package/dist/core/setup-history.test.js.map +0 -1
  754. package/dist/core/shell.test.d.ts +0 -2
  755. package/dist/core/shell.test.d.ts.map +0 -1
  756. package/dist/core/shell.test.js +0 -87
  757. package/dist/core/shell.test.js.map +0 -1
  758. package/dist/core/shutdown.test.d.ts +0 -2
  759. package/dist/core/shutdown.test.d.ts.map +0 -1
  760. package/dist/core/shutdown.test.js +0 -160
  761. package/dist/core/shutdown.test.js.map +0 -1
  762. package/dist/core/sidecar-error-reporter.d.ts +0 -12
  763. package/dist/core/sidecar-error-reporter.d.ts.map +0 -1
  764. package/dist/core/sidecar-error-reporter.js +0 -57
  765. package/dist/core/sidecar-error-reporter.js.map +0 -1
  766. package/dist/core/sidecar-error-reporter.test.d.ts +0 -2
  767. package/dist/core/sidecar-error-reporter.test.d.ts.map +0 -1
  768. package/dist/core/sidecar-error-reporter.test.js +0 -61
  769. package/dist/core/sidecar-error-reporter.test.js.map +0 -1
  770. package/dist/core/skills-routing.test.d.ts +0 -2
  771. package/dist/core/skills-routing.test.d.ts.map +0 -1
  772. package/dist/core/skills-routing.test.js +0 -168
  773. package/dist/core/skills-routing.test.js.map +0 -1
  774. package/dist/core/slash-commands.test.d.ts +0 -2
  775. package/dist/core/slash-commands.test.d.ts.map +0 -1
  776. package/dist/core/slash-commands.test.js +0 -59
  777. package/dist/core/slash-commands.test.js.map +0 -1
  778. package/dist/core/source-maps.test.d.ts +0 -2
  779. package/dist/core/source-maps.test.d.ts.map +0 -1
  780. package/dist/core/source-maps.test.js +0 -175
  781. package/dist/core/source-maps.test.js.map +0 -1
  782. package/dist/core/speed-benchmark.test.d.ts +0 -2
  783. package/dist/core/speed-benchmark.test.d.ts.map +0 -1
  784. package/dist/core/speed-benchmark.test.js +0 -102
  785. package/dist/core/speed-benchmark.test.js.map +0 -1
  786. package/dist/core/subagent-manager.test.d.ts +0 -2
  787. package/dist/core/subagent-manager.test.d.ts.map +0 -1
  788. package/dist/core/subagent-manager.test.js +0 -375
  789. package/dist/core/subagent-manager.test.js.map +0 -1
  790. package/dist/core/subagent-store.test.d.ts +0 -2
  791. package/dist/core/subagent-store.test.d.ts.map +0 -1
  792. package/dist/core/subagent-store.test.js +0 -106
  793. package/dist/core/subagent-store.test.js.map +0 -1
  794. package/dist/core/verification-evidence.test.d.ts +0 -2
  795. package/dist/core/verification-evidence.test.d.ts.map +0 -1
  796. package/dist/core/verification-evidence.test.js +0 -103
  797. package/dist/core/verification-evidence.test.js.map +0 -1
  798. package/dist/core/verify-commands.test.d.ts +0 -2
  799. package/dist/core/verify-commands.test.d.ts.map +0 -1
  800. package/dist/core/verify-commands.test.js +0 -81
  801. package/dist/core/verify-commands.test.js.map +0 -1
  802. package/dist/core/workspace-guard.test.d.ts +0 -2
  803. package/dist/core/workspace-guard.test.d.ts.map +0 -1
  804. package/dist/core/workspace-guard.test.js +0 -107
  805. package/dist/core/workspace-guard.test.js.map +0 -1
  806. package/dist/modes/acp-mode.test.d.ts +0 -2
  807. package/dist/modes/acp-mode.test.d.ts.map +0 -1
  808. package/dist/modes/acp-mode.test.js +0 -1065
  809. package/dist/modes/acp-mode.test.js.map +0 -1
  810. package/dist/modes/json-mode.test.d.ts +0 -2
  811. package/dist/modes/json-mode.test.d.ts.map +0 -1
  812. package/dist/modes/json-mode.test.js +0 -84
  813. package/dist/modes/json-mode.test.js.map +0 -1
  814. package/dist/modes/subagent-worker-mode.test.d.ts +0 -2
  815. package/dist/modes/subagent-worker-mode.test.d.ts.map +0 -1
  816. package/dist/modes/subagent-worker-mode.test.js +0 -52
  817. package/dist/modes/subagent-worker-mode.test.js.map +0 -1
  818. package/dist/session.test.d.ts +0 -2
  819. package/dist/session.test.d.ts.map +0 -1
  820. package/dist/session.test.js +0 -35
  821. package/dist/session.test.js.map +0 -1
  822. package/dist/system-prompt.test.d.ts +0 -2
  823. package/dist/system-prompt.test.d.ts.map +0 -1
  824. package/dist/system-prompt.test.js +0 -536
  825. package/dist/system-prompt.test.js.map +0 -1
  826. package/dist/system-prompt.tiering.test.d.ts +0 -2
  827. package/dist/system-prompt.tiering.test.d.ts.map +0 -1
  828. package/dist/system-prompt.tiering.test.js +0 -105
  829. package/dist/system-prompt.tiering.test.js.map +0 -1
  830. package/dist/tools/bash.test.d.ts +0 -2
  831. package/dist/tools/bash.test.d.ts.map +0 -1
  832. package/dist/tools/bash.test.js +0 -204
  833. package/dist/tools/bash.test.js.map +0 -1
  834. package/dist/tools/checkpoint-hook.test.d.ts +0 -2
  835. package/dist/tools/checkpoint-hook.test.d.ts.map +0 -1
  836. package/dist/tools/checkpoint-hook.test.js +0 -65
  837. package/dist/tools/checkpoint-hook.test.js.map +0 -1
  838. package/dist/tools/code-nav.test.d.ts +0 -2
  839. package/dist/tools/code-nav.test.d.ts.map +0 -1
  840. package/dist/tools/code-nav.test.js +0 -136
  841. package/dist/tools/code-nav.test.js.map +0 -1
  842. package/dist/tools/code-skeleton.test.d.ts +0 -2
  843. package/dist/tools/code-skeleton.test.d.ts.map +0 -1
  844. package/dist/tools/code-skeleton.test.js +0 -115
  845. package/dist/tools/code-skeleton.test.js.map +0 -1
  846. package/dist/tools/compress-integration.test.d.ts +0 -2
  847. package/dist/tools/compress-integration.test.d.ts.map +0 -1
  848. package/dist/tools/compress-integration.test.js +0 -59
  849. package/dist/tools/compress-integration.test.js.map +0 -1
  850. package/dist/tools/compress.test.d.ts +0 -2
  851. package/dist/tools/compress.test.d.ts.map +0 -1
  852. package/dist/tools/compress.test.js +0 -60
  853. package/dist/tools/compress.test.js.map +0 -1
  854. package/dist/tools/edit-diff.test.d.ts +0 -2
  855. package/dist/tools/edit-diff.test.d.ts.map +0 -1
  856. package/dist/tools/edit-diff.test.js +0 -329
  857. package/dist/tools/edit-diff.test.js.map +0 -1
  858. package/dist/tools/edit-robustness.test.d.ts +0 -2
  859. package/dist/tools/edit-robustness.test.d.ts.map +0 -1
  860. package/dist/tools/edit-robustness.test.js +0 -417
  861. package/dist/tools/edit-robustness.test.js.map +0 -1
  862. package/dist/tools/edit.test.d.ts +0 -2
  863. package/dist/tools/edit.test.d.ts.map +0 -1
  864. package/dist/tools/edit.test.js +0 -940
  865. package/dist/tools/edit.test.js.map +0 -1
  866. package/dist/tools/exit-plan.test.d.ts +0 -2
  867. package/dist/tools/exit-plan.test.d.ts.map +0 -1
  868. package/dist/tools/exit-plan.test.js +0 -72
  869. package/dist/tools/exit-plan.test.js.map +0 -1
  870. package/dist/tools/generate-image.test.d.ts +0 -2
  871. package/dist/tools/generate-image.test.d.ts.map +0 -1
  872. package/dist/tools/generate-image.test.js +0 -240
  873. package/dist/tools/generate-image.test.js.map +0 -1
  874. package/dist/tools/goal-mode.test.d.ts +0 -2
  875. package/dist/tools/goal-mode.test.d.ts.map +0 -1
  876. package/dist/tools/goal-mode.test.js +0 -121
  877. package/dist/tools/goal-mode.test.js.map +0 -1
  878. package/dist/tools/goals.test.d.ts +0 -2
  879. package/dist/tools/goals.test.d.ts.map +0 -1
  880. package/dist/tools/goals.test.js +0 -795
  881. package/dist/tools/goals.test.js.map +0 -1
  882. package/dist/tools/grep-parity.test.d.ts +0 -2
  883. package/dist/tools/grep-parity.test.d.ts.map +0 -1
  884. package/dist/tools/grep-parity.test.js +0 -92
  885. package/dist/tools/grep-parity.test.js.map +0 -1
  886. package/dist/tools/grep-recall.test.d.ts +0 -2
  887. package/dist/tools/grep-recall.test.d.ts.map +0 -1
  888. package/dist/tools/grep-recall.test.js +0 -114
  889. package/dist/tools/grep-recall.test.js.map +0 -1
  890. package/dist/tools/grep-spawn.test.d.ts +0 -2
  891. package/dist/tools/grep-spawn.test.d.ts.map +0 -1
  892. package/dist/tools/grep-spawn.test.js +0 -66
  893. package/dist/tools/grep-spawn.test.js.map +0 -1
  894. package/dist/tools/grep.test.d.ts +0 -2
  895. package/dist/tools/grep.test.d.ts.map +0 -1
  896. package/dist/tools/grep.test.js +0 -82
  897. package/dist/tools/grep.test.js.map +0 -1
  898. package/dist/tools/html-extract.test.d.ts +0 -2
  899. package/dist/tools/html-extract.test.d.ts.map +0 -1
  900. package/dist/tools/html-extract.test.js +0 -60
  901. package/dist/tools/html-extract.test.js.map +0 -1
  902. package/dist/tools/index.test.d.ts +0 -2
  903. package/dist/tools/index.test.d.ts.map +0 -1
  904. package/dist/tools/index.test.js +0 -55
  905. package/dist/tools/index.test.js.map +0 -1
  906. package/dist/tools/overflow.test.d.ts +0 -2
  907. package/dist/tools/overflow.test.d.ts.map +0 -1
  908. package/dist/tools/overflow.test.js +0 -59
  909. package/dist/tools/overflow.test.js.map +0 -1
  910. package/dist/tools/path-utils.test.d.ts +0 -2
  911. package/dist/tools/path-utils.test.d.ts.map +0 -1
  912. package/dist/tools/path-utils.test.js +0 -54
  913. package/dist/tools/path-utils.test.js.map +0 -1
  914. package/dist/tools/pdf-extract.test.d.ts +0 -2
  915. package/dist/tools/pdf-extract.test.d.ts.map +0 -1
  916. package/dist/tools/pdf-extract.test.js +0 -15
  917. package/dist/tools/pdf-extract.test.js.map +0 -1
  918. package/dist/tools/plan-mode.test.d.ts +0 -2
  919. package/dist/tools/plan-mode.test.d.ts.map +0 -1
  920. package/dist/tools/plan-mode.test.js +0 -116
  921. package/dist/tools/plan-mode.test.js.map +0 -1
  922. package/dist/tools/read-only-bash.test.d.ts +0 -2
  923. package/dist/tools/read-only-bash.test.d.ts.map +0 -1
  924. package/dist/tools/read-only-bash.test.js +0 -47
  925. package/dist/tools/read-only-bash.test.js.map +0 -1
  926. package/dist/tools/read.test.d.ts +0 -2
  927. package/dist/tools/read.test.d.ts.map +0 -1
  928. package/dist/tools/read.test.js +0 -146
  929. package/dist/tools/read.test.js.map +0 -1
  930. package/dist/tools/screenshot.test.d.ts +0 -2
  931. package/dist/tools/screenshot.test.d.ts.map +0 -1
  932. package/dist/tools/screenshot.test.js +0 -145
  933. package/dist/tools/screenshot.test.js.map +0 -1
  934. package/dist/tools/search-code.test.d.ts +0 -2
  935. package/dist/tools/search-code.test.d.ts.map +0 -1
  936. package/dist/tools/search-code.test.js +0 -83
  937. package/dist/tools/search-code.test.js.map +0 -1
  938. package/dist/tools/source-path.test.d.ts +0 -2
  939. package/dist/tools/source-path.test.d.ts.map +0 -1
  940. package/dist/tools/source-path.test.js +0 -80
  941. package/dist/tools/source-path.test.js.map +0 -1
  942. package/dist/tools/subagent-control.test.d.ts +0 -2
  943. package/dist/tools/subagent-control.test.d.ts.map +0 -1
  944. package/dist/tools/subagent-control.test.js +0 -73
  945. package/dist/tools/subagent-control.test.js.map +0 -1
  946. package/dist/tools/subagent-shared.test.d.ts +0 -2
  947. package/dist/tools/subagent-shared.test.d.ts.map +0 -1
  948. package/dist/tools/subagent-shared.test.js +0 -83
  949. package/dist/tools/subagent-shared.test.js.map +0 -1
  950. package/dist/tools/subagent.test.d.ts +0 -2
  951. package/dist/tools/subagent.test.d.ts.map +0 -1
  952. package/dist/tools/subagent.test.js +0 -180
  953. package/dist/tools/subagent.test.js.map +0 -1
  954. package/dist/tools/task-send.test.d.ts +0 -2
  955. package/dist/tools/task-send.test.d.ts.map +0 -1
  956. package/dist/tools/task-send.test.js +0 -104
  957. package/dist/tools/task-send.test.js.map +0 -1
  958. package/dist/tools/tasks.test.d.ts +0 -2
  959. package/dist/tools/tasks.test.d.ts.map +0 -1
  960. package/dist/tools/tasks.test.js +0 -62
  961. package/dist/tools/tasks.test.js.map +0 -1
  962. package/dist/tools/tool-search.test.d.ts +0 -2
  963. package/dist/tools/tool-search.test.d.ts.map +0 -1
  964. package/dist/tools/tool-search.test.js +0 -69
  965. package/dist/tools/tool-search.test.js.map +0 -1
  966. package/dist/tools/tool-tiers.test.d.ts +0 -2
  967. package/dist/tools/tool-tiers.test.d.ts.map +0 -1
  968. package/dist/tools/tool-tiers.test.js +0 -48
  969. package/dist/tools/tool-tiers.test.js.map +0 -1
  970. package/dist/tools/truncate-utils.test.d.ts +0 -2
  971. package/dist/tools/truncate-utils.test.d.ts.map +0 -1
  972. package/dist/tools/truncate-utils.test.js +0 -93
  973. package/dist/tools/truncate-utils.test.js.map +0 -1
  974. package/dist/tools/truncate.test.d.ts +0 -2
  975. package/dist/tools/truncate.test.d.ts.map +0 -1
  976. package/dist/tools/truncate.test.js +0 -100
  977. package/dist/tools/truncate.test.js.map +0 -1
  978. package/dist/tools/web-fetch.test.d.ts +0 -2
  979. package/dist/tools/web-fetch.test.d.ts.map +0 -1
  980. package/dist/tools/web-fetch.test.js +0 -539
  981. package/dist/tools/web-fetch.test.js.map +0 -1
  982. package/dist/tools/web-search.test.d.ts +0 -2
  983. package/dist/tools/web-search.test.d.ts.map +0 -1
  984. package/dist/tools/web-search.test.js +0 -333
  985. package/dist/tools/web-search.test.js.map +0 -1
  986. package/dist/tools/write.test.d.ts +0 -2
  987. package/dist/tools/write.test.d.ts.map +0 -1
  988. package/dist/tools/write.test.js +0 -176
  989. package/dist/tools/write.test.js.map +0 -1
  990. package/dist/ui/anchor-pad-reclaim.test.d.ts +0 -2
  991. package/dist/ui/anchor-pad-reclaim.test.d.ts.map +0 -1
  992. package/dist/ui/anchor-pad-reclaim.test.js +0 -146
  993. package/dist/ui/anchor-pad-reclaim.test.js.map +0 -1
  994. package/dist/ui/app-items.test.d.ts +0 -2
  995. package/dist/ui/app-items.test.d.ts.map +0 -1
  996. package/dist/ui/app-items.test.js +0 -54
  997. package/dist/ui/app-items.test.js.map +0 -1
  998. package/dist/ui/app-state-persistence.test.d.ts +0 -2
  999. package/dist/ui/app-state-persistence.test.d.ts.map +0 -1
  1000. package/dist/ui/app-state-persistence.test.js +0 -71
  1001. package/dist/ui/app-state-persistence.test.js.map +0 -1
  1002. package/dist/ui/assistant-stream-flush-parity.test.d.ts +0 -2
  1003. package/dist/ui/assistant-stream-flush-parity.test.d.ts.map +0 -1
  1004. package/dist/ui/assistant-stream-flush-parity.test.js +0 -85
  1005. package/dist/ui/assistant-stream-flush-parity.test.js.map +0 -1
  1006. package/dist/ui/atomic-flush-regression.test.d.ts +0 -2
  1007. package/dist/ui/atomic-flush-regression.test.d.ts.map +0 -1
  1008. package/dist/ui/atomic-flush-regression.test.js +0 -218
  1009. package/dist/ui/atomic-flush-regression.test.js.map +0 -1
  1010. package/dist/ui/chat-layout-pinning.test.d.ts +0 -2
  1011. package/dist/ui/chat-layout-pinning.test.d.ts.map +0 -1
  1012. package/dist/ui/chat-layout-pinning.test.js +0 -525
  1013. package/dist/ui/chat-layout-pinning.test.js.map +0 -1
  1014. package/dist/ui/components/ActivityIndicator.test.d.ts +0 -2
  1015. package/dist/ui/components/ActivityIndicator.test.d.ts.map +0 -1
  1016. package/dist/ui/components/ActivityIndicator.test.js +0 -40
  1017. package/dist/ui/components/ActivityIndicator.test.js.map +0 -1
  1018. package/dist/ui/components/AssistantMessage.test.d.ts +0 -2
  1019. package/dist/ui/components/AssistantMessage.test.d.ts.map +0 -1
  1020. package/dist/ui/components/AssistantMessage.test.js +0 -418
  1021. package/dist/ui/components/AssistantMessage.test.js.map +0 -1
  1022. package/dist/ui/components/Footer.test.d.ts +0 -2
  1023. package/dist/ui/components/Footer.test.d.ts.map +0 -1
  1024. package/dist/ui/components/Footer.test.js +0 -16
  1025. package/dist/ui/components/Footer.test.js.map +0 -1
  1026. package/dist/ui/components/InputArea.test.d.ts +0 -2
  1027. package/dist/ui/components/InputArea.test.d.ts.map +0 -1
  1028. package/dist/ui/components/InputArea.test.js +0 -95
  1029. package/dist/ui/components/InputArea.test.js.map +0 -1
  1030. package/dist/ui/components/PlanOverlay.test.d.ts +0 -2
  1031. package/dist/ui/components/PlanOverlay.test.d.ts.map +0 -1
  1032. package/dist/ui/components/PlanOverlay.test.js +0 -24
  1033. package/dist/ui/components/PlanOverlay.test.js.map +0 -1
  1034. package/dist/ui/components/StreamingArea.test.d.ts +0 -2
  1035. package/dist/ui/components/StreamingArea.test.d.ts.map +0 -1
  1036. package/dist/ui/components/StreamingArea.test.js +0 -18
  1037. package/dist/ui/components/StreamingArea.test.js.map +0 -1
  1038. package/dist/ui/components/UserMessage.test.d.ts +0 -2
  1039. package/dist/ui/components/UserMessage.test.d.ts.map +0 -1
  1040. package/dist/ui/components/UserMessage.test.js +0 -39
  1041. package/dist/ui/components/UserMessage.test.js.map +0 -1
  1042. package/dist/ui/components/themed-output.test.d.ts +0 -2
  1043. package/dist/ui/components/themed-output.test.d.ts.map +0 -1
  1044. package/dist/ui/components/themed-output.test.js +0 -111
  1045. package/dist/ui/components/themed-output.test.js.map +0 -1
  1046. package/dist/ui/footer-jump-regression.test.d.ts +0 -2
  1047. package/dist/ui/footer-jump-regression.test.d.ts.map +0 -1
  1048. package/dist/ui/footer-jump-regression.test.js +0 -224
  1049. package/dist/ui/footer-jump-regression.test.js.map +0 -1
  1050. package/dist/ui/footer-status-layout.test.d.ts +0 -2
  1051. package/dist/ui/footer-status-layout.test.d.ts.map +0 -1
  1052. package/dist/ui/footer-status-layout.test.js +0 -71
  1053. package/dist/ui/footer-status-layout.test.js.map +0 -1
  1054. package/dist/ui/frame-clip-regression.test.d.ts +0 -2
  1055. package/dist/ui/frame-clip-regression.test.d.ts.map +0 -1
  1056. package/dist/ui/frame-clip-regression.test.js +0 -215
  1057. package/dist/ui/frame-clip-regression.test.js.map +0 -1
  1058. package/dist/ui/goal-events.test.d.ts +0 -2
  1059. package/dist/ui/goal-events.test.d.ts.map +0 -1
  1060. package/dist/ui/goal-events.test.js +0 -350
  1061. package/dist/ui/goal-events.test.js.map +0 -1
  1062. package/dist/ui/goal-lifecycle-orchestration.test.d.ts +0 -2
  1063. package/dist/ui/goal-lifecycle-orchestration.test.d.ts.map +0 -1
  1064. package/dist/ui/goal-lifecycle-orchestration.test.js +0 -512
  1065. package/dist/ui/goal-lifecycle-orchestration.test.js.map +0 -1
  1066. package/dist/ui/goal-overlay.test.d.ts +0 -2
  1067. package/dist/ui/goal-overlay.test.d.ts.map +0 -1
  1068. package/dist/ui/goal-overlay.test.js +0 -384
  1069. package/dist/ui/goal-overlay.test.js.map +0 -1
  1070. package/dist/ui/goal-status-bar.test.d.ts +0 -2
  1071. package/dist/ui/goal-status-bar.test.d.ts.map +0 -1
  1072. package/dist/ui/goal-status-bar.test.js +0 -172
  1073. package/dist/ui/goal-status-bar.test.js.map +0 -1
  1074. package/dist/ui/hooks/stall-retry-duplicate.test.d.ts +0 -2
  1075. package/dist/ui/hooks/stall-retry-duplicate.test.d.ts.map +0 -1
  1076. package/dist/ui/hooks/stall-retry-duplicate.test.js +0 -94
  1077. package/dist/ui/hooks/stall-retry-duplicate.test.js.map +0 -1
  1078. package/dist/ui/hooks/useAgentLoop.test.d.ts +0 -2
  1079. package/dist/ui/hooks/useAgentLoop.test.d.ts.map +0 -1
  1080. package/dist/ui/hooks/useAgentLoop.test.js +0 -66
  1081. package/dist/ui/hooks/useAgentLoop.test.js.map +0 -1
  1082. package/dist/ui/hooks/useContextCompaction.test.d.ts +0 -2
  1083. package/dist/ui/hooks/useContextCompaction.test.d.ts.map +0 -1
  1084. package/dist/ui/hooks/useContextCompaction.test.js +0 -135
  1085. package/dist/ui/hooks/useContextCompaction.test.js.map +0 -1
  1086. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts +0 -2
  1087. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts.map +0 -1
  1088. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js +0 -81
  1089. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js.map +0 -1
  1090. package/dist/ui/hooks/useTranscriptHistory.test.d.ts +0 -2
  1091. package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +0 -1
  1092. package/dist/ui/hooks/useTranscriptHistory.test.js +0 -61
  1093. package/dist/ui/hooks/useTranscriptHistory.test.js.map +0 -1
  1094. package/dist/ui/hooks/useTranscriptScroll.test.d.ts +0 -2
  1095. package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +0 -1
  1096. package/dist/ui/hooks/useTranscriptScroll.test.js +0 -119
  1097. package/dist/ui/hooks/useTranscriptScroll.test.js.map +0 -1
  1098. package/dist/ui/live-area-clamp.test.d.ts +0 -2
  1099. package/dist/ui/live-area-clamp.test.d.ts.map +0 -1
  1100. package/dist/ui/live-area-clamp.test.js +0 -125
  1101. package/dist/ui/live-area-clamp.test.js.map +0 -1
  1102. package/dist/ui/live-area-height.test.d.ts +0 -2
  1103. package/dist/ui/live-area-height.test.d.ts.map +0 -1
  1104. package/dist/ui/live-area-height.test.js +0 -76
  1105. package/dist/ui/live-area-height.test.js.map +0 -1
  1106. package/dist/ui/live-frame-height.test.d.ts +0 -2
  1107. package/dist/ui/live-frame-height.test.d.ts.map +0 -1
  1108. package/dist/ui/live-frame-height.test.js +0 -116
  1109. package/dist/ui/live-frame-height.test.js.map +0 -1
  1110. package/dist/ui/live-item-flush.test.d.ts +0 -2
  1111. package/dist/ui/live-item-flush.test.d.ts.map +0 -1
  1112. package/dist/ui/live-item-flush.test.js +0 -437
  1113. package/dist/ui/live-item-flush.test.js.map +0 -1
  1114. package/dist/ui/long-prompt-regression-harness.test.d.ts +0 -2
  1115. package/dist/ui/long-prompt-regression-harness.test.d.ts.map +0 -1
  1116. package/dist/ui/long-prompt-regression-harness.test.js +0 -195
  1117. package/dist/ui/long-prompt-regression-harness.test.js.map +0 -1
  1118. package/dist/ui/pixel.test.d.ts +0 -2
  1119. package/dist/ui/pixel.test.d.ts.map +0 -1
  1120. package/dist/ui/pixel.test.js +0 -138
  1121. package/dist/ui/pixel.test.js.map +0 -1
  1122. package/dist/ui/plan-overlay.test.d.ts +0 -2
  1123. package/dist/ui/plan-overlay.test.d.ts.map +0 -1
  1124. package/dist/ui/plan-overlay.test.js +0 -305
  1125. package/dist/ui/plan-overlay.test.js.map +0 -1
  1126. package/dist/ui/queued-message.test.d.ts +0 -2
  1127. package/dist/ui/queued-message.test.d.ts.map +0 -1
  1128. package/dist/ui/queued-message.test.js +0 -172
  1129. package/dist/ui/queued-message.test.js.map +0 -1
  1130. package/dist/ui/render.test.d.ts +0 -2
  1131. package/dist/ui/render.test.d.ts.map +0 -1
  1132. package/dist/ui/render.test.js +0 -42
  1133. package/dist/ui/render.test.js.map +0 -1
  1134. package/dist/ui/scroll-stabilization.test.d.ts +0 -2
  1135. package/dist/ui/scroll-stabilization.test.d.ts.map +0 -1
  1136. package/dist/ui/scroll-stabilization.test.js +0 -64
  1137. package/dist/ui/scroll-stabilization.test.js.map +0 -1
  1138. package/dist/ui/slash-command-images.test.d.ts +0 -2
  1139. package/dist/ui/slash-command-images.test.d.ts.map +0 -1
  1140. package/dist/ui/slash-command-images.test.js +0 -110
  1141. package/dist/ui/slash-command-images.test.js.map +0 -1
  1142. package/dist/ui/startup-banner-order.test.d.ts +0 -2
  1143. package/dist/ui/startup-banner-order.test.d.ts.map +0 -1
  1144. package/dist/ui/startup-banner-order.test.js +0 -105
  1145. package/dist/ui/startup-banner-order.test.js.map +0 -1
  1146. package/dist/ui/stores/transcript-scroll-store.test.d.ts +0 -2
  1147. package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +0 -1
  1148. package/dist/ui/stores/transcript-scroll-store.test.js +0 -73
  1149. package/dist/ui/stores/transcript-scroll-store.test.js.map +0 -1
  1150. package/dist/ui/streaming-flush-bounce.test.d.ts +0 -2
  1151. package/dist/ui/streaming-flush-bounce.test.d.ts.map +0 -1
  1152. package/dist/ui/streaming-flush-bounce.test.js +0 -177
  1153. package/dist/ui/streaming-flush-bounce.test.js.map +0 -1
  1154. package/dist/ui/submit-boundary-gap.test.d.ts +0 -2
  1155. package/dist/ui/submit-boundary-gap.test.d.ts.map +0 -1
  1156. package/dist/ui/submit-boundary-gap.test.js +0 -180
  1157. package/dist/ui/submit-boundary-gap.test.js.map +0 -1
  1158. package/dist/ui/terminal-history-repaint.test.d.ts +0 -2
  1159. package/dist/ui/terminal-history-repaint.test.d.ts.map +0 -1
  1160. package/dist/ui/terminal-history-repaint.test.js +0 -73
  1161. package/dist/ui/terminal-history-repaint.test.js.map +0 -1
  1162. package/dist/ui/terminal-history-retry-dedup.test.d.ts +0 -2
  1163. package/dist/ui/terminal-history-retry-dedup.test.d.ts.map +0 -1
  1164. package/dist/ui/terminal-history-retry-dedup.test.js +0 -61
  1165. package/dist/ui/terminal-history-retry-dedup.test.js.map +0 -1
  1166. package/dist/ui/terminal-history.test.d.ts +0 -2
  1167. package/dist/ui/terminal-history.test.d.ts.map +0 -1
  1168. package/dist/ui/terminal-history.test.js +0 -557
  1169. package/dist/ui/terminal-history.test.js.map +0 -1
  1170. package/dist/ui/thinking-level-cycle.test.d.ts +0 -2
  1171. package/dist/ui/thinking-level-cycle.test.d.ts.map +0 -1
  1172. package/dist/ui/thinking-level-cycle.test.js +0 -45
  1173. package/dist/ui/thinking-level-cycle.test.js.map +0 -1
  1174. package/dist/ui/tool-group-summary.test.d.ts +0 -2
  1175. package/dist/ui/tool-group-summary.test.d.ts.map +0 -1
  1176. package/dist/ui/tool-group-summary.test.js +0 -79
  1177. package/dist/ui/tool-group-summary.test.js.map +0 -1
  1178. package/dist/ui/transcript/spacing.test.d.ts +0 -2
  1179. package/dist/ui/transcript/spacing.test.d.ts.map +0 -1
  1180. package/dist/ui/transcript/spacing.test.js +0 -191
  1181. package/dist/ui/transcript/spacing.test.js.map +0 -1
  1182. package/dist/ui/transcript/transcript-lines.test.d.ts +0 -2
  1183. package/dist/ui/transcript/transcript-lines.test.d.ts.map +0 -1
  1184. package/dist/ui/transcript/transcript-lines.test.js +0 -76
  1185. package/dist/ui/transcript/transcript-lines.test.js.map +0 -1
  1186. package/dist/ui/transcript-viewport-pinning.test.d.ts +0 -2
  1187. package/dist/ui/transcript-viewport-pinning.test.d.ts.map +0 -1
  1188. package/dist/ui/transcript-viewport-pinning.test.js +0 -148
  1189. package/dist/ui/transcript-viewport-pinning.test.js.map +0 -1
  1190. package/dist/ui/tui-history-parity.test.d.ts +0 -2
  1191. package/dist/ui/tui-history-parity.test.d.ts.map +0 -1
  1192. package/dist/ui/tui-history-parity.test.js +0 -388
  1193. package/dist/ui/tui-history-parity.test.js.map +0 -1
  1194. package/dist/ui/tui-simulation.test.d.ts +0 -2
  1195. package/dist/ui/tui-simulation.test.d.ts.map +0 -1
  1196. package/dist/ui/tui-simulation.test.js +0 -145
  1197. package/dist/ui/tui-simulation.test.js.map +0 -1
  1198. package/dist/ui/tui-terminal-recorder.test.d.ts +0 -2
  1199. package/dist/ui/tui-terminal-recorder.test.d.ts.map +0 -1
  1200. package/dist/ui/tui-terminal-recorder.test.js +0 -134
  1201. package/dist/ui/tui-terminal-recorder.test.js.map +0 -1
  1202. package/dist/ui/utils/assistant-stream-split.test.d.ts +0 -2
  1203. package/dist/ui/utils/assistant-stream-split.test.d.ts.map +0 -1
  1204. package/dist/ui/utils/assistant-stream-split.test.js +0 -74
  1205. package/dist/ui/utils/assistant-stream-split.test.js.map +0 -1
  1206. package/dist/ui/utils/markdown-renderer.test.d.ts +0 -2
  1207. package/dist/ui/utils/markdown-renderer.test.d.ts.map +0 -1
  1208. package/dist/ui/utils/markdown-renderer.test.js +0 -63
  1209. package/dist/ui/utils/markdown-renderer.test.js.map +0 -1
  1210. package/dist/ui/utils/table-text.test.d.ts +0 -2
  1211. package/dist/ui/utils/table-text.test.d.ts.map +0 -1
  1212. package/dist/ui/utils/table-text.test.js +0 -202
  1213. package/dist/ui/utils/table-text.test.js.map +0 -1
  1214. package/dist/ui/utils/terminal-graphics.test.d.ts +0 -2
  1215. package/dist/ui/utils/terminal-graphics.test.d.ts.map +0 -1
  1216. package/dist/ui/utils/terminal-graphics.test.js +0 -100
  1217. package/dist/ui/utils/terminal-graphics.test.js.map +0 -1
  1218. package/dist/ui/utils/terminal-input.test.d.ts +0 -2
  1219. package/dist/ui/utils/terminal-input.test.d.ts.map +0 -1
  1220. package/dist/ui/utils/terminal-input.test.js +0 -15
  1221. package/dist/ui/utils/terminal-input.test.js.map +0 -1
  1222. package/dist/utils/git.test.d.ts +0 -2
  1223. package/dist/utils/git.test.d.ts.map +0 -1
  1224. package/dist/utils/git.test.js +0 -36
  1225. package/dist/utils/git.test.js.map +0 -1
  1226. package/dist/utils/github.test.d.ts +0 -2
  1227. package/dist/utils/github.test.d.ts.map +0 -1
  1228. package/dist/utils/github.test.js +0 -23
  1229. package/dist/utils/github.test.js.map +0 -1
  1230. package/dist/utils/http-body.test.d.ts +0 -2
  1231. package/dist/utils/http-body.test.d.ts.map +0 -1
  1232. package/dist/utils/http-body.test.js +0 -68
  1233. package/dist/utils/http-body.test.js.map +0 -1
  1234. package/dist/utils/image.test.d.ts +0 -2
  1235. package/dist/utils/image.test.d.ts.map +0 -1
  1236. package/dist/utils/image.test.js +0 -139
  1237. package/dist/utils/image.test.js.map +0 -1
  1238. package/dist/utils/plan-steps.test.d.ts +0 -2
  1239. package/dist/utils/plan-steps.test.d.ts.map +0 -1
  1240. package/dist/utils/plan-steps.test.js +0 -159
  1241. package/dist/utils/plan-steps.test.js.map +0 -1
  1242. package/dist/utils/process.test.d.ts +0 -2
  1243. package/dist/utils/process.test.d.ts.map +0 -1
  1244. package/dist/utils/process.test.js +0 -42
  1245. package/dist/utils/process.test.js.map +0 -1
@@ -1,1096 +0,0 @@
1
- import fs from "node:fs/promises";
2
- import os from "node:os";
3
- import path from "node:path";
4
- import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
5
- import { MODELS } from "./model-registry.js";
6
- import { estimateConversationTokens } from "./compaction/token-estimator.js";
7
- import { useFakeHome } from "../test-support/fake-home.js";
8
- const shouldCompactMock = vi.hoisted(() => vi.fn());
9
- const compactMock = vi.hoisted(() => vi.fn());
10
- const agentLoopMock = vi.hoisted(() => vi.fn());
11
- vi.mock("./compaction/compactor.js", async () => {
12
- const actual = await vi.importActual("./compaction/compactor.js");
13
- return {
14
- ...actual,
15
- shouldCompact: shouldCompactMock,
16
- compact: compactMock,
17
- };
18
- });
19
- vi.mock("@prestyj/agent", async () => {
20
- const actual = await vi.importActual("@prestyj/agent");
21
- return {
22
- ...actual,
23
- agentLoop: agentLoopMock,
24
- };
25
- });
26
- vi.mock("./mcp/index.js", async () => {
27
- const actual = await vi.importActual("./mcp/index.js");
28
- return {
29
- ...actual,
30
- MCPClientManager: vi.fn(function MCPClientManagerMock() {
31
- return {
32
- connectAll: vi.fn(async () => []),
33
- dispose: vi.fn(async () => { }),
34
- };
35
- }),
36
- };
37
- });
38
- let restoreHome;
39
- let tmpHome;
40
- let tmpProject;
41
- async function writeJson(filePath, value) {
42
- await fs.mkdir(path.dirname(filePath), { recursive: true });
43
- await fs.writeFile(filePath, JSON.stringify(value, null, 2), "utf-8");
44
- }
45
- function compactionResult(messages, compacted = true, contextSelection) {
46
- return {
47
- messages,
48
- result: {
49
- compacted,
50
- ...(compacted ? {} : { reason: "too_few_messages" }),
51
- originalCount: compacted ? 6 : messages.length,
52
- newCount: messages.length,
53
- tokensBeforeEstimate: 180_000,
54
- tokensAfterEstimate: compacted ? 2_000 : 180_000,
55
- ...(contextSelection ? { contextSelection } : {}),
56
- },
57
- };
58
- }
59
- const providerModels = MODELS.filter((model, index, models) => models.findIndex((candidate) => candidate.provider === model.provider) === index).map((model) => ({ provider: model.provider, model: model.id }));
60
- beforeEach(async () => {
61
- tmpHome = await fs.mkdtemp(path.join(os.tmpdir(), "agent-session-home-"));
62
- tmpProject = await fs.mkdtemp(path.join(os.tmpdir(), "agent-session-project-"));
63
- restoreHome = useFakeHome(tmpHome);
64
- shouldCompactMock.mockReset();
65
- compactMock.mockReset();
66
- agentLoopMock.mockReset();
67
- const authProviders = [
68
- "anthropic",
69
- "openai",
70
- "sakana",
71
- "xai",
72
- "gemini",
73
- "moonshot",
74
- "glm",
75
- "minimax",
76
- "xiaomi",
77
- "xiaomi-credits",
78
- "deepseek",
79
- "openrouter",
80
- ];
81
- await writeJson(path.join(tmpHome, ".ezcoder", "auth.json"), Object.fromEntries(authProviders.map((provider) => [
82
- provider,
83
- {
84
- accessToken: `test-${provider}-token`,
85
- refreshToken: `test-${provider}-refresh`,
86
- expiresAt: Date.now() + 3_600_000,
87
- ...(provider === "openai" ? { accountId: "chatgpt-account" } : {}),
88
- },
89
- ])));
90
- await writeJson(path.join(tmpHome, ".ezcoder", "settings.json"), {
91
- autoCompact: true,
92
- compactThreshold: 0.1,
93
- });
94
- });
95
- afterEach(async () => {
96
- restoreHome?.();
97
- await fs.rm(tmpHome, { recursive: true, force: true });
98
- await fs.rm(tmpProject, { recursive: true, force: true });
99
- vi.clearAllMocks();
100
- });
101
- describe("AgentSession worker auto-compaction", () => {
102
- it("auto-compacts transient JSON-mode worker sessions before the agent loop runs", async () => {
103
- const compactedMessages = [
104
- { role: "system", content: "worker system prompt" },
105
- { role: "user", content: "[compacted worker context]\n\nDo worker task" },
106
- ];
107
- shouldCompactMock.mockReturnValue(true);
108
- compactMock.mockResolvedValue({
109
- messages: compactedMessages,
110
- result: {
111
- compacted: true,
112
- originalCount: 2,
113
- newCount: 2,
114
- tokensBeforeEstimate: 100_000,
115
- tokensAfterEstimate: 1_000,
116
- },
117
- });
118
- agentLoopMock.mockImplementation(async function* (messages) {
119
- messages.push({ role: "assistant", content: "worker done" });
120
- yield { type: "agent_done" };
121
- });
122
- const { AgentSession } = await import("./agent-session.js");
123
- const session = new AgentSession({
124
- provider: "anthropic",
125
- model: "claude-test",
126
- cwd: tmpProject,
127
- systemPrompt: "worker system prompt",
128
- transient: true,
129
- });
130
- await session.initialize();
131
- await session.setApprovedPlan("/tmp/approved-plan.md");
132
- await session.prompt("Do worker task");
133
- await session.dispose();
134
- expect(shouldCompactMock).toHaveBeenCalledWith(expect.arrayContaining([
135
- expect.objectContaining({ role: "user", content: "Do worker task" }),
136
- ]), expect.any(Number), 0.1, undefined);
137
- expect(compactMock).toHaveBeenCalledWith(expect.arrayContaining([
138
- expect.objectContaining({ role: "user", content: "Do worker task" }),
139
- ]), expect.objectContaining({
140
- provider: "anthropic",
141
- model: "claude-test",
142
- apiKey: "test-anthropic-token",
143
- targetTokens: 20_000,
144
- approvedPlanPath: "/tmp/approved-plan.md",
145
- }));
146
- expect(agentLoopMock).toHaveBeenCalledWith(expect.arrayContaining([
147
- { role: "user", content: "[compacted worker context]\n\nDo worker task" },
148
- ]), expect.objectContaining({ provider: "anthropic", model: "claude-test" }));
149
- }, 15_000);
150
- });
151
- describe("AgentSession stale tool-output pruning", () => {
152
- it("stubs superseded reads in-place during the pre-step transform", async () => {
153
- shouldCompactMock.mockReturnValue(false);
154
- let capturedMessages = [];
155
- agentLoopMock.mockImplementation(async function* (messages, options) {
156
- messages.push({
157
- role: "assistant",
158
- content: [
159
- { type: "tool_call", id: "old-read", name: "read", args: { file_path: "src/a.ts" } },
160
- ],
161
- }, {
162
- role: "tool",
163
- content: [{ type: "tool_result", toolCallId: "old-read", content: "x".repeat(150_000) }],
164
- }, { role: "user", content: "turn 2" }, {
165
- role: "assistant",
166
- content: [
167
- { type: "tool_call", id: "new-read", name: "read", args: { file_path: "src/a.ts" } },
168
- ],
169
- }, {
170
- role: "tool",
171
- content: [{ type: "tool_result", toolCallId: "new-read", content: "fresh" }],
172
- }, {
173
- role: "assistant",
174
- content: [{ type: "tool_call", id: "latest", name: "grep", args: { pattern: "x" } }],
175
- }, {
176
- role: "tool",
177
- content: [{ type: "tool_result", toolCallId: "latest", content: "latest evidence" }],
178
- }, { role: "user", content: "turn 3" });
179
- capturedMessages = await options.transformContext(messages, { pendingMessages: [] });
180
- yield { type: "agent_done" };
181
- });
182
- const { AgentSession } = await import("./agent-session.js");
183
- const session = new AgentSession({
184
- provider: "anthropic",
185
- model: "claude-test",
186
- cwd: tmpProject,
187
- systemPrompt: "system prompt",
188
- transient: true,
189
- });
190
- await session.initialize();
191
- await session.prompt("prune me");
192
- await session.dispose();
193
- const results = capturedMessages
194
- .filter((msg) => msg.role === "tool")
195
- .flatMap((msg) => (Array.isArray(msg.content) ? msg.content : []));
196
- const oldRead = results.find((r) => r.type === "tool_result" && r.toolCallId === "old-read");
197
- const newRead = results.find((r) => r.type === "tool_result" && r.toolCallId === "new-read");
198
- expect(oldRead?.content).toContain("superseded by a newer read");
199
- expect(newRead?.content).toBe("fresh");
200
- expect(compactMock).not.toHaveBeenCalled();
201
- });
202
- it("discards the turn's provider usage after a prune so freed tokens defer compaction", async () => {
203
- shouldCompactMock.mockReturnValue(false);
204
- agentLoopMock.mockImplementation(async function* (messages, options) {
205
- messages.push({
206
- role: "assistant",
207
- content: [
208
- { type: "tool_call", id: "old-read", name: "read", args: { file_path: "src/a.ts" } },
209
- ],
210
- }, {
211
- role: "tool",
212
- content: [{ type: "tool_result", toolCallId: "old-read", content: "x".repeat(150_000) }],
213
- }, { role: "user", content: "turn 2" }, {
214
- role: "assistant",
215
- content: [
216
- { type: "tool_call", id: "new-read", name: "read", args: { file_path: "src/a.ts" } },
217
- ],
218
- }, {
219
- role: "tool",
220
- content: [{ type: "tool_result", toolCallId: "new-read", content: "fresh" }],
221
- }, {
222
- role: "assistant",
223
- content: [{ type: "tool_call", id: "latest", name: "grep", args: { pattern: "x" } }],
224
- }, {
225
- role: "tool",
226
- content: [{ type: "tool_result", toolCallId: "latest", content: "latest evidence" }],
227
- }, { role: "user", content: "turn 3" });
228
- // Usage counted the soon-to-be-pruned 150k-char read. After the prune
229
- // it must NOT reach shouldCompact — estimation on the pruned history
230
- // takes over instead.
231
- await options.transformContext(messages, {
232
- usage: { inputTokens: 180_000, outputTokens: 500 },
233
- pendingMessages: [],
234
- });
235
- yield { type: "agent_done" };
236
- });
237
- const { AgentSession } = await import("./agent-session.js");
238
- const session = new AgentSession({
239
- provider: "anthropic",
240
- model: "claude-test",
241
- cwd: tmpProject,
242
- systemPrompt: "system prompt",
243
- transient: true,
244
- });
245
- await session.initialize();
246
- await session.prompt("prune usage fallback");
247
- await session.dispose();
248
- // The transform after the in-loop mutation is the last shouldCompact call;
249
- // its actualTokens argument must be an estimate of the pruned history,
250
- // far below the stale 180k usage figure.
251
- const lastCall = shouldCompactMock.mock.calls.at(-1);
252
- const actualTokens = lastCall[3];
253
- expect(actualTokens).toBeLessThan(50_000);
254
- });
255
- });
256
- describe("AgentSession overflow recovery", () => {
257
- // Regression: the desktop app drives the loop through AgentSession (not the
258
- // TUI's useContextCompaction hook), and AgentSession never passed
259
- // `transformContext` — so a provider `request_too_large` / context-overflow
260
- // (the loop's force-compact path) had NO auto recovery and surfaced straight
261
- // to the user. This proves the loop's { force: true } call now triggers a
262
- // real compaction and hands the shrunken history back for retry.
263
- it("force-compacts and returns the shrunken history when the loop reports overflow", async () => {
264
- // Pre-turn compaction disabled so we isolate the overflow force path.
265
- shouldCompactMock.mockReturnValue(false);
266
- const compactedMessages = [
267
- { role: "system", content: "system prompt" },
268
- { role: "user", content: "[compacted]" },
269
- ];
270
- compactMock.mockResolvedValue({
271
- messages: compactedMessages,
272
- result: {
273
- compacted: true,
274
- originalCount: 6,
275
- newCount: 2,
276
- tokensBeforeEstimate: 500_000,
277
- tokensAfterEstimate: 2_000,
278
- },
279
- });
280
- let forceResult;
281
- agentLoopMock.mockImplementation(async function* (messages, options) {
282
- // Non-force pre-call invocation must pass through untouched.
283
- const passthrough = await options.transformContext(messages, { pendingMessages: [] });
284
- expect(passthrough).toBe(messages);
285
- expect(compactMock).not.toHaveBeenCalled();
286
- // Force invocation (overflow) must compact and return the smaller array.
287
- forceResult = await options.transformContext(messages, {
288
- force: true,
289
- pendingMessages: [],
290
- });
291
- yield { type: "agent_done" };
292
- });
293
- const { AgentSession } = await import("./agent-session.js");
294
- const session = new AgentSession({
295
- provider: "anthropic",
296
- model: "claude-test",
297
- cwd: tmpProject,
298
- systemPrompt: "system prompt",
299
- transient: true,
300
- });
301
- await session.initialize();
302
- await session.prompt("do the thing");
303
- await session.dispose();
304
- expect(compactMock).toHaveBeenCalledTimes(1);
305
- expect(forceResult).toEqual(compactedMessages);
306
- });
307
- });
308
- describe("AgentSession mid-turn compaction", () => {
309
- it("compacts non-forced in-flight history exactly at the configured 80% boundary", async () => {
310
- await writeJson(path.join(tmpHome, ".ezcoder", "settings.json"), {
311
- autoCompact: true,
312
- compactThreshold: 0.8,
313
- });
314
- const pendingMessage = {
315
- role: "tool",
316
- content: [
317
- {
318
- type: "tool_result",
319
- toolCallId: "t1",
320
- content: "pending tool output ".repeat(8),
321
- },
322
- ],
323
- };
324
- const usage = {
325
- inputTokens: 159_900,
326
- cacheRead: 30,
327
- cacheWrite: 20,
328
- outputTokens: 40,
329
- };
330
- shouldCompactMock.mockImplementation((_messages, contextWindow, threshold, actualTokens) => actualTokens !== undefined && actualTokens >= Math.ceil(contextWindow * threshold));
331
- const compactedMessages = [
332
- { role: "system", content: "system prompt" },
333
- { role: "user", content: "[compacted in-flight history]" },
334
- ];
335
- compactMock.mockResolvedValue(compactionResult(compactedMessages));
336
- let transformed;
337
- agentLoopMock.mockImplementation(async function* (messages, options) {
338
- messages.push({
339
- role: "assistant",
340
- content: [{ type: "tool_call", id: "t1", name: "read", args: {} }],
341
- });
342
- messages.push(pendingMessage);
343
- transformed = await options.transformContext(messages, {
344
- usage,
345
- pendingMessages: [pendingMessage],
346
- });
347
- yield { type: "agent_done" };
348
- });
349
- const { AgentSession } = await import("./agent-session.js");
350
- const session = new AgentSession({
351
- provider: "anthropic",
352
- model: "claude-test",
353
- cwd: tmpProject,
354
- systemPrompt: "system prompt",
355
- transient: true,
356
- });
357
- await session.initialize();
358
- await session.prompt("run a tool loop");
359
- await session.dispose();
360
- // Computed after the run: the anchored usage sample calibrates the token
361
- // estimator, so the pending-message estimate must use the same calibrated
362
- // ratio the transform used when it called shouldCompact.
363
- const expectedActiveTokens = usage.inputTokens +
364
- usage.cacheRead +
365
- usage.cacheWrite +
366
- usage.outputTokens +
367
- estimateConversationTokens([pendingMessage]);
368
- expect(expectedActiveTokens).toBeGreaterThanOrEqual(160_000);
369
- expect(transformed).toEqual(compactedMessages);
370
- expect(shouldCompactMock).toHaveBeenCalledWith(expect.any(Array), 200_000, 0.8, expectedActiveTokens);
371
- expect(compactMock.mock.calls.at(-1)?.[0]).toContainEqual(pendingMessage);
372
- });
373
- it("reuses authoritative usage for the first context check of the next prompt", async () => {
374
- const usage = { inputTokens: 120_000, outputTokens: 100 };
375
- shouldCompactMock.mockImplementation((_messages, contextWindow, threshold, actualTokens) => actualTokens !== undefined && actualTokens >= Math.ceil(contextWindow * threshold));
376
- compactMock.mockResolvedValue(compactionResult([
377
- { role: "system", content: "system prompt" },
378
- { role: "user", content: "[compacted across prompts]" },
379
- ]));
380
- let run = 0;
381
- agentLoopMock.mockImplementation(async function* (messages, options) {
382
- run += 1;
383
- await options.transformContext(messages, { pendingMessages: [] });
384
- if (run === 1) {
385
- messages.push({ role: "assistant", content: "first response" });
386
- yield {
387
- type: "turn_end",
388
- turn: 1,
389
- stopReason: "end_turn",
390
- usage,
391
- timing: {
392
- startedAt: 1,
393
- completedAt: 2,
394
- providerDurationMs: 1,
395
- },
396
- };
397
- }
398
- yield { type: "agent_done" };
399
- });
400
- const { AgentSession } = await import("./agent-session.js");
401
- const session = new AgentSession({
402
- provider: "anthropic",
403
- model: "claude-fable-5",
404
- cwd: tmpProject,
405
- systemPrompt: "system prompt",
406
- transient: true,
407
- });
408
- await session.initialize();
409
- await session.prompt("first prompt");
410
- await session.prompt("second prompt");
411
- await session.dispose();
412
- expect(compactMock).toHaveBeenCalledTimes(1);
413
- expect(shouldCompactMock.mock.calls.some((call) => typeof call[3] === "number" && call[3] >= usage.inputTokens + usage.outputTokens)).toBe(true);
414
- });
415
- it("clears authoritative usage after compaction and does not recompact unchanged context", async () => {
416
- await writeJson(path.join(tmpHome, ".ezcoder", "settings.json"), {
417
- autoCompact: true,
418
- compactThreshold: 0.85,
419
- });
420
- const trigger = 170_000;
421
- let hasCompacted = false;
422
- const activeTokensAfterCompaction = [];
423
- shouldCompactMock.mockImplementation((_messages, _contextWindow, _threshold, actualTokens) => {
424
- if (hasCompacted && actualTokens !== undefined)
425
- activeTokensAfterCompaction.push(actualTokens);
426
- return actualTokens !== undefined && actualTokens >= trigger;
427
- });
428
- compactMock.mockImplementation(async () => {
429
- hasCompacted = true;
430
- return compactionResult([
431
- { role: "system", content: "system prompt" },
432
- { role: "user", content: "[compacted below target]" },
433
- ]);
434
- });
435
- let run = 0;
436
- agentLoopMock.mockImplementation(async function* (messages, options) {
437
- run += 1;
438
- await options.transformContext(messages, { pendingMessages: [] });
439
- messages.push({ role: "assistant", content: `response ${run}` });
440
- if (run === 1) {
441
- yield {
442
- type: "turn_end",
443
- turn: 1,
444
- stopReason: "end_turn",
445
- usage: { inputTokens: 180_000, outputTokens: 1_000 },
446
- timing: { startedAt: 1, completedAt: 2, providerDurationMs: 1 },
447
- };
448
- }
449
- yield { type: "agent_done" };
450
- });
451
- const { AgentSession } = await import("./agent-session.js");
452
- const session = new AgentSession({
453
- provider: "anthropic",
454
- model: "claude-fable-5",
455
- cwd: tmpProject,
456
- systemPrompt: "system prompt",
457
- transient: true,
458
- });
459
- await session.initialize();
460
- await session.prompt("first prompt");
461
- await session.prompt("second prompt triggers compaction");
462
- await session.prompt("third prompt stays below target");
463
- await session.dispose();
464
- expect(compactMock).toHaveBeenCalledTimes(1);
465
- expect(activeTokensAfterCompaction.length).toBeGreaterThan(0);
466
- expect(activeTokensAfterCompaction.every((tokens) => tokens < trigger)).toBe(true);
467
- });
468
- it.each(providerModels)("$provider uses the same normalized usage formula", async ({ provider, model }) => {
469
- await writeJson(path.join(tmpHome, ".ezcoder", "settings.json"), {
470
- autoCompact: true,
471
- compactThreshold: 0.8,
472
- });
473
- shouldCompactMock.mockReturnValue(false);
474
- const usage = {
475
- inputTokens: 100,
476
- cacheRead: 30,
477
- cacheWrite: 20,
478
- outputTokens: 40,
479
- };
480
- const expectedActiveTokens = 190;
481
- agentLoopMock.mockImplementation(async function* (messages, options) {
482
- await options.transformContext(messages, {
483
- usage,
484
- pendingMessages: [],
485
- });
486
- yield { type: "agent_done" };
487
- });
488
- const { AgentSession } = await import("./agent-session.js");
489
- const session = new AgentSession({
490
- provider: provider,
491
- model,
492
- cwd: tmpProject,
493
- systemPrompt: "system prompt",
494
- transient: true,
495
- });
496
- await session.initialize();
497
- await session.prompt("test normalized usage");
498
- await session.dispose();
499
- expect(shouldCompactMock.mock.calls.some((call) => call[3] === expectedActiveTokens)).toBe(true);
500
- }, 15_000);
501
- it("honors a custom threshold during a non-forced transform", async () => {
502
- await writeJson(path.join(tmpHome, ".ezcoder", "settings.json"), {
503
- autoCompact: true,
504
- compactThreshold: 0.65,
505
- });
506
- shouldCompactMock.mockReturnValue(false);
507
- const usage = { inputTokens: 1_000, outputTokens: 100 };
508
- agentLoopMock.mockImplementation(async function* (messages, options) {
509
- await options.transformContext(messages, { usage, pendingMessages: [] });
510
- yield { type: "agent_done" };
511
- });
512
- const { AgentSession } = await import("./agent-session.js");
513
- const session = new AgentSession({
514
- provider: "anthropic",
515
- model: "claude-test",
516
- cwd: tmpProject,
517
- systemPrompt: "system prompt",
518
- transient: true,
519
- });
520
- await session.initialize();
521
- await session.prompt("custom threshold");
522
- await session.dispose();
523
- expect(shouldCompactMock).toHaveBeenCalledWith(expect.any(Array), 200_000, 0.65, 1_100);
524
- });
525
- it("honors autoCompact false for non-forced calls but force bypasses settings and cooldown", async () => {
526
- await writeJson(path.join(tmpHome, ".ezcoder", "settings.json"), {
527
- autoCompact: false,
528
- compactThreshold: 0.8,
529
- });
530
- const compactedMessages = [
531
- { role: "system", content: "system prompt" },
532
- { role: "user", content: "[forced compaction]" },
533
- ];
534
- compactMock
535
- .mockResolvedValueOnce(compactionResult([
536
- { role: "system", content: "system prompt" },
537
- { role: "user", content: "too little history" },
538
- { role: "assistant", content: "reply" },
539
- ], false))
540
- .mockResolvedValueOnce(compactionResult(compactedMessages));
541
- let nonForcedResult;
542
- let forcedResult;
543
- agentLoopMock.mockImplementation(async function* (messages, options) {
544
- nonForcedResult = await options.transformContext(messages, { pendingMessages: [] });
545
- await options.transformContext(messages, { force: true, pendingMessages: [] });
546
- forcedResult = await options.transformContext(messages, {
547
- force: true,
548
- pendingMessages: [],
549
- });
550
- yield { type: "agent_done" };
551
- });
552
- const { AgentSession } = await import("./agent-session.js");
553
- const session = new AgentSession({
554
- provider: "anthropic",
555
- model: "claude-test",
556
- cwd: tmpProject,
557
- systemPrompt: "system prompt",
558
- transient: true,
559
- });
560
- await session.initialize();
561
- await session.prompt("force despite settings");
562
- await session.dispose();
563
- expect(nonForcedResult).toBeDefined();
564
- expect(shouldCompactMock).not.toHaveBeenCalled();
565
- expect(compactMock).toHaveBeenCalledTimes(2);
566
- expect(forcedResult).toEqual(compactedMessages);
567
- });
568
- it("cools down after a non-forced no-op instead of retrying every tool step", async () => {
569
- shouldCompactMock.mockImplementation((_messages, _contextWindow, _threshold, actualTokens) => actualTokens !== undefined);
570
- compactMock.mockImplementation(async (messages) => compactionResult([...messages], false));
571
- agentLoopMock.mockImplementation(async function* (messages, options) {
572
- const transformOptions = {
573
- usage: { inputTokens: 180_000, outputTokens: 1_000 },
574
- pendingMessages: [],
575
- };
576
- await options.transformContext(messages, transformOptions);
577
- await options.transformContext(messages, transformOptions);
578
- yield { type: "agent_done" };
579
- });
580
- const { AgentSession } = await import("./agent-session.js");
581
- const session = new AgentSession({
582
- provider: "anthropic",
583
- model: "claude-test",
584
- cwd: tmpProject,
585
- systemPrompt: "system prompt",
586
- transient: true,
587
- });
588
- await session.initialize();
589
- await session.prompt("no-op cooldown");
590
- await session.dispose();
591
- expect(compactMock).toHaveBeenCalledTimes(1);
592
- });
593
- it("cools down after a failed proactive summary", async () => {
594
- shouldCompactMock.mockImplementation((_messages, _contextWindow, _threshold, actualTokens) => actualTokens !== undefined);
595
- compactMock.mockRejectedValue(new Error("summary unavailable"));
596
- agentLoopMock.mockImplementation(async function* (messages, options) {
597
- const transformOptions = {
598
- usage: { inputTokens: 180_000, outputTokens: 1_000 },
599
- pendingMessages: [],
600
- };
601
- await options.transformContext(messages, transformOptions);
602
- await options.transformContext(messages, transformOptions);
603
- yield { type: "agent_done" };
604
- });
605
- const { AgentSession } = await import("./agent-session.js");
606
- const session = new AgentSession({
607
- provider: "anthropic",
608
- model: "claude-test",
609
- cwd: tmpProject,
610
- systemPrompt: "system prompt",
611
- transient: true,
612
- });
613
- await session.initialize();
614
- await session.prompt("failure cooldown");
615
- await session.dispose();
616
- expect(compactMock).toHaveBeenCalledTimes(1);
617
- });
618
- it("continues the run and cools down across prompts after pre-run compaction fails", async () => {
619
- shouldCompactMock.mockReturnValue(true);
620
- compactMock.mockRejectedValue(new Error("summary unavailable"));
621
- agentLoopMock.mockImplementation(async function* () {
622
- yield { type: "agent_done" };
623
- });
624
- const { AgentSession } = await import("./agent-session.js");
625
- const session = new AgentSession({
626
- provider: "anthropic",
627
- model: "claude-test",
628
- cwd: tmpProject,
629
- systemPrompt: "system prompt",
630
- transient: true,
631
- });
632
- await session.initialize();
633
- await session.prompt("first prompt");
634
- await session.prompt("second prompt");
635
- await session.dispose();
636
- expect(compactMock).toHaveBeenCalledTimes(1);
637
- expect(agentLoopMock).toHaveBeenCalledTimes(2);
638
- });
639
- it("cools down across prompts after pre-run compaction is a no-op", async () => {
640
- shouldCompactMock.mockReturnValue(true);
641
- compactMock.mockImplementation(async (messages) => compactionResult([...messages], false));
642
- agentLoopMock.mockImplementation(async function* () {
643
- yield { type: "agent_done" };
644
- });
645
- const { AgentSession } = await import("./agent-session.js");
646
- const session = new AgentSession({
647
- provider: "anthropic",
648
- model: "claude-test",
649
- cwd: tmpProject,
650
- systemPrompt: "system prompt",
651
- transient: true,
652
- });
653
- await session.initialize();
654
- await session.prompt("first prompt");
655
- await session.prompt("second prompt");
656
- await session.dispose();
657
- expect(compactMock).toHaveBeenCalledTimes(1);
658
- expect(agentLoopMock).toHaveBeenCalledTimes(2);
659
- });
660
- });
661
- /** Every .jsonl under the ezcoder session store — must stay empty for
662
- * transient sessions (Nolan chat/autopilot and subagent spawns). */
663
- async function listSessionFiles() {
664
- const sessionsDir = path.join(tmpHome, ".ezcoder", "sessions");
665
- const out = [];
666
- const walk = async (dir) => {
667
- let entries;
668
- try {
669
- entries = await fs.readdir(dir, { withFileTypes: true });
670
- }
671
- catch {
672
- return;
673
- }
674
- for (const e of entries) {
675
- const full = path.join(dir, e.name);
676
- if (e.isDirectory())
677
- await walk(full);
678
- else if (e.name.endsWith(".jsonl"))
679
- out.push(full);
680
- }
681
- };
682
- await walk(sessionsDir);
683
- return out;
684
- }
685
- describe("transient sessions never leak to the session store", () => {
686
- // Regression: the Nolan autopilot session (transient: true) was leaking one
687
- // 3-line "## Who you are … Nolan Grout" session file per review cycle into the
688
- // project's session list — via compact() assigning a real sessionPath and
689
- // via newSession() (autopilot's per-cycle resetReviewer) creating a file
690
- // unconditionally.
691
- it("compact() keeps a transient session fully in memory — no session file", async () => {
692
- shouldCompactMock.mockReturnValue(true);
693
- compactMock.mockResolvedValue({
694
- messages: [
695
- { role: "system", content: "nolan system prompt" },
696
- { role: "user", content: "[compacted]" },
697
- ],
698
- result: {
699
- compacted: true,
700
- originalCount: 2,
701
- newCount: 2,
702
- tokensBeforeEstimate: 100_000,
703
- tokensAfterEstimate: 1_000,
704
- },
705
- });
706
- agentLoopMock.mockImplementation(async function* (messages) {
707
- messages.push({ role: "assistant", content: "IGNORE" });
708
- yield { type: "agent_done" };
709
- });
710
- const { AgentSession } = await import("./agent-session.js");
711
- const session = new AgentSession({
712
- provider: "anthropic",
713
- model: "claude-test",
714
- cwd: tmpProject,
715
- systemPrompt: "nolan system prompt",
716
- transient: true,
717
- });
718
- await session.initialize();
719
- await session.prompt("review this turn");
720
- // Post-compaction persistence paths must all stay no-ops.
721
- await session.persistNolanTurn("q", "a");
722
- await session.persistAutopilotMarker("done");
723
- await session.dispose();
724
- expect(compactMock).toHaveBeenCalled();
725
- expect(await listSessionFiles()).toEqual([]);
726
- });
727
- it("newSession() on a transient session creates no file and detaches the DAG leaf", async () => {
728
- shouldCompactMock.mockReturnValue(false);
729
- agentLoopMock.mockImplementation(async function* (messages) {
730
- messages.push({ role: "assistant", content: "ALL_CLEAR" });
731
- yield { type: "agent_done" };
732
- });
733
- const { AgentSession } = await import("./agent-session.js");
734
- const session = new AgentSession({
735
- provider: "anthropic",
736
- model: "claude-test",
737
- cwd: tmpProject,
738
- systemPrompt: "nolan system prompt",
739
- transient: true,
740
- });
741
- await session.initialize();
742
- await session.prompt("cycle 1");
743
- // Autopilot's per-cycle resetReviewer path.
744
- await session.newSession();
745
- await session.prompt("cycle 2");
746
- await session.dispose();
747
- expect(await listSessionFiles()).toEqual([]);
748
- });
749
- });
750
- describe("AgentSession compaction events", () => {
751
- it("marks a skipped compaction as unsuccessful", async () => {
752
- const { AgentSession } = await import("./agent-session.js");
753
- const session = new AgentSession({
754
- provider: "anthropic",
755
- model: "claude-test",
756
- cwd: tmpProject,
757
- systemPrompt: "system prompt",
758
- transient: true,
759
- });
760
- await session.initialize();
761
- compactMock.mockResolvedValue(compactionResult([...session.getMessages()], false));
762
- const events = [];
763
- session.eventBus.on("compaction_end", (event) => events.push(event));
764
- await session.compact({ accessToken: "token" });
765
- expect(events).toEqual([{ compacted: false, originalCount: 1, newCount: 1 }]);
766
- await session.dispose();
767
- });
768
- it("emits query-selection token statistics when the compactor ran retrieval", async () => {
769
- const { AgentSession } = await import("./agent-session.js");
770
- const session = new AgentSession({
771
- provider: "anthropic",
772
- model: "claude-test",
773
- cwd: tmpProject,
774
- systemPrompt: "system prompt",
775
- transient: true,
776
- });
777
- await session.initialize();
778
- compactMock.mockResolvedValue(compactionResult([...session.getMessages()], false, {
779
- strategy: "query_aware",
780
- selectedMessages: 8,
781
- selectedTokens: 1200,
782
- droppedMessages: 4,
783
- queryTerms: 3,
784
- }));
785
- const events = [];
786
- session.eventBus.on("compaction_end", (event) => events.push(event));
787
- await session.compact({ accessToken: "token" });
788
- expect(events).toEqual([
789
- {
790
- compacted: false,
791
- originalCount: 1,
792
- newCount: 1,
793
- selectionStrategy: "query_aware",
794
- selectedMessages: 8,
795
- selectedTokens: 1200,
796
- droppedMessages: 4,
797
- queryTerms: 3,
798
- },
799
- ]);
800
- await session.dispose();
801
- });
802
- });
803
- describe("AgentSession.getContextUsage", () => {
804
- it("reports the model window and drops after a compaction", async () => {
805
- const { AgentSession } = await import("./agent-session.js");
806
- const model = MODELS[0];
807
- const session = new AgentSession({
808
- provider: model.provider,
809
- model: model.id,
810
- cwd: tmpProject,
811
- systemPrompt: "system prompt",
812
- transient: true,
813
- });
814
- await session.initialize();
815
- const messages = session.getMessages();
816
- for (let i = 0; i < 40; i += 1) {
817
- messages.push({ role: "user", content: "a fairly long user message ".repeat(20) });
818
- }
819
- const before = session.getContextUsage();
820
- expect(before.size).toBeGreaterThan(0);
821
- expect(before.used).toBeGreaterThan(0);
822
- // No authoritative pricing exists yet, so cost is omitted rather than
823
- // reported as zero — a client showing $0.00 would be stating a fact we
824
- // do not have.
825
- expect(before.costUsd).toBeUndefined();
826
- compactMock.mockResolvedValue(compactionResult([messages[0]], true));
827
- await session.compact({ accessToken: "test-token" });
828
- const after = session.getContextUsage();
829
- // Clients detect compaction from exactly this: used falls, size does not.
830
- expect(after.used).toBeLessThan(before.used);
831
- expect(after.size).toBe(before.size);
832
- await session.dispose();
833
- });
834
- });
835
- describe("load-time auto-compaction deferral (deferLoadCompaction)", () => {
836
- // Regression: resuming an over-context session ran a summary LLM call (30s
837
- // timeout) inline in loadExistingSession — inside initialize(), which the
838
- // ezcoder-app sidecar's readiness (waitForReady → the whole webview) is gated on.
839
- // A slow/hanging summary call froze the window for the full timeout. With
840
- // deferLoadCompaction the resume returns immediately and runLoop()'s
841
- // pre-run auto-compaction handles it on the first prompt.
842
- /** Create + persist a real session file, returning its path. */
843
- async function persistSession() {
844
- shouldCompactMock.mockReturnValue(false);
845
- agentLoopMock.mockImplementation(async function* (messages) {
846
- messages.push({ role: "assistant", content: "first reply" });
847
- yield { type: "agent_done" };
848
- });
849
- const { AgentSession } = await import("./agent-session.js");
850
- const session = new AgentSession({
851
- provider: "anthropic",
852
- model: "claude-test",
853
- cwd: tmpProject,
854
- systemPrompt: "system prompt",
855
- });
856
- await session.initialize();
857
- await session.prompt("hello");
858
- await session.dispose();
859
- const files = await listSessionFiles();
860
- expect(files.length).toBeGreaterThan(0);
861
- return files[0];
862
- }
863
- const compactedResult = {
864
- messages: [
865
- { role: "system", content: "system prompt" },
866
- { role: "user", content: "[compacted]" },
867
- ],
868
- result: {
869
- compacted: true,
870
- originalCount: 3,
871
- newCount: 2,
872
- tokensBeforeEstimate: 500_000,
873
- tokensAfterEstimate: 2_000,
874
- },
875
- };
876
- it("defers compaction out of initialize() and runs it on the first prompt", async () => {
877
- const sessionPath = await persistSession();
878
- shouldCompactMock.mockReturnValue(true);
879
- compactMock.mockResolvedValue(compactedResult);
880
- agentLoopMock.mockImplementation(async function* (messages) {
881
- messages.push({ role: "assistant", content: "resumed reply" });
882
- yield { type: "agent_done" };
883
- });
884
- const { AgentSession } = await import("./agent-session.js");
885
- const resumed = new AgentSession({
886
- provider: "anthropic",
887
- model: "claude-test",
888
- cwd: tmpProject,
889
- systemPrompt: "system prompt",
890
- sessionId: sessionPath,
891
- deferLoadCompaction: true,
892
- });
893
- await resumed.initialize();
894
- // Readiness path must NOT have paid for a summary LLM call.
895
- expect(compactMock).not.toHaveBeenCalled();
896
- // First prompt triggers runLoop()'s existing pre-run auto-compaction.
897
- await resumed.prompt("continue");
898
- expect(compactMock).toHaveBeenCalledTimes(1);
899
- await resumed.dispose();
900
- });
901
- it("coordinates simultaneous compactions and adopts the single checkpoint", async () => {
902
- const sessionPath = await persistSession();
903
- shouldCompactMock.mockReturnValue(true);
904
- compactMock.mockImplementation(async () => {
905
- await new Promise((resolve) => setTimeout(resolve, 25));
906
- return compactedResult;
907
- });
908
- const { AgentSession } = await import("./agent-session.js");
909
- const first = new AgentSession({
910
- provider: "anthropic",
911
- model: "claude-test",
912
- cwd: tmpProject,
913
- systemPrompt: "system prompt",
914
- sessionId: sessionPath,
915
- deferLoadCompaction: true,
916
- });
917
- const second = new AgentSession({
918
- provider: "anthropic",
919
- model: "claude-test",
920
- cwd: tmpProject,
921
- systemPrompt: "system prompt",
922
- sessionId: sessionPath,
923
- deferLoadCompaction: true,
924
- });
925
- await Promise.all([first.initialize(), second.initialize()]);
926
- const credentials = { accessToken: "test-token" };
927
- await Promise.all([
928
- first.compact(credentials, "automatic"),
929
- second.compact(credentials, "automatic"),
930
- ]);
931
- expect(compactMock).toHaveBeenCalledTimes(1);
932
- expect(first.getState().sessionPath).toBe(second.getState().sessionPath);
933
- expect(first.getState().sessionPath).not.toBe(sessionPath);
934
- await Promise.all([first.dispose(), second.dispose()]);
935
- });
936
- it("rebases stale compaction onto a divergent canonical checkpoint", async () => {
937
- const sessionPath = await persistSession();
938
- shouldCompactMock.mockReturnValue(false);
939
- agentLoopMock.mockImplementation(async function* (messages) {
940
- messages.push({ role: "assistant", content: "canonical reply" });
941
- yield { type: "agent_done" };
942
- });
943
- compactMock.mockImplementation(async (messages) => {
944
- const hasCanonicalProgress = messages.some((message) => typeof message.content === "string" && message.content.includes("canonical progress"));
945
- return {
946
- ...compactedResult,
947
- messages: [
948
- { role: "system", content: "system prompt" },
949
- {
950
- role: "user",
951
- content: hasCanonicalProgress ? "[compacted canonical progress]" : "[compacted stale]",
952
- },
953
- ],
954
- };
955
- });
956
- const { AgentSession } = await import("./agent-session.js");
957
- const creator = new AgentSession({
958
- provider: "anthropic",
959
- model: "claude-test",
960
- cwd: tmpProject,
961
- systemPrompt: "system prompt",
962
- sessionId: sessionPath,
963
- deferLoadCompaction: true,
964
- });
965
- const stale = new AgentSession({
966
- provider: "anthropic",
967
- model: "claude-test",
968
- cwd: tmpProject,
969
- systemPrompt: "system prompt",
970
- sessionId: sessionPath,
971
- deferLoadCompaction: true,
972
- });
973
- await Promise.all([creator.initialize(), stale.initialize()]);
974
- await creator.prompt("canonical progress");
975
- shouldCompactMock.mockReturnValue(true);
976
- await creator.compact({ accessToken: "test-anthropic-token" }, "automatic");
977
- await stale.compact({ accessToken: "test-anthropic-token" }, "automatic");
978
- const staleCompactionInput = compactMock.mock.calls[1]?.[0];
979
- expect(staleCompactionInput).toEqual(expect.arrayContaining([
980
- expect.objectContaining({ content: "[compacted canonical progress]" }),
981
- ]));
982
- expect(stale.getMessages()).toEqual(expect.arrayContaining([
983
- expect.objectContaining({ content: "[compacted canonical progress]" }),
984
- ]));
985
- await Promise.all([creator.dispose(), stale.dispose()]);
986
- });
987
- it("deduplicates unchanged no-op attempts but lets manual compaction retry", async () => {
988
- const sessionPath = await persistSession();
989
- shouldCompactMock.mockReturnValue(true);
990
- compactMock.mockImplementation(async (messages) => compactionResult([...messages], false));
991
- const { AgentSession } = await import("./agent-session.js");
992
- const session = new AgentSession({
993
- provider: "anthropic",
994
- model: "claude-test",
995
- cwd: tmpProject,
996
- systemPrompt: "system prompt",
997
- sessionId: sessionPath,
998
- deferLoadCompaction: true,
999
- });
1000
- await session.initialize();
1001
- const credentials = { accessToken: "test-token" };
1002
- await session.compact(credentials, "automatic");
1003
- await session.compact(credentials, "automatic");
1004
- expect(compactMock).toHaveBeenCalledTimes(1);
1005
- await session.compact(credentials, "manual");
1006
- expect(compactMock).toHaveBeenCalledTimes(2);
1007
- expect(session.getState().sessionPath).toBe(sessionPath);
1008
- await session.dispose();
1009
- });
1010
- it("resolves a stale below-threshold checkpoint path before loading history", async () => {
1011
- const sessionPath = await persistSession();
1012
- shouldCompactMock.mockReturnValue(true);
1013
- compactMock.mockResolvedValue(compactedResult);
1014
- const { AgentSession } = await import("./agent-session.js");
1015
- const creator = new AgentSession({
1016
- provider: "anthropic",
1017
- model: "claude-test",
1018
- cwd: tmpProject,
1019
- systemPrompt: "system prompt",
1020
- sessionId: sessionPath,
1021
- deferLoadCompaction: true,
1022
- });
1023
- await creator.initialize();
1024
- await creator.compact({ accessToken: "test-anthropic-token" }, "automatic");
1025
- const checkpointPath = creator.getState().sessionPath;
1026
- await creator.dispose();
1027
- shouldCompactMock.mockReturnValue(false);
1028
- const resumed = new AgentSession({
1029
- provider: "anthropic",
1030
- model: "claude-test",
1031
- cwd: tmpProject,
1032
- systemPrompt: "system prompt",
1033
- sessionId: sessionPath,
1034
- deferLoadCompaction: true,
1035
- });
1036
- await resumed.initialize();
1037
- expect(resumed.getState().sessionPath).toBe(checkpointPath);
1038
- expect(resumed.getMessages()).toEqual(expect.arrayContaining([expect.objectContaining({ content: "[compacted]" })]));
1039
- expect(compactMock).toHaveBeenCalledTimes(1);
1040
- await resumed.dispose();
1041
- });
1042
- it("adopts a checkpoint created after deferred load before persisting the prompt", async () => {
1043
- const sessionPath = await persistSession();
1044
- shouldCompactMock.mockReturnValue(true);
1045
- compactMock.mockResolvedValue(compactedResult);
1046
- agentLoopMock.mockImplementation(async function* () {
1047
- yield { type: "agent_done" };
1048
- });
1049
- const { AgentSession } = await import("./agent-session.js");
1050
- const creator = new AgentSession({
1051
- provider: "anthropic",
1052
- model: "claude-test",
1053
- cwd: tmpProject,
1054
- systemPrompt: "system prompt",
1055
- sessionId: sessionPath,
1056
- deferLoadCompaction: true,
1057
- });
1058
- const follower = new AgentSession({
1059
- provider: "anthropic",
1060
- model: "claude-test",
1061
- cwd: tmpProject,
1062
- systemPrompt: "system prompt",
1063
- sessionId: sessionPath,
1064
- deferLoadCompaction: true,
1065
- });
1066
- await Promise.all([creator.initialize(), follower.initialize()]);
1067
- await creator.compact({ accessToken: "test-token" }, "automatic");
1068
- const checkpointPath = creator.getState().sessionPath;
1069
- shouldCompactMock.mockReturnValue(false);
1070
- await follower.prompt("continue from the shared checkpoint");
1071
- expect(compactMock).toHaveBeenCalledTimes(1);
1072
- expect(follower.getState().sessionPath).toBe(checkpointPath);
1073
- expect(follower.getMessages()).toEqual(expect.arrayContaining([
1074
- expect.objectContaining({ content: "[compacted]" }),
1075
- expect.objectContaining({ content: "continue from the shared checkpoint" }),
1076
- ]));
1077
- await Promise.all([creator.dispose(), follower.dispose()]);
1078
- });
1079
- it("still compacts inline during initialize() without the flag (CLI resume)", async () => {
1080
- const sessionPath = await persistSession();
1081
- shouldCompactMock.mockReturnValue(true);
1082
- compactMock.mockResolvedValue(compactedResult);
1083
- const { AgentSession } = await import("./agent-session.js");
1084
- const resumed = new AgentSession({
1085
- provider: "anthropic",
1086
- model: "claude-test",
1087
- cwd: tmpProject,
1088
- systemPrompt: "system prompt",
1089
- sessionId: sessionPath,
1090
- });
1091
- await resumed.initialize();
1092
- expect(compactMock).toHaveBeenCalledTimes(1);
1093
- await resumed.dispose();
1094
- });
1095
- });
1096
- //# sourceMappingURL=agent-session-compaction.test.js.map