@prestyj/cli 5.12.0 → 5.16.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 (1245) hide show
  1. package/README.md +51 -36
  2. package/assets/skills/bulletproof/SKILL.md +158 -0
  3. package/assets/skills/bulletproof/references/agent-surface.md +82 -0
  4. package/assets/skills/bulletproof/references/audit-protocol.md +147 -0
  5. package/assets/skills/bulletproof/references/platform-playbooks.md +176 -0
  6. package/assets/skills/bulletproof/references/provenance.md +45 -0
  7. package/assets/skills/bulletproof/references/secure-defaults.md +108 -0
  8. package/assets/skills/bulletproof/references/supply-chain.md +76 -0
  9. package/assets/skills/bulletproof/references/threat-landscape.md +74 -0
  10. package/assets/skills/bulletproof/references/verification.md +65 -0
  11. package/assets/skills/clarify/SKILL.md +30 -0
  12. package/assets/skills/code-review/SKILL.md +30 -0
  13. package/assets/skills/durable/SKILL.md +111 -0
  14. package/assets/skills/durable/references/backups-and-runtime.md +86 -0
  15. package/assets/skills/durable/references/migrations-and-schema.md +79 -0
  16. package/assets/skills/lean/SKILL.md +110 -0
  17. package/assets/skills/lean/references/memory-and-processes.md +98 -0
  18. package/assets/skills/lean/references/playbooks.md +107 -0
  19. package/assets/skills/root-cause/SKILL.md +36 -0
  20. package/assets/skills/shared-language/SKILL.md +30 -0
  21. package/assets/skills/tdd/SKILL.md +30 -0
  22. package/dist/app-sidecar.js +486 -95
  23. package/dist/app-sidecar.js.map +1 -1
  24. package/dist/chat-agents/research.d.ts +1 -1
  25. package/dist/chat-agents/research.d.ts.map +1 -1
  26. package/dist/chat-agents/research.js +1 -1
  27. package/dist/chat-agents/research.js.map +1 -1
  28. package/dist/cli/mcp.js +30 -10
  29. package/dist/cli/mcp.js.map +1 -1
  30. package/dist/cli/shared.d.ts.map +1 -1
  31. package/dist/cli/shared.js +2 -0
  32. package/dist/cli/shared.js.map +1 -1
  33. package/dist/cli.d.ts.map +1 -1
  34. package/dist/cli.js +16 -7
  35. package/dist/cli.js.map +1 -1
  36. package/dist/config.d.ts +12 -0
  37. package/dist/config.d.ts.map +1 -1
  38. package/dist/config.js +16 -0
  39. package/dist/config.js.map +1 -1
  40. package/dist/core/agent-session.d.ts +65 -4
  41. package/dist/core/agent-session.d.ts.map +1 -1
  42. package/dist/core/agent-session.js +281 -22
  43. package/dist/core/agent-session.js.map +1 -1
  44. package/dist/core/agents.d.ts +2 -3
  45. package/dist/core/agents.d.ts.map +1 -1
  46. package/dist/core/agents.js +4 -5
  47. package/dist/core/agents.js.map +1 -1
  48. package/dist/core/api-benchmark.d.ts +1 -1
  49. package/dist/core/api-benchmark.js +2 -2
  50. package/dist/core/ask-user.d.ts +63 -0
  51. package/dist/core/ask-user.d.ts.map +1 -0
  52. package/dist/core/ask-user.js +40 -0
  53. package/dist/core/ask-user.js.map +1 -0
  54. package/dist/core/auth-providers.d.ts +6 -0
  55. package/dist/core/auth-providers.d.ts.map +1 -1
  56. package/dist/core/auth-providers.js +30 -24
  57. package/dist/core/auth-providers.js.map +1 -1
  58. package/dist/core/bundled-agents.d.ts.map +1 -1
  59. package/dist/core/bundled-agents.js +17 -5
  60. package/dist/core/bundled-agents.js.map +1 -1
  61. package/dist/core/context-limits.d.ts +35 -0
  62. package/dist/core/context-limits.d.ts.map +1 -0
  63. package/dist/core/context-limits.js +35 -0
  64. package/dist/core/context-limits.js.map +1 -0
  65. package/dist/core/env-delta.d.ts +27 -0
  66. package/dist/core/env-delta.d.ts.map +1 -0
  67. package/dist/core/env-delta.js +65 -0
  68. package/dist/core/env-delta.js.map +1 -0
  69. package/dist/core/event-bus.d.ts +12 -2
  70. package/dist/core/event-bus.d.ts.map +1 -1
  71. package/dist/core/event-bus.js +1 -0
  72. package/dist/core/event-bus.js.map +1 -1
  73. package/dist/core/goal-worker.js +1 -1
  74. package/dist/core/goal-worker.js.map +1 -1
  75. package/dist/core/hashline-edit-benchmark.d.ts +2 -0
  76. package/dist/core/hashline-edit-benchmark.d.ts.map +1 -1
  77. package/dist/core/hashline-edit-benchmark.js +5 -1
  78. package/dist/core/hashline-edit-benchmark.js.map +1 -1
  79. package/dist/core/lsp/edit-telemetry.d.ts +27 -0
  80. package/dist/core/lsp/edit-telemetry.d.ts.map +1 -0
  81. package/dist/core/lsp/edit-telemetry.js +50 -0
  82. package/dist/core/lsp/edit-telemetry.js.map +1 -0
  83. package/dist/core/lsp/manager.d.ts +24 -1
  84. package/dist/core/lsp/manager.d.ts.map +1 -1
  85. package/dist/core/lsp/manager.js +53 -2
  86. package/dist/core/lsp/manager.js.map +1 -1
  87. package/dist/core/mcp/client.js +1 -1
  88. package/dist/core/mcp/client.js.map +1 -1
  89. package/dist/core/mcp/content.d.ts +5 -0
  90. package/dist/core/mcp/content.d.ts.map +1 -1
  91. package/dist/core/mcp/content.js +20 -2
  92. package/dist/core/mcp/content.js.map +1 -1
  93. package/dist/core/mcp/defaults.d.ts +7 -3
  94. package/dist/core/mcp/defaults.d.ts.map +1 -1
  95. package/dist/core/mcp/defaults.js +19 -14
  96. package/dist/core/mcp/defaults.js.map +1 -1
  97. package/dist/core/mcp/deferred-catalog.d.ts +9 -0
  98. package/dist/core/mcp/deferred-catalog.d.ts.map +1 -1
  99. package/dist/core/mcp/deferred-catalog.js +15 -1
  100. package/dist/core/mcp/deferred-catalog.js.map +1 -1
  101. package/dist/core/mcp/elicitation-bridge.d.ts.map +1 -1
  102. package/dist/core/mcp/elicitation-bridge.js +12 -28
  103. package/dist/core/mcp/elicitation-bridge.js.map +1 -1
  104. package/dist/core/mcp/shared-pool.d.ts +2 -2
  105. package/dist/core/mcp/shared-pool.js +2 -2
  106. package/dist/core/nolan-prompt.d.ts +1 -1
  107. package/dist/core/nolan-prompt.js +16 -8
  108. package/dist/core/nolan-prompt.js.map +1 -1
  109. package/dist/core/parked-requests.d.ts +44 -0
  110. package/dist/core/parked-requests.d.ts.map +1 -0
  111. package/dist/core/parked-requests.js +34 -0
  112. package/dist/core/parked-requests.js.map +1 -0
  113. package/dist/core/platform-clis.d.ts +16 -0
  114. package/dist/core/platform-clis.d.ts.map +1 -0
  115. package/dist/core/platform-clis.js +299 -0
  116. package/dist/core/platform-clis.js.map +1 -0
  117. package/dist/core/process-manager.d.ts +50 -1
  118. package/dist/core/process-manager.d.ts.map +1 -1
  119. package/dist/core/process-manager.js +155 -4
  120. package/dist/core/process-manager.js.map +1 -1
  121. package/dist/core/prompt-commands.d.ts.map +1 -1
  122. package/dist/core/prompt-commands.js +75 -37
  123. package/dist/core/prompt-commands.js.map +1 -1
  124. package/dist/core/sandbox.d.ts +17 -1
  125. package/dist/core/sandbox.d.ts.map +1 -1
  126. package/dist/core/sandbox.js +140 -9
  127. package/dist/core/sandbox.js.map +1 -1
  128. package/dist/core/session-manager.d.ts +18 -1
  129. package/dist/core/session-manager.d.ts.map +1 -1
  130. package/dist/core/session-manager.js +62 -23
  131. package/dist/core/session-manager.js.map +1 -1
  132. package/dist/core/settings-manager.d.ts +22 -2
  133. package/dist/core/settings-manager.d.ts.map +1 -1
  134. package/dist/core/settings-manager.js +64 -0
  135. package/dist/core/settings-manager.js.map +1 -1
  136. package/dist/core/skills.d.ts +16 -1
  137. package/dist/core/skills.d.ts.map +1 -1
  138. package/dist/core/skills.js +38 -6
  139. package/dist/core/skills.js.map +1 -1
  140. package/dist/core/steroids.d.ts +59 -0
  141. package/dist/core/steroids.d.ts.map +1 -0
  142. package/dist/core/steroids.js +227 -0
  143. package/dist/core/steroids.js.map +1 -0
  144. package/dist/core/subagent-manager.d.ts +17 -0
  145. package/dist/core/subagent-manager.d.ts.map +1 -1
  146. package/dist/core/subagent-manager.js +92 -1
  147. package/dist/core/subagent-manager.js.map +1 -1
  148. package/dist/core/subagent-turn-record.d.ts +17 -0
  149. package/dist/core/subagent-turn-record.d.ts.map +1 -0
  150. package/dist/core/subagent-turn-record.js +82 -0
  151. package/dist/core/subagent-turn-record.js.map +1 -0
  152. package/dist/core/verification-gate.d.ts +123 -0
  153. package/dist/core/verification-gate.d.ts.map +1 -0
  154. package/dist/core/verification-gate.js +446 -0
  155. package/dist/core/verification-gate.js.map +1 -0
  156. package/dist/core/workspace-guard.d.ts +6 -0
  157. package/dist/core/workspace-guard.d.ts.map +1 -1
  158. package/dist/core/workspace-guard.js +58 -7
  159. package/dist/core/workspace-guard.js.map +1 -1
  160. package/dist/hf-pull.d.ts +102 -0
  161. package/dist/hf-pull.d.ts.map +1 -0
  162. package/dist/hf-pull.js +225 -0
  163. package/dist/hf-pull.js.map +1 -0
  164. package/dist/modes/json-mode.d.ts +2 -2
  165. package/dist/modes/json-mode.d.ts.map +1 -1
  166. package/dist/modes/json-mode.js +2 -8
  167. package/dist/modes/json-mode.js.map +1 -1
  168. package/dist/modes/subagent-worker-mode.d.ts.map +1 -1
  169. package/dist/modes/subagent-worker-mode.js +66 -18
  170. package/dist/modes/subagent-worker-mode.js.map +1 -1
  171. package/dist/system-prompt.d.ts +5 -2
  172. package/dist/system-prompt.d.ts.map +1 -1
  173. package/dist/system-prompt.js +136 -36
  174. package/dist/system-prompt.js.map +1 -1
  175. package/dist/tools/ask-user.d.ts +35 -0
  176. package/dist/tools/ask-user.d.ts.map +1 -0
  177. package/dist/tools/ask-user.js +157 -0
  178. package/dist/tools/ask-user.js.map +1 -0
  179. package/dist/tools/bash.d.ts +4 -0
  180. package/dist/tools/bash.d.ts.map +1 -1
  181. package/dist/tools/bash.js +63 -4
  182. package/dist/tools/bash.js.map +1 -1
  183. package/dist/tools/edit.d.ts +2 -1
  184. package/dist/tools/edit.d.ts.map +1 -1
  185. package/dist/tools/edit.js +58 -9
  186. package/dist/tools/edit.js.map +1 -1
  187. package/dist/tools/index.d.ts +9 -0
  188. package/dist/tools/index.d.ts.map +1 -1
  189. package/dist/tools/index.js +8 -2
  190. package/dist/tools/index.js.map +1 -1
  191. package/dist/tools/operations.d.ts +48 -0
  192. package/dist/tools/operations.d.ts.map +1 -1
  193. package/dist/tools/operations.js +92 -2
  194. package/dist/tools/operations.js.map +1 -1
  195. package/dist/tools/path-utils.d.ts +28 -1
  196. package/dist/tools/path-utils.d.ts.map +1 -1
  197. package/dist/tools/path-utils.js +44 -2
  198. package/dist/tools/path-utils.js.map +1 -1
  199. package/dist/tools/prompt-hints.d.ts.map +1 -1
  200. package/dist/tools/prompt-hints.js +8 -6
  201. package/dist/tools/prompt-hints.js.map +1 -1
  202. package/dist/tools/read-only-bash.d.ts +6 -0
  203. package/dist/tools/read-only-bash.d.ts.map +1 -1
  204. package/dist/tools/read-only-bash.js +168 -9
  205. package/dist/tools/read-only-bash.js.map +1 -1
  206. package/dist/tools/read.d.ts.map +1 -1
  207. package/dist/tools/read.js +35 -3
  208. package/dist/tools/read.js.map +1 -1
  209. package/dist/tools/skill.d.ts +3 -2
  210. package/dist/tools/skill.d.ts.map +1 -1
  211. package/dist/tools/skill.js +11 -7
  212. package/dist/tools/skill.js.map +1 -1
  213. package/dist/tools/steroids.d.ts +46 -0
  214. package/dist/tools/steroids.d.ts.map +1 -0
  215. package/dist/tools/steroids.js +233 -0
  216. package/dist/tools/steroids.js.map +1 -0
  217. package/dist/tools/subagent-shared.d.ts +1 -1
  218. package/dist/tools/subagent-shared.d.ts.map +1 -1
  219. package/dist/tools/subagent-shared.js +1 -4
  220. package/dist/tools/subagent-shared.js.map +1 -1
  221. package/dist/tools/subagent.js +1 -1
  222. package/dist/tools/subagent.js.map +1 -1
  223. package/dist/tools/tool-search.d.ts +2 -1
  224. package/dist/tools/tool-search.d.ts.map +1 -1
  225. package/dist/tools/tool-search.js +28 -3
  226. package/dist/tools/tool-search.js.map +1 -1
  227. package/dist/tools/tool-tiers.d.ts.map +1 -1
  228. package/dist/tools/tool-tiers.js +5 -0
  229. package/dist/tools/tool-tiers.js.map +1 -1
  230. package/dist/tools/web-fetch.d.ts +7 -0
  231. package/dist/tools/web-fetch.d.ts.map +1 -1
  232. package/dist/tools/web-fetch.js +308 -20
  233. package/dist/tools/web-fetch.js.map +1 -1
  234. package/dist/tools/write.d.ts +1 -1
  235. package/dist/tools/write.d.ts.map +1 -1
  236. package/dist/tools/write.js +1 -1
  237. package/dist/tools/write.js.map +1 -1
  238. package/dist/ui/App.d.ts +3 -0
  239. package/dist/ui/App.d.ts.map +1 -1
  240. package/dist/ui/App.js +56 -30
  241. package/dist/ui/App.js.map +1 -1
  242. package/dist/ui/app-items.d.ts +5 -0
  243. package/dist/ui/app-items.d.ts.map +1 -1
  244. package/dist/ui/app-items.js +5 -0
  245. package/dist/ui/app-items.js.map +1 -1
  246. package/dist/ui/components/Footer.js +1 -1
  247. package/dist/ui/components/Footer.js.map +1 -1
  248. package/dist/ui/components/ModelSelector.d.ts.map +1 -1
  249. package/dist/ui/components/ModelSelector.js +1 -0
  250. package/dist/ui/components/ModelSelector.js.map +1 -1
  251. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  252. package/dist/ui/components/ToolExecution.js +10 -3
  253. package/dist/ui/components/ToolExecution.js.map +1 -1
  254. package/dist/ui/hooks/useAgentLoop.d.ts +1 -1
  255. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  256. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  257. package/dist/ui/login.d.ts.map +1 -1
  258. package/dist/ui/login.js +5 -33
  259. package/dist/ui/login.js.map +1 -1
  260. package/dist/ui/prompt-routing.d.ts +2 -2
  261. package/dist/ui/prompt-routing.d.ts.map +1 -1
  262. package/dist/ui/prompt-routing.js +20 -8
  263. package/dist/ui/prompt-routing.js.map +1 -1
  264. package/dist/ui/submit-prompt-command.d.ts.map +1 -1
  265. package/dist/ui/submit-prompt-command.js +1 -1
  266. package/dist/ui/submit-prompt-command.js.map +1 -1
  267. package/dist/ui/terminal-history.js +4 -2
  268. package/dist/ui/terminal-history.js.map +1 -1
  269. package/dist/ui/tool-group-summary.d.ts +2 -0
  270. package/dist/ui/tool-group-summary.d.ts.map +1 -1
  271. package/dist/ui/tool-group-summary.js +11 -25
  272. package/dist/ui/tool-group-summary.js.map +1 -1
  273. package/dist/ui/tool-line-summary.d.ts.map +1 -1
  274. package/dist/ui/tool-line-summary.js +12 -9
  275. package/dist/ui/tool-line-summary.js.map +1 -1
  276. package/dist/ui/transcript/tool-presentation.d.ts.map +1 -1
  277. package/dist/ui/transcript/tool-presentation.js +2 -7
  278. package/dist/ui/transcript/tool-presentation.js.map +1 -1
  279. package/dist/ui/utils/text-utils.d.ts +0 -6
  280. package/dist/ui/utils/text-utils.d.ts.map +1 -1
  281. package/dist/ui/utils/text-utils.js +8 -3
  282. package/dist/ui/utils/text-utils.js.map +1 -1
  283. package/dist/utils/image.d.ts.map +1 -1
  284. package/dist/utils/image.js.map +1 -1
  285. package/dist/utils/text.d.ts +41 -0
  286. package/dist/utils/text.d.ts.map +1 -1
  287. package/dist/utils/text.js +46 -0
  288. package/dist/utils/text.js.map +1 -1
  289. package/package.json +7 -8
  290. package/dist/app-sidecar-auth-broadcast.test.d.ts +0 -2
  291. package/dist/app-sidecar-auth-broadcast.test.d.ts.map +0 -1
  292. package/dist/app-sidecar-auth-broadcast.test.js +0 -348
  293. package/dist/app-sidecar-auth-broadcast.test.js.map +0 -1
  294. package/dist/app-sidecar-sessions.test.d.ts +0 -2
  295. package/dist/app-sidecar-sessions.test.d.ts.map +0 -1
  296. package/dist/app-sidecar-sessions.test.js +0 -178
  297. package/dist/app-sidecar-sessions.test.js.map +0 -1
  298. package/dist/chat-agents/general.test.d.ts +0 -2
  299. package/dist/chat-agents/general.test.d.ts.map +0 -1
  300. package/dist/chat-agents/general.test.js +0 -52
  301. package/dist/chat-agents/general.test.js.map +0 -1
  302. package/dist/chat-agents/jiwa.test.d.ts +0 -2
  303. package/dist/chat-agents/jiwa.test.d.ts.map +0 -1
  304. package/dist/chat-agents/jiwa.test.js +0 -66
  305. package/dist/chat-agents/jiwa.test.js.map +0 -1
  306. package/dist/chat-agents/memory.test.d.ts +0 -2
  307. package/dist/chat-agents/memory.test.d.ts.map +0 -1
  308. package/dist/chat-agents/memory.test.js +0 -165
  309. package/dist/chat-agents/memory.test.js.map +0 -1
  310. package/dist/chat-agents/specialists.test.d.ts +0 -2
  311. package/dist/chat-agents/specialists.test.d.ts.map +0 -1
  312. package/dist/chat-agents/specialists.test.js +0 -98
  313. package/dist/chat-agents/specialists.test.js.map +0 -1
  314. package/dist/cli/command-routing.test.d.ts +0 -2
  315. package/dist/cli/command-routing.test.d.ts.map +0 -1
  316. package/dist/cli/command-routing.test.js +0 -61
  317. package/dist/cli/command-routing.test.js.map +0 -1
  318. package/dist/config.test.d.ts +0 -2
  319. package/dist/config.test.d.ts.map +0 -1
  320. package/dist/config.test.js +0 -123
  321. package/dist/config.test.js.map +0 -1
  322. package/dist/core/agent-mcp-passthrough.test.d.ts +0 -2
  323. package/dist/core/agent-mcp-passthrough.test.d.ts.map +0 -1
  324. package/dist/core/agent-mcp-passthrough.test.js +0 -61
  325. package/dist/core/agent-mcp-passthrough.test.js.map +0 -1
  326. package/dist/core/agent-notifications.test.d.ts +0 -2
  327. package/dist/core/agent-notifications.test.d.ts.map +0 -1
  328. package/dist/core/agent-notifications.test.js +0 -97
  329. package/dist/core/agent-notifications.test.js.map +0 -1
  330. package/dist/core/agent-session-add-dir.test.d.ts +0 -2
  331. package/dist/core/agent-session-add-dir.test.d.ts.map +0 -1
  332. package/dist/core/agent-session-add-dir.test.js +0 -110
  333. package/dist/core/agent-session-add-dir.test.js.map +0 -1
  334. package/dist/core/agent-session-checkpoint-flush.test.d.ts +0 -2
  335. package/dist/core/agent-session-checkpoint-flush.test.d.ts.map +0 -1
  336. package/dist/core/agent-session-checkpoint-flush.test.js +0 -201
  337. package/dist/core/agent-session-checkpoint-flush.test.js.map +0 -1
  338. package/dist/core/agent-session-compaction.test.d.ts +0 -2
  339. package/dist/core/agent-session-compaction.test.d.ts.map +0 -1
  340. package/dist/core/agent-session-compaction.test.js +0 -1096
  341. package/dist/core/agent-session-compaction.test.js.map +0 -1
  342. package/dist/core/agent-session-crash-durability.test.d.ts +0 -2
  343. package/dist/core/agent-session-crash-durability.test.d.ts.map +0 -1
  344. package/dist/core/agent-session-crash-durability.test.js +0 -102
  345. package/dist/core/agent-session-crash-durability.test.js.map +0 -1
  346. package/dist/core/agent-session-marker-anchors.test.d.ts +0 -2
  347. package/dist/core/agent-session-marker-anchors.test.d.ts.map +0 -1
  348. package/dist/core/agent-session-marker-anchors.test.js +0 -326
  349. package/dist/core/agent-session-marker-anchors.test.js.map +0 -1
  350. package/dist/core/agent-session-memory-tail.test.d.ts +0 -2
  351. package/dist/core/agent-session-memory-tail.test.d.ts.map +0 -1
  352. package/dist/core/agent-session-memory-tail.test.js +0 -119
  353. package/dist/core/agent-session-memory-tail.test.js.map +0 -1
  354. package/dist/core/agent-session-model-switch.test.d.ts +0 -2
  355. package/dist/core/agent-session-model-switch.test.d.ts.map +0 -1
  356. package/dist/core/agent-session-model-switch.test.js +0 -161
  357. package/dist/core/agent-session-model-switch.test.js.map +0 -1
  358. package/dist/core/agent-session-notifications.test.d.ts +0 -2
  359. package/dist/core/agent-session-notifications.test.d.ts.map +0 -1
  360. package/dist/core/agent-session-notifications.test.js +0 -114
  361. package/dist/core/agent-session-notifications.test.js.map +0 -1
  362. package/dist/core/agent-session-process-gate.test.d.ts +0 -2
  363. package/dist/core/agent-session-process-gate.test.d.ts.map +0 -1
  364. package/dist/core/agent-session-process-gate.test.js +0 -98
  365. package/dist/core/agent-session-process-gate.test.js.map +0 -1
  366. package/dist/core/agent-session-queue.test.d.ts +0 -2
  367. package/dist/core/agent-session-queue.test.d.ts.map +0 -1
  368. package/dist/core/agent-session-queue.test.js +0 -184
  369. package/dist/core/agent-session-queue.test.js.map +0 -1
  370. package/dist/core/agent-session-review-coverage.test.d.ts +0 -2
  371. package/dist/core/agent-session-review-coverage.test.d.ts.map +0 -1
  372. package/dist/core/agent-session-review-coverage.test.js +0 -140
  373. package/dist/core/agent-session-review-coverage.test.js.map +0 -1
  374. package/dist/core/agent-session-slash-restore.test.d.ts +0 -2
  375. package/dist/core/agent-session-slash-restore.test.d.ts.map +0 -1
  376. package/dist/core/agent-session-slash-restore.test.js +0 -121
  377. package/dist/core/agent-session-slash-restore.test.js.map +0 -1
  378. package/dist/core/agent-session-subagent-policy.test.d.ts +0 -2
  379. package/dist/core/agent-session-subagent-policy.test.d.ts.map +0 -1
  380. package/dist/core/agent-session-subagent-policy.test.js +0 -40
  381. package/dist/core/agent-session-subagent-policy.test.js.map +0 -1
  382. package/dist/core/agent-session-tool-result-policy.test.d.ts +0 -2
  383. package/dist/core/agent-session-tool-result-policy.test.d.ts.map +0 -1
  384. package/dist/core/agent-session-tool-result-policy.test.js +0 -25
  385. package/dist/core/agent-session-tool-result-policy.test.js.map +0 -1
  386. package/dist/core/agent-session-tool-tiers.test.d.ts +0 -2
  387. package/dist/core/agent-session-tool-tiers.test.d.ts.map +0 -1
  388. package/dist/core/agent-session-tool-tiers.test.js +0 -138
  389. package/dist/core/agent-session-tool-tiers.test.js.map +0 -1
  390. package/dist/core/agent-tools-allowlist.test.d.ts +0 -2
  391. package/dist/core/agent-tools-allowlist.test.d.ts.map +0 -1
  392. package/dist/core/agent-tools-allowlist.test.js +0 -74
  393. package/dist/core/agent-tools-allowlist.test.js.map +0 -1
  394. package/dist/core/agents.test.d.ts +0 -2
  395. package/dist/core/agents.test.d.ts.map +0 -1
  396. package/dist/core/agents.test.js +0 -147
  397. package/dist/core/agents.test.js.map +0 -1
  398. package/dist/core/auto-update.test.d.ts +0 -2
  399. package/dist/core/auto-update.test.d.ts.map +0 -1
  400. package/dist/core/auto-update.test.js +0 -204
  401. package/dist/core/auto-update.test.js.map +0 -1
  402. package/dist/core/autopilot-cycle.test.d.ts +0 -2
  403. package/dist/core/autopilot-cycle.test.d.ts.map +0 -1
  404. package/dist/core/autopilot-cycle.test.js +0 -375
  405. package/dist/core/autopilot-cycle.test.js.map +0 -1
  406. package/dist/core/autopilot-gate.test.d.ts +0 -2
  407. package/dist/core/autopilot-gate.test.d.ts.map +0 -1
  408. package/dist/core/autopilot-gate.test.js +0 -295
  409. package/dist/core/autopilot-gate.test.js.map +0 -1
  410. package/dist/core/autopilot-verdict.test.d.ts +0 -2
  411. package/dist/core/autopilot-verdict.test.d.ts.map +0 -1
  412. package/dist/core/autopilot-verdict.test.js +0 -153
  413. package/dist/core/autopilot-verdict.test.js.map +0 -1
  414. package/dist/core/checkpoint-store.test.d.ts +0 -2
  415. package/dist/core/checkpoint-store.test.d.ts.map +0 -1
  416. package/dist/core/checkpoint-store.test.js +0 -111
  417. package/dist/core/checkpoint-store.test.js.map +0 -1
  418. package/dist/core/code-retrieval-chunkers.test.d.ts +0 -2
  419. package/dist/core/code-retrieval-chunkers.test.d.ts.map +0 -1
  420. package/dist/core/code-retrieval-chunkers.test.js +0 -203
  421. package/dist/core/code-retrieval-chunkers.test.js.map +0 -1
  422. package/dist/core/compaction/active-context.test.d.ts +0 -2
  423. package/dist/core/compaction/active-context.test.d.ts.map +0 -1
  424. package/dist/core/compaction/active-context.test.js +0 -57
  425. package/dist/core/compaction/active-context.test.js.map +0 -1
  426. package/dist/core/compaction/compactor.test.d.ts +0 -2
  427. package/dist/core/compaction/compactor.test.d.ts.map +0 -1
  428. package/dist/core/compaction/compactor.test.js +0 -1072
  429. package/dist/core/compaction/compactor.test.js.map +0 -1
  430. package/dist/core/compaction/policy.test.d.ts +0 -2
  431. package/dist/core/compaction/policy.test.d.ts.map +0 -1
  432. package/dist/core/compaction/policy.test.js +0 -35
  433. package/dist/core/compaction/policy.test.js.map +0 -1
  434. package/dist/core/compaction/query-aware-selector.test.d.ts +0 -2
  435. package/dist/core/compaction/query-aware-selector.test.d.ts.map +0 -1
  436. package/dist/core/compaction/query-aware-selector.test.js +0 -96
  437. package/dist/core/compaction/query-aware-selector.test.js.map +0 -1
  438. package/dist/core/compaction/token-estimator.test.d.ts +0 -2
  439. package/dist/core/compaction/token-estimator.test.d.ts.map +0 -1
  440. package/dist/core/compaction/token-estimator.test.js +0 -283
  441. package/dist/core/compaction/token-estimator.test.js.map +0 -1
  442. package/dist/core/compaction/tool-result-pruner.test.d.ts +0 -2
  443. package/dist/core/compaction/tool-result-pruner.test.d.ts.map +0 -1
  444. package/dist/core/compaction/tool-result-pruner.test.js +0 -320
  445. package/dist/core/compaction/tool-result-pruner.test.js.map +0 -1
  446. package/dist/core/continue-replay-inventory.test.d.ts +0 -2
  447. package/dist/core/continue-replay-inventory.test.d.ts.map +0 -1
  448. package/dist/core/continue-replay-inventory.test.js +0 -42
  449. package/dist/core/continue-replay-inventory.test.js.map +0 -1
  450. package/dist/core/encode-cwd.test.d.ts +0 -2
  451. package/dist/core/encode-cwd.test.d.ts.map +0 -1
  452. package/dist/core/encode-cwd.test.js +0 -80
  453. package/dist/core/encode-cwd.test.js.map +0 -1
  454. package/dist/core/extensions/plugin-bundles.test.d.ts +0 -2
  455. package/dist/core/extensions/plugin-bundles.test.d.ts.map +0 -1
  456. package/dist/core/extensions/plugin-bundles.test.js +0 -110
  457. package/dist/core/extensions/plugin-bundles.test.js.map +0 -1
  458. package/dist/core/foreign-session-import.test.d.ts +0 -2
  459. package/dist/core/foreign-session-import.test.d.ts.map +0 -1
  460. package/dist/core/foreign-session-import.test.js +0 -220
  461. package/dist/core/foreign-session-import.test.js.map +0 -1
  462. package/dist/core/goal-controller.test.d.ts +0 -2
  463. package/dist/core/goal-controller.test.d.ts.map +0 -1
  464. package/dist/core/goal-controller.test.js +0 -784
  465. package/dist/core/goal-controller.test.js.map +0 -1
  466. package/dist/core/goal-lifecycle-smoke.test.d.ts +0 -2
  467. package/dist/core/goal-lifecycle-smoke.test.d.ts.map +0 -1
  468. package/dist/core/goal-lifecycle-smoke.test.js +0 -248
  469. package/dist/core/goal-lifecycle-smoke.test.js.map +0 -1
  470. package/dist/core/goal-prerequisites.test.d.ts +0 -2
  471. package/dist/core/goal-prerequisites.test.d.ts.map +0 -1
  472. package/dist/core/goal-prerequisites.test.js +0 -118
  473. package/dist/core/goal-prerequisites.test.js.map +0 -1
  474. package/dist/core/goal-store.test.d.ts +0 -2
  475. package/dist/core/goal-store.test.d.ts.map +0 -1
  476. package/dist/core/goal-store.test.js +0 -398
  477. package/dist/core/goal-store.test.js.map +0 -1
  478. package/dist/core/goal-verifier.test.d.ts +0 -2
  479. package/dist/core/goal-verifier.test.d.ts.map +0 -1
  480. package/dist/core/goal-verifier.test.js +0 -131
  481. package/dist/core/goal-verifier.test.js.map +0 -1
  482. package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts +0 -2
  483. package/dist/core/goal-worker-dev-server-lifecycle.test.d.ts.map +0 -1
  484. package/dist/core/goal-worker-dev-server-lifecycle.test.js +0 -68
  485. package/dist/core/goal-worker-dev-server-lifecycle.test.js.map +0 -1
  486. package/dist/core/goal-worker.test.d.ts +0 -2
  487. package/dist/core/goal-worker.test.d.ts.map +0 -1
  488. package/dist/core/goal-worker.test.js +0 -269
  489. package/dist/core/goal-worker.test.js.map +0 -1
  490. package/dist/core/hashline-edit-benchmark.test.d.ts +0 -2
  491. package/dist/core/hashline-edit-benchmark.test.d.ts.map +0 -1
  492. package/dist/core/hashline-edit-benchmark.test.js +0 -190
  493. package/dist/core/hashline-edit-benchmark.test.js.map +0 -1
  494. package/dist/core/ideal-review.test.d.ts +0 -2
  495. package/dist/core/ideal-review.test.d.ts.map +0 -1
  496. package/dist/core/ideal-review.test.js +0 -242
  497. package/dist/core/ideal-review.test.js.map +0 -1
  498. package/dist/core/input-normalization.test.d.ts +0 -2
  499. package/dist/core/input-normalization.test.d.ts.map +0 -1
  500. package/dist/core/input-normalization.test.js +0 -75
  501. package/dist/core/input-normalization.test.js.map +0 -1
  502. package/dist/core/json-mode-flag-parity.test.d.ts +0 -2
  503. package/dist/core/json-mode-flag-parity.test.d.ts.map +0 -1
  504. package/dist/core/json-mode-flag-parity.test.js +0 -66
  505. package/dist/core/json-mode-flag-parity.test.js.map +0 -1
  506. package/dist/core/language-detector.test.d.ts +0 -2
  507. package/dist/core/language-detector.test.d.ts.map +0 -1
  508. package/dist/core/language-detector.test.js +0 -109
  509. package/dist/core/language-detector.test.js.map +0 -1
  510. package/dist/core/local-endpoint-store.test.d.ts +0 -2
  511. package/dist/core/local-endpoint-store.test.d.ts.map +0 -1
  512. package/dist/core/local-endpoint-store.test.js +0 -131
  513. package/dist/core/local-endpoint-store.test.js.map +0 -1
  514. package/dist/core/loop-breaker.test.d.ts +0 -2
  515. package/dist/core/loop-breaker.test.d.ts.map +0 -1
  516. package/dist/core/loop-breaker.test.js +0 -238
  517. package/dist/core/loop-breaker.test.js.map +0 -1
  518. package/dist/core/lsp/client-navigation.test.d.ts +0 -2
  519. package/dist/core/lsp/client-navigation.test.d.ts.map +0 -1
  520. package/dist/core/lsp/client-navigation.test.js +0 -135
  521. package/dist/core/lsp/client-navigation.test.js.map +0 -1
  522. package/dist/core/lsp/format.test.d.ts +0 -2
  523. package/dist/core/lsp/format.test.d.ts.map +0 -1
  524. package/dist/core/lsp/format.test.js +0 -56
  525. package/dist/core/lsp/format.test.js.map +0 -1
  526. package/dist/core/lsp/integration.test.d.ts +0 -2
  527. package/dist/core/lsp/integration.test.d.ts.map +0 -1
  528. package/dist/core/lsp/integration.test.js +0 -60
  529. package/dist/core/lsp/integration.test.js.map +0 -1
  530. package/dist/core/lsp/jsonrpc.test.d.ts +0 -2
  531. package/dist/core/lsp/jsonrpc.test.d.ts.map +0 -1
  532. package/dist/core/lsp/jsonrpc.test.js +0 -127
  533. package/dist/core/lsp/jsonrpc.test.js.map +0 -1
  534. package/dist/core/lsp/manager-navigation.test.d.ts +0 -2
  535. package/dist/core/lsp/manager-navigation.test.d.ts.map +0 -1
  536. package/dist/core/lsp/manager-navigation.test.js +0 -121
  537. package/dist/core/lsp/manager-navigation.test.js.map +0 -1
  538. package/dist/core/lsp/manager.test.d.ts +0 -2
  539. package/dist/core/lsp/manager.test.d.ts.map +0 -1
  540. package/dist/core/lsp/manager.test.js +0 -220
  541. package/dist/core/lsp/manager.test.js.map +0 -1
  542. package/dist/core/lsp/pool.test.d.ts +0 -2
  543. package/dist/core/lsp/pool.test.d.ts.map +0 -1
  544. package/dist/core/lsp/pool.test.js +0 -286
  545. package/dist/core/lsp/pool.test.js.map +0 -1
  546. package/dist/core/lsp/servers.test.d.ts +0 -2
  547. package/dist/core/lsp/servers.test.d.ts.map +0 -1
  548. package/dist/core/lsp/servers.test.js +0 -67
  549. package/dist/core/lsp/servers.test.js.map +0 -1
  550. package/dist/core/lsp/uri.test.d.ts +0 -2
  551. package/dist/core/lsp/uri.test.d.ts.map +0 -1
  552. package/dist/core/lsp/uri.test.js +0 -56
  553. package/dist/core/lsp/uri.test.js.map +0 -1
  554. package/dist/core/lsp/windows.test.d.ts +0 -2
  555. package/dist/core/lsp/windows.test.d.ts.map +0 -1
  556. package/dist/core/lsp/windows.test.js +0 -239
  557. package/dist/core/lsp/windows.test.js.map +0 -1
  558. package/dist/core/mcp/catalog-cache.test.d.ts +0 -2
  559. package/dist/core/mcp/catalog-cache.test.d.ts.map +0 -1
  560. package/dist/core/mcp/catalog-cache.test.js +0 -99
  561. package/dist/core/mcp/catalog-cache.test.js.map +0 -1
  562. package/dist/core/mcp/client-session-recovery.test.d.ts +0 -2
  563. package/dist/core/mcp/client-session-recovery.test.d.ts.map +0 -1
  564. package/dist/core/mcp/client-session-recovery.test.js +0 -231
  565. package/dist/core/mcp/client-session-recovery.test.js.map +0 -1
  566. package/dist/core/mcp/content.test.d.ts +0 -2
  567. package/dist/core/mcp/content.test.d.ts.map +0 -1
  568. package/dist/core/mcp/content.test.js +0 -135
  569. package/dist/core/mcp/content.test.js.map +0 -1
  570. package/dist/core/mcp/elicitation.test.d.ts +0 -2
  571. package/dist/core/mcp/elicitation.test.d.ts.map +0 -1
  572. package/dist/core/mcp/elicitation.test.js +0 -158
  573. package/dist/core/mcp/elicitation.test.js.map +0 -1
  574. package/dist/core/mcp/legacy-negotiation.test.d.ts +0 -2
  575. package/dist/core/mcp/legacy-negotiation.test.d.ts.map +0 -1
  576. package/dist/core/mcp/legacy-negotiation.test.js +0 -80
  577. package/dist/core/mcp/legacy-negotiation.test.js.map +0 -1
  578. package/dist/core/mcp/loopback.test.d.ts +0 -2
  579. package/dist/core/mcp/loopback.test.d.ts.map +0 -1
  580. package/dist/core/mcp/loopback.test.js +0 -87
  581. package/dist/core/mcp/loopback.test.js.map +0 -1
  582. package/dist/core/mcp/oauth-store.test.d.ts +0 -2
  583. package/dist/core/mcp/oauth-store.test.d.ts.map +0 -1
  584. package/dist/core/mcp/oauth-store.test.js +0 -94
  585. package/dist/core/mcp/oauth-store.test.js.map +0 -1
  586. package/dist/core/mcp/parse-add-command.test.d.ts +0 -2
  587. package/dist/core/mcp/parse-add-command.test.d.ts.map +0 -1
  588. package/dist/core/mcp/parse-add-command.test.js +0 -81
  589. package/dist/core/mcp/parse-add-command.test.js.map +0 -1
  590. package/dist/core/mcp/resolve-stdio.test.d.ts +0 -2
  591. package/dist/core/mcp/resolve-stdio.test.d.ts.map +0 -1
  592. package/dist/core/mcp/resolve-stdio.test.js +0 -239
  593. package/dist/core/mcp/resolve-stdio.test.js.map +0 -1
  594. package/dist/core/mcp/session-elicitation-wiring.test.d.ts +0 -2
  595. package/dist/core/mcp/session-elicitation-wiring.test.d.ts.map +0 -1
  596. package/dist/core/mcp/session-elicitation-wiring.test.js +0 -138
  597. package/dist/core/mcp/session-elicitation-wiring.test.js.map +0 -1
  598. package/dist/core/mcp/shared-pool.test.d.ts +0 -2
  599. package/dist/core/mcp/shared-pool.test.d.ts.map +0 -1
  600. package/dist/core/mcp/shared-pool.test.js +0 -425
  601. package/dist/core/mcp/shared-pool.test.js.map +0 -1
  602. package/dist/core/mcp/store.test.d.ts +0 -2
  603. package/dist/core/mcp/store.test.d.ts.map +0 -1
  604. package/dist/core/mcp/store.test.js +0 -110
  605. package/dist/core/mcp/store.test.js.map +0 -1
  606. package/dist/core/mcp/when-connected.test.d.ts +0 -2
  607. package/dist/core/mcp/when-connected.test.d.ts.map +0 -1
  608. package/dist/core/mcp/when-connected.test.js +0 -46
  609. package/dist/core/mcp/when-connected.test.js.map +0 -1
  610. package/dist/core/message-images.test.d.ts +0 -2
  611. package/dist/core/message-images.test.d.ts.map +0 -1
  612. package/dist/core/message-images.test.js +0 -62
  613. package/dist/core/message-images.test.js.map +0 -1
  614. package/dist/core/network-guard.test.d.ts +0 -2
  615. package/dist/core/network-guard.test.d.ts.map +0 -1
  616. package/dist/core/network-guard.test.js +0 -72
  617. package/dist/core/network-guard.test.js.map +0 -1
  618. package/dist/core/nolan-context.test.d.ts +0 -2
  619. package/dist/core/nolan-context.test.d.ts.map +0 -1
  620. package/dist/core/nolan-context.test.js +0 -342
  621. package/dist/core/nolan-context.test.js.map +0 -1
  622. package/dist/core/nolan-model.test.d.ts +0 -2
  623. package/dist/core/nolan-model.test.d.ts.map +0 -1
  624. package/dist/core/nolan-model.test.js +0 -51
  625. package/dist/core/nolan-model.test.js.map +0 -1
  626. package/dist/core/nolan-prompt.test.d.ts +0 -2
  627. package/dist/core/nolan-prompt.test.d.ts.map +0 -1
  628. package/dist/core/nolan-prompt.test.js +0 -160
  629. package/dist/core/nolan-prompt.test.js.map +0 -1
  630. package/dist/core/persistent-shell.test.d.ts +0 -2
  631. package/dist/core/persistent-shell.test.d.ts.map +0 -1
  632. package/dist/core/persistent-shell.test.js +0 -84
  633. package/dist/core/persistent-shell.test.js.map +0 -1
  634. package/dist/core/pixel-fix.test.d.ts +0 -2
  635. package/dist/core/pixel-fix.test.d.ts.map +0 -1
  636. package/dist/core/pixel-fix.test.js +0 -310
  637. package/dist/core/pixel-fix.test.js.map +0 -1
  638. package/dist/core/pixel.test.d.ts +0 -2
  639. package/dist/core/pixel.test.d.ts.map +0 -1
  640. package/dist/core/pixel.test.js +0 -269
  641. package/dist/core/pixel.test.js.map +0 -1
  642. package/dist/core/process-gate.test.d.ts +0 -2
  643. package/dist/core/process-gate.test.d.ts.map +0 -1
  644. package/dist/core/process-gate.test.js +0 -87
  645. package/dist/core/process-gate.test.js.map +0 -1
  646. package/dist/core/process-manager-dev-server-repro.test.d.ts +0 -2
  647. package/dist/core/process-manager-dev-server-repro.test.d.ts.map +0 -1
  648. package/dist/core/process-manager-dev-server-repro.test.js +0 -225
  649. package/dist/core/process-manager-dev-server-repro.test.js.map +0 -1
  650. package/dist/core/process-manager-notifications.test.d.ts +0 -2
  651. package/dist/core/process-manager-notifications.test.d.ts.map +0 -1
  652. package/dist/core/process-manager-notifications.test.js +0 -227
  653. package/dist/core/process-manager-notifications.test.js.map +0 -1
  654. package/dist/core/progress/engine.test.d.ts +0 -2
  655. package/dist/core/progress/engine.test.d.ts.map +0 -1
  656. package/dist/core/progress/engine.test.js +0 -136
  657. package/dist/core/progress/engine.test.js.map +0 -1
  658. package/dist/core/progress/git-xp.test.d.ts +0 -2
  659. package/dist/core/progress/git-xp.test.d.ts.map +0 -1
  660. package/dist/core/progress/git-xp.test.js +0 -88
  661. package/dist/core/progress/git-xp.test.js.map +0 -1
  662. package/dist/core/progress/ranks.test.d.ts +0 -2
  663. package/dist/core/progress/ranks.test.d.ts.map +0 -1
  664. package/dist/core/progress/ranks.test.js +0 -100
  665. package/dist/core/progress/ranks.test.js.map +0 -1
  666. package/dist/core/progress/rebuild.test.d.ts +0 -2
  667. package/dist/core/progress/rebuild.test.d.ts.map +0 -1
  668. package/dist/core/progress/rebuild.test.js +0 -103
  669. package/dist/core/progress/rebuild.test.js.map +0 -1
  670. package/dist/core/progress/store.test.d.ts +0 -2
  671. package/dist/core/progress/store.test.d.ts.map +0 -1
  672. package/dist/core/progress/store.test.js +0 -108
  673. package/dist/core/progress/store.test.js.map +0 -1
  674. package/dist/core/project-discovery.test.d.ts +0 -2
  675. package/dist/core/project-discovery.test.d.ts.map +0 -1
  676. package/dist/core/project-discovery.test.js +0 -519
  677. package/dist/core/project-discovery.test.js.map +0 -1
  678. package/dist/core/prompt-commands.test.d.ts +0 -2
  679. package/dist/core/prompt-commands.test.d.ts.map +0 -1
  680. package/dist/core/prompt-commands.test.js +0 -175
  681. package/dist/core/prompt-commands.test.js.map +0 -1
  682. package/dist/core/radio.test.d.ts +0 -2
  683. package/dist/core/radio.test.d.ts.map +0 -1
  684. package/dist/core/radio.test.js +0 -117
  685. package/dist/core/radio.test.js.map +0 -1
  686. package/dist/core/regrounding.test.d.ts +0 -2
  687. package/dist/core/regrounding.test.d.ts.map +0 -1
  688. package/dist/core/regrounding.test.js +0 -38
  689. package/dist/core/regrounding.test.js.map +0 -1
  690. package/dist/core/resolve-start.test.d.ts +0 -2
  691. package/dist/core/resolve-start.test.d.ts.map +0 -1
  692. package/dist/core/resolve-start.test.js +0 -68
  693. package/dist/core/resolve-start.test.js.map +0 -1
  694. package/dist/core/run-claim.test.d.ts +0 -2
  695. package/dist/core/run-claim.test.d.ts.map +0 -1
  696. package/dist/core/run-claim.test.js +0 -107
  697. package/dist/core/run-claim.test.js.map +0 -1
  698. package/dist/core/run-journal.test.d.ts +0 -2
  699. package/dist/core/run-journal.test.d.ts.map +0 -1
  700. package/dist/core/run-journal.test.js +0 -195
  701. package/dist/core/run-journal.test.js.map +0 -1
  702. package/dist/core/run-lifecycle.test.d.ts +0 -2
  703. package/dist/core/run-lifecycle.test.d.ts.map +0 -1
  704. package/dist/core/run-lifecycle.test.js +0 -64
  705. package/dist/core/run-lifecycle.test.js.map +0 -1
  706. package/dist/core/sandbox-feedback.test.d.ts +0 -2
  707. package/dist/core/sandbox-feedback.test.d.ts.map +0 -1
  708. package/dist/core/sandbox-feedback.test.js +0 -32
  709. package/dist/core/sandbox-feedback.test.js.map +0 -1
  710. package/dist/core/sandbox.test.d.ts +0 -2
  711. package/dist/core/sandbox.test.d.ts.map +0 -1
  712. package/dist/core/sandbox.test.js +0 -157
  713. package/dist/core/sandbox.test.js.map +0 -1
  714. package/dist/core/semantic-search-benchmark.test.d.ts +0 -2
  715. package/dist/core/semantic-search-benchmark.test.d.ts.map +0 -1
  716. package/dist/core/semantic-search-benchmark.test.js +0 -89
  717. package/dist/core/semantic-search-benchmark.test.js.map +0 -1
  718. package/dist/core/session-compaction.test.d.ts +0 -2
  719. package/dist/core/session-compaction.test.d.ts.map +0 -1
  720. package/dist/core/session-compaction.test.js +0 -92
  721. package/dist/core/session-compaction.test.js.map +0 -1
  722. package/dist/core/session-export.test.d.ts +0 -2
  723. package/dist/core/session-export.test.d.ts.map +0 -1
  724. package/dist/core/session-export.test.js +0 -353
  725. package/dist/core/session-export.test.js.map +0 -1
  726. package/dist/core/session-history.test.d.ts +0 -2
  727. package/dist/core/session-history.test.d.ts.map +0 -1
  728. package/dist/core/session-history.test.js +0 -272
  729. package/dist/core/session-history.test.js.map +0 -1
  730. package/dist/core/session-manager.test.d.ts +0 -2
  731. package/dist/core/session-manager.test.d.ts.map +0 -1
  732. package/dist/core/session-manager.test.js +0 -573
  733. package/dist/core/session-manager.test.js.map +0 -1
  734. package/dist/core/session-notification-visibility.test.d.ts +0 -2
  735. package/dist/core/session-notification-visibility.test.d.ts.map +0 -1
  736. package/dist/core/session-notification-visibility.test.js +0 -113
  737. package/dist/core/session-notification-visibility.test.js.map +0 -1
  738. package/dist/core/session-restore-display.test.d.ts +0 -2
  739. package/dist/core/session-restore-display.test.d.ts.map +0 -1
  740. package/dist/core/session-restore-display.test.js +0 -103
  741. package/dist/core/session-restore-display.test.js.map +0 -1
  742. package/dist/core/session-storage-fd-leak.test.d.ts +0 -2
  743. package/dist/core/session-storage-fd-leak.test.d.ts.map +0 -1
  744. package/dist/core/session-storage-fd-leak.test.js +0 -116
  745. package/dist/core/session-storage-fd-leak.test.js.map +0 -1
  746. package/dist/core/session-storage.test.d.ts +0 -2
  747. package/dist/core/session-storage.test.d.ts.map +0 -1
  748. package/dist/core/session-storage.test.js +0 -277
  749. package/dist/core/session-storage.test.js.map +0 -1
  750. package/dist/core/setup-history.test.d.ts +0 -2
  751. package/dist/core/setup-history.test.d.ts.map +0 -1
  752. package/dist/core/setup-history.test.js +0 -59
  753. package/dist/core/setup-history.test.js.map +0 -1
  754. package/dist/core/shell.test.d.ts +0 -2
  755. package/dist/core/shell.test.d.ts.map +0 -1
  756. package/dist/core/shell.test.js +0 -87
  757. package/dist/core/shell.test.js.map +0 -1
  758. package/dist/core/shutdown.test.d.ts +0 -2
  759. package/dist/core/shutdown.test.d.ts.map +0 -1
  760. package/dist/core/shutdown.test.js +0 -160
  761. package/dist/core/shutdown.test.js.map +0 -1
  762. package/dist/core/sidecar-error-reporter.d.ts +0 -12
  763. package/dist/core/sidecar-error-reporter.d.ts.map +0 -1
  764. package/dist/core/sidecar-error-reporter.js +0 -57
  765. package/dist/core/sidecar-error-reporter.js.map +0 -1
  766. package/dist/core/sidecar-error-reporter.test.d.ts +0 -2
  767. package/dist/core/sidecar-error-reporter.test.d.ts.map +0 -1
  768. package/dist/core/sidecar-error-reporter.test.js +0 -61
  769. package/dist/core/sidecar-error-reporter.test.js.map +0 -1
  770. package/dist/core/skills-routing.test.d.ts +0 -2
  771. package/dist/core/skills-routing.test.d.ts.map +0 -1
  772. package/dist/core/skills-routing.test.js +0 -168
  773. package/dist/core/skills-routing.test.js.map +0 -1
  774. package/dist/core/slash-commands.test.d.ts +0 -2
  775. package/dist/core/slash-commands.test.d.ts.map +0 -1
  776. package/dist/core/slash-commands.test.js +0 -59
  777. package/dist/core/slash-commands.test.js.map +0 -1
  778. package/dist/core/source-maps.test.d.ts +0 -2
  779. package/dist/core/source-maps.test.d.ts.map +0 -1
  780. package/dist/core/source-maps.test.js +0 -175
  781. package/dist/core/source-maps.test.js.map +0 -1
  782. package/dist/core/speed-benchmark.test.d.ts +0 -2
  783. package/dist/core/speed-benchmark.test.d.ts.map +0 -1
  784. package/dist/core/speed-benchmark.test.js +0 -102
  785. package/dist/core/speed-benchmark.test.js.map +0 -1
  786. package/dist/core/subagent-manager.test.d.ts +0 -2
  787. package/dist/core/subagent-manager.test.d.ts.map +0 -1
  788. package/dist/core/subagent-manager.test.js +0 -375
  789. package/dist/core/subagent-manager.test.js.map +0 -1
  790. package/dist/core/subagent-store.test.d.ts +0 -2
  791. package/dist/core/subagent-store.test.d.ts.map +0 -1
  792. package/dist/core/subagent-store.test.js +0 -106
  793. package/dist/core/subagent-store.test.js.map +0 -1
  794. package/dist/core/verification-evidence.test.d.ts +0 -2
  795. package/dist/core/verification-evidence.test.d.ts.map +0 -1
  796. package/dist/core/verification-evidence.test.js +0 -103
  797. package/dist/core/verification-evidence.test.js.map +0 -1
  798. package/dist/core/verify-commands.test.d.ts +0 -2
  799. package/dist/core/verify-commands.test.d.ts.map +0 -1
  800. package/dist/core/verify-commands.test.js +0 -81
  801. package/dist/core/verify-commands.test.js.map +0 -1
  802. package/dist/core/workspace-guard.test.d.ts +0 -2
  803. package/dist/core/workspace-guard.test.d.ts.map +0 -1
  804. package/dist/core/workspace-guard.test.js +0 -107
  805. package/dist/core/workspace-guard.test.js.map +0 -1
  806. package/dist/modes/acp-mode.test.d.ts +0 -2
  807. package/dist/modes/acp-mode.test.d.ts.map +0 -1
  808. package/dist/modes/acp-mode.test.js +0 -1065
  809. package/dist/modes/acp-mode.test.js.map +0 -1
  810. package/dist/modes/json-mode.test.d.ts +0 -2
  811. package/dist/modes/json-mode.test.d.ts.map +0 -1
  812. package/dist/modes/json-mode.test.js +0 -84
  813. package/dist/modes/json-mode.test.js.map +0 -1
  814. package/dist/modes/subagent-worker-mode.test.d.ts +0 -2
  815. package/dist/modes/subagent-worker-mode.test.d.ts.map +0 -1
  816. package/dist/modes/subagent-worker-mode.test.js +0 -52
  817. package/dist/modes/subagent-worker-mode.test.js.map +0 -1
  818. package/dist/session.test.d.ts +0 -2
  819. package/dist/session.test.d.ts.map +0 -1
  820. package/dist/session.test.js +0 -35
  821. package/dist/session.test.js.map +0 -1
  822. package/dist/system-prompt.test.d.ts +0 -2
  823. package/dist/system-prompt.test.d.ts.map +0 -1
  824. package/dist/system-prompt.test.js +0 -536
  825. package/dist/system-prompt.test.js.map +0 -1
  826. package/dist/system-prompt.tiering.test.d.ts +0 -2
  827. package/dist/system-prompt.tiering.test.d.ts.map +0 -1
  828. package/dist/system-prompt.tiering.test.js +0 -105
  829. package/dist/system-prompt.tiering.test.js.map +0 -1
  830. package/dist/tools/bash.test.d.ts +0 -2
  831. package/dist/tools/bash.test.d.ts.map +0 -1
  832. package/dist/tools/bash.test.js +0 -204
  833. package/dist/tools/bash.test.js.map +0 -1
  834. package/dist/tools/checkpoint-hook.test.d.ts +0 -2
  835. package/dist/tools/checkpoint-hook.test.d.ts.map +0 -1
  836. package/dist/tools/checkpoint-hook.test.js +0 -65
  837. package/dist/tools/checkpoint-hook.test.js.map +0 -1
  838. package/dist/tools/code-nav.test.d.ts +0 -2
  839. package/dist/tools/code-nav.test.d.ts.map +0 -1
  840. package/dist/tools/code-nav.test.js +0 -136
  841. package/dist/tools/code-nav.test.js.map +0 -1
  842. package/dist/tools/code-skeleton.test.d.ts +0 -2
  843. package/dist/tools/code-skeleton.test.d.ts.map +0 -1
  844. package/dist/tools/code-skeleton.test.js +0 -115
  845. package/dist/tools/code-skeleton.test.js.map +0 -1
  846. package/dist/tools/compress-integration.test.d.ts +0 -2
  847. package/dist/tools/compress-integration.test.d.ts.map +0 -1
  848. package/dist/tools/compress-integration.test.js +0 -59
  849. package/dist/tools/compress-integration.test.js.map +0 -1
  850. package/dist/tools/compress.test.d.ts +0 -2
  851. package/dist/tools/compress.test.d.ts.map +0 -1
  852. package/dist/tools/compress.test.js +0 -60
  853. package/dist/tools/compress.test.js.map +0 -1
  854. package/dist/tools/edit-diff.test.d.ts +0 -2
  855. package/dist/tools/edit-diff.test.d.ts.map +0 -1
  856. package/dist/tools/edit-diff.test.js +0 -329
  857. package/dist/tools/edit-diff.test.js.map +0 -1
  858. package/dist/tools/edit-robustness.test.d.ts +0 -2
  859. package/dist/tools/edit-robustness.test.d.ts.map +0 -1
  860. package/dist/tools/edit-robustness.test.js +0 -417
  861. package/dist/tools/edit-robustness.test.js.map +0 -1
  862. package/dist/tools/edit.test.d.ts +0 -2
  863. package/dist/tools/edit.test.d.ts.map +0 -1
  864. package/dist/tools/edit.test.js +0 -940
  865. package/dist/tools/edit.test.js.map +0 -1
  866. package/dist/tools/exit-plan.test.d.ts +0 -2
  867. package/dist/tools/exit-plan.test.d.ts.map +0 -1
  868. package/dist/tools/exit-plan.test.js +0 -72
  869. package/dist/tools/exit-plan.test.js.map +0 -1
  870. package/dist/tools/generate-image.test.d.ts +0 -2
  871. package/dist/tools/generate-image.test.d.ts.map +0 -1
  872. package/dist/tools/generate-image.test.js +0 -240
  873. package/dist/tools/generate-image.test.js.map +0 -1
  874. package/dist/tools/goal-mode.test.d.ts +0 -2
  875. package/dist/tools/goal-mode.test.d.ts.map +0 -1
  876. package/dist/tools/goal-mode.test.js +0 -121
  877. package/dist/tools/goal-mode.test.js.map +0 -1
  878. package/dist/tools/goals.test.d.ts +0 -2
  879. package/dist/tools/goals.test.d.ts.map +0 -1
  880. package/dist/tools/goals.test.js +0 -795
  881. package/dist/tools/goals.test.js.map +0 -1
  882. package/dist/tools/grep-parity.test.d.ts +0 -2
  883. package/dist/tools/grep-parity.test.d.ts.map +0 -1
  884. package/dist/tools/grep-parity.test.js +0 -92
  885. package/dist/tools/grep-parity.test.js.map +0 -1
  886. package/dist/tools/grep-recall.test.d.ts +0 -2
  887. package/dist/tools/grep-recall.test.d.ts.map +0 -1
  888. package/dist/tools/grep-recall.test.js +0 -114
  889. package/dist/tools/grep-recall.test.js.map +0 -1
  890. package/dist/tools/grep-spawn.test.d.ts +0 -2
  891. package/dist/tools/grep-spawn.test.d.ts.map +0 -1
  892. package/dist/tools/grep-spawn.test.js +0 -66
  893. package/dist/tools/grep-spawn.test.js.map +0 -1
  894. package/dist/tools/grep.test.d.ts +0 -2
  895. package/dist/tools/grep.test.d.ts.map +0 -1
  896. package/dist/tools/grep.test.js +0 -82
  897. package/dist/tools/grep.test.js.map +0 -1
  898. package/dist/tools/html-extract.test.d.ts +0 -2
  899. package/dist/tools/html-extract.test.d.ts.map +0 -1
  900. package/dist/tools/html-extract.test.js +0 -60
  901. package/dist/tools/html-extract.test.js.map +0 -1
  902. package/dist/tools/index.test.d.ts +0 -2
  903. package/dist/tools/index.test.d.ts.map +0 -1
  904. package/dist/tools/index.test.js +0 -55
  905. package/dist/tools/index.test.js.map +0 -1
  906. package/dist/tools/overflow.test.d.ts +0 -2
  907. package/dist/tools/overflow.test.d.ts.map +0 -1
  908. package/dist/tools/overflow.test.js +0 -59
  909. package/dist/tools/overflow.test.js.map +0 -1
  910. package/dist/tools/path-utils.test.d.ts +0 -2
  911. package/dist/tools/path-utils.test.d.ts.map +0 -1
  912. package/dist/tools/path-utils.test.js +0 -54
  913. package/dist/tools/path-utils.test.js.map +0 -1
  914. package/dist/tools/pdf-extract.test.d.ts +0 -2
  915. package/dist/tools/pdf-extract.test.d.ts.map +0 -1
  916. package/dist/tools/pdf-extract.test.js +0 -15
  917. package/dist/tools/pdf-extract.test.js.map +0 -1
  918. package/dist/tools/plan-mode.test.d.ts +0 -2
  919. package/dist/tools/plan-mode.test.d.ts.map +0 -1
  920. package/dist/tools/plan-mode.test.js +0 -116
  921. package/dist/tools/plan-mode.test.js.map +0 -1
  922. package/dist/tools/read-only-bash.test.d.ts +0 -2
  923. package/dist/tools/read-only-bash.test.d.ts.map +0 -1
  924. package/dist/tools/read-only-bash.test.js +0 -47
  925. package/dist/tools/read-only-bash.test.js.map +0 -1
  926. package/dist/tools/read.test.d.ts +0 -2
  927. package/dist/tools/read.test.d.ts.map +0 -1
  928. package/dist/tools/read.test.js +0 -146
  929. package/dist/tools/read.test.js.map +0 -1
  930. package/dist/tools/screenshot.test.d.ts +0 -2
  931. package/dist/tools/screenshot.test.d.ts.map +0 -1
  932. package/dist/tools/screenshot.test.js +0 -145
  933. package/dist/tools/screenshot.test.js.map +0 -1
  934. package/dist/tools/search-code.test.d.ts +0 -2
  935. package/dist/tools/search-code.test.d.ts.map +0 -1
  936. package/dist/tools/search-code.test.js +0 -83
  937. package/dist/tools/search-code.test.js.map +0 -1
  938. package/dist/tools/source-path.test.d.ts +0 -2
  939. package/dist/tools/source-path.test.d.ts.map +0 -1
  940. package/dist/tools/source-path.test.js +0 -80
  941. package/dist/tools/source-path.test.js.map +0 -1
  942. package/dist/tools/subagent-control.test.d.ts +0 -2
  943. package/dist/tools/subagent-control.test.d.ts.map +0 -1
  944. package/dist/tools/subagent-control.test.js +0 -73
  945. package/dist/tools/subagent-control.test.js.map +0 -1
  946. package/dist/tools/subagent-shared.test.d.ts +0 -2
  947. package/dist/tools/subagent-shared.test.d.ts.map +0 -1
  948. package/dist/tools/subagent-shared.test.js +0 -83
  949. package/dist/tools/subagent-shared.test.js.map +0 -1
  950. package/dist/tools/subagent.test.d.ts +0 -2
  951. package/dist/tools/subagent.test.d.ts.map +0 -1
  952. package/dist/tools/subagent.test.js +0 -180
  953. package/dist/tools/subagent.test.js.map +0 -1
  954. package/dist/tools/task-send.test.d.ts +0 -2
  955. package/dist/tools/task-send.test.d.ts.map +0 -1
  956. package/dist/tools/task-send.test.js +0 -104
  957. package/dist/tools/task-send.test.js.map +0 -1
  958. package/dist/tools/tasks.test.d.ts +0 -2
  959. package/dist/tools/tasks.test.d.ts.map +0 -1
  960. package/dist/tools/tasks.test.js +0 -62
  961. package/dist/tools/tasks.test.js.map +0 -1
  962. package/dist/tools/tool-search.test.d.ts +0 -2
  963. package/dist/tools/tool-search.test.d.ts.map +0 -1
  964. package/dist/tools/tool-search.test.js +0 -69
  965. package/dist/tools/tool-search.test.js.map +0 -1
  966. package/dist/tools/tool-tiers.test.d.ts +0 -2
  967. package/dist/tools/tool-tiers.test.d.ts.map +0 -1
  968. package/dist/tools/tool-tiers.test.js +0 -48
  969. package/dist/tools/tool-tiers.test.js.map +0 -1
  970. package/dist/tools/truncate-utils.test.d.ts +0 -2
  971. package/dist/tools/truncate-utils.test.d.ts.map +0 -1
  972. package/dist/tools/truncate-utils.test.js +0 -93
  973. package/dist/tools/truncate-utils.test.js.map +0 -1
  974. package/dist/tools/truncate.test.d.ts +0 -2
  975. package/dist/tools/truncate.test.d.ts.map +0 -1
  976. package/dist/tools/truncate.test.js +0 -100
  977. package/dist/tools/truncate.test.js.map +0 -1
  978. package/dist/tools/web-fetch.test.d.ts +0 -2
  979. package/dist/tools/web-fetch.test.d.ts.map +0 -1
  980. package/dist/tools/web-fetch.test.js +0 -539
  981. package/dist/tools/web-fetch.test.js.map +0 -1
  982. package/dist/tools/web-search.test.d.ts +0 -2
  983. package/dist/tools/web-search.test.d.ts.map +0 -1
  984. package/dist/tools/web-search.test.js +0 -333
  985. package/dist/tools/web-search.test.js.map +0 -1
  986. package/dist/tools/write.test.d.ts +0 -2
  987. package/dist/tools/write.test.d.ts.map +0 -1
  988. package/dist/tools/write.test.js +0 -176
  989. package/dist/tools/write.test.js.map +0 -1
  990. package/dist/ui/anchor-pad-reclaim.test.d.ts +0 -2
  991. package/dist/ui/anchor-pad-reclaim.test.d.ts.map +0 -1
  992. package/dist/ui/anchor-pad-reclaim.test.js +0 -146
  993. package/dist/ui/anchor-pad-reclaim.test.js.map +0 -1
  994. package/dist/ui/app-items.test.d.ts +0 -2
  995. package/dist/ui/app-items.test.d.ts.map +0 -1
  996. package/dist/ui/app-items.test.js +0 -54
  997. package/dist/ui/app-items.test.js.map +0 -1
  998. package/dist/ui/app-state-persistence.test.d.ts +0 -2
  999. package/dist/ui/app-state-persistence.test.d.ts.map +0 -1
  1000. package/dist/ui/app-state-persistence.test.js +0 -71
  1001. package/dist/ui/app-state-persistence.test.js.map +0 -1
  1002. package/dist/ui/assistant-stream-flush-parity.test.d.ts +0 -2
  1003. package/dist/ui/assistant-stream-flush-parity.test.d.ts.map +0 -1
  1004. package/dist/ui/assistant-stream-flush-parity.test.js +0 -85
  1005. package/dist/ui/assistant-stream-flush-parity.test.js.map +0 -1
  1006. package/dist/ui/atomic-flush-regression.test.d.ts +0 -2
  1007. package/dist/ui/atomic-flush-regression.test.d.ts.map +0 -1
  1008. package/dist/ui/atomic-flush-regression.test.js +0 -218
  1009. package/dist/ui/atomic-flush-regression.test.js.map +0 -1
  1010. package/dist/ui/chat-layout-pinning.test.d.ts +0 -2
  1011. package/dist/ui/chat-layout-pinning.test.d.ts.map +0 -1
  1012. package/dist/ui/chat-layout-pinning.test.js +0 -525
  1013. package/dist/ui/chat-layout-pinning.test.js.map +0 -1
  1014. package/dist/ui/components/ActivityIndicator.test.d.ts +0 -2
  1015. package/dist/ui/components/ActivityIndicator.test.d.ts.map +0 -1
  1016. package/dist/ui/components/ActivityIndicator.test.js +0 -40
  1017. package/dist/ui/components/ActivityIndicator.test.js.map +0 -1
  1018. package/dist/ui/components/AssistantMessage.test.d.ts +0 -2
  1019. package/dist/ui/components/AssistantMessage.test.d.ts.map +0 -1
  1020. package/dist/ui/components/AssistantMessage.test.js +0 -418
  1021. package/dist/ui/components/AssistantMessage.test.js.map +0 -1
  1022. package/dist/ui/components/Footer.test.d.ts +0 -2
  1023. package/dist/ui/components/Footer.test.d.ts.map +0 -1
  1024. package/dist/ui/components/Footer.test.js +0 -16
  1025. package/dist/ui/components/Footer.test.js.map +0 -1
  1026. package/dist/ui/components/InputArea.test.d.ts +0 -2
  1027. package/dist/ui/components/InputArea.test.d.ts.map +0 -1
  1028. package/dist/ui/components/InputArea.test.js +0 -95
  1029. package/dist/ui/components/InputArea.test.js.map +0 -1
  1030. package/dist/ui/components/PlanOverlay.test.d.ts +0 -2
  1031. package/dist/ui/components/PlanOverlay.test.d.ts.map +0 -1
  1032. package/dist/ui/components/PlanOverlay.test.js +0 -24
  1033. package/dist/ui/components/PlanOverlay.test.js.map +0 -1
  1034. package/dist/ui/components/StreamingArea.test.d.ts +0 -2
  1035. package/dist/ui/components/StreamingArea.test.d.ts.map +0 -1
  1036. package/dist/ui/components/StreamingArea.test.js +0 -18
  1037. package/dist/ui/components/StreamingArea.test.js.map +0 -1
  1038. package/dist/ui/components/UserMessage.test.d.ts +0 -2
  1039. package/dist/ui/components/UserMessage.test.d.ts.map +0 -1
  1040. package/dist/ui/components/UserMessage.test.js +0 -39
  1041. package/dist/ui/components/UserMessage.test.js.map +0 -1
  1042. package/dist/ui/components/themed-output.test.d.ts +0 -2
  1043. package/dist/ui/components/themed-output.test.d.ts.map +0 -1
  1044. package/dist/ui/components/themed-output.test.js +0 -111
  1045. package/dist/ui/components/themed-output.test.js.map +0 -1
  1046. package/dist/ui/footer-jump-regression.test.d.ts +0 -2
  1047. package/dist/ui/footer-jump-regression.test.d.ts.map +0 -1
  1048. package/dist/ui/footer-jump-regression.test.js +0 -224
  1049. package/dist/ui/footer-jump-regression.test.js.map +0 -1
  1050. package/dist/ui/footer-status-layout.test.d.ts +0 -2
  1051. package/dist/ui/footer-status-layout.test.d.ts.map +0 -1
  1052. package/dist/ui/footer-status-layout.test.js +0 -71
  1053. package/dist/ui/footer-status-layout.test.js.map +0 -1
  1054. package/dist/ui/frame-clip-regression.test.d.ts +0 -2
  1055. package/dist/ui/frame-clip-regression.test.d.ts.map +0 -1
  1056. package/dist/ui/frame-clip-regression.test.js +0 -215
  1057. package/dist/ui/frame-clip-regression.test.js.map +0 -1
  1058. package/dist/ui/goal-events.test.d.ts +0 -2
  1059. package/dist/ui/goal-events.test.d.ts.map +0 -1
  1060. package/dist/ui/goal-events.test.js +0 -350
  1061. package/dist/ui/goal-events.test.js.map +0 -1
  1062. package/dist/ui/goal-lifecycle-orchestration.test.d.ts +0 -2
  1063. package/dist/ui/goal-lifecycle-orchestration.test.d.ts.map +0 -1
  1064. package/dist/ui/goal-lifecycle-orchestration.test.js +0 -512
  1065. package/dist/ui/goal-lifecycle-orchestration.test.js.map +0 -1
  1066. package/dist/ui/goal-overlay.test.d.ts +0 -2
  1067. package/dist/ui/goal-overlay.test.d.ts.map +0 -1
  1068. package/dist/ui/goal-overlay.test.js +0 -384
  1069. package/dist/ui/goal-overlay.test.js.map +0 -1
  1070. package/dist/ui/goal-status-bar.test.d.ts +0 -2
  1071. package/dist/ui/goal-status-bar.test.d.ts.map +0 -1
  1072. package/dist/ui/goal-status-bar.test.js +0 -172
  1073. package/dist/ui/goal-status-bar.test.js.map +0 -1
  1074. package/dist/ui/hooks/stall-retry-duplicate.test.d.ts +0 -2
  1075. package/dist/ui/hooks/stall-retry-duplicate.test.d.ts.map +0 -1
  1076. package/dist/ui/hooks/stall-retry-duplicate.test.js +0 -94
  1077. package/dist/ui/hooks/stall-retry-duplicate.test.js.map +0 -1
  1078. package/dist/ui/hooks/useAgentLoop.test.d.ts +0 -2
  1079. package/dist/ui/hooks/useAgentLoop.test.d.ts.map +0 -1
  1080. package/dist/ui/hooks/useAgentLoop.test.js +0 -66
  1081. package/dist/ui/hooks/useAgentLoop.test.js.map +0 -1
  1082. package/dist/ui/hooks/useContextCompaction.test.d.ts +0 -2
  1083. package/dist/ui/hooks/useContextCompaction.test.d.ts.map +0 -1
  1084. package/dist/ui/hooks/useContextCompaction.test.js +0 -135
  1085. package/dist/ui/hooks/useContextCompaction.test.js.map +0 -1
  1086. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts +0 -2
  1087. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.d.ts.map +0 -1
  1088. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js +0 -81
  1089. package/dist/ui/hooks/useTranscriptHistory.sessionstore.test.js.map +0 -1
  1090. package/dist/ui/hooks/useTranscriptHistory.test.d.ts +0 -2
  1091. package/dist/ui/hooks/useTranscriptHistory.test.d.ts.map +0 -1
  1092. package/dist/ui/hooks/useTranscriptHistory.test.js +0 -61
  1093. package/dist/ui/hooks/useTranscriptHistory.test.js.map +0 -1
  1094. package/dist/ui/hooks/useTranscriptScroll.test.d.ts +0 -2
  1095. package/dist/ui/hooks/useTranscriptScroll.test.d.ts.map +0 -1
  1096. package/dist/ui/hooks/useTranscriptScroll.test.js +0 -119
  1097. package/dist/ui/hooks/useTranscriptScroll.test.js.map +0 -1
  1098. package/dist/ui/live-area-clamp.test.d.ts +0 -2
  1099. package/dist/ui/live-area-clamp.test.d.ts.map +0 -1
  1100. package/dist/ui/live-area-clamp.test.js +0 -125
  1101. package/dist/ui/live-area-clamp.test.js.map +0 -1
  1102. package/dist/ui/live-area-height.test.d.ts +0 -2
  1103. package/dist/ui/live-area-height.test.d.ts.map +0 -1
  1104. package/dist/ui/live-area-height.test.js +0 -76
  1105. package/dist/ui/live-area-height.test.js.map +0 -1
  1106. package/dist/ui/live-frame-height.test.d.ts +0 -2
  1107. package/dist/ui/live-frame-height.test.d.ts.map +0 -1
  1108. package/dist/ui/live-frame-height.test.js +0 -116
  1109. package/dist/ui/live-frame-height.test.js.map +0 -1
  1110. package/dist/ui/live-item-flush.test.d.ts +0 -2
  1111. package/dist/ui/live-item-flush.test.d.ts.map +0 -1
  1112. package/dist/ui/live-item-flush.test.js +0 -437
  1113. package/dist/ui/live-item-flush.test.js.map +0 -1
  1114. package/dist/ui/long-prompt-regression-harness.test.d.ts +0 -2
  1115. package/dist/ui/long-prompt-regression-harness.test.d.ts.map +0 -1
  1116. package/dist/ui/long-prompt-regression-harness.test.js +0 -195
  1117. package/dist/ui/long-prompt-regression-harness.test.js.map +0 -1
  1118. package/dist/ui/pixel.test.d.ts +0 -2
  1119. package/dist/ui/pixel.test.d.ts.map +0 -1
  1120. package/dist/ui/pixel.test.js +0 -138
  1121. package/dist/ui/pixel.test.js.map +0 -1
  1122. package/dist/ui/plan-overlay.test.d.ts +0 -2
  1123. package/dist/ui/plan-overlay.test.d.ts.map +0 -1
  1124. package/dist/ui/plan-overlay.test.js +0 -305
  1125. package/dist/ui/plan-overlay.test.js.map +0 -1
  1126. package/dist/ui/queued-message.test.d.ts +0 -2
  1127. package/dist/ui/queued-message.test.d.ts.map +0 -1
  1128. package/dist/ui/queued-message.test.js +0 -172
  1129. package/dist/ui/queued-message.test.js.map +0 -1
  1130. package/dist/ui/render.test.d.ts +0 -2
  1131. package/dist/ui/render.test.d.ts.map +0 -1
  1132. package/dist/ui/render.test.js +0 -42
  1133. package/dist/ui/render.test.js.map +0 -1
  1134. package/dist/ui/scroll-stabilization.test.d.ts +0 -2
  1135. package/dist/ui/scroll-stabilization.test.d.ts.map +0 -1
  1136. package/dist/ui/scroll-stabilization.test.js +0 -64
  1137. package/dist/ui/scroll-stabilization.test.js.map +0 -1
  1138. package/dist/ui/slash-command-images.test.d.ts +0 -2
  1139. package/dist/ui/slash-command-images.test.d.ts.map +0 -1
  1140. package/dist/ui/slash-command-images.test.js +0 -110
  1141. package/dist/ui/slash-command-images.test.js.map +0 -1
  1142. package/dist/ui/startup-banner-order.test.d.ts +0 -2
  1143. package/dist/ui/startup-banner-order.test.d.ts.map +0 -1
  1144. package/dist/ui/startup-banner-order.test.js +0 -105
  1145. package/dist/ui/startup-banner-order.test.js.map +0 -1
  1146. package/dist/ui/stores/transcript-scroll-store.test.d.ts +0 -2
  1147. package/dist/ui/stores/transcript-scroll-store.test.d.ts.map +0 -1
  1148. package/dist/ui/stores/transcript-scroll-store.test.js +0 -73
  1149. package/dist/ui/stores/transcript-scroll-store.test.js.map +0 -1
  1150. package/dist/ui/streaming-flush-bounce.test.d.ts +0 -2
  1151. package/dist/ui/streaming-flush-bounce.test.d.ts.map +0 -1
  1152. package/dist/ui/streaming-flush-bounce.test.js +0 -177
  1153. package/dist/ui/streaming-flush-bounce.test.js.map +0 -1
  1154. package/dist/ui/submit-boundary-gap.test.d.ts +0 -2
  1155. package/dist/ui/submit-boundary-gap.test.d.ts.map +0 -1
  1156. package/dist/ui/submit-boundary-gap.test.js +0 -180
  1157. package/dist/ui/submit-boundary-gap.test.js.map +0 -1
  1158. package/dist/ui/terminal-history-repaint.test.d.ts +0 -2
  1159. package/dist/ui/terminal-history-repaint.test.d.ts.map +0 -1
  1160. package/dist/ui/terminal-history-repaint.test.js +0 -73
  1161. package/dist/ui/terminal-history-repaint.test.js.map +0 -1
  1162. package/dist/ui/terminal-history-retry-dedup.test.d.ts +0 -2
  1163. package/dist/ui/terminal-history-retry-dedup.test.d.ts.map +0 -1
  1164. package/dist/ui/terminal-history-retry-dedup.test.js +0 -61
  1165. package/dist/ui/terminal-history-retry-dedup.test.js.map +0 -1
  1166. package/dist/ui/terminal-history.test.d.ts +0 -2
  1167. package/dist/ui/terminal-history.test.d.ts.map +0 -1
  1168. package/dist/ui/terminal-history.test.js +0 -557
  1169. package/dist/ui/terminal-history.test.js.map +0 -1
  1170. package/dist/ui/thinking-level-cycle.test.d.ts +0 -2
  1171. package/dist/ui/thinking-level-cycle.test.d.ts.map +0 -1
  1172. package/dist/ui/thinking-level-cycle.test.js +0 -45
  1173. package/dist/ui/thinking-level-cycle.test.js.map +0 -1
  1174. package/dist/ui/tool-group-summary.test.d.ts +0 -2
  1175. package/dist/ui/tool-group-summary.test.d.ts.map +0 -1
  1176. package/dist/ui/tool-group-summary.test.js +0 -79
  1177. package/dist/ui/tool-group-summary.test.js.map +0 -1
  1178. package/dist/ui/transcript/spacing.test.d.ts +0 -2
  1179. package/dist/ui/transcript/spacing.test.d.ts.map +0 -1
  1180. package/dist/ui/transcript/spacing.test.js +0 -191
  1181. package/dist/ui/transcript/spacing.test.js.map +0 -1
  1182. package/dist/ui/transcript/transcript-lines.test.d.ts +0 -2
  1183. package/dist/ui/transcript/transcript-lines.test.d.ts.map +0 -1
  1184. package/dist/ui/transcript/transcript-lines.test.js +0 -76
  1185. package/dist/ui/transcript/transcript-lines.test.js.map +0 -1
  1186. package/dist/ui/transcript-viewport-pinning.test.d.ts +0 -2
  1187. package/dist/ui/transcript-viewport-pinning.test.d.ts.map +0 -1
  1188. package/dist/ui/transcript-viewport-pinning.test.js +0 -148
  1189. package/dist/ui/transcript-viewport-pinning.test.js.map +0 -1
  1190. package/dist/ui/tui-history-parity.test.d.ts +0 -2
  1191. package/dist/ui/tui-history-parity.test.d.ts.map +0 -1
  1192. package/dist/ui/tui-history-parity.test.js +0 -388
  1193. package/dist/ui/tui-history-parity.test.js.map +0 -1
  1194. package/dist/ui/tui-simulation.test.d.ts +0 -2
  1195. package/dist/ui/tui-simulation.test.d.ts.map +0 -1
  1196. package/dist/ui/tui-simulation.test.js +0 -145
  1197. package/dist/ui/tui-simulation.test.js.map +0 -1
  1198. package/dist/ui/tui-terminal-recorder.test.d.ts +0 -2
  1199. package/dist/ui/tui-terminal-recorder.test.d.ts.map +0 -1
  1200. package/dist/ui/tui-terminal-recorder.test.js +0 -134
  1201. package/dist/ui/tui-terminal-recorder.test.js.map +0 -1
  1202. package/dist/ui/utils/assistant-stream-split.test.d.ts +0 -2
  1203. package/dist/ui/utils/assistant-stream-split.test.d.ts.map +0 -1
  1204. package/dist/ui/utils/assistant-stream-split.test.js +0 -74
  1205. package/dist/ui/utils/assistant-stream-split.test.js.map +0 -1
  1206. package/dist/ui/utils/markdown-renderer.test.d.ts +0 -2
  1207. package/dist/ui/utils/markdown-renderer.test.d.ts.map +0 -1
  1208. package/dist/ui/utils/markdown-renderer.test.js +0 -63
  1209. package/dist/ui/utils/markdown-renderer.test.js.map +0 -1
  1210. package/dist/ui/utils/table-text.test.d.ts +0 -2
  1211. package/dist/ui/utils/table-text.test.d.ts.map +0 -1
  1212. package/dist/ui/utils/table-text.test.js +0 -202
  1213. package/dist/ui/utils/table-text.test.js.map +0 -1
  1214. package/dist/ui/utils/terminal-graphics.test.d.ts +0 -2
  1215. package/dist/ui/utils/terminal-graphics.test.d.ts.map +0 -1
  1216. package/dist/ui/utils/terminal-graphics.test.js +0 -100
  1217. package/dist/ui/utils/terminal-graphics.test.js.map +0 -1
  1218. package/dist/ui/utils/terminal-input.test.d.ts +0 -2
  1219. package/dist/ui/utils/terminal-input.test.d.ts.map +0 -1
  1220. package/dist/ui/utils/terminal-input.test.js +0 -15
  1221. package/dist/ui/utils/terminal-input.test.js.map +0 -1
  1222. package/dist/utils/git.test.d.ts +0 -2
  1223. package/dist/utils/git.test.d.ts.map +0 -1
  1224. package/dist/utils/git.test.js +0 -36
  1225. package/dist/utils/git.test.js.map +0 -1
  1226. package/dist/utils/github.test.d.ts +0 -2
  1227. package/dist/utils/github.test.d.ts.map +0 -1
  1228. package/dist/utils/github.test.js +0 -23
  1229. package/dist/utils/github.test.js.map +0 -1
  1230. package/dist/utils/http-body.test.d.ts +0 -2
  1231. package/dist/utils/http-body.test.d.ts.map +0 -1
  1232. package/dist/utils/http-body.test.js +0 -68
  1233. package/dist/utils/http-body.test.js.map +0 -1
  1234. package/dist/utils/image.test.d.ts +0 -2
  1235. package/dist/utils/image.test.d.ts.map +0 -1
  1236. package/dist/utils/image.test.js +0 -139
  1237. package/dist/utils/image.test.js.map +0 -1
  1238. package/dist/utils/plan-steps.test.d.ts +0 -2
  1239. package/dist/utils/plan-steps.test.d.ts.map +0 -1
  1240. package/dist/utils/plan-steps.test.js +0 -159
  1241. package/dist/utils/plan-steps.test.js.map +0 -1
  1242. package/dist/utils/process.test.d.ts +0 -2
  1243. package/dist/utils/process.test.d.ts.map +0 -1
  1244. package/dist/utils/process.test.js +0 -42
  1245. package/dist/utils/process.test.js.map +0 -1
