@qwen-code/qwen-code 0.18.3-preview.0 → 0.18.4-preview.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (508) hide show
  1. package/README.md +64 -492
  2. package/bundled/loop/SKILL.md +53 -26
  3. package/bundled/loop/SKILL.test.ts +67 -0
  4. package/bundled/qc-helper/docs/configuration/settings.md +25 -18
  5. package/bundled/qc-helper/docs/extension/introduction.md +38 -0
  6. package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
  7. package/bundled/qc-helper/docs/features/channels/overview.md +4 -4
  8. package/bundled/qc-helper/docs/features/channels/qqbot.md +179 -0
  9. package/bundled/qc-helper/docs/features/commands.md +49 -0
  10. package/bundled/qc-helper/docs/features/followup-suggestions.md +10 -6
  11. package/bundled/qc-helper/docs/features/hooks.md +6 -3
  12. package/bundled/qc-helper/docs/features/status-line.md +4 -2
  13. package/bundled/qc-helper/docs/qwen-serve.md +9 -4
  14. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +11 -5
  15. package/bundled/qc-helper/docs/support/troubleshooting.md +5 -0
  16. package/chunks/{agent-X42UKL4M.js → agent-PPGQVSZN.js} +24 -23
  17. package/chunks/{agent-headless-7FQ7NX6G.js → agent-headless-5SGQIWGS.js} +24 -23
  18. package/chunks/{anthropicContentGenerator-KLBHYGH6.js → anthropicContentGenerator-OLOGBVLP.js} +4 -4
  19. package/chunks/{askUserQuestion-QPZXR3UO.js → askUserQuestion-ANRVSBIJ.js} +2 -2
  20. package/chunks/{ca-RK4QPLIX.js → ca-K6MD665I.js} +42 -2
  21. package/chunks/chunk-2ES3D3TW.js +1026 -0
  22. package/chunks/{chunk-O4PICXES.js → chunk-2MPVVENX.js} +14 -6
  23. package/chunks/{chunk-BJ5HQ23U.js → chunk-4HMWGHPP.js} +9 -10
  24. package/chunks/{chunk-SFRV6BGY.js → chunk-4TW2JM5Q.js} +3 -3
  25. package/chunks/{chunk-ZOFNJQNJ.js → chunk-7GX7XYZU.js} +3 -3
  26. package/chunks/{chunk-VIEIRAK3.js → chunk-7OCZ77KA.js} +4 -2
  27. package/chunks/{chunk-3U2ZIZDP.js → chunk-A6OKBLUA.js} +732 -617
  28. package/chunks/{chunk-RTTAC5VW.js → chunk-AQDPHFDZ.js} +1 -1
  29. package/chunks/{chunk-U62OHNQR.js → chunk-BR6DF3Y4.js} +6 -6
  30. package/chunks/{chunk-IDYDPBBN.js → chunk-DZCZZPCY.js} +3 -3
  31. package/chunks/{chunk-ZMIBJS45.js → chunk-E5SRTXRG.js} +1 -1
  32. package/chunks/{chunk-FIQECJTQ.js → chunk-F6FP3URI.js} +1 -1
  33. package/chunks/{chunk-IQHSD7K5.js → chunk-FPZF3BNV.js} +1 -1
  34. package/chunks/{chunk-NNIYWQIS.js → chunk-HU3RKEK2.js} +2 -1
  35. package/chunks/{chunk-HA2UEYZP.js → chunk-IKOWINH4.js} +7 -4
  36. package/chunks/{chunk-JHSQY3J5.js → chunk-IS4QOHTV.js} +6 -5
  37. package/chunks/{chunk-MN5RAXVB.js → chunk-IUEQOXOI.js} +18 -6
  38. package/chunks/{chunk-CPVI5J2L.js → chunk-JIJBNW4A.js} +1 -1
  39. package/chunks/{chunk-ZNUMXPNK.js → chunk-JJHY7NAD.js} +7 -3
  40. package/chunks/{chunk-YJDVHAGL.js → chunk-JN6FVOPP.js} +2 -2
  41. package/chunks/{chunk-P5CE42XM.js → chunk-JP3LQIMW.js} +1046 -293
  42. package/chunks/{chunk-VU6A2OBJ.js → chunk-JXQ23SNT.js} +217 -219
  43. package/chunks/{chunk-WPTCDQN6.js → chunk-M5VYHAHT.js} +2 -2
  44. package/chunks/{chunk-VFW7VM7A.js → chunk-MP436DDQ.js} +131009 -128408
  45. package/chunks/{chunk-LXYWINWF.js → chunk-N5QHMPZU.js} +1 -1
  46. package/chunks/{chunk-LYSND7KR.js → chunk-PTGKSUUJ.js} +2 -2
  47. package/chunks/{chunk-6X6PTTH3.js → chunk-VNMHFAZ3.js} +24 -12
  48. package/chunks/{chunk-LYRSMKLS.js → chunk-VWPDSQZY.js} +2 -2
  49. package/chunks/{chunk-B4ZF2KSI.js → chunk-WWU2KUSR.js} +2 -2
  50. package/chunks/{chunk-QP4R5FTG.js → chunk-Z7XXFPGP.js} +4 -3
  51. package/chunks/{chunk-TW522KN6.js → chunk-ZTQ26VBE.js} +13 -6
  52. package/chunks/{computer-use-WHPP33BI.js → computer-use-LPHSGISW.js} +24 -23
  53. package/chunks/contextCommand-SQPW6JX7.js +54 -0
  54. package/chunks/{cron-create-DQKRQMCP.js → cron-create-OKGQO6GX.js} +6 -6
  55. package/chunks/{cron-delete-DOFPHFTI.js → cron-delete-DTJP7L6O.js} +6 -6
  56. package/chunks/{cron-list-RCVOO3CB.js → cron-list-VKZUASFG.js} +24 -10
  57. package/chunks/{de-FGPM4KW5.js → de-K2F3T3TR.js} +41 -1
  58. package/chunks/{dist-2UCAYOX7.js → dist-BD27IA3L.js} +16 -5
  59. package/chunks/{dist-33LHH26D.js → dist-KIYB7DQW.js} +1 -1
  60. package/chunks/{dist-UH7CYT7F.js → dist-OLC6NBSB.js} +51 -10
  61. package/chunks/dist-QFFZWACU.js +2136 -0
  62. package/chunks/{dist-KF43SZZV.js → dist-QUSDBLAK.js} +1 -1
  63. package/chunks/{edit-V22UFE4F.js → edit-OPGWEYXB.js} +26 -27
  64. package/chunks/{en-VP6XPGEC.js → en-KGSAKBJP.js} +232 -0
  65. package/chunks/{enter-worktree-HYS5U3QO.js → enter-worktree-JLFLU22E.js} +24 -23
  66. package/chunks/{enterPlanMode-UR2KPB4Y.js → enterPlanMode-JFBUNYML.js} +47 -23
  67. package/chunks/{exit-worktree-JNIUZIZ3.js → exit-worktree-NU64ZZRI.js} +191 -41
  68. package/chunks/{exitPlanMode-NJY3Y6XQ.js → exitPlanMode-UR6YQE64.js} +81 -43
  69. package/chunks/{fr-ATYBVCLT.js → fr-2CAQEOK6.js} +41 -1
  70. package/chunks/{geminiContentGenerator-SDUMCYHD.js → geminiContentGenerator-KUVZXCGX.js} +4 -4
  71. package/chunks/{glob-Z6UYFZCH.js → glob-RNX6IBFD.js} +26 -24
  72. package/chunks/{grep-WHWDB2HD.js → grep-5GUNAZFX.js} +96 -43
  73. package/chunks/{ja-W2QEA2OI.js → ja-QWL7V6OJ.js} +41 -1
  74. package/chunks/{keychain-token-storage-QSTRHKKL.js → keychain-token-storage-ALKQXYJQ.js} +2 -2
  75. package/chunks/loop-wakeup-RX6YIUSG.js +167 -0
  76. package/chunks/{ls-TRD77UTS.js → ls-6PLNWHMU.js} +3 -3
  77. package/chunks/{lsp-2VFWQPZS.js → lsp-3HFQU4OF.js} +2 -2
  78. package/chunks/{monitor-F4V4YEE4.js → monitor-LYHRV6SR.js} +24 -23
  79. package/chunks/{notebook-edit-P45433KC.js → notebook-edit-B5FEP65B.js} +25 -26
  80. package/chunks/{openaiContentGenerator-DRXB5MSN.js → openaiContentGenerator-XYMMXZFG.js} +12 -11
  81. package/chunks/{pt-ZKEWJFBW.js → pt-2SPOLMAY.js} +41 -1
  82. package/chunks/{qwenContentGenerator-3XZMXLHX.js → qwenContentGenerator-QWPW3P7K.js} +26 -25
  83. package/chunks/{qwenOAuth2-KK433U33.js → qwenOAuth2-XWC5SU63.js} +4 -4
  84. package/chunks/{read-file-WQPROSSJ.js → read-file-ROEHCU4A.js} +9 -8
  85. package/chunks/{ripGrep-EAE7GW6T.js → ripGrep-YBPCCX22.js} +24 -23
  86. package/chunks/{ru-VEKTPJ74.js → ru-35IVJTEH.js} +41 -1
  87. package/chunks/{scheduler-WCMRRLYM.js → scheduler-NIQSNCLH.js} +24 -23
  88. package/chunks/{send-message-QZOC5GA2.js → send-message-IIT3SHA7.js} +2 -2
  89. package/chunks/{serve-BVDNMP5D.js → serve-GME2SMSV.js} +1249 -279
  90. package/chunks/{shell-W4LWEOQL.js → shell-E7NADQBV.js} +24 -23
  91. package/chunks/{skill-VTJI4OPM.js → skill-WVYNAGWW.js} +11 -10
  92. package/chunks/{src-E42UOH5I.js → src-4HJAM36V.js} +137 -59
  93. package/chunks/{syntheticOutput-WJSUK4SZ.js → syntheticOutput-H67FYXU7.js} +3 -3
  94. package/chunks/{task-create-GGSC27HO.js → task-create-OVXHSHAI.js} +7 -7
  95. package/chunks/{task-list-EDHHHSK4.js → task-list-QUUCQJ3U.js} +6 -6
  96. package/chunks/{task-stop-WR5PDVZY.js → task-stop-WA5DMTKK.js} +2 -2
  97. package/chunks/{task-update-UR7NUHBV.js → task-update-PC5427TI.js} +7 -7
  98. package/chunks/{team-create-OAGMFFDJ.js → team-create-BOSQOS35.js} +26 -25
  99. package/chunks/{team-delete-FC33URJK.js → team-delete-ZTEMYRJ3.js} +6 -6
  100. package/chunks/{todoWrite-GO2ME7ZV.js → todoWrite-J6L6ELD6.js} +4 -4
  101. package/chunks/{tool-search-XZPD5EPI.js → tool-search-PPLILX5J.js} +9 -8
  102. package/chunks/{web-fetch-NLLATYIL.js → web-fetch-6XLPPTP7.js} +5 -5
  103. package/chunks/{workflow-AIC3XOX5.js → workflow-CDROZNXC.js} +242 -39
  104. package/chunks/{write-file-6GIRRW43.js → write-file-QY4X7MMO.js} +26 -27
  105. package/chunks/{zh-TW-6YFNCKTA.js → zh-TW-BSG6BUWK.js} +232 -2
  106. package/chunks/{zh-OIXDDQHB.js → zh-X4KM6MTW.js} +233 -0
  107. package/cli.js +10735 -5708
  108. package/examples/agent/agents/diary.md +1 -1
  109. package/examples/mcp-server/qwen-extension.json +8 -1
  110. package/examples/starter/agents/diary.md +1 -1
  111. package/locales/ca.js +67 -2
  112. package/locales/de.js +68 -2
  113. package/locales/en.js +304 -0
  114. package/locales/fr.js +69 -2
  115. package/locales/ja.js +65 -2
  116. package/locales/pt.js +67 -2
  117. package/locales/ru.js +68 -2
  118. package/locales/zh-TW.js +288 -2
  119. package/locales/zh.js +288 -0
  120. package/package.json +4 -3
  121. package/web-shell/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  122. package/web-shell/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
  123. package/web-shell/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
  124. package/web-shell/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
  125. package/web-shell/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
  126. package/web-shell/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  127. package/web-shell/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
  128. package/web-shell/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  129. package/web-shell/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
  130. package/web-shell/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
  131. package/web-shell/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
  132. package/web-shell/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  133. package/web-shell/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
  134. package/web-shell/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  135. package/web-shell/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
  136. package/web-shell/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  137. package/web-shell/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
  138. package/web-shell/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
  139. package/web-shell/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  140. package/web-shell/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
  141. package/web-shell/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
  142. package/web-shell/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
  143. package/web-shell/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
  144. package/web-shell/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  145. package/web-shell/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  146. package/web-shell/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
  147. package/web-shell/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
  148. package/web-shell/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
  149. package/web-shell/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  150. package/web-shell/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
  151. package/web-shell/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
  152. package/web-shell/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
  153. package/web-shell/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  154. package/web-shell/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
  155. package/web-shell/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  156. package/web-shell/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
  157. package/web-shell/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  158. package/web-shell/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
  159. package/web-shell/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
  160. package/web-shell/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
  161. package/web-shell/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
  162. package/web-shell/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  163. package/web-shell/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
  164. package/web-shell/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  165. package/web-shell/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
  166. package/web-shell/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
  167. package/web-shell/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
  168. package/web-shell/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  169. package/web-shell/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
  170. package/web-shell/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  171. package/web-shell/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
  172. package/web-shell/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
  173. package/web-shell/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
  174. package/web-shell/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
  175. package/web-shell/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
  176. package/web-shell/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  177. package/web-shell/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
  178. package/web-shell/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  179. package/web-shell/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
  180. package/web-shell/assets/abap-DsBKuouk.js +1 -0
  181. package/web-shell/assets/actionscript-3-D_z4Izcz.js +1 -0
  182. package/web-shell/assets/ada-727ZlQH0.js +1 -0
  183. package/web-shell/assets/andromeeda-C3khCPGq.js +1 -0
  184. package/web-shell/assets/angular-html-LfdN0zeE.js +1 -0
  185. package/web-shell/assets/angular-ts-CKsD7JZE.js +1 -0
  186. package/web-shell/assets/apache-Dn00JSTd.js +1 -0
  187. package/web-shell/assets/apex-COJ4H7py.js +1 -0
  188. package/web-shell/assets/apl-BBq3IX1j.js +1 -0
  189. package/web-shell/assets/applescript-Bu5BbsvL.js +1 -0
  190. package/web-shell/assets/ara-7O62HKoU.js +1 -0
  191. package/web-shell/assets/arc-CRFN10gD.js +1 -0
  192. package/web-shell/assets/architectureDiagram-3BPJPVTR-IRlu1CpH.js +36 -0
  193. package/web-shell/assets/asciidoc-BPT9niGB.js +1 -0
  194. package/web-shell/assets/asm-Dhn9LcZ4.js +1 -0
  195. package/web-shell/assets/astro-CqkE3fuf.js +1 -0
  196. package/web-shell/assets/aurora-x-D-2ljcwZ.js +1 -0
  197. package/web-shell/assets/awk-eg146-Ew.js +1 -0
  198. package/web-shell/assets/ayu-dark-Cv9koXgw.js +1 -0
  199. package/web-shell/assets/ballerina-Du268qiB.js +1 -0
  200. package/web-shell/assets/bat-fje9CFhw.js +1 -0
  201. package/web-shell/assets/beancount-BwXTMy5W.js +1 -0
  202. package/web-shell/assets/berry-3xVqZejG.js +1 -0
  203. package/web-shell/assets/bibtex-xW4inM5L.js +1 -0
  204. package/web-shell/assets/bicep-DHo0CJ0O.js +1 -0
  205. package/web-shell/assets/blade-a8OxSdnT.js +1 -0
  206. package/web-shell/assets/blockDiagram-GPEHLZMM-htIZ6iw8.js +132 -0
  207. package/web-shell/assets/bsl-Dgyn0ogV.js +1 -0
  208. package/web-shell/assets/c-C3t2pwGQ.js +1 -0
  209. package/web-shell/assets/c4Diagram-AAUBKEIU-A2GoRq3O.js +10 -0
  210. package/web-shell/assets/cadence-DNquZEk8.js +1 -0
  211. package/web-shell/assets/cairo--RitsXJZ.js +1 -0
  212. package/web-shell/assets/catppuccin-frappe-CD_QflpE.js +1 -0
  213. package/web-shell/assets/catppuccin-latte-DRW-0cLl.js +1 -0
  214. package/web-shell/assets/catppuccin-macchiato-C-_shW-Y.js +1 -0
  215. package/web-shell/assets/catppuccin-mocha-LGGdnPYs.js +1 -0
  216. package/web-shell/assets/channel-WwImfsc7.js +1 -0
  217. package/web-shell/assets/chunk-2J33WTMH-CdP2AC6u.js +1 -0
  218. package/web-shell/assets/chunk-4BX2VUAB-DrA07nW2.js +1 -0
  219. package/web-shell/assets/chunk-55IACEB6-CFGnVU2f.js +1 -0
  220. package/web-shell/assets/chunk-727SXJPM-BTMkq3Tk.js +206 -0
  221. package/web-shell/assets/chunk-AQP2D5EJ-C9sYg04Z.js +231 -0
  222. package/web-shell/assets/chunk-FMBD7UC4-Cag-cj6I.js +15 -0
  223. package/web-shell/assets/chunk-ND2GUHAM-CDSTFoR7.js +1 -0
  224. package/web-shell/assets/chunk-QZHKN3VN-CN9Z6oOs.js +1 -0
  225. package/web-shell/assets/clarity-BHOwM8T6.js +1 -0
  226. package/web-shell/assets/classDiagram-4FO5ZUOK-CJKQYFeJ.js +1 -0
  227. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CJKQYFeJ.js +1 -0
  228. package/web-shell/assets/clojure-DxSadP1t.js +1 -0
  229. package/web-shell/assets/cmake-DbXoA79R.js +1 -0
  230. package/web-shell/assets/cobol-PTqiYgYu.js +1 -0
  231. package/web-shell/assets/codeowners-Bp6g37R7.js +1 -0
  232. package/web-shell/assets/codeql-sacFqUAJ.js +1 -0
  233. package/web-shell/assets/coffee-dyiR41kL.js +1 -0
  234. package/web-shell/assets/common-lisp-C7gG9l05.js +1 -0
  235. package/web-shell/assets/coq-Dsg_Bt_b.js +1 -0
  236. package/web-shell/assets/cose-bilkent-S5V4N54A-DuN9j8Du.js +1 -0
  237. package/web-shell/assets/cpp-BksuvNSY.js +1 -0
  238. package/web-shell/assets/crystal-DtDmRg-F.js +1 -0
  239. package/web-shell/assets/csharp-D9R-vmeu.js +1 -0
  240. package/web-shell/assets/css-BPhBrDlE.js +1 -0
  241. package/web-shell/assets/csv-B0qRVHPH.js +1 -0
  242. package/web-shell/assets/cue-DtFQj3wx.js +1 -0
  243. package/web-shell/assets/cypher-m2LEI-9-.js +1 -0
  244. package/web-shell/assets/cytoscape.esm-CUqq0XTU.js +331 -0
  245. package/web-shell/assets/d-BoXegm-a.js +1 -0
  246. package/web-shell/assets/dagre-BM42HDAG-ByCWe45f.js +4 -0
  247. package/web-shell/assets/dark-plus-C3mMm8J8.js +1 -0
  248. package/web-shell/assets/dart-B9wLZaAG.js +1 -0
  249. package/web-shell/assets/dax-ClGRhx96.js +1 -0
  250. package/web-shell/assets/defaultLocale-DX6XiGOO.js +1 -0
  251. package/web-shell/assets/desktop-DEIpsLCJ.js +1 -0
  252. package/web-shell/assets/diagram-2AECGRRQ-eWyU_pKZ.js +43 -0
  253. package/web-shell/assets/diagram-5GNKFQAL-0Bfu3Fq5.js +10 -0
  254. package/web-shell/assets/diagram-KO2AKTUF-B6KBKkQP.js +3 -0
  255. package/web-shell/assets/diagram-LMA3HP47-TToDmeA_.js +24 -0
  256. package/web-shell/assets/diagram-OG6HWLK6-CQCkC2Yx.js +24 -0
  257. package/web-shell/assets/diff-BgYniUM_.js +1 -0
  258. package/web-shell/assets/docker-COcR7UxN.js +1 -0
  259. package/web-shell/assets/dotenv-BjQB5zDj.js +1 -0
  260. package/web-shell/assets/dracula-BzJJZx-M.js +1 -0
  261. package/web-shell/assets/dracula-soft-BXkSAIEj.js +1 -0
  262. package/web-shell/assets/dream-maker-C-nORZOA.js +1 -0
  263. package/web-shell/assets/edge-D5gP-w-T.js +1 -0
  264. package/web-shell/assets/elixir-CLiX3zqd.js +1 -0
  265. package/web-shell/assets/elm-CmHSxxaM.js +1 -0
  266. package/web-shell/assets/emacs-lisp-BX77sIaO.js +1 -0
  267. package/web-shell/assets/erDiagram-TEJ5UH35-Cm9ls1iB.js +85 -0
  268. package/web-shell/assets/erb-BYTLMnw6.js +1 -0
  269. package/web-shell/assets/erlang-B-DoSBHF.js +1 -0
  270. package/web-shell/assets/everforest-dark-BgDCqdQA.js +1 -0
  271. package/web-shell/assets/everforest-light-C8M2exoo.js +1 -0
  272. package/web-shell/assets/fennel-bCA53EVm.js +1 -0
  273. package/web-shell/assets/fish-w-ucz2PV.js +1 -0
  274. package/web-shell/assets/flowDiagram-I6XJVG4X-Dyoz80Pv.js +162 -0
  275. package/web-shell/assets/fluent-Dayu4EKP.js +1 -0
  276. package/web-shell/assets/fortran-fixed-form-TqA4NnZg.js +1 -0
  277. package/web-shell/assets/fortran-free-form-DKXYxT9g.js +1 -0
  278. package/web-shell/assets/fsharp-XplgxFYe.js +1 -0
  279. package/web-shell/assets/ganttDiagram-6RSMTGT7-Cfut9yaU.js +292 -0
  280. package/web-shell/assets/gdresource-BHYsBjWJ.js +1 -0
  281. package/web-shell/assets/gdscript-DfxzS6Rs.js +1 -0
  282. package/web-shell/assets/gdshader-SKMF96pI.js +1 -0
  283. package/web-shell/assets/genie-ajMbGru0.js +1 -0
  284. package/web-shell/assets/gherkin--30QC5Em.js +1 -0
  285. package/web-shell/assets/git-commit-i4q6IMui.js +1 -0
  286. package/web-shell/assets/git-rebase-B-v9cOL2.js +1 -0
  287. package/web-shell/assets/gitGraphDiagram-PVQCEYII-BCuJdlfD.js +106 -0
  288. package/web-shell/assets/github-dark-DHJKELXO.js +1 -0
  289. package/web-shell/assets/github-dark-default-Cuk6v7N8.js +1 -0
  290. package/web-shell/assets/github-dark-dimmed-DH5Ifo-i.js +1 -0
  291. package/web-shell/assets/github-dark-high-contrast-E3gJ1_iC.js +1 -0
  292. package/web-shell/assets/github-light-DAi9KRSo.js +1 -0
  293. package/web-shell/assets/github-light-default-D7oLnXFd.js +1 -0
  294. package/web-shell/assets/github-light-high-contrast-BfjtVDDH.js +1 -0
  295. package/web-shell/assets/gleam-B430Bg39.js +1 -0
  296. package/web-shell/assets/glimmer-js-D-cwc0-E.js +1 -0
  297. package/web-shell/assets/glimmer-ts-pgjy16dm.js +1 -0
  298. package/web-shell/assets/glsl-DBO2IWDn.js +1 -0
  299. package/web-shell/assets/gnuplot-CM8KxXT1.js +1 -0
  300. package/web-shell/assets/go-B1SYOhNW.js +1 -0
  301. package/web-shell/assets/graph-qsFoMdT2.js +1 -0
  302. package/web-shell/assets/graphql-cDcHW_If.js +1 -0
  303. package/web-shell/assets/groovy-DkBy-JyN.js +1 -0
  304. package/web-shell/assets/hack-D1yCygmZ.js +1 -0
  305. package/web-shell/assets/haml-B2EZWmdv.js +1 -0
  306. package/web-shell/assets/handlebars-BQGss363.js +1 -0
  307. package/web-shell/assets/haskell-BILxekzW.js +1 -0
  308. package/web-shell/assets/haxe-C5wWYbrZ.js +1 -0
  309. package/web-shell/assets/hcl-HzYwdGDm.js +1 -0
  310. package/web-shell/assets/hjson-T-Tgc4AT.js +1 -0
  311. package/web-shell/assets/hlsl-ifBTmRxC.js +1 -0
  312. package/web-shell/assets/houston-DnULxvSX.js +1 -0
  313. package/web-shell/assets/html-C2L_23MC.js +1 -0
  314. package/web-shell/assets/html-derivative-CSfWNPLT.js +1 -0
  315. package/web-shell/assets/http-FRrOvY1W.js +1 -0
  316. package/web-shell/assets/hxml-TIA70rKU.js +1 -0
  317. package/web-shell/assets/hy-BMj5Y0dO.js +1 -0
  318. package/web-shell/assets/imba-bv_oIlVt.js +1 -0
  319. package/web-shell/assets/index-BDZiTAkl.css +1 -0
  320. package/web-shell/assets/index-DaebdpHq.js +516 -0
  321. package/web-shell/assets/infoDiagram-5YYISTIA-CXKxF2VL.js +2 -0
  322. package/web-shell/assets/ini-BjABl1g7.js +1 -0
  323. package/web-shell/assets/init-Gi6I4Gst.js +1 -0
  324. package/web-shell/assets/ishikawaDiagram-YF4QCWOH-DE7HWSU8.js +70 -0
  325. package/web-shell/assets/java-xI-RfyKK.js +1 -0
  326. package/web-shell/assets/javascript-ySlJ1b_l.js +1 -0
  327. package/web-shell/assets/jinja-DGy0s7-h.js +1 -0
  328. package/web-shell/assets/jison-BqZprYcd.js +1 -0
  329. package/web-shell/assets/journeyDiagram-JHISSGLW-D__YUfds.js +139 -0
  330. package/web-shell/assets/json-BQoSv7ci.js +1 -0
  331. package/web-shell/assets/json5-w8dY5SsB.js +1 -0
  332. package/web-shell/assets/jsonc-TU54ms6u.js +1 -0
  333. package/web-shell/assets/jsonl-DREVFZK8.js +1 -0
  334. package/web-shell/assets/jsonnet-BfivnA6A.js +1 -0
  335. package/web-shell/assets/jssm-P4WzXJd0.js +1 -0
  336. package/web-shell/assets/jsx-BAng5TT0.js +1 -0
  337. package/web-shell/assets/julia-BBuGR-5E.js +1 -0
  338. package/web-shell/assets/kanagawa-dragon-CkXjmgJE.js +1 -0
  339. package/web-shell/assets/kanagawa-lotus-CfQXZHmo.js +1 -0
  340. package/web-shell/assets/kanagawa-wave-DWedfzmr.js +1 -0
  341. package/web-shell/assets/kanban-definition-UN3LZRKU-D82R169M.js +89 -0
  342. package/web-shell/assets/kotlin-B5lbUyaz.js +1 -0
  343. package/web-shell/assets/kusto-mebxcVVE.js +1 -0
  344. package/web-shell/assets/laserwave-DUszq2jm.js +1 -0
  345. package/web-shell/assets/latex-C-cWTeAZ.js +1 -0
  346. package/web-shell/assets/layout-CNYaLpI5.js +1 -0
  347. package/web-shell/assets/lean-XBlWyCtg.js +1 -0
  348. package/web-shell/assets/less-BfCpw3nA.js +1 -0
  349. package/web-shell/assets/light-plus-B7mTdjB0.js +1 -0
  350. package/web-shell/assets/linear-DpyMbKqT.js +1 -0
  351. package/web-shell/assets/liquid-D3W5UaiH.js +1 -0
  352. package/web-shell/assets/log-Cc5clBb7.js +1 -0
  353. package/web-shell/assets/logo-IuBKFhSY.js +1 -0
  354. package/web-shell/assets/lua-CvWAzNxB.js +1 -0
  355. package/web-shell/assets/luau-Du5NY7AG.js +1 -0
  356. package/web-shell/assets/make-Bvotw-X0.js +1 -0
  357. package/web-shell/assets/markdown-UIAJJxZW.js +1 -0
  358. package/web-shell/assets/marko-z0MBrx5-.js +1 -0
  359. package/web-shell/assets/material-theme-D5KoaKCx.js +1 -0
  360. package/web-shell/assets/material-theme-darker-BfHTSMKl.js +1 -0
  361. package/web-shell/assets/material-theme-lighter-B0m2ddpp.js +1 -0
  362. package/web-shell/assets/material-theme-ocean-CyktbL80.js +1 -0
  363. package/web-shell/assets/material-theme-palenight-Csfq5Kiy.js +1 -0
  364. package/web-shell/assets/matlab-D9-PGadD.js +1 -0
  365. package/web-shell/assets/mdc-DB_EDNY_.js +1 -0
  366. package/web-shell/assets/mdx-sdHcTMYB.js +1 -0
  367. package/web-shell/assets/mermaid-Ci6OQyBP.js +1 -0
  368. package/web-shell/assets/mermaid.core-D1KEFDhn.js +309 -0
  369. package/web-shell/assets/min-dark-CafNBF8u.js +1 -0
  370. package/web-shell/assets/min-light-CTRr51gU.js +1 -0
  371. package/web-shell/assets/mindmap-definition-RKZ34NQL-BwVUFGFE.js +96 -0
  372. package/web-shell/assets/mipsasm-BC5c_5Pe.js +1 -0
  373. package/web-shell/assets/mojo-Tz6hzZYG.js +1 -0
  374. package/web-shell/assets/monokai-D4h5O-jR.js +1 -0
  375. package/web-shell/assets/move-DB_GagMm.js +1 -0
  376. package/web-shell/assets/narrat-DLbgOhZU.js +1 -0
  377. package/web-shell/assets/nextflow-B0XVJmRM.js +1 -0
  378. package/web-shell/assets/nginx-D_VnBJ67.js +1 -0
  379. package/web-shell/assets/night-owl-C39BiMTA.js +1 -0
  380. package/web-shell/assets/nim-ZlGxZxc3.js +1 -0
  381. package/web-shell/assets/nix-shcSOmrb.js +1 -0
  382. package/web-shell/assets/nord-Ddv68eIx.js +1 -0
  383. package/web-shell/assets/nushell-D4Tzg5kh.js +1 -0
  384. package/web-shell/assets/objective-c-Deuh7S70.js +1 -0
  385. package/web-shell/assets/objective-cpp-BUEGK8hf.js +1 -0
  386. package/web-shell/assets/ocaml-BNioltXt.js +1 -0
  387. package/web-shell/assets/one-dark-pro-GBQ2dnAY.js +1 -0
  388. package/web-shell/assets/one-light-PoHY5YXO.js +1 -0
  389. package/web-shell/assets/ordinal-Cboi1Yqb.js +1 -0
  390. package/web-shell/assets/pascal-JqZropPD.js +1 -0
  391. package/web-shell/assets/perl-CHQXSrWU.js +1 -0
  392. package/web-shell/assets/php-B5ebYQev.js +1 -0
  393. package/web-shell/assets/pieDiagram-4H26LBE5-BO_qoEGx.js +30 -0
  394. package/web-shell/assets/plastic-3e1v2bzS.js +1 -0
  395. package/web-shell/assets/plsql-LKU2TuZ1.js +1 -0
  396. package/web-shell/assets/po-BFLt1xDp.js +1 -0
  397. package/web-shell/assets/poimandres-CS3Unz2-.js +1 -0
  398. package/web-shell/assets/polar-DKykz6zU.js +1 -0
  399. package/web-shell/assets/postcss-B3ZDOciz.js +1 -0
  400. package/web-shell/assets/powerquery-CSHBycmS.js +1 -0
  401. package/web-shell/assets/powershell-BIEUsx6d.js +1 -0
  402. package/web-shell/assets/prisma-B48N-Iqd.js +1 -0
  403. package/web-shell/assets/prolog-BY-TUvya.js +1 -0
  404. package/web-shell/assets/proto-zocC4JxJ.js +1 -0
  405. package/web-shell/assets/pug-CM9l7STV.js +1 -0
  406. package/web-shell/assets/puppet-Cza_XSSt.js +1 -0
  407. package/web-shell/assets/purescript-Bg-kzb6g.js +1 -0
  408. package/web-shell/assets/python-DhUJRlN_.js +1 -0
  409. package/web-shell/assets/qml-D8XfuvdV.js +1 -0
  410. package/web-shell/assets/qmldir-C8lEn-DE.js +1 -0
  411. package/web-shell/assets/qss-DhMKtDLN.js +1 -0
  412. package/web-shell/assets/quadrantDiagram-W4KKPZXB-Cx0ZaWPo.js +7 -0
  413. package/web-shell/assets/r-CwjWoCRV.js +1 -0
  414. package/web-shell/assets/racket-CzouJOBO.js +1 -0
  415. package/web-shell/assets/raku-B1bQXN8T.js +1 -0
  416. package/web-shell/assets/razor-CNLDkMZG.js +1 -0
  417. package/web-shell/assets/red-bN70gL4F.js +1 -0
  418. package/web-shell/assets/reg-5LuOXUq_.js +1 -0
  419. package/web-shell/assets/regexp-DWJ3fJO_.js +1 -0
  420. package/web-shell/assets/rel-DJlmqQ1C.js +1 -0
  421. package/web-shell/assets/requirementDiagram-4Y6WPE33-BJPXejOA.js +84 -0
  422. package/web-shell/assets/riscv-QhoSD0DR.js +1 -0
  423. package/web-shell/assets/rose-pine-CmCqftbK.js +1 -0
  424. package/web-shell/assets/rose-pine-dawn-Ds-gbosJ.js +1 -0
  425. package/web-shell/assets/rose-pine-moon-CjDtw9vr.js +1 -0
  426. package/web-shell/assets/rst-4NLicBqY.js +1 -0
  427. package/web-shell/assets/ruby-DeZ3UC14.js +1 -0
  428. package/web-shell/assets/rust-Be6lgOlo.js +1 -0
  429. package/web-shell/assets/sankeyDiagram-5OEKKPKP-C1xeIL9i.js +40 -0
  430. package/web-shell/assets/sas-BmTFh92c.js +1 -0
  431. package/web-shell/assets/sass-BJ4Li9vH.js +1 -0
  432. package/web-shell/assets/scala-DQVVAn-B.js +1 -0
  433. package/web-shell/assets/scheme-BJGe-b2p.js +1 -0
  434. package/web-shell/assets/scss-C31hgJw-.js +1 -0
  435. package/web-shell/assets/sdbl-BLhTXw86.js +1 -0
  436. package/web-shell/assets/sequenceDiagram-3UESZ5HK-CSYKQUjf.js +162 -0
  437. package/web-shell/assets/shaderlab-B7qAK45m.js +1 -0
  438. package/web-shell/assets/shellscript-atvbtKCR.js +1 -0
  439. package/web-shell/assets/shellsession-C_rIy8kc.js +1 -0
  440. package/web-shell/assets/slack-dark-BthQWCQV.js +1 -0
  441. package/web-shell/assets/slack-ochin-DqwNpetd.js +1 -0
  442. package/web-shell/assets/smalltalk-DkLiglaE.js +1 -0
  443. package/web-shell/assets/snazzy-light-Bw305WKR.js +1 -0
  444. package/web-shell/assets/solarized-dark-DXbdFlpD.js +1 -0
  445. package/web-shell/assets/solarized-light-L9t79GZl.js +1 -0
  446. package/web-shell/assets/solidity-C1w2a3ep.js +1 -0
  447. package/web-shell/assets/soy-C-lX7w71.js +1 -0
  448. package/web-shell/assets/sparql-bYkjHRlG.js +1 -0
  449. package/web-shell/assets/splunk-Cf8iN4DR.js +1 -0
  450. package/web-shell/assets/sql-COK4E0Yg.js +1 -0
  451. package/web-shell/assets/ssh-config-BknIz3MU.js +1 -0
  452. package/web-shell/assets/stata-DorPZHa4.js +1 -0
  453. package/web-shell/assets/stateDiagram-AJRCARHV-d9hiHlAW.js +1 -0
  454. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DgReoybQ.js +1 -0
  455. package/web-shell/assets/stylus-BeQkCIfX.js +1 -0
  456. package/web-shell/assets/svelte-MSaWC3Je.js +1 -0
  457. package/web-shell/assets/swift-BSxZ-RaX.js +1 -0
  458. package/web-shell/assets/synthwave-84-CbfX1IO0.js +1 -0
  459. package/web-shell/assets/system-verilog-C7L56vO4.js +1 -0
  460. package/web-shell/assets/systemd-CUnW07Te.js +1 -0
  461. package/web-shell/assets/talonscript-C1XDQQGZ.js +1 -0
  462. package/web-shell/assets/tasl-CQjiPCtT.js +1 -0
  463. package/web-shell/assets/tcl-DQ1-QYvQ.js +1 -0
  464. package/web-shell/assets/templ-dwX3ZSMB.js +1 -0
  465. package/web-shell/assets/terraform-BbSNqyBO.js +1 -0
  466. package/web-shell/assets/tex-rYs2v40G.js +1 -0
  467. package/web-shell/assets/timeline-definition-PNZ67QCA-BhCBkq8k.js +120 -0
  468. package/web-shell/assets/tokyo-night-DBQeEorK.js +1 -0
  469. package/web-shell/assets/toml-CB2ApiWb.js +1 -0
  470. package/web-shell/assets/ts-tags-CipyTH0X.js +1 -0
  471. package/web-shell/assets/tsv-B_m7g4N7.js +1 -0
  472. package/web-shell/assets/tsx-B6W0miNI.js +1 -0
  473. package/web-shell/assets/turtle-BMR_PYu6.js +1 -0
  474. package/web-shell/assets/twig-NC5TFiHP.js +1 -0
  475. package/web-shell/assets/typescript-Dj6nwHGl.js +1 -0
  476. package/web-shell/assets/typespec-BpWG_bgh.js +1 -0
  477. package/web-shell/assets/typst-BVUVsWT6.js +1 -0
  478. package/web-shell/assets/v-CAQ2eGtk.js +1 -0
  479. package/web-shell/assets/vala-BFOHcciG.js +1 -0
  480. package/web-shell/assets/vb-CdO5JTpU.js +1 -0
  481. package/web-shell/assets/vennDiagram-CIIHVFJN-DPPFWp_y.js +34 -0
  482. package/web-shell/assets/verilog-CJaU5se_.js +1 -0
  483. package/web-shell/assets/vesper-BEBZ7ncR.js +1 -0
  484. package/web-shell/assets/vhdl-DYoNaHQp.js +1 -0
  485. package/web-shell/assets/viml-m4uW47V2.js +1 -0
  486. package/web-shell/assets/vitesse-black-Bkuqu6BP.js +1 -0
  487. package/web-shell/assets/vitesse-dark-D0r3Knsf.js +1 -0
  488. package/web-shell/assets/vitesse-light-CVO1_9PV.js +1 -0
  489. package/web-shell/assets/vue-BuYVFjOK.js +1 -0
  490. package/web-shell/assets/vue-html-xdeiXROB.js +1 -0
  491. package/web-shell/assets/vyper-nyqBNV6O.js +1 -0
  492. package/web-shell/assets/wardley-L42UT6IY-CcOUIgXY.js +173 -0
  493. package/web-shell/assets/wardleyDiagram-YWT4CUSO-p7oR5X7r.js +78 -0
  494. package/web-shell/assets/wasm-C6j12Q_x.js +1 -0
  495. package/web-shell/assets/wasm-CG6Dc4jp.js +1 -0
  496. package/web-shell/assets/wenyan-7A4Fjokl.js +1 -0
  497. package/web-shell/assets/wgsl-CB0Krxn9.js +1 -0
  498. package/web-shell/assets/wikitext-DCE3LsBG.js +1 -0
  499. package/web-shell/assets/wolfram-C3FkfJm5.js +1 -0
  500. package/web-shell/assets/xml-e3z08dGr.js +1 -0
  501. package/web-shell/assets/xsl-Dd0NUgwM.js +1 -0
  502. package/web-shell/assets/xychartDiagram-2RQKCTM6-Dfr7-SEy.js +7 -0
  503. package/web-shell/assets/yaml-CVw76BM1.js +1 -0
  504. package/web-shell/assets/zenscript-HnGAYVZD.js +1 -0
  505. package/web-shell/assets/zig-BVz_zdnA.js +1 -0
  506. package/web-shell/index.html +23 -0
  507. package/chunks/chunk-C64WAJOC.js +0 -117
  508. package/chunks/contextCommand-WP7BU7IY.js +0 -53
