@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,245 +0,0 @@
1
- /**
2
- * A long background build must report itself. These tests drive real processes
3
- * (the watcher works off the on-disk log, so a fake would prove nothing) and
4
- * assert the two invariants that keep it cheap: bounded injected bytes, and no
5
- * timer outliving its process.
6
- */
7
- import { afterEach, describe, expect, it } from "vitest";
8
- import fs from "node:fs/promises";
9
- import os from "node:os";
10
- import path from "node:path";
11
- import { ProcessManager } from "./process-manager.js";
12
- import { AgentNotificationQueue, NOTIFICATION_MAX_CHARS, } from "./agent-notifications.js";
13
- const managers = [];
14
- const tempDirs = [];
15
- /** Mirrors WATCH_MAX_REPORTS in process-manager.ts (module-private). */
16
- const WATCH_MAX_REPORTS_EXPECTED = 3;
17
- /**
18
- * Every manager here gets its own log directory. `start()` writes AND prunes
19
- * inside `bgDir`, so an un-overridden instance would sweep the developer's real
20
- * `~/.gg/bg` history when the suite runs.
21
- */
22
- async function bgDir() {
23
- const directory = await fs.mkdtemp(path.join(os.tmpdir(), "gg-process-bg-"));
24
- tempDirs.push(directory);
25
- return directory;
26
- }
27
- async function manager(notifications, watchIntervalMs) {
28
- const instance = new ProcessManager({ notifications, bgDir: await bgDir(), watchIntervalMs });
29
- managers.push(instance);
30
- return instance;
31
- }
32
- /**
33
- * Wait for the progress watcher to retire, draining reports as they land.
34
- *
35
- * The watcher disposes itself the instant the report budget is spent, so
36
- * retirement IS the end state under test — waiting for it needs no assumption
37
- * about how long three reports take. The timeout is a stuck-test backstop, not
38
- * the thing being measured: an assertion that depends on a wall-clock budget
39
- * fails whenever the machine is busy, which is exactly how this test used to
40
- * break under `pnpm test` while passing on its own.
41
- */
42
- async function drainUntilWatcherRetires(instance, queue, timeoutMs = 60_000) {
43
- const deadline = Date.now() + timeoutMs;
44
- let progressCount = 0;
45
- while (instance.activeWatchers().length > 0) {
46
- if (Date.now() >= deadline)
47
- throw new Error("watcher never retired");
48
- await new Promise((resolve) => setTimeout(resolve, 20));
49
- progressCount += queue.drain().filter((entry) => !entry.terminal).length;
50
- }
51
- return progressCount + queue.drain().filter((entry) => !entry.terminal).length;
52
- }
53
- async function tempDir() {
54
- const directory = await fs.mkdtemp(path.join(os.tmpdir(), "gg-process-notify-"));
55
- tempDirs.push(directory);
56
- return directory;
57
- }
58
- /** Poll the queue until a notification matching `predicate` is drained. */
59
- async function waitForNotification(queue, predicate, timeoutMs = 20_000) {
60
- const deadline = Date.now() + timeoutMs;
61
- const seen = [];
62
- while (Date.now() < deadline) {
63
- for (const entry of queue.drain()) {
64
- seen.push(entry);
65
- if (predicate(entry))
66
- return entry;
67
- }
68
- await new Promise((resolve) => setTimeout(resolve, 100));
69
- }
70
- throw new Error(`Timed out. Saw: ${JSON.stringify(seen)}`);
71
- }
72
- afterEach(async () => {
73
- for (const instance of managers.splice(0))
74
- instance.shutdownAll();
75
- await Promise.all(tempDirs
76
- .splice(0)
77
- .map((directory) => fs.rm(directory, { recursive: true, force: true, maxRetries: 10, retryDelay: 100 })));
78
- });
79
- describe("ProcessManager progress notifications", () => {
80
- it("pushes a terminal exit checkpoint without any task_output call", async () => {
81
- const queue = new AgentNotificationQueue();
82
- const instance = await manager(queue);
83
- const cwd = await tempDir();
84
- const started = await instance.start("echo hello-from-build; exit 3", cwd);
85
- const exit = await waitForNotification(queue, (entry) => entry.terminal);
86
- expect(exit.kind).toBe("process");
87
- expect(exit.id).toBe(started.id);
88
- expect(exit.text).toContain("exited with code 3");
89
- expect(exit.text).toContain("hello-from-build");
90
- expect(exit.text).toContain("task_output");
91
- expect(exit.text.length).toBeLessThanOrEqual(NOTIFICATION_MAX_CHARS);
92
- }, 30_000);
93
- it("surfaces progress on a long-running process before it exits", async () => {
94
- const queue = new AgentNotificationQueue();
95
- const instance = await manager(queue);
96
- const cwd = await tempDir();
97
- // Logs steadily for ~12s: long enough for at least one 5s checkpoint tick.
98
- const started = await instance.start(`for i in $(seq 1 12); do echo "step-$i"; sleep 1; done`, cwd);
99
- const progress = await waitForNotification(queue, (entry) => !entry.terminal);
100
- expect(progress.id).toBe(started.id);
101
- expect(progress.text).toContain("still running");
102
- expect(progress.text).toContain("step-");
103
- expect(progress.text.length).toBeLessThanOrEqual(NOTIFICATION_MAX_CHARS);
104
- // Proven without a single task_output call.
105
- await instance.stop(started.id);
106
- }, 40_000);
107
- it("bounds the digest of a process that floods its log", async () => {
108
- const queue = new AgentNotificationQueue();
109
- const instance = await manager(queue);
110
- const cwd = await tempDir();
111
- await instance.start(`for i in $(seq 1 2000); do echo "line-$i padding padding"; done`, cwd);
112
- const exit = await waitForNotification(queue, (entry) => entry.terminal);
113
- expect(exit.text.length).toBeLessThanOrEqual(NOTIFICATION_MAX_CHARS);
114
- // Digest is the TAIL, so the newest lines survive.
115
- expect(exit.text).toContain("line-2000");
116
- }, 30_000);
117
- it("leaves no watcher timer alive after a process exits", async () => {
118
- const queue = new AgentNotificationQueue();
119
- const instance = await manager(queue);
120
- const cwd = await tempDir();
121
- const started = await instance.start("true", cwd);
122
- expect(instance.activeWatchers()).toContain(started.id);
123
- await waitForNotification(queue, (entry) => entry.terminal);
124
- expect(instance.activeWatchers()).toEqual([]);
125
- }, 30_000);
126
- it("disposes the watcher when a running process is stopped", async () => {
127
- const queue = new AgentNotificationQueue();
128
- const instance = await manager(queue);
129
- const cwd = await tempDir();
130
- const started = await instance.start("sleep 30", cwd);
131
- expect(instance.activeWatchers()).toContain(started.id);
132
- await instance.stop(started.id);
133
- await waitForNotification(queue, (entry) => entry.terminal);
134
- expect(instance.activeWatchers()).toEqual([]);
135
- }, 30_000);
136
- it("backs off repeated progress checkpoints on a long-lived chatty process", async () => {
137
- const queue = new AgentNotificationQueue();
138
- const instance = await manager(queue);
139
- const cwd = await tempDir();
140
- // A dev server: logs continuously and never exits on its own. At a flat 5s
141
- // this produced a fresh checkpoint for essentially every loop step — the
142
- // measured ~2k tokens per minute of overlap that prompted the backoff.
143
- const started = await instance.start(`for i in $(seq 1 400); do echo "[electron] compiled ok $i"; sleep 0.2; done`, cwd);
144
- // Drain on the cadence a fast tool batch would, for 30s.
145
- let progressCount = 0;
146
- const until = Date.now() + 30_000;
147
- while (Date.now() < until) {
148
- await new Promise((resolve) => setTimeout(resolve, 1_000));
149
- progressCount += queue.drain().filter((entry) => !entry.terminal).length;
150
- }
151
- await instance.stop(started.id);
152
- // Ticks land at 5s, 15s, 35s… so 30s admits at most the first two, plus a
153
- // boundary tick. Flat 5s would have produced ~6.
154
- expect(progressCount).toBeGreaterThanOrEqual(1);
155
- expect(progressCount).toBeLessThanOrEqual(3);
156
- }, 60_000);
157
- it("still reports a short build promptly, before any backoff matters", async () => {
158
- const queue = new AgentNotificationQueue();
159
- const instance = await manager(queue);
160
- const cwd = await tempDir();
161
- const started = await instance.start(`for i in $(seq 1 12); do echo "step-$i"; sleep 1; done`, cwd);
162
- // The FIRST checkpoint must still arrive on the original 5s tick — backoff
163
- // must not cost a short build its near-real-time reporting.
164
- const first = await waitForNotification(queue, (entry) => !entry.terminal, 9_000);
165
- expect(first.text).toContain("still running");
166
- await instance.stop(started.id);
167
- }, 40_000);
168
- it("stays responsive after an idle stretch instead of drifting to the cap", async () => {
169
- const queue = new AgentNotificationQueue();
170
- const instance = await manager(queue);
171
- const cwd = await tempDir();
172
- // A dev server that boots, idles, then fails a recompile and KEEPS RUNNING
173
- // (so the progress watcher, not the exit checkpoint, has to carry the news).
174
- //
175
- // Driven from a script file on purpose: every notification embeds
176
- // `proc.command`, so a marker written inline would also appear in the boot
177
- // checkpoint's text and match there — which silently made an earlier
178
- // version of this test assert nothing.
179
- const IDLE_MS = 40_000;
180
- const script = path.join(cwd, "server.sh");
181
- await fs.writeFile(script, `#!/bin/sh\necho booted\nsleep ${IDLE_MS / 1000}\necho LATE_RECOMPILE_FAILURE\nsleep 120\n`, { mode: 0o755 });
182
- const spawnedAt = Date.now();
183
- const started = await instance.start("sh server.sh", cwd);
184
- // Consume the boot checkpoint (this one legitimately backs off to 10s).
185
- const boot = await waitForNotification(queue, (entry) => !entry.terminal);
186
- expect(boot.text).not.toContain("LATE_RECOMPILE_FAILURE");
187
- await waitForNotification(queue, (entry) => entry.text.includes("LATE_RECOMPILE_FAILURE"), 60_000);
188
- // The failure line is written IDLE_MS after spawn; everything past that is
189
- // watcher latency.
190
- const latencyMs = Date.now() - (spawnedAt + IDLE_MS);
191
- // Backing off on SILENT ticks would have grown the interval through the
192
- // idle window (5→10→20→40…), making this land ~35s late. Damping only
193
- // actual reports keeps the interval at 10s, so it lands within one tick.
194
- expect(latencyMs).toBeLessThan(15_000);
195
- await instance.stop(started.id);
196
- }, 120_000);
197
- it("stops pushing progress entirely once the report budget is spent", async () => {
198
- const queue = new AgentNotificationQueue();
199
- // 200ms base cadence: reports land at ~0.2s/0.6s/1.4s instead of
200
- // ~5s/15s/35s. Same code path, same budget, no dependence on how fast the
201
- // machine drains three real reports.
202
- const instance = await manager(queue, 200);
203
- const cwd = await tempDir();
204
- // A dev server: logs continuously, never exits. Without a budget this kept
205
- // producing checkpoints for the life of the process — the unbounded tail
206
- // Anthropic removed from Claude Code (task_progress /
207
- // background_task_status are now LEGACY_ATTACHMENT_TYPES, dropped before
208
- // the model sees them).
209
- const started = await instance.start(`for i in $(seq 1 600); do echo "[electron] compiled ok $i"; sleep 0.2; done`, cwd);
210
- // Assert the structural end state: the watcher RETIRES, so no further tick
211
- // can exist to fire. That is stronger than any wait, and unlike a fixed
212
- // deadline it cannot report "2 of 3" merely because the CPU was busy.
213
- const progressCount = await drainUntilWatcherRetires(instance, queue);
214
- expect(progressCount).toBe(WATCH_MAX_REPORTS_EXPECTED);
215
- // Process is still very much alive — this is retirement, not exit.
216
- expect((await instance.readOutput(started.id)).isRunning).toBe(true);
217
- expect(instance.activeWatchers()).toEqual([]);
218
- await instance.stop(started.id);
219
- }, 120_000);
220
- it("still reports the exit after the progress budget is spent", async () => {
221
- const queue = new AgentNotificationQueue();
222
- const instance = await manager(queue);
223
- const cwd = await tempDir();
224
- // Chatty enough to burn the budget, then exits non-zero. "It finished, and
225
- // how" is the one fact the agent cannot get without polling — retiring the
226
- // progress watcher must never cost it.
227
- const started = await instance.start(`for i in $(seq 1 200); do echo "line-$i"; sleep 0.2; done; echo BUILD_FAILED; exit 7`, cwd);
228
- const exit = await waitForNotification(queue, (entry) => entry.terminal, 90_000);
229
- expect(exit.id).toBe(started.id);
230
- expect(exit.text).toContain("exited with code 7");
231
- expect(exit.text).toContain("BUILD_FAILED");
232
- }, 120_000);
233
- it("stays silent when no notification queue is wired", async () => {
234
- const instance = new ProcessManager({ bgDir: await bgDir() });
235
- managers.push(instance);
236
- const cwd = await tempDir();
237
- const started = await instance.start("echo quiet", cwd);
238
- expect(instance.activeWatchers()).toEqual([]);
239
- // The pull path still works exactly as before.
240
- await new Promise((resolve) => setTimeout(resolve, 300));
241
- const read = await instance.readOutput(started.id);
242
- expect(read.output).toContain("quiet");
243
- }, 30_000);
244
- });
245
- //# sourceMappingURL=process-manager-notifications.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-manager-notifications.test.js","sourceRoot":"","sources":["../../src/core/process-manager-notifications.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=process-manager-wake.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-manager-wake.test.d.ts","sourceRoot":"","sources":["../../src/core/process-manager-wake.test.ts"],"names":[],"mappings":""}
@@ -1,100 +0,0 @@
1
- /**
2
- * Model-declared wake rules (match / silence) push a steering-path
3
- * notification the moment they hold — no task_output polling. Real processes,
4
- * because the watcher works off the on-disk log.
5
- */
6
- import { afterEach, describe, expect, it } from "vitest";
7
- import fs from "node:fs/promises";
8
- import os from "node:os";
9
- import path from "node:path";
10
- import { ProcessManager } from "./process-manager.js";
11
- import { AgentNotificationQueue } from "./agent-notifications.js";
12
- const managers = [];
13
- const tempDirs = [];
14
- async function bgDir() {
15
- const directory = await fs.mkdtemp(path.join(os.tmpdir(), "gg-process-wake-"));
16
- tempDirs.push(directory);
17
- return directory;
18
- }
19
- async function manager(queue) {
20
- const instance = new ProcessManager({ notifications: queue, bgDir: await bgDir() });
21
- managers.push(instance);
22
- return instance;
23
- }
24
- async function waitForNotification(queue, predicate, timeoutMs = 30_000) {
25
- const deadline = Date.now() + timeoutMs;
26
- const seen = [];
27
- while (Date.now() < deadline) {
28
- for (const entry of queue.drain()) {
29
- seen.push(entry);
30
- if (predicate(entry))
31
- return entry;
32
- }
33
- await new Promise((resolve) => setTimeout(resolve, 100));
34
- }
35
- throw new Error(`Timed out. Saw: ${JSON.stringify(seen)}`);
36
- }
37
- afterEach(async () => {
38
- for (const instance of managers.splice(0))
39
- instance.shutdownAll();
40
- await Promise.all(tempDirs.splice(0).map((directory) => fs.rm(directory, { recursive: true, force: true })));
41
- });
42
- describe("ProcessManager wake rules", () => {
43
- // 45s, not the suite's 20s: the watcher ticks every 5s (WAKE_INTERVAL_MS),
44
- // and this test's own 30s budget throws a diagnostic ("Saw: ...") when the
45
- // watcher is broken. vitest's bare 20s cap must not fire first on a loaded
46
- // runner (observed on the macOS CI leg) or that diagnosis is lost.
47
- it("notifies with the matching line the moment new output matches the pattern", { timeout: 45_000 }, async () => {
48
- const queue = new AgentNotificationQueue();
49
- const pm = await manager(queue);
50
- const started = await pm.start("echo building; sleep 1; echo 'error TS2304: cannot find name'; sleep 60", process.cwd(), undefined, { pattern: /error TS\d+/, silenceMs: 120_000 });
51
- const entry = await waitForNotification(queue, (e) => e.text.includes("wake pattern"));
52
- expect(entry.text).toContain(started.id);
53
- expect(entry.text).toContain("cannot find name");
54
- expect(entry.text).toContain("Still running");
55
- expect(entry.terminal).toBe(false);
56
- });
57
- it("retires the wake watcher once every declared rule has fired", { timeout: 45_000 }, async () => {
58
- const queue = new AgentNotificationQueue();
59
- const pm = await manager(queue);
60
- await pm.start("echo doomed; sleep 60", process.cwd(), undefined, { pattern: /doomed/ });
61
- await waitForNotification(queue, (e) => e.text.includes("doomed"));
62
- // One-shot: the pattern rule is spent and it was the only rule, so the
63
- // watcher must be gone even though the process still runs.
64
- await new Promise((resolve) => setTimeout(resolve, 250));
65
- expect(pm.activeWakeWatchers()).not.toContain(pm.list().find((proc) => proc.command.includes("doomed"))?.id);
66
- });
67
- it("notifies when a running task goes silent past silenceMs", { timeout: 45_000 }, async () => {
68
- const queue = new AgentNotificationQueue();
69
- const pm = await manager(queue);
70
- const started = await pm.start("echo started; sleep 60", process.cwd(), undefined, {
71
- silenceMs: 6_000,
72
- });
73
- const entry = await waitForNotification(queue, (e) => e.text.includes("stalled"));
74
- expect(entry.text).toContain(started.id);
75
- expect(entry.text).toContain("Last output: started");
76
- expect(entry.terminal).toBe(false);
77
- });
78
- it("fires no wake notification and keeps no watcher without rules", async () => {
79
- const queue = new AgentNotificationQueue();
80
- const pm = await manager(queue);
81
- await pm.start("echo quiet-start; sleep 60", process.cwd());
82
- expect(pm.activeWakeWatchers()).toHaveLength(0);
83
- // Give any (buggy) watcher a tick interval to fire.
84
- await new Promise((resolve) => setTimeout(resolve, 5_500));
85
- const drained = queue.drain();
86
- expect(drained.every((entry) => !entry.text.includes("stalled"))).toBe(true);
87
- });
88
- it("drops the wake watcher when the process exits", { timeout: 45_000 }, async () => {
89
- const queue = new AgentNotificationQueue();
90
- const pm = await manager(queue);
91
- await pm.start("echo matched-then-exit", process.cwd(), undefined, {
92
- pattern: /never-matches/,
93
- });
94
- const exit = await waitForNotification(queue, (e) => e.terminal);
95
- expect(exit.text).toContain("exited");
96
- await new Promise((resolve) => setTimeout(resolve, 250));
97
- expect(pm.activeWakeWatchers()).toHaveLength(0);
98
- });
99
- });
100
- //# sourceMappingURL=process-manager-wake.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"process-manager-wake.test.js","sourceRoot":"","sources":["../../src/core/process-manager-wake.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=engine.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.test.d.ts","sourceRoot":"","sources":["../../../src/core/progress/engine.test.ts"],"names":[],"mappings":""}
@@ -1,136 +0,0 @@
1
- import { describe, expect, it } from "vitest";
2
- import { awardCommits, awardPrompt, applyStreak, commitXp, streakMultiplier } from "./engine.js";
3
- import { createEmptyProgress, dayKey } from "./store.js";
4
- const T0 = Date.parse("2026-07-01T12:00:00Z");
5
- const HOUR = 60 * 60 * 1000;
6
- const DAY = 24 * HOUR;
7
- function fresh() {
8
- return createEmptyProgress(new Date(T0));
9
- }
10
- function commit(sha, lines) {
11
- return { sha, patchId: `pid-${sha}`, linesChanged: lines };
12
- }
13
- describe("awardPrompt", () => {
14
- it("gives +10 for a normal prompt", () => {
15
- const { file, gained } = awardPrompt(fresh(), T0);
16
- expect(gained).toBe(10);
17
- expect(file.xp).toBe(10);
18
- expect(file.totals.prompts).toBe(1);
19
- expect(file.xpBySource.prompts).toBe(10);
20
- });
21
- it("diminishes to +2 after 15 prompts in a rolling hour", () => {
22
- let file = fresh();
23
- for (let i = 0; i < 15; i++) {
24
- file = awardPrompt(file, T0 + i * 1000).file;
25
- }
26
- const { gained } = awardPrompt(file, T0 + 16_000);
27
- expect(gained).toBe(2);
28
- });
29
- it("recovers full XP once old prompts age out of the hour", () => {
30
- let file = fresh();
31
- for (let i = 0; i < 15; i++) {
32
- file = awardPrompt(file, T0 + i * 1000).file;
33
- }
34
- const { gained } = awardPrompt(file, T0 + HOUR + 20_000);
35
- expect(gained).toBe(10);
36
- });
37
- it("tracks distinct projects by hash", () => {
38
- let file = fresh();
39
- file = awardPrompt(file, T0, "/a").file;
40
- file = awardPrompt(file, T0 + 1, "/b").file;
41
- file = awardPrompt(file, T0 + 2, "/a").file;
42
- expect(file.totals.projects).toHaveLength(2);
43
- });
44
- it("sets a fresh lastEvent nonce on every award", () => {
45
- const r1 = awardPrompt(fresh(), T0);
46
- const nonce1 = r1.file.lastEvent?.nonce;
47
- const r2 = awardPrompt(r1.file, T0 + 1000);
48
- expect(nonce1).toBeTruthy();
49
- expect(r2.file.lastEvent?.nonce).not.toBe(nonce1);
50
- });
51
- it("reports levelUp when crossing a boundary", () => {
52
- const file = fresh();
53
- file.xp = 300; // level 2 needs 303
54
- const { levelUp } = awardPrompt(file, T0);
55
- expect(levelUp).toEqual({ from: 1, to: 2, rankName: "Tinkerer" });
56
- });
57
- });
58
- describe("commitXp", () => {
59
- it("scales sub-linearly and caps at 100", () => {
60
- expect(commitXp(0)).toBe(20);
61
- expect(commitXp(25)).toBe(40); // 20 + √25×4
62
- expect(commitXp(400)).toBe(100); // capped
63
- expect(commitXp(1_000_000)).toBe(100);
64
- });
65
- });
66
- describe("awardCommits", () => {
67
- it("scores a commit by size", () => {
68
- const { file, gained } = awardCommits(fresh(), [commit("a", 25)], T0);
69
- expect(gained).toBe(40);
70
- expect(file.totals.commits).toBe(1);
71
- expect(file.totals.linesShipped).toBe(25);
72
- expect(file.xpBySource.commits).toBe(40);
73
- });
74
- it("dedupes by patch-id — revert/recommit earns 0", () => {
75
- const first = awardCommits(fresh(), [commit("a", 25)], T0);
76
- const second = awardCommits(first.file, [{ ...commit("b", 25), patchId: "pid-a" }], T0 + 1000);
77
- expect(second.gained).toBe(0);
78
- expect(second.file.totals.commits).toBe(1); // not even counted
79
- });
80
- it("caps XP-earning commits at 6 per rolling hour", () => {
81
- const commits = Array.from({ length: 8 }, (_, i) => commit(`c${i}`, 4));
82
- const { file, gained } = awardCommits(fresh(), commits, T0);
83
- expect(gained).toBe(6 * 28); // 20 + √4×4 = 28 each
84
- expect(file.totals.commits).toBe(8); // totals still count all
85
- });
86
- });
87
- describe("streaks", () => {
88
- it("multiplier tiers", () => {
89
- expect(streakMultiplier(1)).toBe(1);
90
- expect(streakMultiplier(3)).toBe(1.1);
91
- expect(streakMultiplier(7)).toBe(1.25);
92
- expect(streakMultiplier(14)).toBe(1.4);
93
- expect(streakMultiplier(30)).toBe(1.5);
94
- });
95
- it("increments on consecutive days and resets after a gap", () => {
96
- const file = fresh();
97
- applyStreak(file, T0);
98
- expect(file.streak.current).toBe(1);
99
- applyStreak(file, T0 + DAY);
100
- expect(file.streak.current).toBe(2);
101
- applyStreak(file, T0 + DAY + 1000); // same day — no change
102
- expect(file.streak.current).toBe(2);
103
- applyStreak(file, T0 + 4 * DAY); // gap
104
- expect(file.streak.current).toBe(1);
105
- expect(file.streak.best).toBe(2);
106
- });
107
- it("applies the multiplier to prompt XP", () => {
108
- const file = fresh();
109
- file.streak = { current: 6, best: 6, lastActiveDay: dayKey(new Date(T0 - DAY)) };
110
- const { gained } = awardPrompt(file, T0); // day 7 → ×1.25
111
- expect(gained).toBe(Math.round(10 * 1.25));
112
- expect(file.xpBySource.prompts).toBe(10);
113
- expect(file.xpBySource.streakBonus).toBe(gained - 10);
114
- });
115
- });
116
- describe("daily soft cap", () => {
117
- it("earns at 25% beyond 500 XP/day", () => {
118
- const file = fresh();
119
- file.rolling.dayXp = 500;
120
- const { gained } = awardPrompt(file, T0);
121
- expect(gained).toBe(Math.round(10 * 0.25));
122
- });
123
- it("splits an award straddling the cap", () => {
124
- const file = fresh();
125
- file.rolling.dayXp = 495;
126
- const { gained } = awardPrompt(file, T0); // 5 full + 5×0.25
127
- expect(gained).toBe(6);
128
- });
129
- it("resets on day rollover", () => {
130
- const file = fresh();
131
- file.rolling.dayXp = 500;
132
- const { gained } = awardPrompt(file, T0 + DAY);
133
- expect(gained).toBe(10);
134
- });
135
- });
136
- //# sourceMappingURL=engine.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"engine.test.js","sourceRoot":"","sources":["../../../src/core/progress/engine.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=git-xp.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-xp.test.d.ts","sourceRoot":"","sources":["../../../src/core/progress/git-xp.test.ts"],"names":[],"mappings":""}
@@ -1,88 +0,0 @@
1
- import { execFileSync } from "node:child_process";
2
- import fs from "node:fs/promises";
3
- import os from "node:os";
4
- import path from "node:path";
5
- import { afterEach, beforeEach, describe, expect, it } from "vitest";
6
- import { detectNewCommits } from "./git-xp.js";
7
- function hasGit() {
8
- try {
9
- execFileSync("git", ["--version"], { stdio: "ignore" });
10
- return true;
11
- }
12
- catch {
13
- return false;
14
- }
15
- }
16
- const gitAvailable = hasGit();
17
- const d = gitAvailable ? describe : describe.skip;
18
- let repo;
19
- function git(...args) {
20
- return execFileSync("git", args, {
21
- cwd: repo,
22
- encoding: "utf-8",
23
- env: {
24
- ...process.env,
25
- GIT_AUTHOR_NAME: "Test",
26
- GIT_AUTHOR_EMAIL: "t@t.t",
27
- GIT_COMMITTER_NAME: "Test",
28
- GIT_COMMITTER_EMAIL: "t@t.t",
29
- },
30
- }).trim();
31
- }
32
- async function commitFile(name, lines, message) {
33
- const content = Array.from({ length: lines }, (_, i) => `line ${i} of ${name}`).join("\n");
34
- await fs.writeFile(path.join(repo, name), content + "\n");
35
- git("add", name);
36
- git("commit", "-m", message);
37
- return git("rev-parse", "HEAD");
38
- }
39
- d("detectNewCommits", () => {
40
- beforeEach(async () => {
41
- repo = await fs.mkdtemp(path.join(os.tmpdir(), "gg-gitxp-"));
42
- git("init", "-q");
43
- });
44
- afterEach(async () => {
45
- await fs.rm(repo, { recursive: true, force: true });
46
- });
47
- it("first sight of a repo records HEAD without scoring", async () => {
48
- await commitFile("a.txt", 10, "initial");
49
- const result = await detectNewCommits(repo, undefined, Date.now());
50
- expect(result).not.toBeNull();
51
- expect(result.commits).toHaveLength(0);
52
- expect(result.head).toBe(git("rev-parse", "HEAD"));
53
- });
54
- it("scores new commits with line counts and patch ids", async () => {
55
- const base = await commitFile("a.txt", 5, "initial");
56
- const runStart = Date.now();
57
- await commitFile("b.txt", 30, "feature");
58
- const result = await detectNewCommits(repo, base, runStart);
59
- expect(result.commits).toHaveLength(1);
60
- expect(result.commits[0].linesChanged).toBe(30);
61
- expect(result.commits[0].patchId).toMatch(/^[0-9a-f]{40}/);
62
- });
63
- it("returns no commits when HEAD is unchanged", async () => {
64
- const head = await commitFile("a.txt", 5, "initial");
65
- const result = await detectNewCommits(repo, head, Date.now());
66
- expect(result.commits).toHaveLength(0);
67
- });
68
- it("excludes commits authored before the run window", async () => {
69
- const base = await commitFile("a.txt", 5, "initial");
70
- await commitFile("b.txt", 10, "old work");
71
- // Run "started" an hour from now — the commit above predates the window.
72
- const result = await detectNewCommits(repo, base, Date.now() + 60 * 60 * 1000);
73
- expect(result.commits).toHaveLength(0);
74
- });
75
- it("resets the baseline silently when lastHead is unknown", async () => {
76
- await commitFile("a.txt", 5, "initial");
77
- const result = await detectNewCommits(repo, "0".repeat(40), Date.now());
78
- expect(result).not.toBeNull();
79
- expect(result.commits).toHaveLength(0);
80
- });
81
- it("returns null for a non-repo directory", async () => {
82
- const plain = await fs.mkdtemp(path.join(os.tmpdir(), "gg-plain-"));
83
- const result = await detectNewCommits(plain, undefined, Date.now());
84
- expect(result).toBeNull();
85
- await fs.rm(plain, { recursive: true, force: true });
86
- });
87
- });
88
- //# sourceMappingURL=git-xp.test.js.map