@@ -18,6 +18,7 @@ import os from "node:os";
18
18
  import path from "node:path";
19
19
  import { randomUUID } from "node:crypto";
20
20
  import { parseArgs } from "node:util";
21
+ import { spawn } from "node:child_process";
21
22
  import { environmentSecrets, formatError, redactValue } from "@prestyj/ai";
22
23
  import { runJsonMode } from "./modes/json-mode.js";
23
24
  import { runSubagentWorkerMode } from "./modes/subagent-worker-mode.js";
@@ -37,6 +38,7 @@ import { validateNolanModelPref, effectiveNolanModel, } from "./core/nolan-model
37
38
  import { normalizeAutopilotMarkersForHistory, normalizeAppMarkersForHistory, normalizeNolanTurnsForHistory, getHistoryMessageVisibility, replayMessagesInOrder, restoreUserRow, restoreAssistantTexts, resolveRestoredCommand, autopilotMarkerCopySeed, } from "./core/session-history.js";
38
39
  import { sessionToMarkdown, defaultExportFilename, } from "./core/session-export.js";
39
40
  import { AuthStorage } from "./core/auth-storage.js";
41
+ import { advancesPhase, explainPullFailure, isGgufShard, isValidHfRepoId, parseOllamaPullLine, pickGgufQuant, SHARDED_MESSAGE, toHfSearchRow, } from "./hf-pull.js";
40
42
  import { cleanupToolOutputs } from "./tools/overflow.js";