@@ -1,12 +1,13 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
3
  import {
4
+ SUPPORTED_LANGUAGES,
4
5
  detectSystemLanguage,
5
6
  getLanguageNameFromLocale,
6
7
  getLanguageSettingsOptions,
7
8
  t,
8
9
  writeStderrLine
9
- } from "./chunk-6X6PTTH3.js";
10
+ } from "./chunk-VNMHFAZ3.js";
10
11
  import {
11
12
  DEFAULT_STOP_HOOK_BLOCK_CAP,
12
13
  DEFAULT_TOOL_OUTPUT_BATCH_BUDGET,
@@ -17,21 +18,21 @@ import {
17
18
  SkillError,
18
19
  ideContextStore,
19
20
  require_main
20
- } from "./chunk-VFW7VM7A.js";
21
+ } from "./chunk-MP436DDQ.js";
21
22
  import {
22
23
  isWithinRoot,
23
24
  stripRuntimeSnapshotPrefix
24
- } from "./chunk-P5CE42XM.js";
25
+ } from "./chunk-JP3LQIMW.js";
25
26
  import {
26
27
  atomicWriteFileSync
27
- } from "./chunk-LXYWINWF.js";
28
+ } from "./chunk-N5QHMPZU.js";
28
29
  import {
29
30
  FatalConfigError,
30
31
  QWEN_DIR,
31
32
  Storage,
32
33
  createDebugLogger,
33
34
  getErrorMessage
34
- } from "./chunk-HA2UEYZP.js";
35
+ } from "./chunk-IKOWINH4.js";
35
36
  import {
36
37
  init_esbuild_shims
37
38
  } from "./chunk-A4BMJM77.js";
