@kenkaiiii/ggcoder 5.49.5 → 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 (950) hide show
  1. package/dist/core/settings-manager.d.ts +2 -2
  2. package/package.json +5 -5
  3. package/dist/app-sidecar-auth-broadcast.test.d.ts +0 -2
  4. package/dist/app-sidecar-auth-broadcast.test.d.ts.map +0 -1
  5. package/dist/app-sidecar-auth-broadcast.test.js +0 -383
  6. package/dist/app-sidecar-auth-broadcast.test.js.map +0 -1
  7. package/dist/app-sidecar-sessions.test.d.ts +0 -2
  8. package/dist/app-sidecar-sessions.test.d.ts.map +0 -1
  9. package/dist/app-sidecar-sessions.test.js +0 -178
  10. package/dist/app-sidecar-sessions.test.js.map +0 -1
  11. package/dist/chat-agents/general.test.d.ts +0 -2
  12. package/dist/chat-agents/general.test.d.ts.map +0 -1
  13. package/dist/chat-agents/general.test.js +0 -53
  14. package/dist/chat-agents/general.test.js.map +0 -1
  15. package/dist/chat-agents/jiwa.test.d.ts +0 -2
  16. package/dist/chat-agents/jiwa.test.d.ts.map +0 -1
  17. package/dist/chat-agents/jiwa.test.js +0 -66
  18. package/dist/chat-agents/jiwa.test.js.map +0 -1
  19. package/dist/chat-agents/memory.test.d.ts +0 -2
  20. package/dist/chat-agents/memory.test.d.ts.map +0 -1
  21. package/dist/chat-agents/memory.test.js +0 -165
  22. package/dist/chat-agents/memory.test.js.map +0 -1
  23. package/dist/chat-agents/specialists.test.d.ts +0 -2
  24. package/dist/chat-agents/specialists.test.d.ts.map +0 -1
  25. package/dist/chat-agents/specialists.test.js +0 -98
  26. package/dist/chat-agents/specialists.test.js.map +0 -1
  27. package/dist/cli/command-routing.test.d.ts +0 -2
  28. package/dist/cli/command-routing.test.d.ts.map +0 -1
  29. package/dist/cli/command-routing.test.js +0 -60
  30. package/dist/cli/command-routing.test.js.map +0 -1
  31. package/dist/config.test.d.ts +0 -2
  32. package/dist/config.test.d.ts.map +0 -1
  33. package/dist/config.test.js +0 -148
  34. package/dist/config.test.js.map +0 -1
  35. package/dist/core/agent-mcp-passthrough.test.d.ts +0 -2
  36. package/dist/core/agent-mcp-passthrough.test.d.ts.map +0 -1
  37. package/dist/core/agent-mcp-passthrough.test.js +0 -61
  38. package/dist/core/agent-mcp-passthrough.test.js.map +0 -1
  39. package/dist/core/agent-notifications.test.d.ts +0 -2
  40. package/dist/core/agent-notifications.test.d.ts.map +0 -1
  41. package/dist/core/agent-notifications.test.js +0 -97
  42. package/dist/core/agent-notifications.test.js.map +0 -1
  43. package/dist/core/agent-session-add-dir.test.d.ts +0 -2
  44. package/dist/core/agent-session-add-dir.test.d.ts.map +0 -1
  45. package/dist/core/agent-session-add-dir.test.js +0 -110
  46. package/dist/core/agent-session-add-dir.test.js.map +0 -1
  47. package/dist/core/agent-session-checkpoint-flush.test.d.ts +0 -2
  48. package/dist/core/agent-session-checkpoint-flush.test.d.ts.map +0 -1
  49. package/dist/core/agent-session-checkpoint-flush.test.js +0 -201
  50. package/dist/core/agent-session-checkpoint-flush.test.js.map +0 -1
  51. package/dist/core/agent-session-compaction.test.d.ts +0 -2
  52. package/dist/core/agent-session-compaction.test.d.ts.map +0 -1
  53. package/dist/core/agent-session-compaction.test.js +0 -1157
  54. package/dist/core/agent-session-compaction.test.js.map +0 -1
  55. package/dist/core/agent-session-crash-durability.test.d.ts +0 -2
  56. package/dist/core/agent-session-crash-durability.test.d.ts.map +0 -1
  57. package/dist/core/agent-session-crash-durability.test.js +0 -102
  58. package/dist/core/agent-session-crash-durability.test.js.map +0 -1
  59. package/dist/core/agent-session-marker-anchors.test.d.ts +0 -2
  60. package/dist/core/agent-session-marker-anchors.test.d.ts.map +0 -1
  61. package/dist/core/agent-session-marker-anchors.test.js +0 -326
  62. package/dist/core/agent-session-marker-anchors.test.js.map +0 -1
  63. package/dist/core/agent-session-memory-tail.test.d.ts +0 -2
  64. package/dist/core/agent-session-memory-tail.test.d.ts.map +0 -1
  65. package/dist/core/agent-session-memory-tail.test.js +0 -119
  66. package/dist/core/agent-session-memory-tail.test.js.map +0 -1
  67. package/dist/core/agent-session-model-switch.test.d.ts +0 -2
  68. package/dist/core/agent-session-model-switch.test.d.ts.map +0 -1
  69. package/dist/core/agent-session-model-switch.test.js +0 -161
  70. package/dist/core/agent-session-model-switch.test.js.map +0 -1
  71. package/dist/core/agent-session-notifications.test.d.ts +0 -2
  72. package/dist/core/agent-session-notifications.test.d.ts.map +0 -1
  73. package/dist/core/agent-session-notifications.test.js +0 -114
  74. package/dist/core/agent-session-notifications.test.js.map +0 -1
  75. package/dist/core/agent-session-pre-init-arming.test.d.ts +0 -2
  76. package/dist/core/agent-session-pre-init-arming.test.d.ts.map +0 -1
  77. package/dist/core/agent-session-pre-init-arming.test.js +0 -60
  78. package/dist/core/agent-session-pre-init-arming.test.js.map +0 -1
  79. package/dist/core/agent-session-process-gate.test.d.ts +0 -2
  80. package/dist/core/agent-session-process-gate.test.d.ts.map +0 -1
  81. package/dist/core/agent-session-process-gate.test.js +0 -98
  82. package/dist/core/agent-session-process-gate.test.js.map +0 -1
  83. package/dist/core/agent-session-queue.test.d.ts +0 -2
  84. package/dist/core/agent-session-queue.test.d.ts.map +0 -1
  85. package/dist/core/agent-session-queue.test.js +0 -184
  86. package/dist/core/agent-session-queue.test.js.map +0 -1
  87. package/dist/core/agent-session-review-coverage.test.d.ts +0 -2
  88. package/dist/core/agent-session-review-coverage.test.d.ts.map +0 -1
  89. package/dist/core/agent-session-review-coverage.test.js +0 -191
  90. package/dist/core/agent-session-review-coverage.test.js.map +0 -1
  91. package/dist/core/agent-session-slash-restore.test.d.ts +0 -2
  92. package/dist/core/agent-session-slash-restore.test.d.ts.map +0 -1
  93. package/dist/core/agent-session-slash-restore.test.js +0 -121
  94. package/dist/core/agent-session-slash-restore.test.js.map +0 -1
  95. package/dist/core/agent-session-subagent-policy.test.d.ts +0 -2
  96. package/dist/core/agent-session-subagent-policy.test.d.ts.map +0 -1
  97. package/dist/core/agent-session-subagent-policy.test.js +0 -40
  98. package/dist/core/agent-session-subagent-policy.test.js.map +0 -1
  99. package/dist/core/agent-session-tool-result-policy.test.d.ts +0 -2
  100. package/dist/core/agent-session-tool-result-policy.test.d.ts.map +0 -1
  101. package/dist/core/agent-session-tool-result-policy.test.js +0 -25
  102. package/dist/core/agent-session-tool-result-policy.test.js.map +0 -1
  103. package/dist/core/agent-session-tool-tiers.test.d.ts +0 -2
  104. package/dist/core/agent-session-tool-tiers.test.d.ts.map +0 -1
  105. package/dist/core/agent-session-tool-tiers.test.js +0 -138
  106. package/dist/core/agent-session-tool-tiers.test.js.map +0 -1
  107. package/dist/core/agent-session-verification-flow.test.d.ts +0 -2
  108. package/dist/core/agent-session-verification-flow.test.d.ts.map +0 -1
  109. package/dist/core/agent-session-verification-flow.test.js +0 -125
  110. package/dist/core/agent-session-verification-flow.test.js.map +0 -1
  111. package/dist/core/agent-session-verification-gate.test.d.ts +0 -2
  112. package/dist/core/agent-session-verification-gate.test.d.ts.map +0 -1
  113. package/dist/core/agent-session-verification-gate.test.js +0 -137
  114. package/dist/core/agent-session-verification-gate.test.js.map +0 -1
  115. package/dist/core/agent-tools-allowlist.test.d.ts +0 -2
  116. package/dist/core/agent-tools-allowlist.test.d.ts.map +0 -1
  117. package/dist/core/agent-tools-allowlist.test.js +0 -74
  118. package/dist/core/agent-tools-allowlist.test.js.map +0 -1
  119. package/dist/core/agents.test.d.ts +0 -2
  120. package/dist/core/agents.test.d.ts.map +0 -1
  121. package/dist/core/agents.test.js +0 -147
  122. package/dist/core/agents.test.js.map +0 -1
  123. package/dist/core/auto-update.test.d.ts +0 -2
  124. package/dist/core/auto-update.test.d.ts.map +0 -1
  125. package/dist/core/auto-update.test.js +0 -204
  126. package/dist/core/auto-update.test.js.map +0 -1
  127. package/dist/core/autopilot-cycle.test.d.ts +0 -2
  128. package/dist/core/autopilot-cycle.test.d.ts.map +0 -1
  129. package/dist/core/autopilot-cycle.test.js +0 -375
  130. package/dist/core/autopilot-cycle.test.js.map +0 -1
  131. package/dist/core/autopilot-gate.test.d.ts +0 -2
  132. package/dist/core/autopilot-gate.test.d.ts.map +0 -1
  133. package/dist/core/autopilot-gate.test.js +0 -298
  134. package/dist/core/autopilot-gate.test.js.map +0 -1
  135. package/dist/core/autopilot-verdict.test.d.ts +0 -2
  136. package/dist/core/autopilot-verdict.test.d.ts.map +0 -1
  137. package/dist/core/autopilot-verdict.test.js +0 -153
  138. package/dist/core/autopilot-verdict.test.js.map +0 -1
  139. package/dist/core/checkpoint-store.test.d.ts +0 -2
  140. package/dist/core/checkpoint-store.test.d.ts.map +0 -1
  141. package/dist/core/checkpoint-store.test.js +0 -111
  142. package/dist/core/checkpoint-store.test.js.map +0 -1
  143. package/dist/core/code-retrieval-chunkers.test.d.ts +0 -2
  144. package/dist/core/code-retrieval-chunkers.test.d.ts.map +0 -1
  145. package/dist/core/code-retrieval-chunkers.test.js +0 -203
  146. package/dist/core/code-retrieval-chunkers.test.js.map +0 -1
  147. package/dist/core/compaction/active-context.test.d.ts +0 -2
  148. package/dist/core/compaction/active-context.test.d.ts.map +0 -1
  149. package/dist/core/compaction/active-context.test.js +0 -57
  150. package/dist/core/compaction/active-context.test.js.map +0 -1
  151. package/dist/core/compaction/compactor.test.d.ts +0 -2
  152. package/dist/core/compaction/compactor.test.d.ts.map +0 -1
  153. package/dist/core/compaction/compactor.test.js +0 -1072
  154. package/dist/core/compaction/compactor.test.js.map +0 -1
  155. package/dist/core/compaction/policy.test.d.ts +0 -2
  156. package/dist/core/compaction/policy.test.d.ts.map +0 -1
  157. package/dist/core/compaction/policy.test.js +0 -35
  158. package/dist/core/compaction/policy.test.js.map +0 -1
  159. package/dist/core/compaction/query-aware-selector.test.d.ts +0 -2
  160. package/dist/core/compaction/query-aware-selector.test.d.ts.map +0 -1
  161. package/dist/core/compaction/query-aware-selector.test.js +0 -96
  162. package/dist/core/compaction/query-aware-selector.test.js.map +0 -1
  163. package/dist/core/compaction/token-estimator.test.d.ts +0 -2
  164. package/dist/core/compaction/token-estimator.test.d.ts.map +0 -1
  165. package/dist/core/compaction/token-estimator.test.js +0 -283
  166. package/dist/core/compaction/token-estimator.test.js.map +0 -1
  167. package/dist/core/compaction/tool-result-pruner.test.d.ts +0 -2
  168. package/dist/core/compaction/tool-result-pruner.test.d.ts.map +0 -1
  169. package/dist/core/compaction/tool-result-pruner.test.js +0 -320
  170. package/dist/core/compaction/tool-result-pruner.test.js.map +0 -1
  171. package/dist/core/context-limits.test.d.ts +0 -2
  172. package/dist/core/context-limits.test.d.ts.map +0 -1
  173. package/dist/core/context-limits.test.js +0 -55
  174. package/dist/core/context-limits.test.js.map +0 -1
  175. package/dist/core/continue-replay-inventory.test.d.ts +0 -2
  176. package/dist/core/continue-replay-inventory.test.d.ts.map +0 -1
  177. package/dist/core/continue-replay-inventory.test.js +0 -42
  178. package/dist/core/continue-replay-inventory.test.js.map +0 -1
  179. package/dist/core/encode-cwd.test.d.ts +0 -2
  180. package/dist/core/encode-cwd.test.d.ts.map +0 -1
  181. package/dist/core/encode-cwd.test.js +0 -80
  182. package/dist/core/encode-cwd.test.js.map +0 -1
  183. package/dist/core/event-bus.test.d.ts +0 -2
  184. package/dist/core/event-bus.test.d.ts.map +0 -1
  185. package/dist/core/event-bus.test.js +0 -33
  186. package/dist/core/event-bus.test.js.map +0 -1
  187. package/dist/core/extensions/plugin-bundles.test.d.ts +0 -2
  188. package/dist/core/extensions/plugin-bundles.test.d.ts.map +0 -1
  189. package/dist/core/extensions/plugin-bundles.test.js +0 -110
  190. package/dist/core/extensions/plugin-bundles.test.js.map +0 -1
  191. package/dist/core/foreign-session-import.test.d.ts +0 -2
  192. package/dist/core/foreign-session-import.test.d.ts.map +0 -1
  193. package/dist/core/foreign-session-import.test.js +0 -220
  194. package/dist/core/foreign-session-import.test.js.map +0 -1
  195. package/dist/core/hashline-edit-benchmark.test.d.ts +0 -2
  196. package/dist/core/hashline-edit-benchmark.test.d.ts.map +0 -1
  197. package/dist/core/hashline-edit-benchmark.test.js +0 -190
  198. package/dist/core/hashline-edit-benchmark.test.js.map +0 -1
  199. package/dist/core/ideal-review.test.d.ts +0 -2
  200. package/dist/core/ideal-review.test.d.ts.map +0 -1
  201. package/dist/core/ideal-review.test.js +0 -242
  202. package/dist/core/ideal-review.test.js.map +0 -1
  203. package/dist/core/input-normalization.test.d.ts +0 -2
  204. package/dist/core/input-normalization.test.d.ts.map +0 -1
  205. package/dist/core/input-normalization.test.js +0 -75
  206. package/dist/core/input-normalization.test.js.map +0 -1
  207. package/dist/core/json-mode-flag-parity.test.d.ts +0 -2
  208. package/dist/core/json-mode-flag-parity.test.d.ts.map +0 -1
  209. package/dist/core/json-mode-flag-parity.test.js +0 -66
  210. package/dist/core/json-mode-flag-parity.test.js.map +0 -1
  211. package/dist/core/ken-context.test.d.ts +0 -2
  212. package/dist/core/ken-context.test.d.ts.map +0 -1
  213. package/dist/core/ken-context.test.js +0 -342
  214. package/dist/core/ken-context.test.js.map +0 -1
  215. package/dist/core/ken-model.test.d.ts +0 -2
  216. package/dist/core/ken-model.test.d.ts.map +0 -1
  217. package/dist/core/ken-model.test.js +0 -51
  218. package/dist/core/ken-model.test.js.map +0 -1
  219. package/dist/core/ken-prompt.test.d.ts +0 -2
  220. package/dist/core/ken-prompt.test.d.ts.map +0 -1
  221. package/dist/core/ken-prompt.test.js +0 -191
  222. package/dist/core/ken-prompt.test.js.map +0 -1
  223. package/dist/core/language-detector.test.d.ts +0 -2
  224. package/dist/core/language-detector.test.d.ts.map +0 -1
  225. package/dist/core/language-detector.test.js +0 -109
  226. package/dist/core/language-detector.test.js.map +0 -1
  227. package/dist/core/local-endpoint-store.test.d.ts +0 -2
  228. package/dist/core/local-endpoint-store.test.d.ts.map +0 -1
  229. package/dist/core/local-endpoint-store.test.js +0 -123
  230. package/dist/core/local-endpoint-store.test.js.map +0 -1
  231. package/dist/core/loop-breaker.test.d.ts +0 -2
  232. package/dist/core/loop-breaker.test.d.ts.map +0 -1
  233. package/dist/core/loop-breaker.test.js +0 -238
  234. package/dist/core/loop-breaker.test.js.map +0 -1
  235. package/dist/core/lsp/client-navigation.test.d.ts +0 -2
  236. package/dist/core/lsp/client-navigation.test.d.ts.map +0 -1
  237. package/dist/core/lsp/client-navigation.test.js +0 -135
  238. package/dist/core/lsp/client-navigation.test.js.map +0 -1
  239. package/dist/core/lsp/format.test.d.ts +0 -2
  240. package/dist/core/lsp/format.test.d.ts.map +0 -1
  241. package/dist/core/lsp/format.test.js +0 -56
  242. package/dist/core/lsp/format.test.js.map +0 -1
  243. package/dist/core/lsp/integration.test.d.ts +0 -2
  244. package/dist/core/lsp/integration.test.d.ts.map +0 -1
  245. package/dist/core/lsp/integration.test.js +0 -60
  246. package/dist/core/lsp/integration.test.js.map +0 -1
  247. package/dist/core/lsp/jsonrpc.test.d.ts +0 -2
  248. package/dist/core/lsp/jsonrpc.test.d.ts.map +0 -1
  249. package/dist/core/lsp/jsonrpc.test.js +0 -127
  250. package/dist/core/lsp/jsonrpc.test.js.map +0 -1
  251. package/dist/core/lsp/manager-navigation.test.d.ts +0 -2
  252. package/dist/core/lsp/manager-navigation.test.d.ts.map +0 -1
  253. package/dist/core/lsp/manager-navigation.test.js +0 -121
  254. package/dist/core/lsp/manager-navigation.test.js.map +0 -1
  255. package/dist/core/lsp/manager.test.d.ts +0 -2
  256. package/dist/core/lsp/manager.test.d.ts.map +0 -1
  257. package/dist/core/lsp/manager.test.js +0 -286
  258. package/dist/core/lsp/manager.test.js.map +0 -1
  259. package/dist/core/lsp/pool.test.d.ts +0 -2
  260. package/dist/core/lsp/pool.test.d.ts.map +0 -1
  261. package/dist/core/lsp/pool.test.js +0 -286
  262. package/dist/core/lsp/pool.test.js.map +0 -1
  263. package/dist/core/lsp/servers.test.d.ts +0 -2
  264. package/dist/core/lsp/servers.test.d.ts.map +0 -1
  265. package/dist/core/lsp/servers.test.js +0 -67
  266. package/dist/core/lsp/servers.test.js.map +0 -1
  267. package/dist/core/lsp/uri.test.d.ts +0 -2
  268. package/dist/core/lsp/uri.test.d.ts.map +0 -1
  269. package/dist/core/lsp/uri.test.js +0 -56
  270. package/dist/core/lsp/uri.test.js.map +0 -1
  271. package/dist/core/lsp/windows.test.d.ts +0 -2
  272. package/dist/core/lsp/windows.test.d.ts.map +0 -1
  273. package/dist/core/lsp/windows.test.js +0 -239
  274. package/dist/core/lsp/windows.test.js.map +0 -1
  275. package/dist/core/mcp/catalog-cache.test.d.ts +0 -2
  276. package/dist/core/mcp/catalog-cache.test.d.ts.map +0 -1
  277. package/dist/core/mcp/catalog-cache.test.js +0 -99
  278. package/dist/core/mcp/catalog-cache.test.js.map +0 -1
  279. package/dist/core/mcp/client-session-recovery.test.d.ts +0 -2
  280. package/dist/core/mcp/client-session-recovery.test.d.ts.map +0 -1
  281. package/dist/core/mcp/client-session-recovery.test.js +0 -231
  282. package/dist/core/mcp/client-session-recovery.test.js.map +0 -1
  283. package/dist/core/mcp/content.test.d.ts +0 -2
  284. package/dist/core/mcp/content.test.d.ts.map +0 -1
  285. package/dist/core/mcp/content.test.js +0 -152
  286. package/dist/core/mcp/content.test.js.map +0 -1
  287. package/dist/core/mcp/defaults.test.d.ts +0 -2
  288. package/dist/core/mcp/defaults.test.d.ts.map +0 -1
  289. package/dist/core/mcp/defaults.test.js +0 -60
  290. package/dist/core/mcp/defaults.test.js.map +0 -1
  291. package/dist/core/mcp/elicitation.test.d.ts +0 -2
  292. package/dist/core/mcp/elicitation.test.d.ts.map +0 -1
  293. package/dist/core/mcp/elicitation.test.js +0 -158
  294. package/dist/core/mcp/elicitation.test.js.map +0 -1
  295. package/dist/core/mcp/legacy-negotiation.test.d.ts +0 -2
  296. package/dist/core/mcp/legacy-negotiation.test.d.ts.map +0 -1
  297. package/dist/core/mcp/legacy-negotiation.test.js +0 -80
  298. package/dist/core/mcp/legacy-negotiation.test.js.map +0 -1
  299. package/dist/core/mcp/loopback.test.d.ts +0 -2
  300. package/dist/core/mcp/loopback.test.d.ts.map +0 -1
  301. package/dist/core/mcp/loopback.test.js +0 -87
  302. package/dist/core/mcp/loopback.test.js.map +0 -1
  303. package/dist/core/mcp/oauth-store.test.d.ts +0 -2
  304. package/dist/core/mcp/oauth-store.test.d.ts.map +0 -1
  305. package/dist/core/mcp/oauth-store.test.js +0 -94
  306. package/dist/core/mcp/oauth-store.test.js.map +0 -1
  307. package/dist/core/mcp/parse-add-command.test.d.ts +0 -2
  308. package/dist/core/mcp/parse-add-command.test.d.ts.map +0 -1
  309. package/dist/core/mcp/parse-add-command.test.js +0 -81
  310. package/dist/core/mcp/parse-add-command.test.js.map +0 -1
  311. package/dist/core/mcp/resolve-stdio.test.d.ts +0 -2
  312. package/dist/core/mcp/resolve-stdio.test.d.ts.map +0 -1
  313. package/dist/core/mcp/resolve-stdio.test.js +0 -239
  314. package/dist/core/mcp/resolve-stdio.test.js.map +0 -1
  315. package/dist/core/mcp/session-elicitation-wiring.test.d.ts +0 -2
  316. package/dist/core/mcp/session-elicitation-wiring.test.d.ts.map +0 -1
  317. package/dist/core/mcp/session-elicitation-wiring.test.js +0 -138
  318. package/dist/core/mcp/session-elicitation-wiring.test.js.map +0 -1
  319. package/dist/core/mcp/shared-pool.test.d.ts +0 -2
  320. package/dist/core/mcp/shared-pool.test.d.ts.map +0 -1
  321. package/dist/core/mcp/shared-pool.test.js +0 -425
  322. package/dist/core/mcp/shared-pool.test.js.map +0 -1
  323. package/dist/core/mcp/store.test.d.ts +0 -2
  324. package/dist/core/mcp/store.test.d.ts.map +0 -1
  325. package/dist/core/mcp/store.test.js +0 -110
  326. package/dist/core/mcp/store.test.js.map +0 -1
  327. package/dist/core/mcp/when-connected.test.d.ts +0 -2
  328. package/dist/core/mcp/when-connected.test.d.ts.map +0 -1
  329. package/dist/core/mcp/when-connected.test.js +0 -46
  330. package/dist/core/mcp/when-connected.test.js.map +0 -1
  331. package/dist/core/message-images.test.d.ts +0 -2
  332. package/dist/core/message-images.test.d.ts.map +0 -1
  333. package/dist/core/message-images.test.js +0 -62
  334. package/dist/core/message-images.test.js.map +0 -1
  335. package/dist/core/network-guard.test.d.ts +0 -2
  336. package/dist/core/network-guard.test.d.ts.map +0 -1
  337. package/dist/core/network-guard.test.js +0 -72
  338. package/dist/core/network-guard.test.js.map +0 -1
  339. package/dist/core/persistent-shell.test.d.ts +0 -2
  340. package/dist/core/persistent-shell.test.d.ts.map +0 -1
  341. package/dist/core/persistent-shell.test.js +0 -84
  342. package/dist/core/persistent-shell.test.js.map +0 -1
  343. package/dist/core/process-gate.test.d.ts +0 -2
  344. package/dist/core/process-gate.test.d.ts.map +0 -1
  345. package/dist/core/process-gate.test.js +0 -87
  346. package/dist/core/process-gate.test.js.map +0 -1
  347. package/dist/core/process-manager-dev-server-repro.test.d.ts +0 -2
  348. package/dist/core/process-manager-dev-server-repro.test.d.ts.map +0 -1
  349. package/dist/core/process-manager-dev-server-repro.test.js +0 -225
  350. package/dist/core/process-manager-dev-server-repro.test.js.map +0 -1
  351. package/dist/core/process-manager-notifications.test.d.ts +0 -2
  352. package/dist/core/process-manager-notifications.test.d.ts.map +0 -1
  353. package/dist/core/process-manager-notifications.test.js +0 -245
  354. package/dist/core/process-manager-notifications.test.js.map +0 -1
  355. package/dist/core/process-manager-wake.test.d.ts +0 -2
  356. package/dist/core/process-manager-wake.test.d.ts.map +0 -1
  357. package/dist/core/process-manager-wake.test.js +0 -100
  358. package/dist/core/process-manager-wake.test.js.map +0 -1
  359. package/dist/core/progress/engine.test.d.ts +0 -2
  360. package/dist/core/progress/engine.test.d.ts.map +0 -1
  361. package/dist/core/progress/engine.test.js +0 -136
  362. package/dist/core/progress/engine.test.js.map +0 -1
  363. package/dist/core/progress/git-xp.test.d.ts +0 -2
  364. package/dist/core/progress/git-xp.test.d.ts.map +0 -1
  365. package/dist/core/progress/git-xp.test.js +0 -88
  366. package/dist/core/progress/git-xp.test.js.map +0 -1
  367. package/dist/core/progress/ranks.test.d.ts +0 -2
  368. package/dist/core/progress/ranks.test.d.ts.map +0 -1
  369. package/dist/core/progress/ranks.test.js +0 -100
  370. package/dist/core/progress/ranks.test.js.map +0 -1
  371. package/dist/core/progress/rebuild.test.d.ts +0 -2
  372. package/dist/core/progress/rebuild.test.d.ts.map +0 -1
  373. package/dist/core/progress/rebuild.test.js +0 -103
  374. package/dist/core/progress/rebuild.test.js.map +0 -1
  375. package/dist/core/progress/store.test.d.ts +0 -2
  376. package/dist/core/progress/store.test.d.ts.map +0 -1
  377. package/dist/core/progress/store.test.js +0 -108
  378. package/dist/core/progress/store.test.js.map +0 -1
  379. package/dist/core/project-discovery.test.d.ts +0 -2
  380. package/dist/core/project-discovery.test.d.ts.map +0 -1
  381. package/dist/core/project-discovery.test.js +0 -519
  382. package/dist/core/project-discovery.test.js.map +0 -1
  383. package/dist/core/prompt-commands.test.d.ts +0 -2
  384. package/dist/core/prompt-commands.test.d.ts.map +0 -1
  385. package/dist/core/prompt-commands.test.js +0 -180
  386. package/dist/core/prompt-commands.test.js.map +0 -1
  387. package/dist/core/provider-cache.e2e.test.d.ts +0 -2
  388. package/dist/core/provider-cache.e2e.test.d.ts.map +0 -1
  389. package/dist/core/provider-cache.e2e.test.js +0 -125
  390. package/dist/core/provider-cache.e2e.test.js.map +0 -1
  391. package/dist/core/radio.test.d.ts +0 -2
  392. package/dist/core/radio.test.d.ts.map +0 -1
  393. package/dist/core/radio.test.js +0 -117
  394. package/dist/core/radio.test.js.map +0 -1
  395. package/dist/core/regrounding.test.d.ts +0 -2
  396. package/dist/core/regrounding.test.d.ts.map +0 -1
  397. package/dist/core/regrounding.test.js +0 -38
  398. package/dist/core/regrounding.test.js.map +0 -1
  399. package/dist/core/resolve-start.test.d.ts +0 -2
  400. package/dist/core/resolve-start.test.d.ts.map +0 -1
  401. package/dist/core/resolve-start.test.js +0 -68
  402. package/dist/core/resolve-start.test.js.map +0 -1
  403. package/dist/core/run-claim.test.d.ts +0 -2
  404. package/dist/core/run-claim.test.d.ts.map +0 -1
  405. package/dist/core/run-claim.test.js +0 -107
  406. package/dist/core/run-claim.test.js.map +0 -1
  407. package/dist/core/run-journal.test.d.ts +0 -2
  408. package/dist/core/run-journal.test.d.ts.map +0 -1
  409. package/dist/core/run-journal.test.js +0 -195
  410. package/dist/core/run-journal.test.js.map +0 -1
  411. package/dist/core/run-lifecycle.test.d.ts +0 -2
  412. package/dist/core/run-lifecycle.test.d.ts.map +0 -1
  413. package/dist/core/run-lifecycle.test.js +0 -64
  414. package/dist/core/run-lifecycle.test.js.map +0 -1
  415. package/dist/core/sandbox-feedback.test.d.ts +0 -2
  416. package/dist/core/sandbox-feedback.test.d.ts.map +0 -1
  417. package/dist/core/sandbox-feedback.test.js +0 -32
  418. package/dist/core/sandbox-feedback.test.js.map +0 -1
  419. package/dist/core/sandbox.test.d.ts +0 -2
  420. package/dist/core/sandbox.test.d.ts.map +0 -1
  421. package/dist/core/sandbox.test.js +0 -288
  422. package/dist/core/sandbox.test.js.map +0 -1
  423. package/dist/core/semantic-search-benchmark.test.d.ts +0 -2
  424. package/dist/core/semantic-search-benchmark.test.d.ts.map +0 -1
  425. package/dist/core/semantic-search-benchmark.test.js +0 -89
  426. package/dist/core/semantic-search-benchmark.test.js.map +0 -1
  427. package/dist/core/session-compaction.test.d.ts +0 -2
  428. package/dist/core/session-compaction.test.d.ts.map +0 -1
  429. package/dist/core/session-compaction.test.js +0 -92
  430. package/dist/core/session-compaction.test.js.map +0 -1
  431. package/dist/core/session-export.test.d.ts +0 -2
  432. package/dist/core/session-export.test.d.ts.map +0 -1
  433. package/dist/core/session-export.test.js +0 -353
  434. package/dist/core/session-export.test.js.map +0 -1
  435. package/dist/core/session-history.test.d.ts +0 -2
  436. package/dist/core/session-history.test.d.ts.map +0 -1
  437. package/dist/core/session-history.test.js +0 -272
  438. package/dist/core/session-history.test.js.map +0 -1
  439. package/dist/core/session-injections.test.d.ts +0 -2
  440. package/dist/core/session-injections.test.d.ts.map +0 -1
  441. package/dist/core/session-injections.test.js +0 -117
  442. package/dist/core/session-injections.test.js.map +0 -1
  443. package/dist/core/session-manager.test.d.ts +0 -2
  444. package/dist/core/session-manager.test.d.ts.map +0 -1
  445. package/dist/core/session-manager.test.js +0 -571
  446. package/dist/core/session-manager.test.js.map +0 -1
  447. package/dist/core/session-notification-visibility.test.d.ts +0 -2
  448. package/dist/core/session-notification-visibility.test.d.ts.map +0 -1
  449. package/dist/core/session-notification-visibility.test.js +0 -113
  450. package/dist/core/session-notification-visibility.test.js.map +0 -1
  451. package/dist/core/session-reconstructability.test.d.ts +0 -2
  452. package/dist/core/session-reconstructability.test.d.ts.map +0 -1
  453. package/dist/core/session-reconstructability.test.js +0 -105
  454. package/dist/core/session-reconstructability.test.js.map +0 -1
  455. package/dist/core/session-restore-display.test.d.ts +0 -2
  456. package/dist/core/session-restore-display.test.d.ts.map +0 -1
  457. package/dist/core/session-restore-display.test.js +0 -103
  458. package/dist/core/session-restore-display.test.js.map +0 -1
  459. package/dist/core/session-storage-fd-leak.test.d.ts +0 -2
  460. package/dist/core/session-storage-fd-leak.test.d.ts.map +0 -1
  461. package/dist/core/session-storage-fd-leak.test.js +0 -116
  462. package/dist/core/session-storage-fd-leak.test.js.map +0 -1
  463. package/dist/core/session-storage.test.d.ts +0 -2
  464. package/dist/core/session-storage.test.d.ts.map +0 -1
  465. package/dist/core/session-storage.test.js +0 -277
  466. package/dist/core/session-storage.test.js.map +0 -1
  467. package/dist/core/setup-history.test.d.ts +0 -2
  468. package/dist/core/setup-history.test.d.ts.map +0 -1
  469. package/dist/core/setup-history.test.js +0 -59
  470. package/dist/core/setup-history.test.js.map +0 -1
  471. package/dist/core/shell.test.d.ts +0 -2
  472. package/dist/core/shell.test.d.ts.map +0 -1
  473. package/dist/core/shell.test.js +0 -87
  474. package/dist/core/shell.test.js.map +0 -1
  475. package/dist/core/shutdown.test.d.ts +0 -2
  476. package/dist/core/shutdown.test.d.ts.map +0 -1
  477. package/dist/core/shutdown.test.js +0 -160
  478. package/dist/core/shutdown.test.js.map +0 -1
  479. package/dist/core/sidecar-error-reporter.test.d.ts +0 -2
  480. package/dist/core/sidecar-error-reporter.test.d.ts.map +0 -1
  481. package/dist/core/sidecar-error-reporter.test.js +0 -61
  482. package/dist/core/sidecar-error-reporter.test.js.map +0 -1
  483. package/dist/core/skills-routing.test.d.ts +0 -2
  484. package/dist/core/skills-routing.test.d.ts.map +0 -1
  485. package/dist/core/skills-routing.test.js +0 -310
  486. package/dist/core/skills-routing.test.js.map +0 -1
  487. package/dist/core/slash-commands.test.d.ts +0 -2
  488. package/dist/core/slash-commands.test.d.ts.map +0 -1
  489. package/dist/core/slash-commands.test.js +0 -59
  490. package/dist/core/slash-commands.test.js.map +0 -1
  491. package/dist/core/source-maps.test.d.ts +0 -2
  492. package/dist/core/source-maps.test.d.ts.map +0 -1
  493. package/dist/core/source-maps.test.js +0 -175
  494. package/dist/core/source-maps.test.js.map +0 -1
  495. package/dist/core/speed-benchmark.test.d.ts +0 -2
  496. package/dist/core/speed-benchmark.test.d.ts.map +0 -1
  497. package/dist/core/speed-benchmark.test.js +0 -102
  498. package/dist/core/speed-benchmark.test.js.map +0 -1
  499. package/dist/core/subagent-manager.test.d.ts +0 -2
  500. package/dist/core/subagent-manager.test.d.ts.map +0 -1
  501. package/dist/core/subagent-manager.test.js +0 -536
  502. package/dist/core/subagent-manager.test.js.map +0 -1
  503. package/dist/core/subagent-store.test.d.ts +0 -2
  504. package/dist/core/subagent-store.test.d.ts.map +0 -1
  505. package/dist/core/subagent-store.test.js +0 -106
  506. package/dist/core/subagent-store.test.js.map +0 -1
  507. package/dist/core/subagent-turn-record.test.d.ts +0 -2
  508. package/dist/core/subagent-turn-record.test.d.ts.map +0 -1
  509. package/dist/core/subagent-turn-record.test.js +0 -70
  510. package/dist/core/subagent-turn-record.test.js.map +0 -1
  511. package/dist/core/verification-evidence.test.d.ts +0 -2
  512. package/dist/core/verification-evidence.test.d.ts.map +0 -1
  513. package/dist/core/verification-evidence.test.js +0 -103
  514. package/dist/core/verification-evidence.test.js.map +0 -1
  515. package/dist/core/verification-gate.test.d.ts +0 -2
  516. package/dist/core/verification-gate.test.d.ts.map +0 -1
  517. package/dist/core/verification-gate.test.js +0 -138
  518. package/dist/core/verification-gate.test.js.map +0 -1
  519. package/dist/core/verify-commands.test.d.ts +0 -2
  520. package/dist/core/verify-commands.test.d.ts.map +0 -1
  521. package/dist/core/verify-commands.test.js +0 -81
  522. package/dist/core/verify-commands.test.js.map +0 -1
  523. package/dist/core/workspace-guard.test.d.ts +0 -2
  524. package/dist/core/workspace-guard.test.d.ts.map +0 -1
  525. package/dist/core/workspace-guard.test.js +0 -107
  526. package/dist/core/workspace-guard.test.js.map +0 -1
  527. package/dist/hf-pull.test.d.ts +0 -2
  528. package/dist/hf-pull.test.d.ts.map +0 -1
  529. package/dist/hf-pull.test.js +0 -112
  530. package/dist/hf-pull.test.js.map +0 -1
  531. package/dist/modes/acp-mode.test.d.ts +0 -2
  532. package/dist/modes/acp-mode.test.d.ts.map +0 -1
  533. package/dist/modes/acp-mode.test.js +0 -1067
  534. package/dist/modes/acp-mode.test.js.map +0 -1
  535. package/dist/modes/json-mode.test.d.ts +0 -2
  536. package/dist/modes/json-mode.test.d.ts.map +0 -1
  537. package/dist/modes/json-mode.test.js +0 -84
  538. package/dist/modes/json-mode.test.js.map +0 -1
  539. package/dist/modes/subagent-worker-mode.test.d.ts +0 -2
  540. package/dist/modes/subagent-worker-mode.test.d.ts.map +0 -1
  541. package/dist/modes/subagent-worker-mode.test.js +0 -52
  542. package/dist/modes/subagent-worker-mode.test.js.map +0 -1
  543. package/dist/session.test.d.ts +0 -2
  544. package/dist/session.test.d.ts.map +0 -1
  545. package/dist/session.test.js +0 -35
  546. package/dist/session.test.js.map +0 -1
  547. package/dist/system-prompt.test.d.ts +0 -2
  548. package/dist/system-prompt.test.d.ts.map +0 -1
  549. package/dist/system-prompt.test.js +0 -684
  550. package/dist/system-prompt.test.js.map +0 -1
  551. package/dist/system-prompt.tiering.test.d.ts +0 -2
  552. package/dist/system-prompt.tiering.test.d.ts.map +0 -1
  553. package/dist/system-prompt.tiering.test.js +0 -112
  554. package/dist/system-prompt.tiering.test.js.map +0 -1
  555. package/dist/tools/bash.test.d.ts +0 -2
  556. package/dist/tools/bash.test.d.ts.map +0 -1
  557. package/dist/tools/bash.test.js +0 -248
  558. package/dist/tools/bash.test.js.map +0 -1
  559. package/dist/tools/checkpoint-hook.test.d.ts +0 -2
  560. package/dist/tools/checkpoint-hook.test.d.ts.map +0 -1
  561. package/dist/tools/checkpoint-hook.test.js +0 -65
  562. package/dist/tools/checkpoint-hook.test.js.map +0 -1
  563. package/dist/tools/code-nav.test.d.ts +0 -2
  564. package/dist/tools/code-nav.test.d.ts.map +0 -1
  565. package/dist/tools/code-nav.test.js +0 -136
  566. package/dist/tools/code-nav.test.js.map +0 -1
  567. package/dist/tools/code-skeleton.test.d.ts +0 -2
  568. package/dist/tools/code-skeleton.test.d.ts.map +0 -1
  569. package/dist/tools/code-skeleton.test.js +0 -115
  570. package/dist/tools/code-skeleton.test.js.map +0 -1
  571. package/dist/tools/compress-integration.test.d.ts +0 -2
  572. package/dist/tools/compress-integration.test.d.ts.map +0 -1
  573. package/dist/tools/compress-integration.test.js +0 -59
  574. package/dist/tools/compress-integration.test.js.map +0 -1
  575. package/dist/tools/compress.test.d.ts +0 -2
  576. package/dist/tools/compress.test.d.ts.map +0 -1
  577. package/dist/tools/compress.test.js +0 -60
  578. package/dist/tools/compress.test.js.map +0 -1
  579. package/dist/tools/edit-diff.test.d.ts +0 -2
  580. package/dist/tools/edit-diff.test.d.ts.map +0 -1
  581. package/dist/tools/edit-diff.test.js +0 -329
  582. package/dist/tools/edit-diff.test.js.map +0 -1
  583. package/dist/tools/edit-robustness.test.d.ts +0 -2
  584. package/dist/tools/edit-robustness.test.d.ts.map +0 -1
  585. package/dist/tools/edit-robustness.test.js +0 -417
  586. package/dist/tools/edit-robustness.test.js.map +0 -1
  587. package/dist/tools/edit.test.d.ts +0 -2
  588. package/dist/tools/edit.test.d.ts.map +0 -1
  589. package/dist/tools/edit.test.js +0 -1037
  590. package/dist/tools/edit.test.js.map +0 -1
  591. package/dist/tools/exit-plan.test.d.ts +0 -2
  592. package/dist/tools/exit-plan.test.d.ts.map +0 -1
  593. package/dist/tools/exit-plan.test.js +0 -72
  594. package/dist/tools/exit-plan.test.js.map +0 -1
  595. package/dist/tools/generate-image.test.d.ts +0 -2
  596. package/dist/tools/generate-image.test.d.ts.map +0 -1
  597. package/dist/tools/generate-image.test.js +0 -240
  598. package/dist/tools/generate-image.test.js.map +0 -1
  599. package/dist/tools/grep-parity.test.d.ts +0 -2
  600. package/dist/tools/grep-parity.test.d.ts.map +0 -1
  601. package/dist/tools/grep-parity.test.js +0 -92
  602. package/dist/tools/grep-parity.test.js.map +0 -1
  603. package/dist/tools/grep-recall.test.d.ts +0 -2
  604. package/dist/tools/grep-recall.test.d.ts.map +0 -1
  605. package/dist/tools/grep-recall.test.js +0 -114
  606. package/dist/tools/grep-recall.test.js.map +0 -1
  607. package/dist/tools/grep-spawn.test.d.ts +0 -2
  608. package/dist/tools/grep-spawn.test.d.ts.map +0 -1
  609. package/dist/tools/grep-spawn.test.js +0 -66
  610. package/dist/tools/grep-spawn.test.js.map +0 -1
  611. package/dist/tools/grep.test.d.ts +0 -2
  612. package/dist/tools/grep.test.d.ts.map +0 -1
  613. package/dist/tools/grep.test.js +0 -82
  614. package/dist/tools/grep.test.js.map +0 -1
  615. package/dist/tools/html-extract.test.d.ts +0 -2
  616. package/dist/tools/html-extract.test.d.ts.map +0 -1
  617. package/dist/tools/html-extract.test.js +0 -60
  618. package/dist/tools/html-extract.test.js.map +0 -1
  619. package/dist/tools/index.test.d.ts +0 -2
  620. package/dist/tools/index.test.d.ts.map +0 -1
  621. package/dist/tools/index.test.js +0 -55
  622. package/dist/tools/index.test.js.map +0 -1
  623. package/dist/tools/overflow.test.d.ts +0 -2
  624. package/dist/tools/overflow.test.d.ts.map +0 -1
  625. package/dist/tools/overflow.test.js +0 -59
  626. package/dist/tools/overflow.test.js.map +0 -1
  627. package/dist/tools/path-utils.test.d.ts +0 -2
  628. package/dist/tools/path-utils.test.d.ts.map +0 -1
  629. package/dist/tools/path-utils.test.js +0 -110
  630. package/dist/tools/path-utils.test.js.map +0 -1
  631. package/dist/tools/pdf-extract.test.d.ts +0 -2
  632. package/dist/tools/pdf-extract.test.d.ts.map +0 -1
  633. package/dist/tools/pdf-extract.test.js +0 -15
  634. package/dist/tools/pdf-extract.test.js.map +0 -1
  635. package/dist/tools/plan-mode.test.d.ts +0 -2
  636. package/dist/tools/plan-mode.test.d.ts.map +0 -1
  637. package/dist/tools/plan-mode.test.js +0 -91
  638. package/dist/tools/plan-mode.test.js.map +0 -1
  639. package/dist/tools/read-only-bash.test.d.ts +0 -2
  640. package/dist/tools/read-only-bash.test.d.ts.map +0 -1
  641. package/dist/tools/read-only-bash.test.js +0 -96
  642. package/dist/tools/read-only-bash.test.js.map +0 -1
  643. package/dist/tools/read.test.d.ts +0 -2
  644. package/dist/tools/read.test.d.ts.map +0 -1
  645. package/dist/tools/read.test.js +0 -146
  646. package/dist/tools/read.test.js.map +0 -1
  647. package/dist/tools/screenshot.test.d.ts +0 -2
  648. package/dist/tools/screenshot.test.d.ts.map +0 -1
  649. package/dist/tools/screenshot.test.js +0 -145
  650. package/dist/tools/screenshot.test.js.map +0 -1
  651. package/dist/tools/search-code.test.d.ts +0 -2
  652. package/dist/tools/search-code.test.d.ts.map +0 -1
  653. package/dist/tools/search-code.test.js +0 -83
  654. package/dist/tools/search-code.test.js.map +0 -1
  655. package/dist/tools/source-path.test.d.ts +0 -2
  656. package/dist/tools/source-path.test.d.ts.map +0 -1
  657. package/dist/tools/source-path.test.js +0 -80
  658. package/dist/tools/source-path.test.js.map +0 -1
  659. package/dist/tools/subagent-control.test.d.ts +0 -2
  660. package/dist/tools/subagent-control.test.d.ts.map +0 -1
  661. package/dist/tools/subagent-control.test.js +0 -73
  662. package/dist/tools/subagent-control.test.js.map +0 -1
  663. package/dist/tools/subagent-shared.test.d.ts +0 -2
  664. package/dist/tools/subagent-shared.test.d.ts.map +0 -1
  665. package/dist/tools/subagent-shared.test.js +0 -83
  666. package/dist/tools/subagent-shared.test.js.map +0 -1
  667. package/dist/tools/subagent.test.d.ts +0 -2
  668. package/dist/tools/subagent.test.d.ts.map +0 -1
  669. package/dist/tools/subagent.test.js +0 -180
  670. package/dist/tools/subagent.test.js.map +0 -1
  671. package/dist/tools/task-send.test.d.ts +0 -2
  672. package/dist/tools/task-send.test.d.ts.map +0 -1
  673. package/dist/tools/task-send.test.js +0 -104
  674. package/dist/tools/task-send.test.js.map +0 -1
  675. package/dist/tools/tool-catalog.test.d.ts +0 -2
  676. package/dist/tools/tool-catalog.test.d.ts.map +0 -1
  677. package/dist/tools/tool-catalog.test.js +0 -124
  678. package/dist/tools/tool-catalog.test.js.map +0 -1
  679. package/dist/tools/tool-search.test.d.ts +0 -2
  680. package/dist/tools/tool-search.test.d.ts.map +0 -1
  681. package/dist/tools/tool-search.test.js +0 -127
  682. package/dist/tools/tool-search.test.js.map +0 -1
  683. package/dist/tools/tool-tiers.test.d.ts +0 -2
  684. package/dist/tools/tool-tiers.test.d.ts.map +0 -1
  685. package/dist/tools/tool-tiers.test.js +0 -48
  686. package/dist/tools/tool-tiers.test.js.map +0 -1
  687. package/dist/tools/truncate-utils.test.d.ts +0 -2
  688. package/dist/tools/truncate-utils.test.d.ts.map +0 -1
  689. package/dist/tools/truncate-utils.test.js +0 -93
  690. package/dist/tools/truncate-utils.test.js.map +0 -1
  691. package/dist/tools/truncate.test.d.ts +0 -2
  692. package/dist/tools/truncate.test.d.ts.map +0 -1
  693. package/dist/tools/truncate.test.js +0 -100
  694. package/dist/tools/truncate.test.js.map +0 -1
  695. package/dist/tools/web-fetch.test.d.ts +0 -2
  696. package/dist/tools/web-fetch.test.d.ts.map +0 -1
  697. package/dist/tools/web-fetch.test.js +0 -692
  698. package/dist/tools/web-fetch.test.js.map +0 -1
  699. package/dist/tools/web-search.test.d.ts +0 -2
  700. package/dist/tools/web-search.test.d.ts.map +0 -1
  701. package/dist/tools/web-search.test.js +0 -333
  702. package/dist/tools/web-search.test.js.map +0 -1
  703. package/dist/tools/write.test.d.ts +0 -2
  704. package/dist/tools/write.test.d.ts.map +0 -1
  705. package/dist/tools/write.test.js +0 -176
  706. package/dist/tools/write.test.js.map +0 -1
  707. package/dist/ui/anchor-pad-reclaim.test.d.ts +0 -2
  708. package/dist/ui/anchor-pad-reclaim.test.d.ts.map +0 -1
  709. package/dist/ui/anchor-pad-reclaim.test.js +0 -146
  710. package/dist/ui/anchor-pad-reclaim.test.js.map +0 -1
  711. package/dist/ui/app-items.test.d.ts +0 -2
  712. package/dist/ui/app-items.test.d.ts.map +0 -1
  713. package/dist/ui/app-items.test.js +0 -54
  714. package/dist/ui/app-items.test.js.map +0 -1
  715. package/dist/ui/app-state-persistence.test.d.ts +0 -2
  716. package/dist/ui/app-state-persistence.test.d.ts.map +0 -1
  717. package/dist/ui/app-state-persistence.test.js +0 -71
  718. package/dist/ui/app-state-persistence.test.js.map +0 -1
  719. package/dist/ui/assistant-stream-flush-parity.test.d.ts +0 -2
  720. package/dist/ui/assistant-stream-flush-parity.test.d.ts.map +0 -1
  721. package/dist/ui/assistant-stream-flush-parity.test.js +0 -85
  722. package/dist/ui/assistant-stream-flush-parity.test.js.map +0 -1
  723. package/dist/ui/atomic-flush-regression.test.d.ts +0 -2
  724. package/dist/ui/atomic-flush-regression.test.d.ts.map +0 -1
  725. package/dist/ui/atomic-flush-regression.test.js +0 -218
  726. package/dist/ui/atomic-flush-regression.test.js.map +0 -1
  727. package/dist/ui/chat-layout-pinning.test.d.ts +0 -2
  728. package/dist/ui/chat-layout-pinning.test.d.ts.map +0 -1
  729. package/dist/ui/chat-layout-pinning.test.js +0 -525
  730. package/dist/ui/chat-layout-pinning.test.js.map +0 -1
  731. package/dist/ui/components/ActivityIndicator.test.d.ts +0 -2
  732. package/dist/ui/components/ActivityIndicator.test.d.ts.map +0 -1
  733. package/dist/ui/components/ActivityIndicator.test.js +0 -40
  734. package/dist/ui/components/ActivityIndicator.test.js.map +0 -1
  735. package/dist/ui/components/AssistantMessage.test.d.ts +0 -2
  736. package/dist/ui/components/AssistantMessage.test.d.ts.map +0 -1
  737. package/dist/ui/components/AssistantMessage.test.js +0 -418
  738. package/dist/ui/components/AssistantMessage.test.js.map +0 -1
  739. package/dist/ui/components/Footer.test.d.ts +0 -2
  740. package/dist/ui/components/Footer.test.d.ts.map +0 -1
  741. package/dist/ui/components/Footer.test.js +0 -16
  742. package/dist/ui/components/Footer.test.js.map +0 -1
  743. package/dist/ui/components/InputArea.test.d.ts +0 -2
  744. package/dist/ui/components/InputArea.test.d.ts.map +0 -1
  745. package/dist/ui/components/InputArea.test.js +0 -95
  746. package/dist/ui/components/InputArea.test.js.map +0 -1
  747. package/dist/ui/components/PlanOverlay.test.d.ts +0 -2
  748. package/dist/ui/components/PlanOverlay.test.d.ts.map +0 -1
  749. package/dist/ui/components/PlanOverlay.test.js +0 -24
  750. package/dist/ui/components/PlanOverlay.test.js.map +0 -1
  751. package/dist/ui/components/StreamingArea.test.d.ts +0 -2
  752. package/dist/ui/components/StreamingArea.test.d.ts.map +0 -1
  753. package/dist/ui/components/StreamingArea.test.js +0 -18
  754. package/dist/ui/components/StreamingArea.test.js.map +0 -1
  755. package/dist/ui/components/UserMessage.test.d.ts +0 -2
  756. package/dist/ui/components/UserMessage.test.d.ts.map +0 -1
  757. package/dist/ui/components/UserMessage.test.js +0 -39
  758. package/dist/ui/components/UserMessage.test.js.map +0 -1
  759. package/dist/ui/components/themed-output.test.d.ts +0 -2
  760. package/dist/ui/components/themed-output.test.d.ts.map +0 -1
  761. package/dist/ui/components/themed-output.test.js +0 -111
  762. package/dist/ui/components/themed-output.test.js.map +0 -1
  763. package/dist/ui/footer-jump-regression.test.d.ts +0 -2
  764. package/dist/ui/footer-jump-regression.test.d.ts.map +0 -1
  765. package/dist/ui/footer-jump-regression.test.js +0 -224
  766. package/dist/ui/footer-jump-regression.test.js.map +0 -1
  767. package/dist/ui/footer-status-layout.test.d.ts +0 -2
  768. package/dist/ui/footer-status-layout.test.d.ts.map +0 -1
  769. package/dist/ui/footer-status-layout.test.js +0 -71
  770. package/dist/ui/footer-status-layout.test.js.map +0 -1
  771. package/dist/ui/frame-clip-regression.test.d.ts +0 -2
  772. package/dist/ui/frame-clip-regression.test.d.ts.map +0 -1
  773. package/dist/ui/frame-clip-regression.test.js +0 -215
  774. package/dist/ui/frame-clip-regression.test.js.map +0 -1
  775. package/dist/ui/hooks/stall-retry-duplicate.test.d.ts +0 -2
  776. package/dist/ui/hooks/stall-retry-duplicate.test.d.ts.map +0 -1
  777. package/dist/ui/hooks/stall-retry-duplicate.test.js +0 -94
  778. package/dist/ui/hooks/stall-retry-duplicate.test.js.map +0 -1
  779. package/dist/ui/hooks/useAgentLoop.test.d.ts +0 -2
  780. package/dist/ui/hooks/useAgentLoop.test.d.ts.map +0 -1
  781. package/dist/ui/hooks/useAgentLoop.test.js +0 -66
  782. package/dist/ui/hooks/useAgentLoop.test.js.map +0 -1
  783. package/dist/ui/hooks/useContextCompaction.test.d.ts +0 -2
  784. package/dist/ui/hooks/useContextCompaction.test.d.ts.map +0 -1
  785. package/dist/ui/hooks/useContextCompaction.test.js +0 -135
  786. package/dist/ui/hooks/useContextCompaction.test.js.map +0 -1
  787. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts +0 -2
  788. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts.map +0 -1
  789. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js +0 -81
  790. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js.map +0 -1
  791. package/dist/ui/hooks/useTranscriptHistory.test.d.ts +0 -2
  792. package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +0 -1
  793. package/dist/ui/hooks/useTranscriptHistory.test.js +0 -61
  794. package/dist/ui/hooks/useTranscriptHistory.test.js.map +0 -1
  795. package/dist/ui/hooks/useTranscriptScroll.test.d.ts +0 -2
  796. package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +0 -1
  797. package/dist/ui/hooks/useTranscriptScroll.test.js +0 -119
  798. package/dist/ui/hooks/useTranscriptScroll.test.js.map +0 -1
  799. package/dist/ui/live-area-clamp.test.d.ts +0 -2
  800. package/dist/ui/live-area-clamp.test.d.ts.map +0 -1
  801. package/dist/ui/live-area-clamp.test.js +0 -125
  802. package/dist/ui/live-area-clamp.test.js.map +0 -1
  803. package/dist/ui/live-area-height.test.d.ts +0 -2
  804. package/dist/ui/live-area-height.test.d.ts.map +0 -1
  805. package/dist/ui/live-area-height.test.js +0 -76
  806. package/dist/ui/live-area-height.test.js.map +0 -1
  807. package/dist/ui/live-frame-height.test.d.ts +0 -2
  808. package/dist/ui/live-frame-height.test.d.ts.map +0 -1
  809. package/dist/ui/live-frame-height.test.js +0 -116
  810. package/dist/ui/live-frame-height.test.js.map +0 -1
  811. package/dist/ui/live-item-flush.test.d.ts +0 -2
  812. package/dist/ui/live-item-flush.test.d.ts.map +0 -1
  813. package/dist/ui/live-item-flush.test.js +0 -437
  814. package/dist/ui/live-item-flush.test.js.map +0 -1
  815. package/dist/ui/long-prompt-regression-harness.test.d.ts +0 -2
  816. package/dist/ui/long-prompt-regression-harness.test.d.ts.map +0 -1
  817. package/dist/ui/long-prompt-regression-harness.test.js +0 -195
  818. package/dist/ui/long-prompt-regression-harness.test.js.map +0 -1
  819. package/dist/ui/plan-overlay.test.d.ts +0 -2
  820. package/dist/ui/plan-overlay.test.d.ts.map +0 -1
  821. package/dist/ui/plan-overlay.test.js +0 -305
  822. package/dist/ui/plan-overlay.test.js.map +0 -1
  823. package/dist/ui/queued-message.test.d.ts +0 -2
  824. package/dist/ui/queued-message.test.d.ts.map +0 -1
  825. package/dist/ui/queued-message.test.js +0 -172
  826. package/dist/ui/queued-message.test.js.map +0 -1
  827. package/dist/ui/render.test.d.ts +0 -2
  828. package/dist/ui/render.test.d.ts.map +0 -1
  829. package/dist/ui/render.test.js +0 -42
  830. package/dist/ui/render.test.js.map +0 -1
  831. package/dist/ui/scroll-stabilization.test.d.ts +0 -2
  832. package/dist/ui/scroll-stabilization.test.d.ts.map +0 -1
  833. package/dist/ui/scroll-stabilization.test.js +0 -64
  834. package/dist/ui/scroll-stabilization.test.js.map +0 -1
  835. package/dist/ui/slash-command-images.test.d.ts +0 -2
  836. package/dist/ui/slash-command-images.test.d.ts.map +0 -1
  837. package/dist/ui/slash-command-images.test.js +0 -110
  838. package/dist/ui/slash-command-images.test.js.map +0 -1
  839. package/dist/ui/startup-banner-order.test.d.ts +0 -2
  840. package/dist/ui/startup-banner-order.test.d.ts.map +0 -1
  841. package/dist/ui/startup-banner-order.test.js +0 -105
  842. package/dist/ui/startup-banner-order.test.js.map +0 -1
  843. package/dist/ui/stores/transcript-scroll-store.test.d.ts +0 -2
  844. package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +0 -1
  845. package/dist/ui/stores/transcript-scroll-store.test.js +0 -73
  846. package/dist/ui/stores/transcript-scroll-store.test.js.map +0 -1
  847. package/dist/ui/streaming-flush-bounce.test.d.ts +0 -2
  848. package/dist/ui/streaming-flush-bounce.test.d.ts.map +0 -1
  849. package/dist/ui/streaming-flush-bounce.test.js +0 -177
  850. package/dist/ui/streaming-flush-bounce.test.js.map +0 -1
  851. package/dist/ui/submit-boundary-gap.test.d.ts +0 -2
  852. package/dist/ui/submit-boundary-gap.test.d.ts.map +0 -1
  853. package/dist/ui/submit-boundary-gap.test.js +0 -180
  854. package/dist/ui/submit-boundary-gap.test.js.map +0 -1
  855. package/dist/ui/terminal-history-repaint.test.d.ts +0 -2
  856. package/dist/ui/terminal-history-repaint.test.d.ts.map +0 -1
  857. package/dist/ui/terminal-history-repaint.test.js +0 -73
  858. package/dist/ui/terminal-history-repaint.test.js.map +0 -1
  859. package/dist/ui/terminal-history-retry-dedup.test.d.ts +0 -2
  860. package/dist/ui/terminal-history-retry-dedup.test.d.ts.map +0 -1
  861. package/dist/ui/terminal-history-retry-dedup.test.js +0 -61
  862. package/dist/ui/terminal-history-retry-dedup.test.js.map +0 -1
  863. package/dist/ui/terminal-history.test.d.ts +0 -2
  864. package/dist/ui/terminal-history.test.d.ts.map +0 -1
  865. package/dist/ui/terminal-history.test.js +0 -557
  866. package/dist/ui/terminal-history.test.js.map +0 -1
  867. package/dist/ui/thinking-level-cycle.test.d.ts +0 -2
  868. package/dist/ui/thinking-level-cycle.test.d.ts.map +0 -1
  869. package/dist/ui/thinking-level-cycle.test.js +0 -45
  870. package/dist/ui/thinking-level-cycle.test.js.map +0 -1
  871. package/dist/ui/tool-group-summary.test.d.ts +0 -2
  872. package/dist/ui/tool-group-summary.test.d.ts.map +0 -1
  873. package/dist/ui/tool-group-summary.test.js +0 -79
  874. package/dist/ui/tool-group-summary.test.js.map +0 -1
  875. package/dist/ui/transcript/spacing.test.d.ts +0 -2
  876. package/dist/ui/transcript/spacing.test.d.ts.map +0 -1
  877. package/dist/ui/transcript/spacing.test.js +0 -187
  878. package/dist/ui/transcript/spacing.test.js.map +0 -1
  879. package/dist/ui/transcript/transcript-lines.test.d.ts +0 -2
  880. package/dist/ui/transcript/transcript-lines.test.d.ts.map +0 -1
  881. package/dist/ui/transcript/transcript-lines.test.js +0 -76
  882. package/dist/ui/transcript/transcript-lines.test.js.map +0 -1
  883. package/dist/ui/transcript-viewport-pinning.test.d.ts +0 -2
  884. package/dist/ui/transcript-viewport-pinning.test.d.ts.map +0 -1
  885. package/dist/ui/transcript-viewport-pinning.test.js +0 -148
  886. package/dist/ui/transcript-viewport-pinning.test.js.map +0 -1
  887. package/dist/ui/tui-history-parity.test.d.ts +0 -2
  888. package/dist/ui/tui-history-parity.test.d.ts.map +0 -1
  889. package/dist/ui/tui-history-parity.test.js +0 -369
  890. package/dist/ui/tui-history-parity.test.js.map +0 -1
  891. package/dist/ui/tui-simulation.test.d.ts +0 -2
  892. package/dist/ui/tui-simulation.test.d.ts.map +0 -1
  893. package/dist/ui/tui-simulation.test.js +0 -145
  894. package/dist/ui/tui-simulation.test.js.map +0 -1
  895. package/dist/ui/tui-terminal-recorder.test.d.ts +0 -2
  896. package/dist/ui/tui-terminal-recorder.test.d.ts.map +0 -1
  897. package/dist/ui/tui-terminal-recorder.test.js +0 -134
  898. package/dist/ui/tui-terminal-recorder.test.js.map +0 -1
  899. package/dist/ui/utils/assistant-stream-split.test.d.ts +0 -2
  900. package/dist/ui/utils/assistant-stream-split.test.d.ts.map +0 -1
  901. package/dist/ui/utils/assistant-stream-split.test.js +0 -74
  902. package/dist/ui/utils/assistant-stream-split.test.js.map +0 -1
  903. package/dist/ui/utils/markdown-renderer.test.d.ts +0 -2
  904. package/dist/ui/utils/markdown-renderer.test.d.ts.map +0 -1
  905. package/dist/ui/utils/markdown-renderer.test.js +0 -63
  906. package/dist/ui/utils/markdown-renderer.test.js.map +0 -1
  907. package/dist/ui/utils/table-text.test.d.ts +0 -2
  908. package/dist/ui/utils/table-text.test.d.ts.map +0 -1
  909. package/dist/ui/utils/table-text.test.js +0 -202
  910. package/dist/ui/utils/table-text.test.js.map +0 -1
  911. package/dist/ui/utils/terminal-graphics.test.d.ts +0 -2
  912. package/dist/ui/utils/terminal-graphics.test.d.ts.map +0 -1
  913. package/dist/ui/utils/terminal-graphics.test.js +0 -100
  914. package/dist/ui/utils/terminal-graphics.test.js.map +0 -1
  915. package/dist/ui/utils/terminal-input.test.d.ts +0 -2
  916. package/dist/ui/utils/terminal-input.test.d.ts.map +0 -1
  917. package/dist/ui/utils/terminal-input.test.js +0 -15
  918. package/dist/ui/utils/terminal-input.test.js.map +0 -1
  919. package/dist/ui/utils/text-utils.test.d.ts +0 -2
  920. package/dist/ui/utils/text-utils.test.d.ts.map +0 -1
  921. package/dist/ui/utils/text-utils.test.js +0 -31
  922. package/dist/ui/utils/text-utils.test.js.map +0 -1
  923. package/dist/utils/git.test.d.ts +0 -2
  924. package/dist/utils/git.test.d.ts.map +0 -1
  925. package/dist/utils/git.test.js +0 -36
  926. package/dist/utils/git.test.js.map +0 -1
  927. package/dist/utils/github.test.d.ts +0 -2
  928. package/dist/utils/github.test.d.ts.map +0 -1
  929. package/dist/utils/github.test.js +0 -23
  930. package/dist/utils/github.test.js.map +0 -1
  931. package/dist/utils/http-body.test.d.ts +0 -2
  932. package/dist/utils/http-body.test.d.ts.map +0 -1
  933. package/dist/utils/http-body.test.js +0 -68
  934. package/dist/utils/http-body.test.js.map +0 -1
  935. package/dist/utils/image.test.d.ts +0 -2
  936. package/dist/utils/image.test.d.ts.map +0 -1
  937. package/dist/utils/image.test.js +0 -139
  938. package/dist/utils/image.test.js.map +0 -1
  939. package/dist/utils/plan-steps.test.d.ts +0 -2
  940. package/dist/utils/plan-steps.test.d.ts.map +0 -1
  941. package/dist/utils/plan-steps.test.js +0 -159
  942. package/dist/utils/plan-steps.test.js.map +0 -1
  943. package/dist/utils/process.test.d.ts +0 -2
  944. package/dist/utils/process.test.d.ts.map +0 -1
  945. package/dist/utils/process.test.js +0 -42
  946. package/dist/utils/process.test.js.map +0 -1
  947. package/dist/utils/text.test.d.ts +0 -2
  948. package/dist/utils/text.test.d.ts.map +0 -1
  949. package/dist/utils/text.test.js +0 -91
  950. package/dist/utils/text.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