41
43
  import { readCappedBody } from "./utils/http-body.js";
42
44
  import { fetchSubscriptionUsage, SubscriptionUsageError, XIAOMI_CREDITS_KEY, dualAuthProvider, oauthStorageKey, discoverLocalModels, findProbedModel, formatLocalModelId, parseLocalModelId, probeEndpoint, toModelInfo as localModelInfo, } from "@prestyj/core";
@@ -47,7 +49,7 @@ import { loginGemini } from "./core/oauth/gemini.js";
47
49
  import { loginKimi } from "./core/oauth/kimi.js";
48
50
  import { loginXai } from "./core/oauth/xai.js";
49
51
  import { AUTH_PROVIDERS, authPriorityNote, describeAuthMethods, } from "./core/auth-providers.js";
50
- import { ensureAppDirs, loadSavedSettings } from "./config.js";
52
+ import { ensureAppDirs, loadSavedSettings, projectScopeAllowed } from "./config.js";
51
53
  import { SettingsManager } from "./core/settings-manager.js";
52
54
  import { installPlugin, listInstalledPlugins, removePlugin, } from "./core/extensions/plugin-bundles.js";
53
55
  import { getModel, getDefaultThinkingLevel, getContextWindow, getAllModels, clearRuntimeModels, registerRuntimeModels, } from "./core/model-registry.js";