@@ -42,79 +43,6 @@ import {
42
43
  __toESM
43
44
  } from "./chunk-J2S4EL5Y.js";
44
45
 
45
- // node_modules/strip-json-comments/index.js
46
- var require_strip_json_comments = __commonJS({
47
- "node_modules/strip-json-comments/index.js"(exports, module) {
48
- "use strict";
49
- init_esbuild_shims();
50
- var singleComment = Symbol("singleComment");
51
- var multiComment = Symbol("multiComment");
52
- var stripWithoutWhitespace = /* @__PURE__ */ __name(() => "", "stripWithoutWhitespace");
53
- var stripWithWhitespace = /* @__PURE__ */ __name((string, start, end) => string.slice(start, end).replace(/\S/g, " "), "stripWithWhitespace");
54
- var isEscaped = /* @__PURE__ */ __name((jsonString, quotePosition) => {
55
- let index = quotePosition - 1;
56
- let backslashCount = 0;
57
- while (jsonString[index] === "\\") {
58
- index -= 1;
59
- backslashCount += 1;
60
- }
61
- return Boolean(backslashCount % 2);
62
- }, "isEscaped");
63
- module.exports = (jsonString, options = {}) => {
64
- if (typeof jsonString !== "string") {
65
- throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``);
66
- }
67
- const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace;
68
- let insideString = false;
69
- let insideComment = false;
70
- let offset = 0;
71
- let result = "";
72
- for (let i = 0; i < jsonString.length; i++) {
73
- const currentCharacter = jsonString[i];
74
- const nextCharacter = jsonString[i + 1];
75
- if (!insideComment && currentCharacter === '"') {
76
- const escaped = isEscaped(jsonString, i);
77
- if (!escaped) {
78
- insideString = !insideString;
79
- }
80
- }
81
- if (insideString) {
82
- continue;
83
- }
84
- if (!insideComment && currentCharacter + nextCharacter === "//") {
85
- result += jsonString.slice(offset, i);
86
- offset = i;
87
- insideComment = singleComment;
88
- i++;
89
- } else if (insideComment === singleComment && currentCharacter + nextCharacter === "\r\n") {
90
- i++;
91
- insideComment = false;
92
- result += strip(jsonString, offset, i);
93
- offset = i;
94
- continue;
95
- } else if (insideComment === singleComment && currentCharacter === "\n") {
96
- insideComment = false;
97
- result += strip(jsonString, offset, i);
98
- offset = i;
99
- } else if (!insideComment && currentCharacter + nextCharacter === "/*") {
100
- result += jsonString.slice(offset, i);
101
- offset = i;
102
- insideComment = multiComment;
103
- i++;
104
- continue;
105
- } else if (insideComment === multiComment && currentCharacter + nextCharacter === "*/") {
106
- i++;
107
- insideComment = false;
108
- result += strip(jsonString, offset, i + 1);
109
- offset = i + 1;
110
- continue;
111
- }
112
- }
113
- return result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset));
114
- };
115
- }
116
- });
117
-
118
46
  // node_modules/esprima/dist/esprima.js
