@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,215 +0,0 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- // Regression for the mid-screen footer "strand" in scrollback mode.
3
- //
4
- // If any single frame reaches terminal height (the app's estimate-based
5
- // live-area clamp can undercount — emoji widths, wrapped footer lines,
6
- // transient tool-panel rows), Ink records lastOutputHeight >= rows. On the
7
- // next SHORTER frame, log-update's eraseLines clamps at the screen top and
8
- // rewrites the frame top-anchored: the footer lands mid-screen with blank
9
- // rows below it and stays there. The patched ink's clipFrameToTerminalHeight
10
- // option (set by ggcoder's scrollback-mode INK_OPTIONS) clips frames to
11
- // rows - 2 so that poisoned state can never be entered. This test renders a
12
- // frame that overflows the terminal, then shrinks it, and asserts the footer
13
- // ends at the bottom of the written content — not stranded above blank rows.
14
- import React from "react";
15
- import { render, Text, Box } from "ink";
16
- import { describe, expect, it } from "vitest";
17
- import stripAnsi from "strip-ansi";
18
- import { ScreenRecorder, makeRecordingStdout } from "./testing/screen-recorder.js";
19
- const COLUMNS = 80;
20
- const ROWS = 24;
21
- const FOOTER = "SIM_FOOTER_BOTTOM";
22
- function Frame({ bodyRows }) {
23
- return (_jsxs(Box, { flexDirection: "column", width: COLUMNS, children: [Array.from({ length: bodyRows }, (_, i) => (_jsx(Text, { children: `BODY_${String(i + 1).padStart(2, "0")}` }, i))), _jsx(Text, { children: "SIM_INPUT" }), _jsx(Text, { children: FOOTER })] }));
24
- }
25
- async function tick() {
26
- await new Promise((resolve) => setTimeout(resolve, 45));
27
- }
28
- describe("scrollback frame clip (clipFrameToTerminalHeight)", () => {
29
- it("clips overflow frames and never strands the footer above blank rows", async () => {
30
- const recorder = new ScreenRecorder({ columns: COLUMNS, rows: ROWS });
31
- const stdout = makeRecordingStdout(recorder);
32
- // Overflow: 30 body rows + 2 control rows > 24 terminal rows.
33
- const mounted = render(_jsx(Frame, { bodyRows: 30 }), {
34
- stdout,
35
- columns: COLUMNS,
36
- rows: ROWS,
37
- patchConsole: false,
38
- maxFps: 1000,
39
- // Mirrors ggcoder's scrollback-mode INK_OPTIONS.
40
- clipFrameToTerminalHeight: true,
41
- });
42
- await tick();
43
- // The clip must keep the frame under terminal height: with rows - 2 = 22
44
- // frame rows, the oldest body rows are dropped (BODY_01..BODY_10 clipped,
45
- // mirroring the app's bottom-anchored live-area clamp).
46
- const tallLines = recorder.viewportLines().map((line) => stripAnsi(line));
47
- expect(tallLines.some((line) => line.includes("BODY_01"))).toBe(false);
48
- expect(tallLines.some((line) => line.includes("BODY_30"))).toBe(true);
49
- expect(tallLines.some((line) => line.includes(FOOTER))).toBe(true);
50
- // Shrink: the turn ends and the frame collapses to controls + done row.
51
- // Without the clip this is the poisoned transition (eraseLines clamps at
52
- // the screen top, frame rewrites top-anchored, footer stranded mid-screen
53
- // above a block of blank rows).
54
- mounted.rerender(_jsx(Frame, { bodyRows: 3 }));
55
- await tick();
56
- mounted.unmount();
57
- const lines = recorder.viewportLines().map((line) => stripAnsi(line));
58
- const footerIdx = lines.findIndex((line) => line.includes(FOOTER));
59
- const lastNonBlank = lines.reduce((acc, line, i) => (line.trim().length > 0 ? i : acc), -1);
60
- expect(footerIdx, "footer present after shrink").toBeGreaterThanOrEqual(0);
61
- expect(lastNonBlank, "no blank rows below the footer (no strand)").toBe(footerIdx);
62
- });
63
- });
64
- describe("scrollback bottom anchoring (anchorFrameToBottom)", () => {
65
- it("keeps the footer's absolute row fixed when the frame shrinks", async () => {
66
- const recorder = new ScreenRecorder({ columns: COLUMNS, rows: ROWS });
67
- const stdout = makeRecordingStdout(recorder);
68
- // A frame that fits comfortably (12 body + 2 control rows).
69
- const mounted = render(_jsx(Frame, { bodyRows: 12 }), {
70
- stdout,
71
- columns: COLUMNS,
72
- rows: ROWS,
73
- patchConsole: false,
74
- maxFps: 1000,
75
- // Mirrors ggcoder's scrollback-mode INK_OPTIONS.
76
- clipFrameToTerminalHeight: true,
77
- anchorFrameToBottom: true,
78
- });
79
- await tick();
80
- const footerRowAt = () => stripAnsi(recorder.fullText())
81
- .split("\n")
82
- .findIndex((line) => line.includes(FOOTER));
83
- const tallFooterRow = footerRowAt();
84
- expect(tallFooterRow, "footer present while tall").toBeGreaterThanOrEqual(0);
85
- // The frame shrinks by 9 rows with no compensating scrollback bytes — the
86
- // tool-panel-hide / status-swap / finalize scenario. Without anchoring,
87
- // the footer would move UP by 9 rows; with it, blank pad lines land above
88
- // the frame and the footer's absolute row stays exactly where it was.
89
- mounted.rerender(_jsx(Frame, { bodyRows: 3 }));
90
- await tick();
91
- expect(footerRowAt(), "footer row unchanged after shrink").toBe(tallFooterRow);
92
- // Growing again must CONSUME the pad debt: the growth overwrites the
93
- // blank pad rows above the frame (cursor-up) instead of scrolling new
94
- // rows, so the footer stays exactly put — not pushed further down — and
95
- // the gap doesn't survive as permanent whitespace in the transcript.
96
- mounted.rerender(_jsx(Frame, { bodyRows: 8 }));
97
- await tick();
98
- expect(footerRowAt(), "footer row unchanged on regrow (pad consumed)").toBe(tallFooterRow);
99
- // No stranded blank gap: between the first body row and the footer, every
100
- // row is real content (the regrown frame reclaimed the pad rows).
101
- const lines = stripAnsi(recorder.fullText()).split("\n");
102
- const firstBody = lines.findIndex((line) => line.includes("BODY_01"));
103
- const footerIdx = lines.findIndex((line) => line.includes(FOOTER));
104
- const blanksInside = lines
105
- .slice(firstBody, footerIdx)
106
- .filter((line) => line.trim().length === 0).length;
107
- expect(blanksInside, "no permanent blank gap inside the frame region").toBe(0);
108
- mounted.unmount();
109
- });
110
- it("lets the footer return up at idle (anchor inactive — slash menu close)", async () => {
111
- const recorder = new ScreenRecorder({ columns: COLUMNS, rows: ROWS });
112
- const stdout = makeRecordingStdout(recorder);
113
- const mounted = render(_jsx(Frame, { bodyRows: 4 }), {
114
- stdout,
115
- columns: COLUMNS,
116
- rows: ROWS,
117
- patchConsole: false,
118
- maxFps: 1000,
119
- clipFrameToTerminalHeight: true,
120
- anchorFrameToBottom: true,
121
- });
122
- const patched = mounted;
123
- expect(typeof patched.setFrameAnchorActive, "runtime toggle exposed").toBe("function");
124
- // Idle: App turns pad creation off (agent not running).
125
- patched.setFrameAnchorActive(false);
126
- await tick();
127
- const footerRowAt = () => stripAnsi(recorder.fullText())
128
- .split("\n")
129
- .findIndex((line) => line.includes(FOOTER));
130
- const baseFooterRow = footerRowAt();
131
- // Slash menu opens: frame grows by 8 rows — footer moves down.
132
- mounted.rerender(_jsx(Frame, { bodyRows: 12 }));
133
- await tick();
134
- const openFooterRow = footerRowAt();
135
- expect(openFooterRow, "footer moved down while menu open").toBeGreaterThan(baseFooterRow);
136
- // Slash menu closes: with the anchor INACTIVE the shrink is symmetric —
137
- // the footer returns to its pre-menu row and NO pad rows are created.
138
- mounted.rerender(_jsx(Frame, { bodyRows: 4 }));
139
- await tick();
140
- expect(footerRowAt(), "footer returned up after menu close").toBe(baseFooterRow);
141
- // No whitespace was injected above the frame: the row above BODY_01 in
142
- // the buffer is not a blank pad line.
143
- const lines = stripAnsi(recorder.fullText()).split("\n");
144
- const firstBody = lines.findIndex((line) => line.includes("BODY_01"));
145
- const blanksInside = lines
146
- .slice(firstBody, footerRowAt())
147
- .filter((line) => line.trim().length === 0).length;
148
- expect(blanksInside, "no pad rows created at idle").toBe(0);
149
- mounted.unmount();
150
- });
151
- it("backfills a bottom-pinned idle shrink with the transcript tail", async () => {
152
- const recorder = new ScreenRecorder({ columns: COLUMNS, rows: ROWS });
153
- const stdout = makeRecordingStdout(recorder);
154
- const mounted = render(_jsx(Frame, { bodyRows: 4 }), {
155
- stdout,
156
- columns: COLUMNS,
157
- rows: ROWS,
158
- patchConsole: false,
159
- maxFps: 1000,
160
- clipFrameToTerminalHeight: true,
161
- anchorFrameToBottom: true,
162
- });
163
- const patched = mounted;
164
- patched.setFrameAnchorActive(false);
165
- patched.setFrameShrinkBackfill((rows) => Array.from({ length: rows }, (_, i) => `BACKFILL_${String(i + 1).padStart(2, "0")}`).join("\n"));
166
- await tick();
167
- // Fill the screen above the frame with transcript so the frame bottom is
168
- // pinned at the screen bottom — the chat-in-progress shape.
169
- patched.insertBeforeFrame(Array.from({ length: ROWS }, (_, i) => `HIST_${String(i + 1).padStart(2, "0")}`).join("\n") +
170
- "\n");
171
- // The insert's forced-render fallback fires after 100ms — wait it out so
172
- // the pinned state is committed before the menu opens.
173
- await tick();
174
- await tick();
175
- await tick();
176
- const footerRowAt = () => stripAnsi(recorder.fullText())
177
- .split("\n")
178
- .findIndex((line) => line.includes(FOOTER));
179
- const pinnedFooterRow = footerRowAt();
180
- // Slash menu opens: bottom-pinned idle growth must NOT scroll the
181
- // terminal — ink repaints the screen in place (cursor home + erase-down +
182
- // shorter tail + taller frame). A scroll pushes a screenful into native
183
- // scrollback, and every open/close cycle would deposit one more duplicate
184
- // copy of those rows (the repeated half-banners). In-place repaint
185
- // appends NOTHING to the recorder's cumulative buffer — a scroll would
186
- // grow it by the frame-height delta.
187
- void pinnedFooterRow;
188
- const bufferLenBeforeOpen = stripAnsi(recorder.fullText()).split("\n").length;
189
- mounted.rerender(_jsx(Frame, { bodyRows: 12 }));
190
- await tick();
191
- const openLines = stripAnsi(recorder.fullText()).split("\n");
192
- expect(openLines.length, "menu open repainted in place (no scroll)").toBe(bufferLenBeforeOpen);
193
- expect(openLines.some((line) => line.includes("BACKFILL_")), "tail visible above the open menu").toBe(true);
194
- // Slash menu closes: same in-place repaint — taller tail + shorter frame.
195
- mounted.rerender(_jsx(Frame, { bodyRows: 4 }));
196
- await tick();
197
- expect(stripAnsi(recorder.fullText()).split("\n").length, "menu close repainted in place (no scroll)").toBe(bufferLenBeforeOpen);
198
- // Inspect the visible screen (bottom ROWS of the buffer): footer at the
199
- // bottom, tail above the frame, no blanks, no duplicated rows.
200
- const screen = recorder.viewportLines().map((line) => stripAnsi(line));
201
- const screenFooterIdx = screen.findIndex((line) => line.includes(FOOTER));
202
- expect(screenFooterIdx, "footer present after repaint").toBeGreaterThanOrEqual(0);
203
- const lastNonBlank = screen.reduce((acc, line, i) => (line.trim().length > 0 ? i : acc), -1);
204
- expect(lastNonBlank, "footer is the last content row").toBe(screenFooterIdx);
205
- // Everything above the frame is transcript tail — each row appears
206
- // exactly once (no duplicated banner/prompt rows) and none are blank.
207
- const frameTop = screenFooterIdx - 6; // 4 body + 2 control rows
208
- const aboveFrame = screen.slice(0, frameTop);
209
- expect(aboveFrame.every((line) => line.includes("BACKFILL_")), "all rows above the frame are backfill transcript").toBe(true);
210
- const uniqueRows = new Set(aboveFrame);
211
- expect(uniqueRows.size, "no duplicated rows above the frame").toBe(aboveFrame.length);
212
- mounted.unmount();
213
- });
214
- });
215
- //# sourceMappingURL=frame-clip-regression.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frame-clip-regression.test.js","sourceRoot":"","sources":["../../src/ui/frame-clip-regression.test.tsx"],"names":[],"mappings":";AAAA,oEAAoE;AACpE,EAAE;AACF,wEAAwE;AACxE,uEAAuE;AACvE,2EAA2E;AAC3E,2EAA2E;AAC3E,0EAA0E;AAC1E,6EAA6E;AAC7E,wEAAwE;AACxE,4EAA4E;AAC5E,6EAA6E;AAC7E,6EAA6E;AAC7E,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnF,MAAM,OAAO,GAAG,EAAE,CAAC;AACnB,MAAM,IAAI,GAAG,EAAE,CAAC;AAChB,MAAM,MAAM,GAAG,mBAAmB,CAAC;AAEnC,SAAS,KAAK,CAAC,EAAE,QAAQ,EAAwB;IAC/C,OAAO,CACL,MAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,EAAC,KAAK,EAAE,OAAO,aACvC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAC1C,KAAC,IAAI,cAAU,QAAQ,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAA5C,CAAC,CAAmD,CAChE,CAAC,EACF,KAAC,IAAI,4BAAiB,EACtB,KAAC,IAAI,cAAE,MAAM,GAAQ,IACjB,CACP,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IACjE,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE7C,8DAA8D;QAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,EAAE,GAAI,EAAE;YAC9C,MAAM;YACN,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,IAAI;YACZ,iDAAiD;YACjD,yBAAyB,EAAE,IAAI;SACA,CAAC,CAAC;QACnC,MAAM,IAAI,EAAE,CAAC;QAEb,yEAAyE;QACzE,0EAA0E;QAC1E,wDAAwD;QACxD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACvE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnE,wEAAwE;QACxE,yEAAyE;QACzE,0EAA0E;QAC1E,gCAAgC;QAChC,OAAO,CAAC,QAAQ,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,CAAC,GAAI,CAAC,CAAC;QACzC,MAAM,IAAI,EAAE,CAAC;QACb,OAAO,CAAC,OAAO,EAAE,CAAC;QAElB,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC5F,MAAM,CAAC,SAAS,EAAE,6BAA6B,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,CAAC,YAAY,EAAE,4CAA4C,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,mDAAmD,EAAE,GAAG,EAAE;IACjE,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC5E,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE7C,4DAA4D;QAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,EAAE,GAAI,EAAE;YAC9C,MAAM;YACN,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,IAAI;YACZ,iDAAiD;YACjD,yBAAyB,EAAE,IAAI;YAC/B,mBAAmB,EAAE,IAAI;SACM,CAAC,CAAC;QACnC,MAAM,IAAI,EAAE,CAAC;QAEb,MAAM,WAAW,GAAG,GAAW,EAAE,CAC/B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;aAC3B,KAAK,CAAC,IAAI,CAAC;aACX,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAE7E,0EAA0E;QAC1E,wEAAwE;QACxE,0EAA0E;QAC1E,sEAAsE;QACtE,OAAO,CAAC,QAAQ,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,CAAC,GAAI,CAAC,CAAC;QACzC,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,CAAC,WAAW,EAAE,EAAE,mCAAmC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE/E,qEAAqE;QACrE,sEAAsE;QACtE,wEAAwE;QACxE,qEAAqE;QACrE,OAAO,CAAC,QAAQ,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,CAAC,GAAI,CAAC,CAAC;QACzC,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,CAAC,WAAW,EAAE,EAAE,+CAA+C,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAE3F,0EAA0E;QAC1E,kEAAkE;QAClE,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACtE,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QACnE,MAAM,YAAY,GAAG,KAAK;aACvB,KAAK,CAAC,SAAS,EAAE,SAAS,CAAC;aAC3B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,MAAM,CAAC,YAAY,EAAE,gDAAgD,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE/E,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;QACtF,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,CAAC,GAAI,EAAE;YAC7C,MAAM;YACN,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,IAAI;YACZ,yBAAyB,EAAE,IAAI;YAC/B,mBAAmB,EAAE,IAAI;SACM,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,OAAqE,CAAC;QACtF,MAAM,CAAC,OAAO,OAAO,CAAC,oBAAoB,EAAE,wBAAwB,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACvF,wDAAwD;QACxD,OAAO,CAAC,oBAAqB,CAAC,KAAK,CAAC,CAAC;QACrC,MAAM,IAAI,EAAE,CAAC;QAEb,MAAM,WAAW,GAAG,GAAW,EAAE,CAC/B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;aAC3B,KAAK,CAAC,IAAI,CAAC;aACX,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;QAEpC,+DAA+D;QAC/D,OAAO,CAAC,QAAQ,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,EAAE,GAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,aAAa,GAAG,WAAW,EAAE,CAAC;QACpC,MAAM,CAAC,aAAa,EAAE,mCAAmC,CAAC,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;QAE1F,wEAAwE;QACxE,sEAAsE;QACtE,OAAO,CAAC,QAAQ,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,CAAC,GAAI,CAAC,CAAC;QACzC,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,CAAC,WAAW,EAAE,EAAE,qCAAqC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAEjF,uEAAuE;QACvE,sCAAsC;QACtC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC;QACtE,MAAM,YAAY,GAAG,KAAK;aACvB,KAAK,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC;aAC/B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACrD,MAAM,CAAC,YAAY,EAAE,6BAA6B,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAE5D,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;QAC9E,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACtE,MAAM,MAAM,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAE7C,MAAM,OAAO,GAAG,MAAM,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,CAAC,GAAI,EAAE;YAC7C,MAAM;YACN,OAAO,EAAE,OAAO;YAChB,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,IAAI;YACZ,yBAAyB,EAAE,IAAI;YAC/B,mBAAmB,EAAE,IAAI;SACM,CAAC,CAAC;QACnC,MAAM,OAAO,GAAG,OAIf,CAAC;QACF,OAAO,CAAC,oBAAqB,CAAC,KAAK,CAAC,CAAC;QACrC,OAAO,CAAC,sBAAuB,CAAC,CAAC,IAAI,EAAE,EAAE,CACvC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,YAAY,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CACvF,IAAI,CACL,CACF,CAAC;QACF,MAAM,IAAI,EAAE,CAAC;QAEb,yEAAyE;QACzE,4DAA4D;QAC5D,OAAO,CAAC,iBAAkB,CACxB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,QAAQ,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACzF,IAAI,CACP,CAAC;QACF,yEAAyE;QACzE,uDAAuD;QACvD,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,IAAI,EAAE,CAAC;QAEb,MAAM,WAAW,GAAG,GAAW,EAAE,CAC/B,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;aAC3B,KAAK,CAAC,IAAI,CAAC;aACX,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAChD,MAAM,eAAe,GAAG,WAAW,EAAE,CAAC;QAEtC,kEAAkE;QAClE,0EAA0E;QAC1E,wEAAwE;QACxE,0EAA0E;QAC1E,mEAAmE;QACnE,uEAAuE;QACvE,qCAAqC;QACrC,KAAK,eAAe,CAAC;QACrB,MAAM,mBAAmB,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;QAC9E,OAAO,CAAC,QAAQ,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,EAAE,GAAI,CAAC,CAAC;QAC1C,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,0CAA0C,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAC/F,MAAM,CACJ,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EACpD,kCAAkC,CACnC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEb,0EAA0E;QAC1E,OAAO,CAAC,QAAQ,CAAC,KAAC,KAAK,IAAC,QAAQ,EAAE,CAAC,GAAI,CAAC,CAAC;QACzC,MAAM,IAAI,EAAE,CAAC;QACb,MAAM,CACJ,SAAS,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,EACjD,2CAA2C,CAC5C,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAE5B,wEAAwE;QACxE,+DAA+D;QAC/D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;QACvE,MAAM,eAAe,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,MAAM,CAAC,eAAe,EAAE,8BAA8B,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QAClF,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7F,MAAM,CAAC,YAAY,EAAE,gCAAgC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7E,mEAAmE;QACnE,sEAAsE;QACtE,MAAM,QAAQ,GAAG,eAAe,GAAG,CAAC,CAAC,CAAC,0BAA0B;QAChE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;QAC7C,MAAM,CACJ,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EACtD,kDAAkD,CACnD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC;QACvC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,oCAAoC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAEtF,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=stall-retry-duplicate.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stall-retry-duplicate.test.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/stall-retry-duplicate.test.ts"],"names":[],"mappings":""}
@@ -1,94 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- // Mirrors the CURRENT handler in useAgentLoop.ts — retry does not reset text.
3
- function handleEventCurrent(buf, ev) {
4
- if (ev.type === "text_delta") {
5
- return {
6
- ...buf,
7
- textVisible: buf.textVisible + ev.text,
8
- streamingText: buf.textVisible + ev.text,
9
- };
10
- }
11
- if (ev.type === "retry") {
12
- // current behaviour: only updates UI phase, leaves text buffers intact
13
- return buf;
14
- }
15
- if (ev.type === "turn_end") {
16
- // commit + reset
17
- return { textVisible: "", streamingText: "" };
18
- }
19
- return buf;
20
- }
21
- // Proposed fix: retry also clears the stream-accumulation buffers, since the
22
- // provider stream restarts from scratch on retry.
23
- function handleEventFixed(buf, ev) {
24
- if (ev.type === "text_delta") {
25
- return {
26
- ...buf,
27
- textVisible: buf.textVisible + ev.text,
28
- streamingText: buf.textVisible + ev.text,
29
- };
30
- }
31
- if (ev.type === "retry") {
32
- return { textVisible: "", streamingText: "" };
33
- }
34
- if (ev.type === "turn_end") {
35
- return { textVisible: "", streamingText: "" };
36
- }
37
- return buf;
38
- }
39
- // Simulate a stall in the middle of a message:
40
- // Attempt 1 emits the first few deltas, then the stream stalls.
41
- // agent-loop yields `retry`, starts fresh call.
42
- // Attempt 2 emits the full message from scratch (the model regenerates).
43
- function stallRetrySequence() {
44
- return [
45
- { type: "text_delta", text: "Now I'll work on this.." },
46
- // stream stalls here — agent-loop yields retry
47
- { type: "retry", silent: true },
48
- // new stream begins and regenerates similar opening text
49
- { type: "text_delta", text: "Now I'll work on this.." },
50
- { type: "text_delta", text: " Here is the rest of the response." },
51
- { type: "turn_end" },
52
- ];
53
- }
54
- function run(handler, events) {
55
- const frames = [];
56
- let buf = { textVisible: "", streamingText: "" };
57
- for (const ev of events) {
58
- buf = handler(buf, ev);
59
- frames.push({ ...buf });
60
- }
61
- return frames;
62
- }
63
- describe("stall-retry text duplication", () => {
64
- it("REPRODUCE: current handler produces doubled text visible mid-stream", () => {
65
- const frames = run(handleEventCurrent, stallRetrySequence());
66
- // After the retry + first text_delta of the new attempt, the UI shows
67
- // the original partial text concatenated with the retry's opening —
68
- // exactly the user-reported "Now I'll work on this..Now I'll work on this.." flash.
69
- const afterFirstRetryDelta = frames[2];
70
- expect(afterFirstRetryDelta.streamingText).toBe("Now I'll work on this..Now I'll work on this..");
71
- });
72
- it("FIXED handler clears buffers on retry so the retry stream starts clean", () => {
73
- const frames = run(handleEventFixed, stallRetrySequence());
74
- // Same frame index, but now the partial text was cleared when the retry
75
- // event fired, so only the retry's own first delta is visible.
76
- const afterFirstRetryDelta = frames[2];
77
- expect(afterFirstRetryDelta.streamingText).toBe("Now I'll work on this..");
78
- // Final committed text is the full retry response, with no duplication.
79
- const final = frames[frames.length - 1];
80
- expect(final.streamingText).toBe("");
81
- });
82
- it("FIXED handler is a no-op on retry when the stream hadn't emitted text yet", () => {
83
- // Overloaded errors often retry before any text_delta has arrived.
84
- // The fix must not misbehave in that case.
85
- const events = [
86
- { type: "retry", silent: false },
87
- { type: "text_delta", text: "Hello world" },
88
- { type: "turn_end" },
89
- ];
90
- const frames = run(handleEventFixed, events);
91
- expect(frames[1].streamingText).toBe("Hello world");
92
- });
93
- });
94
- //# sourceMappingURL=stall-retry-duplicate.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stall-retry-duplicate.test.js","sourceRoot":"","sources":["../../../src/ui/hooks/stall-retry-duplicate.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useAgentLoop.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAgentLoop.test.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useAgentLoop.test.ts"],"names":[],"mappings":""}
@@ -1,66 +0,0 @@
1
- import { readFileSync } from "node:fs";
2
- import { describe, expect, it } from "vitest";
3
- import { evaluateLoopBreak, ToolCallProgressTracker } from "../../core/loop-breaker.js";
4
- import { shouldRetainThinkingDelta } from "./useAgentLoop.js";
5
- describe("useAgentLoop context transforms", () => {
6
- it("adds missing read coverage to the initial Ideal review turn", () => {
7
- const source = readFileSync(new URL("./useAgentLoop.ts", import.meta.url), "utf8");
8
- expect(source).toMatch(/withReviewCoverageRequirements\(\s*idealReviewMessage,\s*coverage\.missing\s*\)/);
9
- });
10
- it("passes the per-turn tool-result budget to the agent loop", () => {
11
- const source = readFileSync(new URL("./useAgentLoop.ts", import.meta.url), "utf8");
12
- expect(source).toMatch(/maxTurnToolResultChars:\s*resolveSessionTurnToolResultCharLimit\(\s*options\.model,\s*options\.provider,\s*accountId,?\s*\)/);
13
- });
14
- it("accepts authoritative usage and pending messages in the transform contract", async () => {
15
- const seenOptions = [];
16
- const transformContext = async (messages, options) => {
17
- seenOptions.push(options);
18
- return messages;
19
- };
20
- const messages = [{ role: "user", content: "run the tool" }];
21
- const pendingMessage = { role: "user", content: "steer the active run" };
22
- const result = await transformContext(messages, {
23
- usage: { inputTokens: 120, outputTokens: 30, cacheRead: 10, cacheWrite: 5 },
24
- pendingMessages: [pendingMessage],
25
- });
26
- expect(result).toBe(messages);
27
- expect(seenOptions).toEqual([
28
- {
29
- usage: { inputTokens: 120, outputTokens: 30, cacheRead: 10, cacheWrite: 5 },
30
- pendingMessages: [pendingMessage],
31
- },
32
- ]);
33
- });
34
- });
35
- describe("useAgentLoop thinking display", () => {
36
- it("does not retain provider reasoning in chat transcript state", () => {
37
- expect(shouldRetainThinkingDelta()).toBe(false);
38
- });
39
- });
40
- describe("useAgentLoop loop-break tracking", () => {
41
- it("does not flag repeated background polling", () => {
42
- const tracker = new ToolCallProgressTracker();
43
- let repeatedNoProgressCalls = 0;
44
- for (let i = 0; i < 5; i++) {
45
- repeatedNoProgressCalls = tracker.record("task_output", { id: "running-job" }, "Process running\n(no new output)", false);
46
- }
47
- expect(evaluateLoopBreak({
48
- consecutiveFailures: 0,
49
- repeatedNoProgressCalls,
50
- textRepetitionDetected: false,
51
- }).shouldBreak).toBe(false);
52
- });
53
- it("does not flag successful iterative edits to one file", () => {
54
- const tracker = new ToolCallProgressTracker();
55
- let repeatedNoProgressCalls = 0;
56
- for (let i = 0; i < 6; i++) {
57
- repeatedNoProgressCalls = tracker.record("edit", { file_path: "src/app.ts", old_text: `before-${i}`, new_text: `after-${i}` }, `diff-${i}`, false);
58
- }
59
- expect(evaluateLoopBreak({
60
- consecutiveFailures: 0,
61
- repeatedNoProgressCalls,
62
- textRepetitionDetected: false,
63
- }).shouldBreak).toBe(false);
64
- });
65
- });
66
- //# sourceMappingURL=useAgentLoop.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useAgentLoop.test.js","sourceRoot":"","sources":["../../../src/ui/hooks/useAgentLoop.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACxF,OAAO,EAAE,yBAAyB,EAAyB,MAAM,mBAAmB,CAAC;AAIrF,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAEnF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CACpB,iFAAiF,CAClF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0DAA0D,EAAE,GAAG,EAAE;QAClE,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,GAAG,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,CAAC;QAEnF,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CACpB,6HAA6H,CAC9H,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,WAAW,GAA8B,EAAE,CAAC;QAClD,MAAM,gBAAgB,GAAsD,KAAK,EAC/E,QAAQ,EACR,OAAO,EACP,EAAE;YACF,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC1B,OAAO,QAAQ,CAAC;QAClB,CAAC,CAAC;QACF,MAAM,QAAQ,GAAc,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;QACxE,MAAM,cAAc,GAAY,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,sBAAsB,EAAE,CAAC;QAElF,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,QAAQ,EAAE;YAC9C,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;YAC3E,eAAe,EAAE,CAAC,cAAc,CAAC;SAClC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC;YAC1B;gBACE,KAAK,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE;gBAC3E,eAAe,EAAE,CAAC,cAAc,CAAC;aAClC;SACF,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,CAAC,yBAAyB,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;IAChD,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,OAAO,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAC9C,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,uBAAuB,GAAG,OAAO,CAAC,MAAM,CACtC,aAAa,EACb,EAAE,EAAE,EAAE,aAAa,EAAE,EACrB,kCAAkC,EAClC,KAAK,CACN,CAAC;QACJ,CAAC;QAED,MAAM,CACJ,iBAAiB,CAAC;YAChB,mBAAmB,EAAE,CAAC;YACtB,uBAAuB;YACvB,sBAAsB,EAAE,KAAK;SAC9B,CAAC,CAAC,WAAW,CACf,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;QAC9D,MAAM,OAAO,GAAG,IAAI,uBAAuB,EAAE,CAAC;QAC9C,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAEhC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,uBAAuB,GAAG,OAAO,CAAC,MAAM,CACtC,MAAM,EACN,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,EAAE,QAAQ,EAAE,SAAS,CAAC,EAAE,EAAE,EAC5E,QAAQ,CAAC,EAAE,EACX,KAAK,CACN,CAAC;QACJ,CAAC;QAED,MAAM,CACJ,iBAAiB,CAAC;YAChB,mBAAmB,EAAE,CAAC;YACtB,uBAAuB;YACvB,sBAAsB,EAAE,KAAK;SAC9B,CAAC,CAAC,WAAW,CACf,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useContextCompaction.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useContextCompaction.test.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useContextCompaction.test.tsx"],"names":[],"mappings":""}
@@ -1,135 +0,0 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
2
- import React, { useEffect, useRef, useState } from "react";
3
- import { render } from "ink";
4
- import { beforeEach, describe, expect, it, vi } from "vitest";
5
- import { useContextCompaction } from "./useContextCompaction.js";
6
- import { getCalibratedRatio, setEstimatorModel } from "../../core/compaction/token-estimator.js";
7
- const compactMock = vi.hoisted(() => vi.fn());
8
- vi.mock("../../core/compaction/compactor.js", async () => {
9
- const actual = await vi.importActual("../../core/compaction/compactor.js");
10
- return { ...actual, compact: compactMock };
11
- });
12
- const usage = {
13
- inputTokens: 145_000,
14
- cacheRead: 2_000,
15
- cacheWrite: 1_000,
16
- outputTokens: 11_000,
17
- };
18
- const pendingMessage = {
19
- role: "tool",
20
- content: [
21
- {
22
- type: "tool_result",
23
- toolCallId: "t1",
24
- content: "pending tool output ".repeat(200),
25
- },
26
- ],
27
- };
28
- function Harness({ provider, reuseRecordedUsage = false, onTransformed, }) {
29
- const messagesRef = useRef([
30
- { role: "system", content: "sys" },
31
- { role: "user", content: "run tool" },
32
- {
33
- role: "assistant",
34
- content: [{ type: "tool_call", id: "t1", name: "read", args: {} }],
35
- },
36
- pendingMessage,
37
- ]);
38
- const settingsRef = useRef({
39
- get(key) {
40
- if (key === "autoCompact")
41
- return true;
42
- if (key === "compactThreshold")
43
- return 0.8;
44
- return undefined;
45
- },
46
- });
47
- const approvedPlanPathRef = useRef(undefined);
48
- const [, setLiveItems] = useState([]);
49
- const startedRef = useRef(false);
50
- const { transformContext, recordProviderUsage } = useContextCompaction({
51
- currentModel: "test-model",
52
- currentProvider: provider,
53
- contextWindowOptions: { provider },
54
- activeApiKey: "test-key",
55
- activeAccountId: undefined,
56
- activeProjectId: undefined,
57
- activeBaseUrl: undefined,
58
- setLiveItems,
59
- getId: () => "compact-1",
60
- approvedPlanPathRef,
61
- settingsRef,
62
- messagesRef,
63
- persistCompactedSession: async () => { },
64
- });
65
- useEffect(() => {
66
- if (startedRef.current)
67
- return;
68
- startedRef.current = true;
69
- if (reuseRecordedUsage) {
70
- recordProviderUsage(usage, messagesRef.current.slice(0, -1));
71
- void transformContext(messagesRef.current, { pendingMessages: [] }).then(onTransformed);
72
- return;
73
- }
74
- void transformContext(messagesRef.current, {
75
- usage,
76
- pendingMessages: [pendingMessage],
77
- }).then(onTransformed);
78
- }, [onTransformed, recordProviderUsage, reuseRecordedUsage, transformContext]);
79
- return null;
80
- }
81
- describe("useContextCompaction", () => {
82
- beforeEach(() => {
83
- compactMock.mockReset();
84
- compactMock.mockResolvedValue({
85
- messages: [
86
- { role: "system", content: "sys" },
87
- { role: "user", content: "[compacted]" },
88
- ],
89
- result: {
90
- compacted: true,
91
- originalCount: 4,
92
- newCount: 2,
93
- tokensBeforeEstimate: 161_000,
94
- tokensAfterEstimate: 2_000,
95
- },
96
- });
97
- });
98
- it.each(["anthropic", "openai"])("counts cache, output, and pending messages for %s", async (provider) => {
99
- let transformed;
100
- const mounted = render(_jsx(Harness, { provider: provider, onTransformed: (messages) => (transformed = messages) }), { patchConsole: false });
101
- await vi.waitFor(() => expect(transformed).toBeDefined());
102
- mounted.unmount();
103
- expect(compactMock).toHaveBeenCalledTimes(1);
104
- expect(transformed).toEqual([
105
- { role: "system", content: "sys" },
106
- { role: "user", content: "[compacted]" },
107
- ]);
108
- });
109
- it("calibrates the token estimator from the anchored provider usage", async () => {
110
- // Model switch resets any calibration left over from previous tests.
111
- setEstimatorModel("calibration-reset-sentinel");
112
- setEstimatorModel("test-model");
113
- expect(getCalibratedRatio()).toBeNull();
114
- let transformed;
115
- const mounted = render(_jsx(Harness, { provider: "openai", onTransformed: (messages) => (transformed = messages) }), { patchConsole: false });
116
- await vi.waitFor(() => expect(transformed).toBeDefined());
117
- mounted.unmount();
118
- const ratio = getCalibratedRatio();
119
- expect(ratio).not.toBeNull();
120
- expect(ratio).toBeGreaterThanOrEqual(2.0);
121
- expect(ratio).toBeLessThanOrEqual(5.0);
122
- });
123
- it("reuses authoritative usage for the first context check of the next run", async () => {
124
- let transformed;
125
- const mounted = render(_jsx(Harness, { provider: "openai", reuseRecordedUsage: true, onTransformed: (messages) => (transformed = messages) }), { patchConsole: false });
126
- await vi.waitFor(() => expect(transformed).toBeDefined());
127
- mounted.unmount();
128
- expect(compactMock).toHaveBeenCalledTimes(1);
129
- expect(transformed).toEqual([
130
- { role: "system", content: "sys" },
131
- { role: "user", content: "[compacted]" },
132
- ]);
133
- });
134
- });
135
- //# sourceMappingURL=useContextCompaction.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useContextCompaction.test.js","sourceRoot":"","sources":["../../../src/ui/hooks/useContextCompaction.test.tsx"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=useTranscriptHistory.sessionstore.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTranscriptHistory.sessionstore.test.d.ts","sourceRoot":"","sources":["../../../src/ui/hooks/useTranscriptHistory.sessionstore.test.tsx"],"names":[],"mappings":""}