@prestyj/cli 5.9.0 → 5.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (675) hide show
  1. package/README.md +4 -5
  2. package/assets/skills/evidence-led-ui/SKILL.md +1 -1
  3. package/dist/app-sidecar-auth-broadcast.test.d.ts +2 -0
  4. package/dist/app-sidecar-auth-broadcast.test.d.ts.map +1 -0
  5. package/dist/app-sidecar-auth-broadcast.test.js +282 -0
  6. package/dist/app-sidecar-auth-broadcast.test.js.map +1 -0
  7. package/dist/app-sidecar-sessions.d.ts +5 -2
  8. package/dist/app-sidecar-sessions.d.ts.map +1 -1
  9. package/dist/app-sidecar-sessions.js +34 -8
  10. package/dist/app-sidecar-sessions.js.map +1 -1
  11. package/dist/app-sidecar-sessions.test.js +95 -0
  12. package/dist/app-sidecar-sessions.test.js.map +1 -1
  13. package/dist/app-sidecar.js +871 -142
  14. package/dist/app-sidecar.js.map +1 -1
  15. package/dist/chat-agents/general.test.js +5 -3
  16. package/dist/chat-agents/general.test.js.map +1 -1
  17. package/dist/chat-agents/memory.d.ts.map +1 -1
  18. package/dist/chat-agents/memory.js +14 -5
  19. package/dist/chat-agents/memory.js.map +1 -1
  20. package/dist/chat-agents/memory.test.js +11 -1
  21. package/dist/chat-agents/memory.test.js.map +1 -1
  22. package/dist/chat-agents/shared.js +1 -1
  23. package/dist/chat-agents/shared.js.map +1 -1
  24. package/dist/chat-agents/specialists.test.js +3 -2
  25. package/dist/chat-agents/specialists.test.js.map +1 -1
  26. package/dist/cli/command-routing.d.ts +1 -1
  27. package/dist/cli/command-routing.d.ts.map +1 -1
  28. package/dist/cli/command-routing.js +1 -0
  29. package/dist/cli/command-routing.js.map +1 -1
  30. package/dist/cli/command-routing.test.js +1 -0
  31. package/dist/cli/command-routing.test.js.map +1 -1
  32. package/dist/cli.d.ts.map +1 -1
  33. package/dist/cli.js +183 -51
  34. package/dist/cli.js.map +1 -1
  35. package/dist/config.d.ts +16 -0
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/config.js +51 -2
  38. package/dist/config.js.map +1 -1
  39. package/dist/config.test.js +71 -2
  40. package/dist/config.test.js.map +1 -1
  41. package/dist/core/agent-mcp-passthrough.test.d.ts +2 -0
  42. package/dist/core/agent-mcp-passthrough.test.d.ts.map +1 -0
  43. package/dist/core/agent-mcp-passthrough.test.js +61 -0
  44. package/dist/core/agent-mcp-passthrough.test.js.map +1 -0
  45. package/dist/core/agent-notifications.d.ts +62 -0
  46. package/dist/core/agent-notifications.d.ts.map +1 -0
  47. package/dist/core/agent-notifications.js +92 -0
  48. package/dist/core/agent-notifications.js.map +1 -0
  49. package/dist/core/agent-notifications.test.d.ts +2 -0
  50. package/dist/core/agent-notifications.test.d.ts.map +1 -0
  51. package/dist/core/agent-notifications.test.js +97 -0
  52. package/dist/core/agent-notifications.test.js.map +1 -0
  53. package/dist/core/agent-session-add-dir.test.d.ts +2 -0
  54. package/dist/core/agent-session-add-dir.test.d.ts.map +1 -0
  55. package/dist/core/agent-session-add-dir.test.js +110 -0
  56. package/dist/core/agent-session-add-dir.test.js.map +1 -0
  57. package/dist/core/agent-session-checkpoint-flush.test.d.ts +2 -0
  58. package/dist/core/agent-session-checkpoint-flush.test.d.ts.map +1 -0
  59. package/dist/core/agent-session-checkpoint-flush.test.js +201 -0
  60. package/dist/core/agent-session-checkpoint-flush.test.js.map +1 -0
  61. package/dist/core/agent-session-compaction.test.js +327 -13
  62. package/dist/core/agent-session-compaction.test.js.map +1 -1
  63. package/dist/core/agent-session-crash-durability.test.d.ts +2 -0
  64. package/dist/core/agent-session-crash-durability.test.d.ts.map +1 -0
  65. package/dist/core/agent-session-crash-durability.test.js +102 -0
  66. package/dist/core/agent-session-crash-durability.test.js.map +1 -0
  67. package/dist/core/agent-session-marker-anchors.test.d.ts +2 -0
  68. package/dist/core/agent-session-marker-anchors.test.d.ts.map +1 -0
  69. package/dist/core/agent-session-marker-anchors.test.js +326 -0
  70. package/dist/core/agent-session-marker-anchors.test.js.map +1 -0
  71. package/dist/core/agent-session-memory-tail.test.js +4 -7
  72. package/dist/core/agent-session-memory-tail.test.js.map +1 -1
  73. package/dist/core/agent-session-model-switch.test.d.ts +2 -0
  74. package/dist/core/agent-session-model-switch.test.d.ts.map +1 -0
  75. package/dist/core/agent-session-model-switch.test.js +161 -0
  76. package/dist/core/agent-session-model-switch.test.js.map +1 -0
  77. package/dist/core/agent-session-notifications.test.d.ts +2 -0
  78. package/dist/core/agent-session-notifications.test.d.ts.map +1 -0
  79. package/dist/core/agent-session-notifications.test.js +114 -0
  80. package/dist/core/agent-session-notifications.test.js.map +1 -0
  81. package/dist/core/agent-session-process-gate.test.d.ts +2 -0
  82. package/dist/core/agent-session-process-gate.test.d.ts.map +1 -0
  83. package/dist/core/agent-session-process-gate.test.js +92 -0
  84. package/dist/core/agent-session-process-gate.test.js.map +1 -0
  85. package/dist/core/agent-session-queue.test.js +69 -7
  86. package/dist/core/agent-session-queue.test.js.map +1 -1
  87. package/dist/core/agent-session-review-coverage.test.js +80 -23
  88. package/dist/core/agent-session-review-coverage.test.js.map +1 -1
  89. package/dist/core/agent-session-slash-restore.test.d.ts +2 -0
  90. package/dist/core/agent-session-slash-restore.test.d.ts.map +1 -0
  91. package/dist/core/agent-session-slash-restore.test.js +121 -0
  92. package/dist/core/agent-session-slash-restore.test.js.map +1 -0
  93. package/dist/core/agent-session-subagent-policy.test.js +7 -3
  94. package/dist/core/agent-session-subagent-policy.test.js.map +1 -1
  95. package/dist/core/agent-session.d.ts +256 -10
  96. package/dist/core/agent-session.d.ts.map +1 -1
  97. package/dist/core/agent-session.js +1071 -219
  98. package/dist/core/agent-session.js.map +1 -1
  99. package/dist/core/agent-tools-allowlist.test.js +5 -3
  100. package/dist/core/agent-tools-allowlist.test.js.map +1 -1
  101. package/dist/core/agents.d.ts +11 -0
  102. package/dist/core/agents.d.ts.map +1 -1
  103. package/dist/core/agents.js +21 -0
  104. package/dist/core/agents.js.map +1 -1
  105. package/dist/core/agents.test.d.ts +2 -0
  106. package/dist/core/agents.test.d.ts.map +1 -0
  107. package/dist/core/agents.test.js +67 -0
  108. package/dist/core/agents.test.js.map +1 -0
  109. package/dist/core/auth-providers.js +1 -1
  110. package/dist/core/auth-providers.js.map +1 -1
  111. package/dist/core/compaction/active-context.test.js +21 -0
  112. package/dist/core/compaction/active-context.test.js.map +1 -1
  113. package/dist/core/compaction/compactor.d.ts +108 -8
  114. package/dist/core/compaction/compactor.d.ts.map +1 -1
  115. package/dist/core/compaction/compactor.js +423 -119
  116. package/dist/core/compaction/compactor.js.map +1 -1
  117. package/dist/core/compaction/compactor.test.js +361 -9
  118. package/dist/core/compaction/compactor.test.js.map +1 -1
  119. package/dist/core/compaction/policy.d.ts +17 -0
  120. package/dist/core/compaction/policy.d.ts.map +1 -0
  121. package/dist/core/compaction/policy.js +22 -0
  122. package/dist/core/compaction/policy.js.map +1 -0
  123. package/dist/core/compaction/policy.test.d.ts +2 -0
  124. package/dist/core/compaction/policy.test.d.ts.map +1 -0
  125. package/dist/core/compaction/policy.test.js +35 -0
  126. package/dist/core/compaction/policy.test.js.map +1 -0
  127. package/dist/core/compaction/query-aware-selector.d.ts +33 -0
  128. package/dist/core/compaction/query-aware-selector.d.ts.map +1 -0
  129. package/dist/core/compaction/query-aware-selector.js +202 -0
  130. package/dist/core/compaction/query-aware-selector.js.map +1 -0
  131. package/dist/core/compaction/query-aware-selector.test.d.ts +2 -0
  132. package/dist/core/compaction/query-aware-selector.test.d.ts.map +1 -0
  133. package/dist/core/compaction/query-aware-selector.test.js +96 -0
  134. package/dist/core/compaction/query-aware-selector.test.js.map +1 -0
  135. package/dist/core/compaction/token-estimator.test.js +1 -1
  136. package/dist/core/compaction/token-estimator.test.js.map +1 -1
  137. package/dist/core/compaction/tool-result-pruner.d.ts +24 -11
  138. package/dist/core/compaction/tool-result-pruner.d.ts.map +1 -1
  139. package/dist/core/compaction/tool-result-pruner.js +98 -26
  140. package/dist/core/compaction/tool-result-pruner.js.map +1 -1
  141. package/dist/core/compaction/tool-result-pruner.test.js +178 -6
  142. package/dist/core/compaction/tool-result-pruner.test.js.map +1 -1
  143. package/dist/core/encode-cwd.d.ts +17 -0
  144. package/dist/core/encode-cwd.d.ts.map +1 -1
  145. package/dist/core/encode-cwd.js +20 -7
  146. package/dist/core/encode-cwd.js.map +1 -1
  147. package/dist/core/encode-cwd.test.js +20 -1
  148. package/dist/core/encode-cwd.test.js.map +1 -1
  149. package/dist/core/event-bus.d.ts +23 -0
  150. package/dist/core/event-bus.d.ts.map +1 -1
  151. package/dist/core/event-bus.js +10 -0
  152. package/dist/core/event-bus.js.map +1 -1
  153. package/dist/core/extensions/loader.d.ts.map +1 -1
  154. package/dist/core/extensions/loader.js +28 -8
  155. package/dist/core/extensions/loader.js.map +1 -1
  156. package/dist/core/extensions/plugin-bundles.d.ts +23 -0
  157. package/dist/core/extensions/plugin-bundles.d.ts.map +1 -0
  158. package/dist/core/extensions/plugin-bundles.js +228 -0
  159. package/dist/core/extensions/plugin-bundles.js.map +1 -0
  160. package/dist/core/extensions/plugin-bundles.test.d.ts +2 -0
  161. package/dist/core/extensions/plugin-bundles.test.d.ts.map +1 -0
  162. package/dist/core/extensions/plugin-bundles.test.js +110 -0
  163. package/dist/core/extensions/plugin-bundles.test.js.map +1 -0
  164. package/dist/core/foreign-session-import.d.ts +120 -0
  165. package/dist/core/foreign-session-import.d.ts.map +1 -0
  166. package/dist/core/foreign-session-import.js +598 -0
  167. package/dist/core/foreign-session-import.js.map +1 -0
  168. package/dist/core/foreign-session-import.test.d.ts +2 -0
  169. package/dist/core/foreign-session-import.test.d.ts.map +1 -0
  170. package/dist/core/foreign-session-import.test.js +220 -0
  171. package/dist/core/foreign-session-import.test.js.map +1 -0
  172. package/dist/core/foreign-transcript-blocks.d.ts +51 -0
  173. package/dist/core/foreign-transcript-blocks.d.ts.map +1 -0
  174. package/dist/core/foreign-transcript-blocks.js +151 -0
  175. package/dist/core/foreign-transcript-blocks.js.map +1 -0
  176. package/dist/core/ideal-review.d.ts +20 -1
  177. package/dist/core/ideal-review.d.ts.map +1 -1
  178. package/dist/core/ideal-review.js +43 -3
  179. package/dist/core/ideal-review.js.map +1 -1
  180. package/dist/core/ideal-review.test.js +106 -5
  181. package/dist/core/ideal-review.test.js.map +1 -1
  182. package/dist/core/local-endpoint-store.d.ts +50 -0
  183. package/dist/core/local-endpoint-store.d.ts.map +1 -0
  184. package/dist/core/local-endpoint-store.js +201 -0
  185. package/dist/core/local-endpoint-store.js.map +1 -0
  186. package/dist/core/local-endpoint-store.test.d.ts +2 -0
  187. package/dist/core/local-endpoint-store.test.d.ts.map +1 -0
  188. package/dist/core/local-endpoint-store.test.js +131 -0
  189. package/dist/core/local-endpoint-store.test.js.map +1 -0
  190. package/dist/core/loop-breaker.d.ts.map +1 -1
  191. package/dist/core/loop-breaker.js +1 -0
  192. package/dist/core/loop-breaker.js.map +1 -1
  193. package/dist/core/lsp/client.d.ts +65 -0
  194. package/dist/core/lsp/client.d.ts.map +1 -1
  195. package/dist/core/lsp/client.js +197 -14
  196. package/dist/core/lsp/client.js.map +1 -1
  197. package/dist/core/lsp/jsonrpc.d.ts +38 -1
  198. package/dist/core/lsp/jsonrpc.d.ts.map +1 -1
  199. package/dist/core/lsp/jsonrpc.js +13 -1
  200. package/dist/core/lsp/jsonrpc.js.map +1 -1
  201. package/dist/core/lsp/manager.d.ts +47 -9
  202. package/dist/core/lsp/manager.d.ts.map +1 -1
  203. package/dist/core/lsp/manager.js +107 -59
  204. package/dist/core/lsp/manager.js.map +1 -1
  205. package/dist/core/lsp/manager.test.js +50 -1
  206. package/dist/core/lsp/manager.test.js.map +1 -1
  207. package/dist/core/lsp/pool.d.ts +113 -0
  208. package/dist/core/lsp/pool.d.ts.map +1 -0
  209. package/dist/core/lsp/pool.js +255 -0
  210. package/dist/core/lsp/pool.js.map +1 -0
  211. package/dist/core/lsp/pool.test.d.ts +2 -0
  212. package/dist/core/lsp/pool.test.d.ts.map +1 -0
  213. package/dist/core/lsp/pool.test.js +286 -0
  214. package/dist/core/lsp/pool.test.js.map +1 -0
  215. package/dist/core/lsp/servers.d.ts.map +1 -1
  216. package/dist/core/lsp/servers.js +43 -3
  217. package/dist/core/lsp/servers.js.map +1 -1
  218. package/dist/core/lsp/servers.test.d.ts +2 -0
  219. package/dist/core/lsp/servers.test.d.ts.map +1 -0
  220. package/dist/core/lsp/servers.test.js +67 -0
  221. package/dist/core/lsp/servers.test.js.map +1 -0
  222. package/dist/core/lsp/test-support.d.ts +18 -0
  223. package/dist/core/lsp/test-support.d.ts.map +1 -0
  224. package/dist/core/lsp/test-support.js +27 -0
  225. package/dist/core/lsp/test-support.js.map +1 -0
  226. package/dist/core/lsp/uri.test.d.ts +2 -0
  227. package/dist/core/lsp/uri.test.d.ts.map +1 -0
  228. package/dist/core/lsp/uri.test.js +56 -0
  229. package/dist/core/lsp/uri.test.js.map +1 -0
  230. package/dist/core/lsp/windows.test.d.ts +2 -0
  231. package/dist/core/lsp/windows.test.d.ts.map +1 -0
  232. package/dist/core/lsp/windows.test.js +239 -0
  233. package/dist/core/lsp/windows.test.js.map +1 -0
  234. package/dist/core/mcp/catalog-cache.d.ts +63 -0
  235. package/dist/core/mcp/catalog-cache.d.ts.map +1 -0
  236. package/dist/core/mcp/catalog-cache.js +163 -0
  237. package/dist/core/mcp/catalog-cache.js.map +1 -0
  238. package/dist/core/mcp/catalog-cache.test.d.ts +2 -0
  239. package/dist/core/mcp/catalog-cache.test.d.ts.map +1 -0
  240. package/dist/core/mcp/catalog-cache.test.js +99 -0
  241. package/dist/core/mcp/catalog-cache.test.js.map +1 -0
  242. package/dist/core/mcp/client-session-recovery.test.d.ts +2 -0
  243. package/dist/core/mcp/client-session-recovery.test.d.ts.map +1 -0
  244. package/dist/core/mcp/client-session-recovery.test.js +231 -0
  245. package/dist/core/mcp/client-session-recovery.test.js.map +1 -0
  246. package/dist/core/mcp/client.d.ts +158 -0
  247. package/dist/core/mcp/client.d.ts.map +1 -1
  248. package/dist/core/mcp/client.js +476 -35
  249. package/dist/core/mcp/client.js.map +1 -1
  250. package/dist/core/mcp/elicitation-bridge.d.ts +41 -0
  251. package/dist/core/mcp/elicitation-bridge.d.ts.map +1 -0
  252. package/dist/core/mcp/elicitation-bridge.js +52 -0
  253. package/dist/core/mcp/elicitation-bridge.js.map +1 -0
  254. package/dist/core/mcp/elicitation.test.d.ts +2 -0
  255. package/dist/core/mcp/elicitation.test.d.ts.map +1 -0
  256. package/dist/core/mcp/elicitation.test.js +158 -0
  257. package/dist/core/mcp/elicitation.test.js.map +1 -0
  258. package/dist/core/mcp/index.d.ts +5 -1
  259. package/dist/core/mcp/index.d.ts.map +1 -1
  260. package/dist/core/mcp/index.js +2 -0
  261. package/dist/core/mcp/index.js.map +1 -1
  262. package/dist/core/mcp/legacy-negotiation.test.d.ts +2 -0
  263. package/dist/core/mcp/legacy-negotiation.test.d.ts.map +1 -0
  264. package/dist/core/mcp/legacy-negotiation.test.js +80 -0
  265. package/dist/core/mcp/legacy-negotiation.test.js.map +1 -0
  266. package/dist/core/mcp/oauth-provider.d.ts +1 -2
  267. package/dist/core/mcp/oauth-provider.d.ts.map +1 -1
  268. package/dist/core/mcp/oauth-provider.js +6 -2
  269. package/dist/core/mcp/oauth-provider.js.map +1 -1
  270. package/dist/core/mcp/oauth-store.d.ts +1 -1
  271. package/dist/core/mcp/oauth-store.d.ts.map +1 -1
  272. package/dist/core/mcp/oauth-store.js.map +1 -1
  273. package/dist/core/mcp/resolve-stdio.d.ts +35 -0
  274. package/dist/core/mcp/resolve-stdio.d.ts.map +1 -1
  275. package/dist/core/mcp/resolve-stdio.js +80 -1
  276. package/dist/core/mcp/resolve-stdio.js.map +1 -1
  277. package/dist/core/mcp/resolve-stdio.test.js +99 -4
  278. package/dist/core/mcp/resolve-stdio.test.js.map +1 -1
  279. package/dist/core/mcp/session-elicitation-wiring.test.d.ts +2 -0
  280. package/dist/core/mcp/session-elicitation-wiring.test.d.ts.map +1 -0
  281. package/dist/core/mcp/session-elicitation-wiring.test.js +138 -0
  282. package/dist/core/mcp/session-elicitation-wiring.test.js.map +1 -0
  283. package/dist/core/mcp/shared-pool.d.ts +158 -0
  284. package/dist/core/mcp/shared-pool.d.ts.map +1 -0
  285. package/dist/core/mcp/shared-pool.js +235 -0
  286. package/dist/core/mcp/shared-pool.js.map +1 -0
  287. package/dist/core/mcp/shared-pool.test.d.ts +2 -0
  288. package/dist/core/mcp/shared-pool.test.d.ts.map +1 -0
  289. package/dist/core/mcp/shared-pool.test.js +425 -0
  290. package/dist/core/mcp/shared-pool.test.js.map +1 -0
  291. package/dist/core/mcp/types.d.ts +12 -0
  292. package/dist/core/mcp/types.d.ts.map +1 -1
  293. package/dist/core/mcp/when-connected.test.d.ts +2 -0
  294. package/dist/core/mcp/when-connected.test.d.ts.map +1 -0
  295. package/dist/core/mcp/when-connected.test.js +46 -0
  296. package/dist/core/mcp/when-connected.test.js.map +1 -0
  297. package/dist/core/network-guard.d.ts +47 -0
  298. package/dist/core/network-guard.d.ts.map +1 -0
  299. package/dist/core/network-guard.js +208 -0
  300. package/dist/core/network-guard.js.map +1 -0
  301. package/dist/core/network-guard.test.d.ts +2 -0
  302. package/dist/core/network-guard.test.d.ts.map +1 -0
  303. package/dist/core/network-guard.test.js +72 -0
  304. package/dist/core/network-guard.test.js.map +1 -0
  305. package/dist/core/nolan-context.d.ts.map +1 -1
  306. package/dist/core/nolan-context.js +8 -0
  307. package/dist/core/nolan-context.js.map +1 -1
  308. package/dist/core/nolan-context.test.js +40 -0
  309. package/dist/core/nolan-context.test.js.map +1 -1
  310. package/dist/core/nolan-prompt.js +3 -0
  311. package/dist/core/nolan-prompt.js.map +1 -1
  312. package/dist/core/nolan-prompt.test.js +5 -0
  313. package/dist/core/nolan-prompt.test.js.map +1 -1
  314. package/dist/core/persistent-shell.d.ts +4 -1
  315. package/dist/core/persistent-shell.d.ts.map +1 -1
  316. package/dist/core/persistent-shell.js +21 -4
  317. package/dist/core/persistent-shell.js.map +1 -1
  318. package/dist/core/process-gate.d.ts +45 -0
  319. package/dist/core/process-gate.d.ts.map +1 -0
  320. package/dist/core/process-gate.js +79 -0
  321. package/dist/core/process-gate.js.map +1 -0
  322. package/dist/core/process-gate.test.d.ts +2 -0
  323. package/dist/core/process-gate.test.d.ts.map +1 -0
  324. package/dist/core/process-gate.test.js +87 -0
  325. package/dist/core/process-gate.test.js.map +1 -0
  326. package/dist/core/process-manager-dev-server-repro.test.js +34 -12
  327. package/dist/core/process-manager-dev-server-repro.test.js.map +1 -1
  328. package/dist/core/process-manager-notifications.test.d.ts +2 -0
  329. package/dist/core/process-manager-notifications.test.d.ts.map +1 -0
  330. package/dist/core/process-manager-notifications.test.js +217 -0
  331. package/dist/core/process-manager-notifications.test.js.map +1 -0
  332. package/dist/core/process-manager.d.ts +51 -2
  333. package/dist/core/process-manager.d.ts.map +1 -1
  334. package/dist/core/process-manager.js +212 -15
  335. package/dist/core/process-manager.js.map +1 -1
  336. package/dist/core/project-discovery.d.ts +38 -6
  337. package/dist/core/project-discovery.d.ts.map +1 -1
  338. package/dist/core/project-discovery.js +327 -40
  339. package/dist/core/project-discovery.js.map +1 -1
  340. package/dist/core/project-discovery.test.js +226 -1
  341. package/dist/core/project-discovery.test.js.map +1 -1
  342. package/dist/core/prompt-commands.d.ts.map +1 -1
  343. package/dist/core/prompt-commands.js +89 -156
  344. package/dist/core/prompt-commands.js.map +1 -1
  345. package/dist/core/prompt-commands.test.js +4 -10
  346. package/dist/core/prompt-commands.test.js.map +1 -1
  347. package/dist/core/radio.test.js +4 -1
  348. package/dist/core/radio.test.js.map +1 -1
  349. package/dist/core/regrounding.d.ts.map +1 -1
  350. package/dist/core/regrounding.js +1 -0
  351. package/dist/core/regrounding.js.map +1 -1
  352. package/dist/core/run-claim.d.ts +37 -0
  353. package/dist/core/run-claim.d.ts.map +1 -0
  354. package/dist/core/run-claim.js +46 -0
  355. package/dist/core/run-claim.js.map +1 -0
  356. package/dist/core/run-claim.test.d.ts +2 -0
  357. package/dist/core/run-claim.test.d.ts.map +1 -0
  358. package/dist/core/run-claim.test.js +107 -0
  359. package/dist/core/run-claim.test.js.map +1 -0
  360. package/dist/core/run-journal.test.d.ts +2 -0
  361. package/dist/core/run-journal.test.d.ts.map +1 -0
  362. package/dist/core/run-journal.test.js +195 -0
  363. package/dist/core/run-journal.test.js.map +1 -0
  364. package/dist/core/run-lifecycle.d.ts +22 -3
  365. package/dist/core/run-lifecycle.d.ts.map +1 -1
  366. package/dist/core/run-lifecycle.js +12 -3
  367. package/dist/core/run-lifecycle.js.map +1 -1
  368. package/dist/core/runtime-mode.d.ts +2 -0
  369. package/dist/core/runtime-mode.d.ts.map +1 -1
  370. package/dist/core/runtime-mode.js +4 -0
  371. package/dist/core/runtime-mode.js.map +1 -1
  372. package/dist/core/sandbox-domains.d.ts +14 -0
  373. package/dist/core/sandbox-domains.d.ts.map +1 -0
  374. package/dist/core/sandbox-domains.js +76 -0
  375. package/dist/core/sandbox-domains.js.map +1 -0
  376. package/dist/core/sandbox-feedback.d.ts +22 -0
  377. package/dist/core/sandbox-feedback.d.ts.map +1 -0
  378. package/dist/core/sandbox-feedback.js +69 -0
  379. package/dist/core/sandbox-feedback.js.map +1 -0
  380. package/dist/core/sandbox-feedback.test.d.ts +2 -0
  381. package/dist/core/sandbox-feedback.test.d.ts.map +1 -0
  382. package/dist/core/sandbox-feedback.test.js +32 -0
  383. package/dist/core/sandbox-feedback.test.js.map +1 -0
  384. package/dist/core/sandbox.d.ts +91 -0
  385. package/dist/core/sandbox.d.ts.map +1 -0
  386. package/dist/core/sandbox.js +254 -0
  387. package/dist/core/sandbox.js.map +1 -0
  388. package/dist/core/sandbox.test.d.ts +2 -0
  389. package/dist/core/sandbox.test.d.ts.map +1 -0
  390. package/dist/core/sandbox.test.js +157 -0
  391. package/dist/core/sandbox.test.js.map +1 -0
  392. package/dist/core/session-compaction.d.ts +6 -0
  393. package/dist/core/session-compaction.d.ts.map +1 -1
  394. package/dist/core/session-compaction.js +11 -1
  395. package/dist/core/session-compaction.js.map +1 -1
  396. package/dist/core/session-compaction.test.js +18 -1
  397. package/dist/core/session-compaction.test.js.map +1 -1
  398. package/dist/core/session-export.d.ts +98 -0
  399. package/dist/core/session-export.d.ts.map +1 -0
  400. package/dist/core/session-export.js +364 -0
  401. package/dist/core/session-export.js.map +1 -0
  402. package/dist/core/session-export.test.d.ts +2 -0
  403. package/dist/core/session-export.test.d.ts.map +1 -0
  404. package/dist/core/session-export.test.js +353 -0
  405. package/dist/core/session-export.test.js.map +1 -0
  406. package/dist/core/session-history.d.ts +95 -6
  407. package/dist/core/session-history.d.ts.map +1 -1
  408. package/dist/core/session-history.js +261 -17
  409. package/dist/core/session-history.js.map +1 -1
  410. package/dist/core/session-history.test.js +173 -2
  411. package/dist/core/session-history.test.js.map +1 -1
  412. package/dist/core/session-manager.d.ts +223 -6
  413. package/dist/core/session-manager.d.ts.map +1 -1
  414. package/dist/core/session-manager.js +515 -26
  415. package/dist/core/session-manager.js.map +1 -1
  416. package/dist/core/session-manager.test.js +147 -3
  417. package/dist/core/session-manager.test.js.map +1 -1
  418. package/dist/core/session-notification-visibility.test.d.ts +2 -0
  419. package/dist/core/session-notification-visibility.test.d.ts.map +1 -0
  420. package/dist/core/session-notification-visibility.test.js +113 -0
  421. package/dist/core/session-notification-visibility.test.js.map +1 -0
  422. package/dist/core/session-preview.d.ts +5 -4
  423. package/dist/core/session-preview.d.ts.map +1 -1
  424. package/dist/core/session-preview.js +12 -5
  425. package/dist/core/session-preview.js.map +1 -1
  426. package/dist/core/session-restore-display.test.js +25 -0
  427. package/dist/core/session-restore-display.test.js.map +1 -1
  428. package/dist/core/session-storage.d.ts.map +1 -1
  429. package/dist/core/session-storage.js +64 -4
  430. package/dist/core/session-storage.js.map +1 -1
  431. package/dist/core/session-storage.test.js +10 -2
  432. package/dist/core/session-storage.test.js.map +1 -1
  433. package/dist/core/settings-manager.d.ts +13 -2
  434. package/dist/core/settings-manager.d.ts.map +1 -1
  435. package/dist/core/settings-manager.js +36 -0
  436. package/dist/core/settings-manager.js.map +1 -1
  437. package/dist/core/setup-history.d.ts +0 -6
  438. package/dist/core/setup-history.d.ts.map +1 -1
  439. package/dist/core/setup-history.js +2 -18
  440. package/dist/core/setup-history.js.map +1 -1
  441. package/dist/core/setup-history.test.js +11 -26
  442. package/dist/core/setup-history.test.js.map +1 -1
  443. package/dist/core/skills-routing.test.js +3 -1
  444. package/dist/core/skills-routing.test.js.map +1 -1
  445. package/dist/core/slash-commands.d.ts +18 -0
  446. package/dist/core/slash-commands.d.ts.map +1 -1
  447. package/dist/core/slash-commands.js +42 -10
  448. package/dist/core/slash-commands.js.map +1 -1
  449. package/dist/core/slash-commands.test.d.ts +2 -0
  450. package/dist/core/slash-commands.test.d.ts.map +1 -0
  451. package/dist/core/slash-commands.test.js +59 -0
  452. package/dist/core/slash-commands.test.js.map +1 -0
  453. package/dist/core/speed-benchmark.test.js +9 -3
  454. package/dist/core/speed-benchmark.test.js.map +1 -1
  455. package/dist/core/steering.d.ts +12 -0
  456. package/dist/core/steering.d.ts.map +1 -1
  457. package/dist/core/steering.js +16 -0
  458. package/dist/core/steering.js.map +1 -1
  459. package/dist/core/subagent-manager.d.ts +14 -1
  460. package/dist/core/subagent-manager.d.ts.map +1 -1
  461. package/dist/core/subagent-manager.js +48 -1
  462. package/dist/core/subagent-manager.js.map +1 -1
  463. package/dist/core/subagent-manager.test.js +43 -7
  464. package/dist/core/subagent-manager.test.js.map +1 -1
  465. package/dist/core/subagent-store.test.js +14 -2
  466. package/dist/core/subagent-store.test.js.map +1 -1
  467. package/dist/core/verification-evidence.d.ts +17 -0
  468. package/dist/core/verification-evidence.d.ts.map +1 -0
  469. package/dist/core/verification-evidence.js +283 -0
  470. package/dist/core/verification-evidence.js.map +1 -0
  471. package/dist/core/verification-evidence.test.d.ts +2 -0
  472. package/dist/core/verification-evidence.test.d.ts.map +1 -0
  473. package/dist/core/verification-evidence.test.js +103 -0
  474. package/dist/core/verification-evidence.test.js.map +1 -0
  475. package/dist/core/workspace-guard.d.ts +2 -0
  476. package/dist/core/workspace-guard.d.ts.map +1 -1
  477. package/dist/core/workspace-guard.js +4 -1
  478. package/dist/core/workspace-guard.js.map +1 -1
  479. package/dist/core/workspace-guard.test.js +21 -0
  480. package/dist/core/workspace-guard.test.js.map +1 -1
  481. package/dist/interactive.d.ts.map +1 -1
  482. package/dist/interactive.js +17 -3
  483. package/dist/interactive.js.map +1 -1
  484. package/dist/modes/acp-mode.d.ts +122 -0
  485. package/dist/modes/acp-mode.d.ts.map +1 -0
  486. package/dist/modes/acp-mode.js +1366 -0
  487. package/dist/modes/acp-mode.js.map +1 -0
  488. package/dist/modes/acp-mode.test.d.ts +2 -0
  489. package/dist/modes/acp-mode.test.d.ts.map +1 -0
  490. package/dist/modes/acp-mode.test.js +1065 -0
  491. package/dist/modes/acp-mode.test.js.map +1 -0
  492. package/dist/modes/index.d.ts +1 -0
  493. package/dist/modes/index.d.ts.map +1 -1
  494. package/dist/modes/index.js +1 -0
  495. package/dist/modes/index.js.map +1 -1
  496. package/dist/modes/json-mode.d.ts +35 -0
  497. package/dist/modes/json-mode.d.ts.map +1 -1
  498. package/dist/modes/json-mode.js +38 -0
  499. package/dist/modes/json-mode.js.map +1 -1
  500. package/dist/modes/json-mode.test.d.ts +2 -0
  501. package/dist/modes/json-mode.test.d.ts.map +1 -0
  502. package/dist/modes/json-mode.test.js +84 -0
  503. package/dist/modes/json-mode.test.js.map +1 -0
  504. package/dist/modes/subagent-worker-mode.d.ts +5 -0
  505. package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
  506. package/dist/modes/subagent-worker-mode.js +91 -11
  507. package/dist/modes/subagent-worker-mode.js.map +1 -1
  508. package/dist/modes/subagent-worker-mode.test.d.ts +2 -0
  509. package/dist/modes/subagent-worker-mode.test.d.ts.map +1 -0
  510. package/dist/modes/subagent-worker-mode.test.js +52 -0
  511. package/dist/modes/subagent-worker-mode.test.js.map +1 -0
  512. package/dist/session.d.ts +29 -0
  513. package/dist/session.d.ts.map +1 -1
  514. package/dist/session.js +41 -0
  515. package/dist/session.js.map +1 -1
  516. package/dist/system-prompt.d.ts +11 -1
  517. package/dist/system-prompt.d.ts.map +1 -1
  518. package/dist/system-prompt.js +39 -18
  519. package/dist/system-prompt.js.map +1 -1
  520. package/dist/system-prompt.test.js +33 -17
  521. package/dist/system-prompt.test.js.map +1 -1
  522. package/dist/test-support/fake-home.d.ts +20 -0
  523. package/dist/test-support/fake-home.d.ts.map +1 -0
  524. package/dist/test-support/fake-home.js +37 -0
  525. package/dist/test-support/fake-home.js.map +1 -0
  526. package/dist/tools/bash.d.ts +3 -1
  527. package/dist/tools/bash.d.ts.map +1 -1
  528. package/dist/tools/bash.js +70 -14
  529. package/dist/tools/bash.js.map +1 -1
  530. package/dist/tools/bash.test.js +122 -7
  531. package/dist/tools/bash.test.js.map +1 -1
  532. package/dist/tools/edit-robustness.test.js +3 -1
  533. package/dist/tools/edit-robustness.test.js.map +1 -1
  534. package/dist/tools/find.d.ts.map +1 -1
  535. package/dist/tools/find.js +4 -1
  536. package/dist/tools/find.js.map +1 -1
  537. package/dist/tools/goals.d.ts +2 -2
  538. package/dist/tools/grep.d.ts +3 -1
  539. package/dist/tools/grep.d.ts.map +1 -1
  540. package/dist/tools/grep.js +137 -12
  541. package/dist/tools/grep.js.map +1 -1
  542. package/dist/tools/grep.test.js +53 -0
  543. package/dist/tools/grep.test.js.map +1 -1
  544. package/dist/tools/index.d.ts +19 -2
  545. package/dist/tools/index.d.ts.map +1 -1
  546. package/dist/tools/index.js +22 -19
  547. package/dist/tools/index.js.map +1 -1
  548. package/dist/tools/index.test.d.ts +2 -0
  549. package/dist/tools/index.test.d.ts.map +1 -0
  550. package/dist/tools/index.test.js +55 -0
  551. package/dist/tools/index.test.js.map +1 -0
  552. package/dist/tools/overflow.test.js +4 -7
  553. package/dist/tools/overflow.test.js.map +1 -1
  554. package/dist/tools/path-utils.d.ts +15 -0
  555. package/dist/tools/path-utils.d.ts.map +1 -1
  556. package/dist/tools/path-utils.js +17 -0
  557. package/dist/tools/path-utils.js.map +1 -1
  558. package/dist/tools/path-utils.test.js +7 -2
  559. package/dist/tools/path-utils.test.js.map +1 -1
  560. package/dist/tools/prompt-hints.js +1 -1
  561. package/dist/tools/prompt-hints.js.map +1 -1
  562. package/dist/tools/read-only-bash.d.ts +3 -0
  563. package/dist/tools/read-only-bash.d.ts.map +1 -1
  564. package/dist/tools/read-only-bash.js +7 -9
  565. package/dist/tools/read-only-bash.js.map +1 -1
  566. package/dist/tools/search-code.d.ts.map +1 -1
  567. package/dist/tools/search-code.js +6 -4
  568. package/dist/tools/search-code.js.map +1 -1
  569. package/dist/tools/subagent-control.d.ts.map +1 -1
  570. package/dist/tools/subagent-control.js +6 -2
  571. package/dist/tools/subagent-control.js.map +1 -1
  572. package/dist/tools/subagent-shared.d.ts +6 -0
  573. package/dist/tools/subagent-shared.d.ts.map +1 -1
  574. package/dist/tools/subagent-shared.js +6 -0
  575. package/dist/tools/subagent-shared.js.map +1 -1
  576. package/dist/tools/subagent.d.ts +1 -1
  577. package/dist/tools/subagent.d.ts.map +1 -1
  578. package/dist/tools/subagent.js +51 -8
  579. package/dist/tools/subagent.js.map +1 -1
  580. package/dist/tools/subagent.test.js +65 -3
  581. package/dist/tools/subagent.test.js.map +1 -1
  582. package/dist/tools/task-output.d.ts.map +1 -1
  583. package/dist/tools/task-output.js +3 -1
  584. package/dist/tools/task-output.js.map +1 -1
  585. package/dist/tools/tool-search.d.ts +12 -1
  586. package/dist/tools/tool-search.d.ts.map +1 -1
  587. package/dist/tools/tool-search.js +22 -3
  588. package/dist/tools/tool-search.js.map +1 -1
  589. package/dist/tools/tool-search.test.d.ts +2 -0
  590. package/dist/tools/tool-search.test.d.ts.map +1 -0
  591. package/dist/tools/tool-search.test.js +69 -0
  592. package/dist/tools/tool-search.test.js.map +1 -0
  593. package/dist/tools/web-fetch.d.ts +3 -2
  594. package/dist/tools/web-fetch.d.ts.map +1 -1
  595. package/dist/tools/web-fetch.js +22 -8
  596. package/dist/tools/web-fetch.js.map +1 -1
  597. package/dist/tools/web-fetch.test.js +34 -0
  598. package/dist/tools/web-fetch.test.js.map +1 -1
  599. package/dist/tools/web-search.d.ts +2 -1
  600. package/dist/tools/web-search.d.ts.map +1 -1
  601. package/dist/tools/web-search.js +21 -5
  602. package/dist/tools/web-search.js.map +1 -1
  603. package/dist/types.d.ts +7 -0
  604. package/dist/types.d.ts.map +1 -1
  605. package/dist/ui/App.d.ts.map +1 -1
  606. package/dist/ui/App.js +32 -81
  607. package/dist/ui/App.js.map +1 -1
  608. package/dist/ui/app-items.d.ts +1 -12
  609. package/dist/ui/app-items.d.ts.map +1 -1
  610. package/dist/ui/app-items.js.map +1 -1
  611. package/dist/ui/components/Footer.d.ts +1 -1
  612. package/dist/ui/components/Footer.js +2 -2
  613. package/dist/ui/components/Footer.js.map +1 -1
  614. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  615. package/dist/ui/hooks/useAgentLoop.js +18 -4
  616. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  617. package/dist/ui/hooks/usePixelFixFlow.d.ts +1 -2
  618. package/dist/ui/hooks/usePixelFixFlow.d.ts.map +1 -1
  619. package/dist/ui/hooks/usePixelFixFlow.js +2 -5
  620. package/dist/ui/hooks/usePixelFixFlow.js.map +1 -1
  621. package/dist/ui/login.js +1 -1
  622. package/dist/ui/login.js.map +1 -1
  623. package/dist/ui/terminal-history-status-renderers.d.ts +1 -2
  624. package/dist/ui/terminal-history-status-renderers.d.ts.map +1 -1
  625. package/dist/ui/terminal-history-status-renderers.js +2 -15
  626. package/dist/ui/terminal-history-status-renderers.js.map +1 -1
  627. package/dist/ui/terminal-history.d.ts.map +1 -1
  628. package/dist/ui/terminal-history.js +2 -4
  629. package/dist/ui/terminal-history.js.map +1 -1
  630. package/dist/ui/thinking-level-cycle.test.js +8 -8
  631. package/dist/ui/thinking-level-cycle.test.js.map +1 -1
  632. package/dist/ui/transcript/MiscRows.d.ts +1 -4
  633. package/dist/ui/transcript/MiscRows.d.ts.map +1 -1
  634. package/dist/ui/transcript/MiscRows.js +2 -7
  635. package/dist/ui/transcript/MiscRows.js.map +1 -1
  636. package/dist/ui/transcript/TranscriptRenderer.d.ts.map +1 -1
  637. package/dist/ui/transcript/TranscriptRenderer.js +1 -3
  638. package/dist/ui/transcript/TranscriptRenderer.js.map +1 -1
  639. package/dist/ui/transcript/presentation.d.ts +1 -9
  640. package/dist/ui/transcript/presentation.d.ts.map +1 -1
  641. package/dist/ui/transcript/presentation.js +0 -9
  642. package/dist/ui/transcript/presentation.js.map +1 -1
  643. package/dist/ui/transcript/spacing.d.ts +2 -2
  644. package/dist/ui/transcript/spacing.d.ts.map +1 -1
  645. package/dist/ui/transcript/spacing.js +0 -1
  646. package/dist/ui/transcript/spacing.js.map +1 -1
  647. package/dist/ui/transcript/spacing.test.js +1 -3
  648. package/dist/ui/transcript/spacing.test.js.map +1 -1
  649. package/dist/ui/tui-history-parity.test.js +2 -9
  650. package/dist/ui/tui-history-parity.test.js.map +1 -1
  651. package/dist/utils/github.d.ts +20 -0
  652. package/dist/utils/github.d.ts.map +1 -0
  653. package/dist/utils/github.js +65 -0
  654. package/dist/utils/github.js.map +1 -0
  655. package/dist/utils/github.test.d.ts +2 -0
  656. package/dist/utils/github.test.d.ts.map +1 -0
  657. package/dist/utils/github.test.js +23 -0
  658. package/dist/utils/github.test.js.map +1 -0
  659. package/dist/utils/image.d.ts +26 -3
  660. package/dist/utils/image.d.ts.map +1 -1
  661. package/dist/utils/image.js +83 -14
  662. package/dist/utils/image.js.map +1 -1
  663. package/dist/utils/image.test.d.ts +2 -0
  664. package/dist/utils/image.test.d.ts.map +1 -0
  665. package/dist/utils/image.test.js +139 -0
  666. package/dist/utils/image.test.js.map +1 -0
  667. package/dist/utils/process.d.ts +26 -3
  668. package/dist/utils/process.d.ts.map +1 -1
  669. package/dist/utils/process.js +68 -10
  670. package/dist/utils/process.js.map +1 -1
  671. package/dist/utils/process.test.d.ts +2 -0
  672. package/dist/utils/process.test.d.ts.map +1 -0
  673. package/dist/utils/process.test.js +42 -0
  674. package/dist/utils/process.test.js.map +1 -0
  675. package/package.json +6 -5
