@kenkaiiii/ggcoder 5.49.4 → 5.49.6

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