@tulex-cli/tulex-code 0.1.1

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 (3094) hide show
  1. package/README.md +54 -0
  2. package/dist/.last_build +0 -0
  3. package/dist/index.d.ts +7 -0
  4. package/dist/index.js +98 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/package.json +121 -0
  7. package/dist/src/acp-integration/acpAgent.d.ts +59 -0
  8. package/dist/src/acp-integration/acpAgent.js +3646 -0
  9. package/dist/src/acp-integration/acpAgent.js.map +1 -0
  10. package/dist/src/acp-integration/acpAgent.test.d.ts +6 -0
  11. package/dist/src/acp-integration/acpAgent.test.js +3690 -0
  12. package/dist/src/acp-integration/acpAgent.test.js.map +1 -0
  13. package/dist/src/acp-integration/acpAgent.worktree.test.d.ts +16 -0
  14. package/dist/src/acp-integration/acpAgent.worktree.test.js +354 -0
  15. package/dist/src/acp-integration/acpAgent.worktree.test.js.map +1 -0
  16. package/dist/src/acp-integration/authMethods.d.ts +9 -0
  17. package/dist/src/acp-integration/authMethods.js +28 -0
  18. package/dist/src/acp-integration/authMethods.js.map +1 -0
  19. package/dist/src/acp-integration/authMethods.test.d.ts +6 -0
  20. package/dist/src/acp-integration/authMethods.test.js +23 -0
  21. package/dist/src/acp-integration/authMethods.test.js.map +1 -0
  22. package/dist/src/acp-integration/authPreflight.test.d.ts +6 -0
  23. package/dist/src/acp-integration/authPreflight.test.js +54 -0
  24. package/dist/src/acp-integration/authPreflight.test.js.map +1 -0
  25. package/dist/src/acp-integration/errorCodes.d.ts +15 -0
  26. package/dist/src/acp-integration/errorCodes.js +22 -0
  27. package/dist/src/acp-integration/errorCodes.js.map +1 -0
  28. package/dist/src/acp-integration/runtimeOutputDirContext.d.ts +2 -0
  29. package/dist/src/acp-integration/runtimeOutputDirContext.js +5 -0
  30. package/dist/src/acp-integration/runtimeOutputDirContext.js.map +1 -0
  31. package/dist/src/acp-integration/runtimeOutputDirContext.test.d.ts +1 -0
  32. package/dist/src/acp-integration/runtimeOutputDirContext.test.js +29 -0
  33. package/dist/src/acp-integration/runtimeOutputDirContext.test.js.map +1 -0
  34. package/dist/src/acp-integration/service/filesystem.d.ts +17 -0
  35. package/dist/src/acp-integration/service/filesystem.js +73 -0
  36. package/dist/src/acp-integration/service/filesystem.js.map +1 -0
  37. package/dist/src/acp-integration/service/filesystem.test.d.ts +6 -0
  38. package/dist/src/acp-integration/service/filesystem.test.js +85 -0
  39. package/dist/src/acp-integration/service/filesystem.test.js.map +1 -0
  40. package/dist/src/acp-integration/session/HistoryReplayer.d.ts +63 -0
  41. package/dist/src/acp-integration/session/HistoryReplayer.js +222 -0
  42. package/dist/src/acp-integration/session/HistoryReplayer.js.map +1 -0
  43. package/dist/src/acp-integration/session/HistoryReplayer.test.d.ts +6 -0
  44. package/dist/src/acp-integration/session/HistoryReplayer.test.js +405 -0
  45. package/dist/src/acp-integration/session/HistoryReplayer.test.js.map +1 -0
  46. package/dist/src/acp-integration/session/Session.d.ts +150 -0
  47. package/dist/src/acp-integration/session/Session.js +2381 -0
  48. package/dist/src/acp-integration/session/Session.js.map +1 -0
  49. package/dist/src/acp-integration/session/Session.test.d.ts +6 -0
  50. package/dist/src/acp-integration/session/Session.test.js +3845 -0
  51. package/dist/src/acp-integration/session/Session.test.js.map +1 -0
  52. package/dist/src/acp-integration/session/Session.worktree.test.d.ts +18 -0
  53. package/dist/src/acp-integration/session/Session.worktree.test.js +195 -0
  54. package/dist/src/acp-integration/session/Session.worktree.test.js.map +1 -0
  55. package/dist/src/acp-integration/session/SubAgentTracker.d.ts +58 -0
  56. package/dist/src/acp-integration/session/SubAgentTracker.js +208 -0
  57. package/dist/src/acp-integration/session/SubAgentTracker.js.map +1 -0
  58. package/dist/src/acp-integration/session/SubAgentTracker.test.d.ts +6 -0
  59. package/dist/src/acp-integration/session/SubAgentTracker.test.js +612 -0
  60. package/dist/src/acp-integration/session/SubAgentTracker.test.js.map +1 -0
  61. package/dist/src/acp-integration/session/emitters/BaseEmitter.d.ts +34 -0
  62. package/dist/src/acp-integration/session/emitters/BaseEmitter.js +53 -0
  63. package/dist/src/acp-integration/session/emitters/BaseEmitter.js.map +1 -0
  64. package/dist/src/acp-integration/session/emitters/MessageEmitter.d.ts +61 -0
  65. package/dist/src/acp-integration/session/emitters/MessageEmitter.js +124 -0
  66. package/dist/src/acp-integration/session/emitters/MessageEmitter.js.map +1 -0
  67. package/dist/src/acp-integration/session/emitters/MessageEmitter.test.d.ts +6 -0
  68. package/dist/src/acp-integration/session/emitters/MessageEmitter.test.js +202 -0
  69. package/dist/src/acp-integration/session/emitters/MessageEmitter.test.js.map +1 -0
  70. package/dist/src/acp-integration/session/emitters/PlanEmitter.d.ts +39 -0
  71. package/dist/src/acp-integration/session/emitters/PlanEmitter.js +83 -0
  72. package/dist/src/acp-integration/session/emitters/PlanEmitter.js.map +1 -0
  73. package/dist/src/acp-integration/session/emitters/PlanEmitter.test.d.ts +6 -0
  74. package/dist/src/acp-integration/session/emitters/PlanEmitter.test.js +176 -0
  75. package/dist/src/acp-integration/session/emitters/PlanEmitter.test.js.map +1 -0
  76. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.d.ts +82 -0
  77. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.js +284 -0
  78. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.js.map +1 -0
  79. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.d.ts +6 -0
  80. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.js +607 -0
  81. package/dist/src/acp-integration/session/emitters/ToolCallEmitter.test.js.map +1 -0
  82. package/dist/src/acp-integration/session/emitters/index.d.ts +9 -0
  83. package/dist/src/acp-integration/session/emitters/index.js +10 -0
  84. package/dist/src/acp-integration/session/emitters/index.js.map +1 -0
  85. package/dist/src/acp-integration/session/index.d.ts +24 -0
  86. package/dist/src/acp-integration/session/index.js +16 -0
  87. package/dist/src/acp-integration/session/index.js.map +1 -0
  88. package/dist/src/acp-integration/session/permissionUtils.d.ts +9 -0
  89. package/dist/src/acp-integration/session/permissionUtils.js +165 -0
  90. package/dist/src/acp-integration/session/permissionUtils.js.map +1 -0
  91. package/dist/src/acp-integration/session/permissionUtils.test.d.ts +6 -0
  92. package/dist/src/acp-integration/session/permissionUtils.test.js +83 -0
  93. package/dist/src/acp-integration/session/permissionUtils.test.js.map +1 -0
  94. package/dist/src/acp-integration/session/rewrite/LlmRewriter.d.ts +26 -0
  95. package/dist/src/acp-integration/session/rewrite/LlmRewriter.js +131 -0
  96. package/dist/src/acp-integration/session/rewrite/LlmRewriter.js.map +1 -0
  97. package/dist/src/acp-integration/session/rewrite/LlmRewriter.test.d.ts +6 -0
  98. package/dist/src/acp-integration/session/rewrite/LlmRewriter.test.js +188 -0
  99. package/dist/src/acp-integration/session/rewrite/LlmRewriter.test.js.map +1 -0
  100. package/dist/src/acp-integration/session/rewrite/MessageRewriteMiddleware.d.ts +42 -0
  101. package/dist/src/acp-integration/session/rewrite/MessageRewriteMiddleware.js +159 -0
  102. package/dist/src/acp-integration/session/rewrite/MessageRewriteMiddleware.js.map +1 -0
  103. package/dist/src/acp-integration/session/rewrite/MessageRewriteMiddleware.test.d.ts +6 -0
  104. package/dist/src/acp-integration/session/rewrite/MessageRewriteMiddleware.test.js +255 -0
  105. package/dist/src/acp-integration/session/rewrite/MessageRewriteMiddleware.test.js.map +1 -0
  106. package/dist/src/acp-integration/session/rewrite/README.md +35 -0
  107. package/dist/src/acp-integration/session/rewrite/TurnBuffer.d.ts +25 -0
  108. package/dist/src/acp-integration/session/rewrite/TurnBuffer.js +53 -0
  109. package/dist/src/acp-integration/session/rewrite/TurnBuffer.js.map +1 -0
  110. package/dist/src/acp-integration/session/rewrite/TurnBuffer.test.d.ts +6 -0
  111. package/dist/src/acp-integration/session/rewrite/TurnBuffer.test.js +95 -0
  112. package/dist/src/acp-integration/session/rewrite/TurnBuffer.test.js.map +1 -0
  113. package/dist/src/acp-integration/session/rewrite/config.d.ts +13 -0
  114. package/dist/src/acp-integration/session/rewrite/config.js +19 -0
  115. package/dist/src/acp-integration/session/rewrite/config.js.map +1 -0
  116. package/dist/src/acp-integration/session/rewrite/config.test.d.ts +6 -0
  117. package/dist/src/acp-integration/session/rewrite/config.test.js +72 -0
  118. package/dist/src/acp-integration/session/rewrite/config.test.js.map +1 -0
  119. package/dist/src/acp-integration/session/rewrite/index.d.ts +8 -0
  120. package/dist/src/acp-integration/session/rewrite/index.js +8 -0
  121. package/dist/src/acp-integration/session/rewrite/index.js.map +1 -0
  122. package/dist/src/acp-integration/session/rewrite/types.d.ts +36 -0
  123. package/dist/src/acp-integration/session/rewrite/types.js +7 -0
  124. package/dist/src/acp-integration/session/rewrite/types.js.map +1 -0
  125. package/dist/src/acp-integration/session/types.d.ts +93 -0
  126. package/dist/src/acp-integration/session/types.js +7 -0
  127. package/dist/src/acp-integration/session/types.js.map +1 -0
  128. package/dist/src/commands/auth.d.ts +9 -0
  129. package/dist/src/commands/auth.js +55 -0
  130. package/dist/src/commands/auth.js.map +1 -0
  131. package/dist/src/commands/auth.test.d.ts +6 -0
  132. package/dist/src/commands/auth.test.js +84 -0
  133. package/dist/src/commands/auth.test.js.map +1 -0
  134. package/dist/src/commands/channel/channel-registry.d.ts +4 -0
  135. package/dist/src/commands/channel/channel-registry.js +33 -0
  136. package/dist/src/commands/channel/channel-registry.js.map +1 -0
  137. package/dist/src/commands/channel/config-utils.d.ts +4 -0
  138. package/dist/src/commands/channel/config-utils.js +66 -0
  139. package/dist/src/commands/channel/config-utils.js.map +1 -0
  140. package/dist/src/commands/channel/config-utils.test.d.ts +1 -0
  141. package/dist/src/commands/channel/config-utils.test.js +142 -0
  142. package/dist/src/commands/channel/config-utils.test.js.map +1 -0
  143. package/dist/src/commands/channel/configure.d.ts +4 -0
  144. package/dist/src/commands/channel/configure.js +65 -0
  145. package/dist/src/commands/channel/configure.js.map +1 -0
  146. package/dist/src/commands/channel/pairing.d.ts +8 -0
  147. package/dist/src/commands/channel/pairing.js +49 -0
  148. package/dist/src/commands/channel/pairing.js.map +1 -0
  149. package/dist/src/commands/channel/pidfile.d.ts +25 -0
  150. package/dist/src/commands/channel/pidfile.js +104 -0
  151. package/dist/src/commands/channel/pidfile.js.map +1 -0
  152. package/dist/src/commands/channel/pidfile.test.d.ts +1 -0
  153. package/dist/src/commands/channel/pidfile.test.js +143 -0
  154. package/dist/src/commands/channel/pidfile.test.js.map +1 -0
  155. package/dist/src/commands/channel/start.d.ts +16 -0
  156. package/dist/src/commands/channel/start.js +352 -0
  157. package/dist/src/commands/channel/start.js.map +1 -0
  158. package/dist/src/commands/channel/start.test.d.ts +1 -0
  159. package/dist/src/commands/channel/start.test.js +156 -0
  160. package/dist/src/commands/channel/start.test.js.map +1 -0
  161. package/dist/src/commands/channel/status.d.ts +2 -0
  162. package/dist/src/commands/channel/status.js +58 -0
  163. package/dist/src/commands/channel/status.js.map +1 -0
  164. package/dist/src/commands/channel/stop.d.ts +2 -0
  165. package/dist/src/commands/channel/stop.js +34 -0
  166. package/dist/src/commands/channel/stop.js.map +1 -0
  167. package/dist/src/commands/channel.d.ts +2 -0
  168. package/dist/src/commands/channel.js +29 -0
  169. package/dist/src/commands/channel.js.map +1 -0
  170. package/dist/src/commands/extensions/consent.d.ts +47 -0
  171. package/dist/src/commands/extensions/consent.js +182 -0
  172. package/dist/src/commands/extensions/consent.js.map +1 -0
  173. package/dist/src/commands/extensions/consent.test.d.ts +6 -0
  174. package/dist/src/commands/extensions/consent.test.js +277 -0
  175. package/dist/src/commands/extensions/consent.test.js.map +1 -0
  176. package/dist/src/commands/extensions/disable.d.ts +13 -0
  177. package/dist/src/commands/extensions/disable.js +65 -0
  178. package/dist/src/commands/extensions/disable.js.map +1 -0
  179. package/dist/src/commands/extensions/disable.test.d.ts +6 -0
  180. package/dist/src/commands/extensions/disable.test.js +101 -0
  181. package/dist/src/commands/extensions/disable.test.js.map +1 -0
  182. package/dist/src/commands/extensions/enable.d.ts +13 -0
  183. package/dist/src/commands/extensions/enable.js +70 -0
  184. package/dist/src/commands/extensions/enable.js.map +1 -0
  185. package/dist/src/commands/extensions/enable.test.d.ts +6 -0
  186. package/dist/src/commands/extensions/enable.test.js +93 -0
  187. package/dist/src/commands/extensions/enable.test.js.map +1 -0
  188. package/dist/src/commands/extensions/examples/agent/agents/diary.md +86 -0
  189. package/dist/src/commands/extensions/examples/agent/qwen-extension.json +5 -0
  190. package/dist/src/commands/extensions/examples/commands/commands/fs/grep-code.md +3 -0
  191. package/dist/src/commands/extensions/examples/commands/qwen-extension.json +5 -0
  192. package/dist/src/commands/extensions/examples/context/QWEN.md +8 -0
  193. package/dist/src/commands/extensions/examples/context/qwen-extension.json +5 -0
  194. package/dist/src/commands/extensions/examples/mcp-server/example.ts +60 -0
  195. package/dist/src/commands/extensions/examples/mcp-server/package.json +18 -0
  196. package/dist/src/commands/extensions/examples/mcp-server/qwen-extension.json +12 -0
  197. package/dist/src/commands/extensions/examples/mcp-server/tsconfig.json +13 -0
  198. package/dist/src/commands/extensions/examples/skills/qwen-extension.json +5 -0
  199. package/dist/src/commands/extensions/examples/skills/skills/synonyms/SKILL.md +48 -0
  200. package/dist/src/commands/extensions/install.d.ts +17 -0
  201. package/dist/src/commands/extensions/install.js +105 -0
  202. package/dist/src/commands/extensions/install.js.map +1 -0
  203. package/dist/src/commands/extensions/install.test.d.ts +6 -0
  204. package/dist/src/commands/extensions/install.test.js +164 -0
  205. package/dist/src/commands/extensions/install.test.js.map +1 -0
  206. package/dist/src/commands/extensions/link.d.ts +12 -0
  207. package/dist/src/commands/extensions/link.js +48 -0
  208. package/dist/src/commands/extensions/link.js.map +1 -0
  209. package/dist/src/commands/extensions/link.test.d.ts +6 -0
  210. package/dist/src/commands/extensions/link.test.js +74 -0
  211. package/dist/src/commands/extensions/link.test.js.map +1 -0
  212. package/dist/src/commands/extensions/list.d.ts +8 -0
  213. package/dist/src/commands/extensions/list.js +35 -0
  214. package/dist/src/commands/extensions/list.js.map +1 -0
  215. package/dist/src/commands/extensions/list.test.d.ts +6 -0
  216. package/dist/src/commands/extensions/list.test.js +76 -0
  217. package/dist/src/commands/extensions/list.test.js.map +1 -0
  218. package/dist/src/commands/extensions/new.d.ts +7 -0
  219. package/dist/src/commands/extensions/new.js +95 -0
  220. package/dist/src/commands/extensions/new.js.map +1 -0
  221. package/dist/src/commands/extensions/new.test.d.ts +6 -0
  222. package/dist/src/commands/extensions/new.test.js +59 -0
  223. package/dist/src/commands/extensions/new.test.js.map +1 -0
  224. package/dist/src/commands/extensions/settings.d.ts +7 -0
  225. package/dist/src/commands/extensions/settings.js +115 -0
  226. package/dist/src/commands/extensions/settings.js.map +1 -0
  227. package/dist/src/commands/extensions/settings.test.d.ts +6 -0
  228. package/dist/src/commands/extensions/settings.test.js +251 -0
  229. package/dist/src/commands/extensions/settings.test.js.map +1 -0
  230. package/dist/src/commands/extensions/uninstall.d.ts +12 -0
  231. package/dist/src/commands/extensions/uninstall.js +50 -0
  232. package/dist/src/commands/extensions/uninstall.js.map +1 -0
  233. package/dist/src/commands/extensions/uninstall.test.d.ts +6 -0
  234. package/dist/src/commands/extensions/uninstall.test.js +18 -0
  235. package/dist/src/commands/extensions/uninstall.test.js.map +1 -0
  236. package/dist/src/commands/extensions/update.d.ts +13 -0
  237. package/dist/src/commands/extensions/update.js +102 -0
  238. package/dist/src/commands/extensions/update.js.map +1 -0
  239. package/dist/src/commands/extensions/update.test.d.ts +6 -0
  240. package/dist/src/commands/extensions/update.test.js +185 -0
  241. package/dist/src/commands/extensions/update.test.js.map +1 -0
  242. package/dist/src/commands/extensions/utils.d.ts +8 -0
  243. package/dist/src/commands/extensions/utils.js +79 -0
  244. package/dist/src/commands/extensions/utils.js.map +1 -0
  245. package/dist/src/commands/extensions/utils.test.d.ts +6 -0
  246. package/dist/src/commands/extensions/utils.test.js +147 -0
  247. package/dist/src/commands/extensions/utils.test.js.map +1 -0
  248. package/dist/src/commands/extensions.d.ts +7 -0
  249. package/dist/src/commands/extensions.js +35 -0
  250. package/dist/src/commands/extensions.js.map +1 -0
  251. package/dist/src/commands/extensions.test.d.ts +6 -0
  252. package/dist/src/commands/extensions.test.js +72 -0
  253. package/dist/src/commands/extensions.test.js.map +1 -0
  254. package/dist/src/commands/hooks.d.ts +7 -0
  255. package/dist/src/commands/hooks.js +20 -0
  256. package/dist/src/commands/hooks.js.map +1 -0
  257. package/dist/src/commands/mcp/add.d.ts +7 -0
  258. package/dist/src/commands/mcp/add.js +247 -0
  259. package/dist/src/commands/mcp/add.js.map +1 -0
  260. package/dist/src/commands/mcp/list.d.ts +8 -0
  261. package/dist/src/commands/mcp/list.js +118 -0
  262. package/dist/src/commands/mcp/list.js.map +1 -0
  263. package/dist/src/commands/mcp/reconnect.d.ts +7 -0
  264. package/dist/src/commands/mcp/reconnect.js +154 -0
  265. package/dist/src/commands/mcp/reconnect.js.map +1 -0
  266. package/dist/src/commands/mcp/remove.d.ts +7 -0
  267. package/dist/src/commands/mcp/remove.js +54 -0
  268. package/dist/src/commands/mcp/remove.js.map +1 -0
  269. package/dist/src/commands/mcp.d.ts +7 -0
  270. package/dist/src/commands/mcp.js +25 -0
  271. package/dist/src/commands/mcp.js.map +1 -0
  272. package/dist/src/commands/review/cleanup.d.ts +7 -0
  273. package/dist/src/commands/review/cleanup.js +81 -0
  274. package/dist/src/commands/review/cleanup.js.map +1 -0
  275. package/dist/src/commands/review/deterministic.d.ts +7 -0
  276. package/dist/src/commands/review/deterministic.js +474 -0
  277. package/dist/src/commands/review/deterministic.js.map +1 -0
  278. package/dist/src/commands/review/fetch-pr.d.ts +7 -0
  279. package/dist/src/commands/review/fetch-pr.js +124 -0
  280. package/dist/src/commands/review/fetch-pr.js.map +1 -0
  281. package/dist/src/commands/review/lib/gh.d.ts +34 -0
  282. package/dist/src/commands/review/lib/gh.js +64 -0
  283. package/dist/src/commands/review/lib/gh.js.map +1 -0
  284. package/dist/src/commands/review/lib/git.d.ts +18 -0
  285. package/dist/src/commands/review/lib/git.js +41 -0
  286. package/dist/src/commands/review/lib/git.js.map +1 -0
  287. package/dist/src/commands/review/lib/paths.d.ts +23 -0
  288. package/dist/src/commands/review/lib/paths.js +37 -0
  289. package/dist/src/commands/review/lib/paths.js.map +1 -0
  290. package/dist/src/commands/review/load-rules.d.ts +7 -0
  291. package/dist/src/commands/review/load-rules.js +112 -0
  292. package/dist/src/commands/review/load-rules.js.map +1 -0
  293. package/dist/src/commands/review/pr-context.d.ts +7 -0
  294. package/dist/src/commands/review/pr-context.js +214 -0
  295. package/dist/src/commands/review/pr-context.js.map +1 -0
  296. package/dist/src/commands/review/presubmit.d.ts +7 -0
  297. package/dist/src/commands/review/presubmit.js +190 -0
  298. package/dist/src/commands/review/presubmit.js.map +1 -0
  299. package/dist/src/commands/review.d.ts +7 -0
  300. package/dist/src/commands/review.js +28 -0
  301. package/dist/src/commands/review.js.map +1 -0
  302. package/dist/src/commands/serve.d.ts +21 -0
  303. package/dist/src/commands/serve.js +214 -0
  304. package/dist/src/commands/serve.js.map +1 -0
  305. package/dist/src/commands/sp.d.ts +7 -0
  306. package/dist/src/commands/sp.js +62 -0
  307. package/dist/src/commands/sp.js.map +1 -0
  308. package/dist/src/config/auth.d.ts +10 -0
  309. package/dist/src/config/auth.js +183 -0
  310. package/dist/src/config/auth.js.map +1 -0
  311. package/dist/src/config/auth.test.d.ts +6 -0
  312. package/dist/src/config/auth.test.js +292 -0
  313. package/dist/src/config/auth.test.js.map +1 -0
  314. package/dist/src/config/config.d.ts +144 -0
  315. package/dist/src/config/config.js +1618 -0
  316. package/dist/src/config/config.js.map +1 -0
  317. package/dist/src/config/jsonSchemaArg.test.d.ts +6 -0
  318. package/dist/src/config/jsonSchemaArg.test.js +305 -0
  319. package/dist/src/config/jsonSchemaArg.test.js.map +1 -0
  320. package/dist/src/config/keyBindings.d.ts +89 -0
  321. package/dist/src/config/keyBindings.js +188 -0
  322. package/dist/src/config/keyBindings.js.map +1 -0
  323. package/dist/src/config/keyBindings.test.d.ts +6 -0
  324. package/dist/src/config/keyBindings.test.js +51 -0
  325. package/dist/src/config/keyBindings.test.js.map +1 -0
  326. package/dist/src/config/loadedSettingsAdapter.d.ts +15 -0
  327. package/dist/src/config/loadedSettingsAdapter.js +80 -0
  328. package/dist/src/config/loadedSettingsAdapter.js.map +1 -0
  329. package/dist/src/config/loadedSettingsAdapter.test.d.ts +6 -0
  330. package/dist/src/config/loadedSettingsAdapter.test.js +127 -0
  331. package/dist/src/config/loadedSettingsAdapter.test.js.map +1 -0
  332. package/dist/src/config/migration/index.d.ts +59 -0
  333. package/dist/src/config/migration/index.js +94 -0
  334. package/dist/src/config/migration/index.js.map +1 -0
  335. package/dist/src/config/migration/index.test.d.ts +6 -0
  336. package/dist/src/config/migration/index.test.js +295 -0
  337. package/dist/src/config/migration/index.test.js.map +1 -0
  338. package/dist/src/config/migration/scheduler.d.ts +51 -0
  339. package/dist/src/config/migration/scheduler.js +95 -0
  340. package/dist/src/config/migration/scheduler.js.map +1 -0
  341. package/dist/src/config/migration/scheduler.test.d.ts +6 -0
  342. package/dist/src/config/migration/scheduler.test.js +129 -0
  343. package/dist/src/config/migration/scheduler.test.js.map +1 -0
  344. package/dist/src/config/migration/types.d.ts +53 -0
  345. package/dist/src/config/migration/types.js +7 -0
  346. package/dist/src/config/migration/types.js.map +1 -0
  347. package/dist/src/config/migration/versions/v1-to-v2-shared.d.ts +27 -0
  348. package/dist/src/config/migration/versions/v1-to-v2-shared.js +174 -0
  349. package/dist/src/config/migration/versions/v1-to-v2-shared.js.map +1 -0
  350. package/dist/src/config/migration/versions/v1-to-v2.d.ts +81 -0
  351. package/dist/src/config/migration/versions/v1-to-v2.js +222 -0
  352. package/dist/src/config/migration/versions/v1-to-v2.js.map +1 -0
  353. package/dist/src/config/migration/versions/v1-to-v2.test.d.ts +6 -0
  354. package/dist/src/config/migration/versions/v1-to-v2.test.js +189 -0
  355. package/dist/src/config/migration/versions/v1-to-v2.test.js.map +1 -0
  356. package/dist/src/config/migration/versions/v2-to-v3.d.ts +61 -0
  357. package/dist/src/config/migration/versions/v2-to-v3.js +185 -0
  358. package/dist/src/config/migration/versions/v2-to-v3.js.map +1 -0
  359. package/dist/src/config/migration/versions/v2-to-v3.test.d.ts +6 -0
  360. package/dist/src/config/migration/versions/v2-to-v3.test.js +337 -0
  361. package/dist/src/config/migration/versions/v2-to-v3.test.js.map +1 -0
  362. package/dist/src/config/migration/versions/v3-to-v4.d.ts +34 -0
  363. package/dist/src/config/migration/versions/v3-to-v4.js +126 -0
  364. package/dist/src/config/migration/versions/v3-to-v4.js.map +1 -0
  365. package/dist/src/config/migration/versions/v3-to-v4.test.d.ts +6 -0
  366. package/dist/src/config/migration/versions/v3-to-v4.test.js +164 -0
  367. package/dist/src/config/migration/versions/v3-to-v4.test.js.map +1 -0
  368. package/dist/src/config/modelProvidersScope.d.ts +20 -0
  369. package/dist/src/config/modelProvidersScope.js +39 -0
  370. package/dist/src/config/modelProvidersScope.js.map +1 -0
  371. package/dist/src/config/modelProvidersScope.test.d.ts +6 -0
  372. package/dist/src/config/modelProvidersScope.test.js +66 -0
  373. package/dist/src/config/modelProvidersScope.test.js.map +1 -0
  374. package/dist/src/config/path-freshness.test.d.ts +6 -0
  375. package/dist/src/config/path-freshness.test.js +52 -0
  376. package/dist/src/config/path-freshness.test.js.map +1 -0
  377. package/dist/src/config/sandboxConfig.d.ts +13 -0
  378. package/dist/src/config/sandboxConfig.js +74 -0
  379. package/dist/src/config/sandboxConfig.js.map +1 -0
  380. package/dist/src/config/settings.d.ts +119 -0
  381. package/dist/src/config/settings.js +1015 -0
  382. package/dist/src/config/settings.js.map +1 -0
  383. package/dist/src/config/settingsSchema.d.ts +2207 -0
  384. package/dist/src/config/settingsSchema.js +2246 -0
  385. package/dist/src/config/settingsSchema.js.map +1 -0
  386. package/dist/src/config/settingsSchema.test.d.ts +6 -0
  387. package/dist/src/config/settingsSchema.test.js +232 -0
  388. package/dist/src/config/settingsSchema.test.js.map +1 -0
  389. package/dist/src/config/trustedFolders.d.ts +54 -0
  390. package/dist/src/config/trustedFolders.js +176 -0
  391. package/dist/src/config/trustedFolders.js.map +1 -0
  392. package/dist/src/config/trustedFolders.test.d.ts +6 -0
  393. package/dist/src/config/trustedFolders.test.js +354 -0
  394. package/dist/src/config/trustedFolders.test.js.map +1 -0
  395. package/dist/src/core/auth.d.ts +13 -0
  396. package/dist/src/core/auth.js +34 -0
  397. package/dist/src/core/auth.js.map +1 -0
  398. package/dist/src/core/auth.test.d.ts +6 -0
  399. package/dist/src/core/auth.test.js +47 -0
  400. package/dist/src/core/auth.test.js.map +1 -0
  401. package/dist/src/core/initializer.d.ts +21 -0
  402. package/dist/src/core/initializer.js +42 -0
  403. package/dist/src/core/initializer.js.map +1 -0
  404. package/dist/src/core/initializer.test.d.ts +6 -0
  405. package/dist/src/core/initializer.test.js +123 -0
  406. package/dist/src/core/initializer.test.js.map +1 -0
  407. package/dist/src/core/theme.d.ts +12 -0
  408. package/dist/src/core/theme.js +25 -0
  409. package/dist/src/core/theme.js.map +1 -0
  410. package/dist/src/core/theme.test.d.ts +6 -0
  411. package/dist/src/core/theme.test.js +57 -0
  412. package/dist/src/core/theme.test.js.map +1 -0
  413. package/dist/src/dualOutput/DualOutputBridge.d.ts +84 -0
  414. package/dist/src/dualOutput/DualOutputBridge.js +293 -0
  415. package/dist/src/dualOutput/DualOutputBridge.js.map +1 -0
  416. package/dist/src/dualOutput/DualOutputBridge.test.d.ts +6 -0
  417. package/dist/src/dualOutput/DualOutputBridge.test.js +157 -0
  418. package/dist/src/dualOutput/DualOutputBridge.test.js.map +1 -0
  419. package/dist/src/dualOutput/DualOutputContext.d.ts +19 -0
  420. package/dist/src/dualOutput/DualOutputContext.js +22 -0
  421. package/dist/src/dualOutput/DualOutputContext.js.map +1 -0
  422. package/dist/src/dualOutput/index.d.ts +7 -0
  423. package/dist/src/dualOutput/index.js +8 -0
  424. package/dist/src/dualOutput/index.js.map +1 -0
  425. package/dist/src/export/index.d.ts +6 -0
  426. package/dist/src/export/index.js +7 -0
  427. package/dist/src/export/index.js.map +1 -0
  428. package/dist/src/gemini.d.ts +13 -0
  429. package/dist/src/gemini.js +908 -0
  430. package/dist/src/gemini.js.map +1 -0
  431. package/dist/src/gemini.test.d.ts +6 -0
  432. package/dist/src/gemini.test.js +975 -0
  433. package/dist/src/gemini.test.js.map +1 -0
  434. package/dist/src/generated/git-commit.d.ts +7 -0
  435. package/dist/src/generated/git-commit.js +10 -0
  436. package/dist/src/generated/git-commit.js.map +1 -0
  437. package/dist/src/i18n/index.d.ts +27 -0
  438. package/dist/src/i18n/index.js +213 -0
  439. package/dist/src/i18n/index.js.map +1 -0
  440. package/dist/src/i18n/index.test.d.ts +6 -0
  441. package/dist/src/i18n/index.test.js +103 -0
  442. package/dist/src/i18n/index.test.js.map +1 -0
  443. package/dist/src/i18n/languages.d.ts +43 -0
  444. package/dist/src/i18n/languages.js +138 -0
  445. package/dist/src/i18n/languages.js.map +1 -0
  446. package/dist/src/i18n/locales/ca.js +3951 -0
  447. package/dist/src/i18n/locales/de.js +2018 -0
  448. package/dist/src/i18n/locales/en.js +2161 -0
  449. package/dist/src/i18n/locales/fr.js +2013 -0
  450. package/dist/src/i18n/locales/ja.js +1780 -0
  451. package/dist/src/i18n/locales/pt.js +2005 -0
  452. package/dist/src/i18n/locales/ru.js +1993 -0
  453. package/dist/src/i18n/locales/zh-TW.js +1729 -0
  454. package/dist/src/i18n/locales/zh.js +1929 -0
  455. package/dist/src/i18n/mustTranslateKeys.d.ts +12 -0
  456. package/dist/src/i18n/mustTranslateKeys.js +111 -0
  457. package/dist/src/i18n/mustTranslateKeys.js.map +1 -0
  458. package/dist/src/i18n/mustTranslateKeys.test.d.ts +6 -0
  459. package/dist/src/i18n/mustTranslateKeys.test.js +103 -0
  460. package/dist/src/i18n/mustTranslateKeys.test.js.map +1 -0
  461. package/dist/src/i18n/translationDict.d.ts +9 -0
  462. package/dist/src/i18n/translationDict.js +17 -0
  463. package/dist/src/i18n/translationDict.js.map +1 -0
  464. package/dist/src/nonInteractive/control/ControlContext.d.ts +71 -0
  465. package/dist/src/nonInteractive/control/ControlContext.js +36 -0
  466. package/dist/src/nonInteractive/control/ControlContext.js.map +1 -0
  467. package/dist/src/nonInteractive/control/ControlDispatcher.d.ts +116 -0
  468. package/dist/src/nonInteractive/control/ControlDispatcher.js +290 -0
  469. package/dist/src/nonInteractive/control/ControlDispatcher.js.map +1 -0
  470. package/dist/src/nonInteractive/control/ControlDispatcher.test.d.ts +6 -0
  471. package/dist/src/nonInteractive/control/ControlDispatcher.test.js +614 -0
  472. package/dist/src/nonInteractive/control/ControlDispatcher.test.js.map +1 -0
  473. package/dist/src/nonInteractive/control/ControlService.d.ts +79 -0
  474. package/dist/src/nonInteractive/control/ControlService.js +139 -0
  475. package/dist/src/nonInteractive/control/ControlService.js.map +1 -0
  476. package/dist/src/nonInteractive/control/controllers/baseController.d.ts +53 -0
  477. package/dist/src/nonInteractive/control/controllers/baseController.js +136 -0
  478. package/dist/src/nonInteractive/control/controllers/baseController.js.map +1 -0
  479. package/dist/src/nonInteractive/control/controllers/hookController.d.ts +25 -0
  480. package/dist/src/nonInteractive/control/controllers/hookController.js +40 -0
  481. package/dist/src/nonInteractive/control/controllers/hookController.js.map +1 -0
  482. package/dist/src/nonInteractive/control/controllers/permissionController.d.ts +57 -0
  483. package/dist/src/nonInteractive/control/controllers/permissionController.js +361 -0
  484. package/dist/src/nonInteractive/control/controllers/permissionController.js.map +1 -0
  485. package/dist/src/nonInteractive/control/controllers/permissionController.test.d.ts +6 -0
  486. package/dist/src/nonInteractive/control/controllers/permissionController.test.js +140 -0
  487. package/dist/src/nonInteractive/control/controllers/permissionController.test.js.map +1 -0
  488. package/dist/src/nonInteractive/control/controllers/sdkMcpController.d.ts +54 -0
  489. package/dist/src/nonInteractive/control/controllers/sdkMcpController.js +80 -0
  490. package/dist/src/nonInteractive/control/controllers/sdkMcpController.js.map +1 -0
  491. package/dist/src/nonInteractive/control/controllers/systemController.d.ts +67 -0
  492. package/dist/src/nonInteractive/control/controllers/systemController.js +326 -0
  493. package/dist/src/nonInteractive/control/controllers/systemController.js.map +1 -0
  494. package/dist/src/nonInteractive/control/controllers/systemController.test.d.ts +6 -0
  495. package/dist/src/nonInteractive/control/controllers/systemController.test.js +121 -0
  496. package/dist/src/nonInteractive/control/controllers/systemController.test.js.map +1 -0
  497. package/dist/src/nonInteractive/control/types/serviceAPIs.d.ts +105 -0
  498. package/dist/src/nonInteractive/control/types/serviceAPIs.js +7 -0
  499. package/dist/src/nonInteractive/control/types/serviceAPIs.js.map +1 -0
  500. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.d.ts +505 -0
  501. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js +1041 -0
  502. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.js.map +1 -0
  503. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.test.d.ts +6 -0
  504. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.test.js +1304 -0
  505. package/dist/src/nonInteractive/io/BaseJsonOutputAdapter.test.js.map +1 -0
  506. package/dist/src/nonInteractive/io/JsonOutputAdapter.d.ts +29 -0
  507. package/dist/src/nonInteractive/io/JsonOutputAdapter.js +64 -0
  508. package/dist/src/nonInteractive/io/JsonOutputAdapter.js.map +1 -0
  509. package/dist/src/nonInteractive/io/JsonOutputAdapter.test.d.ts +6 -0
  510. package/dist/src/nonInteractive/io/JsonOutputAdapter.test.js +684 -0
  511. package/dist/src/nonInteractive/io/JsonOutputAdapter.test.js.map +1 -0
  512. package/dist/src/nonInteractive/io/StreamJsonInputReader.d.ts +16 -0
  513. package/dist/src/nonInteractive/io/StreamJsonInputReader.js +54 -0
  514. package/dist/src/nonInteractive/io/StreamJsonInputReader.js.map +1 -0
  515. package/dist/src/nonInteractive/io/StreamJsonInputReader.test.d.ts +6 -0
  516. package/dist/src/nonInteractive/io/StreamJsonInputReader.test.js +178 -0
  517. package/dist/src/nonInteractive/io/StreamJsonInputReader.test.js.map +1 -0
  518. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.d.ts +84 -0
  519. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.dualOutput.test.d.ts +6 -0
  520. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.dualOutput.test.js +118 -0
  521. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.dualOutput.test.js.map +1 -0
  522. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.js +227 -0
  523. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.js.map +1 -0
  524. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.test.d.ts +6 -0
  525. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.test.js +1046 -0
  526. package/dist/src/nonInteractive/io/StreamJsonOutputAdapter.test.js.map +1 -0
  527. package/dist/src/nonInteractive/io/index.d.ts +6 -0
  528. package/dist/src/nonInteractive/io/index.js +7 -0
  529. package/dist/src/nonInteractive/io/index.js.map +1 -0
  530. package/dist/src/nonInteractive/session.d.ts +8 -0
  531. package/dist/src/nonInteractive/session.js +664 -0
  532. package/dist/src/nonInteractive/session.js.map +1 -0
  533. package/dist/src/nonInteractive/session.test.d.ts +6 -0
  534. package/dist/src/nonInteractive/session.test.js +680 -0
  535. package/dist/src/nonInteractive/session.test.js.map +1 -0
  536. package/dist/src/nonInteractive/types.d.ts +415 -0
  537. package/dist/src/nonInteractive/types.js +77 -0
  538. package/dist/src/nonInteractive/types.js.map +1 -0
  539. package/dist/src/nonInteractiveCli.d.ts +33 -0
  540. package/dist/src/nonInteractiveCli.js +1058 -0
  541. package/dist/src/nonInteractiveCli.js.map +1 -0
  542. package/dist/src/nonInteractiveCliCommands.d.ts +59 -0
  543. package/dist/src/nonInteractiveCliCommands.js +326 -0
  544. package/dist/src/nonInteractiveCliCommands.js.map +1 -0
  545. package/dist/src/nonInteractiveCliCommands.test.d.ts +6 -0
  546. package/dist/src/nonInteractiveCliCommands.test.js +484 -0
  547. package/dist/src/nonInteractiveCliCommands.test.js.map +1 -0
  548. package/dist/src/patches/is-in-ci.d.ts +7 -0
  549. package/dist/src/patches/is-in-ci.js +15 -0
  550. package/dist/src/patches/is-in-ci.js.map +1 -0
  551. package/dist/src/remoteInput/RemoteInputContext.d.ts +8 -0
  552. package/dist/src/remoteInput/RemoteInputContext.js +9 -0
  553. package/dist/src/remoteInput/RemoteInputContext.js.map +1 -0
  554. package/dist/src/remoteInput/RemoteInputWatcher.d.ts +83 -0
  555. package/dist/src/remoteInput/RemoteInputWatcher.js +201 -0
  556. package/dist/src/remoteInput/RemoteInputWatcher.js.map +1 -0
  557. package/dist/src/remoteInput/RemoteInputWatcher.test.d.ts +6 -0
  558. package/dist/src/remoteInput/RemoteInputWatcher.test.js +100 -0
  559. package/dist/src/remoteInput/RemoteInputWatcher.test.js.map +1 -0
  560. package/dist/src/remoteInput/index.d.ts +7 -0
  561. package/dist/src/remoteInput/index.js +8 -0
  562. package/dist/src/remoteInput/index.js.map +1 -0
  563. package/dist/src/serve/auth/deviceFlow.d.ts +595 -0
  564. package/dist/src/serve/auth/deviceFlow.js +1243 -0
  565. package/dist/src/serve/auth/deviceFlow.js.map +1 -0
  566. package/dist/src/serve/auth/deviceFlow.test.d.ts +6 -0
  567. package/dist/src/serve/auth/deviceFlow.test.js +1314 -0
  568. package/dist/src/serve/auth/deviceFlow.test.js.map +1 -0
  569. package/dist/src/serve/auth/qwenDeviceFlowProvider.d.ts +30 -0
  570. package/dist/src/serve/auth/qwenDeviceFlowProvider.js +331 -0
  571. package/dist/src/serve/auth/qwenDeviceFlowProvider.js.map +1 -0
  572. package/dist/src/serve/auth/qwenDeviceFlowProvider.test.d.ts +6 -0
  573. package/dist/src/serve/auth/qwenDeviceFlowProvider.test.js +301 -0
  574. package/dist/src/serve/auth/qwenDeviceFlowProvider.test.js.map +1 -0
  575. package/dist/src/serve/auth.d.ts +101 -0
  576. package/dist/src/serve/auth.js +216 -0
  577. package/dist/src/serve/auth.js.map +1 -0
  578. package/dist/src/serve/capabilities.d.ts +196 -0
  579. package/dist/src/serve/capabilities.js +227 -0
  580. package/dist/src/serve/capabilities.js.map +1 -0
  581. package/dist/src/serve/daemonStatusProvider.d.ts +14 -0
  582. package/dist/src/serve/daemonStatusProvider.js +252 -0
  583. package/dist/src/serve/daemonStatusProvider.js.map +1 -0
  584. package/dist/src/serve/debugMode.d.ts +27 -0
  585. package/dist/src/serve/debugMode.js +33 -0
  586. package/dist/src/serve/debugMode.js.map +1 -0
  587. package/dist/src/serve/demo.d.ts +11 -0
  588. package/dist/src/serve/demo.js +640 -0
  589. package/dist/src/serve/demo.js.map +1 -0
  590. package/dist/src/serve/envSnapshot.d.ts +28 -0
  591. package/dist/src/serve/envSnapshot.js +199 -0
  592. package/dist/src/serve/envSnapshot.js.map +1 -0
  593. package/dist/src/serve/envSnapshot.test.d.ts +6 -0
  594. package/dist/src/serve/envSnapshot.test.js +181 -0
  595. package/dist/src/serve/envSnapshot.test.js.map +1 -0
  596. package/dist/src/serve/eventBus.d.ts +6 -0
  597. package/dist/src/serve/eventBus.js +15 -0
  598. package/dist/src/serve/eventBus.js.map +1 -0
  599. package/dist/src/serve/fs/audit.d.ts +144 -0
  600. package/dist/src/serve/fs/audit.js +193 -0
  601. package/dist/src/serve/fs/audit.js.map +1 -0
  602. package/dist/src/serve/fs/audit.test.d.ts +6 -0
  603. package/dist/src/serve/fs/audit.test.js +246 -0
  604. package/dist/src/serve/fs/audit.test.js.map +1 -0
  605. package/dist/src/serve/fs/contract.test.d.ts +6 -0
  606. package/dist/src/serve/fs/contract.test.js +211 -0
  607. package/dist/src/serve/fs/contract.test.js.map +1 -0
  608. package/dist/src/serve/fs/errors.d.ts +87 -0
  609. package/dist/src/serve/fs/errors.js +128 -0
  610. package/dist/src/serve/fs/errors.js.map +1 -0
  611. package/dist/src/serve/fs/errors.test.d.ts +6 -0
  612. package/dist/src/serve/fs/errors.test.js +152 -0
  613. package/dist/src/serve/fs/errors.test.js.map +1 -0
  614. package/dist/src/serve/fs/index.d.ts +10 -0
  615. package/dist/src/serve/fs/index.js +11 -0
  616. package/dist/src/serve/fs/index.js.map +1 -0
  617. package/dist/src/serve/fs/paths.d.ts +103 -0
  618. package/dist/src/serve/fs/paths.js +433 -0
  619. package/dist/src/serve/fs/paths.js.map +1 -0
  620. package/dist/src/serve/fs/paths.test.d.ts +6 -0
  621. package/dist/src/serve/fs/paths.test.js +309 -0
  622. package/dist/src/serve/fs/paths.test.js.map +1 -0
  623. package/dist/src/serve/fs/policy.d.ts +142 -0
  624. package/dist/src/serve/fs/policy.js +189 -0
  625. package/dist/src/serve/fs/policy.js.map +1 -0
  626. package/dist/src/serve/fs/policy.test.d.ts +6 -0
  627. package/dist/src/serve/fs/policy.test.js +193 -0
  628. package/dist/src/serve/fs/policy.test.js.map +1 -0
  629. package/dist/src/serve/fs/workspaceFileSystem.d.ts +157 -0
  630. package/dist/src/serve/fs/workspaceFileSystem.js +1377 -0
  631. package/dist/src/serve/fs/workspaceFileSystem.js.map +1 -0
  632. package/dist/src/serve/fs/workspaceFileSystem.test.d.ts +6 -0
  633. package/dist/src/serve/fs/workspaceFileSystem.test.js +880 -0
  634. package/dist/src/serve/fs/workspaceFileSystem.test.js.map +1 -0
  635. package/dist/src/serve/httpAcpBridge.d.ts +80 -0
  636. package/dist/src/serve/httpAcpBridge.js +3559 -0
  637. package/dist/src/serve/httpAcpBridge.js.map +1 -0
  638. package/dist/src/serve/httpAcpBridge.test.d.ts +6 -0
  639. package/dist/src/serve/httpAcpBridge.test.js +4987 -0
  640. package/dist/src/serve/httpAcpBridge.test.js.map +1 -0
  641. package/dist/src/serve/inMemoryChannel.d.ts +6 -0
  642. package/dist/src/serve/inMemoryChannel.js +14 -0
  643. package/dist/src/serve/inMemoryChannel.js.map +1 -0
  644. package/dist/src/serve/index.d.ts +15 -0
  645. package/dist/src/serve/index.js +16 -0
  646. package/dist/src/serve/index.js.map +1 -0
  647. package/dist/src/serve/loopbackBinds.d.ts +18 -0
  648. package/dist/src/serve/loopbackBinds.js +33 -0
  649. package/dist/src/serve/loopbackBinds.js.map +1 -0
  650. package/dist/src/serve/routes/workspaceFileRead.d.ts +90 -0
  651. package/dist/src/serve/routes/workspaceFileRead.js +458 -0
  652. package/dist/src/serve/routes/workspaceFileRead.js.map +1 -0
  653. package/dist/src/serve/routes/workspaceFileRead.test.d.ts +6 -0
  654. package/dist/src/serve/routes/workspaceFileRead.test.js +453 -0
  655. package/dist/src/serve/routes/workspaceFileRead.test.js.map +1 -0
  656. package/dist/src/serve/routes/workspaceFileWrite.d.ts +17 -0
  657. package/dist/src/serve/routes/workspaceFileWrite.js +224 -0
  658. package/dist/src/serve/routes/workspaceFileWrite.js.map +1 -0
  659. package/dist/src/serve/routes/workspaceFileWrite.test.d.ts +6 -0
  660. package/dist/src/serve/routes/workspaceFileWrite.test.js +223 -0
  661. package/dist/src/serve/routes/workspaceFileWrite.test.js.map +1 -0
  662. package/dist/src/serve/runQwenServe.d.ts +67 -0
  663. package/dist/src/serve/runQwenServe.js +616 -0
  664. package/dist/src/serve/runQwenServe.js.map +1 -0
  665. package/dist/src/serve/server.d.ts +125 -0
  666. package/dist/src/serve/server.js +2297 -0
  667. package/dist/src/serve/server.js.map +1 -0
  668. package/dist/src/serve/status.d.ts +6 -0
  669. package/dist/src/serve/status.js +13 -0
  670. package/dist/src/serve/status.js.map +1 -0
  671. package/dist/src/serve/types.d.ts +175 -0
  672. package/dist/src/serve/types.js +10 -0
  673. package/dist/src/serve/types.js.map +1 -0
  674. package/dist/src/serve/workspaceAgents.d.ts +47 -0
  675. package/dist/src/serve/workspaceAgents.js +1171 -0
  676. package/dist/src/serve/workspaceAgents.js.map +1 -0
  677. package/dist/src/serve/workspaceAgents.test.d.ts +6 -0
  678. package/dist/src/serve/workspaceAgents.test.js +823 -0
  679. package/dist/src/serve/workspaceAgents.test.js.map +1 -0
  680. package/dist/src/serve/workspaceMemory.d.ts +60 -0
  681. package/dist/src/serve/workspaceMemory.js +323 -0
  682. package/dist/src/serve/workspaceMemory.js.map +1 -0
  683. package/dist/src/serve/workspaceMemory.test.d.ts +6 -0
  684. package/dist/src/serve/workspaceMemory.test.js +418 -0
  685. package/dist/src/serve/workspaceMemory.test.js.map +1 -0
  686. package/dist/src/services/BuiltinCommandLoader.d.ts +24 -0
  687. package/dist/src/services/BuiltinCommandLoader.js +159 -0
  688. package/dist/src/services/BuiltinCommandLoader.js.map +1 -0
  689. package/dist/src/services/BuiltinCommandLoader.test.d.ts +6 -0
  690. package/dist/src/services/BuiltinCommandLoader.test.js +234 -0
  691. package/dist/src/services/BuiltinCommandLoader.test.js.map +1 -0
  692. package/dist/src/services/BundledSkillLoader.d.ts +17 -0
  693. package/dist/src/services/BundledSkillLoader.js +97 -0
  694. package/dist/src/services/BundledSkillLoader.js.map +1 -0
  695. package/dist/src/services/BundledSkillLoader.test.d.ts +6 -0
  696. package/dist/src/services/BundledSkillLoader.test.js +301 -0
  697. package/dist/src/services/BundledSkillLoader.test.js.map +1 -0
  698. package/dist/src/services/CommandService.d.ts +69 -0
  699. package/dist/src/services/CommandService.js +128 -0
  700. package/dist/src/services/CommandService.js.map +1 -0
  701. package/dist/src/services/CommandService.test.d.ts +6 -0
  702. package/dist/src/services/CommandService.test.js +263 -0
  703. package/dist/src/services/CommandService.test.js.map +1 -0
  704. package/dist/src/services/FileCommandLoader-extension.test.d.ts +6 -0
  705. package/dist/src/services/FileCommandLoader-extension.test.js +279 -0
  706. package/dist/src/services/FileCommandLoader-extension.test.js.map +1 -0
  707. package/dist/src/services/FileCommandLoader-markdown.test.d.ts +6 -0
  708. package/dist/src/services/FileCommandLoader-markdown.test.js +111 -0
  709. package/dist/src/services/FileCommandLoader-markdown.test.js.map +1 -0
  710. package/dist/src/services/FileCommandLoader.d.ts +64 -0
  711. package/dist/src/services/FileCommandLoader.js +259 -0
  712. package/dist/src/services/FileCommandLoader.js.map +1 -0
  713. package/dist/src/services/McpPromptLoader.d.ts +35 -0
  714. package/dist/src/services/McpPromptLoader.js +261 -0
  715. package/dist/src/services/McpPromptLoader.js.map +1 -0
  716. package/dist/src/services/McpPromptLoader.test.d.ts +6 -0
  717. package/dist/src/services/McpPromptLoader.test.js +341 -0
  718. package/dist/src/services/McpPromptLoader.test.js.map +1 -0
  719. package/dist/src/services/SkillCommandLoader.d.ts +23 -0
  720. package/dist/src/services/SkillCommandLoader.js +110 -0
  721. package/dist/src/services/SkillCommandLoader.js.map +1 -0
  722. package/dist/src/services/SkillCommandLoader.test.d.ts +6 -0
  723. package/dist/src/services/SkillCommandLoader.test.js +307 -0
  724. package/dist/src/services/SkillCommandLoader.test.js.map +1 -0
  725. package/dist/src/services/command-factory.d.ts +25 -0
  726. package/dist/src/services/command-factory.js +122 -0
  727. package/dist/src/services/command-factory.js.map +1 -0
  728. package/dist/src/services/command-factory.test.d.ts +6 -0
  729. package/dist/src/services/command-factory.test.js +31 -0
  730. package/dist/src/services/command-factory.test.js.map +1 -0
  731. package/dist/src/services/command-migration-tool.d.ts +39 -0
  732. package/dist/src/services/command-migration-tool.js +135 -0
  733. package/dist/src/services/command-migration-tool.js.map +1 -0
  734. package/dist/src/services/command-migration-tool.test.d.ts +6 -0
  735. package/dist/src/services/command-migration-tool.test.js +175 -0
  736. package/dist/src/services/command-migration-tool.test.js.map +1 -0
  737. package/dist/src/services/commandMetadata.d.ts +21 -0
  738. package/dist/src/services/commandMetadata.js +106 -0
  739. package/dist/src/services/commandMetadata.js.map +1 -0
  740. package/dist/src/services/commandMetadata.test.d.ts +6 -0
  741. package/dist/src/services/commandMetadata.test.js +216 -0
  742. package/dist/src/services/commandMetadata.test.js.map +1 -0
  743. package/dist/src/services/commandUtils.d.ts +36 -0
  744. package/dist/src/services/commandUtils.js +57 -0
  745. package/dist/src/services/commandUtils.js.map +1 -0
  746. package/dist/src/services/commandUtils.test.d.ts +6 -0
  747. package/dist/src/services/commandUtils.test.js +159 -0
  748. package/dist/src/services/commandUtils.test.js.map +1 -0
  749. package/dist/src/services/insight/generators/DataProcessor.d.ts +23 -0
  750. package/dist/src/services/insight/generators/DataProcessor.js +1001 -0
  751. package/dist/src/services/insight/generators/DataProcessor.js.map +1 -0
  752. package/dist/src/services/insight/generators/DataProcessor.test.d.ts +6 -0
  753. package/dist/src/services/insight/generators/DataProcessor.test.js +1210 -0
  754. package/dist/src/services/insight/generators/DataProcessor.test.js.map +1 -0
  755. package/dist/src/services/insight/generators/StaticInsightGenerator.d.ts +16 -0
  756. package/dist/src/services/insight/generators/StaticInsightGenerator.js +63 -0
  757. package/dist/src/services/insight/generators/StaticInsightGenerator.js.map +1 -0
  758. package/dist/src/services/insight/generators/StaticInsightGenerator.test.d.ts +6 -0
  759. package/dist/src/services/insight/generators/StaticInsightGenerator.test.js +60 -0
  760. package/dist/src/services/insight/generators/StaticInsightGenerator.test.js.map +1 -0
  761. package/dist/src/services/insight/generators/TemplateRenderer.d.ts +9 -0
  762. package/dist/src/services/insight/generators/TemplateRenderer.js +49 -0
  763. package/dist/src/services/insight/generators/TemplateRenderer.js.map +1 -0
  764. package/dist/src/services/insight/types/QualitativeInsightTypes.d.ts +74 -0
  765. package/dist/src/services/insight/types/QualitativeInsightTypes.js +2 -0
  766. package/dist/src/services/insight/types/QualitativeInsightTypes.js.map +1 -0
  767. package/dist/src/services/insight/types/StaticInsightTypes.d.ts +59 -0
  768. package/dist/src/services/insight/types/StaticInsightTypes.js +7 -0
  769. package/dist/src/services/insight/types/StaticInsightTypes.js.map +1 -0
  770. package/dist/src/services/markdown-command-parser.d.ts +52 -0
  771. package/dist/src/services/markdown-command-parser.js +60 -0
  772. package/dist/src/services/markdown-command-parser.js.map +1 -0
  773. package/dist/src/services/markdown-command-parser.test.d.ts +6 -0
  774. package/dist/src/services/markdown-command-parser.test.js +146 -0
  775. package/dist/src/services/markdown-command-parser.test.js.map +1 -0
  776. package/dist/src/services/notificationService.d.ts +19 -0
  777. package/dist/src/services/notificationService.js +64 -0
  778. package/dist/src/services/notificationService.js.map +1 -0
  779. package/dist/src/services/notificationService.test.d.ts +6 -0
  780. package/dist/src/services/notificationService.test.js +114 -0
  781. package/dist/src/services/notificationService.test.js.map +1 -0
  782. package/dist/src/services/prompt-processors/argumentProcessor.d.ts +16 -0
  783. package/dist/src/services/prompt-processors/argumentProcessor.js +21 -0
  784. package/dist/src/services/prompt-processors/argumentProcessor.js.map +1 -0
  785. package/dist/src/services/prompt-processors/atFileProcessor.d.ts +12 -0
  786. package/dist/src/services/prompt-processors/atFileProcessor.js +63 -0
  787. package/dist/src/services/prompt-processors/atFileProcessor.js.map +1 -0
  788. package/dist/src/services/prompt-processors/atFileProcessor.test.d.ts +6 -0
  789. package/dist/src/services/prompt-processors/atFileProcessor.test.js +174 -0
  790. package/dist/src/services/prompt-processors/atFileProcessor.test.js.map +1 -0
  791. package/dist/src/services/prompt-processors/injectionParser.d.ts +29 -0
  792. package/dist/src/services/prompt-processors/injectionParser.js +60 -0
  793. package/dist/src/services/prompt-processors/injectionParser.js.map +1 -0
  794. package/dist/src/services/prompt-processors/injectionParser.test.d.ts +6 -0
  795. package/dist/src/services/prompt-processors/injectionParser.test.js +189 -0
  796. package/dist/src/services/prompt-processors/injectionParser.test.js.map +1 -0
  797. package/dist/src/services/prompt-processors/shellProcessor.d.ts +27 -0
  798. package/dist/src/services/prompt-processors/shellProcessor.js +146 -0
  799. package/dist/src/services/prompt-processors/shellProcessor.js.map +1 -0
  800. package/dist/src/services/prompt-processors/types.d.ts +45 -0
  801. package/dist/src/services/prompt-processors/types.js +20 -0
  802. package/dist/src/services/prompt-processors/types.js.map +1 -0
  803. package/dist/src/services/test-commands/example.md +5 -0
  804. package/dist/src/services/tips/index.d.ts +10 -0
  805. package/dist/src/services/tips/index.js +21 -0
  806. package/dist/src/services/tips/index.js.map +1 -0
  807. package/dist/src/services/tips/tipHistory.d.ts +49 -0
  808. package/dist/src/services/tips/tipHistory.js +138 -0
  809. package/dist/src/services/tips/tipHistory.js.map +1 -0
  810. package/dist/src/services/tips/tipHistory.test.d.ts +6 -0
  811. package/dist/src/services/tips/tipHistory.test.js +102 -0
  812. package/dist/src/services/tips/tipHistory.test.js.map +1 -0
  813. package/dist/src/services/tips/tipRegistry.d.ts +32 -0
  814. package/dist/src/services/tips/tipRegistry.js +148 -0
  815. package/dist/src/services/tips/tipRegistry.js.map +1 -0
  816. package/dist/src/services/tips/tipRegistry.test.d.ts +6 -0
  817. package/dist/src/services/tips/tipRegistry.test.js +65 -0
  818. package/dist/src/services/tips/tipRegistry.test.js.map +1 -0
  819. package/dist/src/services/tips/tipScheduler.d.ts +21 -0
  820. package/dist/src/services/tips/tipScheduler.js +38 -0
  821. package/dist/src/services/tips/tipScheduler.js.map +1 -0
  822. package/dist/src/services/tips/tipScheduler.test.d.ts +6 -0
  823. package/dist/src/services/tips/tipScheduler.test.js +126 -0
  824. package/dist/src/services/tips/tipScheduler.test.js.map +1 -0
  825. package/dist/src/services/types.d.ts +22 -0
  826. package/dist/src/services/types.js +7 -0
  827. package/dist/src/services/types.js.map +1 -0
  828. package/dist/src/startup/worktreeStartup.d.ts +112 -0
  829. package/dist/src/startup/worktreeStartup.js +350 -0
  830. package/dist/src/startup/worktreeStartup.js.map +1 -0
  831. package/dist/src/startup/worktreeStartup.test.d.ts +6 -0
  832. package/dist/src/startup/worktreeStartup.test.js +332 -0
  833. package/dist/src/startup/worktreeStartup.test.js.map +1 -0
  834. package/dist/src/test-utils/customMatchers.d.ts +14 -0
  835. package/dist/src/test-utils/customMatchers.js +40 -0
  836. package/dist/src/test-utils/customMatchers.js.map +1 -0
  837. package/dist/src/test-utils/mockCommandContext.d.ts +18 -0
  838. package/dist/src/test-utils/mockCommandContext.js +107 -0
  839. package/dist/src/test-utils/mockCommandContext.js.map +1 -0
  840. package/dist/src/test-utils/mockCommandContext.test.d.ts +6 -0
  841. package/dist/src/test-utils/mockCommandContext.test.js +51 -0
  842. package/dist/src/test-utils/mockCommandContext.test.js.map +1 -0
  843. package/dist/src/test-utils/render.d.ts +14 -0
  844. package/dist/src/test-utils/render.js +15 -0
  845. package/dist/src/test-utils/render.js.map +1 -0
  846. package/dist/src/ui/App.d.ts +6 -0
  847. package/dist/src/ui/App.js +65 -0
  848. package/dist/src/ui/App.js.map +1 -0
  849. package/dist/src/ui/AppContainer.d.ts +24 -0
  850. package/dist/src/ui/AppContainer.js +2853 -0
  851. package/dist/src/ui/AppContainer.js.map +1 -0
  852. package/dist/src/ui/AppContainer.test.d.ts +6 -0
  853. package/dist/src/ui/AppContainer.test.js +2368 -0
  854. package/dist/src/ui/AppContainer.test.js.map +1 -0
  855. package/dist/src/ui/CommandFormatMigrationNudge.d.ts +14 -0
  856. package/dist/src/ui/CommandFormatMigrationNudge.js +44 -0
  857. package/dist/src/ui/CommandFormatMigrationNudge.js.map +1 -0
  858. package/dist/src/ui/FeedbackDialog.d.ts +9 -0
  859. package/dist/src/ui/FeedbackDialog.js +44 -0
  860. package/dist/src/ui/FeedbackDialog.js.map +1 -0
  861. package/dist/src/ui/IdeIntegrationNudge.d.ts +16 -0
  862. package/dist/src/ui/IdeIntegrationNudge.js +53 -0
  863. package/dist/src/ui/IdeIntegrationNudge.js.map +1 -0
  864. package/dist/src/ui/auth/AuthDialog.d.ts +7 -0
  865. package/dist/src/ui/auth/AuthDialog.js +214 -0
  866. package/dist/src/ui/auth/AuthDialog.js.map +1 -0
  867. package/dist/src/ui/auth/AuthDialog.test.d.ts +6 -0
  868. package/dist/src/ui/auth/AuthDialog.test.js +1029 -0
  869. package/dist/src/ui/auth/AuthDialog.test.js.map +1 -0
  870. package/dist/src/ui/auth/AuthInProgress.d.ts +11 -0
  871. package/dist/src/ui/auth/AuthInProgress.js +24 -0
  872. package/dist/src/ui/auth/AuthInProgress.js.map +1 -0
  873. package/dist/src/ui/auth/ProviderSetupSteps.d.ts +11 -0
  874. package/dist/src/ui/auth/ProviderSetupSteps.js +320 -0
  875. package/dist/src/ui/auth/ProviderSetupSteps.js.map +1 -0
  876. package/dist/src/ui/auth/ProviderSetupSteps.test.d.ts +6 -0
  877. package/dist/src/ui/auth/ProviderSetupSteps.test.js +322 -0
  878. package/dist/src/ui/auth/ProviderSetupSteps.test.js.map +1 -0
  879. package/dist/src/ui/auth/useAuth.d.ts +76 -0
  880. package/dist/src/ui/auth/useAuth.js +192 -0
  881. package/dist/src/ui/auth/useAuth.js.map +1 -0
  882. package/dist/src/ui/auth/useAuth.test.d.ts +6 -0
  883. package/dist/src/ui/auth/useAuth.test.js +267 -0
  884. package/dist/src/ui/auth/useAuth.test.js.map +1 -0
  885. package/dist/src/ui/auth/useProviderSetupFlow.d.ts +54 -0
  886. package/dist/src/ui/auth/useProviderSetupFlow.js +380 -0
  887. package/dist/src/ui/auth/useProviderSetupFlow.js.map +1 -0
  888. package/dist/src/ui/colors.d.ts +7 -0
  889. package/dist/src/ui/colors.js +60 -0
  890. package/dist/src/ui/colors.js.map +1 -0
  891. package/dist/src/ui/commands/aboutCommand.d.ts +7 -0
  892. package/dist/src/ui/commands/aboutCommand.js +69 -0
  893. package/dist/src/ui/commands/aboutCommand.js.map +1 -0
  894. package/dist/src/ui/commands/agentsCommand.d.ts +7 -0
  895. package/dist/src/ui/commands/agentsCommand.js +42 -0
  896. package/dist/src/ui/commands/agentsCommand.js.map +1 -0
  897. package/dist/src/ui/commands/approvalModeCommand.d.ts +7 -0
  898. package/dist/src/ui/commands/approvalModeCommand.js +89 -0
  899. package/dist/src/ui/commands/approvalModeCommand.js.map +1 -0
  900. package/dist/src/ui/commands/approvalModeCommand.test.d.ts +6 -0
  901. package/dist/src/ui/commands/approvalModeCommand.test.js +112 -0
  902. package/dist/src/ui/commands/approvalModeCommand.test.js.map +1 -0
  903. package/dist/src/ui/commands/arenaCommand.agentComplete.test.d.ts +6 -0
  904. package/dist/src/ui/commands/arenaCommand.agentComplete.test.js +118 -0
  905. package/dist/src/ui/commands/arenaCommand.agentComplete.test.js.map +1 -0
  906. package/dist/src/ui/commands/arenaCommand.d.ts +7 -0
  907. package/dist/src/ui/commands/arenaCommand.js +519 -0
  908. package/dist/src/ui/commands/arenaCommand.js.map +1 -0
  909. package/dist/src/ui/commands/arenaCommand.test.d.ts +6 -0
  910. package/dist/src/ui/commands/arenaCommand.test.js +352 -0
  911. package/dist/src/ui/commands/arenaCommand.test.js.map +1 -0
  912. package/dist/src/ui/commands/authCommand.d.ts +7 -0
  913. package/dist/src/ui/commands/authCommand.js +31 -0
  914. package/dist/src/ui/commands/authCommand.js.map +1 -0
  915. package/dist/src/ui/commands/branchCommand.d.ts +7 -0
  916. package/dist/src/ui/commands/branchCommand.js +49 -0
  917. package/dist/src/ui/commands/branchCommand.js.map +1 -0
  918. package/dist/src/ui/commands/branchCommand.test.d.ts +6 -0
  919. package/dist/src/ui/commands/branchCommand.test.js +57 -0
  920. package/dist/src/ui/commands/branchCommand.test.js.map +1 -0
  921. package/dist/src/ui/commands/btwCommand.d.ts +7 -0
  922. package/dist/src/ui/commands/btwCommand.js +164 -0
  923. package/dist/src/ui/commands/btwCommand.js.map +1 -0
  924. package/dist/src/ui/commands/btwCommand.test.d.ts +6 -0
  925. package/dist/src/ui/commands/btwCommand.test.js +338 -0
  926. package/dist/src/ui/commands/btwCommand.test.js.map +1 -0
  927. package/dist/src/ui/commands/bugCommand.d.ts +7 -0
  928. package/dist/src/ui/commands/bugCommand.js +54 -0
  929. package/dist/src/ui/commands/bugCommand.js.map +1 -0
  930. package/dist/src/ui/commands/clearCommand.d.ts +7 -0
  931. package/dist/src/ui/commands/clearCommand.js +122 -0
  932. package/dist/src/ui/commands/clearCommand.js.map +1 -0
  933. package/dist/src/ui/commands/compressCommand.d.ts +7 -0
  934. package/dist/src/ui/commands/compressCommand.js +178 -0
  935. package/dist/src/ui/commands/compressCommand.js.map +1 -0
  936. package/dist/src/ui/commands/contextCommand.d.ts +14 -0
  937. package/dist/src/ui/commands/contextCommand.js +443 -0
  938. package/dist/src/ui/commands/contextCommand.js.map +1 -0
  939. package/dist/src/ui/commands/contextCommand.test.d.ts +6 -0
  940. package/dist/src/ui/commands/contextCommand.test.js +184 -0
  941. package/dist/src/ui/commands/contextCommand.test.js.map +1 -0
  942. package/dist/src/ui/commands/copyCommand.d.ts +7 -0
  943. package/dist/src/ui/commands/copyCommand.js +374 -0
  944. package/dist/src/ui/commands/copyCommand.js.map +1 -0
  945. package/dist/src/ui/commands/deleteCommand.d.ts +7 -0
  946. package/dist/src/ui/commands/deleteCommand.js +19 -0
  947. package/dist/src/ui/commands/deleteCommand.js.map +1 -0
  948. package/dist/src/ui/commands/deleteCommand.test.d.ts +6 -0
  949. package/dist/src/ui/commands/deleteCommand.test.js +27 -0
  950. package/dist/src/ui/commands/deleteCommand.test.js.map +1 -0
  951. package/dist/src/ui/commands/diffCommand.d.ts +42 -0
  952. package/dist/src/ui/commands/diffCommand.js +206 -0
  953. package/dist/src/ui/commands/diffCommand.js.map +1 -0
  954. package/dist/src/ui/commands/diffCommand.test.d.ts +6 -0
  955. package/dist/src/ui/commands/diffCommand.test.js +482 -0
  956. package/dist/src/ui/commands/diffCommand.test.js.map +1 -0
  957. package/dist/src/ui/commands/directoryCommand.d.ts +13 -0
  958. package/dist/src/ui/commands/directoryCommand.js +252 -0
  959. package/dist/src/ui/commands/directoryCommand.js.map +1 -0
  960. package/dist/src/ui/commands/docsCommand.d.ts +7 -0
  961. package/dist/src/ui/commands/docsCommand.js +49 -0
  962. package/dist/src/ui/commands/docsCommand.js.map +1 -0
  963. package/dist/src/ui/commands/doctorCommand.d.ts +7 -0
  964. package/dist/src/ui/commands/doctorCommand.js +530 -0
  965. package/dist/src/ui/commands/doctorCommand.js.map +1 -0
  966. package/dist/src/ui/commands/doctorCommand.test.d.ts +6 -0
  967. package/dist/src/ui/commands/doctorCommand.test.js +804 -0
  968. package/dist/src/ui/commands/doctorCommand.test.js.map +1 -0
  969. package/dist/src/ui/commands/dreamCommand.d.ts +7 -0
  970. package/dist/src/ui/commands/dreamCommand.js +42 -0
  971. package/dist/src/ui/commands/dreamCommand.js.map +1 -0
  972. package/dist/src/ui/commands/dreamCommand.test.d.ts +6 -0
  973. package/dist/src/ui/commands/dreamCommand.test.js +39 -0
  974. package/dist/src/ui/commands/dreamCommand.test.js.map +1 -0
  975. package/dist/src/ui/commands/editorCommand.d.ts +7 -0
  976. package/dist/src/ui/commands/editorCommand.js +20 -0
  977. package/dist/src/ui/commands/editorCommand.js.map +1 -0
  978. package/dist/src/ui/commands/exportCommand.d.ts +10 -0
  979. package/dist/src/ui/commands/exportCommand.js +373 -0
  980. package/dist/src/ui/commands/exportCommand.js.map +1 -0
  981. package/dist/src/ui/commands/exportCommand.test.d.ts +6 -0
  982. package/dist/src/ui/commands/exportCommand.test.js +905 -0
  983. package/dist/src/ui/commands/exportCommand.test.js.map +1 -0
  984. package/dist/src/ui/commands/extensionsCommand.d.ts +10 -0
  985. package/dist/src/ui/commands/extensionsCommand.js +185 -0
  986. package/dist/src/ui/commands/extensionsCommand.js.map +1 -0
  987. package/dist/src/ui/commands/forgetCommand.d.ts +7 -0
  988. package/dist/src/ui/commands/forgetCommand.js +45 -0
  989. package/dist/src/ui/commands/forgetCommand.js.map +1 -0
  990. package/dist/src/ui/commands/forkCommand.d.ts +7 -0
  991. package/dist/src/ui/commands/forkCommand.js +163 -0
  992. package/dist/src/ui/commands/forkCommand.js.map +1 -0
  993. package/dist/src/ui/commands/forkCommand.test.d.ts +6 -0
  994. package/dist/src/ui/commands/forkCommand.test.js +229 -0
  995. package/dist/src/ui/commands/forkCommand.test.js.map +1 -0
  996. package/dist/src/ui/commands/goalCommand.d.ts +7 -0
  997. package/dist/src/ui/commands/goalCommand.js +181 -0
  998. package/dist/src/ui/commands/goalCommand.js.map +1 -0
  999. package/dist/src/ui/commands/goalCommand.test.d.ts +6 -0
  1000. package/dist/src/ui/commands/goalCommand.test.js +328 -0
  1001. package/dist/src/ui/commands/goalCommand.test.js.map +1 -0
  1002. package/dist/src/ui/commands/helpCommand.d.ts +7 -0
  1003. package/dist/src/ui/commands/helpCommand.js +21 -0
  1004. package/dist/src/ui/commands/helpCommand.js.map +1 -0
  1005. package/dist/src/ui/commands/hooksCommand.d.ts +7 -0
  1006. package/dist/src/ui/commands/hooksCommand.js +153 -0
  1007. package/dist/src/ui/commands/hooksCommand.js.map +1 -0
  1008. package/dist/src/ui/commands/hooksCommand.test.d.ts +6 -0
  1009. package/dist/src/ui/commands/hooksCommand.test.js +189 -0
  1010. package/dist/src/ui/commands/hooksCommand.test.js.map +1 -0
  1011. package/dist/src/ui/commands/ideCommand.d.ts +7 -0
  1012. package/dist/src/ui/commands/ideCommand.js +256 -0
  1013. package/dist/src/ui/commands/ideCommand.js.map +1 -0
  1014. package/dist/src/ui/commands/initCommand.d.ts +7 -0
  1015. package/dist/src/ui/commands/initCommand.js +119 -0
  1016. package/dist/src/ui/commands/initCommand.js.map +1 -0
  1017. package/dist/src/ui/commands/insightCommand.d.ts +7 -0
  1018. package/dist/src/ui/commands/insightCommand.js +195 -0
  1019. package/dist/src/ui/commands/insightCommand.js.map +1 -0
  1020. package/dist/src/ui/commands/insightCommand.test.d.ts +6 -0
  1021. package/dist/src/ui/commands/insightCommand.test.js +173 -0
  1022. package/dist/src/ui/commands/insightCommand.test.js.map +1 -0
  1023. package/dist/src/ui/commands/languageCommand.d.ts +7 -0
  1024. package/dist/src/ui/commands/languageCommand.js +291 -0
  1025. package/dist/src/ui/commands/languageCommand.js.map +1 -0
  1026. package/dist/src/ui/commands/languageCommand.test.d.ts +6 -0
  1027. package/dist/src/ui/commands/languageCommand.test.js +664 -0
  1028. package/dist/src/ui/commands/languageCommand.test.js.map +1 -0
  1029. package/dist/src/ui/commands/lspCommand.d.ts +7 -0
  1030. package/dist/src/ui/commands/lspCommand.js +62 -0
  1031. package/dist/src/ui/commands/lspCommand.js.map +1 -0
  1032. package/dist/src/ui/commands/lspCommand.test.d.ts +6 -0
  1033. package/dist/src/ui/commands/lspCommand.test.js +175 -0
  1034. package/dist/src/ui/commands/lspCommand.test.js.map +1 -0
  1035. package/dist/src/ui/commands/mcpCommand.d.ts +7 -0
  1036. package/dist/src/ui/commands/mcpCommand.js +21 -0
  1037. package/dist/src/ui/commands/mcpCommand.js.map +1 -0
  1038. package/dist/src/ui/commands/memoryCommand.d.ts +7 -0
  1039. package/dist/src/ui/commands/memoryCommand.js +21 -0
  1040. package/dist/src/ui/commands/memoryCommand.js.map +1 -0
  1041. package/dist/src/ui/commands/modelCommand.d.ts +7 -0
  1042. package/dist/src/ui/commands/modelCommand.js +226 -0
  1043. package/dist/src/ui/commands/modelCommand.js.map +1 -0
  1044. package/dist/src/ui/commands/modelCommand.test.d.ts +6 -0
  1045. package/dist/src/ui/commands/modelCommand.test.js +503 -0
  1046. package/dist/src/ui/commands/modelCommand.test.js.map +1 -0
  1047. package/dist/src/ui/commands/permissionsCommand.d.ts +7 -0
  1048. package/dist/src/ui/commands/permissionsCommand.js +20 -0
  1049. package/dist/src/ui/commands/permissionsCommand.js.map +1 -0
  1050. package/dist/src/ui/commands/permissionsCommand.test.d.ts +6 -0
  1051. package/dist/src/ui/commands/permissionsCommand.test.js +30 -0
  1052. package/dist/src/ui/commands/permissionsCommand.test.js.map +1 -0
  1053. package/dist/src/ui/commands/planCommand.d.ts +7 -0
  1054. package/dist/src/ui/commands/planCommand.js +88 -0
  1055. package/dist/src/ui/commands/planCommand.js.map +1 -0
  1056. package/dist/src/ui/commands/planCommand.test.d.ts +6 -0
  1057. package/dist/src/ui/commands/planCommand.test.js +113 -0
  1058. package/dist/src/ui/commands/planCommand.test.js.map +1 -0
  1059. package/dist/src/ui/commands/quitCommand.d.ts +7 -0
  1060. package/dist/src/ui/commands/quitCommand.js +38 -0
  1061. package/dist/src/ui/commands/quitCommand.js.map +1 -0
  1062. package/dist/src/ui/commands/recapCommand.d.ts +7 -0
  1063. package/dist/src/ui/commands/recapCommand.js +56 -0
  1064. package/dist/src/ui/commands/recapCommand.js.map +1 -0
  1065. package/dist/src/ui/commands/rememberCommand.d.ts +7 -0
  1066. package/dist/src/ui/commands/rememberCommand.js +54 -0
  1067. package/dist/src/ui/commands/rememberCommand.js.map +1 -0
  1068. package/dist/src/ui/commands/renameCommand.d.ts +7 -0
  1069. package/dist/src/ui/commands/renameCommand.js +208 -0
  1070. package/dist/src/ui/commands/renameCommand.js.map +1 -0
  1071. package/dist/src/ui/commands/renameCommand.test.d.ts +6 -0
  1072. package/dist/src/ui/commands/renameCommand.test.js +414 -0
  1073. package/dist/src/ui/commands/renameCommand.test.js.map +1 -0
  1074. package/dist/src/ui/commands/restoreCommand.d.ts +8 -0
  1075. package/dist/src/ui/commands/restoreCommand.js +159 -0
  1076. package/dist/src/ui/commands/restoreCommand.js.map +1 -0
  1077. package/dist/src/ui/commands/resumeCommand.d.ts +7 -0
  1078. package/dist/src/ui/commands/resumeCommand.js +65 -0
  1079. package/dist/src/ui/commands/resumeCommand.js.map +1 -0
  1080. package/dist/src/ui/commands/resumeCommand.test.d.ts +6 -0
  1081. package/dist/src/ui/commands/resumeCommand.test.js +135 -0
  1082. package/dist/src/ui/commands/resumeCommand.test.js.map +1 -0
  1083. package/dist/src/ui/commands/rewindCommand.d.ts +7 -0
  1084. package/dist/src/ui/commands/rewindCommand.js +20 -0
  1085. package/dist/src/ui/commands/rewindCommand.js.map +1 -0
  1086. package/dist/src/ui/commands/settingsCommand.d.ts +7 -0
  1087. package/dist/src/ui/commands/settingsCommand.js +20 -0
  1088. package/dist/src/ui/commands/settingsCommand.js.map +1 -0
  1089. package/dist/src/ui/commands/setupGithubCommand.d.ts +9 -0
  1090. package/dist/src/ui/commands/setupGithubCommand.js +165 -0
  1091. package/dist/src/ui/commands/setupGithubCommand.js.map +1 -0
  1092. package/dist/src/ui/commands/setupGithubCommand.test.d.ts +6 -0
  1093. package/dist/src/ui/commands/setupGithubCommand.test.js +164 -0
  1094. package/dist/src/ui/commands/setupGithubCommand.test.js.map +1 -0
  1095. package/dist/src/ui/commands/skillsCommand.d.ts +7 -0
  1096. package/dist/src/ui/commands/skillsCommand.js +63 -0
  1097. package/dist/src/ui/commands/skillsCommand.js.map +1 -0
  1098. package/dist/src/ui/commands/skillsCommand.test.d.ts +6 -0
  1099. package/dist/src/ui/commands/skillsCommand.test.js +136 -0
  1100. package/dist/src/ui/commands/skillsCommand.test.js.map +1 -0
  1101. package/dist/src/ui/commands/statsCommand.d.ts +7 -0
  1102. package/dist/src/ui/commands/statsCommand.js +130 -0
  1103. package/dist/src/ui/commands/statsCommand.js.map +1 -0
  1104. package/dist/src/ui/commands/statuslineCommand.d.ts +7 -0
  1105. package/dist/src/ui/commands/statuslineCommand.js +33 -0
  1106. package/dist/src/ui/commands/statuslineCommand.js.map +1 -0
  1107. package/dist/src/ui/commands/statuslineCommand.test.d.ts +6 -0
  1108. package/dist/src/ui/commands/statuslineCommand.test.js +54 -0
  1109. package/dist/src/ui/commands/statuslineCommand.test.js.map +1 -0
  1110. package/dist/src/ui/commands/summaryCommand.d.ts +7 -0
  1111. package/dist/src/ui/commands/summaryCommand.js +261 -0
  1112. package/dist/src/ui/commands/summaryCommand.js.map +1 -0
  1113. package/dist/src/ui/commands/tasksCommand.d.ts +7 -0
  1114. package/dist/src/ui/commands/tasksCommand.js +222 -0
  1115. package/dist/src/ui/commands/tasksCommand.js.map +1 -0
  1116. package/dist/src/ui/commands/tasksCommand.test.d.ts +6 -0
  1117. package/dist/src/ui/commands/tasksCommand.test.js +365 -0
  1118. package/dist/src/ui/commands/tasksCommand.test.js.map +1 -0
  1119. package/dist/src/ui/commands/terminalSetupCommand.d.ts +13 -0
  1120. package/dist/src/ui/commands/terminalSetupCommand.js +48 -0
  1121. package/dist/src/ui/commands/terminalSetupCommand.js.map +1 -0
  1122. package/dist/src/ui/commands/themeCommand.d.ts +7 -0
  1123. package/dist/src/ui/commands/themeCommand.js +20 -0
  1124. package/dist/src/ui/commands/themeCommand.js.map +1 -0
  1125. package/dist/src/ui/commands/toolsCommand.d.ts +7 -0
  1126. package/dist/src/ui/commands/toolsCommand.js +45 -0
  1127. package/dist/src/ui/commands/toolsCommand.js.map +1 -0
  1128. package/dist/src/ui/commands/trustCommand.d.ts +7 -0
  1129. package/dist/src/ui/commands/trustCommand.js +20 -0
  1130. package/dist/src/ui/commands/trustCommand.js.map +1 -0
  1131. package/dist/src/ui/commands/trustCommand.test.d.ts +6 -0
  1132. package/dist/src/ui/commands/trustCommand.test.js +30 -0
  1133. package/dist/src/ui/commands/trustCommand.test.js.map +1 -0
  1134. package/dist/src/ui/commands/types.d.ts +298 -0
  1135. package/dist/src/ui/commands/types.js +13 -0
  1136. package/dist/src/ui/commands/types.js.map +1 -0
  1137. package/dist/src/ui/commands/vimCommand.d.ts +7 -0
  1138. package/dist/src/ui/commands/vimCommand.js +27 -0
  1139. package/dist/src/ui/commands/vimCommand.js.map +1 -0
  1140. package/dist/src/ui/components/AboutBox.d.ts +12 -0
  1141. package/dist/src/ui/components/AboutBox.js +10 -0
  1142. package/dist/src/ui/components/AboutBox.js.map +1 -0
  1143. package/dist/src/ui/components/AnsiOutput.d.ts +20 -0
  1144. package/dist/src/ui/components/AnsiOutput.js +27 -0
  1145. package/dist/src/ui/components/AnsiOutput.js.map +1 -0
  1146. package/dist/src/ui/components/AnsiOutput.test.d.ts +6 -0
  1147. package/dist/src/ui/components/AnsiOutput.test.js +134 -0
  1148. package/dist/src/ui/components/AnsiOutput.test.js.map +1 -0
  1149. package/dist/src/ui/components/ApiKeyInput.d.ts +22 -0
  1150. package/dist/src/ui/components/ApiKeyInput.js +35 -0
  1151. package/dist/src/ui/components/ApiKeyInput.js.map +1 -0
  1152. package/dist/src/ui/components/AppHeader.d.ts +10 -0
  1153. package/dist/src/ui/components/AppHeader.js +49 -0
  1154. package/dist/src/ui/components/AppHeader.js.map +1 -0
  1155. package/dist/src/ui/components/AppHeader.test.d.ts +6 -0
  1156. package/dist/src/ui/components/AppHeader.test.js +109 -0
  1157. package/dist/src/ui/components/AppHeader.test.js.map +1 -0
  1158. package/dist/src/ui/components/ApprovalModeDialog.d.ts +21 -0
  1159. package/dist/src/ui/components/ApprovalModeDialog.js +109 -0
  1160. package/dist/src/ui/components/ApprovalModeDialog.js.map +1 -0
  1161. package/dist/src/ui/components/ApprovalModeDialog.test.d.ts +6 -0
  1162. package/dist/src/ui/components/ApprovalModeDialog.test.js +63 -0
  1163. package/dist/src/ui/components/ApprovalModeDialog.test.js.map +1 -0
  1164. package/dist/src/ui/components/AsciiArt.d.ts +1 -0
  1165. package/dist/src/ui/components/AsciiArt.js +54 -0
  1166. package/dist/src/ui/components/AsciiArt.js.map +1 -0
  1167. package/dist/src/ui/components/AutoAcceptIndicator.d.ts +12 -0
  1168. package/dist/src/ui/components/AutoAcceptIndicator.js +37 -0
  1169. package/dist/src/ui/components/AutoAcceptIndicator.js.map +1 -0
  1170. package/dist/src/ui/components/BaseTextInput.d.ts +74 -0
  1171. package/dist/src/ui/components/BaseTextInput.js +144 -0
  1172. package/dist/src/ui/components/BaseTextInput.js.map +1 -0
  1173. package/dist/src/ui/components/BaseTextInput.test.d.ts +6 -0
  1174. package/dist/src/ui/components/BaseTextInput.test.js +78 -0
  1175. package/dist/src/ui/components/BaseTextInput.test.js.map +1 -0
  1176. package/dist/src/ui/components/Composer.d.ts +6 -0
  1177. package/dist/src/ui/components/Composer.js +92 -0
  1178. package/dist/src/ui/components/Composer.js.map +1 -0
  1179. package/dist/src/ui/components/Composer.test.d.ts +6 -0
  1180. package/dist/src/ui/components/Composer.test.js +344 -0
  1181. package/dist/src/ui/components/Composer.test.js.map +1 -0
  1182. package/dist/src/ui/components/ConsentPrompt.d.ts +14 -0
  1183. package/dist/src/ui/components/ConsentPrompt.js +35 -0
  1184. package/dist/src/ui/components/ConsentPrompt.js.map +1 -0
  1185. package/dist/src/ui/components/ConsentPrompt.test.d.ts +6 -0
  1186. package/dist/src/ui/components/ConsentPrompt.test.js +110 -0
  1187. package/dist/src/ui/components/ConsentPrompt.test.js.map +1 -0
  1188. package/dist/src/ui/components/ContextSummaryDisplay.d.ts +20 -0
  1189. package/dist/src/ui/components/ContextSummaryDisplay.js +90 -0
  1190. package/dist/src/ui/components/ContextSummaryDisplay.js.map +1 -0
  1191. package/dist/src/ui/components/ContextUsageDisplay.d.ts +10 -0
  1192. package/dist/src/ui/components/ContextUsageDisplay.js +33 -0
  1193. package/dist/src/ui/components/ContextUsageDisplay.js.map +1 -0
  1194. package/dist/src/ui/components/DebugModeNotification.d.ts +9 -0
  1195. package/dist/src/ui/components/DebugModeNotification.js +23 -0
  1196. package/dist/src/ui/components/DebugModeNotification.js.map +1 -0
  1197. package/dist/src/ui/components/DebugProfiler.d.ts +6 -0
  1198. package/dist/src/ui/components/DebugProfiler.js +27 -0
  1199. package/dist/src/ui/components/DebugProfiler.js.map +1 -0
  1200. package/dist/src/ui/components/DialogManager.d.ts +12 -0
  1201. package/dist/src/ui/components/DialogManager.js +247 -0
  1202. package/dist/src/ui/components/DialogManager.js.map +1 -0
  1203. package/dist/src/ui/components/DiffDialog.d.ts +15 -0
  1204. package/dist/src/ui/components/DiffDialog.js +412 -0
  1205. package/dist/src/ui/components/DiffDialog.js.map +1 -0
  1206. package/dist/src/ui/components/EditorSettingsDialog.d.ts +16 -0
  1207. package/dist/src/ui/components/EditorSettingsDialog.js +76 -0
  1208. package/dist/src/ui/components/EditorSettingsDialog.js.map +1 -0
  1209. package/dist/src/ui/components/ExitWarning.d.ts +7 -0
  1210. package/dist/src/ui/components/ExitWarning.js +9 -0
  1211. package/dist/src/ui/components/ExitWarning.js.map +1 -0
  1212. package/dist/src/ui/components/ExternalAuthProgress.d.ts +14 -0
  1213. package/dist/src/ui/components/ExternalAuthProgress.js +14 -0
  1214. package/dist/src/ui/components/ExternalAuthProgress.js.map +1 -0
  1215. package/dist/src/ui/components/ExternalAuthProgress.test.d.ts +6 -0
  1216. package/dist/src/ui/components/ExternalAuthProgress.test.js +20 -0
  1217. package/dist/src/ui/components/ExternalAuthProgress.test.js.map +1 -0
  1218. package/dist/src/ui/components/FolderTrustDialog.d.ts +17 -0
  1219. package/dist/src/ui/components/FolderTrustDialog.js +58 -0
  1220. package/dist/src/ui/components/FolderTrustDialog.js.map +1 -0
  1221. package/dist/src/ui/components/FolderTrustDialog.test.d.ts +6 -0
  1222. package/dist/src/ui/components/FolderTrustDialog.test.js +88 -0
  1223. package/dist/src/ui/components/FolderTrustDialog.test.js.map +1 -0
  1224. package/dist/src/ui/components/Footer.d.ts +7 -0
  1225. package/dist/src/ui/components/Footer.js +104 -0
  1226. package/dist/src/ui/components/Footer.js.map +1 -0
  1227. package/dist/src/ui/components/GeminiRespondingSpinner.d.ts +22 -0
  1228. package/dist/src/ui/components/GeminiRespondingSpinner.js +47 -0
  1229. package/dist/src/ui/components/GeminiRespondingSpinner.js.map +1 -0
  1230. package/dist/src/ui/components/GeminiRespondingSpinner.test.d.ts +6 -0
  1231. package/dist/src/ui/components/GeminiRespondingSpinner.test.js +29 -0
  1232. package/dist/src/ui/components/GeminiRespondingSpinner.test.js.map +1 -0
  1233. package/dist/src/ui/components/GoalPill.d.ts +25 -0
  1234. package/dist/src/ui/components/GoalPill.js +77 -0
  1235. package/dist/src/ui/components/GoalPill.js.map +1 -0
  1236. package/dist/src/ui/components/GoalPill.test.d.ts +6 -0
  1237. package/dist/src/ui/components/GoalPill.test.js +56 -0
  1238. package/dist/src/ui/components/GoalPill.test.js.map +1 -0
  1239. package/dist/src/ui/components/Header.d.ts +62 -0
  1240. package/dist/src/ui/components/Header.js +155 -0
  1241. package/dist/src/ui/components/Header.js.map +1 -0
  1242. package/dist/src/ui/components/Header.test.d.ts +6 -0
  1243. package/dist/src/ui/components/Header.test.js +142 -0
  1244. package/dist/src/ui/components/Header.test.js.map +1 -0
  1245. package/dist/src/ui/components/Help.d.ts +18 -0
  1246. package/dist/src/ui/components/Help.js +236 -0
  1247. package/dist/src/ui/components/Help.js.map +1 -0
  1248. package/dist/src/ui/components/Help.test.d.ts +6 -0
  1249. package/dist/src/ui/components/Help.test.js +243 -0
  1250. package/dist/src/ui/components/Help.test.js.map +1 -0
  1251. package/dist/src/ui/components/HistoryItemDisplay.d.ts +39 -0
  1252. package/dist/src/ui/components/HistoryItemDisplay.js +51 -0
  1253. package/dist/src/ui/components/HistoryItemDisplay.js.map +1 -0
  1254. package/dist/src/ui/components/HistoryItemDisplay.test.d.ts +6 -0
  1255. package/dist/src/ui/components/HistoryItemDisplay.test.js +197 -0
  1256. package/dist/src/ui/components/HistoryItemDisplay.test.js.map +1 -0
  1257. package/dist/src/ui/components/IdeTrustChangeDialog.d.ts +11 -0
  1258. package/dist/src/ui/components/IdeTrustChangeDialog.js +34 -0
  1259. package/dist/src/ui/components/IdeTrustChangeDialog.js.map +1 -0
  1260. package/dist/src/ui/components/IdeTrustChangeDialog.test.d.ts +6 -0
  1261. package/dist/src/ui/components/IdeTrustChangeDialog.test.js +53 -0
  1262. package/dist/src/ui/components/IdeTrustChangeDialog.test.js.map +1 -0
  1263. package/dist/src/ui/components/InputPrompt.d.ts +63 -0
  1264. package/dist/src/ui/components/InputPrompt.js +1220 -0
  1265. package/dist/src/ui/components/InputPrompt.js.map +1 -0
  1266. package/dist/src/ui/components/KeyboardShortcuts.d.ts +7 -0
  1267. package/dist/src/ui/components/KeyboardShortcuts.js +78 -0
  1268. package/dist/src/ui/components/KeyboardShortcuts.js.map +1 -0
  1269. package/dist/src/ui/components/LoadingIndicator.d.ts +31 -0
  1270. package/dist/src/ui/components/LoadingIndicator.js +46 -0
  1271. package/dist/src/ui/components/LoadingIndicator.js.map +1 -0
  1272. package/dist/src/ui/components/LoadingIndicator.test.d.ts +6 -0
  1273. package/dist/src/ui/components/LoadingIndicator.test.js +246 -0
  1274. package/dist/src/ui/components/LoadingIndicator.test.js.map +1 -0
  1275. package/dist/src/ui/components/LoopDetectionConfirmation.d.ts +13 -0
  1276. package/dist/src/ui/components/LoopDetectionConfirmation.js +37 -0
  1277. package/dist/src/ui/components/LoopDetectionConfirmation.js.map +1 -0
  1278. package/dist/src/ui/components/LoopDetectionConfirmation.test.d.ts +6 -0
  1279. package/dist/src/ui/components/LoopDetectionConfirmation.test.js +28 -0
  1280. package/dist/src/ui/components/LoopDetectionConfirmation.test.js.map +1 -0
  1281. package/dist/src/ui/components/MainContent.d.ts +6 -0
  1282. package/dist/src/ui/components/MainContent.js +437 -0
  1283. package/dist/src/ui/components/MainContent.js.map +1 -0
  1284. package/dist/src/ui/components/MainContent.test.d.ts +6 -0
  1285. package/dist/src/ui/components/MainContent.test.js +621 -0
  1286. package/dist/src/ui/components/MainContent.test.js.map +1 -0
  1287. package/dist/src/ui/components/MemoryDialog.d.ts +10 -0
  1288. package/dist/src/ui/components/MemoryDialog.js +288 -0
  1289. package/dist/src/ui/components/MemoryDialog.js.map +1 -0
  1290. package/dist/src/ui/components/MemoryDialog.test.d.ts +6 -0
  1291. package/dist/src/ui/components/MemoryDialog.test.js +165 -0
  1292. package/dist/src/ui/components/MemoryDialog.test.js.map +1 -0
  1293. package/dist/src/ui/components/MemoryUsageDisplay.d.ts +7 -0
  1294. package/dist/src/ui/components/MemoryUsageDisplay.js +24 -0
  1295. package/dist/src/ui/components/MemoryUsageDisplay.js.map +1 -0
  1296. package/dist/src/ui/components/ModelDialog.d.ts +12 -0
  1297. package/dist/src/ui/components/ModelDialog.js +390 -0
  1298. package/dist/src/ui/components/ModelDialog.js.map +1 -0
  1299. package/dist/src/ui/components/ModelDialog.test.d.ts +6 -0
  1300. package/dist/src/ui/components/ModelDialog.test.js +489 -0
  1301. package/dist/src/ui/components/ModelDialog.test.js.map +1 -0
  1302. package/dist/src/ui/components/ModelStatsDisplay.d.ts +11 -0
  1303. package/dist/src/ui/components/ModelStatsDisplay.js +61 -0
  1304. package/dist/src/ui/components/ModelStatsDisplay.js.map +1 -0
  1305. package/dist/src/ui/components/Notifications.d.ts +6 -0
  1306. package/dist/src/ui/components/Notifications.js +20 -0
  1307. package/dist/src/ui/components/Notifications.js.map +1 -0
  1308. package/dist/src/ui/components/PermissionsDialog.d.ts +11 -0
  1309. package/dist/src/ui/components/PermissionsDialog.js +547 -0
  1310. package/dist/src/ui/components/PermissionsDialog.js.map +1 -0
  1311. package/dist/src/ui/components/PlanSummaryDisplay.d.ts +14 -0
  1312. package/dist/src/ui/components/PlanSummaryDisplay.js +10 -0
  1313. package/dist/src/ui/components/PlanSummaryDisplay.js.map +1 -0
  1314. package/dist/src/ui/components/PluginChoicePrompt.d.ts +18 -0
  1315. package/dist/src/ui/components/PluginChoicePrompt.js +96 -0
  1316. package/dist/src/ui/components/PluginChoicePrompt.js.map +1 -0
  1317. package/dist/src/ui/components/PluginChoicePrompt.test.d.ts +6 -0
  1318. package/dist/src/ui/components/PluginChoicePrompt.test.js +136 -0
  1319. package/dist/src/ui/components/PluginChoicePrompt.test.js.map +1 -0
  1320. package/dist/src/ui/components/PrepareLabel.d.ts +15 -0
  1321. package/dist/src/ui/components/PrepareLabel.js +72 -0
  1322. package/dist/src/ui/components/PrepareLabel.js.map +1 -0
  1323. package/dist/src/ui/components/PrepareLabel.test.d.ts +6 -0
  1324. package/dist/src/ui/components/PrepareLabel.test.js +71 -0
  1325. package/dist/src/ui/components/PrepareLabel.test.js.map +1 -0
  1326. package/dist/src/ui/components/ProviderUpdatePrompt.d.ts +12 -0
  1327. package/dist/src/ui/components/ProviderUpdatePrompt.js +49 -0
  1328. package/dist/src/ui/components/ProviderUpdatePrompt.js.map +1 -0
  1329. package/dist/src/ui/components/QueuedMessageDisplay.d.ts +9 -0
  1330. package/dist/src/ui/components/QueuedMessageDisplay.js +35 -0
  1331. package/dist/src/ui/components/QueuedMessageDisplay.js.map +1 -0
  1332. package/dist/src/ui/components/QueuedMessageDisplay.test.d.ts +6 -0
  1333. package/dist/src/ui/components/QueuedMessageDisplay.test.js +76 -0
  1334. package/dist/src/ui/components/QueuedMessageDisplay.test.js.map +1 -0
  1335. package/dist/src/ui/components/QuittingDisplay.d.ts +6 -0
  1336. package/dist/src/ui/components/QuittingDisplay.js +21 -0
  1337. package/dist/src/ui/components/QuittingDisplay.js.map +1 -0
  1338. package/dist/src/ui/components/QwenOAuthProgress.d.ts +16 -0
  1339. package/dist/src/ui/components/QwenOAuthProgress.js +65 -0
  1340. package/dist/src/ui/components/QwenOAuthProgress.js.map +1 -0
  1341. package/dist/src/ui/components/QwenOAuthProgress.test.d.ts +6 -0
  1342. package/dist/src/ui/components/QwenOAuthProgress.test.js +287 -0
  1343. package/dist/src/ui/components/QwenOAuthProgress.test.js.map +1 -0
  1344. package/dist/src/ui/components/RewindSelector.d.ts +22 -0
  1345. package/dist/src/ui/components/RewindSelector.js +264 -0
  1346. package/dist/src/ui/components/RewindSelector.js.map +1 -0
  1347. package/dist/src/ui/components/RewindSelector.test.d.ts +6 -0
  1348. package/dist/src/ui/components/RewindSelector.test.js +146 -0
  1349. package/dist/src/ui/components/RewindSelector.test.js.map +1 -0
  1350. package/dist/src/ui/components/SessionPicker.d.ts +55 -0
  1351. package/dist/src/ui/components/SessionPicker.js +142 -0
  1352. package/dist/src/ui/components/SessionPicker.js.map +1 -0
  1353. package/dist/src/ui/components/SessionPreview.d.ts +20 -0
  1354. package/dist/src/ui/components/SessionPreview.js +97 -0
  1355. package/dist/src/ui/components/SessionPreview.js.map +1 -0
  1356. package/dist/src/ui/components/SessionPreview.test.d.ts +1 -0
  1357. package/dist/src/ui/components/SessionPreview.test.js +124 -0
  1358. package/dist/src/ui/components/SessionPreview.test.js.map +1 -0
  1359. package/dist/src/ui/components/SessionSummaryDisplay.d.ts +12 -0
  1360. package/dist/src/ui/components/SessionSummaryDisplay.js +17 -0
  1361. package/dist/src/ui/components/SessionSummaryDisplay.js.map +1 -0
  1362. package/dist/src/ui/components/SettingInputPrompt.d.ts +15 -0
  1363. package/dist/src/ui/components/SettingInputPrompt.js +63 -0
  1364. package/dist/src/ui/components/SettingInputPrompt.js.map +1 -0
  1365. package/dist/src/ui/components/SettingInputPrompt.test.d.ts +6 -0
  1366. package/dist/src/ui/components/SettingInputPrompt.test.js +60 -0
  1367. package/dist/src/ui/components/SettingInputPrompt.test.js.map +1 -0
  1368. package/dist/src/ui/components/SettingsCorruptedDialog.d.ts +14 -0
  1369. package/dist/src/ui/components/SettingsCorruptedDialog.js +44 -0
  1370. package/dist/src/ui/components/SettingsCorruptedDialog.js.map +1 -0
  1371. package/dist/src/ui/components/SettingsCorruptedDialog.test.d.ts +6 -0
  1372. package/dist/src/ui/components/SettingsCorruptedDialog.test.js +162 -0
  1373. package/dist/src/ui/components/SettingsCorruptedDialog.test.js.map +1 -0
  1374. package/dist/src/ui/components/SettingsDialog.d.ts +18 -0
  1375. package/dist/src/ui/components/SettingsDialog.js +658 -0
  1376. package/dist/src/ui/components/SettingsDialog.js.map +1 -0
  1377. package/dist/src/ui/components/SettingsDialog.test.d.ts +6 -0
  1378. package/dist/src/ui/components/SettingsDialog.test.js +1127 -0
  1379. package/dist/src/ui/components/SettingsDialog.test.js.map +1 -0
  1380. package/dist/src/ui/components/ShellConfirmationDialog.d.ts +17 -0
  1381. package/dist/src/ui/components/ShellConfirmationDialog.js +75 -0
  1382. package/dist/src/ui/components/ShellConfirmationDialog.js.map +1 -0
  1383. package/dist/src/ui/components/ShellConfirmationDialog.test.d.ts +6 -0
  1384. package/dist/src/ui/components/ShellConfirmationDialog.test.js +167 -0
  1385. package/dist/src/ui/components/ShellConfirmationDialog.test.js.map +1 -0
  1386. package/dist/src/ui/components/ShellInputPrompt.d.ts +11 -0
  1387. package/dist/src/ui/components/ShellInputPrompt.js +42 -0
  1388. package/dist/src/ui/components/ShellInputPrompt.js.map +1 -0
  1389. package/dist/src/ui/components/ShellModeIndicator.d.ts +7 -0
  1390. package/dist/src/ui/components/ShellModeIndicator.js +5 -0
  1391. package/dist/src/ui/components/ShellModeIndicator.js.map +1 -0
  1392. package/dist/src/ui/components/ShowMoreLines.d.ts +10 -0
  1393. package/dist/src/ui/components/ShowMoreLines.js +24 -0
  1394. package/dist/src/ui/components/ShowMoreLines.js.map +1 -0
  1395. package/dist/src/ui/components/StandaloneSessionPicker.d.ts +11 -0
  1396. package/dist/src/ui/components/StandaloneSessionPicker.js +105 -0
  1397. package/dist/src/ui/components/StandaloneSessionPicker.js.map +1 -0
  1398. package/dist/src/ui/components/StandaloneSessionPicker.test.d.ts +6 -0
  1399. package/dist/src/ui/components/StandaloneSessionPicker.test.js +667 -0
  1400. package/dist/src/ui/components/StandaloneSessionPicker.test.js.map +1 -0
  1401. package/dist/src/ui/components/StatsActivityTab.d.ts +14 -0
  1402. package/dist/src/ui/components/StatsActivityTab.js +85 -0
  1403. package/dist/src/ui/components/StatsActivityTab.js.map +1 -0
  1404. package/dist/src/ui/components/StatsDialog.d.ts +12 -0
  1405. package/dist/src/ui/components/StatsDialog.js +104 -0
  1406. package/dist/src/ui/components/StatsDialog.js.map +1 -0
  1407. package/dist/src/ui/components/StatsDisplay.d.ts +13 -0
  1408. package/dist/src/ui/components/StatsDisplay.js +52 -0
  1409. package/dist/src/ui/components/StatsDisplay.js.map +1 -0
  1410. package/dist/src/ui/components/StatsEfficiencyTab.d.ts +11 -0
  1411. package/dist/src/ui/components/StatsEfficiencyTab.js +99 -0
  1412. package/dist/src/ui/components/StatsEfficiencyTab.js.map +1 -0
  1413. package/dist/src/ui/components/StatsHeatmapView.d.ts +12 -0
  1414. package/dist/src/ui/components/StatsHeatmapView.js +40 -0
  1415. package/dist/src/ui/components/StatsHeatmapView.js.map +1 -0
  1416. package/dist/src/ui/components/StatsSessionTab.d.ts +7 -0
  1417. package/dist/src/ui/components/StatsSessionTab.js +40 -0
  1418. package/dist/src/ui/components/StatsSessionTab.js.map +1 -0
  1419. package/dist/src/ui/components/StatusLineDialog.d.ts +22 -0
  1420. package/dist/src/ui/components/StatusLineDialog.js +140 -0
  1421. package/dist/src/ui/components/StatusLineDialog.js.map +1 -0
  1422. package/dist/src/ui/components/StatusLineDialog.test.d.ts +6 -0
  1423. package/dist/src/ui/components/StatusLineDialog.test.js +180 -0
  1424. package/dist/src/ui/components/StatusLineDialog.test.js.map +1 -0
  1425. package/dist/src/ui/components/StickyTodoList.d.ts +14 -0
  1426. package/dist/src/ui/components/StickyTodoList.js +45 -0
  1427. package/dist/src/ui/components/StickyTodoList.js.map +1 -0
  1428. package/dist/src/ui/components/StickyTodoList.test.d.ts +6 -0
  1429. package/dist/src/ui/components/StickyTodoList.test.js +128 -0
  1430. package/dist/src/ui/components/StickyTodoList.test.js.map +1 -0
  1431. package/dist/src/ui/components/SuggestionsDisplay.d.ts +47 -0
  1432. package/dist/src/ui/components/SuggestionsDisplay.js +43 -0
  1433. package/dist/src/ui/components/SuggestionsDisplay.js.map +1 -0
  1434. package/dist/src/ui/components/SuggestionsDisplay.test.d.ts +6 -0
  1435. package/dist/src/ui/components/SuggestionsDisplay.test.js +39 -0
  1436. package/dist/src/ui/components/SuggestionsDisplay.test.js.map +1 -0
  1437. package/dist/src/ui/components/ThemeDialog.d.ts +20 -0
  1438. package/dist/src/ui/components/ThemeDialog.js +137 -0
  1439. package/dist/src/ui/components/ThemeDialog.js.map +1 -0
  1440. package/dist/src/ui/components/ThemeDialog.test.d.ts +6 -0
  1441. package/dist/src/ui/components/ThemeDialog.test.js +75 -0
  1442. package/dist/src/ui/components/ThemeDialog.test.js.map +1 -0
  1443. package/dist/src/ui/components/ThinkingDots.d.ts +11 -0
  1444. package/dist/src/ui/components/ThinkingDots.js +47 -0
  1445. package/dist/src/ui/components/ThinkingDots.js.map +1 -0
  1446. package/dist/src/ui/components/ThinkingIndicator.d.ts +7 -0
  1447. package/dist/src/ui/components/ThinkingIndicator.js +13 -0
  1448. package/dist/src/ui/components/ThinkingIndicator.js.map +1 -0
  1449. package/dist/src/ui/components/Tips.d.ts +6 -0
  1450. package/dist/src/ui/components/Tips.js +37 -0
  1451. package/dist/src/ui/components/Tips.js.map +1 -0
  1452. package/dist/src/ui/components/Tips.test.d.ts +6 -0
  1453. package/dist/src/ui/components/Tips.test.js +145 -0
  1454. package/dist/src/ui/components/Tips.test.js.map +1 -0
  1455. package/dist/src/ui/components/TodoDisplay.d.ts +16 -0
  1456. package/dist/src/ui/components/TodoDisplay.js +27 -0
  1457. package/dist/src/ui/components/TodoDisplay.js.map +1 -0
  1458. package/dist/src/ui/components/TodoDisplay.test.d.ts +6 -0
  1459. package/dist/src/ui/components/TodoDisplay.test.js +77 -0
  1460. package/dist/src/ui/components/TodoDisplay.test.js.map +1 -0
  1461. package/dist/src/ui/components/ToolStatsDisplay.d.ts +11 -0
  1462. package/dist/src/ui/components/ToolStatsDisplay.js +42 -0
  1463. package/dist/src/ui/components/ToolStatsDisplay.js.map +1 -0
  1464. package/dist/src/ui/components/TrustDialog.d.ts +13 -0
  1465. package/dist/src/ui/components/TrustDialog.js +48 -0
  1466. package/dist/src/ui/components/TrustDialog.js.map +1 -0
  1467. package/dist/src/ui/components/TrustDialog.test.d.ts +6 -0
  1468. package/dist/src/ui/components/TrustDialog.test.js +154 -0
  1469. package/dist/src/ui/components/TrustDialog.test.js.map +1 -0
  1470. package/dist/src/ui/components/UpdateNotification.d.ts +10 -0
  1471. package/dist/src/ui/components/UpdateNotification.js +10 -0
  1472. package/dist/src/ui/components/UpdateNotification.js.map +1 -0
  1473. package/dist/src/ui/components/WelcomeBackDialog.d.ts +13 -0
  1474. package/dist/src/ui/components/WelcomeBackDialog.js +43 -0
  1475. package/dist/src/ui/components/WelcomeBackDialog.js.map +1 -0
  1476. package/dist/src/ui/components/WorktreeExitDialog.d.ts +26 -0
  1477. package/dist/src/ui/components/WorktreeExitDialog.js +134 -0
  1478. package/dist/src/ui/components/WorktreeExitDialog.js.map +1 -0
  1479. package/dist/src/ui/components/WorktreeExitDialog.test.d.ts +6 -0
  1480. package/dist/src/ui/components/WorktreeExitDialog.test.js +41 -0
  1481. package/dist/src/ui/components/WorktreeExitDialog.test.js.map +1 -0
  1482. package/dist/src/ui/components/agent-view/AgentChatContent.d.ts +27 -0
  1483. package/dist/src/ui/components/agent-view/AgentChatContent.js +150 -0
  1484. package/dist/src/ui/components/agent-view/AgentChatContent.js.map +1 -0
  1485. package/dist/src/ui/components/agent-view/AgentChatView.d.ts +10 -0
  1486. package/dist/src/ui/components/agent-view/AgentChatView.js +24 -0
  1487. package/dist/src/ui/components/agent-view/AgentChatView.js.map +1 -0
  1488. package/dist/src/ui/components/agent-view/AgentComposer.d.ts +10 -0
  1489. package/dist/src/ui/components/agent-view/AgentComposer.js +183 -0
  1490. package/dist/src/ui/components/agent-view/AgentComposer.js.map +1 -0
  1491. package/dist/src/ui/components/agent-view/AgentFooter.d.ts +20 -0
  1492. package/dist/src/ui/components/agent-view/AgentFooter.js +15 -0
  1493. package/dist/src/ui/components/agent-view/AgentFooter.js.map +1 -0
  1494. package/dist/src/ui/components/agent-view/AgentHeader.d.ts +19 -0
  1495. package/dist/src/ui/components/agent-view/AgentHeader.js +13 -0
  1496. package/dist/src/ui/components/agent-view/AgentHeader.js.map +1 -0
  1497. package/dist/src/ui/components/agent-view/AgentTabBar.d.ts +6 -0
  1498. package/dist/src/ui/components/agent-view/AgentTabBar.js +110 -0
  1499. package/dist/src/ui/components/agent-view/AgentTabBar.js.map +1 -0
  1500. package/dist/src/ui/components/agent-view/AgentTabBar.test.d.ts +6 -0
  1501. package/dist/src/ui/components/agent-view/AgentTabBar.test.js +90 -0
  1502. package/dist/src/ui/components/agent-view/AgentTabBar.test.js.map +1 -0
  1503. package/dist/src/ui/components/agent-view/agentHistoryAdapter.d.ts +31 -0
  1504. package/dist/src/ui/components/agent-view/agentHistoryAdapter.js +148 -0
  1505. package/dist/src/ui/components/agent-view/agentHistoryAdapter.js.map +1 -0
  1506. package/dist/src/ui/components/agent-view/agentHistoryAdapter.test.d.ts +6 -0
  1507. package/dist/src/ui/components/agent-view/agentHistoryAdapter.test.js +318 -0
  1508. package/dist/src/ui/components/agent-view/agentHistoryAdapter.test.js.map +1 -0
  1509. package/dist/src/ui/components/agent-view/index.d.ts +11 -0
  1510. package/dist/src/ui/components/agent-view/index.js +12 -0
  1511. package/dist/src/ui/components/agent-view/index.js.map +1 -0
  1512. package/dist/src/ui/components/approvalModeVisuals.d.ts +11 -0
  1513. package/dist/src/ui/components/approvalModeVisuals.js +37 -0
  1514. package/dist/src/ui/components/approvalModeVisuals.js.map +1 -0
  1515. package/dist/src/ui/components/approvalModeVisuals.test.d.ts +6 -0
  1516. package/dist/src/ui/components/approvalModeVisuals.test.js +32 -0
  1517. package/dist/src/ui/components/approvalModeVisuals.test.js.map +1 -0
  1518. package/dist/src/ui/components/arena/ArenaCards.d.ts +21 -0
  1519. package/dist/src/ui/components/arena/ArenaCards.js +99 -0
  1520. package/dist/src/ui/components/arena/ArenaCards.js.map +1 -0
  1521. package/dist/src/ui/components/arena/ArenaCards.test.d.ts +6 -0
  1522. package/dist/src/ui/components/arena/ArenaCards.test.js +128 -0
  1523. package/dist/src/ui/components/arena/ArenaCards.test.js.map +1 -0
  1524. package/dist/src/ui/components/arena/ArenaSelectDialog.d.ts +16 -0
  1525. package/dist/src/ui/components/arena/ArenaSelectDialog.js +213 -0
  1526. package/dist/src/ui/components/arena/ArenaSelectDialog.js.map +1 -0
  1527. package/dist/src/ui/components/arena/ArenaSelectDialog.test.d.ts +6 -0
  1528. package/dist/src/ui/components/arena/ArenaSelectDialog.test.js +149 -0
  1529. package/dist/src/ui/components/arena/ArenaSelectDialog.test.js.map +1 -0
  1530. package/dist/src/ui/components/arena/ArenaStartDialog.d.ts +12 -0
  1531. package/dist/src/ui/components/arena/ArenaStartDialog.js +49 -0
  1532. package/dist/src/ui/components/arena/ArenaStartDialog.js.map +1 -0
  1533. package/dist/src/ui/components/arena/ArenaStatusDialog.d.ts +14 -0
  1534. package/dist/src/ui/components/arena/ArenaStatusDialog.js +111 -0
  1535. package/dist/src/ui/components/arena/ArenaStatusDialog.js.map +1 -0
  1536. package/dist/src/ui/components/arena/ArenaStopDialog.d.ts +15 -0
  1537. package/dist/src/ui/components/arena/ArenaStopDialog.js +113 -0
  1538. package/dist/src/ui/components/arena/ArenaStopDialog.js.map +1 -0
  1539. package/dist/src/ui/components/background-view/BackgroundTasksDialog.d.ts +17 -0
  1540. package/dist/src/ui/components/background-view/BackgroundTasksDialog.js +614 -0
  1541. package/dist/src/ui/components/background-view/BackgroundTasksDialog.js.map +1 -0
  1542. package/dist/src/ui/components/background-view/BackgroundTasksDialog.test.d.ts +6 -0
  1543. package/dist/src/ui/components/background-view/BackgroundTasksDialog.test.js +606 -0
  1544. package/dist/src/ui/components/background-view/BackgroundTasksDialog.test.js.map +1 -0
  1545. package/dist/src/ui/components/background-view/BackgroundTasksPill.d.ts +14 -0
  1546. package/dist/src/ui/components/background-view/BackgroundTasksPill.js +94 -0
  1547. package/dist/src/ui/components/background-view/BackgroundTasksPill.js.map +1 -0
  1548. package/dist/src/ui/components/background-view/BackgroundTasksPill.test.d.ts +6 -0
  1549. package/dist/src/ui/components/background-view/BackgroundTasksPill.test.js +158 -0
  1550. package/dist/src/ui/components/background-view/BackgroundTasksPill.test.js.map +1 -0
  1551. package/dist/src/ui/components/background-view/LiveAgentPanel.d.ts +43 -0
  1552. package/dist/src/ui/components/background-view/LiveAgentPanel.js +361 -0
  1553. package/dist/src/ui/components/background-view/LiveAgentPanel.js.map +1 -0
  1554. package/dist/src/ui/components/background-view/LiveAgentPanel.test.d.ts +6 -0
  1555. package/dist/src/ui/components/background-view/LiveAgentPanel.test.js +595 -0
  1556. package/dist/src/ui/components/background-view/LiveAgentPanel.test.js.map +1 -0
  1557. package/dist/src/ui/components/extensions/ExtensionsManagerDialog.d.ts +12 -0
  1558. package/dist/src/ui/components/extensions/ExtensionsManagerDialog.js +337 -0
  1559. package/dist/src/ui/components/extensions/ExtensionsManagerDialog.js.map +1 -0
  1560. package/dist/src/ui/components/extensions/ExtensionsManagerDialog.test.d.ts +6 -0
  1561. package/dist/src/ui/components/extensions/ExtensionsManagerDialog.test.js +90 -0
  1562. package/dist/src/ui/components/extensions/ExtensionsManagerDialog.test.js.map +1 -0
  1563. package/dist/src/ui/components/extensions/index.d.ts +8 -0
  1564. package/dist/src/ui/components/extensions/index.js +8 -0
  1565. package/dist/src/ui/components/extensions/index.js.map +1 -0
  1566. package/dist/src/ui/components/extensions/steps/ActionSelectionStep.d.ts +15 -0
  1567. package/dist/src/ui/components/extensions/steps/ActionSelectionStep.js +75 -0
  1568. package/dist/src/ui/components/extensions/steps/ActionSelectionStep.js.map +1 -0
  1569. package/dist/src/ui/components/extensions/steps/ActionSelectionStep.test.d.ts +6 -0
  1570. package/dist/src/ui/components/extensions/steps/ActionSelectionStep.test.js +56 -0
  1571. package/dist/src/ui/components/extensions/steps/ActionSelectionStep.test.js.map +1 -0
  1572. package/dist/src/ui/components/extensions/steps/ExtensionDetailStep.d.ts +11 -0
  1573. package/dist/src/ui/components/extensions/steps/ExtensionDetailStep.js +23 -0
  1574. package/dist/src/ui/components/extensions/steps/ExtensionDetailStep.js.map +1 -0
  1575. package/dist/src/ui/components/extensions/steps/ExtensionListStep.d.ts +13 -0
  1576. package/dist/src/ui/components/extensions/steps/ExtensionListStep.js +105 -0
  1577. package/dist/src/ui/components/extensions/steps/ExtensionListStep.js.map +1 -0
  1578. package/dist/src/ui/components/extensions/steps/ExtensionListStep.test.d.ts +6 -0
  1579. package/dist/src/ui/components/extensions/steps/ExtensionListStep.test.js +74 -0
  1580. package/dist/src/ui/components/extensions/steps/ExtensionListStep.test.js.map +1 -0
  1581. package/dist/src/ui/components/extensions/steps/ScopeSelectStep.d.ts +13 -0
  1582. package/dist/src/ui/components/extensions/steps/ScopeSelectStep.js +40 -0
  1583. package/dist/src/ui/components/extensions/steps/ScopeSelectStep.js.map +1 -0
  1584. package/dist/src/ui/components/extensions/steps/UninstallConfirmStep.d.ts +13 -0
  1585. package/dist/src/ui/components/extensions/steps/UninstallConfirmStep.js +38 -0
  1586. package/dist/src/ui/components/extensions/steps/UninstallConfirmStep.js.map +1 -0
  1587. package/dist/src/ui/components/extensions/steps/index.d.ts +10 -0
  1588. package/dist/src/ui/components/extensions/steps/index.js +11 -0
  1589. package/dist/src/ui/components/extensions/steps/index.js.map +1 -0
  1590. package/dist/src/ui/components/extensions/types.d.ts +73 -0
  1591. package/dist/src/ui/components/extensions/types.js +18 -0
  1592. package/dist/src/ui/components/extensions/types.js.map +1 -0
  1593. package/dist/src/ui/components/hooks/HandlerListBody.d.ts +12 -0
  1594. package/dist/src/ui/components/hooks/HandlerListBody.js +54 -0
  1595. package/dist/src/ui/components/hooks/HandlerListBody.js.map +1 -0
  1596. package/dist/src/ui/components/hooks/HandlerListBody.test.d.ts +6 -0
  1597. package/dist/src/ui/components/hooks/HandlerListBody.test.js +175 -0
  1598. package/dist/src/ui/components/hooks/HandlerListBody.test.js.map +1 -0
  1599. package/dist/src/ui/components/hooks/HookConfigDetailStep.d.ts +12 -0
  1600. package/dist/src/ui/components/hooks/HookConfigDetailStep.js +48 -0
  1601. package/dist/src/ui/components/hooks/HookConfigDetailStep.js.map +1 -0
  1602. package/dist/src/ui/components/hooks/HookConfigDetailStep.test.d.ts +6 -0
  1603. package/dist/src/ui/components/hooks/HookConfigDetailStep.test.js +236 -0
  1604. package/dist/src/ui/components/hooks/HookConfigDetailStep.test.js.map +1 -0
  1605. package/dist/src/ui/components/hooks/HookDetailStep.d.ts +12 -0
  1606. package/dist/src/ui/components/hooks/HookDetailStep.js +11 -0
  1607. package/dist/src/ui/components/hooks/HookDetailStep.js.map +1 -0
  1608. package/dist/src/ui/components/hooks/HookDetailStep.test.d.ts +6 -0
  1609. package/dist/src/ui/components/hooks/HookDetailStep.test.js +241 -0
  1610. package/dist/src/ui/components/hooks/HookDetailStep.test.js.map +1 -0
  1611. package/dist/src/ui/components/hooks/HookEventHandlerListStep.d.ts +12 -0
  1612. package/dist/src/ui/components/hooks/HookEventHandlerListStep.js +18 -0
  1613. package/dist/src/ui/components/hooks/HookEventHandlerListStep.js.map +1 -0
  1614. package/dist/src/ui/components/hooks/HookEventHeader.d.ts +13 -0
  1615. package/dist/src/ui/components/hooks/HookEventHeader.js +23 -0
  1616. package/dist/src/ui/components/hooks/HookEventHeader.js.map +1 -0
  1617. package/dist/src/ui/components/hooks/HookEventMatcherListStep.d.ts +12 -0
  1618. package/dist/src/ui/components/hooks/HookEventMatcherListStep.js +28 -0
  1619. package/dist/src/ui/components/hooks/HookEventMatcherListStep.js.map +1 -0
  1620. package/dist/src/ui/components/hooks/HookMatcherDetailStep.d.ts +13 -0
  1621. package/dist/src/ui/components/hooks/HookMatcherDetailStep.js +16 -0
  1622. package/dist/src/ui/components/hooks/HookMatcherDetailStep.js.map +1 -0
  1623. package/dist/src/ui/components/hooks/HookMatcherDetailStep.test.d.ts +6 -0
  1624. package/dist/src/ui/components/hooks/HookMatcherDetailStep.test.js +154 -0
  1625. package/dist/src/ui/components/hooks/HookMatcherDetailStep.test.js.map +1 -0
  1626. package/dist/src/ui/components/hooks/HooksDisabledStep.d.ts +10 -0
  1627. package/dist/src/ui/components/hooks/HooksDisabledStep.js +23 -0
  1628. package/dist/src/ui/components/hooks/HooksDisabledStep.js.map +1 -0
  1629. package/dist/src/ui/components/hooks/HooksDisabledStep.test.d.ts +6 -0
  1630. package/dist/src/ui/components/hooks/HooksDisabledStep.test.js +86 -0
  1631. package/dist/src/ui/components/hooks/HooksDisabledStep.test.js.map +1 -0
  1632. package/dist/src/ui/components/hooks/HooksListStep.d.ts +12 -0
  1633. package/dist/src/ui/components/hooks/HooksListStep.js +32 -0
  1634. package/dist/src/ui/components/hooks/HooksListStep.js.map +1 -0
  1635. package/dist/src/ui/components/hooks/HooksListStep.test.d.ts +6 -0
  1636. package/dist/src/ui/components/hooks/HooksListStep.test.js +144 -0
  1637. package/dist/src/ui/components/hooks/HooksListStep.test.js.map +1 -0
  1638. package/dist/src/ui/components/hooks/HooksManagementDialog.d.ts +7 -0
  1639. package/dist/src/ui/components/hooks/HooksManagementDialog.js +418 -0
  1640. package/dist/src/ui/components/hooks/HooksManagementDialog.js.map +1 -0
  1641. package/dist/src/ui/components/hooks/HooksManagementDialog.test.d.ts +6 -0
  1642. package/dist/src/ui/components/hooks/HooksManagementDialog.test.js +305 -0
  1643. package/dist/src/ui/components/hooks/HooksManagementDialog.test.js.map +1 -0
  1644. package/dist/src/ui/components/hooks/constants.d.ts +26 -0
  1645. package/dist/src/ui/components/hooks/constants.js +227 -0
  1646. package/dist/src/ui/components/hooks/constants.js.map +1 -0
  1647. package/dist/src/ui/components/hooks/constants.test.d.ts +6 -0
  1648. package/dist/src/ui/components/hooks/constants.test.js +317 -0
  1649. package/dist/src/ui/components/hooks/constants.test.js.map +1 -0
  1650. package/dist/src/ui/components/hooks/index.d.ts +12 -0
  1651. package/dist/src/ui/components/hooks/index.js +13 -0
  1652. package/dist/src/ui/components/hooks/index.js.map +1 -0
  1653. package/dist/src/ui/components/hooks/matcherGrouping.d.ts +9 -0
  1654. package/dist/src/ui/components/hooks/matcherGrouping.js +35 -0
  1655. package/dist/src/ui/components/hooks/matcherGrouping.js.map +1 -0
  1656. package/dist/src/ui/components/hooks/matcherGrouping.test.d.ts +6 -0
  1657. package/dist/src/ui/components/hooks/matcherGrouping.test.js +183 -0
  1658. package/dist/src/ui/components/hooks/matcherGrouping.test.js.map +1 -0
  1659. package/dist/src/ui/components/hooks/sourceLabels.d.ts +13 -0
  1660. package/dist/src/ui/components/hooks/sourceLabels.js +35 -0
  1661. package/dist/src/ui/components/hooks/sourceLabels.js.map +1 -0
  1662. package/dist/src/ui/components/hooks/sourceLabels.test.d.ts +6 -0
  1663. package/dist/src/ui/components/hooks/sourceLabels.test.js +81 -0
  1664. package/dist/src/ui/components/hooks/sourceLabels.test.js.map +1 -0
  1665. package/dist/src/ui/components/hooks/types.d.ts +42 -0
  1666. package/dist/src/ui/components/hooks/types.js +13 -0
  1667. package/dist/src/ui/components/hooks/types.js.map +1 -0
  1668. package/dist/src/ui/components/mcp/MCPHealthPill.d.ts +24 -0
  1669. package/dist/src/ui/components/mcp/MCPHealthPill.js +33 -0
  1670. package/dist/src/ui/components/mcp/MCPHealthPill.js.map +1 -0
  1671. package/dist/src/ui/components/mcp/MCPHealthPill.test.d.ts +6 -0
  1672. package/dist/src/ui/components/mcp/MCPHealthPill.test.js +42 -0
  1673. package/dist/src/ui/components/mcp/MCPHealthPill.test.js.map +1 -0
  1674. package/dist/src/ui/components/mcp/MCPManagementDialog.d.ts +7 -0
  1675. package/dist/src/ui/components/mcp/MCPManagementDialog.js +472 -0
  1676. package/dist/src/ui/components/mcp/MCPManagementDialog.js.map +1 -0
  1677. package/dist/src/ui/components/mcp/constants.d.ts +29 -0
  1678. package/dist/src/ui/components/mcp/constants.js +34 -0
  1679. package/dist/src/ui/components/mcp/constants.js.map +1 -0
  1680. package/dist/src/ui/components/mcp/index.d.ts +12 -0
  1681. package/dist/src/ui/components/mcp/index.js +15 -0
  1682. package/dist/src/ui/components/mcp/index.js.map +1 -0
  1683. package/dist/src/ui/components/mcp/steps/AuthenticateStep.d.ts +7 -0
  1684. package/dist/src/ui/components/mcp/steps/AuthenticateStep.js +187 -0
  1685. package/dist/src/ui/components/mcp/steps/AuthenticateStep.js.map +1 -0
  1686. package/dist/src/ui/components/mcp/steps/DisableScopeSelectStep.d.ts +7 -0
  1687. package/dist/src/ui/components/mcp/steps/DisableScopeSelectStep.js +44 -0
  1688. package/dist/src/ui/components/mcp/steps/DisableScopeSelectStep.js.map +1 -0
  1689. package/dist/src/ui/components/mcp/steps/ServerDetailStep.d.ts +7 -0
  1690. package/dist/src/ui/components/mcp/steps/ServerDetailStep.js +108 -0
  1691. package/dist/src/ui/components/mcp/steps/ServerDetailStep.js.map +1 -0
  1692. package/dist/src/ui/components/mcp/steps/ServerListStep.d.ts +7 -0
  1693. package/dist/src/ui/components/mcp/steps/ServerListStep.js +74 -0
  1694. package/dist/src/ui/components/mcp/steps/ServerListStep.js.map +1 -0
  1695. package/dist/src/ui/components/mcp/steps/ServerListStep.test.d.ts +6 -0
  1696. package/dist/src/ui/components/mcp/steps/ServerListStep.test.js +60 -0
  1697. package/dist/src/ui/components/mcp/steps/ServerListStep.test.js.map +1 -0
  1698. package/dist/src/ui/components/mcp/steps/ToolDetailStep.d.ts +7 -0
  1699. package/dist/src/ui/components/mcp/steps/ToolDetailStep.js +49 -0
  1700. package/dist/src/ui/components/mcp/steps/ToolDetailStep.js.map +1 -0
  1701. package/dist/src/ui/components/mcp/steps/ToolListStep.d.ts +7 -0
  1702. package/dist/src/ui/components/mcp/steps/ToolListStep.js +80 -0
  1703. package/dist/src/ui/components/mcp/steps/ToolListStep.js.map +1 -0
  1704. package/dist/src/ui/components/mcp/steps/ToolListStep.test.d.ts +6 -0
  1705. package/dist/src/ui/components/mcp/steps/ToolListStep.test.js +55 -0
  1706. package/dist/src/ui/components/mcp/steps/ToolListStep.test.js.map +1 -0
  1707. package/dist/src/ui/components/mcp/types.d.ts +177 -0
  1708. package/dist/src/ui/components/mcp/types.js +17 -0
  1709. package/dist/src/ui/components/mcp/types.js.map +1 -0
  1710. package/dist/src/ui/components/mcp/utils.d.ts +40 -0
  1711. package/dist/src/ui/components/mcp/utils.js +126 -0
  1712. package/dist/src/ui/components/mcp/utils.js.map +1 -0
  1713. package/dist/src/ui/components/mcp/utils.test.d.ts +6 -0
  1714. package/dist/src/ui/components/mcp/utils.test.js +130 -0
  1715. package/dist/src/ui/components/mcp/utils.test.js.map +1 -0
  1716. package/dist/src/ui/components/messages/AskUserQuestionDialog.d.ts +14 -0
  1717. package/dist/src/ui/components/messages/AskUserQuestionDialog.js +291 -0
  1718. package/dist/src/ui/components/messages/AskUserQuestionDialog.js.map +1 -0
  1719. package/dist/src/ui/components/messages/AskUserQuestionDialog.test.d.ts +6 -0
  1720. package/dist/src/ui/components/messages/AskUserQuestionDialog.test.js +281 -0
  1721. package/dist/src/ui/components/messages/AskUserQuestionDialog.test.js.map +1 -0
  1722. package/dist/src/ui/components/messages/BtwMessage.d.ts +14 -0
  1723. package/dist/src/ui/components/messages/BtwMessage.js +30 -0
  1724. package/dist/src/ui/components/messages/BtwMessage.js.map +1 -0
  1725. package/dist/src/ui/components/messages/BtwMessage.test.d.ts +6 -0
  1726. package/dist/src/ui/components/messages/BtwMessage.test.js +60 -0
  1727. package/dist/src/ui/components/messages/BtwMessage.test.js.map +1 -0
  1728. package/dist/src/ui/components/messages/CompactToolGroupDisplay.d.ts +20 -0
  1729. package/dist/src/ui/components/messages/CompactToolGroupDisplay.js +80 -0
  1730. package/dist/src/ui/components/messages/CompactToolGroupDisplay.js.map +1 -0
  1731. package/dist/src/ui/components/messages/CompactToolGroupDisplay.test.d.ts +6 -0
  1732. package/dist/src/ui/components/messages/CompactToolGroupDisplay.test.js +139 -0
  1733. package/dist/src/ui/components/messages/CompactToolGroupDisplay.test.js.map +1 -0
  1734. package/dist/src/ui/components/messages/CompressionMessage.d.ts +10 -0
  1735. package/dist/src/ui/components/messages/CompressionMessage.js +50 -0
  1736. package/dist/src/ui/components/messages/CompressionMessage.js.map +1 -0
  1737. package/dist/src/ui/components/messages/CompressionMessage.test.d.ts +6 -0
  1738. package/dist/src/ui/components/messages/CompressionMessage.test.js +160 -0
  1739. package/dist/src/ui/components/messages/CompressionMessage.test.js.map +1 -0
  1740. package/dist/src/ui/components/messages/ConversationMessages.d.ts +46 -0
  1741. package/dist/src/ui/components/messages/ConversationMessages.js +32 -0
  1742. package/dist/src/ui/components/messages/ConversationMessages.js.map +1 -0
  1743. package/dist/src/ui/components/messages/DiffRenderer.d.ts +19 -0
  1744. package/dist/src/ui/components/messages/DiffRenderer.js +219 -0
  1745. package/dist/src/ui/components/messages/DiffRenderer.js.map +1 -0
  1746. package/dist/src/ui/components/messages/DiffRenderer.test.d.ts +6 -0
  1747. package/dist/src/ui/components/messages/DiffRenderer.test.js +296 -0
  1748. package/dist/src/ui/components/messages/DiffRenderer.test.js.map +1 -0
  1749. package/dist/src/ui/components/messages/DiffStatsDisplay.d.ts +18 -0
  1750. package/dist/src/ui/components/messages/DiffStatsDisplay.js +50 -0
  1751. package/dist/src/ui/components/messages/DiffStatsDisplay.js.map +1 -0
  1752. package/dist/src/ui/components/messages/DiffStatsDisplay.test.d.ts +6 -0
  1753. package/dist/src/ui/components/messages/DiffStatsDisplay.test.js +165 -0
  1754. package/dist/src/ui/components/messages/DiffStatsDisplay.test.js.map +1 -0
  1755. package/dist/src/ui/components/messages/GoalStatusMessage.d.ts +16 -0
  1756. package/dist/src/ui/components/messages/GoalStatusMessage.js +76 -0
  1757. package/dist/src/ui/components/messages/GoalStatusMessage.js.map +1 -0
  1758. package/dist/src/ui/components/messages/GoalStatusMessage.test.d.ts +6 -0
  1759. package/dist/src/ui/components/messages/GoalStatusMessage.test.js +32 -0
  1760. package/dist/src/ui/components/messages/GoalStatusMessage.test.js.map +1 -0
  1761. package/dist/src/ui/components/messages/InlineParallelAgentsDisplay.d.ts +33 -0
  1762. package/dist/src/ui/components/messages/InlineParallelAgentsDisplay.js +196 -0
  1763. package/dist/src/ui/components/messages/InlineParallelAgentsDisplay.js.map +1 -0
  1764. package/dist/src/ui/components/messages/InlineParallelAgentsDisplay.test.d.ts +6 -0
  1765. package/dist/src/ui/components/messages/InlineParallelAgentsDisplay.test.js +219 -0
  1766. package/dist/src/ui/components/messages/InlineParallelAgentsDisplay.test.js.map +1 -0
  1767. package/dist/src/ui/components/messages/InsightProgressMessage.d.ts +12 -0
  1768. package/dist/src/ui/components/messages/InsightProgressMessage.js +20 -0
  1769. package/dist/src/ui/components/messages/InsightProgressMessage.js.map +1 -0
  1770. package/dist/src/ui/components/messages/MemorySavedMessage.d.ts +18 -0
  1771. package/dist/src/ui/components/messages/MemorySavedMessage.js +15 -0
  1772. package/dist/src/ui/components/messages/MemorySavedMessage.js.map +1 -0
  1773. package/dist/src/ui/components/messages/StatusMessages.d.ts +33 -0
  1774. package/dist/src/ui/components/messages/StatusMessages.js +28 -0
  1775. package/dist/src/ui/components/messages/StatusMessages.js.map +1 -0
  1776. package/dist/src/ui/components/messages/StatusMessages.test.d.ts +6 -0
  1777. package/dist/src/ui/components/messages/StatusMessages.test.js +21 -0
  1778. package/dist/src/ui/components/messages/StatusMessages.test.js.map +1 -0
  1779. package/dist/src/ui/components/messages/SummaryMessage.d.ts +11 -0
  1780. package/dist/src/ui/components/messages/SummaryMessage.js +38 -0
  1781. package/dist/src/ui/components/messages/SummaryMessage.js.map +1 -0
  1782. package/dist/src/ui/components/messages/ToolConfirmationMessage.d.ts +16 -0
  1783. package/dist/src/ui/components/messages/ToolConfirmationMessage.js +352 -0
  1784. package/dist/src/ui/components/messages/ToolConfirmationMessage.js.map +1 -0
  1785. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.d.ts +6 -0
  1786. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js +312 -0
  1787. package/dist/src/ui/components/messages/ToolConfirmationMessage.test.js.map +1 -0
  1788. package/dist/src/ui/components/messages/ToolGroupMessage.d.ts +58 -0
  1789. package/dist/src/ui/components/messages/ToolGroupMessage.js +278 -0
  1790. package/dist/src/ui/components/messages/ToolGroupMessage.js.map +1 -0
  1791. package/dist/src/ui/components/messages/ToolGroupMessage.test.d.ts +6 -0
  1792. package/dist/src/ui/components/messages/ToolGroupMessage.test.js +619 -0
  1793. package/dist/src/ui/components/messages/ToolGroupMessage.test.js.map +1 -0
  1794. package/dist/src/ui/components/messages/ToolMessage.d.ts +39 -0
  1795. package/dist/src/ui/components/messages/ToolMessage.js +400 -0
  1796. package/dist/src/ui/components/messages/ToolMessage.js.map +1 -0
  1797. package/dist/src/ui/components/messages/ToolMessage.test.d.ts +6 -0
  1798. package/dist/src/ui/components/messages/ToolMessage.test.js +575 -0
  1799. package/dist/src/ui/components/messages/ToolMessage.test.js.map +1 -0
  1800. package/dist/src/ui/components/shared/BaseSelectionList.d.ts +40 -0
  1801. package/dist/src/ui/components/shared/BaseSelectionList.js +75 -0
  1802. package/dist/src/ui/components/shared/BaseSelectionList.js.map +1 -0
  1803. package/dist/src/ui/components/shared/BaseSelectionList.test.d.ts +6 -0
  1804. package/dist/src/ui/components/shared/BaseSelectionList.test.js +376 -0
  1805. package/dist/src/ui/components/shared/BaseSelectionList.test.js.map +1 -0
  1806. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.d.ts +37 -0
  1807. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js +13 -0
  1808. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.js.map +1 -0
  1809. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.d.ts +6 -0
  1810. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js +79 -0
  1811. package/dist/src/ui/components/shared/DescriptiveRadioButtonSelect.test.js.map +1 -0
  1812. package/dist/src/ui/components/shared/EnumSelector.d.ts +18 -0
  1813. package/dist/src/ui/components/shared/EnumSelector.js +44 -0
  1814. package/dist/src/ui/components/shared/EnumSelector.js.map +1 -0
  1815. package/dist/src/ui/components/shared/EnumSelector.test.d.ts +6 -0
  1816. package/dist/src/ui/components/shared/EnumSelector.test.js +70 -0
  1817. package/dist/src/ui/components/shared/EnumSelector.test.js.map +1 -0
  1818. package/dist/src/ui/components/shared/MaxSizedBox.d.ts +61 -0
  1819. package/dist/src/ui/components/shared/MaxSizedBox.js +453 -0
  1820. package/dist/src/ui/components/shared/MaxSizedBox.js.map +1 -0
  1821. package/dist/src/ui/components/shared/MaxSizedBox.test.d.ts +6 -0
  1822. package/dist/src/ui/components/shared/MaxSizedBox.test.js +154 -0
  1823. package/dist/src/ui/components/shared/MaxSizedBox.test.js.map +1 -0
  1824. package/dist/src/ui/components/shared/MultiSelect.d.ts +30 -0
  1825. package/dist/src/ui/components/shared/MultiSelect.js +94 -0
  1826. package/dist/src/ui/components/shared/MultiSelect.js.map +1 -0
  1827. package/dist/src/ui/components/shared/RadioButtonSelect.d.ts +45 -0
  1828. package/dist/src/ui/components/shared/RadioButtonSelect.js +21 -0
  1829. package/dist/src/ui/components/shared/RadioButtonSelect.js.map +1 -0
  1830. package/dist/src/ui/components/shared/RadioButtonSelect.test.d.ts +6 -0
  1831. package/dist/src/ui/components/shared/RadioButtonSelect.test.js +134 -0
  1832. package/dist/src/ui/components/shared/RadioButtonSelect.test.js.map +1 -0
  1833. package/dist/src/ui/components/shared/ScopeSelector.d.ts +19 -0
  1834. package/dist/src/ui/components/shared/ScopeSelector.js +16 -0
  1835. package/dist/src/ui/components/shared/ScopeSelector.js.map +1 -0
  1836. package/dist/src/ui/components/shared/ScrollableList.d.ts +19 -0
  1837. package/dist/src/ui/components/shared/ScrollableList.js +97 -0
  1838. package/dist/src/ui/components/shared/ScrollableList.js.map +1 -0
  1839. package/dist/src/ui/components/shared/ScrollableList.test.d.ts +6 -0
  1840. package/dist/src/ui/components/shared/ScrollableList.test.js +158 -0
  1841. package/dist/src/ui/components/shared/ScrollableList.test.js.map +1 -0
  1842. package/dist/src/ui/components/shared/StaticRender.d.ts +25 -0
  1843. package/dist/src/ui/components/shared/StaticRender.js +25 -0
  1844. package/dist/src/ui/components/shared/StaticRender.js.map +1 -0
  1845. package/dist/src/ui/components/shared/TextInput.d.ts +25 -0
  1846. package/dist/src/ui/components/shared/TextInput.js +163 -0
  1847. package/dist/src/ui/components/shared/TextInput.js.map +1 -0
  1848. package/dist/src/ui/components/shared/TextInput.test.d.ts +6 -0
  1849. package/dist/src/ui/components/shared/TextInput.test.js +91 -0
  1850. package/dist/src/ui/components/shared/TextInput.test.js.map +1 -0
  1851. package/dist/src/ui/components/shared/ToolElapsedTime.d.ts +30 -0
  1852. package/dist/src/ui/components/shared/ToolElapsedTime.js +43 -0
  1853. package/dist/src/ui/components/shared/ToolElapsedTime.js.map +1 -0
  1854. package/dist/src/ui/components/shared/ToolElapsedTime.test.d.ts +6 -0
  1855. package/dist/src/ui/components/shared/ToolElapsedTime.test.js +63 -0
  1856. package/dist/src/ui/components/shared/ToolElapsedTime.test.js.map +1 -0
  1857. package/dist/src/ui/components/shared/ToolStatusIndicator.d.ts +14 -0
  1858. package/dist/src/ui/components/shared/ToolStatusIndicator.js +13 -0
  1859. package/dist/src/ui/components/shared/ToolStatusIndicator.js.map +1 -0
  1860. package/dist/src/ui/components/shared/VirtualizedList.d.ts +49 -0
  1861. package/dist/src/ui/components/shared/VirtualizedList.js +529 -0
  1862. package/dist/src/ui/components/shared/VirtualizedList.js.map +1 -0
  1863. package/dist/src/ui/components/shared/VirtualizedList.test.d.ts +6 -0
  1864. package/dist/src/ui/components/shared/VirtualizedList.test.js +371 -0
  1865. package/dist/src/ui/components/shared/VirtualizedList.test.js.map +1 -0
  1866. package/dist/src/ui/components/shared/text-buffer-external-editor.test.d.ts +6 -0
  1867. package/dist/src/ui/components/shared/text-buffer-external-editor.test.js +657 -0
  1868. package/dist/src/ui/components/shared/text-buffer-external-editor.test.js.map +1 -0
  1869. package/dist/src/ui/components/shared/text-buffer.d.ts +503 -0
  1870. package/dist/src/ui/components/shared/text-buffer.js +2181 -0
  1871. package/dist/src/ui/components/shared/text-buffer.js.map +1 -0
  1872. package/dist/src/ui/components/shared/vim-buffer-actions.d.ts +74 -0
  1873. package/dist/src/ui/components/shared/vim-buffer-actions.js +612 -0
  1874. package/dist/src/ui/components/shared/vim-buffer-actions.js.map +1 -0
  1875. package/dist/src/ui/components/skills/SkillsManagerDialog.d.ts +44 -0
  1876. package/dist/src/ui/components/skills/SkillsManagerDialog.js +423 -0
  1877. package/dist/src/ui/components/skills/SkillsManagerDialog.js.map +1 -0
  1878. package/dist/src/ui/components/stats-helpers.d.ts +30 -0
  1879. package/dist/src/ui/components/stats-helpers.js +79 -0
  1880. package/dist/src/ui/components/stats-helpers.js.map +1 -0
  1881. package/dist/src/ui/components/subagents/constants.d.ts +23 -0
  1882. package/dist/src/ui/components/subagents/constants.js +67 -0
  1883. package/dist/src/ui/components/subagents/constants.js.map +1 -0
  1884. package/dist/src/ui/components/subagents/create/AgentCreationWizard.d.ts +15 -0
  1885. package/dist/src/ui/components/subagents/create/AgentCreationWizard.js +173 -0
  1886. package/dist/src/ui/components/subagents/create/AgentCreationWizard.js.map +1 -0
  1887. package/dist/src/ui/components/subagents/create/ColorSelector.d.ts +15 -0
  1888. package/dist/src/ui/components/subagents/create/ColorSelector.js +43 -0
  1889. package/dist/src/ui/components/subagents/create/ColorSelector.js.map +1 -0
  1890. package/dist/src/ui/components/subagents/create/CreationSummary.d.ts +10 -0
  1891. package/dist/src/ui/components/subagents/create/CreationSummary.js +176 -0
  1892. package/dist/src/ui/components/subagents/create/CreationSummary.js.map +1 -0
  1893. package/dist/src/ui/components/subagents/create/DescriptionInput.d.ts +10 -0
  1894. package/dist/src/ui/components/subagents/create/DescriptionInput.js +107 -0
  1895. package/dist/src/ui/components/subagents/create/DescriptionInput.js.map +1 -0
  1896. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.d.ts +10 -0
  1897. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.js +39 -0
  1898. package/dist/src/ui/components/subagents/create/GenerationMethodSelector.js.map +1 -0
  1899. package/dist/src/ui/components/subagents/create/LocationSelector.d.ts +10 -0
  1900. package/dist/src/ui/components/subagents/create/LocationSelector.js +39 -0
  1901. package/dist/src/ui/components/subagents/create/LocationSelector.js.map +1 -0
  1902. package/dist/src/ui/components/subagents/create/TextEntryStep.d.ts +26 -0
  1903. package/dist/src/ui/components/subagents/create/TextEntryStep.js +28 -0
  1904. package/dist/src/ui/components/subagents/create/TextEntryStep.js.map +1 -0
  1905. package/dist/src/ui/components/subagents/create/ToolSelector.d.ts +16 -0
  1906. package/dist/src/ui/components/subagents/create/ToolSelector.js +145 -0
  1907. package/dist/src/ui/components/subagents/create/ToolSelector.js.map +1 -0
  1908. package/dist/src/ui/components/subagents/index.d.ts +7 -0
  1909. package/dist/src/ui/components/subagents/index.js +13 -0
  1910. package/dist/src/ui/components/subagents/index.js.map +1 -0
  1911. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.d.ts +13 -0
  1912. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.js +73 -0
  1913. package/dist/src/ui/components/subagents/manage/ActionSelectionStep.js.map +1 -0
  1914. package/dist/src/ui/components/subagents/manage/AgentDeleteStep.d.ts +13 -0
  1915. package/dist/src/ui/components/subagents/manage/AgentDeleteStep.js +38 -0
  1916. package/dist/src/ui/components/subagents/manage/AgentDeleteStep.js.map +1 -0
  1917. package/dist/src/ui/components/subagents/manage/AgentEditStep.d.ts +15 -0
  1918. package/dist/src/ui/components/subagents/manage/AgentEditStep.js +76 -0
  1919. package/dist/src/ui/components/subagents/manage/AgentEditStep.js.map +1 -0
  1920. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.d.ts +12 -0
  1921. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js +342 -0
  1922. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.js.map +1 -0
  1923. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.test.d.ts +6 -0
  1924. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.test.js +56 -0
  1925. package/dist/src/ui/components/subagents/manage/AgentSelectionStep.test.js.map +1 -0
  1926. package/dist/src/ui/components/subagents/manage/AgentViewerStep.d.ts +11 -0
  1927. package/dist/src/ui/components/subagents/manage/AgentViewerStep.js +20 -0
  1928. package/dist/src/ui/components/subagents/manage/AgentViewerStep.js.map +1 -0
  1929. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.d.ts +15 -0
  1930. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.js +214 -0
  1931. package/dist/src/ui/components/subagents/manage/AgentsManagerDialog.js.map +1 -0
  1932. package/dist/src/ui/components/subagents/reducers.d.ts +14 -0
  1933. package/dist/src/ui/components/subagents/reducers.js +162 -0
  1934. package/dist/src/ui/components/subagents/reducers.js.map +1 -0
  1935. package/dist/src/ui/components/subagents/types.d.ts +137 -0
  1936. package/dist/src/ui/components/subagents/types.js +15 -0
  1937. package/dist/src/ui/components/subagents/types.js.map +1 -0
  1938. package/dist/src/ui/components/subagents/utils.d.ts +15 -0
  1939. package/dist/src/ui/components/subagents/utils.js +79 -0
  1940. package/dist/src/ui/components/subagents/utils.js.map +1 -0
  1941. package/dist/src/ui/components/views/ContextUsage.d.ts +23 -0
  1942. package/dist/src/ui/components/views/ContextUsage.js +130 -0
  1943. package/dist/src/ui/components/views/ContextUsage.js.map +1 -0
  1944. package/dist/src/ui/components/views/ContextUsage.test.d.ts +6 -0
  1945. package/dist/src/ui/components/views/ContextUsage.test.js +76 -0
  1946. package/dist/src/ui/components/views/ContextUsage.test.js.map +1 -0
  1947. package/dist/src/ui/components/views/DoctorReport.d.ts +18 -0
  1948. package/dist/src/ui/components/views/DoctorReport.js +45 -0
  1949. package/dist/src/ui/components/views/DoctorReport.js.map +1 -0
  1950. package/dist/src/ui/components/views/ExtensionsList.d.ts +6 -0
  1951. package/dist/src/ui/components/views/ExtensionsList.js +49 -0
  1952. package/dist/src/ui/components/views/ExtensionsList.js.map +1 -0
  1953. package/dist/src/ui/components/views/ExtensionsList.test.d.ts +6 -0
  1954. package/dist/src/ui/components/views/ExtensionsList.test.js +88 -0
  1955. package/dist/src/ui/components/views/ExtensionsList.test.js.map +1 -0
  1956. package/dist/src/ui/components/views/McpStatus.d.ts +27 -0
  1957. package/dist/src/ui/components/views/McpStatus.js +90 -0
  1958. package/dist/src/ui/components/views/McpStatus.js.map +1 -0
  1959. package/dist/src/ui/components/views/McpStatus.test.d.ts +6 -0
  1960. package/dist/src/ui/components/views/McpStatus.test.js +117 -0
  1961. package/dist/src/ui/components/views/McpStatus.test.js.map +1 -0
  1962. package/dist/src/ui/components/views/SkillsList.d.ts +12 -0
  1963. package/dist/src/ui/components/views/SkillsList.js +7 -0
  1964. package/dist/src/ui/components/views/SkillsList.js.map +1 -0
  1965. package/dist/src/ui/components/views/ToolsList.d.ts +14 -0
  1966. package/dist/src/ui/components/views/ToolsList.js +8 -0
  1967. package/dist/src/ui/components/views/ToolsList.js.map +1 -0
  1968. package/dist/src/ui/components/views/ToolsList.test.d.ts +6 -0
  1969. package/dist/src/ui/components/views/ToolsList.test.js +45 -0
  1970. package/dist/src/ui/components/views/ToolsList.test.js.map +1 -0
  1971. package/dist/src/ui/constants.d.ts +18 -0
  1972. package/dist/src/ui/constants.js +23 -0
  1973. package/dist/src/ui/constants.js.map +1 -0
  1974. package/dist/src/ui/contexts/AgentViewContext.d.ts +49 -0
  1975. package/dist/src/ui/contexts/AgentViewContext.js +187 -0
  1976. package/dist/src/ui/contexts/AgentViewContext.js.map +1 -0
  1977. package/dist/src/ui/contexts/AppContext.d.ts +11 -0
  1978. package/dist/src/ui/contexts/AppContext.js +15 -0
  1979. package/dist/src/ui/contexts/AppContext.js.map +1 -0
  1980. package/dist/src/ui/contexts/BackgroundTaskViewContext.d.ts +60 -0
  1981. package/dist/src/ui/contexts/BackgroundTaskViewContext.js +238 -0
  1982. package/dist/src/ui/contexts/BackgroundTaskViewContext.js.map +1 -0
  1983. package/dist/src/ui/contexts/CompactModeContext.d.ts +13 -0
  1984. package/dist/src/ui/contexts/CompactModeContext.js +13 -0
  1985. package/dist/src/ui/contexts/CompactModeContext.js.map +1 -0
  1986. package/dist/src/ui/contexts/ConfigContext.d.ts +9 -0
  1987. package/dist/src/ui/contexts/ConfigContext.js +16 -0
  1988. package/dist/src/ui/contexts/ConfigContext.js.map +1 -0
  1989. package/dist/src/ui/contexts/KeypressContext.d.ts +40 -0
  1990. package/dist/src/ui/contexts/KeypressContext.js +959 -0
  1991. package/dist/src/ui/contexts/KeypressContext.js.map +1 -0
  1992. package/dist/src/ui/contexts/KeypressContext.test.d.ts +6 -0
  1993. package/dist/src/ui/contexts/KeypressContext.test.js +1360 -0
  1994. package/dist/src/ui/contexts/KeypressContext.test.js.map +1 -0
  1995. package/dist/src/ui/contexts/OverflowContext.d.ts +19 -0
  1996. package/dist/src/ui/contexts/OverflowContext.js +38 -0
  1997. package/dist/src/ui/contexts/OverflowContext.js.map +1 -0
  1998. package/dist/src/ui/contexts/RenderModeContext.d.ts +14 -0
  1999. package/dist/src/ui/contexts/RenderModeContext.js +15 -0
  2000. package/dist/src/ui/contexts/RenderModeContext.js.map +1 -0
  2001. package/dist/src/ui/contexts/SessionContext.d.ts +47 -0
  2002. package/dist/src/ui/contexts/SessionContext.js +180 -0
  2003. package/dist/src/ui/contexts/SessionContext.js.map +1 -0
  2004. package/dist/src/ui/contexts/SettingsContext.d.ts +9 -0
  2005. package/dist/src/ui/contexts/SettingsContext.js +15 -0
  2006. package/dist/src/ui/contexts/SettingsContext.js.map +1 -0
  2007. package/dist/src/ui/contexts/ShellFocusContext.d.ts +7 -0
  2008. package/dist/src/ui/contexts/ShellFocusContext.js +9 -0
  2009. package/dist/src/ui/contexts/ShellFocusContext.js.map +1 -0
  2010. package/dist/src/ui/contexts/StreamingContext.d.ts +9 -0
  2011. package/dist/src/ui/contexts/StreamingContext.js +15 -0
  2012. package/dist/src/ui/contexts/StreamingContext.js.map +1 -0
  2013. package/dist/src/ui/contexts/TerminalOutputContext.d.ts +12 -0
  2014. package/dist/src/ui/contexts/TerminalOutputContext.js +11 -0
  2015. package/dist/src/ui/contexts/TerminalOutputContext.js.map +1 -0
  2016. package/dist/src/ui/contexts/UIActionsContext.d.ts +91 -0
  2017. package/dist/src/ui/contexts/UIActionsContext.js +22 -0
  2018. package/dist/src/ui/contexts/UIActionsContext.js.map +1 -0
  2019. package/dist/src/ui/contexts/UIStateContext.d.ts +158 -0
  2020. package/dist/src/ui/contexts/UIStateContext.js +20 -0
  2021. package/dist/src/ui/contexts/UIStateContext.js.map +1 -0
  2022. package/dist/src/ui/contexts/VimModeContext.d.ts +31 -0
  2023. package/dist/src/ui/contexts/VimModeContext.js +60 -0
  2024. package/dist/src/ui/contexts/VimModeContext.js.map +1 -0
  2025. package/dist/src/ui/contexts/VimModeContext.test.d.ts +11 -0
  2026. package/dist/src/ui/contexts/VimModeContext.test.js +99 -0
  2027. package/dist/src/ui/contexts/VimModeContext.test.js.map +1 -0
  2028. package/dist/src/ui/daemon/DaemonTuiAdapter.d.ts +101 -0
  2029. package/dist/src/ui/daemon/DaemonTuiAdapter.js +695 -0
  2030. package/dist/src/ui/daemon/DaemonTuiAdapter.js.map +1 -0
  2031. package/dist/src/ui/daemon/DaemonTuiAdapter.test.d.ts +6 -0
  2032. package/dist/src/ui/daemon/DaemonTuiAdapter.test.js +784 -0
  2033. package/dist/src/ui/daemon/DaemonTuiAdapter.test.js.map +1 -0
  2034. package/dist/src/ui/editors/editorSettingsManager.d.ts +19 -0
  2035. package/dist/src/ui/editors/editorSettingsManager.js +48 -0
  2036. package/dist/src/ui/editors/editorSettingsManager.js.map +1 -0
  2037. package/dist/src/ui/hooks/atCommandProcessor.d.ts +33 -0
  2038. package/dist/src/ui/hooks/atCommandProcessor.js +344 -0
  2039. package/dist/src/ui/hooks/atCommandProcessor.js.map +1 -0
  2040. package/dist/src/ui/hooks/atCommandProcessor.test.d.ts +6 -0
  2041. package/dist/src/ui/hooks/atCommandProcessor.test.js +871 -0
  2042. package/dist/src/ui/hooks/atCommandProcessor.test.js.map +1 -0
  2043. package/dist/src/ui/hooks/keyToAnsi.d.ts +15 -0
  2044. package/dist/src/ui/hooks/keyToAnsi.js +67 -0
  2045. package/dist/src/ui/hooks/keyToAnsi.js.map +1 -0
  2046. package/dist/src/ui/hooks/shellCommandProcessor.d.ts +18 -0
  2047. package/dist/src/ui/hooks/shellCommandProcessor.js +287 -0
  2048. package/dist/src/ui/hooks/shellCommandProcessor.js.map +1 -0
  2049. package/dist/src/ui/hooks/shellCommandProcessor.test.d.ts +6 -0
  2050. package/dist/src/ui/hooks/shellCommandProcessor.test.js +509 -0
  2051. package/dist/src/ui/hooks/shellCommandProcessor.test.js.map +1 -0
  2052. package/dist/src/ui/hooks/slashCommandProcessor.d.ts +71 -0
  2053. package/dist/src/ui/hooks/slashCommandProcessor.js +837 -0
  2054. package/dist/src/ui/hooks/slashCommandProcessor.js.map +1 -0
  2055. package/dist/src/ui/hooks/useAgentStreamingState.d.ts +29 -0
  2056. package/dist/src/ui/hooks/useAgentStreamingState.js +109 -0
  2057. package/dist/src/ui/hooks/useAgentStreamingState.js.map +1 -0
  2058. package/dist/src/ui/hooks/useAgentsManagerDialog.d.ts +11 -0
  2059. package/dist/src/ui/hooks/useAgentsManagerDialog.js +21 -0
  2060. package/dist/src/ui/hooks/useAgentsManagerDialog.js.map +1 -0
  2061. package/dist/src/ui/hooks/useAnimatedScrollbar.d.ts +37 -0
  2062. package/dist/src/ui/hooks/useAnimatedScrollbar.js +44 -0
  2063. package/dist/src/ui/hooks/useAnimatedScrollbar.js.map +1 -0
  2064. package/dist/src/ui/hooks/useAnimatedScrollbar.test.d.ts +6 -0
  2065. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js +74 -0
  2066. package/dist/src/ui/hooks/useAnimatedScrollbar.test.js.map +1 -0
  2067. package/dist/src/ui/hooks/useAnimationFrame.d.ts +25 -0
  2068. package/dist/src/ui/hooks/useAnimationFrame.js +86 -0
  2069. package/dist/src/ui/hooks/useAnimationFrame.js.map +1 -0
  2070. package/dist/src/ui/hooks/useApprovalModeCommand.d.ts +14 -0
  2071. package/dist/src/ui/hooks/useApprovalModeCommand.js +33 -0
  2072. package/dist/src/ui/hooks/useApprovalModeCommand.js.map +1 -0
  2073. package/dist/src/ui/hooks/useArenaCommand.d.ts +13 -0
  2074. package/dist/src/ui/hooks/useArenaCommand.js +21 -0
  2075. package/dist/src/ui/hooks/useArenaCommand.js.map +1 -0
  2076. package/dist/src/ui/hooks/useArenaInProcess.d.ts +14 -0
  2077. package/dist/src/ui/hooks/useArenaInProcess.js +136 -0
  2078. package/dist/src/ui/hooks/useArenaInProcess.js.map +1 -0
  2079. package/dist/src/ui/hooks/useAtCompletion.d.ts +23 -0
  2080. package/dist/src/ui/hooks/useAtCompletion.js +184 -0
  2081. package/dist/src/ui/hooks/useAtCompletion.js.map +1 -0
  2082. package/dist/src/ui/hooks/useAttentionNotifications.d.ts +22 -0
  2083. package/dist/src/ui/hooks/useAttentionNotifications.js +89 -0
  2084. package/dist/src/ui/hooks/useAttentionNotifications.js.map +1 -0
  2085. package/dist/src/ui/hooks/useAttentionNotifications.test.d.ts +6 -0
  2086. package/dist/src/ui/hooks/useAttentionNotifications.test.js +222 -0
  2087. package/dist/src/ui/hooks/useAttentionNotifications.test.js.map +1 -0
  2088. package/dist/src/ui/hooks/useAutoAcceptIndicator.d.ts +32 -0
  2089. package/dist/src/ui/hooks/useAutoAcceptIndicator.js +124 -0
  2090. package/dist/src/ui/hooks/useAutoAcceptIndicator.js.map +1 -0
  2091. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.d.ts +6 -0
  2092. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js +379 -0
  2093. package/dist/src/ui/hooks/useAutoAcceptIndicator.test.js.map +1 -0
  2094. package/dist/src/ui/hooks/useAwaySummary.d.ts +35 -0
  2095. package/dist/src/ui/hooks/useAwaySummary.js +141 -0
  2096. package/dist/src/ui/hooks/useAwaySummary.js.map +1 -0
  2097. package/dist/src/ui/hooks/useAwaySummary.test.d.ts +6 -0
  2098. package/dist/src/ui/hooks/useAwaySummary.test.js +103 -0
  2099. package/dist/src/ui/hooks/useAwaySummary.test.js.map +1 -0
  2100. package/dist/src/ui/hooks/useBackgroundTaskView.d.ts +69 -0
  2101. package/dist/src/ui/hooks/useBackgroundTaskView.js +217 -0
  2102. package/dist/src/ui/hooks/useBackgroundTaskView.js.map +1 -0
  2103. package/dist/src/ui/hooks/useBackgroundTaskView.test.d.ts +6 -0
  2104. package/dist/src/ui/hooks/useBackgroundTaskView.test.js +455 -0
  2105. package/dist/src/ui/hooks/useBackgroundTaskView.test.js.map +1 -0
  2106. package/dist/src/ui/hooks/useBatchedScroll.d.ts +14 -0
  2107. package/dist/src/ui/hooks/useBatchedScroll.js +25 -0
  2108. package/dist/src/ui/hooks/useBatchedScroll.js.map +1 -0
  2109. package/dist/src/ui/hooks/useBatchedScroll.test.d.ts +6 -0
  2110. package/dist/src/ui/hooks/useBatchedScroll.test.js +42 -0
  2111. package/dist/src/ui/hooks/useBatchedScroll.test.js.map +1 -0
  2112. package/dist/src/ui/hooks/useBracketedPaste.d.ts +12 -0
  2113. package/dist/src/ui/hooks/useBracketedPaste.js +32 -0
  2114. package/dist/src/ui/hooks/useBracketedPaste.js.map +1 -0
  2115. package/dist/src/ui/hooks/useBranchCommand.d.ts +33 -0
  2116. package/dist/src/ui/hooks/useBranchCommand.js +230 -0
  2117. package/dist/src/ui/hooks/useBranchCommand.js.map +1 -0
  2118. package/dist/src/ui/hooks/useBranchCommand.test.d.ts +6 -0
  2119. package/dist/src/ui/hooks/useBranchCommand.test.js +386 -0
  2120. package/dist/src/ui/hooks/useBranchCommand.test.js.map +1 -0
  2121. package/dist/src/ui/hooks/useCommandCompletion.d.ts +37 -0
  2122. package/dist/src/ui/hooks/useCommandCompletion.js +227 -0
  2123. package/dist/src/ui/hooks/useCommandCompletion.js.map +1 -0
  2124. package/dist/src/ui/hooks/useCommandMigration.d.ts +16 -0
  2125. package/dist/src/ui/hooks/useCommandMigration.js +40 -0
  2126. package/dist/src/ui/hooks/useCommandMigration.js.map +1 -0
  2127. package/dist/src/ui/hooks/useCompletion.d.ts +24 -0
  2128. package/dist/src/ui/hooks/useCompletion.js +88 -0
  2129. package/dist/src/ui/hooks/useCompletion.js.map +1 -0
  2130. package/dist/src/ui/hooks/useConfigInitMessage.d.ts +6 -0
  2131. package/dist/src/ui/hooks/useConfigInitMessage.js +45 -0
  2132. package/dist/src/ui/hooks/useConfigInitMessage.js.map +1 -0
  2133. package/dist/src/ui/hooks/useConfigInitMessage.test.d.ts +6 -0
  2134. package/dist/src/ui/hooks/useConfigInitMessage.test.js +80 -0
  2135. package/dist/src/ui/hooks/useConfigInitMessage.test.js.map +1 -0
  2136. package/dist/src/ui/hooks/useContextualTips.d.ts +19 -0
  2137. package/dist/src/ui/hooks/useContextualTips.js +65 -0
  2138. package/dist/src/ui/hooks/useContextualTips.js.map +1 -0
  2139. package/dist/src/ui/hooks/useDeleteCommand.d.ts +19 -0
  2140. package/dist/src/ui/hooks/useDeleteCommand.js +167 -0
  2141. package/dist/src/ui/hooks/useDeleteCommand.js.map +1 -0
  2142. package/dist/src/ui/hooks/useDeleteCommand.test.d.ts +6 -0
  2143. package/dist/src/ui/hooks/useDeleteCommand.test.js +391 -0
  2144. package/dist/src/ui/hooks/useDeleteCommand.test.js.map +1 -0
  2145. package/dist/src/ui/hooks/useDialogClose.d.ts +48 -0
  2146. package/dist/src/ui/hooks/useDialogClose.js +102 -0
  2147. package/dist/src/ui/hooks/useDialogClose.js.map +1 -0
  2148. package/dist/src/ui/hooks/useDiffData.d.ts +32 -0
  2149. package/dist/src/ui/hooks/useDiffData.js +72 -0
  2150. package/dist/src/ui/hooks/useDiffData.js.map +1 -0
  2151. package/dist/src/ui/hooks/useDoublePress.d.ts +18 -0
  2152. package/dist/src/ui/hooks/useDoublePress.js +47 -0
  2153. package/dist/src/ui/hooks/useDoublePress.js.map +1 -0
  2154. package/dist/src/ui/hooks/useEditorSettings.d.ts +16 -0
  2155. package/dist/src/ui/hooks/useEditorSettings.js +43 -0
  2156. package/dist/src/ui/hooks/useEditorSettings.js.map +1 -0
  2157. package/dist/src/ui/hooks/useEditorSettings.test.d.ts +6 -0
  2158. package/dist/src/ui/hooks/useEditorSettings.test.js +164 -0
  2159. package/dist/src/ui/hooks/useEditorSettings.test.js.map +1 -0
  2160. package/dist/src/ui/hooks/useExportCompletion.d.ts +70 -0
  2161. package/dist/src/ui/hooks/useExportCompletion.js +208 -0
  2162. package/dist/src/ui/hooks/useExportCompletion.js.map +1 -0
  2163. package/dist/src/ui/hooks/useExportCompletion.test.d.ts +6 -0
  2164. package/dist/src/ui/hooks/useExportCompletion.test.js +190 -0
  2165. package/dist/src/ui/hooks/useExportCompletion.test.js.map +1 -0
  2166. package/dist/src/ui/hooks/useExtensionUpdates.d.ts +71 -0
  2167. package/dist/src/ui/hooks/useExtensionUpdates.js +229 -0
  2168. package/dist/src/ui/hooks/useExtensionUpdates.js.map +1 -0
  2169. package/dist/src/ui/hooks/useExtensionUpdates.test.d.ts +6 -0
  2170. package/dist/src/ui/hooks/useExtensionUpdates.test.js +455 -0
  2171. package/dist/src/ui/hooks/useExtensionUpdates.test.js.map +1 -0
  2172. package/dist/src/ui/hooks/useExtensionsManagerDialog.d.ts +12 -0
  2173. package/dist/src/ui/hooks/useExtensionsManagerDialog.js +21 -0
  2174. package/dist/src/ui/hooks/useExtensionsManagerDialog.js.map +1 -0
  2175. package/dist/src/ui/hooks/useFeedbackDialog.d.ts +18 -0
  2176. package/dist/src/ui/hooks/useFeedbackDialog.js +130 -0
  2177. package/dist/src/ui/hooks/useFeedbackDialog.js.map +1 -0
  2178. package/dist/src/ui/hooks/useFocus.d.ts +10 -0
  2179. package/dist/src/ui/hooks/useFocus.js +51 -0
  2180. package/dist/src/ui/hooks/useFocus.js.map +1 -0
  2181. package/dist/src/ui/hooks/useFolderTrust.d.ts +13 -0
  2182. package/dist/src/ui/hooks/useFolderTrust.js +60 -0
  2183. package/dist/src/ui/hooks/useFolderTrust.js.map +1 -0
  2184. package/dist/src/ui/hooks/useFollowupSuggestions.d.ts +53 -0
  2185. package/dist/src/ui/hooks/useFollowupSuggestions.js +89 -0
  2186. package/dist/src/ui/hooks/useFollowupSuggestions.js.map +1 -0
  2187. package/dist/src/ui/hooks/useGeminiStream.d.ts +76 -0
  2188. package/dist/src/ui/hooks/useGeminiStream.js +1899 -0
  2189. package/dist/src/ui/hooks/useGeminiStream.js.map +1 -0
  2190. package/dist/src/ui/hooks/useGitBranchName.d.ts +6 -0
  2191. package/dist/src/ui/hooks/useGitBranchName.js +61 -0
  2192. package/dist/src/ui/hooks/useGitBranchName.js.map +1 -0
  2193. package/dist/src/ui/hooks/useGitBranchName.test.d.ts +6 -0
  2194. package/dist/src/ui/hooks/useGitBranchName.test.js +192 -0
  2195. package/dist/src/ui/hooks/useGitBranchName.test.js.map +1 -0
  2196. package/dist/src/ui/hooks/useHistoryManager.d.ts +24 -0
  2197. package/dist/src/ui/hooks/useHistoryManager.js +183 -0
  2198. package/dist/src/ui/hooks/useHistoryManager.js.map +1 -0
  2199. package/dist/src/ui/hooks/useHistoryManager.test.d.ts +6 -0
  2200. package/dist/src/ui/hooks/useHistoryManager.test.js +495 -0
  2201. package/dist/src/ui/hooks/useHistoryManager.test.js.map +1 -0
  2202. package/dist/src/ui/hooks/useHooksDialog.d.ts +11 -0
  2203. package/dist/src/ui/hooks/useHooksDialog.js +21 -0
  2204. package/dist/src/ui/hooks/useHooksDialog.js.map +1 -0
  2205. package/dist/src/ui/hooks/useIdeTrustListener.d.ts +16 -0
  2206. package/dist/src/ui/hooks/useIdeTrustListener.js +65 -0
  2207. package/dist/src/ui/hooks/useIdeTrustListener.js.map +1 -0
  2208. package/dist/src/ui/hooks/useIdeTrustListener.test.d.ts +6 -0
  2209. package/dist/src/ui/hooks/useIdeTrustListener.test.js +183 -0
  2210. package/dist/src/ui/hooks/useIdeTrustListener.test.js.map +1 -0
  2211. package/dist/src/ui/hooks/useInitializationAuthError.d.ts +22 -0
  2212. package/dist/src/ui/hooks/useInitializationAuthError.js +40 -0
  2213. package/dist/src/ui/hooks/useInitializationAuthError.js.map +1 -0
  2214. package/dist/src/ui/hooks/useInputHistory.d.ts +20 -0
  2215. package/dist/src/ui/hooks/useInputHistory.js +85 -0
  2216. package/dist/src/ui/hooks/useInputHistory.js.map +1 -0
  2217. package/dist/src/ui/hooks/useInputHistory.test.d.ts +6 -0
  2218. package/dist/src/ui/hooks/useInputHistory.test.js +207 -0
  2219. package/dist/src/ui/hooks/useInputHistory.test.js.map +1 -0
  2220. package/dist/src/ui/hooks/useInputHistoryStore.d.ts +19 -0
  2221. package/dist/src/ui/hooks/useInputHistoryStore.js +83 -0
  2222. package/dist/src/ui/hooks/useInputHistoryStore.js.map +1 -0
  2223. package/dist/src/ui/hooks/useInputHistoryStore.test.d.ts +6 -0
  2224. package/dist/src/ui/hooks/useInputHistoryStore.test.js +231 -0
  2225. package/dist/src/ui/hooks/useInputHistoryStore.test.js.map +1 -0
  2226. package/dist/src/ui/hooks/useKeypress.d.ts +17 -0
  2227. package/dist/src/ui/hooks/useKeypress.js +27 -0
  2228. package/dist/src/ui/hooks/useKeypress.js.map +1 -0
  2229. package/dist/src/ui/hooks/useKittyKeyboardProtocol.d.ts +15 -0
  2230. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js +20 -0
  2231. package/dist/src/ui/hooks/useKittyKeyboardProtocol.js.map +1 -0
  2232. package/dist/src/ui/hooks/useLaunchEditor.d.ts +5 -0
  2233. package/dist/src/ui/hooks/useLaunchEditor.js +75 -0
  2234. package/dist/src/ui/hooks/useLaunchEditor.js.map +1 -0
  2235. package/dist/src/ui/hooks/useLoadingIndicator.d.ts +11 -0
  2236. package/dist/src/ui/hooks/useLoadingIndicator.js +50 -0
  2237. package/dist/src/ui/hooks/useLoadingIndicator.js.map +1 -0
  2238. package/dist/src/ui/hooks/useLoadingIndicator.test.d.ts +6 -0
  2239. package/dist/src/ui/hooks/useLoadingIndicator.test.js +172 -0
  2240. package/dist/src/ui/hooks/useLoadingIndicator.test.js.map +1 -0
  2241. package/dist/src/ui/hooks/useLogger.d.ts +11 -0
  2242. package/dist/src/ui/hooks/useLogger.js +32 -0
  2243. package/dist/src/ui/hooks/useLogger.js.map +1 -0
  2244. package/dist/src/ui/hooks/useMCPHealth.d.ts +16 -0
  2245. package/dist/src/ui/hooks/useMCPHealth.js +56 -0
  2246. package/dist/src/ui/hooks/useMCPHealth.js.map +1 -0
  2247. package/dist/src/ui/hooks/useMcpDialog.d.ts +11 -0
  2248. package/dist/src/ui/hooks/useMcpDialog.js +21 -0
  2249. package/dist/src/ui/hooks/useMcpDialog.js.map +1 -0
  2250. package/dist/src/ui/hooks/useMemoryDialog.d.ts +11 -0
  2251. package/dist/src/ui/hooks/useMemoryDialog.js +21 -0
  2252. package/dist/src/ui/hooks/useMemoryDialog.js.map +1 -0
  2253. package/dist/src/ui/hooks/useMemoryMonitor.d.ts +17 -0
  2254. package/dist/src/ui/hooks/useMemoryMonitor.js +83 -0
  2255. package/dist/src/ui/hooks/useMemoryMonitor.js.map +1 -0
  2256. package/dist/src/ui/hooks/useMemoryMonitor.test.d.ts +6 -0
  2257. package/dist/src/ui/hooks/useMemoryMonitor.test.js +153 -0
  2258. package/dist/src/ui/hooks/useMemoryMonitor.test.js.map +1 -0
  2259. package/dist/src/ui/hooks/useMessageQueue.d.ts +18 -0
  2260. package/dist/src/ui/hooks/useMessageQueue.js +67 -0
  2261. package/dist/src/ui/hooks/useMessageQueue.js.map +1 -0
  2262. package/dist/src/ui/hooks/useMessageQueue.test.d.ts +6 -0
  2263. package/dist/src/ui/hooks/useMessageQueue.test.js +219 -0
  2264. package/dist/src/ui/hooks/useMessageQueue.test.js.map +1 -0
  2265. package/dist/src/ui/hooks/useModelCommand.d.ts +15 -0
  2266. package/dist/src/ui/hooks/useModelCommand.js +25 -0
  2267. package/dist/src/ui/hooks/useModelCommand.js.map +1 -0
  2268. package/dist/src/ui/hooks/useModelCommand.test.d.ts +6 -0
  2269. package/dist/src/ui/hooks/useModelCommand.test.js +35 -0
  2270. package/dist/src/ui/hooks/useModelCommand.test.js.map +1 -0
  2271. package/dist/src/ui/hooks/useMouseEvents.d.ts +44 -0
  2272. package/dist/src/ui/hooks/useMouseEvents.js +85 -0
  2273. package/dist/src/ui/hooks/useMouseEvents.js.map +1 -0
  2274. package/dist/src/ui/hooks/usePhraseCycler.d.ts +14 -0
  2275. package/dist/src/ui/hooks/usePhraseCycler.js +70 -0
  2276. package/dist/src/ui/hooks/usePhraseCycler.js.map +1 -0
  2277. package/dist/src/ui/hooks/usePreferredEditor.d.ts +7 -0
  2278. package/dist/src/ui/hooks/usePreferredEditor.js +25 -0
  2279. package/dist/src/ui/hooks/usePreferredEditor.js.map +1 -0
  2280. package/dist/src/ui/hooks/useProviderUpdates.d.ts +33 -0
  2281. package/dist/src/ui/hooks/useProviderUpdates.js +215 -0
  2282. package/dist/src/ui/hooks/useProviderUpdates.js.map +1 -0
  2283. package/dist/src/ui/hooks/useProviderUpdates.test.d.ts +6 -0
  2284. package/dist/src/ui/hooks/useProviderUpdates.test.js +293 -0
  2285. package/dist/src/ui/hooks/useProviderUpdates.test.js.map +1 -0
  2286. package/dist/src/ui/hooks/useQwenAuth.d.ts +20 -0
  2287. package/dist/src/ui/hooks/useQwenAuth.js +74 -0
  2288. package/dist/src/ui/hooks/useQwenAuth.js.map +1 -0
  2289. package/dist/src/ui/hooks/useQwenAuth.test.d.ts +6 -0
  2290. package/dist/src/ui/hooks/useQwenAuth.test.js +266 -0
  2291. package/dist/src/ui/hooks/useQwenAuth.test.js.map +1 -0
  2292. package/dist/src/ui/hooks/useReactToolScheduler.d.ts +33 -0
  2293. package/dist/src/ui/hooks/useReactToolScheduler.js +236 -0
  2294. package/dist/src/ui/hooks/useReactToolScheduler.js.map +1 -0
  2295. package/dist/src/ui/hooks/useRefreshMemoryCommand.d.ts +6 -0
  2296. package/dist/src/ui/hooks/useRefreshMemoryCommand.js +7 -0
  2297. package/dist/src/ui/hooks/useRefreshMemoryCommand.js.map +1 -0
  2298. package/dist/src/ui/hooks/useResumeCommand.d.ts +31 -0
  2299. package/dist/src/ui/hooks/useResumeCommand.js +114 -0
  2300. package/dist/src/ui/hooks/useResumeCommand.js.map +1 -0
  2301. package/dist/src/ui/hooks/useResumeCommand.test.d.ts +6 -0
  2302. package/dist/src/ui/hooks/useResumeCommand.test.js +349 -0
  2303. package/dist/src/ui/hooks/useResumeCommand.test.js.map +1 -0
  2304. package/dist/src/ui/hooks/useReverseSearchCompletion.d.ts +19 -0
  2305. package/dist/src/ui/hooks/useReverseSearchCompletion.js +103 -0
  2306. package/dist/src/ui/hooks/useReverseSearchCompletion.js.map +1 -0
  2307. package/dist/src/ui/hooks/useReverseSearchCompletion.test.d.ts +6 -0
  2308. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js +163 -0
  2309. package/dist/src/ui/hooks/useReverseSearchCompletion.test.js.map +1 -0
  2310. package/dist/src/ui/hooks/useSelectionList.d.ts +41 -0
  2311. package/dist/src/ui/hooks/useSelectionList.js +276 -0
  2312. package/dist/src/ui/hooks/useSelectionList.js.map +1 -0
  2313. package/dist/src/ui/hooks/useSelectionList.test.d.ts +6 -0
  2314. package/dist/src/ui/hooks/useSelectionList.test.js +782 -0
  2315. package/dist/src/ui/hooks/useSelectionList.test.js.map +1 -0
  2316. package/dist/src/ui/hooks/useSessionPicker.d.ts +95 -0
  2317. package/dist/src/ui/hooks/useSessionPicker.js +383 -0
  2318. package/dist/src/ui/hooks/useSessionPicker.js.map +1 -0
  2319. package/dist/src/ui/hooks/useSessionPicker.test.d.ts +6 -0
  2320. package/dist/src/ui/hooks/useSessionPicker.test.js +94 -0
  2321. package/dist/src/ui/hooks/useSessionPicker.test.js.map +1 -0
  2322. package/dist/src/ui/hooks/useSessionSearchInput.d.ts +69 -0
  2323. package/dist/src/ui/hooks/useSessionSearchInput.js +124 -0
  2324. package/dist/src/ui/hooks/useSessionSearchInput.js.map +1 -0
  2325. package/dist/src/ui/hooks/useSessionSearchInput.test.d.ts +6 -0
  2326. package/dist/src/ui/hooks/useSessionSearchInput.test.js +342 -0
  2327. package/dist/src/ui/hooks/useSessionSearchInput.test.js.map +1 -0
  2328. package/dist/src/ui/hooks/useSettingsCommand.d.ts +10 -0
  2329. package/dist/src/ui/hooks/useSettingsCommand.js +21 -0
  2330. package/dist/src/ui/hooks/useSettingsCommand.js.map +1 -0
  2331. package/dist/src/ui/hooks/useShellHistory.d.ts +14 -0
  2332. package/dist/src/ui/hooks/useShellHistory.js +112 -0
  2333. package/dist/src/ui/hooks/useShellHistory.js.map +1 -0
  2334. package/dist/src/ui/hooks/useShellHistory.test.d.ts +6 -0
  2335. package/dist/src/ui/hooks/useShellHistory.test.js +193 -0
  2336. package/dist/src/ui/hooks/useShellHistory.test.js.map +1 -0
  2337. package/dist/src/ui/hooks/useShowMemoryCommand.d.ts +9 -0
  2338. package/dist/src/ui/hooks/useShowMemoryCommand.js +55 -0
  2339. package/dist/src/ui/hooks/useShowMemoryCommand.js.map +1 -0
  2340. package/dist/src/ui/hooks/useSkillsManagerDialog.d.ts +11 -0
  2341. package/dist/src/ui/hooks/useSkillsManagerDialog.js +21 -0
  2342. package/dist/src/ui/hooks/useSkillsManagerDialog.js.map +1 -0
  2343. package/dist/src/ui/hooks/useSlashCompletion.d.ts +27 -0
  2344. package/dist/src/ui/hooks/useSlashCompletion.integration.test.d.ts +6 -0
  2345. package/dist/src/ui/hooks/useSlashCompletion.integration.test.js +84 -0
  2346. package/dist/src/ui/hooks/useSlashCompletion.integration.test.js.map +1 -0
  2347. package/dist/src/ui/hooks/useSlashCompletion.js +490 -0
  2348. package/dist/src/ui/hooks/useSlashCompletion.js.map +1 -0
  2349. package/dist/src/ui/hooks/useSlashCompletion.test.d.ts +9 -0
  2350. package/dist/src/ui/hooks/useSlashCompletion.test.js +805 -0
  2351. package/dist/src/ui/hooks/useSlashCompletion.test.js.map +1 -0
  2352. package/dist/src/ui/hooks/useStateAndRef.d.ts +7 -0
  2353. package/dist/src/ui/hooks/useStateAndRef.js +26 -0
  2354. package/dist/src/ui/hooks/useStateAndRef.js.map +1 -0
  2355. package/dist/src/ui/hooks/useStatsDialog.d.ts +11 -0
  2356. package/dist/src/ui/hooks/useStatsDialog.js +13 -0
  2357. package/dist/src/ui/hooks/useStatsDialog.js.map +1 -0
  2358. package/dist/src/ui/hooks/useStatusLine.d.ts +84 -0
  2359. package/dist/src/ui/hooks/useStatusLine.js +528 -0
  2360. package/dist/src/ui/hooks/useStatusLine.js.map +1 -0
  2361. package/dist/src/ui/hooks/useStatusLine.test.d.ts +6 -0
  2362. package/dist/src/ui/hooks/useStatusLine.test.js +1039 -0
  2363. package/dist/src/ui/hooks/useStatusLine.test.js.map +1 -0
  2364. package/dist/src/ui/hooks/useSubagentCreateDialog.d.ts +10 -0
  2365. package/dist/src/ui/hooks/useSubagentCreateDialog.js +21 -0
  2366. package/dist/src/ui/hooks/useSubagentCreateDialog.js.map +1 -0
  2367. package/dist/src/ui/hooks/useTerminalNotification.d.ts +32 -0
  2368. package/dist/src/ui/hooks/useTerminalNotification.js +45 -0
  2369. package/dist/src/ui/hooks/useTerminalNotification.js.map +1 -0
  2370. package/dist/src/ui/hooks/useTerminalNotification.test.d.ts +6 -0
  2371. package/dist/src/ui/hooks/useTerminalNotification.test.js +69 -0
  2372. package/dist/src/ui/hooks/useTerminalNotification.test.js.map +1 -0
  2373. package/dist/src/ui/hooks/useTerminalProgress.d.ts +12 -0
  2374. package/dist/src/ui/hooks/useTerminalProgress.js +76 -0
  2375. package/dist/src/ui/hooks/useTerminalProgress.js.map +1 -0
  2376. package/dist/src/ui/hooks/useTerminalSize.d.ts +13 -0
  2377. package/dist/src/ui/hooks/useTerminalSize.js +30 -0
  2378. package/dist/src/ui/hooks/useTerminalSize.js.map +1 -0
  2379. package/dist/src/ui/hooks/useThemeCommand.d.ts +15 -0
  2380. package/dist/src/ui/hooks/useThemeCommand.js +85 -0
  2381. package/dist/src/ui/hooks/useThemeCommand.js.map +1 -0
  2382. package/dist/src/ui/hooks/useThemeCommand.test.d.ts +6 -0
  2383. package/dist/src/ui/hooks/useThemeCommand.test.js +42 -0
  2384. package/dist/src/ui/hooks/useThemeCommand.test.js.map +1 -0
  2385. package/dist/src/ui/hooks/useTimer.d.ts +12 -0
  2386. package/dist/src/ui/hooks/useTimer.js +58 -0
  2387. package/dist/src/ui/hooks/useTimer.js.map +1 -0
  2388. package/dist/src/ui/hooks/useTimer.test.d.ts +6 -0
  2389. package/dist/src/ui/hooks/useTimer.test.js +90 -0
  2390. package/dist/src/ui/hooks/useTimer.test.js.map +1 -0
  2391. package/dist/src/ui/hooks/useTomlMigration.d.ts +1 -0
  2392. package/dist/src/ui/hooks/useTomlMigration.js +2 -0
  2393. package/dist/src/ui/hooks/useTomlMigration.js.map +1 -0
  2394. package/dist/src/ui/hooks/useToolScheduler.test.d.ts +6 -0
  2395. package/dist/src/ui/hooks/useToolScheduler.test.js +624 -0
  2396. package/dist/src/ui/hooks/useToolScheduler.test.js.map +1 -0
  2397. package/dist/src/ui/hooks/useTrustModify.d.ts +17 -0
  2398. package/dist/src/ui/hooks/useTrustModify.js +78 -0
  2399. package/dist/src/ui/hooks/useTrustModify.js.map +1 -0
  2400. package/dist/src/ui/hooks/useTrustModify.test.d.ts +6 -0
  2401. package/dist/src/ui/hooks/useTrustModify.test.js +182 -0
  2402. package/dist/src/ui/hooks/useTrustModify.test.js.map +1 -0
  2403. package/dist/src/ui/hooks/useTurnDiffs.d.ts +34 -0
  2404. package/dist/src/ui/hooks/useTurnDiffs.js +130 -0
  2405. package/dist/src/ui/hooks/useTurnDiffs.js.map +1 -0
  2406. package/dist/src/ui/hooks/useTurnDiffs.test.d.ts +6 -0
  2407. package/dist/src/ui/hooks/useTurnDiffs.test.js +164 -0
  2408. package/dist/src/ui/hooks/useTurnDiffs.test.js.map +1 -0
  2409. package/dist/src/ui/hooks/useWelcomeBack.d.ts +23 -0
  2410. package/dist/src/ui/hooks/useWelcomeBack.js +99 -0
  2411. package/dist/src/ui/hooks/useWelcomeBack.js.map +1 -0
  2412. package/dist/src/ui/hooks/useWelcomeBack.test.d.ts +6 -0
  2413. package/dist/src/ui/hooks/useWelcomeBack.test.js +94 -0
  2414. package/dist/src/ui/hooks/useWelcomeBack.test.js.map +1 -0
  2415. package/dist/src/ui/hooks/useWorktreeSession.d.ts +26 -0
  2416. package/dist/src/ui/hooks/useWorktreeSession.js +92 -0
  2417. package/dist/src/ui/hooks/useWorktreeSession.js.map +1 -0
  2418. package/dist/src/ui/hooks/useWorktreeSession.test.d.ts +6 -0
  2419. package/dist/src/ui/hooks/useWorktreeSession.test.js +84 -0
  2420. package/dist/src/ui/hooks/useWorktreeSession.test.js.map +1 -0
  2421. package/dist/src/ui/hooks/vim.d.ts +13 -0
  2422. package/dist/src/ui/hooks/vim.js +1637 -0
  2423. package/dist/src/ui/hooks/vim.js.map +1 -0
  2424. package/dist/src/ui/hooks/vim.test.d.ts +6 -0
  2425. package/dist/src/ui/hooks/vim.test.js +1975 -0
  2426. package/dist/src/ui/hooks/vim.test.js.map +1 -0
  2427. package/dist/src/ui/keyMatchers.d.ts +27 -0
  2428. package/dist/src/ui/keyMatchers.js +71 -0
  2429. package/dist/src/ui/keyMatchers.js.map +1 -0
  2430. package/dist/src/ui/keyMatchers.test.d.ts +6 -0
  2431. package/dist/src/ui/keyMatchers.test.js +421 -0
  2432. package/dist/src/ui/keyMatchers.test.js.map +1 -0
  2433. package/dist/src/ui/layouts/DefaultAppLayout.d.ts +7 -0
  2434. package/dist/src/ui/layouts/DefaultAppLayout.js +49 -0
  2435. package/dist/src/ui/layouts/DefaultAppLayout.js.map +1 -0
  2436. package/dist/src/ui/layouts/DefaultAppLayout.test.d.ts +6 -0
  2437. package/dist/src/ui/layouts/DefaultAppLayout.test.js +185 -0
  2438. package/dist/src/ui/layouts/DefaultAppLayout.test.js.map +1 -0
  2439. package/dist/src/ui/layouts/ScreenReaderAppLayout.d.ts +7 -0
  2440. package/dist/src/ui/layouts/ScreenReaderAppLayout.js +27 -0
  2441. package/dist/src/ui/layouts/ScreenReaderAppLayout.js.map +1 -0
  2442. package/dist/src/ui/layouts/ScreenReaderAppLayout.test.d.ts +6 -0
  2443. package/dist/src/ui/layouts/ScreenReaderAppLayout.test.js +135 -0
  2444. package/dist/src/ui/layouts/ScreenReaderAppLayout.test.js.map +1 -0
  2445. package/dist/src/ui/models/availableModels.d.ts +30 -0
  2446. package/dist/src/ui/models/availableModels.js +103 -0
  2447. package/dist/src/ui/models/availableModels.js.map +1 -0
  2448. package/dist/src/ui/models/availableModels.test.d.ts +6 -0
  2449. package/dist/src/ui/models/availableModels.test.js +142 -0
  2450. package/dist/src/ui/models/availableModels.test.js.map +1 -0
  2451. package/dist/src/ui/noninteractive/nonInteractiveUi.d.ts +12 -0
  2452. package/dist/src/ui/noninteractive/nonInteractiveUi.js +33 -0
  2453. package/dist/src/ui/noninteractive/nonInteractiveUi.js.map +1 -0
  2454. package/dist/src/ui/semantic-colors.d.ts +7 -0
  2455. package/dist/src/ui/semantic-colors.js +24 -0
  2456. package/dist/src/ui/semantic-colors.js.map +1 -0
  2457. package/dist/src/ui/state/extensions.d.ts +43 -0
  2458. package/dist/src/ui/state/extensions.js +63 -0
  2459. package/dist/src/ui/state/extensions.js.map +1 -0
  2460. package/dist/src/ui/statusLinePresets.d.ts +79 -0
  2461. package/dist/src/ui/statusLinePresets.js +310 -0
  2462. package/dist/src/ui/statusLinePresets.js.map +1 -0
  2463. package/dist/src/ui/statusLinePresets.test.d.ts +6 -0
  2464. package/dist/src/ui/statusLinePresets.test.js +221 -0
  2465. package/dist/src/ui/statusLinePresets.test.js.map +1 -0
  2466. package/dist/src/ui/textConstants.d.ts +9 -0
  2467. package/dist/src/ui/textConstants.js +10 -0
  2468. package/dist/src/ui/textConstants.js.map +1 -0
  2469. package/dist/src/ui/themes/ansi-light.d.ts +7 -0
  2470. package/dist/src/ui/themes/ansi-light.js +144 -0
  2471. package/dist/src/ui/themes/ansi-light.js.map +1 -0
  2472. package/dist/src/ui/themes/ansi.d.ts +7 -0
  2473. package/dist/src/ui/themes/ansi.js +154 -0
  2474. package/dist/src/ui/themes/ansi.js.map +1 -0
  2475. package/dist/src/ui/themes/atom-one-dark.d.ts +7 -0
  2476. package/dist/src/ui/themes/atom-one-dark.js +140 -0
  2477. package/dist/src/ui/themes/atom-one-dark.js.map +1 -0
  2478. package/dist/src/ui/themes/ayu-light.d.ts +7 -0
  2479. package/dist/src/ui/themes/ayu-light.js +132 -0
  2480. package/dist/src/ui/themes/ayu-light.js.map +1 -0
  2481. package/dist/src/ui/themes/ayu.d.ts +7 -0
  2482. package/dist/src/ui/themes/ayu.js +106 -0
  2483. package/dist/src/ui/themes/ayu.js.map +1 -0
  2484. package/dist/src/ui/themes/color-utils.d.ts +21 -0
  2485. package/dist/src/ui/themes/color-utils.js +223 -0
  2486. package/dist/src/ui/themes/color-utils.js.map +1 -0
  2487. package/dist/src/ui/themes/color-utils.test.d.ts +6 -0
  2488. package/dist/src/ui/themes/color-utils.test.js +197 -0
  2489. package/dist/src/ui/themes/color-utils.test.js.map +1 -0
  2490. package/dist/src/ui/themes/default-light.d.ts +7 -0
  2491. package/dist/src/ui/themes/default-light.js +100 -0
  2492. package/dist/src/ui/themes/default-light.js.map +1 -0
  2493. package/dist/src/ui/themes/default.d.ts +7 -0
  2494. package/dist/src/ui/themes/default.js +143 -0
  2495. package/dist/src/ui/themes/default.js.map +1 -0
  2496. package/dist/src/ui/themes/detect-terminal-theme.d.ts +75 -0
  2497. package/dist/src/ui/themes/detect-terminal-theme.js +228 -0
  2498. package/dist/src/ui/themes/detect-terminal-theme.js.map +1 -0
  2499. package/dist/src/ui/themes/detect-terminal-theme.test.d.ts +6 -0
  2500. package/dist/src/ui/themes/detect-terminal-theme.test.js +269 -0
  2501. package/dist/src/ui/themes/detect-terminal-theme.test.js.map +1 -0
  2502. package/dist/src/ui/themes/dracula.d.ts +7 -0
  2503. package/dist/src/ui/themes/dracula.js +117 -0
  2504. package/dist/src/ui/themes/dracula.js.map +1 -0
  2505. package/dist/src/ui/themes/github-dark.d.ts +7 -0
  2506. package/dist/src/ui/themes/github-dark.js +140 -0
  2507. package/dist/src/ui/themes/github-dark.js.map +1 -0
  2508. package/dist/src/ui/themes/github-light.d.ts +7 -0
  2509. package/dist/src/ui/themes/github-light.js +142 -0
  2510. package/dist/src/ui/themes/github-light.js.map +1 -0
  2511. package/dist/src/ui/themes/googlecode.d.ts +7 -0
  2512. package/dist/src/ui/themes/googlecode.js +139 -0
  2513. package/dist/src/ui/themes/googlecode.js.map +1 -0
  2514. package/dist/src/ui/themes/no-color.d.ts +7 -0
  2515. package/dist/src/ui/themes/no-color.js +120 -0
  2516. package/dist/src/ui/themes/no-color.js.map +1 -0
  2517. package/dist/src/ui/themes/qwen-dark.d.ts +7 -0
  2518. package/dist/src/ui/themes/qwen-dark.js +107 -0
  2519. package/dist/src/ui/themes/qwen-dark.js.map +1 -0
  2520. package/dist/src/ui/themes/qwen-light.d.ts +7 -0
  2521. package/dist/src/ui/themes/qwen-light.js +133 -0
  2522. package/dist/src/ui/themes/qwen-light.js.map +1 -0
  2523. package/dist/src/ui/themes/semantic-tokens.d.ts +40 -0
  2524. package/dist/src/ui/themes/semantic-tokens.js +103 -0
  2525. package/dist/src/ui/themes/semantic-tokens.js.map +1 -0
  2526. package/dist/src/ui/themes/shades-of-purple.d.ts +11 -0
  2527. package/dist/src/ui/themes/shades-of-purple.js +306 -0
  2528. package/dist/src/ui/themes/shades-of-purple.js.map +1 -0
  2529. package/dist/src/ui/themes/theme-manager.d.ts +91 -0
  2530. package/dist/src/ui/themes/theme-manager.js +311 -0
  2531. package/dist/src/ui/themes/theme-manager.js.map +1 -0
  2532. package/dist/src/ui/themes/theme-manager.test.d.ts +6 -0
  2533. package/dist/src/ui/themes/theme-manager.test.js +188 -0
  2534. package/dist/src/ui/themes/theme-manager.test.js.map +1 -0
  2535. package/dist/src/ui/themes/theme.d.ts +137 -0
  2536. package/dist/src/ui/themes/theme.js +393 -0
  2537. package/dist/src/ui/themes/theme.js.map +1 -0
  2538. package/dist/src/ui/themes/xcode.d.ts +7 -0
  2539. package/dist/src/ui/themes/xcode.js +147 -0
  2540. package/dist/src/ui/themes/xcode.js.map +1 -0
  2541. package/dist/src/ui/types.d.ts +620 -0
  2542. package/dist/src/ui/types.js +77 -0
  2543. package/dist/src/ui/types.js.map +1 -0
  2544. package/dist/src/ui/utils/CodeColorizer.d.ts +18 -0
  2545. package/dist/src/ui/utils/CodeColorizer.js +155 -0
  2546. package/dist/src/ui/utils/CodeColorizer.js.map +1 -0
  2547. package/dist/src/ui/utils/InlineMarkdownRenderer.d.ts +18 -0
  2548. package/dist/src/ui/utils/InlineMarkdownRenderer.js +173 -0
  2549. package/dist/src/ui/utils/InlineMarkdownRenderer.js.map +1 -0
  2550. package/dist/src/ui/utils/InlineMarkdownRenderer.test.d.ts +6 -0
  2551. package/dist/src/ui/utils/InlineMarkdownRenderer.test.js +303 -0
  2552. package/dist/src/ui/utils/InlineMarkdownRenderer.test.js.map +1 -0
  2553. package/dist/src/ui/utils/MarkdownDisplay.d.ts +25 -0
  2554. package/dist/src/ui/utils/MarkdownDisplay.js +420 -0
  2555. package/dist/src/ui/utils/MarkdownDisplay.js.map +1 -0
  2556. package/dist/src/ui/utils/MarkdownDisplay.test.d.ts +6 -0
  2557. package/dist/src/ui/utils/MarkdownDisplay.test.js +702 -0
  2558. package/dist/src/ui/utils/MarkdownDisplay.test.js.map +1 -0
  2559. package/dist/src/ui/utils/MermaidDiagram.d.ts +15 -0
  2560. package/dist/src/ui/utils/MermaidDiagram.js +88 -0
  2561. package/dist/src/ui/utils/MermaidDiagram.js.map +1 -0
  2562. package/dist/src/ui/utils/MermaidDiagram.test.d.ts +6 -0
  2563. package/dist/src/ui/utils/MermaidDiagram.test.js +90 -0
  2564. package/dist/src/ui/utils/MermaidDiagram.test.js.map +1 -0
  2565. package/dist/src/ui/utils/TableRenderer.d.ts +30 -0
  2566. package/dist/src/ui/utils/TableRenderer.js +563 -0
  2567. package/dist/src/ui/utils/TableRenderer.js.map +1 -0
  2568. package/dist/src/ui/utils/TableRenderer.test.d.ts +6 -0
  2569. package/dist/src/ui/utils/TableRenderer.test.js +568 -0
  2570. package/dist/src/ui/utils/TableRenderer.test.js.map +1 -0
  2571. package/dist/src/ui/utils/approvalModeDisplay.d.ts +8 -0
  2572. package/dist/src/ui/utils/approvalModeDisplay.js +34 -0
  2573. package/dist/src/ui/utils/approvalModeDisplay.js.map +1 -0
  2574. package/dist/src/ui/utils/approvalModeDisplay.test.d.ts +6 -0
  2575. package/dist/src/ui/utils/approvalModeDisplay.test.js +35 -0
  2576. package/dist/src/ui/utils/approvalModeDisplay.test.js.map +1 -0
  2577. package/dist/src/ui/utils/asciiCharts.d.ts +44 -0
  2578. package/dist/src/ui/utils/asciiCharts.js +307 -0
  2579. package/dist/src/ui/utils/asciiCharts.js.map +1 -0
  2580. package/dist/src/ui/utils/asciiCharts.test.d.ts +6 -0
  2581. package/dist/src/ui/utils/asciiCharts.test.js +208 -0
  2582. package/dist/src/ui/utils/asciiCharts.test.js.map +1 -0
  2583. package/dist/src/ui/utils/backgroundWorkUtils.d.ts +8 -0
  2584. package/dist/src/ui/utils/backgroundWorkUtils.js +16 -0
  2585. package/dist/src/ui/utils/backgroundWorkUtils.js.map +1 -0
  2586. package/dist/src/ui/utils/backgroundWorkUtils.test.d.ts +6 -0
  2587. package/dist/src/ui/utils/backgroundWorkUtils.test.js +85 -0
  2588. package/dist/src/ui/utils/backgroundWorkUtils.test.js.map +1 -0
  2589. package/dist/src/ui/utils/clipboardUtils.d.ts +28 -0
  2590. package/dist/src/ui/utils/clipboardUtils.js +522 -0
  2591. package/dist/src/ui/utils/clipboardUtils.js.map +1 -0
  2592. package/dist/src/ui/utils/clipboardUtils.test.d.ts +6 -0
  2593. package/dist/src/ui/utils/clipboardUtils.test.js +465 -0
  2594. package/dist/src/ui/utils/clipboardUtils.test.js.map +1 -0
  2595. package/dist/src/ui/utils/commandUtils.d.ts +112 -0
  2596. package/dist/src/ui/utils/commandUtils.js +285 -0
  2597. package/dist/src/ui/utils/commandUtils.js.map +1 -0
  2598. package/dist/src/ui/utils/commandUtils.test.d.ts +6 -0
  2599. package/dist/src/ui/utils/commandUtils.test.js +560 -0
  2600. package/dist/src/ui/utils/commandUtils.test.js.map +1 -0
  2601. package/dist/src/ui/utils/computeStats.d.ts +10 -0
  2602. package/dist/src/ui/utils/computeStats.js +57 -0
  2603. package/dist/src/ui/utils/computeStats.js.map +1 -0
  2604. package/dist/src/ui/utils/customBanner.d.ts +35 -0
  2605. package/dist/src/ui/utils/customBanner.js +361 -0
  2606. package/dist/src/ui/utils/customBanner.js.map +1 -0
  2607. package/dist/src/ui/utils/customBanner.test.d.ts +6 -0
  2608. package/dist/src/ui/utils/customBanner.test.js +439 -0
  2609. package/dist/src/ui/utils/customBanner.test.js.map +1 -0
  2610. package/dist/src/ui/utils/displayUtils.d.ts +25 -0
  2611. package/dist/src/ui/utils/displayUtils.js +46 -0
  2612. package/dist/src/ui/utils/displayUtils.js.map +1 -0
  2613. package/dist/src/ui/utils/displayUtils.test.d.ts +6 -0
  2614. package/dist/src/ui/utils/displayUtils.test.js +61 -0
  2615. package/dist/src/ui/utils/displayUtils.test.js.map +1 -0
  2616. package/dist/src/ui/utils/export/collect.d.ts +16 -0
  2617. package/dist/src/ui/utils/export/collect.js +509 -0
  2618. package/dist/src/ui/utils/export/collect.js.map +1 -0
  2619. package/dist/src/ui/utils/export/collect.test.d.ts +6 -0
  2620. package/dist/src/ui/utils/export/collect.test.js +80 -0
  2621. package/dist/src/ui/utils/export/collect.test.js.map +1 -0
  2622. package/dist/src/ui/utils/export/formatters/html.d.ts +23 -0
  2623. package/dist/src/ui/utils/export/formatters/html.js +65 -0
  2624. package/dist/src/ui/utils/export/formatters/html.js.map +1 -0
  2625. package/dist/src/ui/utils/export/formatters/json.d.ts +11 -0
  2626. package/dist/src/ui/utils/export/formatters/json.js +13 -0
  2627. package/dist/src/ui/utils/export/formatters/json.js.map +1 -0
  2628. package/dist/src/ui/utils/export/formatters/jsonl.d.ts +11 -0
  2629. package/dist/src/ui/utils/export/formatters/jsonl.js +69 -0
  2630. package/dist/src/ui/utils/export/formatters/jsonl.js.map +1 -0
  2631. package/dist/src/ui/utils/export/formatters/markdown.d.ts +10 -0
  2632. package/dist/src/ui/utils/export/formatters/markdown.js +254 -0
  2633. package/dist/src/ui/utils/export/formatters/markdown.js.map +1 -0
  2634. package/dist/src/ui/utils/export/index.d.ts +13 -0
  2635. package/dist/src/ui/utils/export/index.js +13 -0
  2636. package/dist/src/ui/utils/export/index.js.map +1 -0
  2637. package/dist/src/ui/utils/export/normalize.d.ts +12 -0
  2638. package/dist/src/ui/utils/export/normalize.js +279 -0
  2639. package/dist/src/ui/utils/export/normalize.js.map +1 -0
  2640. package/dist/src/ui/utils/export/normalize.test.d.ts +6 -0
  2641. package/dist/src/ui/utils/export/normalize.test.js +62 -0
  2642. package/dist/src/ui/utils/export/normalize.test.js.map +1 -0
  2643. package/dist/src/ui/utils/export/types.d.ts +93 -0
  2644. package/dist/src/ui/utils/export/types.js +7 -0
  2645. package/dist/src/ui/utils/export/types.js.map +1 -0
  2646. package/dist/src/ui/utils/export/utils.d.ts +9 -0
  2647. package/dist/src/ui/utils/export/utils.js +13 -0
  2648. package/dist/src/ui/utils/export/utils.js.map +1 -0
  2649. package/dist/src/ui/utils/formatters.d.ts +28 -0
  2650. package/dist/src/ui/utils/formatters.js +100 -0
  2651. package/dist/src/ui/utils/formatters.js.map +1 -0
  2652. package/dist/src/ui/utils/formatters.test.d.ts +6 -0
  2653. package/dist/src/ui/utils/formatters.test.js +141 -0
  2654. package/dist/src/ui/utils/formatters.test.js.map +1 -0
  2655. package/dist/src/ui/utils/gradientUtils.d.ts +6 -0
  2656. package/dist/src/ui/utils/gradientUtils.js +11 -0
  2657. package/dist/src/ui/utils/gradientUtils.js.map +1 -0
  2658. package/dist/src/ui/utils/highlight.d.ts +12 -0
  2659. package/dist/src/ui/utils/highlight.js +90 -0
  2660. package/dist/src/ui/utils/highlight.js.map +1 -0
  2661. package/dist/src/ui/utils/highlight.test.d.ts +6 -0
  2662. package/dist/src/ui/utils/highlight.test.js +173 -0
  2663. package/dist/src/ui/utils/highlight.test.js.map +1 -0
  2664. package/dist/src/ui/utils/historyMapping.d.ts +44 -0
  2665. package/dist/src/ui/utils/historyMapping.js +110 -0
  2666. package/dist/src/ui/utils/historyMapping.js.map +1 -0
  2667. package/dist/src/ui/utils/historyMapping.test.d.ts +6 -0
  2668. package/dist/src/ui/utils/historyMapping.test.js +376 -0
  2669. package/dist/src/ui/utils/historyMapping.test.js.map +1 -0
  2670. package/dist/src/ui/utils/historyUtils.d.ts +34 -0
  2671. package/dist/src/ui/utils/historyUtils.js +117 -0
  2672. package/dist/src/ui/utils/historyUtils.js.map +1 -0
  2673. package/dist/src/ui/utils/historyUtils.test.d.ts +6 -0
  2674. package/dist/src/ui/utils/historyUtils.test.js +107 -0
  2675. package/dist/src/ui/utils/historyUtils.test.js.map +1 -0
  2676. package/dist/src/ui/utils/isNarrowWidth.d.ts +6 -0
  2677. package/dist/src/ui/utils/isNarrowWidth.js +9 -0
  2678. package/dist/src/ui/utils/isNarrowWidth.js.map +1 -0
  2679. package/dist/src/ui/utils/kittyProtocolDetector.d.ts +19 -0
  2680. package/dist/src/ui/utils/kittyProtocolDetector.js +115 -0
  2681. package/dist/src/ui/utils/kittyProtocolDetector.js.map +1 -0
  2682. package/dist/src/ui/utils/latexRenderer.d.ts +6 -0
  2683. package/dist/src/ui/utils/latexRenderer.js +187 -0
  2684. package/dist/src/ui/utils/latexRenderer.js.map +1 -0
  2685. package/dist/src/ui/utils/latexRenderer.test.d.ts +6 -0
  2686. package/dist/src/ui/utils/latexRenderer.test.js +27 -0
  2687. package/dist/src/ui/utils/latexRenderer.test.js.map +1 -0
  2688. package/dist/src/ui/utils/layoutUtils.d.ts +32 -0
  2689. package/dist/src/ui/utils/layoutUtils.js +46 -0
  2690. package/dist/src/ui/utils/layoutUtils.js.map +1 -0
  2691. package/dist/src/ui/utils/layoutUtils.test.d.ts +6 -0
  2692. package/dist/src/ui/utils/layoutUtils.test.js +30 -0
  2693. package/dist/src/ui/utils/layoutUtils.test.js.map +1 -0
  2694. package/dist/src/ui/utils/lowlightLoader.d.ts +43 -0
  2695. package/dist/src/ui/utils/lowlightLoader.js +88 -0
  2696. package/dist/src/ui/utils/lowlightLoader.js.map +1 -0
  2697. package/dist/src/ui/utils/lowlightLoader.test.d.ts +6 -0
  2698. package/dist/src/ui/utils/lowlightLoader.test.js +120 -0
  2699. package/dist/src/ui/utils/lowlightLoader.test.js.map +1 -0
  2700. package/dist/src/ui/utils/markdownUtilities.d.ts +6 -0
  2701. package/dist/src/ui/utils/markdownUtilities.js +110 -0
  2702. package/dist/src/ui/utils/markdownUtilities.js.map +1 -0
  2703. package/dist/src/ui/utils/markdownUtilities.test.d.ts +6 -0
  2704. package/dist/src/ui/utils/markdownUtilities.test.js +42 -0
  2705. package/dist/src/ui/utils/markdownUtilities.test.js.map +1 -0
  2706. package/dist/src/ui/utils/mergeCompactToolGroups.d.ts +62 -0
  2707. package/dist/src/ui/utils/mergeCompactToolGroups.js +212 -0
  2708. package/dist/src/ui/utils/mergeCompactToolGroups.js.map +1 -0
  2709. package/dist/src/ui/utils/mergeCompactToolGroups.test.d.ts +6 -0
  2710. package/dist/src/ui/utils/mergeCompactToolGroups.test.js +473 -0
  2711. package/dist/src/ui/utils/mergeCompactToolGroups.test.js.map +1 -0
  2712. package/dist/src/ui/utils/mermaidImageRenderer.d.ts +54 -0
  2713. package/dist/src/ui/utils/mermaidImageRenderer.js +955 -0
  2714. package/dist/src/ui/utils/mermaidImageRenderer.js.map +1 -0
  2715. package/dist/src/ui/utils/mermaidImageRenderer.test.d.ts +6 -0
  2716. package/dist/src/ui/utils/mermaidImageRenderer.test.js +528 -0
  2717. package/dist/src/ui/utils/mermaidImageRenderer.test.js.map +1 -0
  2718. package/dist/src/ui/utils/mermaidVisualRenderer.d.ts +12 -0
  2719. package/dist/src/ui/utils/mermaidVisualRenderer.js +1097 -0
  2720. package/dist/src/ui/utils/mermaidVisualRenderer.js.map +1 -0
  2721. package/dist/src/ui/utils/mermaidVisualRenderer.test.d.ts +6 -0
  2722. package/dist/src/ui/utils/mermaidVisualRenderer.test.js +69 -0
  2723. package/dist/src/ui/utils/mermaidVisualRenderer.test.js.map +1 -0
  2724. package/dist/src/ui/utils/modelsBySource.d.ts +47 -0
  2725. package/dist/src/ui/utils/modelsBySource.js +89 -0
  2726. package/dist/src/ui/utils/modelsBySource.js.map +1 -0
  2727. package/dist/src/ui/utils/modelsBySource.test.d.ts +6 -0
  2728. package/dist/src/ui/utils/modelsBySource.test.js +111 -0
  2729. package/dist/src/ui/utils/modelsBySource.test.js.map +1 -0
  2730. package/dist/src/ui/utils/mouse.d.ts +39 -0
  2731. package/dist/src/ui/utils/mouse.js +169 -0
  2732. package/dist/src/ui/utils/mouse.js.map +1 -0
  2733. package/dist/src/ui/utils/mouse.test.d.ts +6 -0
  2734. package/dist/src/ui/utils/mouse.test.js +117 -0
  2735. package/dist/src/ui/utils/mouse.test.js.map +1 -0
  2736. package/dist/src/ui/utils/osc8.d.ts +124 -0
  2737. package/dist/src/ui/utils/osc8.js +463 -0
  2738. package/dist/src/ui/utils/osc8.js.map +1 -0
  2739. package/dist/src/ui/utils/osc8.test.d.ts +6 -0
  2740. package/dist/src/ui/utils/osc8.test.js +494 -0
  2741. package/dist/src/ui/utils/osc8.test.js.map +1 -0
  2742. package/dist/src/ui/utils/platformConstants.d.ts +75 -0
  2743. package/dist/src/ui/utils/platformConstants.js +78 -0
  2744. package/dist/src/ui/utils/platformConstants.js.map +1 -0
  2745. package/dist/src/ui/utils/restoreGoal.d.ts +47 -0
  2746. package/dist/src/ui/utils/restoreGoal.js +124 -0
  2747. package/dist/src/ui/utils/restoreGoal.js.map +1 -0
  2748. package/dist/src/ui/utils/restoreGoal.test.d.ts +6 -0
  2749. package/dist/src/ui/utils/restoreGoal.test.js +220 -0
  2750. package/dist/src/ui/utils/restoreGoal.test.js.map +1 -0
  2751. package/dist/src/ui/utils/resumeHistoryUtils.d.ts +22 -0
  2752. package/dist/src/ui/utils/resumeHistoryUtils.js +410 -0
  2753. package/dist/src/ui/utils/resumeHistoryUtils.js.map +1 -0
  2754. package/dist/src/ui/utils/resumeHistoryUtils.test.d.ts +6 -0
  2755. package/dist/src/ui/utils/resumeHistoryUtils.test.js +378 -0
  2756. package/dist/src/ui/utils/resumeHistoryUtils.test.js.map +1 -0
  2757. package/dist/src/ui/utils/sessionPickerUtils.d.ts +35 -0
  2758. package/dist/src/ui/utils/sessionPickerUtils.js +69 -0
  2759. package/dist/src/ui/utils/sessionPickerUtils.js.map +1 -0
  2760. package/dist/src/ui/utils/sessionPickerUtils.test.d.ts +6 -0
  2761. package/dist/src/ui/utils/sessionPickerUtils.test.js +79 -0
  2762. package/dist/src/ui/utils/sessionPickerUtils.test.js.map +1 -0
  2763. package/dist/src/ui/utils/statsDataService.d.ts +49 -0
  2764. package/dist/src/ui/utils/statsDataService.js +221 -0
  2765. package/dist/src/ui/utils/statsDataService.js.map +1 -0
  2766. package/dist/src/ui/utils/statsDataService.test.d.ts +6 -0
  2767. package/dist/src/ui/utils/statsDataService.test.js +406 -0
  2768. package/dist/src/ui/utils/statsDataService.test.js.map +1 -0
  2769. package/dist/src/ui/utils/synchronizedOutput.d.ts +16 -0
  2770. package/dist/src/ui/utils/synchronizedOutput.js +88 -0
  2771. package/dist/src/ui/utils/synchronizedOutput.js.map +1 -0
  2772. package/dist/src/ui/utils/synchronizedOutput.test.d.ts +6 -0
  2773. package/dist/src/ui/utils/synchronizedOutput.test.js +154 -0
  2774. package/dist/src/ui/utils/synchronizedOutput.test.js.map +1 -0
  2775. package/dist/src/ui/utils/terminalRedrawOptimizer.d.ts +21 -0
  2776. package/dist/src/ui/utils/terminalRedrawOptimizer.js +108 -0
  2777. package/dist/src/ui/utils/terminalRedrawOptimizer.js.map +1 -0
  2778. package/dist/src/ui/utils/terminalRedrawOptimizer.test.d.ts +6 -0
  2779. package/dist/src/ui/utils/terminalRedrawOptimizer.test.js +85 -0
  2780. package/dist/src/ui/utils/terminalRedrawOptimizer.test.js.map +1 -0
  2781. package/dist/src/ui/utils/terminalSetup.d.ts +30 -0
  2782. package/dist/src/ui/utils/terminalSetup.js +310 -0
  2783. package/dist/src/ui/utils/terminalSetup.js.map +1 -0
  2784. package/dist/src/ui/utils/textUtils.d.ts +86 -0
  2785. package/dist/src/ui/utils/textUtils.js +360 -0
  2786. package/dist/src/ui/utils/textUtils.js.map +1 -0
  2787. package/dist/src/ui/utils/textUtils.test.d.ts +6 -0
  2788. package/dist/src/ui/utils/textUtils.test.js +269 -0
  2789. package/dist/src/ui/utils/textUtils.test.js.map +1 -0
  2790. package/dist/src/ui/utils/todoSnapshot.d.ts +13 -0
  2791. package/dist/src/ui/utils/todoSnapshot.js +133 -0
  2792. package/dist/src/ui/utils/todoSnapshot.js.map +1 -0
  2793. package/dist/src/ui/utils/todoSnapshot.test.d.ts +6 -0
  2794. package/dist/src/ui/utils/todoSnapshot.test.js +281 -0
  2795. package/dist/src/ui/utils/todoSnapshot.test.js.map +1 -0
  2796. package/dist/src/ui/utils/updateCheck.d.ts +12 -0
  2797. package/dist/src/ui/utils/updateCheck.js +80 -0
  2798. package/dist/src/ui/utils/updateCheck.js.map +1 -0
  2799. package/dist/src/ui/utils/updateCheck.test.d.ts +6 -0
  2800. package/dist/src/ui/utils/updateCheck.test.js +145 -0
  2801. package/dist/src/ui/utils/updateCheck.test.js.map +1 -0
  2802. package/dist/src/utils/acpModelUtils.d.ts +39 -0
  2803. package/dist/src/utils/acpModelUtils.js +61 -0
  2804. package/dist/src/utils/acpModelUtils.js.map +1 -0
  2805. package/dist/src/utils/acpModelUtils.test.d.ts +6 -0
  2806. package/dist/src/utils/acpModelUtils.test.js +31 -0
  2807. package/dist/src/utils/acpModelUtils.test.js.map +1 -0
  2808. package/dist/src/utils/apiPreconnect.d.ts +22 -0
  2809. package/dist/src/utils/apiPreconnect.js +188 -0
  2810. package/dist/src/utils/apiPreconnect.js.map +1 -0
  2811. package/dist/src/utils/apiPreconnect.test.d.ts +6 -0
  2812. package/dist/src/utils/apiPreconnect.test.js +252 -0
  2813. package/dist/src/utils/apiPreconnect.test.js.map +1 -0
  2814. package/dist/src/utils/checks.d.ts +19 -0
  2815. package/dist/src/utils/checks.js +24 -0
  2816. package/dist/src/utils/checks.js.map +1 -0
  2817. package/dist/src/utils/cleanup.d.ts +23 -0
  2818. package/dist/src/utils/cleanup.js +96 -0
  2819. package/dist/src/utils/cleanup.js.map +1 -0
  2820. package/dist/src/utils/commands.d.ts +20 -0
  2821. package/dist/src/utils/commands.js +53 -0
  2822. package/dist/src/utils/commands.js.map +1 -0
  2823. package/dist/src/utils/commands.test.d.ts +6 -0
  2824. package/dist/src/utils/commands.test.js +115 -0
  2825. package/dist/src/utils/commands.test.js.map +1 -0
  2826. package/dist/src/utils/commentJson.d.ts +25 -0
  2827. package/dist/src/utils/commentJson.js +113 -0
  2828. package/dist/src/utils/commentJson.js.map +1 -0
  2829. package/dist/src/utils/commentJson.test.d.ts +6 -0
  2830. package/dist/src/utils/commentJson.test.js +385 -0
  2831. package/dist/src/utils/commentJson.test.js.map +1 -0
  2832. package/dist/src/utils/costCalculator.d.ts +14 -0
  2833. package/dist/src/utils/costCalculator.js +19 -0
  2834. package/dist/src/utils/costCalculator.js.map +1 -0
  2835. package/dist/src/utils/costCalculator.test.d.ts +6 -0
  2836. package/dist/src/utils/costCalculator.test.js +177 -0
  2837. package/dist/src/utils/costCalculator.test.js.map +1 -0
  2838. package/dist/src/utils/cpuProfiler.d.ts +63 -0
  2839. package/dist/src/utils/cpuProfiler.js +341 -0
  2840. package/dist/src/utils/cpuProfiler.js.map +1 -0
  2841. package/dist/src/utils/cpuProfiler.test.d.ts +6 -0
  2842. package/dist/src/utils/cpuProfiler.test.js +293 -0
  2843. package/dist/src/utils/cpuProfiler.test.js.map +1 -0
  2844. package/dist/src/utils/deepMerge.d.ts +9 -0
  2845. package/dist/src/utils/deepMerge.js +58 -0
  2846. package/dist/src/utils/deepMerge.js.map +1 -0
  2847. package/dist/src/utils/deepMerge.test.d.ts +6 -0
  2848. package/dist/src/utils/deepMerge.test.js +143 -0
  2849. package/dist/src/utils/deepMerge.test.js.map +1 -0
  2850. package/dist/src/utils/dialogScopeUtils.d.ts +28 -0
  2851. package/dist/src/utils/dialogScopeUtils.js +51 -0
  2852. package/dist/src/utils/dialogScopeUtils.js.map +1 -0
  2853. package/dist/src/utils/doctorChecks.d.ts +11 -0
  2854. package/dist/src/utils/doctorChecks.js +351 -0
  2855. package/dist/src/utils/doctorChecks.js.map +1 -0
  2856. package/dist/src/utils/doctorChecks.test.d.ts +6 -0
  2857. package/dist/src/utils/doctorChecks.test.js +280 -0
  2858. package/dist/src/utils/doctorChecks.test.js.map +1 -0
  2859. package/dist/src/utils/earlyInputCapture.d.ts +33 -0
  2860. package/dist/src/utils/earlyInputCapture.js +311 -0
  2861. package/dist/src/utils/earlyInputCapture.js.map +1 -0
  2862. package/dist/src/utils/earlyInputCapture.test.d.ts +6 -0
  2863. package/dist/src/utils/earlyInputCapture.test.js +274 -0
  2864. package/dist/src/utils/earlyInputCapture.test.js.map +1 -0
  2865. package/dist/src/utils/envVarResolver.d.ts +39 -0
  2866. package/dist/src/utils/envVarResolver.js +100 -0
  2867. package/dist/src/utils/envVarResolver.js.map +1 -0
  2868. package/dist/src/utils/envVarResolver.test.d.ts +6 -0
  2869. package/dist/src/utils/envVarResolver.test.js +221 -0
  2870. package/dist/src/utils/envVarResolver.test.js.map +1 -0
  2871. package/dist/src/utils/errors.d.ts +76 -0
  2872. package/dist/src/utils/errors.js +237 -0
  2873. package/dist/src/utils/errors.js.map +1 -0
  2874. package/dist/src/utils/errors.test.d.ts +6 -0
  2875. package/dist/src/utils/errors.test.js +536 -0
  2876. package/dist/src/utils/errors.test.js.map +1 -0
  2877. package/dist/src/utils/events.d.ts +13 -0
  2878. package/dist/src/utils/events.js +15 -0
  2879. package/dist/src/utils/events.js.map +1 -0
  2880. package/dist/src/utils/gitUtils.d.ts +30 -0
  2881. package/dist/src/utils/gitUtils.js +108 -0
  2882. package/dist/src/utils/gitUtils.js.map +1 -0
  2883. package/dist/src/utils/gitUtils.test.d.ts +6 -0
  2884. package/dist/src/utils/gitUtils.test.js +172 -0
  2885. package/dist/src/utils/gitUtils.test.js.map +1 -0
  2886. package/dist/src/utils/handleAutoUpdate.d.ts +16 -0
  2887. package/dist/src/utils/handleAutoUpdate.js +144 -0
  2888. package/dist/src/utils/handleAutoUpdate.js.map +1 -0
  2889. package/dist/src/utils/headlessSafetyWarnings.d.ts +21 -0
  2890. package/dist/src/utils/headlessSafetyWarnings.js +45 -0
  2891. package/dist/src/utils/headlessSafetyWarnings.js.map +1 -0
  2892. package/dist/src/utils/headlessSafetyWarnings.test.d.ts +6 -0
  2893. package/dist/src/utils/headlessSafetyWarnings.test.js +66 -0
  2894. package/dist/src/utils/headlessSafetyWarnings.test.js.map +1 -0
  2895. package/dist/src/utils/housekeeping/cleanup.d.ts +15 -0
  2896. package/dist/src/utils/housekeeping/cleanup.js +69 -0
  2897. package/dist/src/utils/housekeeping/cleanup.js.map +1 -0
  2898. package/dist/src/utils/housekeeping/cleanup.test.d.ts +6 -0
  2899. package/dist/src/utils/housekeeping/cleanup.test.js +166 -0
  2900. package/dist/src/utils/housekeeping/cleanup.test.js.map +1 -0
  2901. package/dist/src/utils/housekeeping/lastInteractionAt.d.ts +9 -0
  2902. package/dist/src/utils/housekeeping/lastInteractionAt.js +22 -0
  2903. package/dist/src/utils/housekeeping/lastInteractionAt.js.map +1 -0
  2904. package/dist/src/utils/housekeeping/scheduler.d.ts +17 -0
  2905. package/dist/src/utils/housekeeping/scheduler.js +130 -0
  2906. package/dist/src/utils/housekeeping/scheduler.js.map +1 -0
  2907. package/dist/src/utils/housekeeping/scheduler.test.d.ts +6 -0
  2908. package/dist/src/utils/housekeeping/scheduler.test.js +190 -0
  2909. package/dist/src/utils/housekeeping/scheduler.test.js.map +1 -0
  2910. package/dist/src/utils/housekeeping/throttledOnce.d.ts +13 -0
  2911. package/dist/src/utils/housekeeping/throttledOnce.js +110 -0
  2912. package/dist/src/utils/housekeeping/throttledOnce.js.map +1 -0
  2913. package/dist/src/utils/housekeeping/throttledOnce.test.d.ts +6 -0
  2914. package/dist/src/utils/housekeeping/throttledOnce.test.js +94 -0
  2915. package/dist/src/utils/housekeeping/throttledOnce.test.js.map +1 -0
  2916. package/dist/src/utils/installationInfo.d.ts +26 -0
  2917. package/dist/src/utils/installationInfo.js +266 -0
  2918. package/dist/src/utils/installationInfo.js.map +1 -0
  2919. package/dist/src/utils/installationInfo.test.d.ts +6 -0
  2920. package/dist/src/utils/installationInfo.test.js +466 -0
  2921. package/dist/src/utils/installationInfo.test.js.map +1 -0
  2922. package/dist/src/utils/languageUtils.d.ts +40 -0
  2923. package/dist/src/utils/languageUtils.js +163 -0
  2924. package/dist/src/utils/languageUtils.js.map +1 -0
  2925. package/dist/src/utils/languageUtils.test.d.ts +6 -0
  2926. package/dist/src/utils/languageUtils.test.js +341 -0
  2927. package/dist/src/utils/languageUtils.test.js.map +1 -0
  2928. package/dist/src/utils/math.d.ts +13 -0
  2929. package/dist/src/utils/math.js +14 -0
  2930. package/dist/src/utils/math.js.map +1 -0
  2931. package/dist/src/utils/memoryDiagnostics.d.ts +65 -0
  2932. package/dist/src/utils/memoryDiagnostics.js +365 -0
  2933. package/dist/src/utils/memoryDiagnostics.js.map +1 -0
  2934. package/dist/src/utils/memoryDiagnostics.test.d.ts +6 -0
  2935. package/dist/src/utils/memoryDiagnostics.test.js +641 -0
  2936. package/dist/src/utils/memoryDiagnostics.test.js.map +1 -0
  2937. package/dist/src/utils/modelConfigUtils.d.ts +55 -0
  2938. package/dist/src/utils/modelConfigUtils.js +186 -0
  2939. package/dist/src/utils/modelConfigUtils.js.map +1 -0
  2940. package/dist/src/utils/modelConfigUtils.test.d.ts +6 -0
  2941. package/dist/src/utils/modelConfigUtils.test.js +1247 -0
  2942. package/dist/src/utils/modelConfigUtils.test.js.map +1 -0
  2943. package/dist/src/utils/nonInteractiveHelpers.d.ts +101 -0
  2944. package/dist/src/utils/nonInteractiveHelpers.js +479 -0
  2945. package/dist/src/utils/nonInteractiveHelpers.js.map +1 -0
  2946. package/dist/src/utils/nonInteractiveHelpers.test.d.ts +6 -0
  2947. package/dist/src/utils/nonInteractiveHelpers.test.js +1038 -0
  2948. package/dist/src/utils/nonInteractiveHelpers.test.js.map +1 -0
  2949. package/dist/src/utils/osc.d.ts +91 -0
  2950. package/dist/src/utils/osc.js +162 -0
  2951. package/dist/src/utils/osc.js.map +1 -0
  2952. package/dist/src/utils/osc.test.d.ts +6 -0
  2953. package/dist/src/utils/osc.test.js +217 -0
  2954. package/dist/src/utils/osc.test.js.map +1 -0
  2955. package/dist/src/utils/package.d.ts +12 -0
  2956. package/dist/src/utils/package.js +24 -0
  2957. package/dist/src/utils/package.js.map +1 -0
  2958. package/dist/src/utils/processUtils.d.ts +13 -0
  2959. package/dist/src/utils/processUtils.js +18 -0
  2960. package/dist/src/utils/processUtils.js.map +1 -0
  2961. package/dist/src/utils/processUtils.test.d.ts +6 -0
  2962. package/dist/src/utils/processUtils.test.js +20 -0
  2963. package/dist/src/utils/processUtils.test.js.map +1 -0
  2964. package/dist/src/utils/readStdin.d.ts +6 -0
  2965. package/dist/src/utils/readStdin.js +60 -0
  2966. package/dist/src/utils/readStdin.js.map +1 -0
  2967. package/dist/src/utils/readStdin.test.d.ts +6 -0
  2968. package/dist/src/utils/readStdin.test.js +88 -0
  2969. package/dist/src/utils/readStdin.test.js.map +1 -0
  2970. package/dist/src/utils/relaunch.d.ts +9 -0
  2971. package/dist/src/utils/relaunch.js +68 -0
  2972. package/dist/src/utils/relaunch.js.map +1 -0
  2973. package/dist/src/utils/relaunch.test.d.ts +6 -0
  2974. package/dist/src/utils/relaunch.test.js +291 -0
  2975. package/dist/src/utils/relaunch.test.js.map +1 -0
  2976. package/dist/src/utils/resolvePath.d.ts +6 -0
  2977. package/dist/src/utils/resolvePath.js +21 -0
  2978. package/dist/src/utils/resolvePath.js.map +1 -0
  2979. package/dist/src/utils/runBudget.d.ts +116 -0
  2980. package/dist/src/utils/runBudget.js +235 -0
  2981. package/dist/src/utils/runBudget.js.map +1 -0
  2982. package/dist/src/utils/runBudget.test.d.ts +6 -0
  2983. package/dist/src/utils/runBudget.test.js +187 -0
  2984. package/dist/src/utils/runBudget.test.js.map +1 -0
  2985. package/dist/src/utils/sandbox-macos-permissive-closed.sb +33 -0
  2986. package/dist/src/utils/sandbox-macos-permissive-open.sb +28 -0
  2987. package/dist/src/utils/sandbox-macos-permissive-proxied.sb +38 -0
  2988. package/dist/src/utils/sandbox-macos-restrictive-closed.sb +94 -0
  2989. package/dist/src/utils/sandbox-macos-restrictive-open.sb +97 -0
  2990. package/dist/src/utils/sandbox-macos-restrictive-proxied.sb +99 -0
  2991. package/dist/src/utils/sandbox.d.ts +7 -0
  2992. package/dist/src/utils/sandbox.js +788 -0
  2993. package/dist/src/utils/sandbox.js.map +1 -0
  2994. package/dist/src/utils/sessionPaths.d.ts +19 -0
  2995. package/dist/src/utils/sessionPaths.js +141 -0
  2996. package/dist/src/utils/sessionPaths.js.map +1 -0
  2997. package/dist/src/utils/sessionPaths.test.d.ts +6 -0
  2998. package/dist/src/utils/sessionPaths.test.js +249 -0
  2999. package/dist/src/utils/sessionPaths.test.js.map +1 -0
  3000. package/dist/src/utils/settingsUtils.d.ts +167 -0
  3001. package/dist/src/utils/settingsUtils.js +532 -0
  3002. package/dist/src/utils/settingsUtils.js.map +1 -0
  3003. package/dist/src/utils/settingsUtils.test.d.ts +6 -0
  3004. package/dist/src/utils/settingsUtils.test.js +849 -0
  3005. package/dist/src/utils/settingsUtils.test.js.map +1 -0
  3006. package/dist/src/utils/spawnWrapper.d.ts +7 -0
  3007. package/dist/src/utils/spawnWrapper.js +8 -0
  3008. package/dist/src/utils/spawnWrapper.js.map +1 -0
  3009. package/dist/src/utils/standalone-update-verify.d.ts +12 -0
  3010. package/dist/src/utils/standalone-update-verify.js +43 -0
  3011. package/dist/src/utils/standalone-update-verify.js.map +1 -0
  3012. package/dist/src/utils/standalone-update-verify.test.d.ts +6 -0
  3013. package/dist/src/utils/standalone-update-verify.test.js +27 -0
  3014. package/dist/src/utils/standalone-update-verify.test.js.map +1 -0
  3015. package/dist/src/utils/standalone-update.d.ts +27 -0
  3016. package/dist/src/utils/standalone-update.js +714 -0
  3017. package/dist/src/utils/standalone-update.js.map +1 -0
  3018. package/dist/src/utils/standalone-update.test.d.ts +6 -0
  3019. package/dist/src/utils/standalone-update.test.js +301 -0
  3020. package/dist/src/utils/standalone-update.test.js.map +1 -0
  3021. package/dist/src/utils/startupProfiler.d.ts +90 -0
  3022. package/dist/src/utils/startupProfiler.js +267 -0
  3023. package/dist/src/utils/startupProfiler.js.map +1 -0
  3024. package/dist/src/utils/startupProfiler.test.d.ts +1 -0
  3025. package/dist/src/utils/startupProfiler.test.js +293 -0
  3026. package/dist/src/utils/startupProfiler.test.js.map +1 -0
  3027. package/dist/src/utils/startupWarnings.d.ts +6 -0
  3028. package/dist/src/utils/startupWarnings.js +40 -0
  3029. package/dist/src/utils/startupWarnings.js.map +1 -0
  3030. package/dist/src/utils/stdioHelpers.d.ts +31 -0
  3031. package/dist/src/utils/stdioHelpers.js +38 -0
  3032. package/dist/src/utils/stdioHelpers.js.map +1 -0
  3033. package/dist/src/utils/systemInfo.d.ts +78 -0
  3034. package/dist/src/utils/systemInfo.js +208 -0
  3035. package/dist/src/utils/systemInfo.js.map +1 -0
  3036. package/dist/src/utils/systemInfo.test.d.ts +6 -0
  3037. package/dist/src/utils/systemInfo.test.js +380 -0
  3038. package/dist/src/utils/systemInfo.test.js.map +1 -0
  3039. package/dist/src/utils/systemInfoFields.d.ts +18 -0
  3040. package/dist/src/utils/systemInfoFields.js +102 -0
  3041. package/dist/src/utils/systemInfoFields.js.map +1 -0
  3042. package/dist/src/utils/systemInfoFields.test.d.ts +6 -0
  3043. package/dist/src/utils/systemInfoFields.test.js +74 -0
  3044. package/dist/src/utils/systemInfoFields.test.js.map +1 -0
  3045. package/dist/src/utils/terminalSequence.d.ts +21 -0
  3046. package/dist/src/utils/terminalSequence.js +124 -0
  3047. package/dist/src/utils/terminalSequence.js.map +1 -0
  3048. package/dist/src/utils/terminalSequence.test.d.ts +6 -0
  3049. package/dist/src/utils/terminalSequence.test.js +132 -0
  3050. package/dist/src/utils/terminalSequence.test.js.map +1 -0
  3051. package/dist/src/utils/truncatedDiffPreview.d.ts +6 -0
  3052. package/dist/src/utils/truncatedDiffPreview.js +18 -0
  3053. package/dist/src/utils/truncatedDiffPreview.js.map +1 -0
  3054. package/dist/src/utils/updateEventEmitter.d.ts +11 -0
  3055. package/dist/src/utils/updateEventEmitter.js +12 -0
  3056. package/dist/src/utils/updateEventEmitter.js.map +1 -0
  3057. package/dist/src/utils/userPromptExpansionHook.d.ts +9 -0
  3058. package/dist/src/utils/userPromptExpansionHook.js +30 -0
  3059. package/dist/src/utils/userPromptExpansionHook.js.map +1 -0
  3060. package/dist/src/utils/userPromptExpansionHook.test.d.ts +6 -0
  3061. package/dist/src/utils/userPromptExpansionHook.test.js +69 -0
  3062. package/dist/src/utils/userPromptExpansionHook.test.js.map +1 -0
  3063. package/dist/src/utils/userStartupWarnings.d.ts +12 -0
  3064. package/dist/src/utils/userStartupWarnings.js +74 -0
  3065. package/dist/src/utils/userStartupWarnings.js.map +1 -0
  3066. package/dist/src/utils/userStartupWarnings.test.d.ts +6 -0
  3067. package/dist/src/utils/userStartupWarnings.test.js +88 -0
  3068. package/dist/src/utils/userStartupWarnings.test.js.map +1 -0
  3069. package/dist/src/utils/version.d.ts +6 -0
  3070. package/dist/src/utils/version.js +11 -0
  3071. package/dist/src/utils/version.js.map +1 -0
  3072. package/dist/src/utils/warningHandler.d.ts +29 -0
  3073. package/dist/src/utils/warningHandler.js +100 -0
  3074. package/dist/src/utils/warningHandler.js.map +1 -0
  3075. package/dist/src/utils/warningHandler.test.d.ts +6 -0
  3076. package/dist/src/utils/warningHandler.test.js +185 -0
  3077. package/dist/src/utils/warningHandler.test.js.map +1 -0
  3078. package/dist/src/utils/windowTitle.d.ts +12 -0
  3079. package/dist/src/utils/windowTitle.js +19 -0
  3080. package/dist/src/utils/windowTitle.js.map +1 -0
  3081. package/dist/src/utils/windowTitle.test.d.ts +6 -0
  3082. package/dist/src/utils/windowTitle.test.js +49 -0
  3083. package/dist/src/utils/windowTitle.test.js.map +1 -0
  3084. package/dist/src/utils/writeWithBackup.d.ts +49 -0
  3085. package/dist/src/utils/writeWithBackup.js +136 -0
  3086. package/dist/src/utils/writeWithBackup.js.map +1 -0
  3087. package/dist/src/utils/writeWithBackup.test.d.ts +6 -0
  3088. package/dist/src/utils/writeWithBackup.test.js +177 -0
  3089. package/dist/src/utils/writeWithBackup.test.js.map +1 -0
  3090. package/dist/src/validateNonInterActiveAuth.d.ts +8 -0
  3091. package/dist/src/validateNonInterActiveAuth.js +66 -0
  3092. package/dist/src/validateNonInterActiveAuth.js.map +1 -0
  3093. package/dist/tsconfig.tsbuildinfo +1 -0
  3094. package/package.json +121 -0
@@ -0,0 +1,3646 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2025 Qwen Team
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+ import { APPROVAL_MODE_INFO, APPROVAL_MODES, AuthType, ALL_PROVIDERS, applyProviderInstallPlan, buildInstallPlan, clearCachedCredentialFile, createDebugLogger, findProviderById, getAllGeminiMdFilenames, getAutoMemoryRoot, getDefaultBaseUrlForProtocol, getDefaultModelIds, getScopedEnvContents, QwenOAuth2Event, qwenOAuth2Events, resolveBaseUrl, MCP_BUDGET_WARN_FRACTION, MCPServerConfig, SessionService, SESSION_TITLE_MAX_LENGTH, Storage, tokenLimit, getMCPDiscoveryState, getMCPServerStatus, MCPDiscoveryState, MCPServerStatus, resolveOwnsModel, ExtensionManager, ExtensionSettingScope, HookEventName, updateSetting, SessionEndReason, restoreWorktreeContext, } from '@tulex-cli/tulex-cli-core';
7
+ import { AgentSideConnection, RequestError, ndJsonStream, PROTOCOL_VERSION, } from '@agentclientprotocol/sdk';
8
+ import { buildAuthMethods, pickAuthMethodsForAuthRequired, } from './authMethods.js';
9
+ import { AcpFileSystemService } from './service/filesystem.js';
10
+ import { Readable, Writable } from 'node:stream';
11
+ import { pipeline } from 'node:stream/promises';
12
+ import * as fs from 'node:fs/promises';
13
+ import * as path from 'node:path';
14
+ import { createGunzip } from 'node:zlib';
15
+ import { loadSettings, SettingScope } from '../config/settings.js';
16
+ import { createLoadedSettingsAdapter } from '../config/loadedSettingsAdapter.js';
17
+ import { z } from 'zod';
18
+ import { buildDisabledSkillNamesProvider, loadCliConfig, } from '../config/config.js';
19
+ import { Session, buildAvailableCommandsSnapshot } from './session/Session.js';
20
+ import { HistoryReplayer } from './session/HistoryReplayer.js';
21
+ import { formatAcpModelId, parseAcpBaseModelId, } from '../utils/acpModelUtils.js';
22
+ import { updateOutputLanguageFile } from '../utils/languageUtils.js';
23
+ import { runWithAcpRuntimeOutputDir } from './runtimeOutputDirContext.js';
24
+ import { runExitCleanup } from '../utils/cleanup.js';
25
+ import { isWorkspaceTrusted } from '../config/trustedFolders.js';
26
+ import { ACP_PREFLIGHT_KINDS, STATUS_SCHEMA_VERSION, SERVE_CONTROL_EXT_METHODS, SERVE_STATUS_EXT_METHODS, mapDomainErrorToErrorKind, } from '../serve/status.js';
27
+ const debugLogger = createDebugLogger('ACP_AGENT');
28
+ /**
29
+ * Env-var candidates per auth method, used by `buildAuthPreflightCell` for
30
+ * a side-effect-free presence check. Mirrors `AUTH_ENV_MAPPINGS` from
31
+ * `core/src/models/constants.ts` (which isn't on the public package
32
+ * surface). Keep in sync if a new provider is added there. Any auth method
33
+ * not listed here surfaces as `status: 'unknown'` on the cell rather than
34
+ * a false `auth_env_error` — full validation happens at session start.
35
+ *
36
+ * Drift detection: `AUTH_PREFLIGHT_AUDITED_AUTH_TYPES` below lists every
37
+ * `AuthType` enum value that has been triaged for this map (either keyed
38
+ * here, or explicitly waived for non-env-based auth like qwen-oauth). The
39
+ * paired test `AUTH_PREFLIGHT_AUDITED_AUTH_TYPES covers every AuthType`
40
+ * walks the public enum and fails CI when core adds a new auth method
41
+ * without a deliberate decision here.
42
+ */
43
+ export const AUTH_PREFLIGHT_ENV_KEYS = {
44
+ openai: ['OPENAI_API_KEY'],
45
+ anthropic: ['ANTHROPIC_API_KEY'],
46
+ gemini: ['GEMINI_API_KEY'],
47
+ 'vertex-ai': ['GOOGLE_API_KEY'],
48
+ };
49
+ /**
50
+ * Auth methods deliberately not env-keyed (e.g. OAuth-based, credential
51
+ * file). Listed here so the drift test recognizes them as triaged-but-
52
+ * waived rather than a missing entry.
53
+ */
54
+ export const AUTH_PREFLIGHT_WAIVED_AUTH_TYPES = new Set([
55
+ 'qwen-oauth',
56
+ ]);
57
+ const PERMISSION_RULE_TYPES = ['allow', 'ask', 'deny'];
58
+ function readPermissionRuleSet(settings) {
59
+ const permissions = settings && typeof settings === 'object'
60
+ ? settings.permissions
61
+ : undefined;
62
+ const readRules = (type) => {
63
+ const value = permissions?.[type];
64
+ return Array.isArray(value)
65
+ ? value.filter((item) => typeof item === 'string')
66
+ : [];
67
+ };
68
+ return {
69
+ allow: readRules('allow'),
70
+ ask: readRules('ask'),
71
+ deny: readRules('deny'),
72
+ };
73
+ }
74
+ function normalizePermissionRules(value) {
75
+ if (!Array.isArray(value)) {
76
+ throw RequestError.invalidParams(undefined, 'rules must be an array');
77
+ }
78
+ return Array.from(new Set(value.map((item) => {
79
+ if (typeof item !== 'string' || !item.trim()) {
80
+ throw RequestError.invalidParams(undefined, 'rules must contain only non-empty strings');
81
+ }
82
+ return item.trim();
83
+ })));
84
+ }
85
+ const PROJECT_SKILL_DIRS = ['.qwen', '.agents'];
86
+ const SKILLS_DIR = 'skills';
87
+ const QWEN_CORE_SETTING_DEFINITIONS = {
88
+ 'model.name': { type: 'string' },
89
+ fastModel: { type: 'string' },
90
+ 'general.outputLanguage': { type: 'string' },
91
+ 'general.language': { type: 'string' },
92
+ 'tools.approvalMode': {
93
+ type: 'enum',
94
+ values: ['plan', 'default', 'auto-edit', 'auto', 'yolo'],
95
+ },
96
+ 'general.vimMode': { type: 'boolean' },
97
+ 'general.enableAutoUpdate': { type: 'boolean' },
98
+ 'general.showSessionRecap': { type: 'boolean' },
99
+ 'general.sessionRecapAwayThresholdMinutes': { type: 'number', min: 1 },
100
+ 'general.terminalBell': { type: 'boolean' },
101
+ 'general.gitCoAuthor.commit': { type: 'boolean' },
102
+ 'general.gitCoAuthor.pr': { type: 'boolean' },
103
+ 'general.defaultFileEncoding': {
104
+ type: 'enum',
105
+ values: ['utf-8', 'utf-8-bom'],
106
+ },
107
+ 'context.fileFiltering.respectGitIgnore': { type: 'boolean' },
108
+ 'context.fileFiltering.respectQwenIgnore': { type: 'boolean' },
109
+ 'context.fileFiltering.enableFuzzySearch': { type: 'boolean' },
110
+ 'memory.enableManagedAutoMemory': { type: 'boolean' },
111
+ 'memory.enableManagedAutoDream': { type: 'boolean' },
112
+ 'memory.enableAutoSkill': { type: 'boolean' },
113
+ disableAllHooks: { type: 'boolean' },
114
+ };
115
+ const QWEN_CORE_SETTING_KEYS = Object.keys(QWEN_CORE_SETTING_DEFINITIONS);
116
+ const QWEN_HOOK_EVENTS = Object.values(HookEventName);
117
+ const DEFAULT_QWEN_MEMORY_SETTINGS = {
118
+ enableManagedAutoMemory: true,
119
+ enableManagedAutoDream: true,
120
+ enableAutoSkill: true,
121
+ };
122
+ const QWEN_MEMORY_SETTING_KEYS = [
123
+ 'enableManagedAutoMemory',
124
+ 'enableManagedAutoDream',
125
+ 'enableAutoSkill',
126
+ ];
127
+ function normalizeQwenMemorySettings(value) {
128
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
129
+ return { ...DEFAULT_QWEN_MEMORY_SETTINGS };
130
+ }
131
+ const record = value;
132
+ return {
133
+ enableManagedAutoMemory: typeof record['enableManagedAutoMemory'] === 'boolean'
134
+ ? record['enableManagedAutoMemory']
135
+ : DEFAULT_QWEN_MEMORY_SETTINGS.enableManagedAutoMemory,
136
+ enableManagedAutoDream: typeof record['enableManagedAutoDream'] === 'boolean'
137
+ ? record['enableManagedAutoDream']
138
+ : DEFAULT_QWEN_MEMORY_SETTINGS.enableManagedAutoDream,
139
+ enableAutoSkill: typeof record['enableAutoSkill'] === 'boolean'
140
+ ? record['enableAutoSkill']
141
+ : DEFAULT_QWEN_MEMORY_SETTINGS.enableAutoSkill,
142
+ };
143
+ }
144
+ function toRecord(value) {
145
+ return !!value && typeof value === 'object' && !Array.isArray(value)
146
+ ? value
147
+ : {};
148
+ }
149
+ function readOptionalString(value, fieldName) {
150
+ if (value === undefined || value === null)
151
+ return undefined;
152
+ if (typeof value !== 'string') {
153
+ throw RequestError.invalidParams(undefined, `Invalid ${fieldName}: expected string`);
154
+ }
155
+ const trimmed = value.trim();
156
+ return trimmed.length > 0 ? trimmed : undefined;
157
+ }
158
+ function readRequiredString(value, fieldName) {
159
+ const stringValue = readOptionalString(value, fieldName);
160
+ if (!stringValue) {
161
+ throw RequestError.invalidParams(undefined, `Invalid or missing ${fieldName}`);
162
+ }
163
+ return stringValue;
164
+ }
165
+ // Skill slugs are used to build filesystem paths under `<globalQwenDir>/skills`.
166
+ // The character allowlist below already excludes `/` and `\`, but `.` and `..`
167
+ // would still slip through and let `path.join` traverse out of the skills dir
168
+ // (e.g. slug `..` resolves to the global config dir). Reject them explicitly.
169
+ function validateSkillSlug(slug) {
170
+ if (!slug ||
171
+ slug === '.' ||
172
+ slug === '..' ||
173
+ slug.includes('/') ||
174
+ slug.includes(path.sep) ||
175
+ !/^[a-zA-Z0-9._-]+$/.test(slug)) {
176
+ throw RequestError.invalidParams(undefined, 'Invalid skill.slug');
177
+ }
178
+ }
179
+ function readSkillInstallRequest(params) {
180
+ const skillParams = toRecord(params['skill']);
181
+ const input = Object.keys(skillParams).length > 0 ? skillParams : params;
182
+ const slug = readRequiredString(input['slug'], 'skill.slug');
183
+ validateSkillSlug(slug);
184
+ const scope = readOptionalString(input['scope'], 'skill.scope') ?? 'global';
185
+ if (scope !== 'global') {
186
+ throw RequestError.invalidParams(undefined, 'Only global skill installation is supported');
187
+ }
188
+ const description = readOptionalString(input['description'], 'skill.description');
189
+ return {
190
+ id: readOptionalString(input['id'], 'skill.id') ?? slug,
191
+ slug,
192
+ name: readOptionalString(input['name'], 'skill.name') ?? slug,
193
+ ...(description ? { description } : {}),
194
+ sourceUrl: readRequiredString(input['sourceUrl'], 'skill.sourceUrl'),
195
+ scope,
196
+ };
197
+ }
198
+ function readSkillSlugRequest(params) {
199
+ const skillParams = toRecord(params['skill']);
200
+ const input = Object.keys(skillParams).length > 0 ? skillParams : params;
201
+ const slug = readRequiredString(input['slug'], 'skill.slug');
202
+ validateSkillSlug(slug);
203
+ const scope = readOptionalString(input['scope'], 'skill.scope') ?? 'global';
204
+ if (scope !== 'global') {
205
+ throw RequestError.invalidParams(undefined, 'Only global skill management is supported');
206
+ }
207
+ return { slug, scope };
208
+ }
209
+ function readSkillSetEnabledRequest(params) {
210
+ const skillParams = toRecord(params['skill']);
211
+ const input = Object.keys(skillParams).length > 0 ? skillParams : params;
212
+ const slug = readRequiredString(input['slug'], 'skill.slug');
213
+ validateSkillSlug(slug);
214
+ const scope = readOptionalString(input['scope'], 'skill.scope') ?? 'global';
215
+ if (scope !== 'global' && scope !== 'project') {
216
+ throw RequestError.invalidParams(undefined, 'Only global or project skill management is supported');
217
+ }
218
+ if (typeof input['enabled'] !== 'boolean') {
219
+ throw RequestError.invalidParams(undefined, 'Invalid skill.enabled: expected boolean');
220
+ }
221
+ return {
222
+ slug,
223
+ scope,
224
+ enabled: input['enabled'],
225
+ };
226
+ }
227
+ function splitSkillMarkdown(content) {
228
+ const normalized = content.replace(/^\uFEFF/, '').replace(/\r\n?/g, '\n');
229
+ const match = normalized.match(/^---\n([\s\S]*?)\n---(?:\n|$)([\s\S]*)$/);
230
+ if (!match) {
231
+ throw RequestError.invalidParams(undefined, 'Invalid skill file: missing YAML frontmatter');
232
+ }
233
+ return {
234
+ frontmatter: match[1],
235
+ body: match[2],
236
+ };
237
+ }
238
+ function setSkillFrontmatterEnabled(content, enabled) {
239
+ const { frontmatter, body } = splitSkillMarkdown(content);
240
+ // Surgically add/remove only the top-level `disable-model-invocation:` line
241
+ // instead of round-tripping the whole frontmatter through a YAML
242
+ // parse/stringify. The minimal core YAML serializer drops comments and
243
+ // flattens nested structures (e.g. `hooks:`), so reserializing here would
244
+ // corrupt hooks-bearing skills and strip user comments. Working on the raw
245
+ // text leaves every other byte untouched.
246
+ const lines = frontmatter.split('\n');
247
+ const disabledLineIndex = lines.findIndex((line) => /^disable-model-invocation\s*:/.test(line));
248
+ if (enabled) {
249
+ if (disabledLineIndex !== -1) {
250
+ lines.splice(disabledLineIndex, 1);
251
+ }
252
+ }
253
+ else if (disabledLineIndex !== -1) {
254
+ lines[disabledLineIndex] = 'disable-model-invocation: true';
255
+ }
256
+ else {
257
+ let insertIndex = lines.length;
258
+ while (insertIndex > 0 && lines[insertIndex - 1].trim() === '') {
259
+ insertIndex -= 1;
260
+ }
261
+ lines.splice(insertIndex, 0, 'disable-model-invocation: true');
262
+ }
263
+ const nextFrontmatter = lines.join('\n');
264
+ return `---\n${nextFrontmatter}\n---\n${body}`;
265
+ }
266
+ // Skill downloads must come from the GitHub host set. Restricting the host
267
+ // here prevents the client-supplied `sourceUrl` from driving server-side
268
+ // fetches at internal/loopback/link-local endpoints (SSRF), e.g.
269
+ // `http://169.254.169.254/` cloud-metadata or `http://localhost:<port>/`.
270
+ const ALLOWED_SKILL_SOURCE_HOSTS = new Set([
271
+ 'github.com',
272
+ 'raw.githubusercontent.com',
273
+ 'codeload.github.com',
274
+ 'api.github.com',
275
+ ]);
276
+ function assertAllowedSkillSourceUrl(sourceUrl) {
277
+ let parsed;
278
+ try {
279
+ parsed = new URL(sourceUrl);
280
+ }
281
+ catch {
282
+ throw RequestError.invalidParams(undefined, 'Skill sourceUrl must be a valid URL');
283
+ }
284
+ // Require HTTPS: a plaintext http: fetch of skill content (which can include
285
+ // executable hooks) is MITM-able by a network-position attacker, so the host
286
+ // allowlist alone is not sufficient. All supported GitHub hosts serve HTTPS.
287
+ if (parsed.protocol !== 'https:') {
288
+ throw RequestError.invalidParams(undefined, 'Skill sourceUrl must be an HTTPS URL');
289
+ }
290
+ if (!ALLOWED_SKILL_SOURCE_HOSTS.has(parsed.hostname)) {
291
+ throw RequestError.invalidParams(undefined, 'Skill sourceUrl host is not allowed (only github.com sources are supported)');
292
+ }
293
+ }
294
+ function parseGitHubBlobSkillUrl(sourceUrl) {
295
+ const parsed = new URL(sourceUrl);
296
+ // HTTPS-only, consistent with assertAllowedSkillSourceUrl (skill content can
297
+ // include executable hooks, so plaintext http: is MITM-able).
298
+ if (parsed.protocol !== 'https:') {
299
+ throw RequestError.invalidParams(undefined, 'Skill sourceUrl must be an HTTPS URL');
300
+ }
301
+ if (parsed.hostname !== 'github.com')
302
+ return null;
303
+ const parts = parsed.pathname.split('/').filter(Boolean);
304
+ if (parts.length < 5 || parts[2] !== 'blob')
305
+ return null;
306
+ const owner = parts[0];
307
+ const repo = parts[1];
308
+ const ref = parts[3];
309
+ const filePathParts = parts.slice(4);
310
+ if (!owner || !repo || !ref || filePathParts.length === 0)
311
+ return null;
312
+ return {
313
+ owner,
314
+ repo,
315
+ ref,
316
+ filePath: filePathParts.join('/'),
317
+ };
318
+ }
319
+ function toRawGitHubUrl(githubUrl) {
320
+ return `https://raw.githubusercontent.com/${githubUrl.owner}/${githubUrl.repo}/${githubUrl.ref}/${githubUrl.filePath}`;
321
+ }
322
+ function encodeGitHubPath(filePath) {
323
+ if (!filePath || filePath === '.')
324
+ return '';
325
+ return filePath.split('/').map(encodeURIComponent).join('/');
326
+ }
327
+ function readTarString(archive, offset, length) {
328
+ const bytes = archive.subarray(offset, offset + length);
329
+ const nul = bytes.indexOf(0);
330
+ const end = nul >= 0 ? nul : bytes.length;
331
+ return Buffer.from(bytes.subarray(0, end)).toString('utf8').trim();
332
+ }
333
+ function readTarSize(archive, offset) {
334
+ const raw = readTarString(archive, offset + 124, 12);
335
+ return raw ? Number.parseInt(raw, 8) : 0;
336
+ }
337
+ function isZeroTarBlock(archive, offset) {
338
+ for (let i = 0; i < 512; i += 1) {
339
+ if (archive[offset + i] !== 0)
340
+ return false;
341
+ }
342
+ return true;
343
+ }
344
+ function readTarPath(archive, offset) {
345
+ const name = readTarString(archive, offset, 100);
346
+ const prefix = readTarString(archive, offset + 345, 155);
347
+ return prefix ? `${prefix}/${name}` : name;
348
+ }
349
+ function stripArchiveRoot(filePath) {
350
+ const parts = filePath.split('/').filter(Boolean);
351
+ return parts.length > 1 ? parts.slice(1).join('/') : '';
352
+ }
353
+ // Bound the work done on untrusted skill archives so a malicious or oversized
354
+ // download cannot exhaust memory. Decompression is streamed (createGunzip) and
355
+ // aborted the moment the cumulative inflated size crosses the cap, so a
356
+ // decompression bomb can never fully inflate into memory.
357
+ const MAX_SKILL_DOWNLOAD_BYTES = 100 * 1024 * 1024; // 100 MB compressed
358
+ const MAX_SKILL_DECOMPRESSED_BYTES = 500 * 1024 * 1024; // 500 MB decompressed
359
+ // Bounds for the GitHub Contents-API directory walk (the archive path is
360
+ // already bounded by the byte caps above).
361
+ const MAX_SKILL_API_DIR_DEPTH = 16;
362
+ const MAX_SKILL_API_FILE_COUNT = 2000;
363
+ // Sentinel so the streaming decompression's size-limit abort can be told apart
364
+ // from a genuine gunzip/format error in the catch below.
365
+ class DecompressedSizeExceededError extends Error {
366
+ }
367
+ export async function extractFilesFromTarGz(archiveBytes, directoryPath,
368
+ // Limits are injectable so the size-guard branches can be exercised in tests
369
+ // without allocating the 100MB/500MB production thresholds.
370
+ limits = {}) {
371
+ const maxCompressedBytes = limits.maxCompressedBytes ?? MAX_SKILL_DOWNLOAD_BYTES;
372
+ const maxDecompressedBytes = limits.maxDecompressedBytes ?? MAX_SKILL_DECOMPRESSED_BYTES;
373
+ if (archiveBytes.length > maxCompressedBytes) {
374
+ throw RequestError.invalidParams(undefined, 'Skill archive exceeds the maximum allowed size');
375
+ }
376
+ let archive;
377
+ try {
378
+ // Stream the inflate so we can abort as soon as the cumulative output
379
+ // exceeds the cap, instead of materializing the entire decompressed buffer
380
+ // first (a ~1000:1 gzip ratio could otherwise inflate a small archive to
381
+ // many GB before any post-hoc length check fires).
382
+ const chunks = [];
383
+ let total = 0;
384
+ await pipeline(
385
+ // Wrap in an array so the whole archive is emitted as a single chunk;
386
+ // `Readable.from(uint8array)` would otherwise iterate it byte-by-byte.
387
+ Readable.from([Buffer.from(archiveBytes)]), createGunzip(), new Writable({
388
+ write(chunk, _enc, cb) {
389
+ total += chunk.length;
390
+ if (total > maxDecompressedBytes) {
391
+ cb(new DecompressedSizeExceededError());
392
+ return;
393
+ }
394
+ chunks.push(chunk);
395
+ cb();
396
+ },
397
+ }));
398
+ archive = Buffer.concat(chunks);
399
+ }
400
+ catch (error) {
401
+ if (error instanceof DecompressedSizeExceededError) {
402
+ throw RequestError.invalidParams(undefined, 'Decompressed skill archive exceeds the maximum allowed size');
403
+ }
404
+ throw RequestError.invalidParams(undefined, `Failed to decompress skill archive: ${error instanceof Error ? error.message : String(error)}`);
405
+ }
406
+ const normalizedDirectory = directoryPath.replace(/^\/+|\/+$/g, '');
407
+ // Treat '.' (SKILL.md at the repository root) as the empty prefix; otherwise
408
+ // the prefix becomes './' and never matches the root-stripped archive paths
409
+ // (e.g. 'SKILL.md'), yielding zero extracted files.
410
+ const directoryPrefix = normalizedDirectory && normalizedDirectory !== '.'
411
+ ? `${normalizedDirectory}/`
412
+ : '';
413
+ const files = [];
414
+ for (let offset = 0; offset + 512 <= archive.length;) {
415
+ if (isZeroTarBlock(archive, offset))
416
+ break;
417
+ const fullPath = readTarPath(archive, offset);
418
+ const typeFlag = String.fromCharCode(archive[offset + 156] || 0);
419
+ const size = readTarSize(archive, offset);
420
+ const dataOffset = offset + 512;
421
+ const nextOffset = dataOffset + Math.ceil(size / 512) * 512;
422
+ if (typeFlag === '0' || typeFlag === '\0') {
423
+ const repoPath = stripArchiveRoot(fullPath);
424
+ if (repoPath.startsWith(directoryPrefix)) {
425
+ const relativePath = repoPath.slice(directoryPrefix.length);
426
+ if (relativePath) {
427
+ files.push({
428
+ relativePath,
429
+ content: archive.subarray(dataOffset, dataOffset + size),
430
+ });
431
+ }
432
+ }
433
+ }
434
+ offset = nextOffset;
435
+ }
436
+ return files;
437
+ }
438
+ // GitHub host suffixes a download may legitimately redirect to (raw/codeload
439
+ // commonly 302 to their object CDN for geo/CDN routing). Redirects to anything
440
+ // outside these are rejected, preserving the SSRF guard while not breaking
441
+ // real downloads.
442
+ const ALLOWED_REDIRECT_HOST_SUFFIXES = [
443
+ '.githubusercontent.com',
444
+ '.github.com',
445
+ // Note: '.github.io' is intentionally excluded — *.github.io are
446
+ // user-controlled GitHub Pages sites, so allowing redirects there would
447
+ // reopen the SSRF/exfiltration surface this allowlist exists to close.
448
+ ];
449
+ function isAllowedSkillFetchHost(hostname) {
450
+ if (ALLOWED_SKILL_SOURCE_HOSTS.has(hostname))
451
+ return true;
452
+ return ALLOWED_REDIRECT_HOST_SUFFIXES.some((suffix) => hostname.endsWith(suffix));
453
+ }
454
+ /**
455
+ * Fetch that follows redirects manually, validating every hop stays on an
456
+ * allowed GitHub host over HTTPS. This keeps the SSRF protection of
457
+ * `redirect: 'manual'` (a malicious repo cannot bounce the fetch to an internal
458
+ * endpoint) while still following GitHub's legitimate CDN redirects, which
459
+ * plain `redirect: 'manual'` would surface as a download failure.
460
+ */
461
+ export async function fetchAllowedGitHub(url, init = {}, maxRedirects = 5) {
462
+ let current = url;
463
+ for (let hop = 0; hop <= maxRedirects; hop += 1) {
464
+ const response = await fetch(current, { ...init, redirect: 'manual' });
465
+ if (response.status < 300 || response.status >= 400) {
466
+ return response;
467
+ }
468
+ const location = response.headers?.get('location');
469
+ if (!location)
470
+ return response;
471
+ let next;
472
+ try {
473
+ next = new URL(location, current);
474
+ }
475
+ catch {
476
+ throw RequestError.invalidParams(undefined, 'Skill download redirected to an invalid URL');
477
+ }
478
+ if (next.protocol !== 'https:' || !isAllowedSkillFetchHost(next.hostname)) {
479
+ throw RequestError.invalidParams(undefined, 'Skill download redirected to a disallowed host');
480
+ }
481
+ current = next.toString();
482
+ }
483
+ throw RequestError.invalidParams(undefined, 'Skill download exceeded the maximum number of redirects');
484
+ }
485
+ // Read a response body while enforcing a hard byte cap against the *actual*
486
+ // streamed bytes. The Content-Length pre-checks at the call sites are advisory
487
+ // only — a server that omits the header (chunked transfer, CDN redirect) could
488
+ // otherwise stream an arbitrarily large body straight into memory via
489
+ // `arrayBuffer()`.
490
+ async function readBodyWithLimit(response, maxBytes) {
491
+ const body = response.body;
492
+ if (!body) {
493
+ const buf = new Uint8Array(await response.arrayBuffer());
494
+ if (buf.byteLength > maxBytes) {
495
+ throw RequestError.invalidParams(undefined, 'Skill download exceeds the maximum allowed size');
496
+ }
497
+ return buf;
498
+ }
499
+ const reader = body.getReader();
500
+ const chunks = [];
501
+ let total = 0;
502
+ for (;;) {
503
+ const { done, value } = await reader.read();
504
+ if (done)
505
+ break;
506
+ if (!value)
507
+ continue;
508
+ total += value.byteLength;
509
+ if (total > maxBytes) {
510
+ await reader.cancel();
511
+ throw RequestError.invalidParams(undefined, 'Skill download exceeds the maximum allowed size');
512
+ }
513
+ chunks.push(value);
514
+ }
515
+ const result = new Uint8Array(total);
516
+ let offset = 0;
517
+ for (const chunk of chunks) {
518
+ result.set(chunk, offset);
519
+ offset += chunk.byteLength;
520
+ }
521
+ return result;
522
+ }
523
+ async function fetchBytes(url) {
524
+ const response = await fetchAllowedGitHub(url);
525
+ if (!response.ok) {
526
+ throw RequestError.invalidParams(undefined, `Failed to download skill (${response.status})`);
527
+ }
528
+ const contentLength = response.headers?.get('content-length');
529
+ if (contentLength) {
530
+ const declaredSize = Number.parseInt(contentLength, 10);
531
+ if (Number.isFinite(declaredSize) &&
532
+ declaredSize > MAX_SKILL_DOWNLOAD_BYTES) {
533
+ throw RequestError.invalidParams(undefined, 'Skill download exceeds the maximum allowed size');
534
+ }
535
+ }
536
+ return readBodyWithLimit(response, MAX_SKILL_DOWNLOAD_BYTES);
537
+ }
538
+ async function downloadSingleSkillFile(sourceUrl) {
539
+ const githubUrl = parseGitHubBlobSkillUrl(sourceUrl);
540
+ const fetchUrl = githubUrl ? toRawGitHubUrl(githubUrl) : sourceUrl;
541
+ const content = await fetchBytes(fetchUrl);
542
+ return {
543
+ skillContent: Buffer.from(content).toString('utf8'),
544
+ files: [{ relativePath: 'SKILL.md', content }],
545
+ };
546
+ }
547
+ async function downloadGitHubSkillDirectoryFromArchive(githubUrl, directoryPath) {
548
+ const archiveUrl = `https://codeload.github.com/${githubUrl.owner}/${githubUrl.repo}/tar.gz/${encodeURIComponent(githubUrl.ref)}`;
549
+ const response = await fetchAllowedGitHub(archiveUrl, {
550
+ headers: {
551
+ 'User-Agent': 'qwen-code',
552
+ },
553
+ });
554
+ if (!response.ok) {
555
+ throw RequestError.invalidParams(undefined, `Failed to download GitHub skill archive (${response.status})`);
556
+ }
557
+ // Reject oversized archives by declared Content-Length before buffering the
558
+ // whole body into memory, mirroring the guard in fetchBytes.
559
+ const contentLength = response.headers?.get('content-length');
560
+ if (contentLength) {
561
+ const declaredSize = Number.parseInt(contentLength, 10);
562
+ if (Number.isFinite(declaredSize) &&
563
+ declaredSize > MAX_SKILL_DOWNLOAD_BYTES) {
564
+ throw RequestError.invalidParams(undefined, 'Skill archive exceeds the maximum allowed size');
565
+ }
566
+ }
567
+ return extractFilesFromTarGz(await readBodyWithLimit(response, MAX_SKILL_DOWNLOAD_BYTES), directoryPath);
568
+ }
569
+ async function fetchGitHubDirectoryItems(githubUrl, directoryPath) {
570
+ const encodedPath = encodeGitHubPath(directoryPath);
571
+ const apiUrl = `https://api.github.com/repos/${githubUrl.owner}/${githubUrl.repo}/contents/${encodedPath}?ref=${encodeURIComponent(githubUrl.ref)}`;
572
+ const response = await fetchAllowedGitHub(apiUrl, {
573
+ headers: {
574
+ Accept: 'application/vnd.github+json',
575
+ 'User-Agent': 'qwen-code',
576
+ },
577
+ });
578
+ if (!response.ok) {
579
+ throw RequestError.invalidParams(undefined, `Failed to list GitHub skill files (${response.status})`);
580
+ }
581
+ const data = await response.json();
582
+ if (!Array.isArray(data)) {
583
+ throw RequestError.invalidParams(undefined, 'GitHub skill URL must point to a directory-backed SKILL.md file');
584
+ }
585
+ return data;
586
+ }
587
+ async function downloadGitHubSkillDirectoryFromApi(githubUrl, directoryPath, relativeRoot = '',
588
+ // Bound the recursive API walk so a crafted repo (deeply nested dirs, huge
589
+ // file counts, or large cumulative size) can't exhaust memory/time. The
590
+ // archive fallback already enforces size caps; this gives the API path
591
+ // equivalent guards.
592
+ depth = 0, budget = { files: 0, bytes: 0 }) {
593
+ if (depth > MAX_SKILL_API_DIR_DEPTH) {
594
+ throw RequestError.invalidParams(undefined, 'Skill directory nesting exceeds the maximum allowed depth');
595
+ }
596
+ const items = await fetchGitHubDirectoryItems(githubUrl, directoryPath);
597
+ const files = [];
598
+ for (const item of items) {
599
+ const record = toRecord(item);
600
+ const name = readRequiredString(record['name'], 'github.name');
601
+ const itemPath = readRequiredString(record['path'], 'github.path');
602
+ const type = readRequiredString(record['type'], 'github.type');
603
+ const relativePath = relativeRoot
604
+ ? path.posix.join(relativeRoot, name)
605
+ : name;
606
+ if (type === 'dir') {
607
+ files.push(...(await downloadGitHubSkillDirectoryFromApi(githubUrl, itemPath, relativePath, depth + 1, budget)));
608
+ continue;
609
+ }
610
+ if (type !== 'file')
611
+ continue;
612
+ budget.files += 1;
613
+ if (budget.files > MAX_SKILL_API_FILE_COUNT) {
614
+ throw RequestError.invalidParams(undefined, 'Skill directory contains too many files');
615
+ }
616
+ const downloadUrl = readRequiredString(record['download_url'], 'github.download_url');
617
+ // SSRF defense: the API-provided download_url is attacker-influenced, so
618
+ // run it through the same host allowlist + HTTPS check as the initial URL.
619
+ assertAllowedSkillSourceUrl(downloadUrl);
620
+ const content = await fetchBytes(downloadUrl);
621
+ budget.bytes += content.length;
622
+ if (budget.bytes > MAX_SKILL_DECOMPRESSED_BYTES) {
623
+ throw RequestError.invalidParams(undefined, 'Skill directory exceeds the maximum allowed size');
624
+ }
625
+ files.push({
626
+ relativePath,
627
+ content,
628
+ });
629
+ }
630
+ return files;
631
+ }
632
+ async function downloadGitHubSkillDirectory(githubUrl, directoryPath) {
633
+ const apiFiles = await downloadGitHubSkillDirectoryFromApi(githubUrl, directoryPath).catch((error) => {
634
+ debugLogger.warn('GitHub API directory listing failed, falling back to archive download:', error);
635
+ return null;
636
+ });
637
+ if (apiFiles)
638
+ return apiFiles;
639
+ return downloadGitHubSkillDirectoryFromArchive(githubUrl, directoryPath);
640
+ }
641
+ async function downloadSkill(sourceUrl) {
642
+ assertAllowedSkillSourceUrl(sourceUrl);
643
+ const githubUrl = parseGitHubBlobSkillUrl(sourceUrl);
644
+ if (!githubUrl || path.posix.basename(githubUrl.filePath) !== 'SKILL.md') {
645
+ return downloadSingleSkillFile(sourceUrl);
646
+ }
647
+ const skillDirectory = path.posix.dirname(githubUrl.filePath);
648
+ const files = await downloadGitHubSkillDirectory(githubUrl, skillDirectory);
649
+ const skillFile = files.find((file) => file.relativePath === 'SKILL.md');
650
+ if (!skillFile) {
651
+ throw RequestError.invalidParams(undefined, 'GitHub skill directory does not contain SKILL.md');
652
+ }
653
+ return {
654
+ skillContent: Buffer.from(skillFile.content).toString('utf8'),
655
+ files,
656
+ };
657
+ }
658
+ function resolveSkillInstallPath(skillDir, relativePath) {
659
+ const root = path.resolve(skillDir);
660
+ const target = path.resolve(skillDir, relativePath);
661
+ if (target !== root && !target.startsWith(root + path.sep)) {
662
+ throw RequestError.invalidParams(undefined, `Invalid skill file path: ${relativePath}`);
663
+ }
664
+ return target;
665
+ }
666
+ // Builds the per-skill directory and asserts (defense-in-depth, on top of
667
+ // validateSkillSlug) that it stays strictly under the managed skills root, so a
668
+ // crafted slug can never make install/delete operate on `<globalQwenDir>` itself.
669
+ function resolveManagedSkillDir(skillsBaseDir, slug) {
670
+ const root = path.resolve(skillsBaseDir);
671
+ const skillDir = path.resolve(skillsBaseDir, slug);
672
+ if (!skillDir.startsWith(root + path.sep)) {
673
+ throw RequestError.invalidParams(undefined, 'Invalid skill.slug');
674
+ }
675
+ return skillDir;
676
+ }
677
+ function readStringArray(value, fieldName) {
678
+ if (value === undefined || value === null)
679
+ return [];
680
+ if (!Array.isArray(value)) {
681
+ throw RequestError.invalidParams(undefined, `Invalid ${fieldName}: expected string[]`);
682
+ }
683
+ return Array.from(new Set(value
684
+ .map((item) => {
685
+ if (typeof item !== 'string') {
686
+ throw RequestError.invalidParams(undefined, `Invalid ${fieldName}: expected string[]`);
687
+ }
688
+ return item.trim();
689
+ })
690
+ .filter(Boolean)));
691
+ }
692
+ function readPositiveNumber(value, fieldName) {
693
+ if (value === undefined || value === null || value === '')
694
+ return undefined;
695
+ if (typeof value !== 'number' || !Number.isFinite(value) || value <= 0) {
696
+ throw RequestError.invalidParams(undefined, `Invalid ${fieldName}: expected positive number`);
697
+ }
698
+ return value;
699
+ }
700
+ function readProviderAdvancedConfig(value) {
701
+ if (value === undefined || value === null)
702
+ return undefined;
703
+ const record = toRecord(value);
704
+ if (record['enableThinking'] !== undefined &&
705
+ typeof record['enableThinking'] !== 'boolean') {
706
+ throw RequestError.invalidParams(undefined, 'Invalid advancedConfig.enableThinking: expected boolean');
707
+ }
708
+ const multimodalRecord = toRecord(record['multimodal']);
709
+ const multimodal = {};
710
+ for (const key of ['image', 'video', 'audio', 'pdf']) {
711
+ const flag = multimodalRecord[key];
712
+ if (flag !== undefined) {
713
+ if (typeof flag !== 'boolean') {
714
+ throw RequestError.invalidParams(undefined, `Invalid advancedConfig.multimodal.${key}: expected boolean`);
715
+ }
716
+ multimodal[key] = flag;
717
+ }
718
+ }
719
+ const contextWindowSize = readPositiveNumber(record['contextWindowSize'], 'advancedConfig.contextWindowSize');
720
+ const maxTokens = readPositiveNumber(record['maxTokens'], 'advancedConfig.maxTokens');
721
+ const advancedConfig = {
722
+ ...(typeof record['enableThinking'] === 'boolean'
723
+ ? { enableThinking: record['enableThinking'] }
724
+ : {}),
725
+ ...(Object.keys(multimodal).length > 0 ? { multimodal } : {}),
726
+ ...(contextWindowSize ? { contextWindowSize } : {}),
727
+ ...(maxTokens ? { maxTokens } : {}),
728
+ };
729
+ return Object.keys(advancedConfig).length > 0 ? advancedConfig : undefined;
730
+ }
731
+ function resolveProviderDocumentationUrl(config, baseUrl) {
732
+ if (typeof config.documentationUrl === 'string') {
733
+ return config.documentationUrl;
734
+ }
735
+ if (typeof config.documentationUrl === 'function') {
736
+ try {
737
+ return config.documentationUrl(baseUrl);
738
+ }
739
+ catch {
740
+ return undefined;
741
+ }
742
+ }
743
+ return undefined;
744
+ }
745
+ function isProviderModelConfig(value) {
746
+ const record = toRecord(value);
747
+ return typeof record['id'] === 'string';
748
+ }
749
+ function readSettingsEnv(settings, envKey) {
750
+ if (!envKey)
751
+ return undefined;
752
+ const env = toRecord(settings.merged['env']);
753
+ const value = env[envKey];
754
+ return typeof value === 'string' && value.length > 0 ? value : undefined;
755
+ }
756
+ function readProviderModels(settings, protocol) {
757
+ const modelProviders = toRecord(settings.merged['modelProviders']);
758
+ const models = modelProviders[protocol];
759
+ return Array.isArray(models) ? models.filter(isProviderModelConfig) : [];
760
+ }
761
+ function findExistingProviderModels(config, settings) {
762
+ const ownsModel = resolveOwnsModel(config);
763
+ if (!ownsModel)
764
+ return undefined;
765
+ const protocols = config.protocolOptions?.length
766
+ ? config.protocolOptions
767
+ : [config.protocol];
768
+ for (const protocol of protocols) {
769
+ const models = readProviderModels(settings, protocol).filter(ownsModel);
770
+ if (models.length > 0)
771
+ return { protocol, models };
772
+ }
773
+ return undefined;
774
+ }
775
+ function resolveProviderEnvKey(config, protocol, baseUrl) {
776
+ try {
777
+ return typeof config.envKey === 'function'
778
+ ? config.envKey(protocol, baseUrl)
779
+ : config.envKey;
780
+ }
781
+ catch {
782
+ return undefined;
783
+ }
784
+ }
785
+ function readExistingAdvancedConfig(model) {
786
+ const generationConfig = toRecord(model?.generationConfig);
787
+ const extraBody = toRecord(generationConfig['extra_body']);
788
+ const advancedConfig = {};
789
+ if (typeof extraBody['enable_thinking'] === 'boolean') {
790
+ advancedConfig['enableThinking'] = extraBody['enable_thinking'];
791
+ }
792
+ if (typeof generationConfig['contextWindowSize'] === 'number') {
793
+ advancedConfig['contextWindowSize'] = generationConfig['contextWindowSize'];
794
+ }
795
+ return Object.keys(advancedConfig).length > 0 ? advancedConfig : undefined;
796
+ }
797
+ function readExistingProviderConfig(config, settings) {
798
+ const existing = findExistingProviderModels(config, settings);
799
+ const firstModel = existing?.models[0];
800
+ const protocol = existing?.protocol ?? config.protocol;
801
+ const baseUrl = typeof firstModel?.baseUrl === 'string'
802
+ ? firstModel.baseUrl
803
+ : resolveBaseUrl(config);
804
+ const envKey = typeof firstModel?.envKey === 'string'
805
+ ? firstModel.envKey
806
+ : resolveProviderEnvKey(config, protocol, baseUrl);
807
+ const apiKey = readSettingsEnv(settings, envKey);
808
+ const hasExistingConfig = !!apiKey || !!existing;
809
+ if (!hasExistingConfig)
810
+ return undefined;
811
+ const advancedConfig = readExistingAdvancedConfig(firstModel);
812
+ return {
813
+ protocol,
814
+ baseUrl,
815
+ // Never serialize the raw secret over the ACP wire. Expose only whether a
816
+ // key is stored; the client can omit `apiKey` on connect to keep it.
817
+ ...(apiKey ? { hasApiKey: true } : {}),
818
+ ...(existing ? { modelIds: existing.models.map((model) => model.id) } : {}),
819
+ ...(advancedConfig ? { advancedConfig } : {}),
820
+ };
821
+ }
822
+ // Resolves the raw, stored API key for a provider for server-side use only
823
+ // (never serialized to the client). Used so `qwen/providers/connect` can keep
824
+ // the existing key when the client updates other fields without resubmitting it.
825
+ function resolveExistingProviderApiKey(config, settings) {
826
+ const existing = findExistingProviderModels(config, settings);
827
+ const firstModel = existing?.models[0];
828
+ const protocol = existing?.protocol ?? config.protocol;
829
+ const baseUrl = typeof firstModel?.baseUrl === 'string'
830
+ ? firstModel.baseUrl
831
+ : resolveBaseUrl(config);
832
+ const envKey = typeof firstModel?.envKey === 'string'
833
+ ? firstModel.envKey
834
+ : resolveProviderEnvKey(config, protocol, baseUrl);
835
+ return readSettingsEnv(settings, envKey);
836
+ }
837
+ function serializeProviderConfig(config, settings) {
838
+ const defaultProtocol = config.protocolOptions?.[0] ?? config.protocol;
839
+ const defaultBaseUrl = config.baseUrl === undefined
840
+ ? getDefaultBaseUrlForProtocol(defaultProtocol)
841
+ : resolveBaseUrl(config);
842
+ const existingConfig = readExistingProviderConfig(config, settings);
843
+ return {
844
+ id: config.id,
845
+ label: config.label,
846
+ description: config.description,
847
+ protocol: config.protocol,
848
+ protocolOptions: config.protocolOptions ?? [],
849
+ baseUrl: config.baseUrl,
850
+ baseUrlPlaceholder: config.baseUrl === undefined ? defaultBaseUrl : undefined,
851
+ defaultModelIds: getDefaultModelIds(config),
852
+ models: config.models ?? [],
853
+ modelsEditable: config.modelsEditable === true || !config.models,
854
+ showAdvancedConfig: config.showAdvancedConfig === true,
855
+ apiKeyPlaceholder: config.apiKeyPlaceholder,
856
+ documentationUrl: resolveProviderDocumentationUrl(config, defaultBaseUrl),
857
+ uiGroup: config.uiGroup ?? 'third-party',
858
+ uiLabels: config.uiLabels,
859
+ ...(existingConfig ? { existingConfig } : {}),
860
+ };
861
+ }
862
+ function readProviderSetupInputs(config, params, existingApiKey) {
863
+ const protocol = readOptionalString(params['protocol'], 'protocol');
864
+ if (protocol &&
865
+ protocol !== config.protocol &&
866
+ !config.protocolOptions?.includes(protocol)) {
867
+ throw RequestError.invalidParams(undefined, `Invalid protocol for provider "${config.id}"`);
868
+ }
869
+ let baseUrl = resolveBaseUrl(config, readOptionalString(params['baseUrl'], 'baseUrl')).trim();
870
+ if (!baseUrl && config.baseUrl === undefined) {
871
+ baseUrl = getDefaultBaseUrlForProtocol(protocol ?? config.protocol);
872
+ }
873
+ if (!baseUrl) {
874
+ throw RequestError.invalidParams(undefined, `Invalid or missing baseUrl for provider "${config.id}"`);
875
+ }
876
+ // `apiKey` is optional on update: when the client omits it (e.g. it only
877
+ // received `hasApiKey` from the list response), fall back to the stored key.
878
+ const apiKey = readOptionalString(params['apiKey'], 'apiKey') ?? existingApiKey;
879
+ if (!apiKey) {
880
+ throw RequestError.invalidParams(undefined, 'Invalid or missing apiKey');
881
+ }
882
+ const apiKeyError = config.validateApiKey?.(apiKey, baseUrl);
883
+ if (apiKeyError) {
884
+ throw RequestError.invalidParams(undefined, apiKeyError);
885
+ }
886
+ const defaultModelIds = getDefaultModelIds(config);
887
+ const modelIds = readStringArray(params['modelIds'], 'modelIds');
888
+ const resolvedModelIds = modelIds.length > 0 ? modelIds : defaultModelIds;
889
+ if (resolvedModelIds.length === 0) {
890
+ throw RequestError.invalidParams(undefined, `Invalid or missing modelIds for provider "${config.id}"`);
891
+ }
892
+ const advancedConfig = readProviderAdvancedConfig(params['advancedConfig']);
893
+ return {
894
+ ...(protocol ? { protocol } : {}),
895
+ baseUrl,
896
+ apiKey,
897
+ modelIds: resolvedModelIds,
898
+ ...(advancedConfig ? { advancedConfig } : {}),
899
+ };
900
+ }
901
+ function readProviderConnectScope(value) {
902
+ if (value === undefined)
903
+ return undefined;
904
+ if (value === 'user')
905
+ return SettingScope.User;
906
+ if (value === 'workspace')
907
+ return SettingScope.Workspace;
908
+ throw RequestError.invalidParams(undefined, 'Invalid scope for provider connect');
909
+ }
910
+ function getNestedSettingValue(source, key) {
911
+ let current = source;
912
+ for (const segment of key.split('.')) {
913
+ if (!current || typeof current !== 'object' || Array.isArray(current)) {
914
+ return undefined;
915
+ }
916
+ current = current[segment];
917
+ }
918
+ if (typeof current === 'string' ||
919
+ typeof current === 'number' ||
920
+ typeof current === 'boolean' ||
921
+ Array.isArray(current)) {
922
+ return current;
923
+ }
924
+ return undefined;
925
+ }
926
+ function readCoreSettingValues(source) {
927
+ const values = {};
928
+ for (const key of QWEN_CORE_SETTING_KEYS) {
929
+ const value = getNestedSettingValue(source, key);
930
+ if (value !== undefined) {
931
+ values[key] = value;
932
+ }
933
+ }
934
+ return values;
935
+ }
936
+ export function normalizeCoreSettingValue(key, value) {
937
+ const definition = QWEN_CORE_SETTING_DEFINITIONS[key];
938
+ switch (definition.type) {
939
+ case 'boolean':
940
+ if (typeof value !== 'boolean') {
941
+ throw RequestError.invalidParams(undefined, `${key} must be a boolean`);
942
+ }
943
+ return value;
944
+ case 'number':
945
+ if (typeof value !== 'number' || !Number.isFinite(value)) {
946
+ throw RequestError.invalidParams(undefined, `${key} must be a number`);
947
+ }
948
+ if (definition.min !== undefined && value < definition.min) {
949
+ throw RequestError.invalidParams(undefined, `${key} must be at least ${definition.min}`);
950
+ }
951
+ return value;
952
+ case 'enum': {
953
+ const values = definition.values;
954
+ if (typeof value !== 'string' || !values?.includes(value)) {
955
+ throw RequestError.invalidParams(undefined, `${key} must be one of ${values?.join(', ')}`);
956
+ }
957
+ return value;
958
+ }
959
+ case 'string': {
960
+ if (value === undefined)
961
+ return undefined;
962
+ if (typeof value !== 'string') {
963
+ throw RequestError.invalidParams(undefined, `${key} must be a string`);
964
+ }
965
+ // Strip control characters (incl. newlines) from string settings. Some
966
+ // are embedded verbatim into instruction files / prompts — e.g.
967
+ // general.outputLanguage is written into output-language.md, loaded as a
968
+ // system instruction — where an embedded newline could forge a new
969
+ // instruction line (persistent prompt injection).
970
+ // eslint-disable-next-line no-control-regex
971
+ const controlChars = /[\u0000-\u001f\u007f-\u009f\u2028\u2029]/g;
972
+ const sanitized = value.replace(controlChars, ' ').trim();
973
+ // An input that is entirely control/whitespace chars (e.g. '\n') trims to
974
+ // ''. For settings like model.name an empty string has different
975
+ // semantics from undefined (a literal empty value vs. falling back to the
976
+ // default), so collapse the empty result to undefined.
977
+ return sanitized || undefined;
978
+ }
979
+ default:
980
+ throw RequestError.invalidParams(undefined, `${key} has an unsupported setting type`);
981
+ }
982
+ }
983
+ function normalizeStringArray(value) {
984
+ if (value === undefined)
985
+ return undefined;
986
+ if (!Array.isArray(value)) {
987
+ throw RequestError.invalidParams(undefined, 'Expected an array of strings');
988
+ }
989
+ return value
990
+ .map((item) => (typeof item === 'string' ? item.trim() : ''))
991
+ .filter(Boolean);
992
+ }
993
+ function normalizeStringRecord(value) {
994
+ if (value === undefined)
995
+ return undefined;
996
+ const record = toRecord(value);
997
+ const result = {};
998
+ for (const [key, item] of Object.entries(record)) {
999
+ if (typeof item === 'string' && key.trim()) {
1000
+ result[key.trim()] = item;
1001
+ }
1002
+ }
1003
+ return result;
1004
+ }
1005
+ function normalizeOptionalNumber(value) {
1006
+ if (value === undefined || value === null || value === '')
1007
+ return undefined;
1008
+ const numberValue = typeof value === 'number' ? value : Number.parseInt(String(value), 10);
1009
+ if (!Number.isFinite(numberValue) || numberValue <= 0) {
1010
+ throw RequestError.invalidParams(undefined, 'Expected a positive number');
1011
+ }
1012
+ return numberValue;
1013
+ }
1014
+ function normalizeMcpServerConfig(value) {
1015
+ const input = toRecord(value);
1016
+ const transport = input['transport'];
1017
+ if (transport !== 'stdio' && transport !== 'http' && transport !== 'sse') {
1018
+ throw RequestError.invalidParams(undefined, 'MCP transport must be stdio, http, or sse');
1019
+ }
1020
+ const server = { transport };
1021
+ const description = input['description'];
1022
+ if (typeof description === 'string' && description.trim()) {
1023
+ server.description = description.trim();
1024
+ }
1025
+ const cwd = input['cwd'];
1026
+ if (typeof cwd === 'string' && cwd.trim())
1027
+ server.cwd = cwd.trim();
1028
+ const timeout = normalizeOptionalNumber(input['timeout']);
1029
+ if (timeout !== undefined)
1030
+ server.timeout = timeout;
1031
+ if (typeof input['trust'] === 'boolean')
1032
+ server.trust = input['trust'];
1033
+ server.includeTools = normalizeStringArray(input['includeTools']);
1034
+ server.excludeTools = normalizeStringArray(input['excludeTools']);
1035
+ if (transport === 'stdio') {
1036
+ const command = input['command'];
1037
+ if (typeof command !== 'string' || !command.trim()) {
1038
+ throw RequestError.invalidParams(undefined, 'Stdio MCP servers require a command');
1039
+ }
1040
+ server.command = command.trim();
1041
+ server.args = normalizeStringArray(input['args']);
1042
+ server.env = normalizeStringRecord(input['env']);
1043
+ return server;
1044
+ }
1045
+ const urlKey = transport === 'http' ? 'httpUrl' : 'url';
1046
+ const url = input[urlKey];
1047
+ if (typeof url !== 'string' || !url.trim()) {
1048
+ throw RequestError.invalidParams(undefined, `${transport.toUpperCase()} MCP servers require a URL`);
1049
+ }
1050
+ if (transport === 'http')
1051
+ server.httpUrl = url.trim();
1052
+ else
1053
+ server.url = url.trim();
1054
+ server.headers = normalizeStringRecord(input['headers']);
1055
+ return server;
1056
+ }
1057
+ function toStoredMcpServerConfig(server) {
1058
+ const result = {};
1059
+ for (const key of [
1060
+ 'timeout',
1061
+ 'trust',
1062
+ 'description',
1063
+ 'includeTools',
1064
+ 'excludeTools',
1065
+ ]) {
1066
+ if (server[key] !== undefined)
1067
+ result[key] = server[key];
1068
+ }
1069
+ if (server.transport === 'stdio') {
1070
+ result['command'] = server.command;
1071
+ if (server.args !== undefined)
1072
+ result['args'] = server.args;
1073
+ if (server.cwd !== undefined)
1074
+ result['cwd'] = server.cwd;
1075
+ if (server.env !== undefined)
1076
+ result['env'] = server.env;
1077
+ }
1078
+ else if (server.transport === 'http') {
1079
+ result['httpUrl'] = server.httpUrl;
1080
+ if (server.headers !== undefined)
1081
+ result['headers'] = server.headers;
1082
+ }
1083
+ else {
1084
+ result['url'] = server.url;
1085
+ if (server.headers !== undefined)
1086
+ result['headers'] = server.headers;
1087
+ }
1088
+ return result;
1089
+ }
1090
+ function toMcpServerConfig(value) {
1091
+ const server = toRecord(value);
1092
+ if (typeof server['httpUrl'] === 'string') {
1093
+ return {
1094
+ transport: 'http',
1095
+ httpUrl: server['httpUrl'],
1096
+ headers: normalizeStringRecord(server['headers']),
1097
+ timeout: normalizeOptionalNumber(server['timeout']),
1098
+ trust: typeof server['trust'] === 'boolean' ? server['trust'] : undefined,
1099
+ description: typeof server['description'] === 'string'
1100
+ ? server['description']
1101
+ : undefined,
1102
+ includeTools: normalizeStringArray(server['includeTools']),
1103
+ excludeTools: normalizeStringArray(server['excludeTools']),
1104
+ extensionName: typeof server['extensionName'] === 'string'
1105
+ ? server['extensionName']
1106
+ : undefined,
1107
+ };
1108
+ }
1109
+ if (typeof server['url'] === 'string') {
1110
+ return {
1111
+ transport: 'sse',
1112
+ url: server['url'],
1113
+ headers: normalizeStringRecord(server['headers']),
1114
+ timeout: normalizeOptionalNumber(server['timeout']),
1115
+ trust: typeof server['trust'] === 'boolean' ? server['trust'] : undefined,
1116
+ description: typeof server['description'] === 'string'
1117
+ ? server['description']
1118
+ : undefined,
1119
+ includeTools: normalizeStringArray(server['includeTools']),
1120
+ excludeTools: normalizeStringArray(server['excludeTools']),
1121
+ extensionName: typeof server['extensionName'] === 'string'
1122
+ ? server['extensionName']
1123
+ : undefined,
1124
+ };
1125
+ }
1126
+ if (typeof server['command'] === 'string') {
1127
+ return {
1128
+ transport: 'stdio',
1129
+ command: server['command'],
1130
+ args: normalizeStringArray(server['args']),
1131
+ cwd: typeof server['cwd'] === 'string' ? server['cwd'] : undefined,
1132
+ env: normalizeStringRecord(server['env']),
1133
+ timeout: normalizeOptionalNumber(server['timeout']),
1134
+ trust: typeof server['trust'] === 'boolean' ? server['trust'] : undefined,
1135
+ description: typeof server['description'] === 'string'
1136
+ ? server['description']
1137
+ : undefined,
1138
+ includeTools: normalizeStringArray(server['includeTools']),
1139
+ excludeTools: normalizeStringArray(server['excludeTools']),
1140
+ extensionName: typeof server['extensionName'] === 'string'
1141
+ ? server['extensionName']
1142
+ : undefined,
1143
+ };
1144
+ }
1145
+ return undefined;
1146
+ }
1147
+ // Placeholder substituted for MCP secret values in settings responses. Keys
1148
+ // are preserved so the client can show which env vars / headers are configured
1149
+ // without ever receiving the plaintext value. Clients must treat this sentinel
1150
+ // as "unchanged" and not echo it back through setMcpServer.
1151
+ const REDACTED_MCP_SECRET = '__redacted__';
1152
+ function redactMcpServerSecrets(server) {
1153
+ const redactValues = (record) => record
1154
+ ? Object.fromEntries(Object.keys(record).map((key) => [key, REDACTED_MCP_SECRET]))
1155
+ : record;
1156
+ return {
1157
+ ...server,
1158
+ env: redactValues(server.env),
1159
+ headers: redactValues(server.headers),
1160
+ };
1161
+ }
1162
+ /**
1163
+ * Reverse of redaction on write: when a client echoes back the
1164
+ * `__redacted__` sentinel (because it read the masked value via getCore and
1165
+ * re-submitted the whole config), restore the previously stored real value
1166
+ * instead of persisting the literal sentinel. Keys with no prior value are
1167
+ * dropped, since there is no secret to restore.
1168
+ */
1169
+ function restoreRedactedMcpSecrets(server, existing) {
1170
+ const restore = (incoming, prior) => {
1171
+ if (!incoming)
1172
+ return incoming;
1173
+ const priorRecord = toRecord(prior);
1174
+ const result = {};
1175
+ for (const [key, value] of Object.entries(incoming)) {
1176
+ if (value !== REDACTED_MCP_SECRET) {
1177
+ result[key] = value;
1178
+ continue;
1179
+ }
1180
+ const priorValue = priorRecord[key];
1181
+ if (typeof priorValue === 'string') {
1182
+ result[key] = priorValue;
1183
+ }
1184
+ }
1185
+ return result;
1186
+ };
1187
+ return {
1188
+ ...server,
1189
+ env: restore(server.env, existing['env']),
1190
+ headers: restore(server.headers, existing['headers']),
1191
+ };
1192
+ }
1193
+ function redactSecretRecord(record) {
1194
+ return record
1195
+ ? Object.fromEntries(Object.keys(record).map((key) => [key, REDACTED_MCP_SECRET]))
1196
+ : record;
1197
+ }
1198
+ function restoreSecretRecord(incoming, prior) {
1199
+ if (!incoming)
1200
+ return incoming;
1201
+ const priorRecord = toRecord(prior);
1202
+ const result = {};
1203
+ for (const [key, value] of Object.entries(incoming)) {
1204
+ if (value !== REDACTED_MCP_SECRET) {
1205
+ result[key] = value;
1206
+ continue;
1207
+ }
1208
+ const priorValue = priorRecord[key];
1209
+ if (typeof priorValue === 'string')
1210
+ result[key] = priorValue;
1211
+ }
1212
+ return result;
1213
+ }
1214
+ // Hooks carry the same secret classes as MCP servers — command-hook `env`
1215
+ // (tokens passed to scripts) and http-hook `headers` (auth). Mask them in the
1216
+ // settings response and restore them on write, mirroring the MCP scheme.
1217
+ function redactHookSecrets(hook) {
1218
+ return {
1219
+ ...hook,
1220
+ hooks: hook.hooks.map((config) => ({
1221
+ ...config,
1222
+ ...(config.env ? { env: redactSecretRecord(config.env) } : {}),
1223
+ ...(config.headers
1224
+ ? { headers: redactSecretRecord(config.headers) }
1225
+ : {}),
1226
+ })),
1227
+ };
1228
+ }
1229
+ function restoreRedactedHookSecrets(hook, prior) {
1230
+ const priorHooks = Array.isArray(prior['hooks'])
1231
+ ? prior['hooks']
1232
+ : [];
1233
+ return {
1234
+ ...hook,
1235
+ hooks: hook.hooks.map((config, i) => {
1236
+ const priorConfig = toRecord(priorHooks[i]);
1237
+ return {
1238
+ ...config,
1239
+ ...(config.env
1240
+ ? { env: restoreSecretRecord(config.env, priorConfig['env']) }
1241
+ : {}),
1242
+ ...(config.headers
1243
+ ? {
1244
+ headers: restoreSecretRecord(config.headers, priorConfig['headers']),
1245
+ }
1246
+ : {}),
1247
+ };
1248
+ }),
1249
+ };
1250
+ }
1251
+ function readMcpServers(source, scope) {
1252
+ const servers = toRecord(source['mcpServers']);
1253
+ return Object.entries(servers)
1254
+ .map(([name, value]) => {
1255
+ try {
1256
+ const server = toMcpServerConfig(value);
1257
+ // Never expose stdio env or http/sse auth headers in plaintext in the
1258
+ // settings response — they routinely hold API keys / tokens.
1259
+ return server
1260
+ ? { name, scope, server: redactMcpServerSecrets(server) }
1261
+ : undefined;
1262
+ }
1263
+ catch (error) {
1264
+ debugLogger.warn(`Skipping malformed MCP server config [${scope}:${name}]:`, error);
1265
+ return undefined;
1266
+ }
1267
+ })
1268
+ .filter((entry) => !!entry);
1269
+ }
1270
+ function isHookEvent(value) {
1271
+ return (typeof value === 'string' &&
1272
+ QWEN_HOOK_EVENTS.includes(value));
1273
+ }
1274
+ function normalizeHookConfig(value) {
1275
+ const input = toRecord(value);
1276
+ const type = input['type'];
1277
+ if (type !== 'command' && type !== 'http') {
1278
+ throw RequestError.invalidParams(undefined, 'Hook type must be command or http');
1279
+ }
1280
+ const config = { type };
1281
+ if (type === 'command') {
1282
+ const command = input['command'];
1283
+ if (typeof command !== 'string' || !command.trim()) {
1284
+ throw RequestError.invalidParams(undefined, 'Command hooks require a command');
1285
+ }
1286
+ config.command = command.trim();
1287
+ config.env = normalizeStringRecord(input['env']);
1288
+ if (typeof input['async'] === 'boolean')
1289
+ config.async = input['async'];
1290
+ const shell = input['shell'];
1291
+ if (shell === 'bash' || shell === 'powershell')
1292
+ config.shell = shell;
1293
+ }
1294
+ else {
1295
+ const url = input['url'];
1296
+ if (typeof url !== 'string' || !url.trim()) {
1297
+ throw RequestError.invalidParams(undefined, 'HTTP hooks require a URL');
1298
+ }
1299
+ config.url = url.trim();
1300
+ config.headers = normalizeStringRecord(input['headers']);
1301
+ config.allowedEnvVars = normalizeStringArray(input['allowedEnvVars']);
1302
+ if (typeof input['once'] === 'boolean')
1303
+ config.once = input['once'];
1304
+ }
1305
+ const timeout = normalizeOptionalNumber(input['timeout']);
1306
+ if (timeout !== undefined)
1307
+ config.timeout = timeout;
1308
+ for (const key of ['name', 'description', 'statusMessage']) {
1309
+ const item = input[key];
1310
+ if (typeof item === 'string' && item.trim()) {
1311
+ config[key] = item.trim();
1312
+ }
1313
+ }
1314
+ return config;
1315
+ }
1316
+ function normalizeHookDefinition(value) {
1317
+ const input = toRecord(value);
1318
+ const hooks = input['hooks'];
1319
+ if (!Array.isArray(hooks) || hooks.length === 0) {
1320
+ throw RequestError.invalidParams(undefined, 'Hook definition requires at least one hook');
1321
+ }
1322
+ const definition = {
1323
+ hooks: hooks.map(normalizeHookConfig),
1324
+ };
1325
+ if (typeof input['matcher'] === 'string') {
1326
+ definition.matcher = input['matcher'];
1327
+ }
1328
+ if (typeof input['sequential'] === 'boolean') {
1329
+ definition.sequential = input['sequential'];
1330
+ }
1331
+ return definition;
1332
+ }
1333
+ function readHooks(source, scope, extensionName) {
1334
+ const hooksRoot = toRecord(source['hooks']);
1335
+ const entries = [];
1336
+ for (const event of QWEN_HOOK_EVENTS) {
1337
+ const eventHooks = hooksRoot[event];
1338
+ if (!Array.isArray(eventHooks))
1339
+ continue;
1340
+ eventHooks.forEach((hookValue, index) => {
1341
+ try {
1342
+ entries.push({
1343
+ event,
1344
+ scope,
1345
+ index,
1346
+ hook: redactHookSecrets(normalizeHookDefinition(hookValue)),
1347
+ extensionName,
1348
+ });
1349
+ }
1350
+ catch (error) {
1351
+ debugLogger.warn(`Skipping malformed hook entry [${scope}:${event}:${index}]:`, error);
1352
+ }
1353
+ });
1354
+ }
1355
+ return entries;
1356
+ }
1357
+ function toSettingsScope(scope) {
1358
+ if (scope === 'workspace')
1359
+ return SettingScope.Workspace;
1360
+ if (scope === 'user')
1361
+ return SettingScope.User;
1362
+ throw RequestError.invalidParams(undefined, 'scope must be user or workspace');
1363
+ }
1364
+ function readScopeSettings(settings, scope) {
1365
+ return settings.forScope(toSettingsScope(scope)).settings;
1366
+ }
1367
+ async function resolvePreferredMemoryFile(dir, fallbackFilename) {
1368
+ for (const filename of getAllGeminiMdFilenames()) {
1369
+ const filePath = path.join(dir, filename);
1370
+ try {
1371
+ await fs.access(filePath);
1372
+ return filePath;
1373
+ }
1374
+ catch {
1375
+ // Try the next configured file name.
1376
+ }
1377
+ }
1378
+ return path.join(dir, fallbackFilename);
1379
+ }
1380
+ async function resolveQwenMemoryPaths(params) {
1381
+ const fallbackFilename = getAllGeminiMdFilenames()[0] ?? 'QWEN.md';
1382
+ const userMemoryFile = await resolvePreferredMemoryFile(Storage.getGlobalQwenDir(), fallbackFilename);
1383
+ const projectMemoryFile = await resolvePreferredMemoryFile(params.cwd, fallbackFilename);
1384
+ const autoMemoryDir = getAutoMemoryRoot(params.projectRoot);
1385
+ // Resolve-only: `getMemoryPaths` is a read query, so it must not create
1386
+ // files or directories as a side effect (the old code ran ensureMemoryFile
1387
+ // + fs.mkdir on every call, including against a client-controlled
1388
+ // projectRoot). Callers that write memory are responsible for ensuring the
1389
+ // target exists.
1390
+ return {
1391
+ userMemoryFile,
1392
+ projectMemoryFile,
1393
+ autoMemoryDir,
1394
+ };
1395
+ }
1396
+ export async function runAcpAgent(config, settings, argv) {
1397
+ // Initialize config to set up ACP bootstrap services (hooks, tools, MCP)
1398
+ // without creating a chat session. The real per-session Config will own
1399
+ // GeminiClient.initialize() and any SessionStart hook execution.
1400
+ await config.initialize({ skipGeminiInitialization: true });
1401
+ // ACP forwards session messages straight to the model; under progressive
1402
+ // MCP availability `initialize()` returns before MCP servers settle, so
1403
+ // we wait here to keep the first session's tool surface consistent with
1404
+ // the legacy synchronous behavior.
1405
+ await config.waitForMcpReady();
1406
+ // Surface MCP failures to stderr. ACP's stdout is the protocol channel
1407
+ // so info/log writes are already redirected to stderr below, but we
1408
+ // emit this BEFORE that redirection takes effect to keep the message
1409
+ // visible regardless of how the host process is wired.
1410
+ // Defensive against tests that pass a stubbed Config without
1411
+ // `getFailedMcpServerNames`.
1412
+ const failedMcpServers = typeof config.getFailedMcpServerNames === 'function'
1413
+ ? config.getFailedMcpServerNames()
1414
+ : [];
1415
+ if (failedMcpServers.length > 0) {
1416
+ process.stderr.write(`Warning: MCP server(s) failed to start: ${failedMcpServers.join(', ')}. ` +
1417
+ `Continuing with built-in tools and any servers that did connect.\n`);
1418
+ }
1419
+ const stdout = Writable.toWeb(process.stdout);
1420
+ const stdin = Readable.toWeb(process.stdin);
1421
+ // Stdout is used to send messages to the client, so console.log/console.info
1422
+ // messages to stderr so that they don't interfere with ACP.
1423
+ console.log = console.error;
1424
+ console.info = console.error;
1425
+ console.debug = console.error;
1426
+ const stream = ndJsonStream(stdout, stdin);
1427
+ let agentInstance;
1428
+ const connection = new AgentSideConnection((conn) => {
1429
+ agentInstance = new QwenAgent(config, settings, argv, conn);
1430
+ return agentInstance;
1431
+ }, stream);
1432
+ // Handle SIGTERM/SIGINT for graceful shutdown.
1433
+ // Without this, signal handlers registered elsewhere in the CLI
1434
+ // (e.g., stdin raw mode restoration) override the default exit behavior,
1435
+ // causing the ACP process to ignore termination signals.
1436
+ let shuttingDown = false;
1437
+ let sessionEndFired = false;
1438
+ // Helper to fire SessionEnd hook once, preventing double-fire from both
1439
+ // shutdown handler path and connection.closed path.
1440
+ const fireSessionEndOnce = async (reason) => {
1441
+ if (sessionEndFired)
1442
+ return;
1443
+ sessionEndFired = true;
1444
+ const configs = new Set([config]);
1445
+ const sessions = agentInstance?.getActiveSessions();
1446
+ if (sessions) {
1447
+ for (const session of sessions) {
1448
+ const sessionConfig = session.getConfig?.();
1449
+ if (sessionConfig) {
1450
+ configs.add(sessionConfig);
1451
+ }
1452
+ }
1453
+ }
1454
+ for (const cfg of configs) {
1455
+ const hookSystem = cfg.getHookSystem?.();
1456
+ const hooksEnabled = !cfg.getDisableAllHooks?.();
1457
+ if (!hooksEnabled ||
1458
+ !hookSystem ||
1459
+ !cfg.hasHooksForEvent?.('SessionEnd')) {
1460
+ continue;
1461
+ }
1462
+ try {
1463
+ await hookSystem.fireSessionEndEvent(reason);
1464
+ }
1465
+ catch (err) {
1466
+ debugLogger.warn(`SessionEnd hook failed: ${err instanceof Error ? err.message : String(err)}`);
1467
+ }
1468
+ }
1469
+ };
1470
+ const shutdownHandler = async () => {
1471
+ if (shuttingDown)
1472
+ return;
1473
+ shuttingDown = true;
1474
+ debugLogger.debug('[ACP] Shutdown signal received, closing streams');
1475
+ // Fire SessionEnd hook for all active sessions (aligned with core path)
1476
+ await fireSessionEndOnce(SessionEndReason.Other);
1477
+ agentInstance?.disposeSessions();
1478
+ try {
1479
+ process.stdin.destroy();
1480
+ }
1481
+ catch {
1482
+ // stdin may already be closed
1483
+ }
1484
+ try {
1485
+ process.stdout.destroy();
1486
+ }
1487
+ catch {
1488
+ // stdout may already be closed
1489
+ }
1490
+ // Clean up child processes (MCP servers, etc.) and force exit.
1491
+ // Without this, orphan subprocesses keep the Node.js event loop alive
1492
+ // and the CLI process never terminates after the IDE disconnects.
1493
+ runExitCleanup()
1494
+ .catch((err) => {
1495
+ debugLogger.error('[ACP] Cleanup error:', err);
1496
+ })
1497
+ .finally(() => {
1498
+ process.exit(0);
1499
+ });
1500
+ };
1501
+ process.on('SIGTERM', shutdownHandler);
1502
+ process.on('SIGINT', shutdownHandler);
1503
+ await connection.closed;
1504
+ // Connection closed by IDE - fire SessionEnd hook (aligned with core path)
1505
+ await fireSessionEndOnce(SessionEndReason.PromptInputExit);
1506
+ agentInstance?.disposeSessions();
1507
+ process.off('SIGTERM', shutdownHandler);
1508
+ process.off('SIGINT', shutdownHandler);
1509
+ }
1510
+ export function toStdioServer(server) {
1511
+ if ('command' in server && 'args' in server && 'env' in server) {
1512
+ return server;
1513
+ }
1514
+ return undefined;
1515
+ }
1516
+ export function toSseServer(server) {
1517
+ if ('type' in server && server.type === 'sse') {
1518
+ return server;
1519
+ }
1520
+ return undefined;
1521
+ }
1522
+ export function toHttpServer(server) {
1523
+ if ('type' in server && server.type === 'http') {
1524
+ return server;
1525
+ }
1526
+ return undefined;
1527
+ }
1528
+ class QwenAgent {
1529
+ config;
1530
+ settings;
1531
+ argv;
1532
+ connection;
1533
+ sessions = new Map();
1534
+ clientCapabilities;
1535
+ getActiveSessions() {
1536
+ return [...this.sessions.values()];
1537
+ }
1538
+ disposeSessions() {
1539
+ for (const session of this.sessions.values()) {
1540
+ session.dispose();
1541
+ }
1542
+ this.sessions.clear();
1543
+ }
1544
+ constructor(config, settings, argv, connection) {
1545
+ this.config = config;
1546
+ this.settings = settings;
1547
+ this.argv = argv;
1548
+ this.connection = connection;
1549
+ }
1550
+ async initialize(args) {
1551
+ this.clientCapabilities = args.clientCapabilities;
1552
+ const authMethods = buildAuthMethods();
1553
+ const version = process.env['CLI_VERSION'] || process.version;
1554
+ return {
1555
+ protocolVersion: PROTOCOL_VERSION,
1556
+ agentInfo: {
1557
+ name: 'qwen-code',
1558
+ title: 'Qwen Code',
1559
+ version,
1560
+ },
1561
+ authMethods,
1562
+ agentCapabilities: {
1563
+ loadSession: true,
1564
+ promptCapabilities: {
1565
+ image: true,
1566
+ audio: true,
1567
+ embeddedContext: true,
1568
+ },
1569
+ sessionCapabilities: {
1570
+ list: {},
1571
+ resume: {},
1572
+ },
1573
+ mcpCapabilities: {
1574
+ sse: true,
1575
+ http: true,
1576
+ },
1577
+ },
1578
+ };
1579
+ }
1580
+ async authenticate({ methodId }) {
1581
+ const method = z.nativeEnum(AuthType).parse(methodId);
1582
+ let authUri;
1583
+ const authUriHandler = (deviceAuth) => {
1584
+ authUri = deviceAuth.verification_uri_complete;
1585
+ void this.connection.extNotification('authenticate/update', {
1586
+ _meta: { authUri },
1587
+ });
1588
+ };
1589
+ if (method === AuthType.QWEN_OAUTH) {
1590
+ qwenOAuth2Events.once(QwenOAuth2Event.AuthUri, authUriHandler);
1591
+ }
1592
+ await clearCachedCredentialFile();
1593
+ try {
1594
+ await this.config.refreshAuth(method);
1595
+ this.settings.setValue(SettingScope.User, 'security.auth.selectedType', method);
1596
+ }
1597
+ finally {
1598
+ if (method === AuthType.QWEN_OAUTH) {
1599
+ qwenOAuth2Events.off(QwenOAuth2Event.AuthUri, authUriHandler);
1600
+ }
1601
+ }
1602
+ }
1603
+ async newSession({ cwd, mcpServers, }) {
1604
+ const config = await this.newSessionConfig(cwd, mcpServers);
1605
+ await this.ensureAuthenticated(config);
1606
+ this.setupFileSystem(config);
1607
+ const session = await this.createAndStoreSession(config);
1608
+ const availableModels = this.buildAvailableModels(config);
1609
+ const modesData = this.buildModesData(config);
1610
+ const configOptions = this.buildConfigOptions(config);
1611
+ return {
1612
+ sessionId: session.getId(),
1613
+ models: availableModels,
1614
+ modes: modesData,
1615
+ configOptions,
1616
+ };
1617
+ }
1618
+ async loadSession(params) {
1619
+ const exists = await runWithAcpRuntimeOutputDir(this.settings, params.cwd, async () => {
1620
+ const sessionService = new SessionService(params.cwd);
1621
+ return sessionService.sessionExists(params.sessionId);
1622
+ });
1623
+ if (!exists) {
1624
+ throw RequestError.resourceNotFound(`session:${params.sessionId}`);
1625
+ }
1626
+ const config = await this.newSessionConfig(params.cwd,
1627
+ // `LoadSessionRequest.mcpServers` is required in today's ACP
1628
+ // schema, but mirror `unstable_resumeSession` and tolerate a
1629
+ // future loosening — `newSessionConfig` iterates the list, so
1630
+ // a `null`/`undefined` would otherwise throw `TypeError`.
1631
+ params.mcpServers ?? [], params.sessionId, true);
1632
+ await this.ensureAuthenticated(config);
1633
+ this.setupFileSystem(config);
1634
+ const sessionData = config.getResumedSessionData();
1635
+ const session = await this.createAndStoreSession(config, sessionData?.conversation);
1636
+ await this.#restoreWorktreeOnResume(config, session);
1637
+ const modesData = this.buildModesData(config);
1638
+ const availableModels = this.buildAvailableModels(config);
1639
+ const configOptions = this.buildConfigOptions(config);
1640
+ return {
1641
+ modes: modesData,
1642
+ models: availableModels,
1643
+ configOptions,
1644
+ };
1645
+ }
1646
+ async unstable_resumeSession(params) {
1647
+ const exists = await runWithAcpRuntimeOutputDir(this.settings, params.cwd, async () => {
1648
+ const sessionService = new SessionService(params.cwd);
1649
+ return sessionService.sessionExists(params.sessionId);
1650
+ });
1651
+ if (!exists) {
1652
+ throw RequestError.resourceNotFound(`session:${params.sessionId}`);
1653
+ }
1654
+ const config = await this.newSessionConfig(params.cwd, params.mcpServers ?? [], params.sessionId, true);
1655
+ await this.ensureAuthenticated(config);
1656
+ this.setupFileSystem(config);
1657
+ const session = await this.createAndStoreSession(config);
1658
+ await this.#restoreWorktreeOnResume(config, session);
1659
+ const modesData = this.buildModesData(config);
1660
+ const availableModels = this.buildAvailableModels(config);
1661
+ const configOptions = this.buildConfigOptions(config);
1662
+ return {
1663
+ modes: modesData,
1664
+ models: availableModels,
1665
+ configOptions,
1666
+ };
1667
+ }
1668
+ /**
1669
+ * Shared worktree restore for both ACP entry points (`loadSession` and
1670
+ * `unstable_resumeSession`). Reads the WorktreeSession sidecar, cleans
1671
+ * up stale ones, and queues the context reminder on the Session so the
1672
+ * next `#executePrompt` prepends it to the user's first prompt.
1673
+ *
1674
+ * Best-effort: failures don't block session load — worktree context
1675
+ * is a hint to the model, not a load-time correctness requirement.
1676
+ * (PR #4174 review #3259975... — parity between the two ACP entry
1677
+ * points.)
1678
+ */
1679
+ async #restoreWorktreeOnResume(config, session) {
1680
+ try {
1681
+ const sessionPath = config
1682
+ .getSessionService()
1683
+ .getWorktreeSessionPath(config.getSessionId());
1684
+ const restored = await restoreWorktreeContext(sessionPath);
1685
+ if (restored.contextMessage) {
1686
+ session.pendingWorktreeNotice = restored.contextMessage;
1687
+ }
1688
+ }
1689
+ catch (error) {
1690
+ debugLogger.warn(`ACP worktree restore failed: ${error}`);
1691
+ }
1692
+ }
1693
+ async unstable_listSessions(params) {
1694
+ const cwd = params.cwd || process.cwd();
1695
+ const numericCursor = params.cursor ? Number(params.cursor) : undefined;
1696
+ // The ACP spec's ListSessionsRequest doesn't include a page-size field,
1697
+ // so the SDK's zod validator strips any top-level `size` the client sends
1698
+ // before it reaches this handler. Carry page size through `_meta.size`
1699
+ // (same pattern filesystem.ts uses for `_meta.bom` / `_meta.encoding`).
1700
+ const metaSize = params._meta?.['size'];
1701
+ const size = typeof metaSize === 'number' && metaSize > 0
1702
+ ? Math.floor(metaSize)
1703
+ : undefined;
1704
+ const result = await runWithAcpRuntimeOutputDir(this.settings, cwd, () => {
1705
+ const sessionService = new SessionService(cwd);
1706
+ return sessionService.listSessions({
1707
+ cursor: Number.isNaN(numericCursor) ? undefined : numericCursor,
1708
+ size,
1709
+ });
1710
+ });
1711
+ const sessions = result.items.map((item) => ({
1712
+ _meta: {
1713
+ createdAt: item.startTime,
1714
+ startTime: item.startTime,
1715
+ preview: item.prompt,
1716
+ ...(item.gitBranch ? { gitBranch: item.gitBranch } : {}),
1717
+ ...(item.titleSource ? { titleSource: item.titleSource } : {}),
1718
+ },
1719
+ cwd: item.cwd,
1720
+ sessionId: item.sessionId,
1721
+ title: item.customTitle || item.prompt || '(session)',
1722
+ updatedAt: new Date(item.mtime).toISOString(),
1723
+ }));
1724
+ return {
1725
+ sessions,
1726
+ nextCursor: result.nextCursor != null ? String(result.nextCursor) : undefined,
1727
+ };
1728
+ }
1729
+ async setSessionMode(params) {
1730
+ const session = this.sessions.get(params.sessionId);
1731
+ if (!session) {
1732
+ throw RequestError.invalidParams(undefined, `Session not found for id: ${params.sessionId}`);
1733
+ }
1734
+ return session.setMode(params);
1735
+ }
1736
+ async unstable_setSessionModel(params) {
1737
+ const session = this.sessions.get(params.sessionId);
1738
+ if (!session) {
1739
+ throw RequestError.invalidParams(undefined, `Session not found for id: ${params.sessionId}`);
1740
+ }
1741
+ return await session.setModel(params);
1742
+ }
1743
+ async setSessionConfigOption(params) {
1744
+ const { sessionId, configId, value } = params;
1745
+ const session = this.sessions.get(sessionId);
1746
+ if (!session) {
1747
+ throw RequestError.invalidParams(undefined, `Session not found for id: ${sessionId}`);
1748
+ }
1749
+ switch (configId) {
1750
+ case 'mode': {
1751
+ await this.setSessionMode({
1752
+ sessionId,
1753
+ modeId: value,
1754
+ });
1755
+ break;
1756
+ }
1757
+ case 'model': {
1758
+ await session.setModel({
1759
+ sessionId,
1760
+ modelId: value,
1761
+ }, { persistDefault: false });
1762
+ break;
1763
+ }
1764
+ default:
1765
+ throw RequestError.invalidParams(undefined, `Unsupported configId: ${configId}`);
1766
+ }
1767
+ return {
1768
+ configOptions: this.buildConfigOptions(session.getConfig()),
1769
+ };
1770
+ }
1771
+ async prompt(params) {
1772
+ const session = this.sessions.get(params.sessionId);
1773
+ if (!session) {
1774
+ throw new Error(`Session not found: ${params.sessionId}`);
1775
+ }
1776
+ return session.prompt(params);
1777
+ }
1778
+ async cancel(params) {
1779
+ const session = this.sessions.get(params.sessionId);
1780
+ if (!session) {
1781
+ throw new Error(`Session not found: ${params.sessionId}`);
1782
+ }
1783
+ await session.cancelPendingPrompt();
1784
+ }
1785
+ loadPermissionSettings(cwd) {
1786
+ this.settings = loadSettings(cwd);
1787
+ return this.settings;
1788
+ }
1789
+ buildPermissionSettings(settings) {
1790
+ return {
1791
+ user: {
1792
+ path: settings.user.path,
1793
+ rules: readPermissionRuleSet(settings.user.settings),
1794
+ },
1795
+ workspace: {
1796
+ path: settings.workspace.path,
1797
+ rules: readPermissionRuleSet(settings.workspace.settings),
1798
+ },
1799
+ merged: readPermissionRuleSet(settings.merged),
1800
+ isTrusted: settings.isTrusted,
1801
+ };
1802
+ }
1803
+ async buildCoreSettings(settings, cwd) {
1804
+ const userSettings = settings.user.settings;
1805
+ const workspaceSettings = settings.workspace.settings;
1806
+ const mergedSettings = settings.merged;
1807
+ let extensions = [];
1808
+ try {
1809
+ const extensionManager = new ExtensionManager({
1810
+ workspaceDir: cwd,
1811
+ isWorkspaceTrusted: settings.isTrusted,
1812
+ });
1813
+ await extensionManager.refreshCache();
1814
+ extensions = extensionManager.getLoadedExtensions();
1815
+ }
1816
+ catch (error) {
1817
+ debugLogger.warn('Extension loading failed, continuing without extensions:', error);
1818
+ }
1819
+ const extensionEntries = await Promise.all(extensions.map(async (extension) => {
1820
+ const userEnv = await getScopedEnvContents(extension.config, extension.id, ExtensionSettingScope.USER);
1821
+ const workspaceEnv = await getScopedEnvContents(extension.config, extension.id, ExtensionSettingScope.WORKSPACE);
1822
+ const settingDefs = extension.settings ?? [];
1823
+ return {
1824
+ id: extension.id,
1825
+ name: extension.name,
1826
+ version: extension.version,
1827
+ isActive: extension.isActive,
1828
+ path: extension.path,
1829
+ commands: extension.commands ?? [],
1830
+ skills: (extension.skills ?? []).map((skill) => skill.name),
1831
+ mcpServers: Object.keys(extension.config.mcpServers ?? {}),
1832
+ settings: settingDefs.map((setting) => {
1833
+ const userValue = userEnv[setting.envVar];
1834
+ const workspaceValue = workspaceEnv[setting.envVar];
1835
+ const hasWorkspaceValue = workspaceValue !== undefined;
1836
+ const hasUserValue = userValue !== undefined;
1837
+ const effectiveValue = hasWorkspaceValue
1838
+ ? workspaceValue
1839
+ : userValue;
1840
+ const effectiveScope = hasWorkspaceValue
1841
+ ? 'workspace'
1842
+ : hasUserValue
1843
+ ? 'user'
1844
+ : undefined;
1845
+ return {
1846
+ name: setting.name,
1847
+ description: setting.description,
1848
+ envVar: setting.envVar,
1849
+ sensitive: !!setting.sensitive,
1850
+ userValue: setting.sensitive ? undefined : userValue,
1851
+ workspaceValue: setting.sensitive ? undefined : workspaceValue,
1852
+ effectiveValue: setting.sensitive ? undefined : effectiveValue,
1853
+ effectiveScope,
1854
+ hasUserValue,
1855
+ hasWorkspaceValue,
1856
+ };
1857
+ }),
1858
+ };
1859
+ }));
1860
+ const activeExtensions = extensions.filter((extension) => extension.isActive);
1861
+ const extensionMcpServers = activeExtensions.flatMap((extension) => readMcpServers({ mcpServers: extension.config.mcpServers ?? {} }, 'extension').map((entry) => ({
1862
+ ...entry,
1863
+ server: { ...entry.server, extensionName: extension.name },
1864
+ })));
1865
+ const extensionHooks = activeExtensions.flatMap((extension) => readHooks({ hooks: extension.hooks ?? {} }, 'extension', extension.name));
1866
+ // Build the merged MCP/hook lists from the user and workspace settings
1867
+ // separately so each entry keeps its real scope label. Reading
1868
+ // mergedSettings with a single 'workspace' label mislabeled user-scope
1869
+ // servers/hooks. MCP servers are keyed by name, so dedupe with workspace
1870
+ // overriding user (matching the merged/effective semantics); hooks stack
1871
+ // across scopes, so they are concatenated.
1872
+ const mergedMcpByName = new Map();
1873
+ for (const entry of readMcpServers(userSettings, 'user')) {
1874
+ mergedMcpByName.set(entry.name, entry);
1875
+ }
1876
+ if (settings.isTrusted) {
1877
+ for (const entry of readMcpServers(workspaceSettings, 'workspace')) {
1878
+ mergedMcpByName.set(entry.name, entry);
1879
+ }
1880
+ }
1881
+ const mergedHooks = [
1882
+ ...readHooks(userSettings, 'user'),
1883
+ ...(settings.isTrusted ? readHooks(workspaceSettings, 'workspace') : []),
1884
+ ];
1885
+ return {
1886
+ user: {
1887
+ path: settings.user.path,
1888
+ values: readCoreSettingValues(userSettings),
1889
+ mcpServers: readMcpServers(userSettings, 'user'),
1890
+ hooks: readHooks(userSettings, 'user'),
1891
+ },
1892
+ workspace: {
1893
+ path: settings.workspace.path,
1894
+ values: readCoreSettingValues(workspaceSettings),
1895
+ mcpServers: readMcpServers(workspaceSettings, 'workspace'),
1896
+ hooks: readHooks(workspaceSettings, 'workspace'),
1897
+ },
1898
+ merged: {
1899
+ values: readCoreSettingValues(mergedSettings),
1900
+ mcpServers: [...mergedMcpByName.values(), ...extensionMcpServers],
1901
+ hooks: [...mergedHooks, ...extensionHooks],
1902
+ },
1903
+ extensions: extensionEntries,
1904
+ isTrusted: settings.isTrusted,
1905
+ };
1906
+ }
1907
+ syncLivePermissionManagers(before, after) {
1908
+ for (const ruleType of PERMISSION_RULE_TYPES) {
1909
+ const oldRules = new Set(before[ruleType]);
1910
+ const newRules = new Set(after[ruleType]);
1911
+ const removed = before[ruleType].filter((rule) => !newRules.has(rule));
1912
+ const added = after[ruleType].filter((rule) => !oldRules.has(rule));
1913
+ if (removed.length === 0 && added.length === 0)
1914
+ continue;
1915
+ for (const session of this.sessions.values()) {
1916
+ const pm = session.getConfig().getPermissionManager?.();
1917
+ if (!pm)
1918
+ continue;
1919
+ // Isolate per-session failures: a stale/broken permission manager for
1920
+ // one session must not abort syncing the rest (settings are already
1921
+ // persisted, so the in-memory sync is best-effort).
1922
+ try {
1923
+ for (const rule of removed) {
1924
+ pm.removePersistentRule(rule, ruleType);
1925
+ }
1926
+ for (const rule of added) {
1927
+ pm.addPersistentRule(rule, ruleType);
1928
+ }
1929
+ }
1930
+ catch (error) {
1931
+ debugLogger.warn(`Failed to sync permission rules to a live session: ${error instanceof Error ? error.message : String(error)}`);
1932
+ }
1933
+ }
1934
+ }
1935
+ }
1936
+ workspaceCwd(config) {
1937
+ return config.getTargetDir();
1938
+ }
1939
+ safeWorkspaceCwd(config) {
1940
+ try {
1941
+ return this.workspaceCwd(config);
1942
+ }
1943
+ catch {
1944
+ return '';
1945
+ }
1946
+ }
1947
+ mcpTransport(server) {
1948
+ if (server &&
1949
+ typeof server === 'object' &&
1950
+ 'type' in server &&
1951
+ server.type === 'sdk') {
1952
+ return 'sdk';
1953
+ }
1954
+ if (server &&
1955
+ typeof server === 'object' &&
1956
+ typeof server.httpUrl === 'string') {
1957
+ return 'http';
1958
+ }
1959
+ if (server &&
1960
+ typeof server === 'object' &&
1961
+ typeof server.url === 'string') {
1962
+ return 'sse';
1963
+ }
1964
+ if (server &&
1965
+ typeof server === 'object' &&
1966
+ typeof server.tcp === 'string') {
1967
+ return 'websocket';
1968
+ }
1969
+ if (server &&
1970
+ typeof server === 'object' &&
1971
+ typeof server.command === 'string') {
1972
+ return 'stdio';
1973
+ }
1974
+ return 'unknown';
1975
+ }
1976
+ mcpStatus(status) {
1977
+ switch (status) {
1978
+ case MCPServerStatus.CONNECTED:
1979
+ return 'connected';
1980
+ case MCPServerStatus.CONNECTING:
1981
+ return 'connecting';
1982
+ case MCPServerStatus.DISCONNECTED:
1983
+ default:
1984
+ return 'disconnected';
1985
+ }
1986
+ }
1987
+ mcpCellStatus(status, disabled) {
1988
+ if (disabled)
1989
+ return 'disabled';
1990
+ switch (status) {
1991
+ case MCPServerStatus.CONNECTED:
1992
+ return 'ok';
1993
+ case MCPServerStatus.CONNECTING:
1994
+ return 'warning';
1995
+ case MCPServerStatus.DISCONNECTED:
1996
+ default:
1997
+ return 'error';
1998
+ }
1999
+ }
2000
+ discoveryState() {
2001
+ const state = getMCPDiscoveryState();
2002
+ switch (state) {
2003
+ case MCPDiscoveryState.IN_PROGRESS:
2004
+ return 'in_progress';
2005
+ case MCPDiscoveryState.COMPLETED:
2006
+ return 'completed';
2007
+ case MCPDiscoveryState.NOT_STARTED:
2008
+ default:
2009
+ return 'not_started';
2010
+ }
2011
+ }
2012
+ buildWorkspaceMcpStatus(config) {
2013
+ try {
2014
+ const workspaceCwd = this.workspaceCwd(config);
2015
+ const servers = config.getMcpServers() ?? {};
2016
+ // PR 14: pull live accounting + budget config from the child's
2017
+ // McpClientManager so the daemon's read-only route reflects the
2018
+ // single source of truth (not a daemon-side polled cache).
2019
+ // `getToolRegistry()` and `getMcpClientManager()` are best-effort
2020
+ // — older test stubs or partially-initialized configs may not
2021
+ // expose them; in that case we fall back to "no budget surface".
2022
+ let clientCount;
2023
+ let clientBudget;
2024
+ let budgetMode;
2025
+ let refusedSet = new Set();
2026
+ try {
2027
+ const manager = config.getToolRegistry()?.getMcpClientManager();
2028
+ if (manager) {
2029
+ const accounting = manager.getMcpClientAccounting();
2030
+ clientCount = accounting.total;
2031
+ clientBudget = manager.getMcpClientBudget();
2032
+ budgetMode = manager.getMcpBudgetMode();
2033
+ refusedSet = new Set(accounting.refusedServerNames);
2034
+ }
2035
+ }
2036
+ catch (err) {
2037
+ // Accounting failure must not crash the snapshot — the per-
2038
+ // server data is still useful even without budget overlay.
2039
+ // PR 14 fix (review #4247 wenshao S7a): bumped from
2040
+ // `debugLogger.debug` to stderr `process.stderr.write` so a
2041
+ // production daemon emits a visible warning when accounting
2042
+ // breaks. `debugLogger.debug` is gated on the operator
2043
+ // having set debug=true, which makes silent slot-leak / type-
2044
+ // mismatch failures invisible in real deployments.
2045
+ process.stderr.write(`qwen serve: getMcpClientAccounting failed: ` +
2046
+ `${err instanceof Error ? err.message : String(err)}\n`);
2047
+ }
2048
+ return {
2049
+ v: STATUS_SCHEMA_VERSION,
2050
+ workspaceCwd,
2051
+ initialized: true,
2052
+ discoveryState: this.discoveryState(),
2053
+ servers: Object.entries(servers).map(([name, server]) => {
2054
+ const disabled = config.isMcpServerDisabled(name);
2055
+ const rawStatus = getMCPServerStatus(name);
2056
+ const refusedByBudget = refusedSet.has(name);
2057
+ // PR 14 fix (review #4247): config-disable takes precedence
2058
+ // over budget-refusal. `lastRefusedServerNames` is a
2059
+ // per-discovery-pass snapshot; if an operator runs
2060
+ // `/mcp disable <name>` against a server that was refused
2061
+ // last pass, the entry stays in the refused list until the
2062
+ // next discovery pass clears it (`McpClientManager.removeServer`
2063
+ // now drops the entry too — see sibling fix). Either way,
2064
+ // a `disabled` cell should NEVER show `budget_exhausted` —
2065
+ // the operator's deliberate disable wins.
2066
+ const effectivelyRefused = refusedByBudget && !disabled;
2067
+ const out = {
2068
+ kind: 'mcp_server',
2069
+ // Refused-by-budget shadows the raw status: the rawStatus
2070
+ // is `DISCONNECTED` (we never tried to connect), but the
2071
+ // operator-facing severity is `error` with an explanatory
2072
+ // errorKind rather than the generic disconnected `error`.
2073
+ status: effectivelyRefused
2074
+ ? 'error'
2075
+ : this.mcpCellStatus(rawStatus, disabled),
2076
+ name,
2077
+ mcpStatus: this.mcpStatus(rawStatus),
2078
+ transport: this.mcpTransport(server),
2079
+ disabled,
2080
+ };
2081
+ if (effectivelyRefused) {
2082
+ out.errorKind = 'budget_exhausted';
2083
+ out.disabledReason = 'budget';
2084
+ out.hint =
2085
+ 'Raise --mcp-client-budget or remove servers from mcpServers config.';
2086
+ }
2087
+ else if (disabled) {
2088
+ out.disabledReason = 'config';
2089
+ }
2090
+ const description = server && typeof server === 'object'
2091
+ ? server.description
2092
+ : undefined;
2093
+ const extensionName = server && typeof server === 'object'
2094
+ ? server.extensionName
2095
+ : undefined;
2096
+ if (typeof description === 'string') {
2097
+ out.description = description;
2098
+ }
2099
+ if (typeof extensionName === 'string') {
2100
+ out.extensionName = extensionName;
2101
+ }
2102
+ return out;
2103
+ }),
2104
+ ...(clientCount !== undefined ? { clientCount } : {}),
2105
+ ...(clientBudget !== undefined ? { clientBudget } : {}),
2106
+ ...(budgetMode !== undefined ? { budgetMode } : {}),
2107
+ ...(budgetMode !== undefined
2108
+ ? {
2109
+ // PR 14 fix (review #4247 wenshao R2-#6): filter out
2110
+ // servers that are now config-disabled so the
2111
+ // workspace cell matches the per-server cell
2112
+ // precedence (`effectivelyRefused = refusedByBudget
2113
+ // && !disabled` above). Pre-fix a server disabled
2114
+ // after being refused would render `disabled` on its
2115
+ // per-server row but `error: budget_exhausted` on the
2116
+ // workspace row — confusing for dashboards. Use
2117
+ // `Array.from(refusedSet).filter(...)` to apply the
2118
+ // same disabled gate the per-server loop applies.
2119
+ budgets: this.buildBudgetCells(clientCount ?? 0, clientBudget, budgetMode, Array.from(refusedSet).filter((n) => !config.isMcpServerDisabled(n)).length),
2120
+ }
2121
+ : {}),
2122
+ };
2123
+ }
2124
+ catch (error) {
2125
+ return {
2126
+ v: STATUS_SCHEMA_VERSION,
2127
+ workspaceCwd: this.safeWorkspaceCwd(config),
2128
+ initialized: true,
2129
+ servers: [],
2130
+ errors: [this.errorCell('mcp', error)],
2131
+ };
2132
+ }
2133
+ }
2134
+ /**
2135
+ * Build the MCP budget status cells exposed on `GET /workspace/mcp`
2136
+ * (PR 14). v1 emits one cell with `scope: 'session'` — each ACP
2137
+ * session has its own `McpClientManager`, so the budget enforces
2138
+ * per-session (snapshot reflects the bootstrap session's view).
2139
+ * Wave 5 PR 23 (shared MCP pool) will add `scope: 'workspace'`
2140
+ * for true per-workspace aggregation. Consumers MUST tolerate
2141
+ * additional entries with unrecognized scope values (drop, don't
2142
+ * fail).
2143
+ *
2144
+ * Cell `status` semantics:
2145
+ * - `error` — refusals happened this pass (only possible in enforce mode)
2146
+ * - `warning` — live count crossed 75% of budget (warn or enforce mode)
2147
+ * - `ok` — under threshold (or `off` mode)
2148
+ *
2149
+ * **`liveCount` vs `reservedSlots.size` (PR 14 review #4247 R9 #5)**:
2150
+ * `liveCount` here is `accounting.total` — only `MCPServerStatus.CONNECTED`
2151
+ * clients. Enforcement (`tryReserveSlot`) on the other hand uses
2152
+ * `reservedSlots.size` — all reserved names, including in-flight
2153
+ * connects and never-connected stale entries. The two diverge when
2154
+ * servers hold a slot during the connect handshake or after a
2155
+ * connect failure that didn't release (e.g. `'already_held'`
2156
+ * reconnect timeouts). The snapshot intentionally uses the live
2157
+ * count for **operator observability** — "how many MCP clients
2158
+ * are actually serving requests right now" — while enforcement
2159
+ * uses the reservation count to prevent capacity races across
2160
+ * `Promise.all` microtask boundaries. PR 14b's typed events
2161
+ * should consider exposing both for real-time pressure signals.
2162
+ */
2163
+ buildBudgetCells(liveCount, budget, mode, refusedCount) {
2164
+ // PR 14 fix (review #4247): when no `--mcp-client-budget` is
2165
+ // configured the manager resolves to `mode: 'off'`. The protocol
2166
+ // docs and SDK type comments promise `budgets: []` for that case;
2167
+ // a synthetic `mcp_budget` cell carrying nothing actionable was
2168
+ // (a) protocol-noncompliant, (b) clutter — clients iterating
2169
+ // `budgets[]` to render rows would draw an "ok" budget row for
2170
+ // uncapped workspaces. Always return empty so the top-level
2171
+ // `budgetMode: 'off'` field is the sole signal that guardrails
2172
+ // are inactive.
2173
+ if (mode === 'off')
2174
+ return [];
2175
+ let status = 'ok';
2176
+ let errorKind;
2177
+ let hint;
2178
+ if (refusedCount > 0) {
2179
+ status = 'error';
2180
+ errorKind = 'budget_exhausted';
2181
+ hint =
2182
+ 'Raise --mcp-client-budget or remove servers from mcpServers config.';
2183
+ }
2184
+ else if (budget !== undefined &&
2185
+ budget > 0 &&
2186
+ liveCount >= MCP_BUDGET_WARN_FRACTION * budget) {
2187
+ status = 'warning';
2188
+ hint = `Live MCP clients are above ${Math.round(MCP_BUDGET_WARN_FRACTION * 100)}% of the configured budget.`;
2189
+ }
2190
+ const cell = {
2191
+ kind: 'mcp_budget',
2192
+ // PR 14 v1: per-session, not per-workspace. Each ACP session has
2193
+ // its own `Config`/`McpClientManager` (via `newSessionConfig`)
2194
+ // and reads `QWEN_SERVE_MCP_CLIENT_BUDGET` independently.
2195
+ // Snapshot shows the bootstrap session's view. Wave 5 PR 23
2196
+ // shared MCP pool will graduate this to `'workspace'`.
2197
+ scope: 'session',
2198
+ status,
2199
+ liveCount,
2200
+ mode,
2201
+ refusedCount,
2202
+ };
2203
+ if (budget !== undefined)
2204
+ cell.budget = budget;
2205
+ if (errorKind)
2206
+ cell.errorKind = errorKind;
2207
+ if (hint)
2208
+ cell.hint = hint;
2209
+ return [cell];
2210
+ }
2211
+ errorCell(kind, error, errorKind) {
2212
+ const inferred = errorKind ?? mapDomainErrorToErrorKind(error);
2213
+ return {
2214
+ kind,
2215
+ status: 'error',
2216
+ error: error instanceof Error ? error.message : String(error),
2217
+ ...(inferred ? { errorKind: inferred } : {}),
2218
+ };
2219
+ }
2220
+ async buildWorkspaceSkillsStatus(config) {
2221
+ const skillManager = config.getSkillManager();
2222
+ if (!skillManager) {
2223
+ return {
2224
+ v: STATUS_SCHEMA_VERSION,
2225
+ workspaceCwd: this.workspaceCwd(config),
2226
+ initialized: true,
2227
+ skills: [],
2228
+ };
2229
+ }
2230
+ try {
2231
+ const skills = await skillManager.listSkills();
2232
+ return {
2233
+ v: STATUS_SCHEMA_VERSION,
2234
+ workspaceCwd: this.workspaceCwd(config),
2235
+ initialized: true,
2236
+ skills: skills.map((skill) => {
2237
+ const modelInvocable = skill.disableModelInvocation !== true;
2238
+ return {
2239
+ kind: 'skill',
2240
+ status: modelInvocable ? 'ok' : 'disabled',
2241
+ name: skill.name,
2242
+ description: skill.description,
2243
+ level: skill.level,
2244
+ modelInvocable,
2245
+ ...(skill.argumentHint ? { argumentHint: skill.argumentHint } : {}),
2246
+ ...(skill.model ? { model: skill.model } : {}),
2247
+ ...(skill.extensionName
2248
+ ? { extensionName: skill.extensionName }
2249
+ : {}),
2250
+ };
2251
+ }),
2252
+ };
2253
+ }
2254
+ catch (error) {
2255
+ return {
2256
+ v: STATUS_SCHEMA_VERSION,
2257
+ workspaceCwd: this.workspaceCwd(config),
2258
+ initialized: true,
2259
+ skills: [],
2260
+ errors: [this.errorCell('skills', error)],
2261
+ };
2262
+ }
2263
+ }
2264
+ buildWorkspaceProvidersStatus(config) {
2265
+ try {
2266
+ const workspaceCwd = this.workspaceCwd(config);
2267
+ const currentAuthType = config.getAuthType?.();
2268
+ const activeRuntimeSnapshot = config.getActiveRuntimeModelSnapshot?.();
2269
+ const currentModelId = activeRuntimeSnapshot
2270
+ ? activeRuntimeSnapshot.id
2271
+ : (config.getModel() || '').trim();
2272
+ const hasCurrentModel = currentModelId.length > 0;
2273
+ const currentAuth = activeRuntimeSnapshot?.authType ?? currentAuthType;
2274
+ const currentAcpModelId = hasCurrentModel && currentAuth
2275
+ ? formatAcpModelId(currentModelId, currentAuth)
2276
+ : currentModelId || undefined;
2277
+ const providers = new Map();
2278
+ for (const model of config.getAllConfiguredModels()) {
2279
+ const authType = String(model.authType);
2280
+ let provider = providers.get(authType);
2281
+ if (!provider) {
2282
+ provider = {
2283
+ kind: 'model_provider',
2284
+ status: 'ok',
2285
+ authType,
2286
+ current: false,
2287
+ models: [],
2288
+ };
2289
+ providers.set(authType, provider);
2290
+ }
2291
+ const effectiveModelId = model.isRuntimeModel && model.runtimeSnapshotId
2292
+ ? model.runtimeSnapshotId
2293
+ : model.id;
2294
+ const modelId = formatAcpModelId(effectiveModelId, model.authType);
2295
+ const isCurrent = currentAuth === model.authType &&
2296
+ hasCurrentModel &&
2297
+ (currentModelId === effectiveModelId ||
2298
+ currentModelId === model.id ||
2299
+ currentAcpModelId === modelId);
2300
+ const providerModel = {
2301
+ modelId,
2302
+ baseModelId: parseAcpBaseModelId(effectiveModelId),
2303
+ name: model.label,
2304
+ ...(model.description !== undefined
2305
+ ? { description: model.description }
2306
+ : {}),
2307
+ contextLimit: model.contextWindowSize ?? tokenLimit(effectiveModelId),
2308
+ isCurrent,
2309
+ isRuntime: model.isRuntimeModel === true,
2310
+ };
2311
+ provider.models.push(providerModel);
2312
+ if (isCurrent)
2313
+ provider.current = true;
2314
+ }
2315
+ return {
2316
+ v: STATUS_SCHEMA_VERSION,
2317
+ workspaceCwd,
2318
+ initialized: true,
2319
+ ...(currentAuth || currentAcpModelId
2320
+ ? {
2321
+ current: {
2322
+ ...(currentAuth ? { authType: String(currentAuth) } : {}),
2323
+ ...(currentAcpModelId ? { modelId: currentAcpModelId } : {}),
2324
+ },
2325
+ }
2326
+ : {}),
2327
+ providers: [...providers.values()],
2328
+ };
2329
+ }
2330
+ catch (error) {
2331
+ return {
2332
+ v: STATUS_SCHEMA_VERSION,
2333
+ workspaceCwd: this.safeWorkspaceCwd(config),
2334
+ initialized: true,
2335
+ providers: [],
2336
+ errors: [this.errorCell('providers', error)],
2337
+ };
2338
+ }
2339
+ }
2340
+ async buildAcpPreflightCells(config) {
2341
+ // Drive emission order from the shared `ACP_PREFLIGHT_KINDS` constant
2342
+ // (also consumed by `createIdleAcpPreflightCells` in `serve/status.ts`)
2343
+ // so the idle-placeholder list and the live builder cannot drift —
2344
+ // adding a new ACP kind in the constant flags any builder dispatch
2345
+ // gap as a TS exhaustiveness error in the switch below, instead of
2346
+ // silently dropping the cell from one path or the other.
2347
+ const builders = {
2348
+ auth: () => this.buildAuthPreflightCell(config),
2349
+ mcp_discovery: () => this.buildMcpDiscoveryPreflightCell(config),
2350
+ skills: () => this.buildSkillsPreflightCell(config),
2351
+ providers: () => this.buildProvidersPreflightCell(config),
2352
+ tool_registry: () => this.buildToolRegistryPreflightCell(config),
2353
+ egress: () => ({
2354
+ kind: 'egress',
2355
+ status: 'not_started',
2356
+ locality: 'acp',
2357
+ hint: 'egress probing lands in PR 14 (#4175)',
2358
+ }),
2359
+ };
2360
+ const cells = [];
2361
+ for (const kind of ACP_PREFLIGHT_KINDS) {
2362
+ cells.push(await builders[kind]());
2363
+ }
2364
+ return { cells };
2365
+ }
2366
+ acpCell(kind, spec) {
2367
+ return { kind, locality: 'acp', ...spec };
2368
+ }
2369
+ /**
2370
+ * Pure auth preflight check. Looks up the well-known env var keys for the
2371
+ * configured auth method (via `AUTH_ENV_MAPPINGS`) and reports whether at
2372
+ * least one is present.
2373
+ *
2374
+ * Deliberately does NOT call `validateAuthMethod` from `cli/config/auth.ts`:
2375
+ * that helper has side effects (reloads `.env` from disk via
2376
+ * `loadEnvironment`, writes `process.env['GOOGLE_GENAI_USE_VERTEXAI']` for
2377
+ * Vertex auth) which would let a read-only `GET /workspace/preflight`
2378
+ * mutate daemon state and produce torn snapshots when racing
2379
+ * `GET /workspace/env`. Full validation still happens at session start.
2380
+ */
2381
+ buildAuthPreflightCell(config) {
2382
+ try {
2383
+ const authType = config.getAuthType?.();
2384
+ if (!authType) {
2385
+ return this.acpCell('auth', {
2386
+ status: 'warning',
2387
+ errorKind: 'auth_env_error',
2388
+ error: 'No auth method configured.',
2389
+ hint: 'Run `qwen` and complete the auth flow, or set a provider env var.',
2390
+ detail: { source: 'none', hasToken: false },
2391
+ });
2392
+ }
2393
+ const apiKeyVars = AUTH_PREFLIGHT_ENV_KEYS[String(authType)] ?? [];
2394
+ const presentVar = apiKeyVars.find((name) => Boolean(process.env[name]));
2395
+ const hasToken = Boolean(presentVar);
2396
+ // No env-var registration → either OAuth-style auth (qwen-oauth) or
2397
+ // a custom provider whose key is sourced from settings rather than
2398
+ // env. Surface as `unknown` (the SDK consumer can defer to the
2399
+ // `/session` boot for definitive validation) rather than a false
2400
+ // negative.
2401
+ if (apiKeyVars.length === 0) {
2402
+ return this.acpCell('auth', {
2403
+ status: 'unknown',
2404
+ hint: 'Auth credentials for this provider are not env-keyed; full validation runs at session start.',
2405
+ detail: {
2406
+ source: String(authType),
2407
+ hasToken: 'unknown',
2408
+ envVarCandidates: [],
2409
+ },
2410
+ });
2411
+ }
2412
+ return this.acpCell('auth', {
2413
+ status: hasToken ? 'ok' : 'warning',
2414
+ ...(hasToken
2415
+ ? {}
2416
+ : {
2417
+ errorKind: 'auth_env_error',
2418
+ error: `None of the env vars [${apiKeyVars.join(', ')}] is set for authType '${String(authType)}'.`,
2419
+ hint: `Set one of: ${apiKeyVars.join(' / ')}.`,
2420
+ }),
2421
+ detail: {
2422
+ source: String(authType),
2423
+ hasToken,
2424
+ envVarCandidates: apiKeyVars,
2425
+ ...(presentVar ? { presentVar } : {}),
2426
+ },
2427
+ });
2428
+ }
2429
+ catch (err) {
2430
+ const errorKind = mapDomainErrorToErrorKind(err) ?? 'auth_env_error';
2431
+ return this.acpCell('auth', {
2432
+ status: 'error',
2433
+ error: err instanceof Error ? err.message : String(err),
2434
+ errorKind,
2435
+ });
2436
+ }
2437
+ }
2438
+ buildMcpDiscoveryPreflightCell(config) {
2439
+ try {
2440
+ const discovery = this.discoveryState();
2441
+ const servers = config.getMcpServers() ?? {};
2442
+ const total = Object.keys(servers).length;
2443
+ // Today `MCPServerStatus` is `{CONNECTED, CONNECTING, DISCONNECTED}`,
2444
+ // but a future state (e.g. `ERROR`, `NEEDS_AUTH`) could be added.
2445
+ // Bucketing it as `disconnected` would silently lose the distinction
2446
+ // between "credential failed" and "idle, will spawn on demand".
2447
+ // Track an explicit `unknown` count so unrecognized states surface in
2448
+ // the cell `detail` rather than disappearing.
2449
+ const counts = {
2450
+ connected: 0,
2451
+ connecting: 0,
2452
+ disconnected: 0,
2453
+ unknown: 0,
2454
+ };
2455
+ for (const name of Object.keys(servers)) {
2456
+ const raw = getMCPServerStatus(name);
2457
+ switch (raw) {
2458
+ case MCPServerStatus.CONNECTED:
2459
+ counts.connected += 1;
2460
+ break;
2461
+ case MCPServerStatus.CONNECTING:
2462
+ counts.connecting += 1;
2463
+ break;
2464
+ case MCPServerStatus.DISCONNECTED:
2465
+ counts.disconnected += 1;
2466
+ break;
2467
+ default:
2468
+ counts.unknown += 1;
2469
+ break;
2470
+ }
2471
+ }
2472
+ const detail = { discoveryState: discovery, total, ...counts };
2473
+ if (total === 0) {
2474
+ return this.acpCell('mcp_discovery', {
2475
+ status: 'ok',
2476
+ detail,
2477
+ hint: 'No MCP servers configured.',
2478
+ });
2479
+ }
2480
+ if (counts.unknown > 0) {
2481
+ return this.acpCell('mcp_discovery', {
2482
+ status: 'warning',
2483
+ errorKind: 'protocol_error',
2484
+ error: `${counts.unknown}/${total} MCP server(s) in an unrecognized state.`,
2485
+ detail,
2486
+ });
2487
+ }
2488
+ if (counts.disconnected > 0 && discovery === 'completed') {
2489
+ return this.acpCell('mcp_discovery', {
2490
+ status: 'error',
2491
+ errorKind: 'protocol_error',
2492
+ error: `${counts.disconnected}/${total} MCP server(s) disconnected after discovery.`,
2493
+ detail,
2494
+ });
2495
+ }
2496
+ if (counts.connecting > 0 || discovery === 'in_progress') {
2497
+ // No `errorKind`: this is a normal transitional state (just-spawned
2498
+ // MCP servers haven't completed their handshake yet), not an
2499
+ // `init_timeout`. The latter would push SDK consumers to render
2500
+ // timeout-specific remediation ("increase init timeout") when the
2501
+ // correct user action is simply "wait or retry shortly". A real
2502
+ // timeout surfaces via `BridgeTimeoutError` from the bridge's
2503
+ // `withTimeout`, mapped through `mapDomainErrorToErrorKind`.
2504
+ return this.acpCell('mcp_discovery', {
2505
+ status: 'warning',
2506
+ error: `${counts.connecting}/${total} MCP server(s) still connecting.`,
2507
+ detail,
2508
+ });
2509
+ }
2510
+ return this.acpCell('mcp_discovery', { status: 'ok', detail });
2511
+ }
2512
+ catch (err) {
2513
+ const errorKind = mapDomainErrorToErrorKind(err);
2514
+ return this.acpCell('mcp_discovery', {
2515
+ status: 'error',
2516
+ error: err instanceof Error ? err.message : String(err),
2517
+ ...(errorKind ? { errorKind } : {}),
2518
+ });
2519
+ }
2520
+ }
2521
+ async buildSkillsPreflightCell(config) {
2522
+ // Whole body wrapped in try so a Config getter that throws
2523
+ // synchronously (mock-style or future Config refactor) doesn't escape
2524
+ // out of `buildAcpPreflightCells` and 500 the whole envelope.
2525
+ try {
2526
+ const skillManager = config.getSkillManager();
2527
+ if (!skillManager) {
2528
+ return this.acpCell('skills', {
2529
+ status: 'disabled',
2530
+ // `disabled` here is the structural state — Config has no
2531
+ // SkillManager attached. That can mean the user opted out OR a
2532
+ // mis-config silently dropped the manager; preflight cannot
2533
+ // distinguish the two without settings introspection. Hint
2534
+ // surfaces the ambiguity so operators investigate when
2535
+ // unexpected.
2536
+ hint: 'No SkillManager attached to Config; verify settings if you expected skills to load.',
2537
+ detail: { configured: false },
2538
+ });
2539
+ }
2540
+ const skills = await skillManager.listSkills();
2541
+ return this.acpCell('skills', {
2542
+ status: 'ok',
2543
+ detail: { count: skills.length },
2544
+ });
2545
+ }
2546
+ catch (err) {
2547
+ const errorKind = mapDomainErrorToErrorKind(err);
2548
+ return this.acpCell('skills', {
2549
+ status: 'error',
2550
+ error: err instanceof Error ? err.message : String(err),
2551
+ ...(errorKind ? { errorKind } : {}),
2552
+ });
2553
+ }
2554
+ }
2555
+ buildProvidersPreflightCell(config) {
2556
+ try {
2557
+ const models = config.getAllConfiguredModels();
2558
+ const authType = config.getAuthType?.();
2559
+ if (models.length === 0) {
2560
+ // `authType` set but zero models = the next `POST /session` will
2561
+ // fail. Report `error`, not `warning`: the daemon literally cannot
2562
+ // serve a prompt in this state.
2563
+ return this.acpCell('providers', {
2564
+ status: authType ? 'error' : 'disabled',
2565
+ ...(authType ? { errorKind: 'auth_env_error' } : {}),
2566
+ ...(authType
2567
+ ? {
2568
+ error: `No model configured for authType ${String(authType)}.`,
2569
+ }
2570
+ : {}),
2571
+ detail: { count: 0, authType: authType ? String(authType) : null },
2572
+ });
2573
+ }
2574
+ const authTypes = new Set(models.map((m) => String(m.authType)));
2575
+ return this.acpCell('providers', {
2576
+ status: 'ok',
2577
+ detail: {
2578
+ count: models.length,
2579
+ providers: [...authTypes],
2580
+ },
2581
+ });
2582
+ }
2583
+ catch (err) {
2584
+ const errorKind = mapDomainErrorToErrorKind(err) ?? 'auth_env_error';
2585
+ return this.acpCell('providers', {
2586
+ status: 'error',
2587
+ error: err instanceof Error ? err.message : String(err),
2588
+ errorKind,
2589
+ });
2590
+ }
2591
+ }
2592
+ buildToolRegistryPreflightCell(config) {
2593
+ try {
2594
+ const registry = config.getToolRegistry();
2595
+ if (!registry) {
2596
+ return this.acpCell('tool_registry', {
2597
+ status: 'error',
2598
+ errorKind: 'protocol_error',
2599
+ error: 'Tool registry is not initialized.',
2600
+ });
2601
+ }
2602
+ const tools = registry.getAllTools();
2603
+ return this.acpCell('tool_registry', {
2604
+ status: 'ok',
2605
+ detail: { count: tools.length },
2606
+ });
2607
+ }
2608
+ catch (err) {
2609
+ const errorKind = mapDomainErrorToErrorKind(err) ?? 'protocol_error';
2610
+ return this.acpCell('tool_registry', {
2611
+ status: 'error',
2612
+ error: err instanceof Error ? err.message : String(err),
2613
+ errorKind,
2614
+ });
2615
+ }
2616
+ }
2617
+ sessionOrThrow(sessionId) {
2618
+ const session = this.sessions.get(sessionId);
2619
+ if (!session) {
2620
+ throw RequestError.invalidParams(undefined, `Session not found for id: ${sessionId}`);
2621
+ }
2622
+ return session;
2623
+ }
2624
+ buildSessionContextStatus(sessionId) {
2625
+ const session = this.sessionOrThrow(sessionId);
2626
+ const config = session.getConfig();
2627
+ return {
2628
+ v: STATUS_SCHEMA_VERSION,
2629
+ sessionId,
2630
+ workspaceCwd: this.workspaceCwd(config),
2631
+ state: {
2632
+ models: this.buildAvailableModels(config),
2633
+ modes: this.buildModesData(config),
2634
+ configOptions: this.buildConfigOptions(config),
2635
+ },
2636
+ };
2637
+ }
2638
+ async buildSessionSupportedCommandsStatus(sessionId) {
2639
+ const session = this.sessionOrThrow(sessionId);
2640
+ const { availableCommands, availableSkills } = await buildAvailableCommandsSnapshot(session.getConfig());
2641
+ return {
2642
+ v: STATUS_SCHEMA_VERSION,
2643
+ sessionId,
2644
+ availableCommands,
2645
+ availableSkills: availableSkills ?? [],
2646
+ };
2647
+ }
2648
+ async installSkillFromUrl(request) {
2649
+ const skillManager = this.config.getSkillManager();
2650
+ if (!skillManager) {
2651
+ throw RequestError.invalidParams(undefined, 'SkillManager is not available');
2652
+ }
2653
+ const download = await downloadSkill(request.sourceUrl);
2654
+ const skillsBaseDir = path.join(Storage.getGlobalQwenDir(), 'skills');
2655
+ const skillDir = resolveManagedSkillDir(skillsBaseDir, request.slug);
2656
+ const skillFile = path.join(skillDir, 'SKILL.md');
2657
+ const parsed = skillManager.parseSkillContent(download.skillContent, skillFile, 'user');
2658
+ if (parsed.name !== request.slug) {
2659
+ throw RequestError.invalidParams(undefined, `Skill name "${parsed.name}" does not match requested slug "${request.slug}"`);
2660
+ }
2661
+ // Install atomically: stage all files in a sibling temp directory, then
2662
+ // swap it in with a single rename. A mid-write failure (disk full,
2663
+ // permission error) therefore leaves the previously installed skill
2664
+ // intact instead of deleting it up front and ending up with a partial
2665
+ // install. Removing the old dir before writing also dropped orphaned
2666
+ // files from older versions; the rename preserves that property.
2667
+ const stagingDir = `${skillDir}.installing-${process.pid}-${Date.now()}`;
2668
+ try {
2669
+ await fs.rm(stagingDir, { recursive: true, force: true });
2670
+ for (const file of download.files) {
2671
+ const targetPath = resolveSkillInstallPath(stagingDir, file.relativePath);
2672
+ await fs.mkdir(path.dirname(targetPath), { recursive: true });
2673
+ await fs.writeFile(targetPath, file.content);
2674
+ }
2675
+ // stagingDir is a sibling of skillDir (same filesystem), so the rename
2676
+ // is atomic; the only gap is between the rm and rename, during which
2677
+ // the fully-staged copy still exists for recovery.
2678
+ await fs.rm(skillDir, { recursive: true, force: true });
2679
+ await fs.rename(stagingDir, skillDir);
2680
+ }
2681
+ catch (error) {
2682
+ await fs.rm(stagingDir, { recursive: true, force: true }).catch(() => { });
2683
+ throw error;
2684
+ }
2685
+ await skillManager.refreshCache();
2686
+ return {
2687
+ id: request.id,
2688
+ slug: parsed.name,
2689
+ installed: true,
2690
+ installedPath: skillFile,
2691
+ sourceUrl: request.sourceUrl,
2692
+ };
2693
+ }
2694
+ async deleteGlobalSkill(request) {
2695
+ const skillManager = this.config.getSkillManager();
2696
+ if (!skillManager) {
2697
+ throw RequestError.invalidParams(undefined, 'SkillManager is not available');
2698
+ }
2699
+ const { skillDir, skillFile, content } = await this.readManagedSkillFile(request.slug, 'global', skillManager);
2700
+ const parsed = skillManager.parseSkillContent(content, skillFile, 'user');
2701
+ if (parsed.name !== request.slug) {
2702
+ throw RequestError.invalidParams(undefined, `Skill name "${parsed.name}" does not match requested slug "${request.slug}"`);
2703
+ }
2704
+ // Guard the recursive delete: readManagedSkillFile's generic fallback can
2705
+ // resolve skillDir from listSkills() to an arbitrary path. Only ever remove
2706
+ // the directory that directly contains the SKILL.md we just validated, and
2707
+ // never a filesystem root or the global Qwen dir itself, so a malformed
2708
+ // skill entry can't trigger a destructive rm of a shared/parent directory.
2709
+ const resolvedSkillDir = path.resolve(skillDir);
2710
+ const resolvedSkillFile = path.resolve(skillFile);
2711
+ const globalDir = path.resolve(Storage.getGlobalQwenDir());
2712
+ const isDedicatedSkillDir = resolvedSkillFile === path.join(resolvedSkillDir, 'SKILL.md');
2713
+ if (!isDedicatedSkillDir ||
2714
+ resolvedSkillDir === path.parse(resolvedSkillDir).root ||
2715
+ resolvedSkillDir === globalDir) {
2716
+ throw RequestError.invalidParams(undefined, `Refusing to delete unexpected skill directory: ${skillDir}`);
2717
+ }
2718
+ await fs.rm(skillDir, { recursive: true, force: true });
2719
+ await skillManager.refreshCache();
2720
+ return {
2721
+ slug: request.slug,
2722
+ deleted: true,
2723
+ };
2724
+ }
2725
+ async readManagedSkillFile(slug, scope, skillManager, cwd) {
2726
+ if (scope === 'global') {
2727
+ const qwenSkillDir = resolveManagedSkillDir(path.join(Storage.getGlobalQwenDir(), 'skills'), slug);
2728
+ const qwenSkillFile = path.join(qwenSkillDir, 'SKILL.md');
2729
+ const qwenContent = await fs
2730
+ .readFile(qwenSkillFile, 'utf8')
2731
+ .catch(() => undefined);
2732
+ if (qwenContent !== undefined) {
2733
+ return {
2734
+ skillDir: qwenSkillDir,
2735
+ skillFile: qwenSkillFile,
2736
+ content: qwenContent,
2737
+ };
2738
+ }
2739
+ }
2740
+ if (scope === 'project' && cwd?.trim()) {
2741
+ const projectSkill = await this.findProjectSkillFileFromCwd(slug, cwd, skillManager);
2742
+ if (projectSkill)
2743
+ return projectSkill;
2744
+ }
2745
+ const level = scope === 'project' ? 'project' : 'user';
2746
+ const skill = (await skillManager.listSkills({ level })).find((candidate) => candidate.name === slug);
2747
+ const skillFile = skill?.filePath;
2748
+ if (!skillFile) {
2749
+ throw RequestError.invalidParams(undefined, `${scope === 'project' ? 'Project' : 'Global'} skill not found: ${slug}`);
2750
+ }
2751
+ const content = await fs.readFile(skillFile, 'utf8').catch(() => {
2752
+ throw RequestError.invalidParams(undefined, `${scope === 'project' ? 'Project' : 'Global'} skill not found: ${slug}`);
2753
+ });
2754
+ return {
2755
+ skillDir: path.dirname(skillFile),
2756
+ skillFile,
2757
+ content,
2758
+ };
2759
+ }
2760
+ async findProjectSkillFileFromCwd(slug, cwd, skillManager) {
2761
+ const projectRoot = path.resolve(cwd);
2762
+ for (const configDir of PROJECT_SKILL_DIRS) {
2763
+ const baseDir = path.join(projectRoot, configDir, SKILLS_DIR);
2764
+ const skills = await skillManager.loadSkillsFromDir(baseDir, 'project');
2765
+ const skill = skills.find((candidate) => candidate.name === slug);
2766
+ const skillFile = skill?.filePath;
2767
+ if (!skillFile)
2768
+ continue;
2769
+ const content = await fs.readFile(skillFile, 'utf8').catch(() => {
2770
+ throw RequestError.invalidParams(undefined, `Project skill not found: ${slug}`);
2771
+ });
2772
+ return {
2773
+ skillDir: path.dirname(skillFile),
2774
+ skillFile,
2775
+ content,
2776
+ };
2777
+ }
2778
+ return undefined;
2779
+ }
2780
+ async setGlobalSkillEnabled(request, cwd) {
2781
+ const skillManager = this.config.getSkillManager();
2782
+ if (!skillManager) {
2783
+ throw RequestError.invalidParams(undefined, 'SkillManager is not available');
2784
+ }
2785
+ const { skillFile, content } = await this.readManagedSkillFile(request.slug, request.scope, skillManager, cwd);
2786
+ const level = request.scope === 'project' ? 'project' : 'user';
2787
+ const parsed = skillManager.parseSkillContent(content, skillFile, level);
2788
+ if (parsed.name !== request.slug) {
2789
+ throw RequestError.invalidParams(undefined, `Skill name "${parsed.name}" does not match requested slug "${request.slug}"`);
2790
+ }
2791
+ const nextContent = setSkillFrontmatterEnabled(content, request.enabled);
2792
+ skillManager.parseSkillContent(nextContent, skillFile, level);
2793
+ // Defense-in-depth (consistent with deleteGlobalSkill): readManagedSkillFile's
2794
+ // generic fallback can resolve skillFile from listSkills() to an arbitrary
2795
+ // path. We only ever write back to the SKILL.md manifest we just read and
2796
+ // whose parsed name matched the slug, so refuse to write anything else.
2797
+ if (path.basename(skillFile) !== 'SKILL.md') {
2798
+ throw RequestError.invalidParams(undefined, `Refusing to write to unexpected skill file: ${skillFile}`);
2799
+ }
2800
+ await fs.writeFile(skillFile, nextContent, 'utf8');
2801
+ await skillManager.refreshCache();
2802
+ return {
2803
+ slug: request.slug,
2804
+ enabled: request.enabled,
2805
+ installedPath: skillFile,
2806
+ };
2807
+ }
2808
+ async extMethod(method, params) {
2809
+ const requestedCwd = typeof params['cwd'] === 'string' ? params['cwd'] : undefined;
2810
+ const cwd = requestedCwd || process.cwd();
2811
+ const SESSION_ID_RE = /^[0-9a-fA-F-]{32,36}$/;
2812
+ switch (method) {
2813
+ case 'qwen/providers/list': {
2814
+ return {
2815
+ providers: ALL_PROVIDERS.map((provider) => serializeProviderConfig(provider, this.settings)),
2816
+ };
2817
+ }
2818
+ case 'qwen/providers/connect': {
2819
+ const providerId = readRequiredString(params['providerId'], 'providerId');
2820
+ const providerConfig = findProviderById(providerId);
2821
+ if (!providerConfig) {
2822
+ throw RequestError.invalidParams(undefined, `Unknown provider: ${providerId}`);
2823
+ }
2824
+ const inputs = readProviderSetupInputs(providerConfig, params, resolveExistingProviderApiKey(providerConfig, this.settings));
2825
+ const persistScope = readProviderConnectScope(params['scope']);
2826
+ const plan = buildInstallPlan(providerConfig, inputs);
2827
+ await applyProviderInstallPlan(plan, {
2828
+ settings: createLoadedSettingsAdapter(this.settings, persistScope),
2829
+ reloadModelProviders: (modelProviders) => this.config.reloadModelProvidersConfig(modelProviders),
2830
+ syncAuthState: (authType, modelId) => this.config
2831
+ .getModelsConfig()
2832
+ .syncAfterAuthRefresh(authType, modelId),
2833
+ refreshAuth: (authType) => this.config.refreshAuth(authType),
2834
+ });
2835
+ return {
2836
+ success: true,
2837
+ providerId: providerConfig.id,
2838
+ providerLabel: providerConfig.label,
2839
+ authType: plan.authType,
2840
+ modelId: plan.modelSelection?.modelId,
2841
+ };
2842
+ }
2843
+ case 'qwen/skills/install': {
2844
+ return this.installSkillFromUrl(readSkillInstallRequest(params));
2845
+ }
2846
+ case 'qwen/skills/delete': {
2847
+ return this.deleteGlobalSkill(readSkillSlugRequest(params));
2848
+ }
2849
+ case 'qwen/skills/setEnabled': {
2850
+ return this.setGlobalSkillEnabled(readSkillSetEnabledRequest(params), requestedCwd);
2851
+ }
2852
+ case 'qwen/settings/getMemory': {
2853
+ const settings = loadSettings(cwd);
2854
+ this.settings = settings;
2855
+ return {
2856
+ settings: normalizeQwenMemorySettings(settings.merged.memory),
2857
+ };
2858
+ }
2859
+ case 'qwen/settings/setMemory': {
2860
+ const updates = toRecord(params['updates']);
2861
+ // Mutate a freshly loaded settings object and adopt it, mirroring the
2862
+ // other settings mutation handlers, instead of writing through the
2863
+ // possibly-stale cached `this.settings` and reading it back.
2864
+ const settings = loadSettings(cwd);
2865
+ for (const key of QWEN_MEMORY_SETTING_KEYS) {
2866
+ if (updates[key] === undefined)
2867
+ continue;
2868
+ if (typeof updates[key] !== 'boolean') {
2869
+ throw RequestError.invalidParams(undefined, `Invalid memory setting '${key}': expected boolean`);
2870
+ }
2871
+ settings.setValue(SettingScope.User, `memory.${key}`, updates[key]);
2872
+ }
2873
+ this.settings = settings;
2874
+ return {
2875
+ settings: normalizeQwenMemorySettings(settings.merged.memory),
2876
+ };
2877
+ }
2878
+ case 'qwen/settings/getPath': {
2879
+ return { path: this.settings.user.path };
2880
+ }
2881
+ case 'qwen/settings/getMemoryPaths': {
2882
+ const projectRoot = typeof params['projectRoot'] === 'string'
2883
+ ? params['projectRoot']
2884
+ : cwd;
2885
+ return {
2886
+ paths: await resolveQwenMemoryPaths({ cwd, projectRoot }),
2887
+ };
2888
+ }
2889
+ case SERVE_STATUS_EXT_METHODS.workspaceMcp:
2890
+ return this.buildWorkspaceMcpStatus(this.config);
2891
+ case SERVE_STATUS_EXT_METHODS.workspaceSkills:
2892
+ return (await this.buildWorkspaceSkillsStatus(this.config));
2893
+ case SERVE_STATUS_EXT_METHODS.workspaceProviders:
2894
+ return this.buildWorkspaceProvidersStatus(this.config);
2895
+ case SERVE_STATUS_EXT_METHODS.workspacePreflight:
2896
+ return (await this.buildAcpPreflightCells(this.config));
2897
+ case SERVE_STATUS_EXT_METHODS.sessionContext: {
2898
+ const sessionId = params['sessionId'];
2899
+ if (typeof sessionId !== 'string' || sessionId.length === 0) {
2900
+ throw RequestError.invalidParams(undefined, 'Invalid or missing sessionId');
2901
+ }
2902
+ return this.buildSessionContextStatus(sessionId);
2903
+ }
2904
+ case SERVE_STATUS_EXT_METHODS.sessionSupportedCommands: {
2905
+ const sessionId = params['sessionId'];
2906
+ if (typeof sessionId !== 'string' || sessionId.length === 0) {
2907
+ throw RequestError.invalidParams(undefined, 'Invalid or missing sessionId');
2908
+ }
2909
+ return (await this.buildSessionSupportedCommandsStatus(sessionId));
2910
+ }
2911
+ case SERVE_CONTROL_EXT_METHODS.workspaceMcpRestart: {
2912
+ // #4175 Wave 4 PR 17. Single-server MCP restart with budget
2913
+ // pre-check from PR 14 v1's accounting snapshot. Soft skips
2914
+ // (in_flight, disabled, budget_would_exceed) come back as
2915
+ // structured 200 responses; hard errors (server not in
2916
+ // config, manager unavailable, post-discover not connected)
2917
+ // propagate as JSON-RPC errors with structured `data` that
2918
+ // the bridge translates to typed HTTP responses.
2919
+ const serverName = params['serverName'];
2920
+ if (typeof serverName !== 'string' || serverName.length === 0) {
2921
+ throw RequestError.invalidParams(undefined, 'Invalid or missing serverName');
2922
+ }
2923
+ const servers = this.config.getMcpServers() ?? {};
2924
+ if (!Object.prototype.hasOwnProperty.call(servers, serverName)) {
2925
+ // #4282 gpt-5.5 C5 fold-in: the bridge looks for
2926
+ // `data.errorKind: 'mcp_server_not_found'` to map this back
2927
+ // to a typed `McpServerNotFoundError` and a stable HTTP 404
2928
+ // — without the structured payload the bridge can't
2929
+ // distinguish this from a generic JSON-RPC error and the
2930
+ // route falls through to 500.
2931
+ throw new RequestError(-32004, `MCP server not configured: ${JSON.stringify(serverName)}`, { errorKind: 'mcp_server_not_found', serverName });
2932
+ }
2933
+ if (this.config.isMcpServerDisabled(serverName)) {
2934
+ return {
2935
+ serverName,
2936
+ restarted: false,
2937
+ skipped: true,
2938
+ reason: 'disabled',
2939
+ };
2940
+ }
2941
+ const manager = this.config.getToolRegistry()?.getMcpClientManager();
2942
+ if (!manager) {
2943
+ throw RequestError.internalError(undefined, 'McpClientManager unavailable on this Config');
2944
+ }
2945
+ if (manager.isServerDiscovering(serverName)) {
2946
+ return {
2947
+ serverName,
2948
+ restarted: false,
2949
+ skipped: true,
2950
+ reason: 'in_flight',
2951
+ };
2952
+ }
2953
+ const accounting = manager.getMcpClientAccounting();
2954
+ const budget = manager.getMcpClientBudget();
2955
+ const mode = manager.getMcpBudgetMode();
2956
+ // #4282 gpt-5.5 C3 fold-in: enforce-mode capacity is reserved
2957
+ // by `tryReserveSlot` via `reservedSlots` (which counts
2958
+ // configured + in-flight + disconnected slot holders), not by
2959
+ // `total` (which only counts CONNECTED clients). Comparing
2960
+ // `total` to budget under-counted reservations and let a
2961
+ // restart proceed past capacity; the manager would then
2962
+ // refuse internally and return void, while this handler
2963
+ // reported `restarted: true`. Mirror the manager's policy
2964
+ // by checking `reservedSlots.length` for servers that don't
2965
+ // already hold a reservation.
2966
+ if (mode === 'enforce' &&
2967
+ budget !== undefined &&
2968
+ !accounting.reservedSlots.includes(serverName) &&
2969
+ accounting.reservedSlots.length >= budget) {
2970
+ return {
2971
+ serverName,
2972
+ restarted: false,
2973
+ skipped: true,
2974
+ reason: 'budget_would_exceed',
2975
+ };
2976
+ }
2977
+ const start = Date.now();
2978
+ await manager.discoverMcpToolsForServer(serverName, this.config);
2979
+ // #4282 gpt-5.5 C4 fold-in: `discoverMcpToolsForServer`
2980
+ // catches reconnect/discovery errors internally (logs and
2981
+ // resolves void) so a broken MCP server would otherwise
2982
+ // surface as `restarted: true`. Verify the live status from
2983
+ // the per-server status map; anything other than CONNECTED
2984
+ // means the restart didn't take effect.
2985
+ const postStatus = getMCPServerStatus(serverName);
2986
+ if (postStatus !== MCPServerStatus.CONNECTED) {
2987
+ throw new RequestError(-32099, `MCP server ${JSON.stringify(serverName)} did not reach a ` +
2988
+ `connected state after restart (status: ${postStatus}).`, {
2989
+ errorKind: 'mcp_restart_failed',
2990
+ serverName,
2991
+ mcpStatus: postStatus,
2992
+ });
2993
+ }
2994
+ return {
2995
+ serverName,
2996
+ restarted: true,
2997
+ durationMs: Date.now() - start,
2998
+ };
2999
+ }
3000
+ case SERVE_CONTROL_EXT_METHODS.sessionApprovalMode: {
3001
+ // #4175 Wave 4 PR 17: remote callers change a live session's
3002
+ // approval mode via this ACP extMethod. `Config.setApprovalMode`
3003
+ // throws `TrustGateError` for privileged modes in an untrusted
3004
+ // folder; we let it propagate — the bridge's mapping helper
3005
+ // converts the name to `errorKind: 'auth_env_error'` on the
3006
+ // wire so the SDK consumer gets a structured failure.
3007
+ const sessionId = params['sessionId'];
3008
+ const mode = params['mode'];
3009
+ if (typeof sessionId !== 'string' || sessionId.length === 0) {
3010
+ throw RequestError.invalidParams(undefined, 'Invalid or missing sessionId');
3011
+ }
3012
+ if (typeof mode !== 'string' ||
3013
+ !APPROVAL_MODES.includes(mode)) {
3014
+ throw RequestError.invalidParams(undefined, `Invalid approval mode; allowed: ${APPROVAL_MODES.join(', ')}`);
3015
+ }
3016
+ const session = this.sessionOrThrow(sessionId);
3017
+ const config = session.getConfig();
3018
+ const previous = config.getApprovalMode();
3019
+ try {
3020
+ config.setApprovalMode(mode);
3021
+ }
3022
+ catch (err) {
3023
+ // `TrustGateError` is the core's structured rejection for
3024
+ // untrusted-folder + privileged-mode. We re-raise it as a
3025
+ // JSON-RPC error whose `data.errorKind` is the literal the
3026
+ // bridge looks for to reconstruct a typed `TrustGateError` on
3027
+ // the daemon side (JSON-RPC strips the class name across the
3028
+ // wire). Other errors propagate unchanged.
3029
+ if (err instanceof Error && err.name === 'TrustGateError') {
3030
+ throw new RequestError(-32003, err.message, {
3031
+ errorKind: 'trust_gate',
3032
+ });
3033
+ }
3034
+ throw err;
3035
+ }
3036
+ const current = config.getApprovalMode();
3037
+ return { previous, current };
3038
+ }
3039
+ case 'deleteSession': {
3040
+ const sessionId = params['sessionId'];
3041
+ if (!sessionId || !SESSION_ID_RE.test(sessionId)) {
3042
+ throw RequestError.invalidParams(undefined, 'Invalid or missing sessionId');
3043
+ }
3044
+ const success = await runWithAcpRuntimeOutputDir(this.settings, cwd, async () => {
3045
+ const sessionService = new SessionService(cwd);
3046
+ return sessionService.removeSession(sessionId);
3047
+ });
3048
+ return { success };
3049
+ }
3050
+ case 'renameSession': {
3051
+ const sessionId = params['sessionId'];
3052
+ const title = params['title'];
3053
+ if (!sessionId || !SESSION_ID_RE.test(sessionId)) {
3054
+ throw RequestError.invalidParams(undefined, 'Invalid or missing sessionId');
3055
+ }
3056
+ if (!title || typeof title !== 'string') {
3057
+ throw RequestError.invalidParams(undefined, 'Invalid or missing title');
3058
+ }
3059
+ if (title.length > SESSION_TITLE_MAX_LENGTH) {
3060
+ throw RequestError.invalidParams(undefined, `Title too long (max ${SESSION_TITLE_MAX_LENGTH} chars)`);
3061
+ }
3062
+ // When the target session is currently live in this process, route
3063
+ // through its ChatRecordingService so the in-memory `currentCustomTitle`
3064
+ // stays in sync. Writing directly to disk via SessionService here
3065
+ // would leave the live recording's cache stale; the next title
3066
+ // re-anchor (every 32KB of writes) or finalize() would re-emit the
3067
+ // old title and silently revert the rename. The disk-only path
3068
+ // remains for the dead-session case (e.g., another client renaming
3069
+ // a session that isn't active in this process).
3070
+ const liveRecording = this.sessions
3071
+ .get(sessionId)
3072
+ ?.getConfig()
3073
+ .getChatRecordingService();
3074
+ if (liveRecording) {
3075
+ const ok = liveRecording.recordCustomTitle(title, 'manual');
3076
+ await liveRecording.flush();
3077
+ return { success: ok };
3078
+ }
3079
+ const success = await runWithAcpRuntimeOutputDir(this.settings, cwd, async () => {
3080
+ const sessionService = new SessionService(cwd);
3081
+ return sessionService.renameSession(sessionId, title);
3082
+ });
3083
+ return { success };
3084
+ }
3085
+ case 'rewindSession': {
3086
+ const sessionId = params['sessionId'];
3087
+ const targetTurnIndex = params['targetTurnIndex'];
3088
+ if (!sessionId || !SESSION_ID_RE.test(sessionId)) {
3089
+ throw RequestError.invalidParams(undefined, 'Invalid or missing sessionId');
3090
+ }
3091
+ if (!Number.isInteger(targetTurnIndex) ||
3092
+ targetTurnIndex < 0) {
3093
+ throw RequestError.invalidParams(undefined, 'Invalid or missing targetTurnIndex');
3094
+ }
3095
+ const session = this.sessions.get(sessionId);
3096
+ if (!session) {
3097
+ throw RequestError.invalidParams(undefined, `Session not found for id: ${sessionId}`);
3098
+ }
3099
+ const historyBeforeRewind = session.captureHistorySnapshot();
3100
+ return {
3101
+ success: true,
3102
+ historyBeforeRewind,
3103
+ ...session.rewindToTurn(targetTurnIndex),
3104
+ };
3105
+ }
3106
+ case 'qwen/session/loadUpdates': {
3107
+ const sessionId = params['sessionId'];
3108
+ if (!sessionId || !SESSION_ID_RE.test(sessionId)) {
3109
+ throw RequestError.invalidParams(undefined, 'Invalid or missing sessionId');
3110
+ }
3111
+ const sessionData = await runWithAcpRuntimeOutputDir(this.settings, cwd, async () => {
3112
+ const sessionService = new SessionService(cwd);
3113
+ return sessionService.loadSession(sessionId);
3114
+ });
3115
+ if (!sessionData?.conversation) {
3116
+ return { updates: [] };
3117
+ }
3118
+ const updates = [];
3119
+ const replayContext = {
3120
+ sessionId,
3121
+ config: this.config,
3122
+ sendUpdate: async (update) => {
3123
+ updates.push(update);
3124
+ },
3125
+ };
3126
+ let replayError;
3127
+ try {
3128
+ await new HistoryReplayer(replayContext).replay(sessionData.conversation.messages);
3129
+ }
3130
+ catch (error) {
3131
+ replayError = error instanceof Error ? error.message : String(error);
3132
+ debugLogger.warn('[loadUpdates] History replay failed for session %s (partial updates: %d):', sessionId, updates.length, error);
3133
+ }
3134
+ const updatesWithTopLevelTimestamps = updates.map((update) => {
3135
+ const record = update;
3136
+ const meta = record['_meta'];
3137
+ const timestamp = meta && typeof meta === 'object' && !Array.isArray(meta)
3138
+ ? meta['timestamp']
3139
+ : undefined;
3140
+ return typeof timestamp === 'number' || typeof timestamp === 'string'
3141
+ ? { ...record, timestamp }
3142
+ : record;
3143
+ });
3144
+ return {
3145
+ updates: updatesWithTopLevelTimestamps,
3146
+ startTime: sessionData.conversation.startTime,
3147
+ lastUpdated: sessionData.conversation.lastUpdated,
3148
+ // Signal to the client that replay aborted partway so it doesn't
3149
+ // render a truncated replay as the full conversation.
3150
+ ...(replayError !== undefined ? { partial: true, replayError } : {}),
3151
+ };
3152
+ }
3153
+ case 'restoreSessionHistory': {
3154
+ const sessionId = params['sessionId'];
3155
+ const history = params['history'];
3156
+ if (!sessionId || !SESSION_ID_RE.test(sessionId)) {
3157
+ throw RequestError.invalidParams(undefined, 'Invalid or missing sessionId');
3158
+ }
3159
+ if (!Array.isArray(history)) {
3160
+ throw RequestError.invalidParams(undefined, 'Invalid or missing history');
3161
+ }
3162
+ const session = this.sessions.get(sessionId);
3163
+ if (!session) {
3164
+ throw RequestError.invalidParams(undefined, `Session not found for id: ${sessionId}`);
3165
+ }
3166
+ session.restoreHistory(history);
3167
+ return { success: true };
3168
+ }
3169
+ case 'getAccountInfo': {
3170
+ const sessionId = params['sessionId'];
3171
+ const session = sessionId ? this.sessions.get(sessionId) : undefined;
3172
+ const config = session ? session.getConfig() : this.config;
3173
+ const cfg = config.getContentGeneratorConfig();
3174
+ return {
3175
+ authType: cfg?.authType ?? config.getAuthType() ?? null,
3176
+ model: cfg?.model ?? config.getModel() ?? null,
3177
+ baseUrl: cfg?.baseUrl ?? null,
3178
+ apiKeyEnvKey: cfg?.apiKeyEnvKey ?? null,
3179
+ };
3180
+ }
3181
+ case 'qwen/settings/getCore': {
3182
+ const settings = loadSettings(cwd);
3183
+ this.settings = settings;
3184
+ return this.buildCoreSettings(settings, cwd);
3185
+ }
3186
+ case 'qwen/settings/setCoreValue': {
3187
+ const key = params['key'];
3188
+ if (typeof key !== 'string' ||
3189
+ !QWEN_CORE_SETTING_KEYS.includes(key)) {
3190
+ throw RequestError.invalidParams(undefined, 'Unsupported Qwen setting key');
3191
+ }
3192
+ const settings = loadSettings(cwd);
3193
+ const settingKey = key;
3194
+ const normalizedValue = normalizeCoreSettingValue(settingKey, params['value']);
3195
+ const scope = toSettingsScope(params['scope']);
3196
+ settings.setValue(scope, key, normalizedValue);
3197
+ if (settingKey === 'general.outputLanguage' &&
3198
+ typeof normalizedValue === 'string' &&
3199
+ scope === SettingScope.User) {
3200
+ // output-language.md is a single global instruction file. Only a
3201
+ // user-scoped change should rewrite it; a workspace-scoped change is
3202
+ // persisted to the workspace settings file and must not clobber the
3203
+ // global file (which would silently affect every other workspace and
3204
+ // session).
3205
+ updateOutputLanguageFile(normalizedValue);
3206
+ }
3207
+ // `setValue` already persisted to disk and recomputed the in-memory
3208
+ // merged view, so reloading from disk here is redundant I/O.
3209
+ this.settings = settings;
3210
+ return this.buildCoreSettings(settings, cwd);
3211
+ }
3212
+ case 'qwen/settings/setMcpServer': {
3213
+ const name = params['name'];
3214
+ if (typeof name !== 'string' || !name.trim()) {
3215
+ throw RequestError.invalidParams(undefined, 'MCP server name is required');
3216
+ }
3217
+ const settings = loadSettings(cwd);
3218
+ const settingScope = toSettingsScope(params['scope']);
3219
+ const scope = settingScope === SettingScope.Workspace ? 'workspace' : 'user';
3220
+ const existing = readScopeSettings(settings, scope);
3221
+ const existingServers = toRecord(existing['mcpServers']);
3222
+ const mcpServers = {
3223
+ ...existingServers,
3224
+ [name.trim()]: toStoredMcpServerConfig(restoreRedactedMcpSecrets(normalizeMcpServerConfig(params['server']), toRecord(existingServers[name.trim()]))),
3225
+ };
3226
+ settings.setValue(settingScope, 'mcpServers', mcpServers);
3227
+ // `setValue` already persisted to disk and recomputed the in-memory
3228
+ // merged view, so reloading from disk here is redundant I/O.
3229
+ this.settings = settings;
3230
+ return this.buildCoreSettings(settings, cwd);
3231
+ }
3232
+ case 'qwen/settings/removeMcpServer': {
3233
+ const name = params['name'];
3234
+ if (typeof name !== 'string' || !name.trim()) {
3235
+ throw RequestError.invalidParams(undefined, 'MCP server name is required');
3236
+ }
3237
+ const settings = loadSettings(cwd);
3238
+ const settingScope = toSettingsScope(params['scope']);
3239
+ const scope = settingScope === SettingScope.Workspace ? 'workspace' : 'user';
3240
+ const existing = readScopeSettings(settings, scope);
3241
+ const mcpServers = { ...toRecord(existing['mcpServers']) };
3242
+ delete mcpServers[name.trim()];
3243
+ settings.setValue(settingScope, 'mcpServers', mcpServers);
3244
+ // `setValue` already persisted to disk and recomputed the in-memory
3245
+ // merged view, so reloading from disk here is redundant I/O.
3246
+ this.settings = settings;
3247
+ return this.buildCoreSettings(settings, cwd);
3248
+ }
3249
+ case 'qwen/settings/setHook': {
3250
+ const event = params['event'];
3251
+ if (!isHookEvent(event)) {
3252
+ throw RequestError.invalidParams(undefined, 'Invalid hook event');
3253
+ }
3254
+ const settings = loadSettings(cwd);
3255
+ const settingScope = toSettingsScope(params['scope']);
3256
+ const scope = settingScope === SettingScope.Workspace ? 'workspace' : 'user';
3257
+ const existing = readScopeSettings(settings, scope);
3258
+ const hooksRoot = { ...toRecord(existing['hooks']) };
3259
+ const eventHooks = Array.isArray(hooksRoot[event])
3260
+ ? [...hooksRoot[event]]
3261
+ : [];
3262
+ const incomingHook = normalizeHookDefinition(params['hook']);
3263
+ const index = params['index'];
3264
+ // Only replace when the index points at an existing entry. An
3265
+ // out-of-range index would create sparse-array holes that serialize to
3266
+ // `null` in settings.json and corrupt hook loading, so treat it (and a
3267
+ // missing/negative index) as an append.
3268
+ const isReplace = typeof index === 'number' &&
3269
+ Number.isInteger(index) &&
3270
+ index >= 0 &&
3271
+ index < eventHooks.length;
3272
+ // Restore any `__redacted__` env/header values the client echoed back
3273
+ // from getCore against the hook being replaced, so masking on read
3274
+ // never persists the sentinel over a real secret.
3275
+ const hook = restoreRedactedHookSecrets(incomingHook, isReplace ? toRecord(eventHooks[index]) : {});
3276
+ if (isReplace) {
3277
+ eventHooks[index] = hook;
3278
+ }
3279
+ else {
3280
+ // Missing/negative/non-integer index → append. (A non-integer like
3281
+ // 1.5 would otherwise create a sparse, non-integer array property
3282
+ // that JSON.stringify silently drops, corrupting the hook list.)
3283
+ eventHooks.push(hook);
3284
+ }
3285
+ hooksRoot[event] = eventHooks;
3286
+ settings.setValue(settingScope, 'hooks', hooksRoot);
3287
+ // `setValue` already persisted to disk and recomputed the in-memory
3288
+ // merged view, so reloading from disk here is redundant I/O.
3289
+ this.settings = settings;
3290
+ return this.buildCoreSettings(settings, cwd);
3291
+ }
3292
+ case 'qwen/settings/removeHook': {
3293
+ const event = params['event'];
3294
+ if (!isHookEvent(event)) {
3295
+ throw RequestError.invalidParams(undefined, 'Invalid hook event');
3296
+ }
3297
+ const index = params['index'];
3298
+ if (typeof index !== 'number' ||
3299
+ !Number.isInteger(index) ||
3300
+ index < 0) {
3301
+ throw RequestError.invalidParams(undefined, 'Invalid hook index');
3302
+ }
3303
+ const settings = loadSettings(cwd);
3304
+ const settingScope = toSettingsScope(params['scope']);
3305
+ const scope = settingScope === SettingScope.Workspace ? 'workspace' : 'user';
3306
+ const existing = readScopeSettings(settings, scope);
3307
+ const hooksRoot = { ...toRecord(existing['hooks']) };
3308
+ const eventHooks = Array.isArray(hooksRoot[event])
3309
+ ? [...hooksRoot[event]]
3310
+ : [];
3311
+ if (index >= eventHooks.length) {
3312
+ throw RequestError.invalidParams(undefined, `Hook index ${index} out of range (event has ${eventHooks.length} hooks)`);
3313
+ }
3314
+ eventHooks.splice(index, 1);
3315
+ hooksRoot[event] = eventHooks;
3316
+ settings.setValue(settingScope, 'hooks', hooksRoot);
3317
+ // `setValue` already persisted to disk and recomputed the in-memory
3318
+ // merged view, so reloading from disk here is redundant I/O.
3319
+ this.settings = settings;
3320
+ return this.buildCoreSettings(settings, cwd);
3321
+ }
3322
+ case 'qwen/settings/setExtensionSetting': {
3323
+ const extensionId = params['extensionId'];
3324
+ const settingKey = params['settingKey'];
3325
+ const value = params['value'];
3326
+ if (typeof extensionId !== 'string' || !extensionId) {
3327
+ throw RequestError.invalidParams(undefined, 'extensionId is required');
3328
+ }
3329
+ if (typeof settingKey !== 'string' || !settingKey) {
3330
+ throw RequestError.invalidParams(undefined, 'settingKey is required');
3331
+ }
3332
+ if (typeof value !== 'string') {
3333
+ throw RequestError.invalidParams(undefined, 'value must be a string');
3334
+ }
3335
+ const settings = loadSettings(cwd);
3336
+ const extensionManager = new ExtensionManager({
3337
+ workspaceDir: cwd,
3338
+ isWorkspaceTrusted: !!isWorkspaceTrusted(settings.merged),
3339
+ });
3340
+ await extensionManager.refreshCache();
3341
+ const extension = extensionManager
3342
+ .getLoadedExtensions()
3343
+ .find((item) => item.id === extensionId || item.name === extensionId);
3344
+ if (!extension) {
3345
+ throw RequestError.invalidParams(undefined, 'Extension not found');
3346
+ }
3347
+ const extScope = toSettingsScope(params['scope']) === SettingScope.Workspace
3348
+ ? ExtensionSettingScope.WORKSPACE
3349
+ : ExtensionSettingScope.USER;
3350
+ await updateSetting(extension.config, extension.id, settingKey, async () => value, extScope);
3351
+ // Unlike the sibling core-setting handlers, this persists through
3352
+ // `updateSetting` (extension settings store), not `settings.setValue`,
3353
+ // so `settings` here is just the snapshot loaded above and is reused to
3354
+ // build the response.
3355
+ this.settings = settings;
3356
+ return this.buildCoreSettings(settings, cwd);
3357
+ }
3358
+ case 'qwen/permissions/getSettings': {
3359
+ const settings = this.loadPermissionSettings(cwd);
3360
+ return this.buildPermissionSettings(settings);
3361
+ }
3362
+ case 'qwen/permissions/setRules': {
3363
+ const scope = params['scope'];
3364
+ const ruleType = params['ruleType'];
3365
+ if (scope !== 'user' && scope !== 'workspace') {
3366
+ throw RequestError.invalidParams(undefined, 'scope must be "user" or "workspace"');
3367
+ }
3368
+ if (ruleType !== 'allow' && ruleType !== 'ask' && ruleType !== 'deny') {
3369
+ throw RequestError.invalidParams(undefined, 'ruleType must be "allow", "ask", or "deny"');
3370
+ }
3371
+ const settings = this.loadPermissionSettings(cwd);
3372
+ const before = readPermissionRuleSet(settings.merged);
3373
+ const rules = normalizePermissionRules(params['rules']);
3374
+ const settingScope = scope === 'workspace' ? SettingScope.Workspace : SettingScope.User;
3375
+ settings.setValue(settingScope, `permissions.${ruleType}`, rules);
3376
+ // `setValue` already recomputed the in-memory merged view, so read the
3377
+ // "after" state from the same instance instead of reloading from disk
3378
+ // (avoids redundant I/O and a concurrency window where another handler
3379
+ // could mutate settings between the two loads).
3380
+ const after = readPermissionRuleSet(settings.merged);
3381
+ this.syncLivePermissionManagers(before, after);
3382
+ return this.buildPermissionSettings(settings);
3383
+ }
3384
+ default:
3385
+ throw RequestError.methodNotFound(method);
3386
+ }
3387
+ }
3388
+ // --- private helpers ---
3389
+ async newSessionConfig(cwd, mcpServers, sessionId, resume) {
3390
+ this.settings = loadSettings(cwd);
3391
+ const mergedMcpServers = { ...this.settings.merged.mcpServers };
3392
+ for (const server of mcpServers) {
3393
+ const stdioServer = toStdioServer(server);
3394
+ if (stdioServer) {
3395
+ const env = {};
3396
+ for (const { name: envName, value } of stdioServer.env) {
3397
+ env[envName] = value;
3398
+ }
3399
+ mergedMcpServers[stdioServer.name] = new MCPServerConfig(stdioServer.command, stdioServer.args, env, cwd);
3400
+ continue;
3401
+ }
3402
+ const sseServer = toSseServer(server);
3403
+ if (sseServer) {
3404
+ const headers = {};
3405
+ for (const { name: headerName, value } of sseServer.headers) {
3406
+ headers[headerName] = value;
3407
+ }
3408
+ mergedMcpServers[sseServer.name] = new MCPServerConfig(undefined, undefined, undefined, undefined, sseServer.url, undefined, Object.keys(headers).length > 0 ? headers : undefined);
3409
+ continue;
3410
+ }
3411
+ const httpServer = toHttpServer(server);
3412
+ if (httpServer) {
3413
+ const headers = {};
3414
+ for (const { name: headerName, value } of httpServer.headers) {
3415
+ headers[headerName] = value;
3416
+ }
3417
+ mergedMcpServers[httpServer.name] = new MCPServerConfig(undefined, undefined, undefined, undefined, undefined, httpServer.url, Object.keys(headers).length > 0 ? headers : undefined);
3418
+ continue;
3419
+ }
3420
+ }
3421
+ const settings = { ...this.settings.merged, mcpServers: mergedMcpServers };
3422
+ const argvForSession = {
3423
+ ...this.argv,
3424
+ ...(resume ? { resume: sessionId } : { sessionId }),
3425
+ continue: false,
3426
+ };
3427
+ const config = await loadCliConfig(settings, argvForSession, cwd, [],
3428
+ // Pass separated hooks for proper source attribution
3429
+ {
3430
+ userHooks: this.settings.getUserHooks(),
3431
+ projectHooks: this.settings.getProjectHooks(),
3432
+ },
3433
+ // CRITICAL: close over `this.settings` (LoadedSettings instance), NOT
3434
+ // over the local `settings` snapshot built above. `LoadedSettings.
3435
+ // setValue` replaces `_merged`, so a closure over the snapshot would
3436
+ // never see workspace toggles applied during the session. ACP/Zed
3437
+ // sessions otherwise leak persisted disabled skills into the first
3438
+ // <available_skills> at cold start.
3439
+ buildDisabledSkillNamesProvider(this.settings));
3440
+ // PR 14b fix #2 (codex review round 1): register the MCP guardrail
3441
+ // budget-event callback BEFORE `config.initialize()`. Pre-fix the
3442
+ // registration ran AFTER initialize, which (a) missed end-of-pass
3443
+ // events under `QWEN_CODE_LEGACY_MCP_BLOCKING=1` (synchronous
3444
+ // discovery completes inside initialize, before our setter runs)
3445
+ // and (b) raced against background-discovery completion under the
3446
+ // default progressive mode. `Config.setMcpBudgetEventCallback`
3447
+ // stashes the callback and `createToolRegistry` applies it to the
3448
+ // manager BEFORE `discoverAllTools` / `startMcpDiscoveryInBackground`
3449
+ // fires, closing both windows.
3450
+ //
3451
+ // sessionId source: `config.getSessionId()` reads the Config's own
3452
+ // session id (auto-assigned via `randomUUID()` in the Config
3453
+ // constructor when no override is passed — see `config.ts:849`),
3454
+ // so the value is available immediately after `loadCliConfig`
3455
+ // returns. The closure pins it for the manager's whole lifetime.
3456
+ //
3457
+ // Defensive `typeof` checks tolerate stub Configs / ToolRegistries
3458
+ // in older tests (older fixtures may omit `setMcpBudgetEventCallback`
3459
+ // or `getSessionId`).
3460
+ const wiredSessionId = typeof config.getSessionId === 'function'
3461
+ ? config.getSessionId()
3462
+ : undefined;
3463
+ if (typeof config.setMcpBudgetEventCallback === 'function' &&
3464
+ wiredSessionId !== undefined) {
3465
+ const sid = wiredSessionId;
3466
+ config.setMcpBudgetEventCallback((event) => {
3467
+ // Fire-and-forget: `extNotification` returns Promise<void> but
3468
+ // the manager's call site doesn't await. `.catch` suppresses
3469
+ // unhandled rejections — a mid-flight ACP disconnect would
3470
+ // otherwise crash the child. Snapshot still carries the state
3471
+ // for clients that reconnect.
3472
+ //
3473
+ // PR 14b fix (codex round 3 — DeepSeek): pre-fix the catch
3474
+ // handler was `() => {}`, silently dropping every error
3475
+ // including "real" ones (serialization bugs, protocol
3476
+ // violations) — operators had no debug trail. Now logs at
3477
+ // `debug` level: ACP channel closure during shutdown is the
3478
+ // expected case and would spam at higher levels, but `debug`
3479
+ // is opt-in so when an oncall engineer DOES turn it on for
3480
+ // an MCP guardrail incident, they see exactly which event
3481
+ // dropped and why.
3482
+ void this.connection
3483
+ .extNotification('qwen/notify/session/mcp-budget-event', {
3484
+ v: 1,
3485
+ sessionId: sid,
3486
+ ...event,
3487
+ })
3488
+ .catch((err) => {
3489
+ debugLogger.debug(`MCP budget extNotification dropped ` +
3490
+ `(session=${sid}, kind=${event.kind}): ` +
3491
+ `${err instanceof Error ? err.message : String(err)}`);
3492
+ });
3493
+ });
3494
+ }
3495
+ await config.initialize();
3496
+ // Same reasoning as the top-level runAcpAgent path: ACP feeds session
3497
+ // messages to the model immediately, so we cannot return a Config whose
3498
+ // MCP discovery is still in flight.
3499
+ await config.waitForMcpReady();
3500
+ // Surface MCP failures to stderr — mirrors `runAcpAgent` (lines 95-107)
3501
+ // and the other non-interactive entry points (`gemini.tsx`,
3502
+ // `session.ts`). Without this, per-session ACP configs that lose MCP
3503
+ // servers fall back to built-in-tools-only with no user-visible
3504
+ // indication. Defensive against tests that pass a stubbed Config
3505
+ // without `getFailedMcpServerNames`.
3506
+ const failedMcpServers = typeof config.getFailedMcpServerNames === 'function'
3507
+ ? config.getFailedMcpServerNames()
3508
+ : [];
3509
+ if (failedMcpServers.length > 0) {
3510
+ process.stderr.write(`Warning: MCP server(s) failed to start: ${failedMcpServers.join(', ')}. ` +
3511
+ `Continuing with built-in tools and any servers that did connect.\n`);
3512
+ }
3513
+ return config;
3514
+ }
3515
+ async ensureAuthenticated(config) {
3516
+ const selectedType = config.getModelsConfig().getCurrentAuthType();
3517
+ if (!selectedType) {
3518
+ throw RequestError.authRequired({ authMethods: pickAuthMethodsForAuthRequired() }, 'Use Qwen Code CLI to authenticate first.');
3519
+ }
3520
+ try {
3521
+ await config.refreshAuth(selectedType, true);
3522
+ }
3523
+ catch (e) {
3524
+ debugLogger.error(`Authentication failed: ${e}`);
3525
+ throw RequestError.authRequired({
3526
+ authMethods: pickAuthMethodsForAuthRequired(selectedType),
3527
+ }, 'Authentication failed: ' + e.message);
3528
+ }
3529
+ }
3530
+ setupFileSystem(config) {
3531
+ if (!this.clientCapabilities?.fs)
3532
+ return;
3533
+ const acpFileSystemService = new AcpFileSystemService(this.connection, config.getSessionId(), this.clientCapabilities.fs, config.getFileSystemService());
3534
+ config.setFileSystemService(acpFileSystemService);
3535
+ }
3536
+ async createAndStoreSession(config, conversation) {
3537
+ const sessionId = config.getSessionId();
3538
+ const geminiClient = config.getGeminiClient();
3539
+ const needsInitialize = !geminiClient.isInitialized();
3540
+ if (needsInitialize) {
3541
+ await geminiClient.initialize();
3542
+ }
3543
+ this.sessions.get(sessionId)?.dispose();
3544
+ const session = new Session(sessionId, config, this.connection, this.settings);
3545
+ this.sessions.set(sessionId, session);
3546
+ setTimeout(async () => {
3547
+ await session.sendAvailableCommandsUpdate();
3548
+ }, 0);
3549
+ if (conversation && conversation.messages) {
3550
+ await session.replayHistory(conversation.messages);
3551
+ }
3552
+ // Install rewriter AFTER history replay to avoid rewriting historical messages
3553
+ session.installRewriter();
3554
+ return session;
3555
+ }
3556
+ buildAvailableModels(config) {
3557
+ const rawCurrentModelId = (config.getModel() ||
3558
+ this.config.getModel() ||
3559
+ '').trim();
3560
+ const currentAuthType = config.getAuthType();
3561
+ const allConfiguredModels = config.getAllConfiguredModels();
3562
+ const activeRuntimeSnapshot = config.getActiveRuntimeModelSnapshot?.();
3563
+ const currentModelId = activeRuntimeSnapshot
3564
+ ? formatAcpModelId(activeRuntimeSnapshot.id, activeRuntimeSnapshot.authType)
3565
+ : this.formatCurrentModelId(rawCurrentModelId, currentAuthType);
3566
+ const mappedAvailableModels = allConfiguredModels.map((model) => {
3567
+ const effectiveModelId = model.isRuntimeModel && model.runtimeSnapshotId
3568
+ ? model.runtimeSnapshotId
3569
+ : model.id;
3570
+ return {
3571
+ modelId: formatAcpModelId(effectiveModelId, model.authType),
3572
+ name: model.label,
3573
+ description: model.description ?? null,
3574
+ _meta: {
3575
+ contextLimit: model.contextWindowSize ?? tokenLimit(model.id),
3576
+ },
3577
+ };
3578
+ });
3579
+ return {
3580
+ currentModelId,
3581
+ availableModels: mappedAvailableModels,
3582
+ };
3583
+ }
3584
+ buildModesData(config) {
3585
+ const currentApprovalMode = config.getApprovalMode();
3586
+ const availableModes = APPROVAL_MODES.map((mode) => ({
3587
+ id: mode,
3588
+ name: APPROVAL_MODE_INFO[mode].name,
3589
+ description: APPROVAL_MODE_INFO[mode].description,
3590
+ }));
3591
+ return {
3592
+ currentModeId: currentApprovalMode,
3593
+ availableModes,
3594
+ };
3595
+ }
3596
+ buildConfigOptions(config) {
3597
+ const currentApprovalMode = config.getApprovalMode();
3598
+ const allConfiguredModels = config.getAllConfiguredModels();
3599
+ const rawCurrentModelId = (config.getModel() || '').trim();
3600
+ const currentAuthType = config.getAuthType?.();
3601
+ const activeRuntimeSnapshot = config.getActiveRuntimeModelSnapshot?.();
3602
+ const currentModelId = activeRuntimeSnapshot
3603
+ ? formatAcpModelId(activeRuntimeSnapshot.id, activeRuntimeSnapshot.authType)
3604
+ : this.formatCurrentModelId(rawCurrentModelId, currentAuthType);
3605
+ const modeOptions = APPROVAL_MODES.map((mode) => ({
3606
+ value: mode,
3607
+ name: APPROVAL_MODE_INFO[mode].name,
3608
+ description: APPROVAL_MODE_INFO[mode].description,
3609
+ }));
3610
+ const modeConfigOption = {
3611
+ id: 'mode',
3612
+ name: 'Mode',
3613
+ description: 'Session permission mode',
3614
+ category: 'mode',
3615
+ type: 'select',
3616
+ currentValue: currentApprovalMode,
3617
+ options: modeOptions,
3618
+ };
3619
+ const modelOptions = allConfiguredModels.map((model) => {
3620
+ const effectiveModelId = model.isRuntimeModel && model.runtimeSnapshotId
3621
+ ? model.runtimeSnapshotId
3622
+ : model.id;
3623
+ return {
3624
+ value: formatAcpModelId(effectiveModelId, model.authType),
3625
+ name: model.label,
3626
+ description: model.description ?? '',
3627
+ };
3628
+ });
3629
+ const modelConfigOption = {
3630
+ id: 'model',
3631
+ name: 'Model',
3632
+ description: 'AI model to use',
3633
+ category: 'model',
3634
+ type: 'select',
3635
+ currentValue: currentModelId,
3636
+ options: modelOptions,
3637
+ };
3638
+ return [modeConfigOption, modelConfigOption];
3639
+ }
3640
+ formatCurrentModelId(baseModelId, authType) {
3641
+ if (!baseModelId)
3642
+ return baseModelId;
3643
+ return authType ? formatAcpModelId(baseModelId, authType) : baseModelId;
3644
+ }
3645
+ }
3646
+ //# sourceMappingURL=acpAgent.js.map