package/dist/config.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import path from "node:path";
2
2
  import fs from "node:fs/promises";
3
3
  import fsSync from "node:fs";
4
+ import { createHash } from "node:crypto";
4
5
  import { getAppPaths } from "@prestyj/core";
5
6
  export const APP_NAME = "ezcoder";
6
7
  export const VERSION = "0.0.1";
@@ -38,6 +39,8 @@ function isValidProvider(value) {
38
39
  export function loadSavedSettings(settingsFilePath) {
39
40
  const filePath = settingsFilePath ?? getAppPaths().settingsFile;
40
41
  const result = {
42
+ autoCompact: true,
43
+ compactThreshold: 0.85,
41
44
  thinkingEnabled: false,
42
45
  theme: "auto",
43
46
  idealReviewEnabled: true,
@@ -58,6 +61,14 @@ export function loadSavedSettings(settingsFilePath) {
58
61
  if (typeof raw.defaultModel === "string")
59
62
  result.model = raw.defaultModel;
60
63
  }
64
+ if (raw.autoCompact === false)
65
+ result.autoCompact = false;
66
+ if (typeof raw.compactThreshold === "number" &&
67
+ Number.isFinite(raw.compactThreshold) &&
68
+ raw.compactThreshold >= 0.1 &&
69
+ raw.compactThreshold <= 1) {
70
+ result.compactThreshold = raw.compactThreshold;
71
+ }
61
72
  if (raw.thinkingEnabled === true)
62
73
  result.thinkingEnabled = true;
63
74
  if (isValidThinkingLevel(raw.thinkingLevel))
@@ -108,8 +119,23 @@ const VALID_THEME_SETTINGS = new Set([
108
119
  function isValidThemeSetting(value) {
109
120
  return VALID_THEME_SETTINGS.has(value);
110
121
  }
111
- /** Seed built-in agent definitions on first run (won't overwrite user edits). */
112
- async function seedDefaultAgents(agentsDir) {
122
+ /**
123
+ * SHA-256 of the exact `auditor.md` / `skeptic.md` bodies seeded by v5.22.6.
124
+ * Used to delete only our own mistakenly-seeded copies — never a user's file.
125
+ */
126
+ export const SHADOWING_SEEDED_AGENT_HASHES = {
127
+ "auditor.md": "7c8c6c1ff892a7ebf45164b0367e340f099cf2cd611bfec23eb39ecc24592502",
128
+ "skeptic.md": "7def72d81da78919efb4934f396d8da47912786a49176badf996eac4d57a285d",
129
+ };
130
+ /**
131
+ * Seed built-in agent definitions on first run (won't overwrite user edits).
132
+ *
133
+ * Exported for tests: `getAppPaths()` resolves `os.homedir()` inside gg-core's
134
+ * prebuilt dist, which vitest does not transform, so a homedir spy would not
135
+ * apply and the test would operate on the developer's real `~/.ezcoder`. Tests must
136
+ * call this with an explicit temp directory instead of going via ensureAppDirs.
137
+ */
138
+ export async function seedDefaultAgents(agentsDir) {
113
139
  const defaults = {
114
140
  "owl.md": `---
115
141
  name: owl
@@ -172,6 +198,29 @@ Do the work, don't just describe it. Don't over-engineer.
172
198
  await fs.writeFile(filePath, content, "utf-8");
173
199
  }
174
200
  }
201
+ await removeShadowingSeededAgents(agentsDir);
202
+ }
203
+ /**
204
+ * v5.22.6 briefly seeded `auditor.md` / `skeptic.md` into the user agents dir.
205
+ * Those names are already shipped as BUNDLED_AGENTS with richer prompts, and
206
+ * user-dir agents take precedence — so the seeded copies silently shadowed the
207
+ * bundled ones (a weaker /bullet-proof). Delete them, but ONLY when the file is
208
+ * byte-identical to what 5.22.6 wrote, so a user who edited or authored their
209
+ * own agent of that name keeps it.
210
+ */
211
+ async function removeShadowingSeededAgents(agentsDir) {
212
+ for (const [filename, seededHash] of Object.entries(SHADOWING_SEEDED_AGENT_HASHES)) {
213
+ const filePath = path.join(agentsDir, filename);
214
+ try {
215
+ const content = await fs.readFile(filePath, "utf-8");
216
+ const hash = createHash("sha256").update(content, "utf-8").digest("hex");
217
+ if (hash === seededHash)
218
+ await fs.rm(filePath, { force: true });
219
+ }
220
+ catch {
221
+ // Missing or unreadable — nothing to clean up.
222
+ }
223
+ }
175
224
  }
176
225
  /** Seed built-in skill definitions on first run (won't overwrite user edits). */
177
226
  async function seedDefaultSkills(skillsDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,12 @@
1
1
  import fs from "node:fs";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
+ import { createHash } from "node:crypto";
5
+ import { fileURLToPath } from "node:url";
4
6
  import { afterEach, describe, expect, it } from "vitest";
5
- import { loadSavedSettings } from "./config.js";
7
+ import { loadSavedSettings, seedDefaultAgents, SHADOWING_SEEDED_AGENT_HASHES } from "./config.js";
8
+ import { BUNDLED_AGENTS } from "./core/agents.js";
9
+ const fixturesDir = path.join(path.dirname(fileURLToPath(import.meta.url)), "__fixtures__");
6
10
  const tempDirs = [];
7
11
  function tempSettingsPath() {
8
12
  const dir = fs.mkdtempSync(path.join(os.tmpdir(), "ezcoder-config-"));
@@ -15,9 +19,11 @@ afterEach(() => {
15
19
  }
16
20
  });
17
21
  describe("loadSavedSettings", () => {
18
- it("defaults ideal review to enabled", () => {
22
+ it("defaults ideal review and shared compaction policy", () => {
19
23
  const settings = loadSavedSettings(tempSettingsPath());
20
24
  expect(settings.idealReviewEnabled).toBe(true);
25
+ expect(settings.autoCompact).toBe(true);
26
+ expect(settings.compactThreshold).toBe(0.85);
21
27
  });
22
28
  it("honors an explicit ideal review disable", () => {
23
29
  const settingsPath = tempSettingsPath();
@@ -35,6 +41,13 @@ describe("loadSavedSettings", () => {
35
41
  const settings = loadSavedSettings(settingsPath);
36
42
  expect(settings.autoApprovePlans).toBe(false);
37
43
  });
44
+ it("loads the configured compaction policy used by CLI resume", () => {
45
+ const settingsPath = tempSettingsPath();
46
+ fs.writeFileSync(settingsPath, JSON.stringify({ autoCompact: false, compactThreshold: 0.72 }), "utf-8");
47
+ const settings = loadSavedSettings(settingsPath);
48
+ expect(settings.autoCompact).toBe(false);
49
+ expect(settings.compactThreshold).toBe(0.72);
50
+ });
38
51
  it("accepts xai as a saved provider", () => {
39
52
  const settingsPath = tempSettingsPath();
40
53
  fs.writeFileSync(settingsPath, JSON.stringify({ defaultProvider: "xai", defaultModel: "grok-4.5" }), "utf-8");
@@ -43,4 +56,60 @@ describe("loadSavedSettings", () => {
43
56
  expect(settings.model).toBe("grok-4.5");
44
57
  });
45
58
  });
59
+ // v5.22.6 seeded auditor.md / skeptic.md into the user agents dir, silently
60
+ // shadowing the richer BUNDLED_AGENTS of the same name. seedDefaultAgents now
61
+ // cleans them up on next launch — but only when the file is untouched.
62
+ //
63
+ // These call seedDefaultAgents(dir) directly: getAppPaths() resolves
64
+ // os.homedir() inside gg-core's prebuilt dist, which vitest does not transform,
65
+ // so going via ensureAppDirs would ignore a homedir spy and mutate the real
66
+ // ~/.ezcoder.
67
+ describe("seedDefaultAgents shadowing-agent cleanup", () => {
68
+ // Byte-exact copies of what v5.22.6 wrote, so the deletion path is tested
69
+ // against the real thing rather than a paraphrase.
70
+ const SEEDED_AUDITOR = fs.readFileSync(path.join(fixturesDir, "seeded-auditor-v5.22.6.md"), "utf-8");
71
+ it("the recorded hashes match the real v5.22.6 seed files", () => {
72
+ for (const [name, fixture] of [
73
+ ["auditor.md", "seeded-auditor-v5.22.6.md"],
74
+ ["skeptic.md", "seeded-skeptic-v5.22.6.md"],
75
+ ]) {
76
+ const content = fs.readFileSync(path.join(fixturesDir, fixture), "utf-8");
77
+ const hash = createHash("sha256").update(content, "utf-8").digest("hex");
78
+ expect(hash, name).toBe(SHADOWING_SEEDED_AGENT_HASHES[name]);
79
+ }
80
+ });
81
+ function tempAgentsDir() {
82
+ const dir = fs.mkdtempSync(path.join(os.tmpdir(), "ezcoder-agents-"));
83
+ tempDirs.push(dir);
84
+ return dir;
85
+ }
86
+ it("deletes an untouched seeded auditor.md so the bundled agent wins again", async () => {
87
+ const dir = tempAgentsDir();
88
+ fs.writeFileSync(path.join(dir, "auditor.md"), SEEDED_AUDITOR, "utf-8");
89
+ await seedDefaultAgents(dir);
90
+ expect(fs.existsSync(path.join(dir, "auditor.md"))).toBe(false);
91
+ expect(BUNDLED_AGENTS.some((a) => a.name === "auditor")).toBe(true);
92
+ });
93
+ it("keeps a user-modified auditor.md", async () => {
94
+ const dir = tempAgentsDir();
95
+ const mine = SEEDED_AUDITOR + "\nMy own extra rule.\n";
96
+ fs.writeFileSync(path.join(dir, "auditor.md"), mine, "utf-8");
97
+ await seedDefaultAgents(dir);
98
+ expect(fs.readFileSync(path.join(dir, "auditor.md"), "utf-8")).toBe(mine);
99
+ });
100
+ it("seeds owl and bee but never auditor or skeptic", async () => {
101
+ const dir = tempAgentsDir();
102
+ await seedDefaultAgents(dir);
103
+ expect(fs.existsSync(path.join(dir, "owl.md"))).toBe(true);
104
+ expect(fs.existsSync(path.join(dir, "bee.md"))).toBe(true);
105
+ expect(fs.existsSync(path.join(dir, "auditor.md"))).toBe(false);
106
+ expect(fs.existsSync(path.join(dir, "skeptic.md"))).toBe(false);
107
+ });
108
+ it("does not overwrite a user's edited owl.md", async () => {
109
+ const dir = tempAgentsDir();
110
+ fs.writeFileSync(path.join(dir, "owl.md"), "mine", "utf-8");
111
+ await seedDefaultAgents(dir);
112
+ expect(fs.readFileSync(path.join(dir, "owl.md"), "utf-8")).toBe("mine");
113
+ });
114
+ });
46
115
  //# sourceMappingURL=config.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.test.js","sourceRoot":"","sources":["../src/config.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-mcp-passthrough.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-mcp-passthrough.test.d.ts","sourceRoot":"","sources":["../../src/core/agent-mcp-passthrough.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,61 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import fs from "node:fs";
3
+ import path from "node:path";
4
+ import { fileURLToPath } from "node:url";
5
+ import { mcpServersForAgent, parseAgentFile } from "./agents.js";
6
+ const __dirname = path.dirname(fileURLToPath(import.meta.url));
7
+ const src = (rel) => fs.readFileSync(path.join(__dirname, "..", rel), "utf-8");
8
+ /**
9
+ * An allow-listed session (`allowedTools` set, i.e. every named agent) connects
10
+ * MCP servers ONLY when they're named in `allowedMcpServers` — see
11
+ * `AgentSession.connectMcpServers`. That whitelist has to survive the whole
12
+ * spawn chain or a research agent silently falls back to training data:
13
+ *
14
+ * agent frontmatter `tools:`
15
+ * → mcpServersForAgent()
16
+ * → subagent.ts `--mcp-servers` / subagent-manager `allowedMcpServers`
17
+ * → cli.ts | app-sidecar.ts parseArgs
18
+ * → runJsonMode / subagent worker
19
+ * → AgentSession
20
+ *
21
+ * These assertions pin each link so a future refactor can't quietly drop one.
22
+ */
23
+ describe("agent MCP whitelist passthrough", () => {
24
+ it("derives the whitelist from an agent that asks for kencode-search", () => {
25
+ const agent = parseAgentFile([
26
+ "---",
27
+ "name: prospector",
28
+ "description: real-code researcher",
29
+ "tools: read, grep, mcp__kencode-search__searchCode, mcp__kencode-search__discoverRepos",
30
+ "---",
31
+ "You find real code.",
32
+ ].join("\n"), "global");
33
+ expect(agent.tools).toContain("mcp__kencode-search__searchCode");
34
+ expect(mcpServersForAgent(agent.tools)).toEqual(["kencode-search"]);
35
+ });
36
+ it("the blocking subagent spawn forwards --mcp-servers", () => {
37
+ const subagent = src("tools/subagent.ts");
38
+ expect(subagent).toContain("mcpServersForAgent(agentDef.tools)");
39
+ expect(subagent).toContain('cliArgs.push("--mcp-servers"');
40
+ });
41
+ it("both JSON-mode entry points parse --mcp-servers into allowedMcpServers", () => {
42
+ for (const file of ["cli.ts", "app-sidecar.ts"]) {
43
+ const source = src(file);
44
+ expect(source, file).toContain('"mcp-servers": { type: "string" }');
45
+ expect(source, file).toContain("allowedMcpServers");
46
+ }
47
+ });
48
+ it("json-mode hands allowedMcpServers to the AgentSession", () => {
49
+ const jsonMode = src("modes/json-mode.ts");
50
+ expect(jsonMode).toContain("allowedMcpServers?: string[]");
51
+ expect(jsonMode).toContain("allowedMcpServers: options.allowedMcpServers");
52
+ });
53
+ it("the async spawn path sets allowedMcpServers alongside allowedTools", () => {
54
+ const manager = src("core/subagent-manager.ts");
55
+ const worker = src("modes/subagent-worker-mode.ts");
56
+ // Both spawn call sites (initial spawn + resume) must set it.
57
+ expect(manager.match(/allowedMcpServers:/g) ?? []).toHaveLength(2);
58
+ expect(worker).toContain("allowedMcpServers?: string[]");
59
+ });
60
+ });
61
+ //# sourceMappingURL=agent-mcp-passthrough.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-mcp-passthrough.test.js","sourceRoot":"","sources":["../../src/core/agent-mcp-passthrough.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEjE,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,GAAG,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAEvF;;;;;;;;;;;;;;GAcG;AACH,QAAQ,CAAC,iCAAiC,EAAE,GAAG,EAAE;IAC/C,EAAE,CAAC,kEAAkE,EAAE,GAAG,EAAE;QAC1E,MAAM,KAAK,GAAG,cAAc,CAC1B;YACE,KAAK;YACL,kBAAkB;YAClB,mCAAmC;YACnC,wFAAwF;YACxF,KAAK;YACL,qBAAqB;SACtB,CAAC,IAAI,CAAC,IAAI,CAAC,EACZ,QAAQ,CACT,CAAC;QAEF,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,iCAAiC,CAAC,CAAC;QACjE,MAAM,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,QAAQ,GAAG,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAC1C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,oCAAoC,CAAC,CAAC;QACjE,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wEAAwE,EAAE,GAAG,EAAE;QAChF,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;YACzB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,mCAAmC,CAAC,CAAC;YACpE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,mBAAmB,CAAC,CAAC;QACtD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;QAC/D,MAAM,QAAQ,GAAG,GAAG,CAAC,oBAAoB,CAAC,CAAC;QAC3C,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;QAC3D,MAAM,CAAC,QAAQ,CAAC,CAAC,SAAS,CAAC,8CAA8C,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC5E,MAAM,OAAO,GAAG,GAAG,CAAC,0BAA0B,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,GAAG,CAAC,+BAA+B,CAAC,CAAC;QACpD,8DAA8D;QAC9D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACnE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,8BAA8B,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Bounded push queue for out-of-band events the agent should learn about
3
+ * without spending a turn asking — a spawned child finishing, a background
4
+ * build making progress or exiting.
5
+ *
6
+ * The queue is deliberately lossy. Only the LATEST entry per `(kind, id)`
7
+ * survives, because a stale "build is 40% through" line is worthless next to
8
+ * "build exited 1", and a parent that spawned five children needs five facts,
9
+ * not fifty. Terminal entries supersede pending non-terminal ones for the same
10
+ * id and cannot themselves be superseded by a later non-terminal update, so a
11
+ * completion can never be overwritten by a straggling progress tick.
12
+ *
13
+ * Every bound here protects the same thing: injected bytes per drain. These
14
+ * notifications ride the steering path into live context, so an unbounded
15
+ * queue would silently eat the context window it is meant to save.
16
+ */
17
+ /** Notification source. Extended as new push producers are added. */
18
+ export type NotificationKind = "subagent" | "process";
19
+ export interface AgentNotification {
20
+ kind: NotificationKind;
21
+ /** Producer-scoped identity (agent id, process id). Dedupe key with `kind`. */
22
+ id: string;
23
+ /** Bounded, human-readable one-liner. Never raw output. */
24
+ text: string;
25
+ /** True once the producer reached a final state (child done, process exited). */
26
+ terminal: boolean;
27
+ /** Unix epoch ms of the most recent update for this `(kind, id)`. */
28
+ updatedAt: number;
29
+ }
30
+ /** Max characters retained for a single notification's text. */
31
+ export declare const NOTIFICATION_MAX_CHARS = 512;
32
+ /** Max characters returned by one `drain()`, across all notifications. */
33
+ export declare const NOTIFICATION_DRAIN_MAX_CHARS = 1024;
34
+ /**
35
+ * FIFO with latest-only dedupe by `(kind, id)`. Insertion order is preserved
36
+ * across updates: an entry that is updated keeps its original queue position,
37
+ * so a chatty producer cannot starve an older, quieter one out of a drain.
38
+ */
39
+ export declare class AgentNotificationQueue {
40
+ private entries;
41
+ private static key;
42
+ /**
43
+ * Record the latest state for one producer. Returns false when the update
44
+ * was dropped because a terminal entry for the same id already exists.
45
+ */
46
+ enqueue(kind: NotificationKind, id: string, text: string, options?: {
47
+ terminal?: boolean;
48
+ }): boolean;
49
+ /** Number of notifications currently waiting. */
50
+ get size(): number;
51
+ /** Discard any pending notification for one producer (e.g. on reap). */
52
+ clear(kind: NotificationKind, id: string): void;
53
+ /** Discard everything (e.g. between runs). */
54
+ clearAll(): void;
55
+ /**
56
+ * Take pending notifications, oldest first, up to the per-drain char budget.
57
+ * Taken entries are removed; entries that did not fit stay queued for the
58
+ * next drain rather than being dropped.
59
+ */
60
+ drain(): AgentNotification[];
61
+ }
62
+ //# sourceMappingURL=agent-notifications.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-notifications.d.ts","sourceRoot":"","sources":["../../src/core/agent-notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,qEAAqE;AACrE,MAAM,MAAM,gBAAgB,GAAG,UAAU,GAAG,SAAS,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,gBAAgB,CAAC;IACvB,+EAA+E;IAC/E,EAAE,EAAE,MAAM,CAAC;IACX,2DAA2D;IAC3D,IAAI,EAAE,MAAM,CAAC;IACb,iFAAiF;IACjF,QAAQ,EAAE,OAAO,CAAC;IAClB,qEAAqE;IACrE,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,gEAAgE;AAChE,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAC1C,0EAA0E;AAC1E,eAAO,MAAM,4BAA4B,OAAO,CAAC;AAOjD;;;;GAIG;AACH,qBAAa,sBAAsB;IACjC,OAAO,CAAC,OAAO,CAAwC;IAEvD,OAAO,CAAC,MAAM,CAAC,GAAG;IAIlB;;;OAGG;IACH,OAAO,CACL,IAAI,EAAE,gBAAgB,EACtB,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;KAAO,GACnC,OAAO;IAgBV,iDAAiD;IACjD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,wEAAwE;IACxE,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI;IAI/C,8CAA8C;IAC9C,QAAQ,IAAI,IAAI;IAIhB;;;;OAIG;IACH,KAAK,IAAI,iBAAiB,EAAE;CAmB7B"}
@@ -0,0 +1,92 @@
1
+ /**
2
+ * Bounded push queue for out-of-band events the agent should learn about
3
+ * without spending a turn asking — a spawned child finishing, a background
4
+ * build making progress or exiting.
5
+ *
6
+ * The queue is deliberately lossy. Only the LATEST entry per `(kind, id)`
7
+ * survives, because a stale "build is 40% through" line is worthless next to
8
+ * "build exited 1", and a parent that spawned five children needs five facts,
9
+ * not fifty. Terminal entries supersede pending non-terminal ones for the same
10
+ * id and cannot themselves be superseded by a later non-terminal update, so a
11
+ * completion can never be overwritten by a straggling progress tick.
12
+ *
13
+ * Every bound here protects the same thing: injected bytes per drain. These
14
+ * notifications ride the steering path into live context, so an unbounded
15
+ * queue would silently eat the context window it is meant to save.
16
+ */
17
+ /** Max characters retained for a single notification's text. */
18
+ export const NOTIFICATION_MAX_CHARS = 512;
19
+ /** Max characters returned by one `drain()`, across all notifications. */
20
+ export const NOTIFICATION_DRAIN_MAX_CHARS = 1024;
21
+ function truncate(text, maxChars) {
22
+ const collapsed = text.replace(/\s+/g, " ").trim();
23
+ return collapsed.length <= maxChars ? collapsed : `${collapsed.slice(0, maxChars - 1)}\u2026`;
24
+ }
25
+ /**
26
+ * FIFO with latest-only dedupe by `(kind, id)`. Insertion order is preserved
27
+ * across updates: an entry that is updated keeps its original queue position,
28
+ * so a chatty producer cannot starve an older, quieter one out of a drain.
29
+ */
30
+ export class AgentNotificationQueue {
31
+ entries = new Map();
32
+ static key(kind, id) {
33
+ return `${kind}:${id}`;
34
+ }
35
+ /**
36
+ * Record the latest state for one producer. Returns false when the update
37
+ * was dropped because a terminal entry for the same id already exists.
38
+ */
39
+ enqueue(kind, id, text, options = {}) {
40
+ const terminal = options.terminal === true;
41
+ const key = AgentNotificationQueue.key(kind, id);
42
+ const existing = this.entries.get(key);
43
+ // A completion is the last word — a late progress tick must not erase it.
44
+ if (existing?.terminal && !terminal)
45
+ return false;
46
+ this.entries.set(key, {
47
+ kind,
48
+ id,
49
+ text: truncate(text, NOTIFICATION_MAX_CHARS),
50
+ terminal,
51
+ updatedAt: Date.now(),
52
+ });
53
+ return true;
54
+ }
55
+ /** Number of notifications currently waiting. */
56
+ get size() {
57
+ return this.entries.size;
58
+ }
59
+ /** Discard any pending notification for one producer (e.g. on reap). */
60
+ clear(kind, id) {
61
+ this.entries.delete(AgentNotificationQueue.key(kind, id));
62
+ }
63
+ /** Discard everything (e.g. between runs). */
64
+ clearAll() {
65
+ this.entries.clear();
66
+ }
67
+ /**
68
+ * Take pending notifications, oldest first, up to the per-drain char budget.
69
+ * Taken entries are removed; entries that did not fit stay queued for the
70
+ * next drain rather than being dropped.
71
+ */
72
+ drain() {
73
+ const taken = [];
74
+ let budget = NOTIFICATION_DRAIN_MAX_CHARS;
75
+ for (const [key, entry] of this.entries) {
76
+ if (entry.text.length > budget) {
77
+ // Nothing taken yet and even one entry overflows: take it truncated
78
+ // rather than deadlocking the queue on an oversized head.
79
+ if (taken.length === 0) {
80
+ taken.push({ ...entry, text: truncate(entry.text, budget) });
81
+ this.entries.delete(key);
82
+ }
83
+ break;
84
+ }
85
+ budget -= entry.text.length;
86
+ taken.push(entry);
87
+ this.entries.delete(key);
88
+ }
89
+ return taken;
90
+ }
91
+ }
92
+ //# sourceMappingURL=agent-notifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-notifications.js","sourceRoot":"","sources":["../../src/core/agent-notifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAiBH,gEAAgE;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,GAAG,CAAC;AAC1C,0EAA0E;AAC1E,MAAM,CAAC,MAAM,4BAA4B,GAAG,IAAI,CAAC;AAEjD,SAAS,QAAQ,CAAC,IAAY,EAAE,QAAgB;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IACnD,OAAO,SAAS,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC;AAChG,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,sBAAsB;IACzB,OAAO,GAAG,IAAI,GAAG,EAA6B,CAAC;IAE/C,MAAM,CAAC,GAAG,CAAC,IAAsB,EAAE,EAAU;QACnD,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;IACzB,CAAC;IAED;;;OAGG;IACH,OAAO,CACL,IAAsB,EACtB,EAAU,EACV,IAAY,EACZ,UAAkC,EAAE;QAEpC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC;QAC3C,MAAM,GAAG,GAAG,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,0EAA0E;QAC1E,IAAI,QAAQ,EAAE,QAAQ,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAClD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE;YACpB,IAAI;YACJ,EAAE;YACF,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAC;YAC5C,QAAQ;YACR,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;SACtB,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IAED,iDAAiD;IACjD,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC3B,CAAC;IAED,wEAAwE;IACxE,KAAK,CAAC,IAAsB,EAAE,EAAU;QACtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,sBAAsB,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,8CAA8C;IAC9C,QAAQ;QACN,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,MAAM,KAAK,GAAwB,EAAE,CAAC;QACtC,IAAI,MAAM,GAAG,4BAA4B,CAAC;QAC1C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;gBAC/B,oEAAoE;gBACpE,0DAA0D;gBAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACvB,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;oBAC7D,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC3B,CAAC;gBACD,MAAM;YACR,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC;YAC5B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-notifications.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-notifications.test.d.ts","sourceRoot":"","sources":["../../src/core/agent-notifications.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,97 @@
1
+ import { describe, it, expect } from "vitest";
2
+ import { AgentNotificationQueue, NOTIFICATION_DRAIN_MAX_CHARS, NOTIFICATION_MAX_CHARS, } from "./agent-notifications.js";
3
+ describe("AgentNotificationQueue", () => {
4
+ it("drains in insertion order and clears itself", () => {
5
+ const q = new AgentNotificationQueue();
6
+ q.enqueue("subagent", "a", "first");
7
+ q.enqueue("subagent", "b", "second");
8
+ expect(q.drain().map((n) => n.text)).toEqual(["first", "second"]);
9
+ expect(q.size).toBe(0);
10
+ expect(q.drain()).toEqual([]);
11
+ });
12
+ it("keeps only the latest entry per (kind, id)", () => {
13
+ const q = new AgentNotificationQueue();
14
+ q.enqueue("process", "p1", "10% done");
15
+ q.enqueue("process", "p1", "90% done");
16
+ const drained = q.drain();
17
+ expect(drained).toHaveLength(1);
18
+ expect(drained[0].text).toBe("90% done");
19
+ });
20
+ it("keys dedupe by kind as well as id", () => {
21
+ const q = new AgentNotificationQueue();
22
+ q.enqueue("process", "1", "process one");
23
+ q.enqueue("subagent", "1", "child one");
24
+ expect(q.drain()).toHaveLength(2);
25
+ });
26
+ it("preserves queue position when an entry is updated", () => {
27
+ const q = new AgentNotificationQueue();
28
+ q.enqueue("process", "p1", "old");
29
+ q.enqueue("process", "p2", "other");
30
+ q.enqueue("process", "p1", "new");
31
+ expect(q.drain().map((n) => n.text)).toEqual(["new", "other"]);
32
+ });
33
+ it("lets a terminal entry supersede a pending progress entry", () => {
34
+ const q = new AgentNotificationQueue();
35
+ q.enqueue("process", "p1", "still building");
36
+ expect(q.enqueue("process", "p1", "exited 0", { terminal: true })).toBe(true);
37
+ const drained = q.drain();
38
+ expect(drained).toHaveLength(1);
39
+ expect(drained[0]).toMatchObject({ text: "exited 0", terminal: true });
40
+ });
41
+ it("refuses to overwrite a terminal entry with a late progress tick", () => {
42
+ const q = new AgentNotificationQueue();
43
+ q.enqueue("process", "p1", "exited 1", { terminal: true });
44
+ expect(q.enqueue("process", "p1", "50% done")).toBe(false);
45
+ expect(q.drain()[0]).toMatchObject({ text: "exited 1", terminal: true });
46
+ });
47
+ it("allows a terminal entry to replace an earlier terminal entry", () => {
48
+ const q = new AgentNotificationQueue();
49
+ q.enqueue("subagent", "a", "failed", { terminal: true });
50
+ q.enqueue("subagent", "a", "done", { terminal: true });
51
+ expect(q.drain()[0].text).toBe("done");
52
+ });
53
+ it("caps a single notification at NOTIFICATION_MAX_CHARS", () => {
54
+ const q = new AgentNotificationQueue();
55
+ q.enqueue("subagent", "a", "x".repeat(NOTIFICATION_MAX_CHARS * 3));
56
+ const [entry] = q.drain();
57
+ expect(entry.text.length).toBe(NOTIFICATION_MAX_CHARS);
58
+ expect(entry.text.endsWith("\u2026")).toBe(true);
59
+ });
60
+ it("collapses whitespace so multi-line output cannot inflate a notification", () => {
61
+ const q = new AgentNotificationQueue();
62
+ q.enqueue("process", "p1", " build\n\n failed \t badly ");
63
+ expect(q.drain()[0].text).toBe("build failed badly");
64
+ });
65
+ it("caps one drain at NOTIFICATION_DRAIN_MAX_CHARS and requeues the rest", () => {
66
+ const q = new AgentNotificationQueue();
67
+ for (let i = 0; i < 6; i++)
68
+ q.enqueue("subagent", `a${i}`, "y".repeat(NOTIFICATION_MAX_CHARS));
69
+ const first = q.drain();
70
+ const firstChars = first.reduce((sum, n) => sum + n.text.length, 0);
71
+ expect(firstChars).toBeLessThanOrEqual(NOTIFICATION_DRAIN_MAX_CHARS);
72
+ expect(first).toHaveLength(2);
73
+ // Nothing is lost — the remainder waits for the next drain.
74
+ expect(q.size).toBe(4);
75
+ });
76
+ it("never deadlocks on an oversized head entry", () => {
77
+ const q = new AgentNotificationQueue();
78
+ // Two max-size entries fill the drain budget exactly; add a third.
79
+ q.enqueue("subagent", "a", "y".repeat(NOTIFICATION_MAX_CHARS));
80
+ q.enqueue("subagent", "b", "y".repeat(NOTIFICATION_MAX_CHARS));
81
+ q.enqueue("subagent", "c", "z".repeat(NOTIFICATION_MAX_CHARS));
82
+ expect(q.drain()).toHaveLength(2);
83
+ const rest = q.drain();
84
+ expect(rest).toHaveLength(1);
85
+ expect(q.size).toBe(0);
86
+ });
87
+ it("clears a single producer and everything", () => {
88
+ const q = new AgentNotificationQueue();
89
+ q.enqueue("process", "p1", "a");
90
+ q.enqueue("process", "p2", "b");
91
+ q.clear("process", "p1");
92
+ expect(q.size).toBe(1);
93
+ q.clearAll();
94
+ expect(q.size).toBe(0);
95
+ });
96
+ });
97
+ //# sourceMappingURL=agent-notifications.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-notifications.test.js","sourceRoot":"","sources":["../../src/core/agent-notifications.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=agent-session-add-dir.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-session-add-dir.test.d.ts","sourceRoot":"","sources":["../../src/core/agent-session-add-dir.test.ts"],"names":[],"mappings":""}