119
47
  var require_esprima = __commonJS({
120
48
  "node_modules/esprima/dist/esprima.js"(exports, module) {
@@ -164,7 +92,7 @@ var require_esprima = __commonJS({
164
92
  var jsx_parser_1 = __webpack_require__(3);
165
93
  var parser_1 = __webpack_require__(8);
166
94
  var tokenizer_1 = __webpack_require__(15);
167
- function parse3(code, options, delegate) {
95
+ function parse4(code, options, delegate) {
168
96
  var commentHandler = null;
169
97
  var proxyDelegate = /* @__PURE__ */ __name(function(node, metadata) {
170
98
  if (delegate) {
@@ -209,19 +137,19 @@ var require_esprima = __commonJS({
209
137
  }
210
138
  return ast;
211
139
  }
212
- __name(parse3, "parse");
213
- exports2.parse = parse3;
140
+ __name(parse4, "parse");
141
+ exports2.parse = parse4;
214
142
  function parseModule(code, options, delegate) {
215
143
  var parsingOptions = options || {};
216
144
  parsingOptions.sourceType = "module";
217
- return parse3(code, parsingOptions, delegate);
145
+ return parse4(code, parsingOptions, delegate);
218
146
  }
219
147
  __name(parseModule, "parseModule");
220
148
  exports2.parseModule = parseModule;
221
149
  function parseScript(code, options, delegate) {
222
150
  var parsingOptions = options || {};
223
151
  parsingOptions.sourceType = "script";
224
- return parse3(code, parsingOptions, delegate);
152
+ return parse4(code, parsingOptions, delegate);
225
153
  }
226
154
  __name(parseScript, "parseScript");
227
155
  exports2.parseScript = parseScript;
@@ -7862,7 +7790,7 @@ var require_parse = __commonJS({
7862
7790
  }
7863
7791
  __name(walk, "walk");
7864
7792
  var isObject = /* @__PURE__ */ __name((subject) => Object(subject) === subject, "isObject");
7865
- var parse3 = /* @__PURE__ */ __name((code, rev, no_comments) => {
7793
+ var parse4 = /* @__PURE__ */ __name((code, rev, no_comments) => {
7866
7794
  clean();
7867
7795
  tokens = tokenize(code);
7868
7796
  reviver = rev;
@@ -7891,7 +7819,7 @@ var require_parse = __commonJS({
7891
7819
  return result;
7892
7820
  }, "parse");
7893
7821
  module.exports = {
7894
- parse: parse3,
7822
+ parse: parse4,
7895
7823
  tokenize
7896
7824
  };
7897
7825
  }
@@ -8035,7 +7963,7 @@ var require_stringify = __commonJS({
8035
7963
  deeper_gap
8036
7964
  );
8037
7965
  inside += before || LF + deeper_gap;
8038
- inside += stringify2(i, value, deeper_gap) || STR_NULL;
7966
+ inside += stringify3(i, value, deeper_gap) || STR_NULL;
8039
7967
  inside += process_comments(value, AFTER_VALUE(i), deeper_gap);
8040
7968
  after_comma = process_comments(value, AFTER(i), deeper_gap);
8041
7969
  }
@@ -8056,7 +7984,7 @@ var require_stringify = __commonJS({
8056
7984
  let first = true;
8057
7985
  const keys = isArray(replacer) ? replacer : Object.keys(value);
8058
7986
  const iteratee = /* @__PURE__ */ __name((key) => {
8059
- const sv = stringify2(key, value, deeper_gap);
7987
+ const sv = stringify3(key, value, deeper_gap);
8060
7988
  if (sv === UNDEFINED) {
8061
7989
  return;
8062
7990
  }
@@ -8081,7 +8009,7 @@ var require_stringify = __commonJS({
8081
8009
  );
8082
8010
  return CURLY_BRACKET_OPEN + join_content(inside, value, gap) + CURLY_BRACKET_CLOSE;
8083
8011
  }, "object_stringify");
8084
- function stringify2(key, holder, gap) {
8012
+ function stringify3(key, holder, gap) {
8085
8013
  let value = holder[key];
8086
8014
  if (isObject(value) && isFunction(value.toJSON)) {
8087
8015
  value = value.toJSON(key);
@@ -8105,7 +8033,7 @@ var require_stringify = __commonJS({
8105
8033
  default:
8106
8034
  }
8107
8035
  }
8108
- __name(stringify2, "stringify");
8036
+ __name(stringify3, "stringify");
8109
8037
  var get_indent = /* @__PURE__ */ __name((space) => isString(space) ? space : isNumber(space) ? repeat(SPACE, space) : EMPTY, "get_indent");
8110
8038
  var { toString } = Object.prototype;
8111
8039
  var PRIMITIVE_OBJECT_TYPES = [
@@ -8130,7 +8058,7 @@ var require_stringify = __commonJS({
8130
8058
  }
8131
8059
  replacer = replacer_;
8132
8060
  indent = indent_;
8133
- const str = is_primitive_object(value) ? JSON.stringify(value) : stringify2("", { "": value }, EMPTY);
8061
+ const str = is_primitive_object(value) ? JSON.stringify(value) : stringify3("", { "": value }, EMPTY);
8134
8062
  clean();
8135
8063
  return isObject(value) ? process_comments(value, PREFIX_BEFORE_ALL, EMPTY).trimLeft() + str + process_comments(value, PREFIX_AFTER_ALL, EMPTY).trimRight() : str;
8136
8064
  };
@@ -8141,13 +8069,13 @@ var require_stringify = __commonJS({
8141
8069
  var require_src2 = __commonJS({
8142
8070
  "node_modules/comment-json/src/index.js"(exports, module) {
8143
8071
  init_esbuild_shims();
8144
- var { parse: parse3, tokenize } = require_parse();
8145
- var stringify2 = require_stringify();
8072
+ var { parse: parse4, tokenize } = require_parse();
8073
+ var stringify3 = require_stringify();
8146
8074
  var { CommentArray } = require_array();
8147
8075
  var { assign } = require_common();
8148
8076
  module.exports = {
8149
- parse: parse3,
8150
- stringify: stringify2,
8077
+ parse: parse4,
8078
+ stringify: stringify3,
8151
8079
  tokenize,
8152
8080
  CommentArray,
8153
8081
  assign
@@ -8155,6 +8083,79 @@ var require_src2 = __commonJS({
8155
8083
  }
8156
8084
  });
8157
8085
 
8086
+ // node_modules/strip-json-comments/index.js
8087
+ var require_strip_json_comments = __commonJS({
8088
+ "node_modules/strip-json-comments/index.js"(exports, module) {
8089
+ "use strict";
8090
+ init_esbuild_shims();
8091
+ var singleComment = Symbol("singleComment");
8092
+ var multiComment = Symbol("multiComment");
8093
+ var stripWithoutWhitespace = /* @__PURE__ */ __name(() => "", "stripWithoutWhitespace");
8094
+ var stripWithWhitespace = /* @__PURE__ */ __name((string, start, end) => string.slice(start, end).replace(/\S/g, " "), "stripWithWhitespace");
8095
+ var isEscaped = /* @__PURE__ */ __name((jsonString, quotePosition) => {
8096
+ let index = quotePosition - 1;
8097
+ let backslashCount = 0;
8098
+ while (jsonString[index] === "\\") {
8099
+ index -= 1;
8100
+ backslashCount += 1;
8101
+ }
8102
+ return Boolean(backslashCount % 2);
8103
+ }, "isEscaped");
8104
+ module.exports = (jsonString, options = {}) => {
8105
+ if (typeof jsonString !== "string") {
8106
+ throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``);
8107
+ }
8108
+ const strip = options.whitespace === false ? stripWithoutWhitespace : stripWithWhitespace;
8109
+ let insideString = false;
8110
+ let insideComment = false;
8111
+ let offset = 0;
8112
+ let result = "";
8113
+ for (let i = 0; i < jsonString.length; i++) {
8114
+ const currentCharacter = jsonString[i];
8115
+ const nextCharacter = jsonString[i + 1];
8116
+ if (!insideComment && currentCharacter === '"') {
8117
+ const escaped = isEscaped(jsonString, i);
8118
+ if (!escaped) {
8119
+ insideString = !insideString;
8120
+ }
8121
+ }
8122
+ if (insideString) {
8123
+ continue;
8124
+ }
8125
+ if (!insideComment && currentCharacter + nextCharacter === "//") {
8126
+ result += jsonString.slice(offset, i);
8127
+ offset = i;
8128
+ insideComment = singleComment;
8129
+ i++;
8130
+ } else if (insideComment === singleComment && currentCharacter + nextCharacter === "\r\n") {
8131
+ i++;
8132
+ insideComment = false;
8133
+ result += strip(jsonString, offset, i);
8134
+ offset = i;
8135
+ continue;
8136
+ } else if (insideComment === singleComment && currentCharacter === "\n") {
8137
+ insideComment = false;
8138
+ result += strip(jsonString, offset, i);
8139
+ offset = i;
8140
+ } else if (!insideComment && currentCharacter + nextCharacter === "/*") {
8141
+ result += jsonString.slice(offset, i);
8142
+ offset = i;
8143
+ insideComment = multiComment;
8144
+ i++;
8145
+ continue;
8146
+ } else if (insideComment === multiComment && currentCharacter + nextCharacter === "*/") {
8147
+ i++;
8148
+ insideComment = false;
8149
+ result += strip(jsonString, offset, i + 1);
8150
+ offset = i + 1;
8151
+ continue;
8152
+ }
8153
+ }
8154
+ return result + (insideComment ? strip(jsonString.slice(offset)) : jsonString.slice(offset));
8155
+ };
8156
+ }
8157
+ });
8158
+
8158
8159
  // node_modules/picocolors/picocolors.js
8159
8160
  var require_picocolors = __commonJS({
8160
8161
  "node_modules/picocolors/picocolors.js"(exports, module) {
@@ -9125,7 +9126,7 @@ var require_parse2 = __commonJS({
9125
9126
  "use strict";
9126
9127
  init_esbuild_shims();
9127
9128
  var SemVer = require_semver();
9128
- var parse3 = /* @__PURE__ */ __name((version, options, throwErrors = false) => {
9129
+ var parse4 = /* @__PURE__ */ __name((version, options, throwErrors = false) => {
9129
9130
  if (version instanceof SemVer) {
9130
9131
  return version;
9131
9132
  }
@@ -9138,7 +9139,7 @@ var require_parse2 = __commonJS({
9138
9139
  throw er;
9139
9140
  }
9140
9141
  }, "parse");
9141
- module.exports = parse3;
9142
+ module.exports = parse4;
9142
9143
  }
9143
9144
  });
9144
9145
 
@@ -9147,9 +9148,9 @@ var require_valid = __commonJS({
9147
9148
  "node_modules/semver/functions/valid.js"(exports, module) {
9148
9149
  "use strict";
9149
9150
  init_esbuild_shims();
9150
- var parse3 = require_parse2();
9151
+ var parse4 = require_parse2();
9151
9152
  var valid = /* @__PURE__ */ __name((version, options) => {
9152
- const v = parse3(version, options);
9153
+ const v = parse4(version, options);
9153
9154
  return v ? v.version : null;
9154
9155
  }, "valid");
9155
9156
  module.exports = valid;
@@ -9161,9 +9162,9 @@ var require_clean = __commonJS({
9161
9162
  "node_modules/semver/functions/clean.js"(exports, module) {
9162
9163
  "use strict";
9163
9164
  init_esbuild_shims();
9164
- var parse3 = require_parse2();
9165
+ var parse4 = require_parse2();
9165
9166
  var clean = /* @__PURE__ */ __name((version, options) => {
9166
- const s = parse3(version.trim().replace(/^[=v]+/, ""), options);
9167
+ const s = parse4(version.trim().replace(/^[=v]+/, ""), options);
9167
9168
  return s ? s.version : null;
9168
9169
  }, "clean");
9169
9170
  module.exports = clean;
@@ -10180,9 +10181,9 @@ var require_spdx_expression_parse = __commonJS({
10180
10181
  "use strict";
10181
10182
  init_esbuild_shims();
10182
10183
  var scan = require_scan();
10183
- var parse3 = require_parse3();
10184
+ var parse4 = require_parse3();
10184
10185
  module.exports = function(source) {
10185
- return parse3(scan(source));
10186
+ return parse4(scan(source));
10186
10187
  };
10187
10188
  }
10188
10189
  });
@@ -10191,11 +10192,11 @@ var require_spdx_expression_parse = __commonJS({
10191
10192
  var require_spdx_correct = __commonJS({
10192
10193
  "node_modules/spdx-correct/index.js"(exports, module) {
10193
10194
  init_esbuild_shims();
10194
- var parse3 = require_spdx_expression_parse();
10195
+ var parse4 = require_spdx_expression_parse();
10195
10196
  var spdxLicenseIds = require_spdx_license_ids();
10196
10197
  function valid(string) {
10197
10198
  try {
10198
- parse3(string);
10199
+ parse4(string);
10199
10200
  return true;
10200
10201
  } catch (error) {
10201
10202
  return false;
@@ -10529,7 +10530,7 @@ var require_spdx_correct = __commonJS({
10529
10530
  var require_validate_npm_package_license = __commonJS({
10530
10531
  "node_modules/validate-npm-package-license/index.js"(exports, module) {
10531
10532
  init_esbuild_shims();
10532
- var parse3 = require_spdx_expression_parse();
10533
+ var parse4 = require_spdx_expression_parse();
10533
10534
  var correct = require_spdx_correct();
10534
10535
  var genericWarning = 'license should be a valid SPDX license expression (without "LicenseRef"), "UNLICENSED", or "SEE LICENSE IN <filename>"';
10535
10536
  var fileReferenceRE = /^SEE LICEN[CS]E IN (.+)$/;
@@ -10549,7 +10550,7 @@ var require_validate_npm_package_license = __commonJS({
10549
10550
  module.exports = function(argument) {
10550
10551
  var ast;
10551
10552
  try {
10552
- ast = parse3(argument);
10553
+ ast = parse4(argument);
10553
10554
  } catch (e) {
10554
10555
  var match;
10555
10556
  if (argument === "UNLICENSED" || argument === "UNLICENCED") {
@@ -13903,6 +13904,7 @@ var SERVE_CONTROL_EXT_METHODS = {
13903
13904
  sessionShellHistory: "qwen/control/session/shell_history",
13904
13905
  sessionLanguage: "qwen/control/session/language",
13905
13906
  sessionRewind: "qwen/control/session/rewind",
13907
+ sessionTitle: "qwen/control/session/title",
13906
13908
  workspaceMcpRestart: "qwen/control/workspace/mcp/restart",
13907
13909
  workspaceMcpManage: "qwen/control/workspace/mcp/manage",
13908
13910
  workspaceAgentGenerate: "qwen/control/workspace/agents/generate",
@@ -13911,7 +13913,8 @@ var SERVE_CONTROL_EXT_METHODS = {
13911
13913
  sessionGoalClear: "qwen/control/session/goal/clear",
13912
13914
  workspaceMcpRuntimeAdd: "qwen/control/workspace/mcp/runtime-add",
13913
13915
  workspaceMcpRuntimeRemove: "qwen/control/workspace/mcp/runtime-remove",
13914
- workspaceReload: "qwen/control/workspace/reload"
13916
+ workspaceReload: "qwen/control/workspace/reload",
13917
+ workspaceExtensionsRefresh: "qwen/control/workspace/extensions/refresh"
13915
13918
  };
13916
13919
  var IDLE_HOOK_EVENTS = {
13917
13920
  PreToolUse: { description: "Before tool execution", matcherKind: "toolName" },
@@ -14111,116 +14114,491 @@ __name(mapDomainErrorToErrorKind, "mapDomainErrorToErrorKind");
14111
14114
  // packages/cli/src/serve/status.ts
14112
14115
  init_esbuild_shims();
14113
14116
 
14114
- // packages/cli/src/utils/languageUtils.ts
14117
+ // packages/cli/src/config/trustedFolders.ts
14115
14118
  init_esbuild_shims();
14116
- import * as fs from "node:fs";
14119
+ import * as fs3 from "node:fs";
14117
14120
  import * as path2 from "node:path";
14118
- var LLM_OUTPUT_LANGUAGE_RULE_FILENAME = "output-language.md";
14119
- var LLM_OUTPUT_LANGUAGE_MARKER_PREFIX = "qwen-code:llm-output-language:";
14120
- var OUTPUT_LANGUAGE_AUTO = "auto";
14121
- function isAutoLanguage(value) {
14122
- return !value || value.toLowerCase() === OUTPUT_LANGUAGE_AUTO;
14123
- }
14124
- __name(isAutoLanguage, "isAutoLanguage");
14125
- function normalizeOutputLanguage(language) {
14126
- const lowered = language.toLowerCase();
14127
- const fullName = getLanguageNameFromLocale(lowered);
14128
- if (fullName !== "English" || lowered === "en") {
14129
- return fullName;
14130
- }
14131
- return language;
14132
- }
14133
- __name(normalizeOutputLanguage, "normalizeOutputLanguage");
14134
- function resolveOutputLanguage(value) {
14135
- if (isAutoLanguage(value)) {
14136
- const detectedLocale = detectSystemLanguage();
14137
- return getLanguageNameFromLocale(detectedLocale);
14138
- }
14139
- return normalizeOutputLanguage(value);
14140
- }
14141
- __name(resolveOutputLanguage, "resolveOutputLanguage");
14142
- function getOutputLanguageFilePath() {
14143
- return path2.join(
14144
- Storage.getGlobalQwenDir(),
14145
- LLM_OUTPUT_LANGUAGE_RULE_FILENAME
14146
- );
14147
- }
14148
- __name(getOutputLanguageFilePath, "getOutputLanguageFilePath");
14149
- function sanitizeForMarker(language) {
14150
- return language.replace(/[\r\n]/g, " ").replace(/--!?>/g, "").replace(/--/g, "");
14151
- }
14152
- __name(sanitizeForMarker, "sanitizeForMarker");
14153
- function generateOutputLanguageFileContent(language) {
14154
- const safeLanguage = sanitizeForMarker(language);
14155
- return `# Output language preference: ${language}
14156
- <!-- ${LLM_OUTPUT_LANGUAGE_MARKER_PREFIX} ${safeLanguage} -->
14157
-
14158
- ## Rule
14159
- You MUST always respond in **${language}** regardless of the user's input language.
14160
- This is a mandatory requirement, not a preference.
14161
-
14162
- ## Exception
14163
- If the user **explicitly** requests a response in a specific language (e.g., "please reply in English", "\u7528\u4E2D\u6587\u56DE\u7B54"), switch to the user's requested language for the remainder of the conversation.
14121
+ var import_comment_json2 = __toESM(require_src2(), 1);
14122
+ var import_strip_json_comments = __toESM(require_strip_json_comments(), 1);
14164
14123
 
14165
- ## Keep technical artifacts unchanged
14166
- Do **not** translate or rewrite:
14167
- - Code blocks, CLI commands, file paths, stack traces, logs, JSON keys, identifiers
14168
- - Exact quoted text from the user (keep quotes verbatim)
14124
+ // packages/cli/src/utils/commentJson.ts
14125
+ init_esbuild_shims();
14126
+ var import_comment_json = __toESM(require_src2(), 1);
14127
+ import * as fs2 from "node:fs";
14169
14128
 
14170
- ## Tool / system outputs
14171
- Raw tool/system outputs may contain fixed-format English. Preserve them verbatim, and if needed, add a short **${language}** explanation below.
14172
- `;
14173
- }
14174
- __name(generateOutputLanguageFileContent, "generateOutputLanguageFileContent");
14175
- function parseOutputLanguageFromContent(content) {
14176
- const markerRegex = new RegExp(
14177
- String.raw`<!--\s*${LLM_OUTPUT_LANGUAGE_MARKER_PREFIX}\s*(.*?)\s*-->`,
14178
- "i"
14179
- );
14180
- const markerMatch = content.match(markerRegex);
14181
- if (markerMatch?.[1]?.trim()) {
14182
- return markerMatch[1].trim();
14183
- }
14184
- const headingMatch = content.match(
14185
- /^#.*?CRITICAL:\s*(.*?)\s+Output Language Rule\b/im
14186
- );
14187
- if (headingMatch?.[1]?.trim()) {
14188
- return headingMatch[1].trim();
14189
- }
14190
- return null;
14191
- }
14192
- __name(parseOutputLanguageFromContent, "parseOutputLanguageFromContent");
14193
- function readOutputLanguageFromFile() {
14194
- const filePath = getOutputLanguageFilePath();
14195
- if (!fs.existsSync(filePath)) {
14196
- return null;
14197
- }
14129
+ // packages/cli/src/utils/writeWithBackup.ts
14130
+ init_esbuild_shims();
14131
+ import * as fs from "node:fs";
14132
+ function writeWithBackupSync(targetPath, content, options = {}) {
14133
+ const { backupSuffix = ".orig", encoding = "utf-8" } = options;
14134
+ const tempPath = `${targetPath}.tmp`;
14135
+ const backupPath = `${targetPath}${backupSuffix}`;
14136
+ let backupCreated = false;
14198
14137
  try {
14199
- const content = fs.readFileSync(filePath, "utf-8");
14200
- return parseOutputLanguageFromContent(content);
14201
- } catch {
14202
- return null;
14203
- }
14204
- }
14205
- __name(readOutputLanguageFromFile, "readOutputLanguageFromFile");
14206
- function writeOutputLanguageFile(language, targetPath) {
14207
- const filePath = targetPath ?? getOutputLanguageFilePath();
14208
- const content = generateOutputLanguageFileContent(language);
14209
- const dir = path2.dirname(filePath);
14210
- fs.mkdirSync(dir, { recursive: true });
14211
- fs.writeFileSync(filePath, content, "utf-8");
14212
- }
14213
- __name(writeOutputLanguageFile, "writeOutputLanguageFile");
14214
- function updateOutputLanguageFile(settingValue, targetPath) {
14215
- const resolved = resolveOutputLanguage(settingValue);
14216
- writeOutputLanguageFile(resolved, targetPath);
14217
- }
14218
- __name(updateOutputLanguageFile, "updateOutputLanguageFile");
14219
- function writeOutputLanguageAndRegisterPath(settingValue, config) {
14220
- const targetPath = config?.getOutputLanguageFilePath();
14221
- updateOutputLanguageFile(settingValue, targetPath);
14222
- if (!targetPath) {
14223
- config?.setOutputLanguageFilePath(getOutputLanguageFilePath());
14138
+ if (fs.existsSync(tempPath)) {
14139
+ fs.unlinkSync(tempPath);
14140
+ }
14141
+ } catch (_e) {
14142
+ }
14143
+ try {
14144
+ fs.writeFileSync(tempPath, content, { encoding, flush: true });
14145
+ if (fs.existsSync(targetPath)) {
14146
+ const targetStat = fs.statSync(targetPath);
14147
+ if (targetStat.isDirectory()) {
14148
+ try {
14149
+ fs.unlinkSync(tempPath);
14150
+ } catch (_e) {
14151
+ }
14152
+ throw new Error(
14153
+ `Cannot write to '${targetPath}' because it is a directory`
14154
+ );
14155
+ }
14156
+ try {
14157
+ fs.renameSync(targetPath, backupPath);
14158
+ backupCreated = true;
14159
+ } catch (backupError) {
14160
+ try {
14161
+ fs.unlinkSync(tempPath);
14162
+ } catch (_e) {
14163
+ }
14164
+ throw new Error(
14165
+ `Failed to backup existing file: ${backupError instanceof Error ? backupError.message : String(backupError)}`
14166
+ );
14167
+ }
14168
+ }
14169
+ try {
14170
+ fs.renameSync(tempPath, targetPath);
14171
+ if (backupCreated) {
14172
+ try {
14173
+ fs.unlinkSync(backupPath);
14174
+ } catch (_e) {
14175
+ }
14176
+ }
14177
+ } catch (renameError) {
14178
+ let restoreFailedMessage;
14179
+ let backupExisted = false;
14180
+ if (fs.existsSync(backupPath)) {
14181
+ backupExisted = true;
14182
+ try {
14183
+ fs.renameSync(backupPath, targetPath);
14184
+ } catch (restoreError) {
14185
+ restoreFailedMessage = restoreError instanceof Error ? restoreError.message : String(restoreError);
14186
+ }
14187
+ }
14188
+ const writeFailureMessage = renameError instanceof Error ? renameError.message : String(renameError);
14189
+ if (restoreFailedMessage) {
14190
+ throw new Error(
14191
+ `Failed to write file: ${writeFailureMessage}. Automatic restore failed: ${restoreFailedMessage}. Manual recovery may be required using backup file '${backupPath}'.`
14192
+ );
14193
+ }
14194
+ if (backupExisted) {
14195
+ throw new Error(
14196
+ `Failed to write file: ${writeFailureMessage}. Target was automatically restored from backup '${backupPath}'.`
14197
+ );
14198
+ }
14199
+ throw new Error(
14200
+ `Failed to write file: ${writeFailureMessage}. No backup file was available for restoration.`
14201
+ );
14202
+ }
14203
+ } catch (error) {
14204
+ try {
14205
+ if (fs.existsSync(tempPath)) {
14206
+ fs.unlinkSync(tempPath);
14207
+ }
14208
+ } catch (_e) {
14209
+ }
14210
+ throw error;
14211
+ }
14212
+ }
14213
+ __name(writeWithBackupSync, "writeWithBackupSync");
14214
+
14215
+ // packages/cli/src/utils/commentJson.ts
14216
+ function updateSettingsFilePreservingFormat(filePath, updates, sync = false, replacePath = []) {
14217
+ if (!fs2.existsSync(filePath)) {
14218
+ const content = (0, import_comment_json.stringify)(updates, null, 2);
14219
+ writeWithBackupSync(filePath, content);
14220
+ return true;
14221
+ }
14222
+ const originalContent = fs2.readFileSync(filePath, "utf-8");
14223
+ let parsed;
14224
+ try {
14225
+ parsed = (0, import_comment_json.parse)(originalContent);
14226
+ } catch (_error) {
14227
+ writeStderrLine("Error parsing settings file.");
14228
+ writeStderrLine(
14229
+ `Settings file may be corrupted: ${_error instanceof Error ? _error.message : String(_error)}`
14230
+ );
14231
+ return false;
14232
+ }
14233
+ const updatedStructure = applyUpdates(parsed, updates, sync, replacePath);
14234
+ const updatedContent = (0, import_comment_json.stringify)(updatedStructure, null, 2);
14235
+ try {
14236
+ (0, import_comment_json.parse)(updatedContent);
14237
+ } catch (validationError) {
14238
+ writeStderrLine(
14239
+ "Error: Refusing to write settings file \u2014 the result would not be valid JSON."
14240
+ );
14241
+ writeStderrLine(
14242
+ validationError instanceof Error ? validationError.message : String(validationError)
14243
+ );
14244
+ return false;
14245
+ }
14246
+ writeWithBackupSync(filePath, updatedContent);
14247
+ return true;
14248
+ }
14249
+ __name(updateSettingsFilePreservingFormat, "updateSettingsFilePreservingFormat");
14250
+ function applyUpdates(current, updates, sync = false, replacePath = [], currentPath = []) {
14251
+ const result = current;
14252
+ if (sync) {
14253
+ const keysToRemove = Object.keys(result).filter((key) => !(key in updates));
14254
+ for (const key of keysToRemove) {
14255
+ delete result[key];
14256
+ }
14257
+ }
14258
+ for (const key of Object.getOwnPropertyNames(updates)) {
14259
+ if (key === "__proto__" || key === "constructor" || key === "prototype") {
14260
+ continue;
14261
+ }
14262
+ const value = updates[key];
14263
+ const nextPath = [...currentPath, key];
14264
+ const valueIsObject = typeof value === "object" && value !== null && !Array.isArray(value) && Object.keys(value).length > 0;
14265
+ if (pathsEqual(nextPath, replacePath)) {
14266
+ result[key] = valueIsObject ? applyUpdates({}, value) : value;
14267
+ continue;
14268
+ }
14269
+ if (valueIsObject && (typeof result[key] !== "object" || result[key] === null || Array.isArray(result[key]))) {
14270
+ result[key] = applyUpdates(
14271
+ {},
14272
+ value,
14273
+ sync,
14274
+ replacePath,
14275
+ nextPath
14276
+ );
14277
+ } else if (valueIsObject && typeof result[key] === "object" && result[key] !== null && !Array.isArray(result[key])) {
14278
+ result[key] = applyUpdates(
14279
+ result[key],
14280
+ value,
14281
+ sync,
14282
+ replacePath,
14283
+ nextPath
14284
+ );
14285
+ } else {
14286
+ result[key] = value;
14287
+ }
14288
+ }
14289
+ return result;
14290
+ }
14291
+ __name(applyUpdates, "applyUpdates");
14292
+ function pathsEqual(left, right) {
14293
+ return left.length === right.length && left.every((segment, index) => segment === right[index]);
14294
+ }
14295
+ __name(pathsEqual, "pathsEqual");
14296
+
14297
+ // packages/cli/src/config/trustedFolders.ts
14298
+ var TRUSTED_FOLDERS_FILENAME = "trustedFolders.json";
14299
+ function getTrustedFoldersPath() {
14300
+ if (process.env["QWEN_CODE_TRUSTED_FOLDERS_PATH"]) {
14301
+ return process.env["QWEN_CODE_TRUSTED_FOLDERS_PATH"];
14302
+ }
14303
+ return path2.join(Storage.getGlobalQwenDir(), TRUSTED_FOLDERS_FILENAME);
14304
+ }
14305
+ __name(getTrustedFoldersPath, "getTrustedFoldersPath");
14306
+ var LoadedTrustedFolders = class {
14307
+ constructor(user, errors) {
14308
+ this.user = user;
14309
+ this.errors = errors;
14310
+ }
14311
+ static {
14312
+ __name(this, "LoadedTrustedFolders");
14313
+ }
14314
+ get rules() {
14315
+ return Object.entries(this.user.config).map(([path9, trustLevel]) => ({
14316
+ path: path9,
14317
+ trustLevel
14318
+ }));
14319
+ }
14320
+ /**
14321
+ * Returns true or false if the path should be "trusted". This function
14322
+ * should only be invoked when the folder trust setting is active.
14323
+ *
14324
+ * @param location path
14325
+ * @returns
14326
+ */
14327
+ isPathTrusted(location) {
14328
+ const trustedPaths = [];
14329
+ const untrustedPaths = [];
14330
+ for (const rule of this.rules) {
14331
+ switch (rule.trustLevel) {
14332
+ case "TRUST_FOLDER" /* TRUST_FOLDER */:
14333
+ trustedPaths.push(rule.path);
14334
+ break;
14335
+ case "TRUST_PARENT" /* TRUST_PARENT */:
14336
+ trustedPaths.push(path2.dirname(rule.path));
14337
+ break;
14338
+ case "DO_NOT_TRUST" /* DO_NOT_TRUST */:
14339
+ untrustedPaths.push(rule.path);
14340
+ break;
14341
+ default:
14342
+ break;
14343
+ }
14344
+ }
14345
+ for (const trustedPath of trustedPaths) {
14346
+ if (isWithinRoot(location, trustedPath)) {
14347
+ return true;
14348
+ }
14349
+ }
14350
+ for (const untrustedPath of untrustedPaths) {
14351
+ if (path2.normalize(location) === path2.normalize(untrustedPath)) {
14352
+ return false;
14353
+ }
14354
+ }
14355
+ return void 0;
14356
+ }
14357
+ setValue(path9, trustLevel) {
14358
+ this.user.config[path9] = trustLevel;
14359
+ saveTrustedFolders(this.user);
14360
+ }
14361
+ };
14362
+ var loadedTrustedFolders;
14363
+ function loadTrustedFolders() {
14364
+ if (loadedTrustedFolders) {
14365
+ return loadedTrustedFolders;
14366
+ }
14367
+ const errors = [];
14368
+ let userConfig = {};
14369
+ const userPath = getTrustedFoldersPath();
14370
+ try {
14371
+ if (fs3.existsSync(userPath)) {
14372
+ const content = fs3.readFileSync(userPath, "utf-8");
14373
+ const parsed = JSON.parse((0, import_strip_json_comments.default)(content));
14374
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
14375
+ errors.push({
14376
+ message: "Trusted folders file is not a valid JSON object.",
14377
+ path: userPath
14378
+ });
14379
+ } else {
14380
+ userConfig = parsed;
14381
+ }
14382
+ }
14383
+ } catch (error) {
14384
+ errors.push({
14385
+ message: getErrorMessage(error),
14386
+ path: userPath
14387
+ });
14388
+ }
14389
+ loadedTrustedFolders = new LoadedTrustedFolders(
14390
+ { path: userPath, config: userConfig },
14391
+ errors
14392
+ );
14393
+ return loadedTrustedFolders;
14394
+ }
14395
+ __name(loadTrustedFolders, "loadTrustedFolders");
14396
+ function saveTrustedFolders(trustedFoldersFile) {
14397
+ try {
14398
+ const dirPath = path2.dirname(trustedFoldersFile.path);
14399
+ if (!fs3.existsSync(dirPath)) {
14400
+ fs3.mkdirSync(dirPath, { recursive: true });
14401
+ }
14402
+ let content = (0, import_comment_json2.stringify)(trustedFoldersFile.config, null, 2);
14403
+ if (fs3.existsSync(trustedFoldersFile.path)) {
14404
+ try {
14405
+ const originalContent = fs3.readFileSync(
14406
+ trustedFoldersFile.path,
14407
+ "utf-8"
14408
+ );
14409
+ const parsed = (0, import_comment_json2.parse)(originalContent);
14410
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed) || parsed instanceof String || parsed instanceof Number || parsed instanceof Boolean) {
14411
+ throw new Error("trusted folders file is not a JSON object");
14412
+ }
14413
+ const updated = applyUpdates(
14414
+ parsed,
14415
+ trustedFoldersFile.config,
14416
+ true
14417
+ );
14418
+ const preservedContent = (0, import_comment_json2.stringify)(updated, null, 2);
14419
+ (0, import_comment_json2.parse)(preservedContent);
14420
+ content = preservedContent;
14421
+ } catch (error) {
14422
+ writeStderrLine(
14423
+ `Falling back to clean rewrite for trusted folders: ${error instanceof Error ? error.message : String(error)}`
14424
+ );
14425
+ }
14426
+ }
14427
+ atomicWriteFileSync(
14428
+ trustedFoldersFile.path,
14429
+ content,
14430
+ // noFollow: refuse to follow any pre-placed symlink at the
14431
+ // config path — a redirected write could either leak the
14432
+ // trusted-folder list to an attacker target or leave the user's
14433
+ // real config silently stale. Matches the credential write
14434
+ // sites' security posture (sharedTokenManager, oauth-token-storage,
14435
+ // file-token-storage all use noFollow:true).
14436
+ { encoding: "utf-8", mode: 384, forceMode: true, noFollow: true }
14437
+ );
14438
+ } catch (error) {
14439
+ writeStderrLine("Error saving trusted folders file.");
14440
+ writeStderrLine(error instanceof Error ? error.message : String(error));
14441
+ }
14442
+ }
14443
+ __name(saveTrustedFolders, "saveTrustedFolders");
14444
+ function isFolderTrustEnabled(settings) {
14445
+ const folderTrustSetting = settings.security?.folderTrust?.enabled ?? false;
14446
+ return folderTrustSetting;
14447
+ }
14448
+ __name(isFolderTrustEnabled, "isFolderTrustEnabled");
14449
+ function getWorkspaceTrustFromLocalConfig(trustConfig) {
14450
+ const folders = loadTrustedFolders();
14451
+ if (trustConfig) {
14452
+ folders.user.config = trustConfig;
14453
+ }
14454
+ if (folders.errors.length > 0) {
14455
+ const errorMessages = folders.errors.map(
14456
+ (error) => `Error in ${error.path}: ${error.message}`
14457
+ );
14458
+ throw new FatalConfigError(
14459
+ `${errorMessages.join("\n")}
14460
+ Please fix the configuration file and try again.`
14461
+ );
14462
+ }
14463
+ const isTrusted = folders.isPathTrusted(process.cwd());
14464
+ return {
14465
+ isTrusted,
14466
+ source: isTrusted !== void 0 ? "file" : void 0
14467
+ };
14468
+ }
14469
+ __name(getWorkspaceTrustFromLocalConfig, "getWorkspaceTrustFromLocalConfig");
14470
+ function isWorkspaceTrusted(settings, trustConfig) {
14471
+ if (!isFolderTrustEnabled(settings)) {
14472
+ return { isTrusted: true, source: void 0 };
14473
+ }
14474
+ const ideTrust = ideContextStore.get()?.workspaceState?.isTrusted;
14475
+ if (ideTrust !== void 0) {
14476
+ return { isTrusted: ideTrust, source: "ide" };
14477
+ }
14478
+ return getWorkspaceTrustFromLocalConfig(trustConfig);
14479
+ }
14480
+ __name(isWorkspaceTrusted, "isWorkspaceTrusted");
14481
+
14482
+ // packages/cli/src/utils/languageUtils.ts
14483
+ init_esbuild_shims();
14484
+ import * as fs4 from "node:fs";
14485
+ import * as path3 from "node:path";
14486
+ var LLM_OUTPUT_LANGUAGE_RULE_FILENAME = "output-language.md";
14487
+ var LLM_OUTPUT_LANGUAGE_MARKER_PREFIX = "qwen-code:llm-output-language:";
14488
+ var OUTPUT_LANGUAGE_AUTO = "auto";
14489
+ function isAutoLanguage(value) {
14490
+ return !value || value.toLowerCase() === OUTPUT_LANGUAGE_AUTO;
14491
+ }
14492
+ __name(isAutoLanguage, "isAutoLanguage");
14493
+ function normalizeOutputLanguage(language) {
14494
+ const normalized = language.trim().replace(/_/g, "-").toLowerCase();
14495
+ const knownLanguageName = SUPPORTED_LANGUAGES.find(
14496
+ (supportedLanguage) => supportedLanguage.fullName.toLowerCase() === normalized
14497
+ );
14498
+ if (knownLanguageName) {
14499
+ return knownLanguageName.fullName;
14500
+ }
14501
+ const knownLocaleCode = SUPPORTED_LANGUAGES.some((supportedLanguage) => {
14502
+ const code = supportedLanguage.code.toLowerCase();
14503
+ const id = supportedLanguage.id.toLowerCase();
14504
+ return normalized === code || normalized === id || normalized.startsWith(`${code}-`) || normalized.startsWith(`${id}-`) || normalized.startsWith(`${code}.`) || normalized.startsWith(`${id}.`) || normalized.startsWith(`${code}@`) || normalized.startsWith(`${id}@`);
14505
+ });
14506
+ if (!knownLocaleCode) {
14507
+ return language;
14508
+ }
14509
+ return getLanguageNameFromLocale(normalized);
14510
+ }
14511
+ __name(normalizeOutputLanguage, "normalizeOutputLanguage");
14512
+ function resolveOutputLanguage(value) {
14513
+ if (isAutoLanguage(value)) {
14514
+ const detectedLocale = detectSystemLanguage();
14515
+ return getLanguageNameFromLocale(detectedLocale);
14516
+ }
14517
+ return normalizeOutputLanguage(value);
14518
+ }
14519
+ __name(resolveOutputLanguage, "resolveOutputLanguage");
14520
+ function getOutputLanguageFilePath() {
14521
+ return path3.join(
14522
+ Storage.getGlobalQwenDir(),
14523
+ LLM_OUTPUT_LANGUAGE_RULE_FILENAME
14524
+ );
14525
+ }
14526
+ __name(getOutputLanguageFilePath, "getOutputLanguageFilePath");
14527
+ function sanitizeForMarker(language) {
14528
+ return language.replace(/[\r\n]/g, " ").replace(/--!?>/g, "").replace(/--/g, "");
14529
+ }
14530
+ __name(sanitizeForMarker, "sanitizeForMarker");
14531
+ function generateOutputLanguageFileContent(language) {
14532
+ const safeLanguage = sanitizeForMarker(language);
14533
+ return `# Output language preference: ${language}
14534
+ <!-- ${LLM_OUTPUT_LANGUAGE_MARKER_PREFIX} ${safeLanguage} -->
14535
+
14536
+ ## Rule
14537
+ You MUST always respond in **${language}** regardless of the user's input language.
14538
+ This is a mandatory requirement, not a preference.
14539
+
14540
+ ## Exception
14541
+ If the user **explicitly** requests a response in a specific language (e.g., "please reply in English", "\u7528\u4E2D\u6587\u56DE\u7B54"), switch to the user's requested language for the remainder of the conversation.
14542
+
14543
+ ## Keep technical artifacts unchanged
14544
+ Do **not** translate or rewrite:
14545
+ - Code blocks, CLI commands, file paths, stack traces, logs, JSON keys, identifiers
14546
+ - Exact quoted text from the user (keep quotes verbatim)
14547
+
14548
+ ## Tool / system outputs
14549
+ Raw tool/system outputs may contain fixed-format English. Preserve them verbatim, and if needed, add a short **${language}** explanation below.
14550
+ `;
14551
+ }
14552
+ __name(generateOutputLanguageFileContent, "generateOutputLanguageFileContent");
14553
+ function parseOutputLanguageFromContent(content) {
14554
+ const markerRegex = new RegExp(
14555
+ String.raw`<!--\s*${LLM_OUTPUT_LANGUAGE_MARKER_PREFIX}\s*(.*?)\s*-->`,
14556
+ "i"
14557
+ );
14558
+ const markerMatch = content.match(markerRegex);
14559
+ if (markerMatch?.[1]?.trim()) {
14560
+ return markerMatch[1].trim();
14561
+ }
14562
+ const headingMatch = content.match(
14563
+ /^#.*?CRITICAL:\s*(.*?)\s+Output Language Rule\b/im
14564
+ );
14565
+ if (headingMatch?.[1]?.trim()) {
14566
+ return headingMatch[1].trim();
14567
+ }
14568
+ return null;
14569
+ }
14570
+ __name(parseOutputLanguageFromContent, "parseOutputLanguageFromContent");
14571
+ function readOutputLanguageFromFile() {
14572
+ const filePath = getOutputLanguageFilePath();
14573
+ if (!fs4.existsSync(filePath)) {
14574
+ return null;
14575
+ }
14576
+ try {
14577
+ const content = fs4.readFileSync(filePath, "utf-8");
14578
+ return parseOutputLanguageFromContent(content);
14579
+ } catch {
14580
+ return null;
14581
+ }
14582
+ }
14583
+ __name(readOutputLanguageFromFile, "readOutputLanguageFromFile");
14584
+ function writeOutputLanguageFile(language, targetPath) {
14585
+ const filePath = targetPath ?? getOutputLanguageFilePath();
14586
+ const content = generateOutputLanguageFileContent(language);
14587
+ const dir = path3.dirname(filePath);
14588
+ fs4.mkdirSync(dir, { recursive: true });
14589
+ fs4.writeFileSync(filePath, content, "utf-8");
14590
+ }
14591
+ __name(writeOutputLanguageFile, "writeOutputLanguageFile");
14592
+ function updateOutputLanguageFile(settingValue, targetPath) {
14593
+ const resolved = resolveOutputLanguage(settingValue);
14594
+ writeOutputLanguageFile(resolved, targetPath);
14595
+ }
14596
+ __name(updateOutputLanguageFile, "updateOutputLanguageFile");
14597
+ function writeOutputLanguageAndRegisterPath(settingValue, config) {
14598
+ const targetPath = config?.getOutputLanguageFilePath();
14599
+ updateOutputLanguageFile(settingValue, targetPath);
14600
+ if (!targetPath) {
14601
+ config?.setOutputLanguageFilePath(getOutputLanguageFilePath());
14224
14602
  }
14225
14603
  }
14226
14604
  __name(writeOutputLanguageAndRegisterPath, "writeOutputLanguageAndRegisterPath");
@@ -15104,194 +15482,30 @@ var DefaultDark = new Theme(
15104
15482
  color: darkTheme.AccentYellow
15105
15483
  },
15106
15484
  "hljs-selector-id": {
15107
- color: darkTheme.AccentYellow
15108
- },
15109
- "hljs-selector-class": {
15110
- color: darkTheme.AccentYellow
15111
- },
15112
- "hljs-selector-attr": {
15113
- color: darkTheme.AccentYellow
15114
- },
15115
- "hljs-selector-pseudo": {
15116
- color: darkTheme.AccentYellow
15117
- },
15118
- "hljs-addition": {
15119
- backgroundColor: "#144212",
15120
- display: "inline-block",
15121
- width: "100%"
15122
- },
15123
- "hljs-deletion": {
15124
- backgroundColor: "#600",
15125
- display: "inline-block",
15126
- width: "100%"
15127
- }
15128
- },
15129
- darkTheme
15130
- );
15131
-
15132
- // packages/cli/src/config/trustedFolders.ts
15133
- init_esbuild_shims();
15134
- import * as fs2 from "node:fs";
15135
- import * as path3 from "node:path";
15136
- var import_strip_json_comments = __toESM(require_strip_json_comments(), 1);
15137
- var TRUSTED_FOLDERS_FILENAME = "trustedFolders.json";
15138
- function getTrustedFoldersPath() {
15139
- if (process.env["QWEN_CODE_TRUSTED_FOLDERS_PATH"]) {
15140
- return process.env["QWEN_CODE_TRUSTED_FOLDERS_PATH"];
15141
- }
15142
- return path3.join(Storage.getGlobalQwenDir(), TRUSTED_FOLDERS_FILENAME);
15143
- }
15144
- __name(getTrustedFoldersPath, "getTrustedFoldersPath");
15145
- var LoadedTrustedFolders = class {
15146
- constructor(user, errors) {
15147
- this.user = user;
15148
- this.errors = errors;
15149
- }
15150
- static {
15151
- __name(this, "LoadedTrustedFolders");
15152
- }
15153
- get rules() {
15154
- return Object.entries(this.user.config).map(([path9, trustLevel]) => ({
15155
- path: path9,
15156
- trustLevel
15157
- }));
15158
- }
15159
- /**
15160
- * Returns true or false if the path should be "trusted". This function
15161
- * should only be invoked when the folder trust setting is active.
15162
- *
15163
- * @param location path
15164
- * @returns
15165
- */
15166
- isPathTrusted(location) {
15167
- const trustedPaths = [];
15168
- const untrustedPaths = [];
15169
- for (const rule of this.rules) {
15170
- switch (rule.trustLevel) {
15171
- case "TRUST_FOLDER" /* TRUST_FOLDER */:
15172
- trustedPaths.push(rule.path);
15173
- break;
15174
- case "TRUST_PARENT" /* TRUST_PARENT */:
15175
- trustedPaths.push(path3.dirname(rule.path));
15176
- break;
15177
- case "DO_NOT_TRUST" /* DO_NOT_TRUST */:
15178
- untrustedPaths.push(rule.path);
15179
- break;
15180
- default:
15181
- break;
15182
- }
15183
- }
15184
- for (const trustedPath of trustedPaths) {
15185
- if (isWithinRoot(location, trustedPath)) {
15186
- return true;
15187
- }
15188
- }
15189
- for (const untrustedPath of untrustedPaths) {
15190
- if (path3.normalize(location) === path3.normalize(untrustedPath)) {
15191
- return false;
15192
- }
15193
- }
15194
- return void 0;
15195
- }
15196
- setValue(path9, trustLevel) {
15197
- this.user.config[path9] = trustLevel;
15198
- saveTrustedFolders(this.user);
15199
- }
15200
- };
15201
- var loadedTrustedFolders;
15202
- function loadTrustedFolders() {
15203
- if (loadedTrustedFolders) {
15204
- return loadedTrustedFolders;
15205
- }
15206
- const errors = [];
15207
- let userConfig = {};
15208
- const userPath = getTrustedFoldersPath();
15209
- try {
15210
- if (fs2.existsSync(userPath)) {
15211
- const content = fs2.readFileSync(userPath, "utf-8");
15212
- const parsed = JSON.parse((0, import_strip_json_comments.default)(content));
15213
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
15214
- errors.push({
15215
- message: "Trusted folders file is not a valid JSON object.",
15216
- path: userPath
15217
- });
15218
- } else {
15219
- userConfig = parsed;
15220
- }
15221
- }
15222
- } catch (error) {
15223
- errors.push({
15224
- message: getErrorMessage(error),
15225
- path: userPath
15226
- });
15227
- }
15228
- loadedTrustedFolders = new LoadedTrustedFolders(
15229
- { path: userPath, config: userConfig },
15230
- errors
15231
- );
15232
- return loadedTrustedFolders;
15233
- }
15234
- __name(loadTrustedFolders, "loadTrustedFolders");
15235
- function saveTrustedFolders(trustedFoldersFile) {
15236
- try {
15237
- const dirPath = path3.dirname(trustedFoldersFile.path);
15238
- if (!fs2.existsSync(dirPath)) {
15239
- fs2.mkdirSync(dirPath, { recursive: true });
15240
- }
15241
- atomicWriteFileSync(
15242
- trustedFoldersFile.path,
15243
- JSON.stringify(trustedFoldersFile.config, null, 2),
15244
- // noFollow: refuse to follow any pre-placed symlink at the
15245
- // config path — a redirected write could either leak the
15246
- // trusted-folder list to an attacker target or leave the user's
15247
- // real config silently stale. Matches the credential write
15248
- // sites' security posture (sharedTokenManager, oauth-token-storage,
15249
- // file-token-storage all use noFollow:true).
15250
- { encoding: "utf-8", mode: 384, forceMode: true, noFollow: true }
15251
- );
15252
- } catch (error) {
15253
- writeStderrLine("Error saving trusted folders file.");
15254
- writeStderrLine(error instanceof Error ? error.message : String(error));
15255
- }
15256
- }
15257
- __name(saveTrustedFolders, "saveTrustedFolders");
15258
- function isFolderTrustEnabled(settings) {
15259
- const folderTrustSetting = settings.security?.folderTrust?.enabled ?? false;
15260
- return folderTrustSetting;
15261
- }
15262
- __name(isFolderTrustEnabled, "isFolderTrustEnabled");
15263
- function getWorkspaceTrustFromLocalConfig(trustConfig) {
15264
- const folders = loadTrustedFolders();
15265
- if (trustConfig) {
15266
- folders.user.config = trustConfig;
15267
- }
15268
- if (folders.errors.length > 0) {
15269
- const errorMessages = folders.errors.map(
15270
- (error) => `Error in ${error.path}: ${error.message}`
15271
- );
15272
- throw new FatalConfigError(
15273
- `${errorMessages.join("\n")}
15274
- Please fix the configuration file and try again.`
15275
- );
15276
- }
15277
- const isTrusted = folders.isPathTrusted(process.cwd());
15278
- return {
15279
- isTrusted,
15280
- source: isTrusted !== void 0 ? "file" : void 0
15281
- };
15282
- }
15283
- __name(getWorkspaceTrustFromLocalConfig, "getWorkspaceTrustFromLocalConfig");
15284
- function isWorkspaceTrusted(settings, trustConfig) {
15285
- if (!isFolderTrustEnabled(settings)) {
15286
- return { isTrusted: true, source: void 0 };
15287
- }
15288
- const ideTrust = ideContextStore.get()?.workspaceState?.isTrusted;
15289
- if (ideTrust !== void 0) {
15290
- return { isTrusted: ideTrust, source: "ide" };
15291
- }
15292
- return getWorkspaceTrustFromLocalConfig(trustConfig);
15293
- }
15294
- __name(isWorkspaceTrusted, "isWorkspaceTrusted");
15485
+ color: darkTheme.AccentYellow
15486
+ },
15487
+ "hljs-selector-class": {
15488
+ color: darkTheme.AccentYellow
15489
+ },
15490
+ "hljs-selector-attr": {
15491
+ color: darkTheme.AccentYellow
15492
+ },
15493
+ "hljs-selector-pseudo": {
15494
+ color: darkTheme.AccentYellow
15495
+ },
15496
+ "hljs-addition": {
15497
+ backgroundColor: "#144212",
15498
+ display: "inline-block",
15499
+ width: "100%"
15500
+ },
15501
+ "hljs-deletion": {
15502
+ backgroundColor: "#600",
15503
+ display: "inline-block",
15504
+ width: "100%"
15505
+ }
15506
+ },
15507
+ darkTheme
15508
+ );
15295
15509
 
15296
15510
  // packages/cli/src/config/modelProvidersScope.ts
15297
15511
  init_esbuild_shims();
@@ -15783,9 +15997,9 @@ var SETTINGS_SCHEMA = {
15783
15997
  label: "Show Status in Title",
15784
15998
  category: "UI",
15785
15999
  requiresRestart: false,
15786
- default: false,
15787
- description: "Show Qwen Code status and thoughts in the terminal window title",
15788
- showInDialog: false
16000
+ default: true,
16001
+ description: "Show Qwen Code session name and status in the terminal window title",
16002
+ showInDialog: true
15789
16003
  },
15790
16004
  hideTips: {
15791
16005
  type: "boolean",
@@ -15796,6 +16010,26 @@ var SETTINGS_SCHEMA = {
15796
16010
  description: "Hide helpful tips in the UI",
15797
16011
  showInDialog: true
15798
16012
  },
16013
+ history: {
16014
+ type: "object",
16015
+ label: "History",
16016
+ category: "UI",
16017
+ requiresRestart: false,
16018
+ default: {},
16019
+ description: "History display settings.",
16020
+ showInDialog: false,
16021
+ properties: {
16022
+ collapseOnResume: {
16023
+ type: "boolean",
16024
+ label: "Collapse On Resume",
16025
+ category: "UI",
16026
+ requiresRestart: false,
16027
+ default: false,
16028
+ description: "Whether to collapse history by default when resuming a session.",
16029
+ showInDialog: false
16030
+ }
16031
+ }
16032
+ },
15799
16033
  showLineNumbers: {
15800
16034
  type: "boolean",
15801
16035
  label: "Show Line Numbers in Code",
@@ -15836,6 +16070,15 @@ var SETTINGS_SCHEMA = {
15836
16070
  description: "Custom witty phrases to display during loading.",
15837
16071
  showInDialog: false
15838
16072
  },
16073
+ showResponseTokensPerSecond: {
16074
+ type: "boolean",
16075
+ label: "Show Response Tokens Per Second",
16076
+ category: "UI",
16077
+ requiresRestart: true,
16078
+ default: false,
16079
+ description: "Show a live tokens/sec estimate next to the response token counter while the model is streaming. Takes effect in the next session.",
16080
+ showInDialog: true
16081
+ },
15839
16082
  enableWelcomeBack: {
15840
16083
  type: "boolean",
15841
16084
  label: "Show Welcome Back Dialog",
@@ -15859,8 +16102,8 @@ var SETTINGS_SCHEMA = {
15859
16102
  label: "Enable Follow-up Suggestions",
15860
16103
  category: "UI",
15861
16104
  requiresRestart: false,
15862
- default: false,
15863
- description: "Show context-aware follow-up suggestions after task completion. Press Tab or Right Arrow to accept, Enter to accept and submit.",
16105
+ default: true,
16106
+ description: "Show context-aware follow-up suggestions after task completion. Press Tab, Right Arrow, or Enter to accept into the input buffer.",
15864
16107
  showInDialog: true
15865
16108
  },
15866
16109
  enableCacheSharing: {
@@ -16179,6 +16422,15 @@ var SETTINGS_SCHEMA = {
16179
16422
  description: "The model to use for conversations.",
16180
16423
  showInDialog: false
16181
16424
  },
16425
+ baseUrl: {
16426
+ type: "string",
16427
+ label: "Model Base URL",
16428
+ category: "Model",
16429
+ requiresRestart: false,
16430
+ default: void 0,
16431
+ description: "Base URL paired with model.name; disambiguates which provider to use when multiple modelProviders entries share the same model id.",
16432
+ showInDialog: false
16433
+ },
16182
16434
  maxSessionTurns: {
16183
16435
  type: "number",
16184
16436
  label: "Max Session Turns",
@@ -16233,6 +16485,15 @@ var SETTINGS_SCHEMA = {
16233
16485
  description: "Skip the next speaker check.",
16234
16486
  showInDialog: false
16235
16487
  },
16488
+ skipWorkflowUsageWarning: {
16489
+ type: "boolean",
16490
+ label: "Skip Workflow Usage Warning",
16491
+ category: "Model",
16492
+ requiresRestart: false,
16493
+ default: false,
16494
+ description: "Suppress the one-time Workflow tool usage banner that describes the QWEN_CODE_MAX_TOKENS_PER_WORKFLOW env knob. The banner fires at most once per session regardless of this setting.",
16495
+ showInDialog: false
16496
+ },
16236
16497
  skipLoopDetection: {
16237
16498
  type: "boolean",
16238
16499
  label: "Skip Loop Detection",
@@ -16318,6 +16579,20 @@ var SETTINGS_SCHEMA = {
16318
16579
  parentKey: "generationConfig",
16319
16580
  showInDialog: false
16320
16581
  },
16582
+ toolResultContentFormat: {
16583
+ type: "enum",
16584
+ label: "Tool Result Content Format",
16585
+ category: "Generation Configuration",
16586
+ requiresRestart: false,
16587
+ default: "parts",
16588
+ description: 'Controls how text-only tool results are serialized in OpenAI-compatible requests. Use "parts" for the default content-part array shape. Use "string" only for legacy OpenAI-compatible runtimes whose tool templates ignore text content parts (for example older GLM-5.1 vLLM/SGLang templates; QwenLM/qwen-code#3361). Tool-returned media is still handled by splitToolMedia.',
16589
+ parentKey: "generationConfig",
16590
+ showInDialog: false,
16591
+ options: [
16592
+ { value: "parts", label: "Content Parts (Default)" },
16593
+ { value: "string", label: "String" }
16594
+ ]
16595
+ },
16321
16596
  schemaCompliance: {
16322
16597
  type: "enum",
16323
16598
  label: "Tool Schema Compliance",
@@ -16370,17 +16645,27 @@ var SETTINGS_SCHEMA = {
16370
16645
  category: "Context",
16371
16646
  requiresRestart: false,
16372
16647
  default: void 0,
16373
- description: "The name of the context file.",
16374
- showInDialog: false
16648
+ description: "The name of the context file or files.",
16649
+ showInDialog: false,
16650
+ jsonSchemaOverride: {
16651
+ anyOf: [
16652
+ { type: "string" },
16653
+ { type: "array", items: { type: "string" } }
16654
+ ]
16655
+ }
16375
16656
  },
16376
16657
  importFormat: {
16377
- type: "string",
16658
+ type: "enum",
16378
16659
  label: "Memory Import Format",
16379
16660
  category: "Context",
16380
16661
  requiresRestart: false,
16381
16662
  default: void 0,
16382
16663
  description: "The format to use when importing memory.",
16383
- showInDialog: false
16664
+ showInDialog: false,
16665
+ options: [
16666
+ { value: "tree", label: "Tree" },
16667
+ { value: "flat", label: "Flat" }
16668
+ ]
16384
16669
  },
16385
16670
  includeDirectories: {
16386
16671
  type: "array",
@@ -16757,7 +17042,10 @@ var SETTINGS_SCHEMA = {
16757
17042
  requiresRestart: true,
16758
17043
  default: void 0,
16759
17044
  description: "Sandbox execution environment (can be a boolean or a path string).",
16760
- showInDialog: false
17045
+ showInDialog: false,
17046
+ jsonSchemaOverride: {
17047
+ anyOf: [{ type: "boolean" }, { type: "string" }]
17048
+ }
16761
17049
  },
16762
17050
  sandboxImage: {
16763
17051
  type: "string",
@@ -17189,13 +17477,17 @@ var SETTINGS_SCHEMA = {
17189
17477
  showInDialog: false
17190
17478
  },
17191
17479
  dnsResolutionOrder: {
17192
- type: "string",
17480
+ type: "enum",
17193
17481
  label: "DNS Resolution Order",
17194
17482
  category: "Advanced",
17195
17483
  requiresRestart: true,
17196
17484
  default: void 0,
17197
17485
  description: "The DNS resolution order.",
17198
- showInDialog: false
17486
+ showInDialog: false,
17487
+ options: [
17488
+ { value: "ipv4first", label: "IPv4 First" },
17489
+ { value: "verbatim", label: "Verbatim" }
17490
+ ]
17199
17491
  },
17200
17492
  excludedEnvVars: {
17201
17493
  type: "array",
@@ -17633,7 +17925,7 @@ __name(resolveEnvVarsInObjectInternal, "resolveEnvVarsInObjectInternal");
17633
17925
 
17634
17926
  // packages/cli/src/utils/settingsUtils.ts
17635
17927
  init_esbuild_shims();
17636
- import * as fs3 from "node:fs";
17928
+ import * as fs5 from "node:fs";
17637
17929
  function flattenSchema(schema, prefix = "") {
17638
17930
  let result = {};
17639
17931
  for (const key in schema) {
@@ -17887,9 +18179,9 @@ function isDefaultValue(key, settings) {
17887
18179
  __name(isDefaultValue, "isDefaultValue");
17888
18180
  function backupSettingsFile(filePath) {
17889
18181
  try {
17890
- if (fs3.existsSync(filePath)) {
18182
+ if (fs5.existsSync(filePath)) {
17891
18183
  const backupPath = `${filePath}.orig`;
17892
- fs3.copyFileSync(filePath, backupPath);
18184
+ fs5.copyFileSync(filePath, backupPath);
17893
18185
  return true;
17894
18186
  }
17895
18187
  } catch (_e) {
@@ -17900,9 +18192,9 @@ __name(backupSettingsFile, "backupSettingsFile");
17900
18192
  function restoreSettingsFromBackup(filePath) {
17901
18193
  try {
17902
18194
  const backupPath = `${filePath}.orig`;
17903
- if (fs3.existsSync(backupPath)) {
17904
- fs3.copyFileSync(backupPath, filePath);
17905
- fs3.unlinkSync(backupPath);
18195
+ if (fs5.existsSync(backupPath)) {
18196
+ fs5.copyFileSync(backupPath, filePath);
18197
+ fs5.unlinkSync(backupPath);
17906
18198
  return true;
17907
18199
  }
17908
18200
  } catch (err) {
@@ -17917,8 +18209,8 @@ __name(restoreSettingsFromBackup, "restoreSettingsFromBackup");
17917
18209
  function cleanupSettingsBackup(filePath) {
17918
18210
  try {
17919
18211
  const backupPath = `${filePath}.orig`;
17920
- if (fs3.existsSync(backupPath)) {
17921
- fs3.unlinkSync(backupPath);
18212
+ if (fs5.existsSync(backupPath)) {
18213
+ fs5.unlinkSync(backupPath);
17922
18214
  }
17923
18215
  } catch (_e) {
17924
18216
  }
@@ -17985,171 +18277,6 @@ function customDeepMerge(getMergeStrategyForPath2, ...sources) {
17985
18277
  }
17986
18278
  __name(customDeepMerge, "customDeepMerge");
17987
18279
 
17988
- // packages/cli/src/utils/commentJson.ts
17989
- init_esbuild_shims();
17990
- var import_comment_json = __toESM(require_src2(), 1);
17991
- import * as fs5 from "node:fs";
17992
-
17993
- // packages/cli/src/utils/writeWithBackup.ts
17994
- init_esbuild_shims();
17995
- import * as fs4 from "node:fs";
17996
- function writeWithBackupSync(targetPath, content, options = {}) {
17997
- const { backupSuffix = ".orig", encoding = "utf-8" } = options;
17998
- const tempPath = `${targetPath}.tmp`;
17999
- const backupPath = `${targetPath}${backupSuffix}`;
18000
- try {
18001
- if (fs4.existsSync(tempPath)) {
18002
- fs4.unlinkSync(tempPath);
18003
- }
18004
- } catch (_e) {
18005
- }
18006
- try {
18007
- fs4.writeFileSync(tempPath, content, { encoding, flush: true });
18008
- if (fs4.existsSync(targetPath)) {
18009
- const targetStat = fs4.statSync(targetPath);
18010
- if (targetStat.isDirectory()) {
18011
- try {
18012
- fs4.unlinkSync(tempPath);
18013
- } catch (_e) {
18014
- }
18015
- throw new Error(
18016
- `Cannot write to '${targetPath}' because it is a directory`
18017
- );
18018
- }
18019
- try {
18020
- fs4.renameSync(targetPath, backupPath);
18021
- } catch (backupError) {
18022
- try {
18023
- fs4.unlinkSync(tempPath);
18024
- } catch (_e) {
18025
- }
18026
- throw new Error(
18027
- `Failed to backup existing file: ${backupError instanceof Error ? backupError.message : String(backupError)}`
18028
- );
18029
- }
18030
- }
18031
- try {
18032
- fs4.renameSync(tempPath, targetPath);
18033
- } catch (renameError) {
18034
- let restoreFailedMessage;
18035
- let backupExisted = false;
18036
- if (fs4.existsSync(backupPath)) {
18037
- backupExisted = true;
18038
- try {
18039
- fs4.renameSync(backupPath, targetPath);
18040
- } catch (restoreError) {
18041
- restoreFailedMessage = restoreError instanceof Error ? restoreError.message : String(restoreError);
18042
- }
18043
- }
18044
- const writeFailureMessage = renameError instanceof Error ? renameError.message : String(renameError);
18045
- if (restoreFailedMessage) {
18046
- throw new Error(
18047
- `Failed to write file: ${writeFailureMessage}. Automatic restore failed: ${restoreFailedMessage}. Manual recovery may be required using backup file '${backupPath}'.`
18048
- );
18049
- }
18050
- if (backupExisted) {
18051
- throw new Error(
18052
- `Failed to write file: ${writeFailureMessage}. Target was automatically restored from backup '${backupPath}'.`
18053
- );
18054
- }
18055
- throw new Error(
18056
- `Failed to write file: ${writeFailureMessage}. No backup file was available for restoration.`
18057
- );
18058
- }
18059
- } catch (error) {
18060
- try {
18061
- if (fs4.existsSync(tempPath)) {
18062
- fs4.unlinkSync(tempPath);
18063
- }
18064
- } catch (_e) {
18065
- }
18066
- throw error;
18067
- }
18068
- }
18069
- __name(writeWithBackupSync, "writeWithBackupSync");
18070
-
18071
- // packages/cli/src/utils/commentJson.ts
18072
- function updateSettingsFilePreservingFormat(filePath, updates, sync = false, replacePath = []) {
18073
- if (!fs5.existsSync(filePath)) {
18074
- const content = (0, import_comment_json.stringify)(updates, null, 2);
18075
- writeWithBackupSync(filePath, content);
18076
- return true;
18077
- }
18078
- const originalContent = fs5.readFileSync(filePath, "utf-8");
18079
- let parsed;
18080
- try {
18081
- parsed = (0, import_comment_json.parse)(originalContent);
18082
- } catch (_error) {
18083
- writeStderrLine("Error parsing settings file.");
18084
- writeStderrLine(
18085
- `Settings file may be corrupted: ${_error instanceof Error ? _error.message : String(_error)}`
18086
- );
18087
- return false;
18088
- }
18089
- const updatedStructure = applyUpdates(parsed, updates, sync, replacePath);
18090
- const updatedContent = (0, import_comment_json.stringify)(updatedStructure, null, 2);
18091
- try {
18092
- (0, import_comment_json.parse)(updatedContent);
18093
- } catch (validationError) {
18094
- writeStderrLine(
18095
- "Error: Refusing to write settings file \u2014 the result would not be valid JSON."
18096
- );
18097
- writeStderrLine(
18098
- validationError instanceof Error ? validationError.message : String(validationError)
18099
- );
18100
- return false;
18101
- }
18102
- writeWithBackupSync(filePath, updatedContent);
18103
- return true;
18104
- }
18105
- __name(updateSettingsFilePreservingFormat, "updateSettingsFilePreservingFormat");
18106
- function applyUpdates(current, updates, sync = false, replacePath = [], currentPath = []) {
18107
- const result = current;
18108
- if (sync) {
18109
- const keysToRemove = Object.keys(result).filter((key) => !(key in updates));
18110
- for (const key of keysToRemove) {
18111
- delete result[key];
18112
- }
18113
- }
18114
- for (const key of Object.getOwnPropertyNames(updates)) {
18115
- if (key === "__proto__" || key === "constructor" || key === "prototype") {
18116
- continue;
18117
- }
18118
- const value = updates[key];
18119
- const nextPath = [...currentPath, key];
18120
- const valueIsObject = typeof value === "object" && value !== null && !Array.isArray(value) && Object.keys(value).length > 0;
18121
- if (pathsEqual(nextPath, replacePath)) {
18122
- result[key] = valueIsObject ? applyUpdates({}, value) : value;
18123
- continue;
18124
- }
18125
- if (valueIsObject && (typeof result[key] !== "object" || result[key] === null || Array.isArray(result[key]))) {
18126
- result[key] = applyUpdates(
18127
- {},
18128
- value,
18129
- sync,
18130
- replacePath,
18131
- nextPath
18132
- );
18133
- } else if (valueIsObject && typeof result[key] === "object" && result[key] !== null && !Array.isArray(result[key])) {
18134
- result[key] = applyUpdates(
18135
- result[key],
18136
- value,
18137
- sync,
18138
- replacePath,
18139
- nextPath
18140
- );
18141
- } else {
18142
- result[key] = value;
18143
- }
18144
- }
18145
- return result;
18146
- }
18147
- __name(applyUpdates, "applyUpdates");
18148
- function pathsEqual(left, right) {
18149
- return left.length === right.length && left.every((segment, index) => segment === right[index]);
18150
- }
18151
- __name(pathsEqual, "pathsEqual");
18152
-
18153
18280
  // packages/cli/src/config/migration/index.ts
18154
18281
  init_esbuild_shims();
18155
18282
 
@@ -18996,7 +19123,7 @@ var LoadedSettings = class {
18996
19123
  static {
18997
19124
  __name(this, "LoadedSettings");
18998
19125
  }
18999
- constructor(system, systemDefaults, user, workspace, isTrusted, migratedInMemorScopes, migrationWarnings = [], corruptedPath = void 0, wasRecovered = false) {
19126
+ constructor(system, systemDefaults, user, workspace, isTrusted, migratedInMemorScopes, migrationWarnings = [], corruptedPath = void 0, wasRecovered = false, workspaceSettingsActive = true) {
19000
19127
  this.system = system;
19001
19128
  this.systemDefaults = systemDefaults;
19002
19129
  this.user = user;
@@ -19006,6 +19133,7 @@ var LoadedSettings = class {
19006
19133
  this.migrationWarnings = migrationWarnings;
19007
19134
  this.corruptedPath = corruptedPath;
19008
19135
  this.wasRecovered = wasRecovered;
19136
+ this.workspaceSettingsActive = workspaceSettingsActive;
19009
19137
  this._merged = this.computeMergedSettings();
19010
19138
  }
19011
19139
  system;
@@ -19017,6 +19145,7 @@ var LoadedSettings = class {
19017
19145
  migrationWarnings;
19018
19146
  corruptedPath;
19019
19147
  wasRecovered;
19148
+ workspaceSettingsActive;
19020
19149
  corruptionDialogDismissed = false;
19021
19150
  _merged;
19022
19151
  get merged() {
@@ -19461,15 +19590,17 @@ function loadSettings(workspaceDir = process2.cwd(), consumeCorruptionEnvVars =
19461
19590
  const loadAndMigrate = /* @__PURE__ */ __name((filePath, scope) => {
19462
19591
  try {
19463
19592
  if (fs6.existsSync(filePath)) {
19464
- let content = fs6.readFileSync(filePath, "utf-8");
19593
+ const content = fs6.readFileSync(filePath, "utf-8");
19465
19594
  let rawSettings;
19466
19595
  const corruptedPath = `${filePath}${CORRUPTED_SUFFIX}`;
19467
19596
  let corruptedSaved = false;
19468
- let recoveredFromBackup = false;
19469
19597
  let recoveredFromEnvVar = null;
19470
19598
  try {
19471
19599
  rawSettings = JSON.parse((0, import_strip_json_comments2.default)(content));
19472
19600
  } catch (parseError) {
19601
+ debugLogger3.warn(
19602
+ `Settings file ${filePath} has invalid JSON (${getErrorMessage(parseError)}). Resetting to empty settings.`
19603
+ );
19473
19604
  try {
19474
19605
  fs6.copyFileSync(filePath, corruptedPath);
19475
19606
  corruptedSaved = true;
@@ -19478,28 +19609,6 @@ function loadSettings(workspaceDir = process2.cwd(), consumeCorruptionEnvVars =
19478
19609
  `Failed to copy corrupted file: ${getErrorMessage(copyError)}`
19479
19610
  );
19480
19611
  }
19481
- const backupPath = `${filePath}.orig`;
19482
- if (fs6.existsSync(backupPath)) {
19483
- debugLogger3.warn(
19484
- `Settings file ${filePath} has invalid JSON (${getErrorMessage(parseError)}). Attempting recovery from backup ${backupPath}.`
19485
- );
19486
- try {
19487
- const backupContent = fs6.readFileSync(backupPath, "utf-8");
19488
- const backupSettings = JSON.parse(
19489
- (0, import_strip_json_comments2.default)(backupContent)
19490
- );
19491
- fs6.writeFileSync(filePath, backupContent, "utf-8");
19492
- content = backupContent;
19493
- rawSettings = backupSettings;
19494
- const recoveryMsg = `Settings file ${filePath} had invalid JSON and was recovered from backup ${backupPath}. Some recent settings changes may have been lost.`;
19495
- debugLogger3.warn(recoveryMsg);
19496
- recoveredFromBackup = true;
19497
- } catch (backupError) {
19498
- debugLogger3.warn(
19499
- `Failed to recover from backup ${backupPath}: ${getErrorMessage(backupError)}. Falling back to empty settings.`
19500
- );
19501
- }
19502
- }
19503
19612
  if (!rawSettings) {
19504
19613
  const warningMsg = `Settings file ${filePath} has invalid JSON. Your settings have been reset.`;
19505
19614
  debugLogger3.warn(warningMsg);
@@ -19577,7 +19686,7 @@ function loadSettings(workspaceDir = process2.cwd(), consumeCorruptionEnvVars =
19577
19686
  };
19578
19687
  if (corruptedSaved) {
19579
19688
  result.corruptedPath = corruptedPath;
19580
- result.wasRecovered = recoveredFromBackup || (recoveredFromEnvVar ?? false);
19689
+ result.wasRecovered = recoveredFromEnvVar ?? false;
19581
19690
  }
19582
19691
  return result;
19583
19692
  }
@@ -19599,7 +19708,8 @@ function loadSettings(workspaceDir = process2.cwd(), consumeCorruptionEnvVars =
19599
19708
  settings: {},
19600
19709
  rawJson: void 0
19601
19710
  };
19602
- if (realWorkspaceDir !== realHomeDir) {
19711
+ const workspaceSettingsActive = realWorkspaceDir !== realHomeDir;
19712
+ if (workspaceSettingsActive) {
19603
19713
  workspaceResult = loadAndMigrate(
19604
19714
  workspaceSettingsPath,
19605
19715
  "Workspace" /* Workspace */
@@ -19697,7 +19807,8 @@ Please fix the configuration file(s) and try again.`
19697
19807
  migratedInMemorScopes,
19698
19808
  allMigrationWarnings,
19699
19809
  userResult.corruptedPath,
19700
- userResult.wasRecovered ?? false
19810
+ userResult.wasRecovered ?? false,
19811
+ workspaceSettingsActive
19701
19812
  );
19702
19813
  }
19703
19814
  __name(loadSettings, "loadSettings");
@@ -19966,7 +20077,7 @@ __name(getPackageJson, "getPackageJson");
19966
20077
  // packages/cli/src/utils/version.ts
19967
20078
  async function getCliVersion() {
19968
20079
  const pkgJson = await getPackageJson();
19969
- return "0.18.3-preview.0";
20080
+ return "0.18.4-preview.0";
19970
20081
  }
19971
20082
  __name(getCliVersion, "getCliVersion");
19972
20083
 
@@ -20027,6 +20138,9 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds, options) => {
20027
20138
  const totalSeconds = milliseconds / 1e3;
20028
20139
  if (totalSeconds < 60) {
20029
20140
  const formatted = totalSeconds.toFixed(1);
20141
+ if (parseFloat(formatted) >= 60) {
20142
+ return "1m";
20143
+ }
20030
20144
  if (options?.hideTrailingZeros && formatted.endsWith(".0")) {
20031
20145
  return `${formatted.slice(0, -2)}s`;
20032
20146
  }
@@ -20120,7 +20234,7 @@ import { execFile } from "node:child_process";
20120
20234
 
20121
20235
  // packages/cli/src/generated/git-commit.ts
20122
20236
  init_esbuild_shims();
20123
- var GIT_COMMIT_INFO = "33b70f028";
20237
+ var GIT_COMMIT_INFO = "1618fea8d";
20124
20238
 
20125
20239
  // packages/cli/src/utils/systemInfo.ts
20126
20240
  var debugLogger4 = createDebugLogger("STATUS");
@@ -20297,6 +20411,7 @@ export {
20297
20411
  updateOutputLanguageFile,
20298
20412
  writeOutputLanguageAndRegisterPath,
20299
20413
  initializeLlmOutputLanguage,
20414
+ getFlattenedSchema,
20300
20415
  getSettingDefinition,
20301
20416
  requiresRestart,
20302
20417
  getDefaultValue,
@@ -20400,12 +20515,12 @@ export {
20400
20515
  */
20401
20516
  /**
20402
20517
  * @license
20403
- * Copyright 2025 Qwen team
20518
+ * Copyright 2025 Google LLC
20404
20519
  * SPDX-License-Identifier: Apache-2.0
20405
20520
  */
20406
20521
  /**
20407
20522
  * @license
20408
- * Copyright 2025 Google LLC
20523
+ * Copyright 2025 Qwen team
20409
20524
  * SPDX-License-Identifier: Apache-2.0
20410
20525
  */
20411
20526
  /**