@@ -67,14 +69,16 @@ import { RADIO_STATIONS, getCurrentStation, getRadioVolume, playRadio, setRadioV
67
69
  import { enrichProcessPath } from "./core/shell-path.js";
68
70
  import { downscaleForPreview, shrinkToFit, validateVisionImage } from "./utils/image.js";
69
71
  import { startServeMode } from "./modes/serve-mode.js";
72
+ import { installSteroids, probeSteroids } from "./core/steroids.js";
70
73
  import { loadTelegramConfig, saveTelegramConfig, verifyBotToken } from "./core/telegram-config.js";
71
74
  import { loadServers, addServer, removeServer, getServer, parseMcpAddCommand, MCPClientManager, McpOAuthStore, createElicitationBridge, } from "./core/mcp/index.js";
75
+ import { createAskUserBridge } from "./core/ask-user.js";
76
+ import { createAskUserTool } from "./tools/ask-user.js";
72
77
  import { buildSnapshot, levelForXp, rankForLevel } from "./core/progress/ranks.js";
73
78
  import { loadProgress, peekProgress, updateProgress } from "./core/progress/store.js";
74
79
  import { awardPrompt, awardCommits } from "./core/progress/engine.js";
75
80
  import { detectNewCommits, repoKey } from "./core/progress/git-xp.js";
76
81
  import { rebuildFromSessions } from "./core/progress/rebuild.js";
77
- import { captureSidecarError, flushSidecarErrors, shouldCaptureToolFailure, shouldCaptureUsagePollingError, wrapSidecarHandler, } from "./core/sidecar-error-reporter.js";
78
82
  const AUTOMATION_PROVENANCE = {
79
83
  source: "runtime",
80
84
  kind: "automation",
@@ -92,6 +96,8 @@ const ALL_PROVIDERS = [
92
96
  "minimax",
93
97
  "xiaomi",
94
98
  "deepseek",
99
+ // Open-community gateway, before the provider-agnostic one
100
+ "huggingface",
95
101
  // Japan, then provider-agnostic gateway last
96
102
  "sakana",
97
103
  "openrouter",
@@ -193,7 +199,6 @@ async function persistModelSelection(settingsFile, provider, model) {
193
199
  await sm.set("defaultModel", model);
194
200
  }
195
201
  catch (err) {
196
- captureSidecarError(err, "app-sidecar.settings.persist-model");
197
202
  log("WARN", "app-sidecar", "failed to persist model selection", { err: String(err) });
198
203
  }
199
204
  }
@@ -210,7 +215,6 @@ async function persistThinkingLevel(settingsFile, level) {
210
215
  await sm.set("thinkingLevel", level);
211
216
  }
212
217
  catch (err) {
213
- captureSidecarError(err, "app-sidecar.settings.persist-thinking");
214
218
  log("WARN", "app-sidecar", "failed to persist thinking level", { err: String(err) });
215
219
  }
216
220
  }
@@ -388,27 +392,49 @@ function mcpRowSummary(config) {
388
392
  }
389
393
  /** Load + connect every server, returning one wire row per server. Mirrors the
390
394
  * CLI dashboard's buildRows (connectAllDetailed, then dispose). Empty list
391
- * short-circuits before spawning any stdio process / opening any HTTP conn. */
392
- async function buildMcpRows(cwd) {
395
+ * short-circuits before spawning any stdio process / opening any HTTP conn.
396
+ * Project-scope servers run repo-controlled commands, so unless the user
397
+ * trusts them (trustProjectMcpServers) they are reported blocked WITHOUT
398
+ * being connected — even a status probe would spawn the process. */
399
+ async function buildMcpRows(cwd, settingsFile) {
393
400
  const scoped = await loadServers(cwd);
394
401
  if (scoped.length === 0)
395
402
  return [];
403
+ const settings = loadSavedSettings(settingsFile);
404
+ const allowProject = projectScopeAllowed(settings.trustProjectMcpServers, settings.trustedProjects, cwd);
405
+ const connectable = scoped.filter((s) => allowProject || s.scope !== "project");
406
+ const blocked = scoped.filter((s) => !allowProject && s.scope === "project");
396
407
  const manager = new MCPClientManager();
397
408
  try {
398
- const results = await manager.connectAllDetailed(scoped.map((s) => s.config));
399
- return scoped.map((s) => {
400
- const result = results.find((r) => r.name === s.config.name);
401
- return {
409
+ const results = connectable.length > 0
410
+ ? await manager.connectAllDetailed(connectable.map((s) => s.config))
411
+ : [];
412
+ return [
413
+ ...connectable.map((s) => {
414
+ const result = results.find((r) => r.name === s.config.name);
415
+ return {
416
+ name: s.config.name,
417
+ scope: s.scope,
418
+ ok: result?.ok ?? false,
419
+ toolCount: result?.toolCount ?? 0,
420
+ error: result?.error,
421
+ kind: s.config.url ? "http" : "stdio",
422
+ summary: mcpRowSummary(s.config),
423
+ requiresAuth: result?.requiresAuth,
424
+ };
425
+ }),
426
+ ...blocked.map((s) => ({
402
427
  name: s.config.name,
403
428
  scope: s.scope,
404
- ok: result?.ok ?? false,
405
- toolCount: result?.toolCount ?? 0,
406
- error: result?.error,
407
- kind: s.config.url ? "http" : "stdio",
429
+ ok: false,
430
+ toolCount: 0,
431
+ error: "Project-scope server not connected — this repo's .ezcoder/mcp.json runs " +
432
+ "repo-controlled commands. Add or re-add a server in this project via " +
433
+ "the MCP modal to trust it.",
434
+ kind: (s.config.url ? "http" : "stdio"),
408
435
  summary: mcpRowSummary(s.config),
409
- requiresAuth: result?.requiresAuth,
410
- };
411
- });
436
+ })),
437
+ ];
412
438
  }
413
439
  finally {
414
440
  await manager.dispose();
@@ -494,10 +520,6 @@ async function runJsonModeIfRequested() {
494
520
  allowedMcpServers,
495
521
  promptCacheKey: values["prompt-cache-key"],
496
522
  }).catch(async (err) => {
497
- captureSidecarError(err, "app-sidecar.json-mode", {
498
- provider: String(values.provider ?? "anthropic"),
499
- });
500
- await flushSidecarErrors();
501
523
  process.stderr.write((err instanceof Error ? err.message : String(err)) + "\n");
502
524
  process.exit(1);
503
525
  });
@@ -510,9 +532,10 @@ function daemonReadBody(req, res) {
510
532
  return readCappedBody(req, res);
511
533
  }
512
534
  function daemonJson(res, status, body) {
535
+ // No CORS headers: only the Rust proxy (no Origin) should call this daemon.
536
+ // Granting origins would let any web page read responses from loopback.
513
537
  res.writeHead(status, {
514
538
  "content-type": "application/json",
515
- "access-control-allow-origin": "*",
516
539
  });
517
540
  res.end(JSON.stringify(body));
518
541
  }
@@ -530,6 +553,13 @@ async function main() {
530
553
  // GG_APP_LISTENING handshake and consumed by the shell.
531
554
  const port = Number(process.env.GG_APP_PORT ?? 0);
532
555
  const host = "127.0.0.1";
556
+ // Per-launch bearer token. The Rust shell generates one and passes it via
557
+ // GG_APP_TOKEN; spawned any other way (dev, tests, smoke) we mint our own
558
+ // and report it on the GG_APP_LISTENING line. Every request must carry it
559
+ // as x-ez-token: this daemon creates sessions for arbitrary cwds, runs
560
+ // prompts, and installs plugins, so an unauthenticated loopback port lets
561
+ // any local process drive the agent as the user.
562
+ const authToken = process.env.GG_APP_TOKEN ?? randomUUID();
533
563
  const paths = await ensureAppDirs();
534
564
  // Own log file so the app sidecar never clobbers the interactive CLI's
535
565
  // ~/.ezcoder/debug.log (initLogger truncates on each start).
@@ -543,7 +573,9 @@ async function main() {
543
573
  const includeRuntime = phase === "idle_timeout_fired" ||
544
574
  phase === "hard_timeout_fired" ||
545
575
  phase === "stall_exhausted";
546
- log("INFO", "stream", phase, {
576
+ // A session stuck on the non-streaming fallback costs real money and real
577
+ // latency; it does not belong in the INFO noise floor.
578
+ log(phase === "non_streaming_session" ? "WARN" : "INFO", "stream", phase, {
547
579
  ...(data ?? {}),
548
580
  ...(includeRuntime
549
581
  ? {
@@ -692,9 +724,6 @@ async function main() {
692
724
  }
693
725
  catch (error) {
694
726
  const message = error instanceof Error ? error.message : String(error);
695
- if (shouldCaptureUsagePollingError(error)) {
696
- captureSidecarError(error, "app-sidecar.usage.fetch", { provider });
697
- }
698
727
  let backoffMs;
699
728
  if (error instanceof SubscriptionUsageError && error.status === 429) {
700
729
  backoffMs = Math.min(USAGE_RATE_LIMIT_MAX_BACKOFF_MS, Math.max(USAGE_RATE_LIMIT_MIN_BACKOFF_MS, error.retryAfterMs ?? USAGE_RATE_LIMIT_FALLBACK_BACKOFF_MS));
@@ -777,19 +806,29 @@ async function main() {
777
806
  return null;
778
807
  }
779
808
  }
780
- const server = http.createServer(wrapSidecarHandler((req, res) => {
809
+ const server = http.createServer((req, res) => {
781
810
  const url = req.url ?? "/";
782
811
  const method = req.method ?? "GET";
783
- // CORS preflight — the webview origin differs from 127.0.0.1.
812
+ // Answer preflights with a bare 204 but grant NO origins — the webview
813
+ // reaches the daemon through the Rust proxy, never cross-origin, so any
814
+ // browser page's preflight must fail here.
784
815
  if (method === "OPTIONS") {
785
- res.writeHead(204, {
786
- "access-control-allow-origin": "*",
787
- "access-control-allow-methods": "GET, POST, DELETE, OPTIONS",
788
- "access-control-allow-headers": "content-type, x-ez-session",
789
- });
816
+ res.writeHead(204);
790
817
  res.end();
791
818
  return;
792
819
  }
820
+ // Host allowlist. The daemon binds 127.0.0.1 only; rejecting any other
821
+ // Host blocks DNS rebinding, where a web page's request arrives with
822
+ // the attacker's hostname (browsers cannot spoof Host).
823
+ const reqHost = req.headers.host ?? "";
824
+ if (!/^(127\.0\.0\.1|localhost|\[::1\])(:\d+)?$/i.test(reqHost)) {
825
+ daemonJson(res, 403, { error: "forbidden host" });
826
+ return;
827
+ }
828
+ if (req.headers["x-ez-token"] !== authToken) {
829
+ daemonJson(res, 401, { error: "unauthorized" });
830
+ return;
831
+ }
793
832
  // ── Daemon-level routes (session lifecycle) ──────────────────────────
794
833
  // Create a session for a window: { mode?, cwd, sessionPath? } → { sessionId }.
795
834
  if (method === "POST" && url === "/session") {
@@ -831,7 +870,6 @@ async function main() {
831
870
  }
832
871
  catch (err) {
833
872
  const message = err instanceof Error ? err.message : String(err);
834
- captureSidecarError(err, "app-sidecar.session.create");
835
873
  log("ERROR", "app-sidecar", "session create failed", { message });
836
874
  daemonJson(res, 500, { error: message });
837
875
  }
@@ -868,7 +906,6 @@ async function main() {
868
906
  }
869
907
  daemonJson(res, 200, await subscriptionUsage(provider));
870
908
  })().catch((error) => {
871
- captureSidecarError(error, "app-sidecar.usage.request");
872
909
  log("ERROR", "app-sidecar", "subscription usage request failed", {
873
910
  message: error instanceof Error ? error.message : String(error),
874
911
  });
@@ -884,11 +921,12 @@ async function main() {
884
921
  return;
885
922
  }
886
923
  ctx.handle(req, res, url, method);
887
- }, "app-sidecar.http"));
924
+ });
888
925
  server.listen(port, host, () => {
889
926
  const addr = server.address();
890
- // The Rust shell reads this line to learn the daemon port.
891
- process.stdout.write(`GG_APP_LISTENING ${addr.port}\n`);
927
+ // The Rust shell reads this line to learn the daemon port (it already
928
+ // knows the token — it set GG_APP_TOKEN; the field serves other spawners).
929
+ process.stdout.write(`GG_APP_LISTENING ${addr.port} ${authToken}\n`);
892
930
  log("INFO", "app-sidecar", "daemon listening", { port: String(addr.port), host });
893
931
  });
894
932
  const shellPid = process.ppid;
@@ -945,11 +983,10 @@ const NOLAN_ALLOWED_TOOLS = [
945
983
  "web_fetch",
946
984
  "web_search",
947
985
  "screenshot",
986
+ // Local corpus of real repos: lets Nolan verify against code that ships
987
+ // instead of assuming — core to how he's meant to work. Read-only.
988
+ "steroids",
948
989
  ];
949
- /** MCP servers Nolan is allowed to use. kencode-search lets him look into real
950
- * public repos / verify against actual code instead of assuming — core to how
951
- * he's meant to work. Read-only research; no other MCP server is connected. */
952
- const NOLAN_ALLOWED_MCP_SERVERS = ["kencode-search"];
953
990
  /** Extract the plain text of the most recent assistant message (Nolan's reply).
954
991
  * Strips tool-call / image blocks, returning just the prose Nolan streamed. */
955
992
  function lastAssistantText(messages) {
@@ -1036,7 +1073,6 @@ async function createProgressManager(agentDir, broadcastAll) {
1036
1073
  broadcastAll(buildSnapshot(updated), originId);
1037
1074
  }
1038
1075
  catch (err) {
1039
- captureSidecarError(err, "app-sidecar.progress.award");
1040
1076
  log("DEBUG", "app-sidecar", "progress award failed", {
1041
1077
  message: err instanceof Error ? err.message : String(err),
1042
1078
  });
@@ -1070,7 +1106,6 @@ async function createProgressManager(agentDir, broadcastAll) {
1070
1106
  progressWatcher = watcher;
1071
1107
  }
1072
1108
  catch (err) {
1073
- captureSidecarError(err, "app-sidecar.progress.watch");
1074
1109
  log("DEBUG", "app-sidecar", "progress watch unavailable", {
1075
1110
  message: err instanceof Error ? err.message : String(err),
1076
1111
  });
@@ -1168,7 +1203,7 @@ async function createSession(deps, opts) {
1168
1203
  // command that doesn't exist in the app.
1169
1204
  .replaceAll(/Run \/compact to shrink history, or start a new session\./gi, "Start a new session to reset the context.")
1170
1205
  // /model: handle each phrasing pattern
1171
- .replaceAll(/switch to claude-fable-5 with \/model/gi, "switch to claude-fable-5 using the model selector")
1206
+ .replaceAll(/switch to (\S+) with \/model/gi, "switch to $1 using the model selector")
1172
1207
  .replaceAll(/Switch with \/model\./gi, "Switch using the model selector.")
1173
1208
  .replaceAll(/try a different model with \/model\./gi, "try a different model using the model selector.")
1174
1209
  .replaceAll(/Use \/model to switch/gi, "Use the model selector to switch")
@@ -1204,11 +1239,6 @@ async function createSession(deps, opts) {
1204
1239
  const f = formatError(err);
1205
1240
  const message = f.message ? desktopGuidance(f.message) : undefined;
1206
1241
  const guidance = localNetworkGuidance(f.source) ?? desktopGuidance(f.guidance);
1207
- captureSidecarError(err, `app-sidecar.${logLabel.replaceAll(" ", "-")}`, {
1208
- scope: type,
1209
- ...(f.provider ? { provider: f.provider } : {}),
1210
- ...(f.statusCode != null ? { status: String(f.statusCode) } : {}),
1211
- });
1212
1242
  log("ERROR", "app-sidecar", logLabel, {
1213
1243
  headline: f.headline,
1214
1244
  source: f.source,
@@ -1247,6 +1277,16 @@ async function createSession(deps, opts) {
1247
1277
  server: prompt.server,
1248
1278
  }),
1249
1279
  });
1280
+ // ── ask_user bridge ────────────────────────────────────────
1281
+ // The `ask_user` tool parks the turn on a human answer. Same shape as the
1282
+ // MCP bridge above: broadcast over SSE, resolved when the webview POSTs
1283
+ // /ask/:id. Registered ONLY here — a TUI/headless/subagent run has nobody to
1284
+ // answer, so the tool is absent there rather than hanging on a dead channel.
1285
+ const asks = createAskUserBridge({
1286
+ broadcast: (prompt) => broadcast("ask_user", prompt),
1287
+ onTimeout: (prompt) => log("WARN", "app-sidecar", "ask_user timed out", { id: prompt.id }),
1288
+ });
1289
+ const askUserTool = createAskUserTool(asks.park);
1250
1290
  // The session file path to resume (passed by the daemon's POST /session);
1251
1291
  // empty/unset starts a fresh session.
1252
1292
  const resumeSessionPath = opts.sessionPath;
@@ -1272,13 +1312,16 @@ async function createSession(deps, opts) {
1272
1312
  session = createChatAgent(chatAgent, {
1273
1313
  ...baseSessionOptions,
1274
1314
  sessionsDir: paths.sessionsDir,
1275
- additionalTools: [...buildMemoryTools(memoryStore), ...buildJiwaTools(jiwaStore)],
1315
+ additionalTools: [
1316
+ askUserTool,
1317
+ ...buildMemoryTools(memoryStore),
1318
+ ...buildJiwaTools(jiwaStore),
1319
+ ],
1276
1320
  getSystemPromptTail: () => `${memoryStore.renderForPrompt()}\n\n${jiwaStore.renderForPrompt()}`,
1277
1321
  onAgentChange: async (nextAgent) => {
1278
1322
  chatAgent = nextAgent;
1279
1323
  broadcast("chat_agent_change", { chatAgent: nextAgent });
1280
1324
  await session.persistAppMarker("agent_handoff", { chatAgent: nextAgent }).catch((error) => {
1281
- captureSidecarError(error, "app-sidecar.chat-agent.persist-handoff");
1282
1325
  log("WARN", "app-sidecar", "agent handoff marker persist failed", {
1283
1326
  message: error instanceof Error ? error.message : String(error),
1284
1327
  });
@@ -1289,6 +1332,7 @@ async function createSession(deps, opts) {
1289
1332
  else {
1290
1333
  session = new AgentSession({
1291
1334
  ...baseSessionOptions,
1335
+ additionalTools: [askUserTool],
1292
1336
  // Plan mode belongs only to the coding agent.
1293
1337
  onEnterPlan: async (reason) => {
1294
1338
  // Unattended task runs cannot approve plans; implement directly instead.
@@ -1331,8 +1375,8 @@ async function createSession(deps, opts) {
1331
1375
  }
1332
1376
  }
1333
1377
  log("INFO", "app-sidecar", "session ready", { provider, model, mode, chatAgent, cwd });
1334
- // ── Local models (Ollama / LM Studio / llama.cpp / vLLM) ──
1335
- // Probing four HTTP endpoints must never delay readiness, so this runs in the
1378
+ // ── Local models (Ollama, plus user-added custom endpoints) ──
1379
+ // Probing endpoints must never delay readiness, so this runs in the
1336
1380
  // background (same shape as backgroundMcpConnect) and pushes a models_change
1337
1381
  // frame when it lands.
1338
1382
  let localProbes = [];
@@ -1375,6 +1419,204 @@ async function createSession(deps, opts) {
1375
1419
  })),
1376
1420
  };
1377
1421
  }
1422
+ let hfPull = null;
1423
+ const hfPullPayload = (s) => ({
1424
+ repo: s.repo,
1425
+ model: s.model,
1426
+ tag: s.tag,
1427
+ file: s.file,
1428
+ sizeBytes: s.sizeBytes,
1429
+ phase: s.phase,
1430
+ percent: s.percent,
1431
+ ...(s.detail ? { detail: s.detail } : {}),
1432
+ ...(s.error ? { error: s.error } : {}),
1433
+ });
1434
+ /** Stored HF token, if the user connected the huggingface provider. */
1435
+ async function hfToken() {
1436
+ try {
1437
+ const auth = new AuthStorage(paths.authFile);
1438
+ const creds = await auth.resolveCredentials("huggingface");
1439
+ return creds.accessToken || undefined;
1440
+ }
1441
+ catch {
1442
+ return undefined;
1443
+ }
1444
+ }
1445
+ async function hfHubJson(pathname) {
1446
+ const token = await hfToken();
1447
+ const res = await fetch(`https://huggingface.co${pathname}`, {
1448
+ headers: token ? { authorization: `Bearer ${token}` } : {},
1449
+ signal: AbortSignal.timeout(10_000),
1450
+ });
1451
+ if (!res.ok)
1452
+ throw new Error(`Hugging Face responded ${res.status}`);
1453
+ return res.json();
1454
+ }
1455
+ /** Search the Hub for GGUF repos (what Ollama can pull). */
1456
+ async function hfSearch(query) {
1457
+ // `filter=gguf` (the tag the Hub applies to repos that actually contain
1458
+ // GGUF files) — `library=gguf` also matches safetensors-only base repos,
1459
+ // which then fail at pull time. `expand[]=gguf` confirms per row.
1460
+ const params = new URLSearchParams({
1461
+ search: query,
1462
+ filter: "gguf",
1463
+ sort: "downloads",
1464
+ direction: "-1",
1465
+ limit: "12",
1466
+ });
1467
+ for (const field of ["gguf", "downloads", "likes", "lastModified"]) {
1468
+ params.append("expand[]", field);
1469
+ }
1470
+ const data = (await hfHubJson(`/api/models?${params.toString()}`));
1471
+ return (Array.isArray(data) ? data : [])
1472
+ .map(toHfSearchRow)
1473
+ .filter((r) => r !== null);
1474
+ }
1475
+ /**
1476
+ * Start `ollama pull hf.co/<repo>[:quant]`. Resolves once the child is
1477
+ * spawned; progress streams as `hf_pull` events. The chosen quant comes from
1478
+ * the repo's real file list — the client only ever sends a repo id, so there
1479
+ * is no injection surface into argv.
1480
+ */
1481
+ async function startHfPull(repo) {
1482
+ if (hfPull?.child) {
1483
+ throw Object.assign(new Error("A download is already running."), { status: 409 });
1484
+ }
1485
+ // `recursive=true`: many repos (unsloth, mradermacher) keep quants in
1486
+ // per-quant subfolders, and a flat listing reports them as GGUF-less.
1487
+ const tree = (await hfHubJson(`/api/models/${repo}/tree/main?recursive=true`));
1488
+ const files = (Array.isArray(tree) ? tree : []).flatMap((entry) => {
1489
+ const e = entry;
1490
+ // `type` guards a directory entry (size 0) from beating real files in the
1491
+ // size fallback; the Hub marks folders as "directory".
1492
+ if (e.type !== undefined && e.type !== "file")
1493
+ return [];
1494
+ if (typeof e.path !== "string" || !e.path.toLowerCase().endsWith(".gguf"))
1495
+ return [];
1496
+ const size = Number(e.lfs?.size ?? e.size ?? 0);
1497
+ return [{ path: e.path, sizeBytes: Number.isFinite(size) ? size : 0 }];
1498
+ });
1499
+ const choice = pickGgufQuant(files);
1500
+ if (!choice) {
1501
+ const sharded = files.some((f) => isGgufShard(f.path));
1502
+ throw Object.assign(new Error(sharded ? SHARDED_MESSAGE : "That repo has no GGUF file for Ollama to pull."), { status: 400 });
1503
+ }
1504
+ const model = `hf.co/${repo}${choice.tag ? `:${choice.tag}` : ""}`;
1505
+ const token = await hfToken();
1506
+ const state = {
1507
+ repo,
1508
+ model,
1509
+ tag: choice.tag,
1510
+ file: choice.file.path,
1511
+ sizeBytes: choice.file.sizeBytes,
1512
+ phase: "preparing",
1513
+ percent: 0,
1514
+ child: null,
1515
+ };
1516
+ hfPull = state;
1517
+ broadcast("hf_pull", hfPullPayload(state));
1518
+ // ollama prints progress to stderr (stdout on some builds); parse both.
1519
+ let stderrTail = "";
1520
+ let lastBroadcast = "";
1521
+ const feed = (chunk) => {
1522
+ // Once the pull is terminal (success, failure, or user cancel) stop
1523
+ // parsing: a killed ollama dumps a burst of stderr that would otherwise
1524
+ // spam the modal with garbage frames after the outcome is already shown.
1525
+ if (state.phase === "success" || state.phase === "error")
1526
+ return;
1527
+ for (const line of chunk.split(/\r\n|\r|\n/)) {
1528
+ const parsed = parseOllamaPullLine(line);
1529
+ if (!parsed)
1530
+ continue;
1531
+ // A redrawn frame repeats `pulling manifest` next to live progress; it
1532
+ // must not drag the modal back to "Contacting Ollama…".
1533
+ if (!advancesPhase(state.phase, parsed.phase))
1534
+ continue;
1535
+ if (parsed.phase !== "error") {
1536
+ state.phase = parsed.phase;
1537
+ if (parsed.percent !== undefined)
1538
+ state.percent = parsed.percent;
1539
+ state.detail = parsed.detail;
1540
+ }
1541
+ // ollama redraws its TUI frame several times a second, mostly with
1542
+ // identical numbers. Broadcasting each one re-rendered the modal for no
1543
+ // visible change; only a frame that actually reads differently ships.
1544
+ const next = JSON.stringify(hfPullPayload(state));
1545
+ if (next === lastBroadcast)
1546
+ continue;
1547
+ lastBroadcast = next;
1548
+ broadcast("hf_pull", hfPullPayload(state));
1549
+ }
1550
+ };
1551
+ try {
1552
+ const child = spawn("ollama", ["pull", model], {
1553
+ env: { ...process.env, ...(token ? { HF_TOKEN: token } : {}) },
1554
+ stdio: ["ignore", "pipe", "pipe"],
1555
+ });
1556
+ state.child = child;
1557
+ child.stdout?.setEncoding("utf8");
1558
+ child.stderr?.setEncoding("utf8");
1559
+ child.stdout?.on("data", feed);
1560
+ child.stderr?.on("data", (d) => {
1561
+ stderrTail = (stderrTail + d).slice(-2000);
1562
+ feed(d);
1563
+ });
1564
+ child.on("error", (err) => {
1565
+ state.child = null;
1566
+ state.phase = "error";
1567
+ state.error =
1568
+ err.code === "ENOENT"
1569
+ ? "Ollama isn't installed (or isn't on PATH). Install it from ollama.com, then retry."
1570
+ : `Could not start Ollama: ${err.message}`;
1571
+ broadcast("hf_pull", hfPullPayload(state));
1572
+ });
1573
+ child.on("close", (code) => {
1574
+ state.child = null;
1575
+ if (state.phase === "success" || state.phase === "error")
1576
+ return; // cancelled
1577
+ if (code === 0) {
1578
+ state.phase = "success";
1579
+ state.percent = 100;
1580
+ state.detail = undefined;
1581
+ broadcast("hf_pull", hfPullPayload(state));
1582
+ // The new model only exists to the app once Ollama lists it. Ollama's
1583
+ // library is machine-wide, like the shared auth file, so every window
1584
+ // gets the refresh — not just the one that ran the download.
1585
+ void scanLocalModels(true)
1586
+ .then(() => broadcastAll("models_change", { local: localStatePayload() }))
1587
+ .catch(() => undefined);
1588
+ }
1589
+ else {
1590
+ state.phase = "error";
1591
+ state.error = state.error ?? explainPullFailure(stderrTail);
1592
+ broadcast("hf_pull", hfPullPayload(state));
1593
+ }
1594
+ });
1595
+ }
1596
+ catch (err) {
1597
+ state.child = null;
1598
+ state.phase = "error";
1599
+ state.error = `Could not start Ollama: ${err instanceof Error ? err.message : String(err)}`;
1600
+ broadcast("hf_pull", hfPullPayload(state));
1601
+ }
1602
+ return hfPullPayload(state);
1603
+ }
1604
+ function cancelHfPull() {
1605
+ const child = hfPull?.child;
1606
+ if (!child)
1607
+ return false;
1608
+ // Terminal state FIRST, then the kill: the child's death rattle must not
1609
+ // overwrite the clean "cancelled" outcome with raw stderr.
1610
+ if (hfPull) {
1611
+ hfPull.phase = "error";
1612
+ hfPull.error = "Download cancelled.";
1613
+ hfPull.detail = undefined;
1614
+ hfPull.child = null;
1615
+ broadcast("hf_pull", hfPullPayload(hfPull));
1616
+ }
1617
+ child.kill("SIGTERM");
1618
+ return true;
1619
+ }
1378
1620
  /**
1379
1621
  * Why `modelId` can't be selected right now, or `undefined` when it can.
1380
1622
  * Two real footguns get a clear answer instead of a mid-run provider error:
@@ -1536,7 +1778,6 @@ async function createSession(deps, opts) {
1536
1778
  .catch(() => false)
1537
1779
  .then(() => syncApprovedPlanProgress(generation))
1538
1780
  .catch((error) => {
1539
- captureSidecarError(error, "app-sidecar.plan.refresh-progress");
1540
1781
  log("WARN", "app-sidecar", "plan progress refresh failed", {
1541
1782
  message: error instanceof Error ? error.message : String(error),
1542
1783
  });
@@ -1595,16 +1836,17 @@ async function createSession(deps, opts) {
1595
1836
  session.eventBus.on("tool_call_end", (d) => {
1596
1837
  const name = toolCallNames.get(d.toolCallId) ?? "unknown";
1597
1838
  toolCallNames.delete(d.toolCallId);
1598
- if (d.isError && shouldCaptureToolFailure(name, d.result)) {
1599
- // Expected model-correctable validation failures stay in the local log and
1600
- // conversation. Unexpected failures are reported without private result data.
1601
- captureSidecarError(new Error(`Tool ${name} failed`), `tool.${name}`, { tool: name });
1602
- }
1603
1839
  log(d.isError ? "ERROR" : "INFO", "tool", `Tool call ended: ${name}`, {
1604
1840
  id: d.toolCallId,
1605
1841
  durationMs: String(d.durationMs),
1606
1842
  isError: String(d.isError),
1607
1843
  ...(d.isError ? { result: d.result.slice(0, 500) } : {}),
1844
+ // Consecutive-failure count for schema rejections. Attempt 1 followed by
1845
+ // a success means the model self-corrected; reaching 3 means it looped
1846
+ // and the turn was ended. Grep this to tell the two apart.
1847
+ ...(d.invalidArgAttempt === undefined
1848
+ ? {}
1849
+ : { invalidArgAttempt: String(d.invalidArgAttempt) }),
1608
1850
  });
1609
1851
  broadcast("tool_call_end", d);
1610
1852
  // The agent can add/done/remove project tasks via the `tasks` tool during a
@@ -1628,12 +1870,25 @@ async function createSession(deps, opts) {
1628
1870
  session.eventBus.on("agent_done", (d) => broadcast("agent_done", d));
1629
1871
  // Non-clean stop (max_tokens/refusal/provider error) — info-style frame so
1630
1872
  // the webview can warn instead of presenting truncated output as complete.
1631
- session.eventBus.on("truncated", (d) => broadcast("truncated", d));
1873
+ // empty_response is a hard failure (no output at all): route it through
1874
+ // broadcastError so the app renders an error row — the webview does not
1875
+ // render bare "truncated" frames.
1876
+ session.eventBus.on("truncated", (d) => {
1877
+ if (d.reason === "empty_response") {
1878
+ broadcastError("error", "empty response", new Error("The model returned an empty response after retries — try sending again."));
1879
+ return;
1880
+ }
1881
+ broadcast("truncated", d);
1882
+ });
1632
1883
  session.eventBus.on("error", (d) => {
1633
1884
  broadcastError("error", "agent error", d.error);
1634
1885
  });
1635
1886
  session.eventBus.on("model_change", (d) => broadcast("model_change", d));
1636
1887
  session.eventBus.on("hook", (d) => broadcast("hook", d));
1888
+ // Fires BEFORE the candidate final answer streams. The webview holds assistant
1889
+ // text back while armed, so an Ideal review supersedes a draft that was never
1890
+ // painted instead of deleting one the user already started reading.
1891
+ session.eventBus.on("hook_armed", (d) => broadcast("hook_armed", d));
1637
1892
  session.eventBus.on("subagent_state", (d) => broadcast("subagent_state", d));
1638
1893
  session.eventBus.on("compaction_start", (d) => broadcast("compaction_start", d));
1639
1894
  session.eventBus.on("compaction_end", (d) => broadcast("compaction_end", d));
@@ -1794,7 +2049,6 @@ async function createSession(deps, opts) {
1794
2049
  cwd,
1795
2050
  systemPrompt: await buildNolanSystemPrompt(cwd),
1796
2051
  allowedTools: NOLAN_ALLOWED_TOOLS,
1797
- allowedMcpServers: NOLAN_ALLOWED_MCP_SERVERS,
1798
2052
  transient: true,
1799
2053
  signal: nolanAbort.signal,
1800
2054
  // Nolan belongs to this window, so route MCP elicitation prompts there.
@@ -1866,7 +2120,6 @@ async function createSession(deps, opts) {
1866
2120
  cwd,
1867
2121
  systemPrompt: await buildNolanAutopilotSystemPrompt(cwd),
1868
2122
  allowedTools: NOLAN_ALLOWED_TOOLS,
1869
- allowedMcpServers: NOLAN_ALLOWED_MCP_SERVERS,
1870
2123
  transient: true,
1871
2124
  signal: nolanAutoAbort.signal,
1872
2125
  // Route this window's MCP elicitation prompts through the shared bridge.
@@ -1893,8 +2146,9 @@ async function createSession(deps, opts) {
1893
2146
  abort.abort();
1894
2147
  // An MCP tool call parked on user input is not cancelled by the signal —
1895
2148
  // the promise lives in the bridge. Release it, or the aborted turn's tool
1896
- // call never returns.
2149
+ // call never returns. Same for a question parked on the user.
1897
2150
  elicitations.cancelAll();
2151
+ asks.cancelAll();
1898
2152
  // Stop a run-all sweep and every async child through AgentSession's signal.
1899
2153
  taskRunAll = false;
1900
2154
  autopilotCancelled = true;
@@ -1980,7 +2234,6 @@ async function createSession(deps, opts) {
1980
2234
  catch (error) {
1981
2235
  // Keep tracking when prompt cleanup fails; hiding the widget here
1982
2236
  // would claim completion while the approved-plan contract remained.
1983
- captureSidecarError(error, "app-sidecar.plan.cleanup");
1984
2237
  log("WARN", "app-sidecar", "completed plan cleanup failed", {
1985
2238
  message: error instanceof Error ? error.message : String(error),
1986
2239
  });
@@ -2508,7 +2761,6 @@ async function createSession(deps, opts) {
2508
2761
  const payload = JSON.stringify(redactValue(body, { secrets: environmentSecrets(process.env) }));
2509
2762
  res.writeHead(status, {
2510
2763
  "content-type": "application/json",
2511
- "access-control-allow-origin": "*",
2512
2764
  });
2513
2765
  res.end(payload);
2514
2766
  }
@@ -2541,7 +2793,6 @@ async function createSession(deps, opts) {
2541
2793
  .snapshot()
2542
2794
  .then((snapshot) => json(res, 200, snapshot))
2543
2795
  .catch((error) => {
2544
- captureSidecarError(error, "app-sidecar.memory.snapshot");
2545
2796
  json(res, 500, { error: error instanceof Error ? error.message : String(error) });
2546
2797
  });
2547
2798
  return;
@@ -2557,7 +2808,6 @@ async function createSession(deps, opts) {
2557
2808
  .then(() => memoryStore.snapshot())
2558
2809
  .then((snapshot) => json(res, 200, snapshot))
2559
2810
  .catch((error) => {
2560
- captureSidecarError(error, "app-sidecar.memory.forget");
2561
2811
  json(res, 500, { error: error instanceof Error ? error.message : String(error) });
2562
2812
  });
2563
2813
  return;
@@ -2567,7 +2817,6 @@ async function createSession(deps, opts) {
2567
2817
  .snapshot()
2568
2818
  .then((snapshot) => json(res, 200, snapshot))
2569
2819
  .catch((error) => {
2570
- captureSidecarError(error, "app-sidecar.jiwa.snapshot");
2571
2820
  json(res, 500, { error: error instanceof Error ? error.message : String(error) });
2572
2821
  });
2573
2822
  return;
@@ -2583,7 +2832,6 @@ async function createSession(deps, opts) {
2583
2832
  .then(() => jiwaStore.snapshot())
2584
2833
  .then((snapshot) => json(res, 200, snapshot))
2585
2834
  .catch((error) => {
2586
- captureSidecarError(error, "app-sidecar.jiwa.forget");
2587
2835
  json(res, 500, { error: error instanceof Error ? error.message : String(error) });
2588
2836
  });
2589
2837
  return;
@@ -2593,7 +2841,6 @@ async function createSession(deps, opts) {
2593
2841
  "content-type": "text/event-stream",
2594
2842
  "cache-control": "no-cache",
2595
2843
  connection: "keep-alive",
2596
- "access-control-allow-origin": "*",
2597
2844
  });
2598
2845
  res.write(`retry: 1000\n\n`);
2599
2846
  const client = { id: ++clientSeq, res };
@@ -2626,7 +2873,6 @@ async function createSession(deps, opts) {
2626
2873
  void listInstalledPlugins(paths.extensionsDir)
2627
2874
  .then((plugins) => json(res, 200, { plugins }))
2628
2875
  .catch((error) => {
2629
- captureSidecarError(error, "app-sidecar.plugins.list");
2630
2876
  json(res, 500, { error: error instanceof Error ? error.message : String(error) });
2631
2877
  });
2632
2878
  return;
@@ -2645,7 +2891,6 @@ async function createSession(deps, opts) {
2645
2891
  json(res, 200, { plugin, restartRequired: true });
2646
2892
  }
2647
2893
  catch (error) {
2648
- captureSidecarError(error, "app-sidecar.plugins.install");
2649
2894
  json(res, 400, { error: error instanceof Error ? error.message : String(error) });
2650
2895
  }
2651
2896
  });
@@ -2656,7 +2901,6 @@ async function createSession(deps, opts) {
2656
2901
  void removePlugin(pluginId, paths.extensionsDir)
2657
2902
  .then(() => json(res, 200, { removed: pluginId, restartRequired: true }))
2658
2903
  .catch((error) => {
2659
- captureSidecarError(error, "app-sidecar.plugins.remove");
2660
2904
  json(res, 400, { error: error instanceof Error ? error.message : String(error) });
2661
2905
  });
2662
2906
  return;
@@ -2741,7 +2985,6 @@ async function createSession(deps, opts) {
2741
2985
  json(res, 200, { path: dir });
2742
2986
  }
2743
2987
  catch (err) {
2744
- captureSidecarError(err, "app-sidecar.project.create");
2745
2988
  json(res, 500, { error: err instanceof Error ? err.message : String(err) });
2746
2989
  }
2747
2990
  });
@@ -2780,7 +3023,6 @@ async function createSession(deps, opts) {
2780
3023
  json(res, 200, { hidden: Array.from(current) });
2781
3024
  }
2782
3025
  catch (err) {
2783
- captureSidecarError(err, "app-sidecar.projects.hidden");
2784
3026
  json(res, 500, { error: err instanceof Error ? err.message : String(err) });
2785
3027
  }
2786
3028
  });
@@ -2796,7 +3038,6 @@ async function createSession(deps, opts) {
2796
3038
  }))
2797
3039
  .then((projects) => json(res, 200, { projects }))
2798
3040
  .catch((err) => {
2799
- captureSidecarError(err, "app-sidecar.projects.discover");
2800
3041
  log("ERROR", "app-sidecar", "discoverProjects failed", {
2801
3042
  message: err instanceof Error ? err.message : String(err),
2802
3043
  });
@@ -2815,10 +3056,7 @@ async function createSession(deps, opts) {
2815
3056
  // agent or request the combined, recency-sorted "all" listing.
2816
3057
  void listSidecarSessions(target, requestedAgent, paths.sessionsDir)
2817
3058
  .then((sessions) => json(res, 200, { sessions }))
2818
- .catch((error) => {
2819
- captureSidecarError(error, "app-sidecar.sessions.list");
2820
- json(res, 200, { sessions: [] });
2821
- });
3059
+ .catch(() => json(res, 200, { sessions: [] }));
2822
3060
  return;
2823
3061
  }
2824
3062
  if (method === "GET" && url.startsWith("/files")) {
@@ -2826,7 +3064,6 @@ async function createSession(deps, opts) {
2826
3064
  void searchProjectFiles(cwd, q)
2827
3065
  .then((files) => json(res, 200, { files }))
2828
3066
  .catch((err) => {
2829
- captureSidecarError(err, "app-sidecar.files.search");
2830
3067
  log("ERROR", "app-sidecar", "searchProjectFiles failed", {
2831
3068
  message: err instanceof Error ? err.message : String(err),
2832
3069
  });
@@ -3270,6 +3507,13 @@ async function createSession(deps, opts) {
3270
3507
  json(res, 400, { error: "empty prompt" });
3271
3508
  return;
3272
3509
  }
3510
+ // A typed prompt supersedes any question parked on the user: they
3511
+ // answered with a message of their own. Release the blocked tool call
3512
+ // NOW — otherwise it waits out its ten-minute timeout while this very
3513
+ // message sits behind it as steering that only drains once the tool
3514
+ // returns, so the turn looks frozen. The webview closes the band on
3515
+ // send; a racing /ask POST just 409s.
3516
+ asks.cancelAll({ action: "cancel", superseded: true });
3273
3517
  if (runLifecycle.running &&
3274
3518
  runLifecycle.isCancellationRequested(runLifecycle.generation)) {
3275
3519
  json(res, 409, {
@@ -3359,7 +3603,7 @@ async function createSession(deps, opts) {
3359
3603
  });
3360
3604
  // After the user's run settles, kick off Nolan's auto-review loop — but
3361
3605
  // only when the turn is actually reviewable (shouldStartAutopilotCycle):
3362
- // workflow commands (/compare, /bullet-proof, …) end with reports or
3606
+ // workflow commands (/compare, /expand, …) end with reports or
3363
3607
  // A/B/C choices reserved for the USER; registry commands (/help) and
3364
3608
  // failed runs add no assistant work to judge; a turn that ended in plan
3365
3609
  // mode has a pending Accept/Reject modal Nolan must not preempt. This is
@@ -3514,7 +3758,6 @@ async function createSession(deps, opts) {
3514
3758
  }
3515
3759
  catch (err) {
3516
3760
  const message = err instanceof Error ? err.message : String(err);
3517
- captureSidecarError(err, "app-sidecar.prompt-enhancer");
3518
3761
  log("ERROR", "app-sidecar", "enhance failed", { message });
3519
3762
  json(res, 500, { error: message });
3520
3763
  }
@@ -3854,6 +4097,14 @@ async function createSession(deps, opts) {
3854
4097
  json(res, 400, { error: "invalid JSON body" });
3855
4098
  return;
3856
4099
  }
4100
+ // Same lock as POST /model, for the same reason: this retargets Nolan's
4101
+ // chat session AND the autopilot reviewer, and `switchModel` on a
4102
+ // session mid-turn races the stream it is already consuming. The
4103
+ // footer picker is disabled to match; this is the enforcement.
4104
+ if (running || nolanRunning || autopilotReviewing) {
4105
+ json(res, 409, { error: "cannot switch Nolan's model while running" });
4106
+ return;
4107
+ }
3857
4108
  if (modelId === null) {
3858
4109
  // Clear the pin → follow EZ Coder again, syncing both sessions back.
3859
4110
  nolanModelOverride = null;
@@ -3970,6 +4221,14 @@ async function createSession(deps, opts) {
3970
4221
  return;
3971
4222
  }
3972
4223
  if (method === "POST" && url === "/thinking") {
4224
+ // The in-flight request already carries its reasoning config, so a
4225
+ // mid-run cycle cannot affect the turn the user is watching — it just
4226
+ // persists a level the footer then reports for a run that never used it.
4227
+ // Locked like POST /model; the footer button is disabled to match.
4228
+ if (running) {
4229
+ json(res, 409, { error: "cannot change reasoning level while running" });
4230
+ return;
4231
+ }
3973
4232
  const st = session.getState();
3974
4233
  const next = getNextThinkingLevel(st.provider, st.model, session.getThinkingLevel());
3975
4234
  session.setThinkingLevel(next);
@@ -4027,7 +4286,6 @@ async function createSession(deps, opts) {
4027
4286
  drained,
4028
4287
  });
4029
4288
  })().catch((error) => {
4030
- captureSidecarError(error, "app-sidecar.run.cancel");
4031
4289
  broadcast("cancel_failed", { error: "cancel_failed", runState: runLifecycle.state });
4032
4290
  json(res, 500, {
4033
4291
  error: "cancel_failed",
@@ -4055,7 +4313,6 @@ async function createSession(deps, opts) {
4055
4313
  json(res, 200, { ok: true });
4056
4314
  })
4057
4315
  .catch((err) => {
4058
- captureSidecarError(err, "app-sidecar.session.new");
4059
4316
  json(res, 500, { error: err instanceof Error ? err.message : String(err) });
4060
4317
  });
4061
4318
  return;
@@ -4112,7 +4369,6 @@ async function createSession(deps, opts) {
4112
4369
  json(res, 200, { ok: true, planTotal });
4113
4370
  }
4114
4371
  catch (err) {
4115
- captureSidecarError(err, "app-sidecar.plan.accept");
4116
4372
  json(res, 500, { error: err instanceof Error ? err.message : String(err) });
4117
4373
  }
4118
4374
  });
@@ -4242,7 +4498,6 @@ async function createSession(deps, opts) {
4242
4498
  broadcastAll("models_change", {});
4243
4499
  }
4244
4500
  catch (err) {
4245
- captureSidecarError(err, "app-sidecar.auth.oauth", { provider });
4246
4501
  // Deliberately session-scoped: this is the outcome of ONE window's
4247
4502
  // attempt. Another window that never pressed Connect has nothing to
4248
4503
  // show an error about, and its modal correctly still offers login.
@@ -4315,6 +4570,50 @@ async function createSession(deps, opts) {
4315
4570
  });
4316
4571
  return;
4317
4572
  }
4573
+ // Answer (or dismiss) an `ask_user` question band. The turn is blocked on
4574
+ // this, so both paths must land: "answer" carries the picked values,
4575
+ // "cancel" releases the tool call with no answer.
4576
+ if (method === "POST" && url.startsWith("/ask/")) {
4577
+ const id = decodeURIComponent(url.slice("/ask/".length));
4578
+ void readBody(req, res).then((raw) => {
4579
+ if (raw === null)
4580
+ return;
4581
+ let result;
4582
+ try {
4583
+ const parsed = JSON.parse(raw);
4584
+ if (parsed.action !== "answer" && parsed.action !== "cancel") {
4585
+ json(res, 400, { error: "action must be answer or cancel" });
4586
+ return;
4587
+ }
4588
+ if (parsed.action === "cancel") {
4589
+ result = { action: "cancel" };
4590
+ }
4591
+ else {
4592
+ // Only strings and string arrays are answers; anything else is a
4593
+ // malformed client, not a value to hand the model.
4594
+ const answers = {};
4595
+ for (const [key, value] of Object.entries(parsed.answers ?? {})) {
4596
+ if (typeof value === "string")
4597
+ answers[key] = value;
4598
+ else if (Array.isArray(value) && value.every((v) => typeof v === "string")) {
4599
+ answers[key] = value;
4600
+ }
4601
+ }
4602
+ result = { action: "answer", answers };
4603
+ }
4604
+ }
4605
+ catch {
4606
+ json(res, 400, { error: "invalid JSON body" });
4607
+ return;
4608
+ }
4609
+ if (!asks.settle(id, result)) {
4610
+ json(res, 409, { error: "no question is awaiting an answer" });
4611
+ return;
4612
+ }
4613
+ json(res, 200, { ok: true });
4614
+ });
4615
+ return;
4616
+ }
4318
4617
  if (method === "POST" && url === "/auth/logout") {
4319
4618
  void readBody(req, res).then(async (raw) => {
4320
4619
  if (raw === null)
@@ -4431,6 +4730,80 @@ async function createSession(deps, opts) {
4431
4730
  })();
4432
4731
  return;
4433
4732
  }
4733
+ // ── Hugging Face search & pull (the "Add from Hugging Face" modal) ──
4734
+ if (method === "GET" && url === "/hf/pull") {
4735
+ json(res, 200, hfPull ? { active: hfPullPayload(hfPull) } : { active: null });
4736
+ return;
4737
+ }
4738
+ if (method === "POST" && url === "/hf/search") {
4739
+ void readBody(req, res).then(async (raw) => {
4740
+ if (raw === null)
4741
+ return;
4742
+ let body;
4743
+ try {
4744
+ body = JSON.parse(raw);
4745
+ }
4746
+ catch {
4747
+ json(res, 400, { error: "invalid JSON body" });
4748
+ return;
4749
+ }
4750
+ // Strip control characters and cap length — this goes into a URL query.
4751
+ const query = String(body.query ?? "")
4752
+ // eslint-disable-next-line no-control-regex -- stripping control characters is the point
4753
+ .replace(/[\u0000-\u001f]/g, "")
4754
+ .trim()
4755
+ .slice(0, 100);
4756
+ if (!query) {
4757
+ json(res, 400, { error: "Type something to search for." });
4758
+ return;
4759
+ }
4760
+ try {
4761
+ json(res, 200, { models: await hfSearch(query) });
4762
+ }
4763
+ catch (err) {
4764
+ broadcastError("error", "hugging face search failed", err);
4765
+ json(res, 502, {
4766
+ error: `Hugging Face search failed — ${err instanceof Error ? err.message : "network error"}.`,
4767
+ });
4768
+ }
4769
+ });
4770
+ return;
4771
+ }
4772
+ if (method === "POST" && url === "/hf/pull") {
4773
+ void readBody(req, res).then(async (raw) => {
4774
+ if (raw === null)
4775
+ return;
4776
+ let body;
4777
+ try {
4778
+ body = JSON.parse(raw);
4779
+ }
4780
+ catch {
4781
+ json(res, 400, { error: "invalid JSON body" });
4782
+ return;
4783
+ }
4784
+ const repo = String(body.repo ?? "").trim();
4785
+ if (!isValidHfRepoId(repo)) {
4786
+ json(res, 400, { error: 'Expected a Hugging Face repo like "org/model".' });
4787
+ return;
4788
+ }
4789
+ try {
4790
+ json(res, 200, await startHfPull(repo));
4791
+ }
4792
+ catch (err) {
4793
+ const status = err instanceof Error && "status" in err && typeof err.status === "number"
4794
+ ? err.status
4795
+ : 502;
4796
+ if (status >= 500)
4797
+ broadcastError("error", "hugging face pull failed", err);
4798
+ json(res, status, { error: err instanceof Error ? err.message : "Pull failed." });
4799
+ }
4800
+ });
4801
+ return;
4802
+ }
4803
+ if (method === "POST" && url === "/hf/pull/cancel") {
4804
+ json(res, 200, { ok: cancelHfPull() });
4805
+ return;
4806
+ }
4434
4807
  // ── Telegram config (mirrors `ezcoder telegram`) ─────────
4435
4808
  if (method === "GET" && url === "/telegram") {
4436
4809
  void loadTelegramConfig().then((cfg) => {
@@ -4517,7 +4890,6 @@ async function createSession(deps, opts) {
4517
4890
  }
4518
4891
  catch (err) {
4519
4892
  serveController = null;
4520
- captureSidecarError(err, "app-sidecar.serve.start", { provider: st.provider });
4521
4893
  json(res, 400, { error: err instanceof Error ? err.message : String(err) });
4522
4894
  }
4523
4895
  })();
@@ -4535,16 +4907,32 @@ async function createSession(deps, opts) {
4535
4907
  })();
4536
4908
  return;
4537
4909
  }
4910
+ // ── Agent Steroids (local code corpus) ───────────────────────────────
4911
+ if (method === "GET" && url === "/steroids") {
4912
+ void probeSteroids().then((status) => json(res, 200, status));
4913
+ return;
4914
+ }
4915
+ if (method === "POST" && url === "/steroids/install") {
4916
+ void installSteroids()
4917
+ .then((status) => {
4918
+ broadcast("steroids_change", status);
4919
+ log("INFO", "app-sidecar", "steroids installed", { version: status.version });
4920
+ json(res, 200, status);
4921
+ })
4922
+ .catch((err) => {
4923
+ json(res, 400, { error: err instanceof Error ? err.message : String(err) });
4924
+ });
4925
+ return;
4926
+ }
4538
4927
  // ── MCP server management (mirrors `ezcoder mcp`) ──────────────────
4539
4928
  // `targetCwd` (project scope) overrides the window cwd so a server can be
4540
4929
  // added/removed for ANY discovered project, not just this window's. Global
4541
4930
  // scope ignores it (always ~/.ezcoder/mcp.json).
4542
4931
  if (method === "GET" && (url === "/mcp" || url.startsWith("/mcp?"))) {
4543
4932
  const targetCwd = new URL(url, `http://${host}`).searchParams.get("cwd") ?? cwd;
4544
- void buildMcpRows(targetCwd)
4933
+ void buildMcpRows(targetCwd, paths.settingsFile)
4545
4934
  .then((servers) => json(res, 200, { servers }))
4546
4935
  .catch((err) => {
4547
- captureSidecarError(err, "app-sidecar.mcp.list");
4548
4936
  log("ERROR", "app-sidecar", "buildMcpRows failed", {
4549
4937
  message: err instanceof Error ? err.message : String(err),
4550
4938
  });
@@ -4593,6 +4981,12 @@ async function createSession(deps, opts) {
4593
4981
  json(res, 400, { error: saved.error });
4594
4982
  return;
4595
4983
  }
4984
+ // Adding a project-scope server is an explicit trust signal — the
4985
+ // user chose to put a server in this repo's .ezcoder/mcp.json. Auto-trust
4986
+ // the project so all project-scope servers connect on next load.
4987
+ if (scope === "project") {
4988
+ await session.trustProject(targetCwd);
4989
+ }
4596
4990
  json(res, 200, {
4597
4991
  ok: true,
4598
4992
  name: config.name,
@@ -4603,7 +4997,6 @@ async function createSession(deps, opts) {
4603
4997
  });
4604
4998
  }
4605
4999
  catch (err) {
4606
- captureSidecarError(err, "app-sidecar.mcp.add", { server: config.name });
4607
5000
  json(res, 500, {
4608
5001
  error: err instanceof Error ? err.message : String(err),
4609
5002
  });
@@ -4697,7 +5090,6 @@ async function createSession(deps, opts) {
4697
5090
  }
4698
5091
  }
4699
5092
  catch (err) {
4700
- captureSidecarError(err, "app-sidecar.mcp.login", { server: name });
4701
5093
  broadcast("mcp_auth_error", {
4702
5094
  name,
4703
5095
  message: err instanceof Error ? err.message : String(err),
@@ -4713,6 +5105,7 @@ async function createSession(deps, opts) {
4713
5105
  }
4714
5106
  async function dispose() {
4715
5107
  elicitations.cancelAll();
5108
+ asks.cancelAll();
4716
5109
  tasksPollStopped = true;
4717
5110
  if (tasksPoll)
4718
5111
  clearTimeout(tasksPoll);
@@ -4749,8 +5142,6 @@ async function createSession(deps, opts) {
4749
5142
  };
4750
5143
  }
4751
5144
  main().catch(async (err) => {
4752
- captureSidecarError(err, "app-sidecar.main", { severity: "fatal" });
4753
- await flushSidecarErrors();
4754
5145
  const message = err instanceof Error ? err.message : String(err);
4755
5146
  process.stderr.write(`GG_APP_FATAL ${message}\n`);
4756
5147
  process.exit(1);