@qwen-code/qwen-code 0.19.3 → 0.19.4

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 (305) hide show
  1. package/bundled/loop/SKILL.md +22 -3
  2. package/bundled/loop/SKILL.test.ts +20 -0
  3. package/bundled/loop/autonomous-loop.test.ts +59 -0
  4. package/bundled/loop/autonomous-loop.ts +102 -0
  5. package/bundled/loop/loop-task-file.test.ts +1064 -0
  6. package/bundled/loop/loop-task-file.ts +404 -0
  7. package/bundled/loop/loop-tick-resolver.test.ts +906 -0
  8. package/bundled/loop/loop-tick-resolver.ts +416 -0
  9. package/bundled/qc-helper/SKILL.md +12 -5
  10. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  11. package/bundled/qc-helper/docs/configuration/settings.md +40 -26
  12. package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
  13. package/bundled/qc-helper/docs/features/auto-mode.md +40 -0
  14. package/bundled/qc-helper/docs/features/channels/overview.md +81 -18
  15. package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
  16. package/bundled/qc-helper/docs/features/code-review.md +17 -61
  17. package/bundled/qc-helper/docs/features/commands.md +6 -6
  18. package/bundled/qc-helper/docs/features/hooks.md +6 -1
  19. package/bundled/qc-helper/docs/features/mcp.md +3 -1
  20. package/bundled/qc-helper/docs/features/memory.md +1 -1
  21. package/bundled/qc-helper/docs/features/scheduled-tasks.md +10 -0
  22. package/bundled/qc-helper/docs/features/status-line.md +3 -3
  23. package/bundled/qc-helper/docs/ide-integration/ide-integration.md +4 -4
  24. package/bundled/qc-helper/docs/qwen-serve.md +19 -0
  25. package/bundled/qc-helper/docs/support/troubleshooting.md +6 -0
  26. package/bundled/review/DESIGN.md +21 -26
  27. package/bundled/review/SKILL.md +45 -129
  28. package/chunks/MaxSizedBox-ERTNFI22.js +68 -0
  29. package/chunks/{StandaloneSessionPicker-Z52JTYST.js → StandaloneSessionPicker-Y5NGRLRY.js} +48 -42
  30. package/chunks/{acpAgent-7RZUOWOM.js → acpAgent-UMN6OYTR.js} +1319 -361
  31. package/chunks/{agent-4FG7WTHJ.js → agent-56DZU4ZU.js} +30 -25
  32. package/chunks/agent-headless-SR7N2IJG.js +61 -0
  33. package/chunks/{anthropicContentGenerator-PFITVL7Y.js → anthropicContentGenerator-5OZFO6WQ.js} +11 -8
  34. package/chunks/{artifact-tool-D2X7G3C3.js → artifact-tool-JVZMHA4B.js} +3 -3
  35. package/chunks/{askUserQuestion-UGETICJQ.js → askUserQuestion-CMJZ2F3D.js} +2 -2
  36. package/chunks/bridge-AUHNFOUS.js +72 -0
  37. package/chunks/{ca-IUFWESZL.js → ca-RYOETBUW.js} +9 -9
  38. package/chunks/channel-worker-supervisor-A74FV522.js +308 -0
  39. package/chunks/{chunk-T4T2FNV4.js → chunk-2X2JUE47.js} +2 -2
  40. package/chunks/{chunk-BX5YO7UW.js → chunk-4VZH35PN.js} +540 -370
  41. package/chunks/{chunk-M2U5NM24.js → chunk-54YZOP7P.js} +309 -72
  42. package/chunks/chunk-5P5XGNYH.js +93 -0
  43. package/chunks/{chunk-QWFNTRH4.js → chunk-6AQR7732.js} +1 -1
  44. package/chunks/{chunk-HZT4UCFB.js → chunk-6CIIP6OE.js} +4 -4
  45. package/chunks/{chunk-ADCIHOQZ.js → chunk-6TLY5W3B.js} +16 -8
  46. package/chunks/{chunk-BXSHL2SF.js → chunk-73H73ASU.js} +1 -1
  47. package/chunks/{chunk-3TV3HUWZ.js → chunk-75X2VLSH.js} +60 -30
  48. package/chunks/{chunk-6V4NZFUS.js → chunk-7KPI4LAI.js} +5 -5
  49. package/chunks/{chunk-PDE7CSDS.js → chunk-7VPC7D7O.js} +2 -2
  50. package/chunks/chunk-AHNXYU4O.js +24 -0
  51. package/chunks/{chunk-UX4SGCGN.js → chunk-AVQDCKNF.js} +96 -22
  52. package/chunks/{chunk-HYCC3XM3.js → chunk-B236XPGF.js} +1 -1
  53. package/chunks/{chunk-N4EJFBN5.js → chunk-B7KGXIPZ.js} +419 -262
  54. package/chunks/{chunk-YAINVQ3Q.js → chunk-BFG6OZN7.js} +17392 -16335
  55. package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
  56. package/chunks/{chunk-BTLJ2MF5.js → chunk-BNJLLAQ7.js} +3 -3
  57. package/chunks/{chunk-UYT3MWEB.js → chunk-BQNJBEUA.js} +16 -2
  58. package/chunks/{chunk-SKQZZVAV.js → chunk-BZHLWC6T.js} +2 -2
  59. package/chunks/{chunk-HPZTOP4I.js → chunk-C2IHHGBZ.js} +131 -21
  60. package/chunks/chunk-CG7SVARK.js +367 -0
  61. package/chunks/{chunk-CNLEDYE3.js → chunk-CS5XYDBO.js} +5 -5
  62. package/chunks/{chunk-O75BHFQW.js → chunk-CUGEBAKG.js} +2 -2
  63. package/chunks/{chunk-U3KSMM7G.js → chunk-D5KISTLW.js} +339 -383
  64. package/chunks/{chunk-STUWFKGD.js → chunk-DQ74W65K.js} +431 -535
  65. package/chunks/{chunk-VVLOGDB6.js → chunk-DX3TKXNT.js} +2 -2
  66. package/chunks/chunk-E5A7LHNN.js +51 -0
  67. package/chunks/{chunk-3PJXIDKI.js → chunk-E6US47KI.js} +3 -27
  68. package/chunks/chunk-EDAGQADF.js +21 -0
  69. package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
  70. package/chunks/{chunk-4QK3O43S.js → chunk-FNLXLI4I.js} +4 -4
  71. package/chunks/{chunk-I2LYBGNI.js → chunk-FYKX6XOT.js} +1 -1
  72. package/chunks/{chunk-QLDPRILK.js → chunk-G7OQ3RFJ.js} +3 -3
  73. package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
  74. package/chunks/{chunk-L7OKCI7T.js → chunk-GICCHL2Q.js} +15 -1
  75. package/chunks/{chunk-KMGMKW5Q.js → chunk-GLPV75ES.js} +9 -3
  76. package/chunks/{chunk-LD2XBG6Z.js → chunk-GO6LNQXT.js} +1 -39
  77. package/chunks/chunk-HI55Z6PR.js +3523 -0
  78. package/chunks/{chunk-QNKBEJO2.js → chunk-HJDF3ZVU.js} +2776 -1289
  79. package/chunks/{chunk-JJXWTVSK.js → chunk-HRZB5CSC.js} +34 -1
  80. package/chunks/{chunk-I4H7PRWQ.js → chunk-HTWHAN44.js} +1 -1
  81. package/chunks/{chunk-EJYJYJZ2.js → chunk-IRJWHZWU.js} +3 -70
  82. package/chunks/{chunk-CKQA6AWF.js → chunk-J3F7X3LW.js} +1 -1
  83. package/chunks/{chunk-QI7GOGJR.js → chunk-KKQWC6WS.js} +1 -1
  84. package/chunks/{chunk-VBZ452JT.js → chunk-KVPFPC4J.js} +494 -114
  85. package/chunks/{chunk-NDOC6M5S.js → chunk-L7QPM2YD.js} +2 -2
  86. package/chunks/{chunk-SLNKLLEO.js → chunk-L7VH7HQA.js} +12 -8
  87. package/chunks/{chunk-BVSVIN45.js → chunk-LKWAVAB5.js} +3 -3
  88. package/chunks/{chunk-ZP6UKOPB.js → chunk-LWGLBVWA.js} +1 -1
  89. package/chunks/{chunk-SBBN4BWR.js → chunk-MEQWZGK5.js} +1 -1
  90. package/chunks/{chunk-FKAVULLM.js → chunk-MKHC4BYZ.js} +58 -10
  91. package/chunks/{chunk-UFLGERMB.js → chunk-MNDTD5E5.js} +178 -124
  92. package/chunks/{chunk-RD6YJJJ6.js → chunk-MOUXUCXQ.js} +1 -1
  93. package/chunks/{chunk-EDMZZFDU.js → chunk-MVZXZWGT.js} +905 -795
  94. package/chunks/chunk-MX2YXRER.js +44 -0
  95. package/chunks/{chunk-JVHEVCAU.js → chunk-ND25GXEU.js} +23 -6
  96. package/chunks/chunk-NIOPRZNN.js +27 -0
  97. package/chunks/{chunk-DDMOU62Q.js → chunk-NPQWQYU6.js} +1 -1
  98. package/chunks/{chunk-PR32FRT6.js → chunk-OAFUMTWW.js} +3 -3
  99. package/chunks/chunk-OJCECIJA.js +238 -0
  100. package/chunks/{chunk-GGBIN5K7.js → chunk-PIYV6COW.js} +1 -1
  101. package/chunks/{chunk-CF6BB3LT.js → chunk-PPFWEV7G.js} +10 -1
  102. package/chunks/{chunk-4LUZAKMK.js → chunk-Q7VHIRDD.js} +1 -1
  103. package/chunks/{chunk-ODLIHNOY.js → chunk-QAFQLTXG.js} +1 -1
  104. package/chunks/{chunk-Y6YMRS3U.js → chunk-QMIND2AS.js} +3 -3
  105. package/chunks/{chunk-XJYUPHRC.js → chunk-QOMAHFYI.js} +3 -3
  106. package/chunks/{chunk-J37FGIOA.js → chunk-QXPI7FEC.js} +38 -4
  107. package/chunks/chunk-RM3PGSGL.js +66 -0
  108. package/chunks/chunk-RNBYOUGV.js +42 -0
  109. package/chunks/chunk-S5EQPDTM.js +91 -0
  110. package/chunks/chunk-SEZC2725.js +36 -0
  111. package/chunks/{chunk-FNJ7BDPH.js → chunk-SFN4TEHY.js} +10 -7
  112. package/chunks/{chunk-O2VBQ3Y2.js → chunk-SJBIFVD2.js} +2 -2
  113. package/chunks/chunk-SYCJMSIJ.js +82 -0
  114. package/chunks/{chunk-JE5FVRPC.js → chunk-T22H4V4R.js} +48 -23
  115. package/chunks/{chunk-3227DZO4.js → chunk-T42ACHFI.js} +1 -1
  116. package/chunks/{chunk-UO5GVXQE.js → chunk-TENOUWY2.js} +3 -3
  117. package/chunks/{chunk-JOLIREYR.js → chunk-TOAUDIS7.js} +1 -1
  118. package/chunks/{chunk-J7FA27RO.js → chunk-TTFNVEO5.js} +3 -3
  119. package/chunks/{chunk-S7AKE7HL.js → chunk-UANCYOOQ.js} +63 -9
  120. package/chunks/{chunk-BUUQ5HPX.js → chunk-UQFP2FEF.js} +1 -1
  121. package/chunks/{chunk-R5OP2ATH.js → chunk-UQYOMM6J.js} +11 -11
  122. package/chunks/{chunk-J33ZR6OJ.js → chunk-UT5JU5DJ.js} +16 -16
  123. package/chunks/{chunk-QE6KJYLT.js → chunk-VKGG724L.js} +122 -25
  124. package/chunks/{chunk-SMXULRAN.js → chunk-VXGPYF7U.js} +1 -1
  125. package/chunks/{chunk-MNF6S5PR.js → chunk-W2ZOAX7F.js} +4 -4
  126. package/chunks/{chunk-GT2FGICD.js → chunk-W6X4FGWX.js} +1 -1
  127. package/chunks/{chunk-SMYQZVZ3.js → chunk-XCUFHOAD.js} +1 -1
  128. package/chunks/{chunk-K5XU6E4T.js → chunk-XKSCTXPK.js} +2 -2
  129. package/chunks/{chunk-FXKVLFFY.js → chunk-YBDZ63KI.js} +3 -3
  130. package/chunks/{chunk-BKXBARJZ.js → chunk-YPCPZSZB.js} +1 -1
  131. package/chunks/chunk-YTFBURQD.js +313 -0
  132. package/chunks/{chunk-NL4C3H6C.js → chunk-YXK4GPYO.js} +1 -1
  133. package/chunks/{chunk-F3ZYSEY6.js → chunk-ZJP5T7IA.js} +3 -3
  134. package/chunks/{chunk-RYLJU2DY.js → chunk-ZN5T4BHI.js} +1 -1
  135. package/chunks/{chunk-RRFZXMYP.js → chunk-ZXCVPMIK.js} +553 -138
  136. package/chunks/{computer-use-JGB36FDW.js → computer-use-VWN5HH6A.js} +33 -28
  137. package/chunks/contextCommand-DFFG5KDJ.js +66 -0
  138. package/chunks/{cron-create-SKEY55RG.js → cron-create-CSSWJ67I.js} +4 -4
  139. package/chunks/{cron-delete-I3NAT32Z.js → cron-delete-E56CFQ7A.js} +4 -4
  140. package/chunks/{cron-list-6XRRL6TH.js → cron-list-BKSINY6Y.js} +4 -4
  141. package/chunks/daemon-5T6IHWJV.js +8430 -0
  142. package/chunks/daemon-status-provider-V5UY7O7J.js +70 -0
  143. package/chunks/{de-EOW5PVHF.js → de-HB5NJXGB.js} +9 -9
  144. package/chunks/{dist-NHEYYB2B.js → dist-2HDL5SHQ.js} +2 -2
  145. package/chunks/{dist-663NZ6MI.js → dist-B7SSDVWT.js} +116 -11
  146. package/chunks/{dist-PQPZ5Q4N.js → dist-BL3SL665.js} +20 -9
  147. package/chunks/{dist-J37VXPLD.js → dist-TAVAGZU6.js} +40 -15
  148. package/chunks/{dist-LB6OGPVM.js → dist-XBOVZ3R5.js} +26 -5
  149. package/chunks/{earlyInputCapture-44RISVVJ.js → earlyInputCapture-VVYU4FDO.js} +31 -26
  150. package/chunks/{edit-NN6GM5DT.js → edit-F35PTMBA.js} +35 -29
  151. package/chunks/{en-HPWEJBTR.js → en-FZREZFPO.js} +30 -10
  152. package/chunks/{enter-worktree-PB3O2C7D.js → enter-worktree-3DIW7EGJ.js} +30 -25
  153. package/chunks/{enterPlanMode-YQFNNSUA.js → enterPlanMode-QNXT77KP.js} +40 -25
  154. package/chunks/{errors-LS7XU5DZ.js → errors-M53YG76R.js} +32 -27
  155. package/chunks/{exit-worktree-E2FTNSBK.js → exit-worktree-BSDWNWHZ.js} +30 -25
  156. package/chunks/{exitPlanMode-GLYK2BUB.js → exitPlanMode-EL7AY327.js} +54 -33
  157. package/chunks/{fast-path-WQ6M7LI7.js → fast-path-DUCSMUFW.js} +30 -13
  158. package/chunks/{fast-path-settings-OAGU3X5H.js → fast-path-settings-UQLRFDQP.js} +2 -2
  159. package/chunks/{fr-BN5NKSAC.js → fr-XY3NQFCM.js} +9 -9
  160. package/chunks/{gemini-2YFLVA2M.js → gemini-F3IERB37.js} +80 -67
  161. package/chunks/{geminiContentGenerator-XV6SV6CD.js → geminiContentGenerator-6OULAKFQ.js} +4 -4
  162. package/chunks/{glob-2H6CDDMK.js → glob-ZMLFTD4T.js} +30 -25
  163. package/chunks/{grep-VXIUXM3C.js → grep-H5X66EI7.js} +30 -25
  164. package/chunks/initializer-LEOT2OLH.js +66 -0
  165. package/chunks/{ja-7DEUB2TS.js → ja-J7YAG7SA.js} +9 -9
  166. package/chunks/{keychain-token-storage-YLMDLKXT.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
  167. package/chunks/list-M3DKXML6.js +70 -0
  168. package/chunks/loadedSettingsAdapter-OKMQFGGG.js +65 -0
  169. package/chunks/{loop-wakeup-CITGGQHA.js → loop-wakeup-FPBAVVPR.js} +5 -5
  170. package/chunks/{ls-R5WP4BGZ.js → ls-UGWQXPTY.js} +4 -4
  171. package/chunks/{lsp-GSICJMMW.js → lsp-24WV7NXB.js} +2 -2
  172. package/chunks/{monitor-HKLRS2HQ.js → monitor-ARL5P45R.js} +32 -26
  173. package/chunks/nonInteractiveCli-NUVLF3YR.js +108 -0
  174. package/chunks/{notebook-edit-Y6SKSGTT.js → notebook-edit-ANTZ2DDY.js} +31 -26
  175. package/chunks/{openaiContentGenerator-J7G2FYJT.js → openaiContentGenerator-TFGMKGHN.js} +15 -13
  176. package/chunks/pidfile-AWTL4C63.js +72 -0
  177. package/chunks/{pt-TNZRNLQB.js → pt-6RTAA6SS.js} +9 -9
  178. package/chunks/{qwenContentGenerator-5XIEM5GV.js → qwenContentGenerator-6QWAYTWS.js} +32 -27
  179. package/chunks/{qwenOAuth2-AG3PFFLZ.js → qwenOAuth2-LWLA6MQG.js} +5 -4
  180. package/chunks/{read-file-J7D552ZJ.js → read-file-EJY73XQ3.js} +11 -10
  181. package/chunks/{read-mcp-resource-DQQW7H7T.js → read-mcp-resource-NCBTPP7X.js} +2 -2
  182. package/chunks/ripGrep-HC4SA6CQ.js +59 -0
  183. package/chunks/{ru-NIAUBKCN.js → ru-AUBGJ2C4.js} +9 -9
  184. package/chunks/{run-qwen-serve-SGEEVMXD.js → run-qwen-serve-AGLZ642J.js} +454 -94
  185. package/chunks/{scheduler-7CQI3S4Q.js → scheduler-TURO7NGY.js} +30 -25
  186. package/chunks/{send-message-EE4TWKVU.js → send-message-3S2NYS3O.js} +6 -4
  187. package/chunks/serve-5DAMOIDW.js +70 -0
  188. package/chunks/{server-4QMUWXPW.js → server-4AGEK2HC.js} +4098 -1173
  189. package/chunks/{session-NRO7UFOY.js → session-7ZOQUC4Y.js} +204 -64
  190. package/chunks/{settings-SGWRDQSC.js → settings-DR4V6L5Y.js} +34 -29
  191. package/chunks/{shell-62ANGIHL.js → shell-H5WFKUXH.js} +30 -25
  192. package/chunks/{skill-VWAQAWW6.js → skill-ANHU5ZCR.js} +13 -12
  193. package/chunks/spawnChannel-VN5LJV7Z.js +68 -0
  194. package/chunks/{src-KUV5J5Q2.js → src-OVZLTVVM.js} +114 -30
  195. package/chunks/{startInteractiveUI-6EYJN3JV.js → startInteractiveUI-OA22V32P.js} +15970 -15430
  196. package/chunks/{syntheticOutput-T5YHQ6S2.js → syntheticOutput-SV7GBHZ5.js} +3 -3
  197. package/chunks/{task-create-BLY7RHXX.js → task-create-W2H2UJCH.js} +8 -7
  198. package/chunks/{task-list-3QUYNVYR.js → task-list-THBOPV4G.js} +7 -6
  199. package/chunks/{task-stop-U4RATK2V.js → task-stop-33FVCNCJ.js} +2 -2
  200. package/chunks/{task-update-U54O7KJX.js → task-update-LVFQLXEI.js} +8 -7
  201. package/chunks/{team-create-LPOGCPM7.js → team-create-OYL5CAQO.js} +30 -25
  202. package/chunks/{team-delete-LKBYPASD.js → team-delete-NTUQ25UY.js} +7 -6
  203. package/chunks/theme-manager-XCMPF2SI.js +63 -0
  204. package/chunks/{todoWrite-OYXKTVYN.js → todoWrite-SEPO2RI3.js} +4 -4
  205. package/chunks/{tool-search-YPUFJ3ZQ.js → tool-search-YXW55X6Z.js} +36 -11
  206. package/chunks/{trustedFolders-5B24TMEA.js → trustedFolders-TEPGM5YL.js} +31 -26
  207. package/chunks/{validateNonInterActiveAuth-BTDTYOVT.js → validateNonInterActiveAuth-OQIS7WUE.js} +65 -55
  208. package/chunks/{web-fetch-EEB5LZYU.js → web-fetch-OE7LHURA.js} +5 -4
  209. package/chunks/{workflow-LAWIW5LI.js → workflow-RTUWORAP.js} +67 -39
  210. package/chunks/workspace-providers-status-DM2XANVB.js +67 -0
  211. package/chunks/workspace-service-VKBI2KZD.js +77 -0
  212. package/chunks/{write-file-PCV226DJ.js → write-file-WGALQ53L.js} +35 -30
  213. package/chunks/{zh-TW-TR3XYGE5.js → zh-TW-6GIKXEAN.js} +30 -10
  214. package/chunks/{zh-5EUYXASN.js → zh-V3B4TFWL.js} +30 -10
  215. package/cli.js +6 -6
  216. package/locales/ca.js +13 -13
  217. package/locales/de.js +13 -13
  218. package/locales/en.js +49 -15
  219. package/locales/fr.js +13 -14
  220. package/locales/ja.js +13 -14
  221. package/locales/pt.js +13 -13
  222. package/locales/ru.js +13 -13
  223. package/locales/zh-TW.js +47 -14
  224. package/locales/zh.js +47 -14
  225. package/node_modules/@qwen-code/audio-capture/package.json +1 -1
  226. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  227. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  228. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  229. package/package.json +15 -6
  230. package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
  231. package/postinstall.js +50 -0
  232. package/web-shell/assets/{arc-DA7r8Ueo.js → arc-Det5Ccum.js} +1 -1
  233. package/web-shell/assets/{architectureDiagram-3BPJPVTR-ZDUxPtZ2.js → architectureDiagram-3BPJPVTR-DqNWVFpl.js} +1 -1
  234. package/web-shell/assets/{blockDiagram-GPEHLZMM-vrtOf1kJ.js → blockDiagram-GPEHLZMM-CYl7tYBi.js} +1 -1
  235. package/web-shell/assets/{c4Diagram-AAUBKEIU-BHFjzIi4.js → c4Diagram-AAUBKEIU-DaAEi0NQ.js} +1 -1
  236. package/web-shell/assets/channel-Bm0bFauD.js +1 -0
  237. package/web-shell/assets/{chunk-2J33WTMH-mdeQVz59.js → chunk-2J33WTMH-Df2CDEE2.js} +1 -1
  238. package/web-shell/assets/{chunk-4BX2VUAB-BkKMlwBX.js → chunk-4BX2VUAB-DNBFcyL2.js} +1 -1
  239. package/web-shell/assets/{chunk-55IACEB6-B7bnXNfu.js → chunk-55IACEB6-BKjF-0HI.js} +1 -1
  240. package/web-shell/assets/{chunk-727SXJPM-DGz8Mm6i.js → chunk-727SXJPM-DYwAwfIM.js} +1 -1
  241. package/web-shell/assets/{chunk-AQP2D5EJ-BQAydUNk.js → chunk-AQP2D5EJ-C6FswLqy.js} +1 -1
  242. package/web-shell/assets/{chunk-FMBD7UC4-GHr2LN_p.js → chunk-FMBD7UC4-DRWAcZSY.js} +1 -1
  243. package/web-shell/assets/{chunk-ND2GUHAM-7R91lnUx.js → chunk-ND2GUHAM-AoL16mNR.js} +1 -1
  244. package/web-shell/assets/{chunk-QZHKN3VN-aTJD3lSQ.js → chunk-QZHKN3VN-a8PtLMck.js} +1 -1
  245. package/web-shell/assets/classDiagram-4FO5ZUOK--NgUfb55.js +1 -0
  246. package/web-shell/assets/classDiagram-v2-Q7XG4LA2--NgUfb55.js +1 -0
  247. package/web-shell/assets/{cose-bilkent-S5V4N54A-BTf8t1RL.js → cose-bilkent-S5V4N54A-C4Aeu5qf.js} +1 -1
  248. package/web-shell/assets/{dagre-BM42HDAG-_sgp3WuA.js → dagre-BM42HDAG-BOulamjo.js} +1 -1
  249. package/web-shell/assets/{diagram-2AECGRRQ-CROtRy1w.js → diagram-2AECGRRQ-D1wt2ykO.js} +1 -1
  250. package/web-shell/assets/{diagram-5GNKFQAL-BqGRzwSc.js → diagram-5GNKFQAL-BRseus-O.js} +1 -1
  251. package/web-shell/assets/{diagram-KO2AKTUF-CMrcEtA7.js → diagram-KO2AKTUF-XSMkNzpZ.js} +1 -1
  252. package/web-shell/assets/{diagram-LMA3HP47-BRydGNW5.js → diagram-LMA3HP47-21KNLqoi.js} +1 -1
  253. package/web-shell/assets/{diagram-OG6HWLK6-D0ilgNjV.js → diagram-OG6HWLK6-DnUI8F5G.js} +1 -1
  254. package/web-shell/assets/{erDiagram-TEJ5UH35-2lnQeJUM.js → erDiagram-TEJ5UH35-BVSOMuM2.js} +1 -1
  255. package/web-shell/assets/{flowDiagram-I6XJVG4X-C_ZMdQiC.js → flowDiagram-I6XJVG4X-fYtDPJsW.js} +1 -1
  256. package/web-shell/assets/{ganttDiagram-6RSMTGT7-Dw9V_Ny0.js → ganttDiagram-6RSMTGT7-CmRXosW_.js} +1 -1
  257. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-HDXI-F1B.js → gitGraphDiagram-PVQCEYII-DPrmySxO.js} +1 -1
  258. package/web-shell/assets/index-BpKnmyFV.js +717 -0
  259. package/web-shell/assets/index-fLrtxpOG.css +5 -0
  260. package/web-shell/assets/{infoDiagram-5YYISTIA-CuB8Ebua.js → infoDiagram-5YYISTIA-x3VbEuCV.js} +1 -1
  261. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D_tyhVwh.js → ishikawaDiagram-YF4QCWOH-SmitHRMC.js} +1 -1
  262. package/web-shell/assets/{journeyDiagram-JHISSGLW-CgCwJQNU.js → journeyDiagram-JHISSGLW-BxvA551S.js} +1 -1
  263. package/web-shell/assets/{kanban-definition-UN3LZRKU-PZUtcbPx.js → kanban-definition-UN3LZRKU-DNHC16jY.js} +1 -1
  264. package/web-shell/assets/{linear-CZqRdJIU.js → linear-CQ6irBL9.js} +1 -1
  265. package/web-shell/assets/{mermaid.core-CPW_4UEF.js → mermaid.core-DtB6NO1e.js} +72 -72
  266. package/web-shell/assets/{mindmap-definition-RKZ34NQL-D_Y75ID7.js → mindmap-definition-RKZ34NQL-QKMAgV2v.js} +1 -1
  267. package/web-shell/assets/{pieDiagram-4H26LBE5-Q4dTyLeF.js → pieDiagram-4H26LBE5-bvb6dGn6.js} +1 -1
  268. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-ckw329Ft.js → quadrantDiagram-W4KKPZXB-DLgdlG4D.js} +1 -1
  269. package/web-shell/assets/{requirementDiagram-4Y6WPE33-DbVDm4It.js → requirementDiagram-4Y6WPE33-2M9YH4GF.js} +1 -1
  270. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CHuZ_ecH.js → sankeyDiagram-5OEKKPKP-DzwfclTH.js} +1 -1
  271. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DU2YSpq-.js → sequenceDiagram-3UESZ5HK-BvPmTuy2.js} +1 -1
  272. package/web-shell/assets/{stateDiagram-AJRCARHV-CA9PEBUo.js → stateDiagram-AJRCARHV-BjwUmrJF.js} +1 -1
  273. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C4L8zXeL.js +1 -0
  274. package/web-shell/assets/{timeline-definition-PNZ67QCA-Bhlo4WVc.js → timeline-definition-PNZ67QCA-CXzS6qqz.js} +1 -1
  275. package/web-shell/assets/{vennDiagram-CIIHVFJN-6xtPLsyl.js → vennDiagram-CIIHVFJN-yRSolF5B.js} +1 -1
  276. package/web-shell/assets/{wardley-L42UT6IY-3eozmXPf.js → wardley-L42UT6IY-ClLJjHPG.js} +1 -1
  277. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BOn6hKss.js → wardleyDiagram-YWT4CUSO-VIa6t2p2.js} +1 -1
  278. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BsP4-I_y.js → xychartDiagram-2RQKCTM6-CtmrkezW.js} +1 -1
  279. package/web-shell/index.html +18 -2
  280. package/chunks/MaxSizedBox-QNF3EIGU.js +0 -63
  281. package/chunks/agent-headless-RQ5BTX3G.js +0 -56
  282. package/chunks/bridge-JL2PMCIW.js +0 -66
  283. package/chunks/chunk-5GOVVXEV.js +0 -73
  284. package/chunks/chunk-BC3C4F3Q.js +0 -40
  285. package/chunks/chunk-BW4KCQFD.js +0 -1103
  286. package/chunks/chunk-RKIZXJMB.js +0 -13
  287. package/chunks/contextCommand-WYU6OQ2F.js +0 -61
  288. package/chunks/daemon-status-provider-HH2EC5FI.js +0 -65
  289. package/chunks/headlessSafetyWarnings-TBE35GJ4.js +0 -55
  290. package/chunks/initializer-2Y7SLOKV.js +0 -61
  291. package/chunks/list-ZAFHZ7OS.js +0 -65
  292. package/chunks/loadedSettingsAdapter-6KJXD6M3.js +0 -60
  293. package/chunks/nonInteractiveCli-5W4GIZQM.js +0 -96
  294. package/chunks/ripGrep-IEIFIWP4.js +0 -54
  295. package/chunks/serve-V6GVZR6U.js +0 -65
  296. package/chunks/spawnChannel-3VHW5EPY.js +0 -63
  297. package/chunks/theme-manager-LYLGAERF.js +0 -58
  298. package/chunks/workspace-providers-status-PIAFVYHA.js +0 -62
  299. package/chunks/workspace-service-YAIOD4HG.js +0 -71
  300. package/web-shell/assets/channel-iRo68q4Q.js +0 -1
  301. package/web-shell/assets/classDiagram-4FO5ZUOK-iHF24a8X.js +0 -1
  302. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-iHF24a8X.js +0 -1
  303. package/web-shell/assets/index-CHmzAWys.css +0 -5
  304. package/web-shell/assets/index-w6GTOHh1.js +0 -713
  305. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-t1LRI0oY.js +0 -1
@@ -3,10 +3,13 @@
3
3
  import {
4
4
  isValidSessionId,
5
5
  validateAuthMethod
6
- } from "./chunk-EDMZZFDU.js";
6
+ } from "./chunk-MVZXZWGT.js";
7
+ import {
8
+ isKittyProtocolEnabled
9
+ } from "./chunk-JZSY4WP3.js";
7
10
  import {
8
11
  contextCommand
9
- } from "./chunk-FNJ7BDPH.js";
12
+ } from "./chunk-SFN4TEHY.js";
10
13
  import {
11
14
  VSCODE_SHIFT_ENTER_SEQUENCE,
12
15
  calculateCost,
@@ -17,49 +20,47 @@ import {
17
20
  getSystemInfoFields,
18
21
  useKeypress,
19
22
  writeOsc52
20
- } from "./chunk-3TV3HUWZ.js";
23
+ } from "./chunk-75X2VLSH.js";
21
24
  import {
22
25
  isTerminalGoalStatusKind
23
26
  } from "./chunk-KSPVDFE4.js";
24
27
  import {
25
28
  Text
26
- } from "./chunk-T4T2FNV4.js";
29
+ } from "./chunk-2X2JUE47.js";
27
30
  import {
28
31
  require_react
29
32
  } from "./chunk-KYMBIKIW.js";
30
33
  import {
31
34
  themeManager
32
- } from "./chunk-I4H7PRWQ.js";
33
- import {
34
- isKittyProtocolEnabled
35
- } from "./chunk-JZSY4WP3.js";
35
+ } from "./chunk-HTWHAN44.js";
36
36
  import {
37
37
  getErrorMessage as getErrorMessage2
38
- } from "./chunk-PR32FRT6.js";
38
+ } from "./chunk-OAFUMTWW.js";
39
39
  import {
40
40
  GITHUB_WORKFLOW_PATHS,
41
41
  setupGithub
42
- } from "./chunk-NDOC6M5S.js";
42
+ } from "./chunk-L7QPM2YD.js";
43
43
  import {
44
44
  require_undici
45
- } from "./chunk-M2U5NM24.js";
45
+ } from "./chunk-54YZOP7P.js";
46
46
  import {
47
47
  stripUnsafeCharacters,
48
48
  toCodePoints
49
- } from "./chunk-JJXWTVSK.js";
49
+ } from "./chunk-HRZB5CSC.js";
50
50
  import {
51
51
  getExtendedSystemInfo,
52
52
  getGitVersion,
53
53
  getNpmVersion
54
- } from "./chunk-MNF6S5PR.js";
54
+ } from "./chunk-W2ZOAX7F.js";
55
55
  import {
56
56
  formatDuration,
57
57
  formatMemoryUsage,
58
58
  formatTokenCount
59
59
  } from "./chunk-KHDZHZMH.js";
60
60
  import {
61
+ isInlineModelOverrideAllowed,
61
62
  parseAcpModelOption
62
- } from "./chunk-UYT3MWEB.js";
63
+ } from "./chunk-BQNJBEUA.js";
63
64
  import {
64
65
  formatUnsupportedVoiceModelMessage,
65
66
  getVoiceSettingsScope,
@@ -67,14 +68,19 @@ import {
67
68
  isVoiceEnabled,
68
69
  readVoiceMode,
69
70
  readVoiceModel
70
- } from "./chunk-4LUZAKMK.js";
71
+ } from "./chunk-Q7VHIRDD.js";
71
72
  import {
72
73
  OUTPUT_LANGUAGE_AUTO,
74
+ getAllSettingKeys,
75
+ getFlattenedSchema,
76
+ getNestedProperty,
73
77
  getPersistScopeForModelSelection,
78
+ getSettingDefinition,
74
79
  isAutoLanguage,
75
80
  resolveOutputLanguage,
81
+ validateSettingValue,
76
82
  writeOutputLanguageAndRegisterPath
77
- } from "./chunk-FKAVULLM.js";
83
+ } from "./chunk-MKHC4BYZ.js";
78
84
  import {
79
85
  SUPPORTED_LANGUAGES,
80
86
  getCurrentLanguage,
@@ -82,11 +88,11 @@ import {
82
88
  resolveSupportedLanguage,
83
89
  setLanguageAsync,
84
90
  t
85
- } from "./chunk-R5OP2ATH.js";
91
+ } from "./chunk-UQYOMM6J.js";
86
92
  import {
87
93
  isFolderTrustEnabled,
88
94
  loadTrustedFolders
89
- } from "./chunk-F3ZYSEY6.js";
95
+ } from "./chunk-ZJP5T7IA.js";
90
96
  import {
91
97
  require_strip_json_comments
92
98
  } from "./chunk-QYUE6W3T.js";
@@ -104,10 +110,13 @@ import {
104
110
  SESSION_TITLE_MAX_LENGTH,
105
111
  SessionService,
106
112
  ShellExecutionService,
113
+ So,
107
114
  appendToLastTextPart,
108
115
  buildBackgroundEntryLabel,
116
+ buildBareRememberPrompt,
109
117
  buildBtwCacheSafeParams,
110
118
  buildBtwPrompt,
119
+ buildManagedRememberPrompt,
111
120
  canUseRipgrep,
112
121
  checkArgumentSafety,
113
122
  checkCommandPermissions,
@@ -116,17 +125,18 @@ import {
116
125
  encodeInsightProgressMessage,
117
126
  encodeInsightReadyMessage,
118
127
  escapeShellArg,
119
- extract,
120
128
  findProviderByCredentials,
121
129
  flatMapTextParts,
122
130
  generateSessionRecap,
123
131
  getActiveGoal,
132
+ getArenaSystemReminder,
124
133
  getExtensionDescription,
125
134
  getExtensionDisplayName,
126
135
  getIdeInstaller,
127
136
  getInsightPrompt,
128
137
  getLastGoalTerminal,
129
138
  getMCPServerPrompts,
139
+ getPlanModeSystemReminder,
130
140
  getProjectSummaryPrompt,
131
141
  getShellConfiguration,
132
142
  glob,
@@ -144,6 +154,7 @@ import {
144
154
  normalizeSkillPriority,
145
155
  parse,
146
156
  parseInstallSource,
157
+ parseVisionModelSetting,
147
158
  partToString,
148
159
  persistSessionUsage,
149
160
  readPathFromWorkspace,
@@ -157,21 +168,21 @@ import {
157
168
  stripStartupContext,
158
169
  tryGenerateSessionTitle,
159
170
  unregisterGoalHook
160
- } from "./chunk-YAINVQ3Q.js";
171
+ } from "./chunk-BFG6OZN7.js";
161
172
  import {
162
173
  external_exports
163
174
  } from "./chunk-K5PGHDBN.js";
164
175
  import {
165
176
  runSideQuery
166
- } from "./chunk-SBBN4BWR.js";
177
+ } from "./chunk-MEQWZGK5.js";
167
178
  import {
168
179
  applySkillAllowedTools,
169
180
  buildSkillLlmContent
170
- } from "./chunk-HYCC3XM3.js";
181
+ } from "./chunk-B236XPGF.js";
171
182
  import {
172
183
  HookEventName,
173
184
  sanitizeUserPromptExpansionAdditionalContext
174
- } from "./chunk-NL4C3H6C.js";
185
+ } from "./chunk-YXK4GPYO.js";
175
186
  import {
176
187
  IdeConnectionEvent,
177
188
  formatTokenUsageSummaryAsCsv,
@@ -184,29 +195,30 @@ import {
184
195
  recordSkillInvocation,
185
196
  resolveOpenAILogDir,
186
197
  uiTelemetryService
187
- } from "./chunk-QNKBEJO2.js";
198
+ } from "./chunk-HJDF3ZVU.js";
188
199
  import {
189
- getAutoMemoryRoot,
190
- getUserAutoMemoryRoot
191
- } from "./chunk-RD6YJJJ6.js";
200
+ getAutoMemoryRoot
201
+ } from "./chunk-MOUXUCXQ.js";
192
202
  import {
193
203
  ToolNames
194
- } from "./chunk-BX5YO7UW.js";
204
+ } from "./chunk-4VZH35PN.js";
195
205
  import {
196
206
  openBrowserSecurely
197
207
  } from "./chunk-22IFUCVR.js";
198
208
  import {
199
209
  Storage,
200
210
  createDebugLogger,
211
+ expandHomeDir,
201
212
  getErrorMessage,
202
213
  isSubpath,
214
+ resolvePath,
203
215
  updateSymlink
204
- } from "./chunk-UX4SGCGN.js";
216
+ } from "./chunk-AVQDCKNF.js";
205
217
  import {
206
218
  isCpuProfileRecording,
207
219
  startCpuProfile,
208
220
  stopCpuProfile
209
- } from "./chunk-SMYQZVZ3.js";
221
+ } from "./chunk-XCUFHOAD.js";
210
222
  import {
211
223
  init_esbuild_shims
212
224
  } from "./chunk-A4BMJM77.js";
@@ -253,7 +265,7 @@ var isBtwCommand = /* @__PURE__ */ __name((query) => {
253
265
  }, "isBtwCommand");
254
266
  var debugLogger = createDebugLogger("COMMAND_UTILS");
255
267
  var copyToClipboard = /* @__PURE__ */ __name(async (text) => {
256
- const run = /* @__PURE__ */ __name((cmd, args, options) => new Promise((resolve6, reject) => {
268
+ const run = /* @__PURE__ */ __name((cmd, args, options) => new Promise((resolve5, reject) => {
257
269
  const child = options ? spawn(cmd, args, options) : spawn(cmd, args);
258
270
  let stderr = "";
259
271
  if (child.stderr) {
@@ -261,7 +273,7 @@ var copyToClipboard = /* @__PURE__ */ __name(async (text) => {
261
273
  }
262
274
  child.on("error", reject);
263
275
  child.on("close", (code) => {
264
- if (code === 0) return resolve6();
276
+ if (code === 0) return resolve5();
265
277
  const errorMsg = stderr.trim();
266
278
  reject(
267
279
  new Error(
@@ -2746,7 +2758,7 @@ function emitAutoModeEntryNotices(opts) {
2746
2758
  const stripped = pm?.getStrippedDangerousRules?.();
2747
2759
  if (stripped && (stripped.persistent.length > 0 || stripped.session.length > 0)) {
2748
2760
  const lines = [
2749
- "\u2139\uFE0F Auto mode temporarily disabled these allow rules",
2761
+ "\u2139 Auto mode temporarily disabled these allow rules",
2750
2762
  " (they would bypass the classifier):",
2751
2763
  ...stripped.persistent.map((r) => ` - ${r.raw} (from user settings)`),
2752
2764
  ...stripped.session.map((r) => ` - ${r.raw} (session)`),
@@ -3103,27 +3115,12 @@ ${info}
3103
3115
  // packages/cli/src/ui/commands/cdCommand.ts
3104
3116
  init_esbuild_shims();
3105
3117
  import * as fs3 from "node:fs/promises";
3106
- import * as os2 from "node:os";
3107
3118
  import * as path3 from "node:path";
3108
3119
 
3109
3120
  // packages/cli/src/ui/commands/directoryCommand.tsx
3110
3121
  init_esbuild_shims();
3111
3122
  import * as fs2 from "node:fs";
3112
- import * as os from "node:os";
3113
3123
  import * as path2 from "node:path";
3114
- function expandHomeDir(p) {
3115
- if (!p) {
3116
- return "";
3117
- }
3118
- let expandedPath = p;
3119
- if (p.toLowerCase().startsWith("%userprofile%")) {
3120
- expandedPath = os.homedir() + p.substring("%userprofile%".length);
3121
- } else if (p === "~" || p.startsWith("~/")) {
3122
- expandedPath = os.homedir() + p.substring(1);
3123
- }
3124
- return path2.normalize(expandedPath);
3125
- }
3126
- __name(expandHomeDir, "expandHomeDir");
3127
3124
  function findExistingWorkspaceDirectory(directory, existingDirectories) {
3128
3125
  if (existingDirectories.has(directory)) {
3129
3126
  return directory;
@@ -3153,8 +3150,9 @@ __name(getSingleDirPathCompletions, "getSingleDirPathCompletions");
3153
3150
  function getPathCompletions(prefix, partial) {
3154
3151
  const trimmed = partial.trim();
3155
3152
  if (!trimmed) return [];
3156
- const expanded = trimmed.startsWith("~") ? trimmed.replace(/^~/, os.homedir()) : trimmed;
3157
- const endsWithSep = expanded.endsWith("/") || expanded.endsWith(path2.sep);
3153
+ const inputEndsWithSep = trimmed.endsWith("/") || trimmed.endsWith("\\");
3154
+ const expanded = expandHomeDir(trimmed);
3155
+ const endsWithSep = inputEndsWithSep || expanded.endsWith("/") || expanded.endsWith(path2.sep);
3158
3156
  const searchDir = endsWithSep ? expanded : path2.dirname(expanded);
3159
3157
  const namePrefix = endsWithSep ? "" : path2.basename(expanded);
3160
3158
  try {
@@ -3276,7 +3274,13 @@ var directoryCommand = {
3276
3274
  }
3277
3275
  if (added.length > 0) {
3278
3276
  try {
3279
- if (config.shouldLoadMemoryFromIncludeDirectories()) {
3277
+ if (config.isSafeMode()) {
3278
+ messages.push(
3279
+ t(
3280
+ "Safe mode active \u2014 skipping memory reload from include directories."
3281
+ )
3282
+ );
3283
+ } else if (config.shouldLoadMemoryFromIncludeDirectories()) {
3280
3284
  const {
3281
3285
  memoryContent,
3282
3286
  fileCount,
@@ -3407,16 +3411,7 @@ function resolveCdPath(input, baseDir) {
3407
3411
  if (input.includes("\0") || baseDir.includes("\0")) {
3408
3412
  throw new Error("Path contains null bytes.");
3409
3413
  }
3410
- if (input === "~") {
3411
- return path3.normalize(os2.homedir());
3412
- }
3413
- if (input.startsWith("~/")) {
3414
- return path3.normalize(path3.join(os2.homedir(), input.slice(2)));
3415
- }
3416
- if (path3.isAbsolute(input)) {
3417
- return path3.normalize(input);
3418
- }
3419
- return path3.resolve(baseDir, input);
3414
+ return path3.normalize(resolvePath(baseDir, input));
3420
3415
  }
3421
3416
  __name(resolveCdPath, "resolveCdPath");
3422
3417
  var cdCommand = {
@@ -3676,6 +3671,332 @@ var clearCommand = {
3676
3671
  }, "action")
3677
3672
  };
3678
3673
 
3674
+ // packages/cli/src/ui/commands/config-command.ts
3675
+ init_esbuild_shims();
3676
+ var SETTABLE_TYPES = /* @__PURE__ */ new Set(["boolean", "string", "number", "enum"]);
3677
+ var SENSITIVE_KEY_PATTERNS = [
3678
+ /apikey/i,
3679
+ /api[_-]?key/i,
3680
+ /secret/i,
3681
+ /(?:^|\.)token(?:$|\.)/i,
3682
+ /password/i,
3683
+ /credential/i,
3684
+ /private[_-]?key/i
3685
+ ];
3686
+ var SENSITIVE_URL_PATTERNS = [/baseurl/i, /base_url/i, /proxy/i];
3687
+ function isSensitiveKey(key) {
3688
+ return SENSITIVE_KEY_PATTERNS.some((p) => p.test(key)) || SENSITIVE_URL_PATTERNS.some((p) => p.test(key));
3689
+ }
3690
+ __name(isSensitiveKey, "isSensitiveKey");
3691
+ function maskValue(value) {
3692
+ if (value === void 0) return t("(not set)");
3693
+ if (typeof value === "string") {
3694
+ if (!value) return t("(empty)");
3695
+ if (value.length <= 4) return "****";
3696
+ return `${value.slice(0, 4)}****`;
3697
+ }
3698
+ return "****";
3699
+ }
3700
+ __name(maskValue, "maskValue");
3701
+ function findClosestKey(input) {
3702
+ const allKeys = getAllSettingKeys();
3703
+ let bestMatch;
3704
+ let bestDistance = Infinity;
3705
+ for (const key of allKeys) {
3706
+ const def = getSettingDefinition(key);
3707
+ if (!def || !SETTABLE_TYPES.has(def.type)) continue;
3708
+ const distance = levenshteinDistance(
3709
+ input.toLowerCase(),
3710
+ key.toLowerCase()
3711
+ );
3712
+ if (distance < bestDistance && distance <= 3) {
3713
+ bestDistance = distance;
3714
+ bestMatch = key;
3715
+ }
3716
+ }
3717
+ return bestMatch;
3718
+ }
3719
+ __name(findClosestKey, "findClosestKey");
3720
+ function levenshteinDistance(a, b) {
3721
+ const matrix = [];
3722
+ for (let i = 0; i <= a.length; i++) {
3723
+ matrix[i] = [i];
3724
+ }
3725
+ for (let j = 0; j <= b.length; j++) {
3726
+ matrix[0][j] = j;
3727
+ }
3728
+ for (let i = 1; i <= a.length; i++) {
3729
+ for (let j = 1; j <= b.length; j++) {
3730
+ const cost = a[i - 1] === b[j - 1] ? 0 : 1;
3731
+ matrix[i][j] = Math.min(
3732
+ matrix[i - 1][j] + 1,
3733
+ matrix[i][j - 1] + 1,
3734
+ matrix[i - 1][j - 1] + cost
3735
+ );
3736
+ }
3737
+ }
3738
+ return matrix[a.length][b.length];
3739
+ }
3740
+ __name(levenshteinDistance, "levenshteinDistance");
3741
+ function coerceValue(def, rawValue) {
3742
+ switch (def.type) {
3743
+ case "boolean": {
3744
+ const normalised = rawValue?.toLowerCase().trim();
3745
+ if (normalised === "true" || normalised === "1") return { value: true };
3746
+ if (normalised === "false" || normalised === "0") return { value: false };
3747
+ return {
3748
+ value: void 0,
3749
+ error: t('Invalid boolean value: "{{value}}". Use "true" or "false".', {
3750
+ value: String(rawValue)
3751
+ })
3752
+ };
3753
+ }
3754
+ case "number": {
3755
+ if (!rawValue || rawValue.trim() === "") {
3756
+ return {
3757
+ value: void 0,
3758
+ error: t('Invalid number value: "{{value}}".', {
3759
+ value: String(rawValue)
3760
+ })
3761
+ };
3762
+ }
3763
+ const parsed = Number(rawValue);
3764
+ if (Number.isNaN(parsed) || !Number.isFinite(parsed)) {
3765
+ return {
3766
+ value: void 0,
3767
+ error: t('Invalid number value: "{{value}}".', {
3768
+ value: String(rawValue)
3769
+ })
3770
+ };
3771
+ }
3772
+ const validationError = validateSettingValue(def, parsed);
3773
+ if (validationError) {
3774
+ return { value: void 0, error: validationError };
3775
+ }
3776
+ return { value: parsed };
3777
+ }
3778
+ case "string": {
3779
+ const strValue = rawValue ?? "";
3780
+ const validationError = validateSettingValue(def, strValue);
3781
+ if (validationError) {
3782
+ return { value: void 0, error: validationError };
3783
+ }
3784
+ return { value: strValue };
3785
+ }
3786
+ case "enum": {
3787
+ const validValues = def.options?.map((o) => o.value) ?? [];
3788
+ if (!validValues.includes(rawValue)) {
3789
+ return {
3790
+ value: void 0,
3791
+ error: t(
3792
+ 'Invalid enum value: "{{value}}". Valid values: {{options}}.',
3793
+ { value: String(rawValue), options: validValues.join(", ") }
3794
+ )
3795
+ };
3796
+ }
3797
+ return { value: rawValue };
3798
+ }
3799
+ case "array":
3800
+ case "object":
3801
+ return {
3802
+ value: void 0,
3803
+ error: t(
3804
+ 'Setting "{{type}}" type cannot be set via /config. Edit settings.json directly.',
3805
+ { type: def.type }
3806
+ )
3807
+ };
3808
+ default:
3809
+ return {
3810
+ value: void 0,
3811
+ error: t('Unsupported setting type: "{{type}}".', {
3812
+ type: String(def.type)
3813
+ })
3814
+ };
3815
+ }
3816
+ }
3817
+ __name(coerceValue, "coerceValue");
3818
+ function formatValue(value) {
3819
+ if (value === void 0) return t("(not set)");
3820
+ if (typeof value === "string") return value || t("(empty)");
3821
+ return JSON.stringify(value);
3822
+ }
3823
+ __name(formatValue, "formatValue");
3824
+ function padRight(str, len) {
3825
+ if (str.length > len) return str.slice(0, len - 3) + "... ";
3826
+ if (str.length === len) return str + " ";
3827
+ return str + " ".repeat(len - str.length);
3828
+ }
3829
+ __name(padRight, "padRight");
3830
+ function listAllSettings(context) {
3831
+ const flattened = getFlattenedSchema();
3832
+ const merged = context.services.settings.merged;
3833
+ const lines = [];
3834
+ lines.push(t("Available settings:"));
3835
+ lines.push("");
3836
+ lines.push(
3837
+ padRight("Key", 40) + padRight("Type", 10) + padRight("Current", 15) + "Description"
3838
+ );
3839
+ lines.push("-".repeat(90));
3840
+ const keys = Object.keys(flattened).sort();
3841
+ for (const key of keys) {
3842
+ const def = flattened[key];
3843
+ if (!SETTABLE_TYPES.has(def.type)) continue;
3844
+ const current = getNestedProperty(merged, key);
3845
+ let displayCurrent;
3846
+ if (isSensitiveKey(key)) {
3847
+ displayCurrent = maskValue(current ?? def.default);
3848
+ } else {
3849
+ displayCurrent = current !== void 0 ? formatValue(current) : formatValue(def.default);
3850
+ }
3851
+ lines.push(
3852
+ padRight(key, 40) + padRight(def.type, 10) + padRight(displayCurrent, 15) + (def.description ?? def.label)
3853
+ );
3854
+ }
3855
+ return {
3856
+ type: "message",
3857
+ messageType: "info",
3858
+ content: lines.join("\n")
3859
+ };
3860
+ }
3861
+ __name(listAllSettings, "listAllSettings");
3862
+ var configCommand = {
3863
+ name: "config",
3864
+ get description() {
3865
+ return t("Get or set any setting by dot-path key");
3866
+ },
3867
+ argumentHint: "<key>[=<value>] or --help",
3868
+ kind: "built-in" /* BUILT_IN */,
3869
+ supportedModes: ["interactive", "non_interactive", "acp"],
3870
+ action: /* @__PURE__ */ __name(async (context, args) => {
3871
+ const trimmed = args.trim();
3872
+ if (!trimmed || trimmed === "--help" || trimmed === "-h") {
3873
+ return listAllSettings(context);
3874
+ }
3875
+ const eqIndex = trimmed.indexOf("=");
3876
+ const isToggle = eqIndex === -1;
3877
+ const key = isToggle ? trimmed : trimmed.slice(0, eqIndex).trim();
3878
+ const rawValue = isToggle ? void 0 : trimmed.slice(eqIndex + 1).trim();
3879
+ const def = getSettingDefinition(key);
3880
+ if (!def) {
3881
+ const suggestion = findClosestKey(key);
3882
+ return {
3883
+ type: "message",
3884
+ messageType: "error",
3885
+ content: suggestion ? t(
3886
+ 'Unknown setting key: "{{key}}". Did you mean "{{suggestion}}"?',
3887
+ { key, suggestion }
3888
+ ) : t('Unknown setting key: "{{key}}".', { key })
3889
+ };
3890
+ }
3891
+ const currentValue = getNestedProperty(
3892
+ context.services.settings.merged,
3893
+ key
3894
+ );
3895
+ if (isToggle && def.type !== "boolean") {
3896
+ const display = isSensitiveKey(key) ? maskValue(currentValue) : formatValue(currentValue);
3897
+ return {
3898
+ type: "message",
3899
+ messageType: "info",
3900
+ content: `${key} = ${display}`
3901
+ };
3902
+ }
3903
+ if (isToggle && def.type === "boolean") {
3904
+ const newValue = !currentValue;
3905
+ try {
3906
+ context.services.settings.setValues([
3907
+ { scope: "User" /* User */, key, value: newValue }
3908
+ ]);
3909
+ } catch (error) {
3910
+ return {
3911
+ type: "message",
3912
+ messageType: "error",
3913
+ content: t('Failed to set "{{key}}": {{error}}', {
3914
+ key,
3915
+ error: error instanceof Error ? error.message : String(error)
3916
+ })
3917
+ };
3918
+ }
3919
+ let message2 = t("Set {{key}} = {{value}}", {
3920
+ key,
3921
+ value: String(newValue)
3922
+ });
3923
+ if (def.requiresRestart) {
3924
+ message2 += "\n" + t("(This setting requires a restart to take effect.)");
3925
+ }
3926
+ return {
3927
+ type: "message",
3928
+ messageType: "info",
3929
+ content: message2
3930
+ };
3931
+ }
3932
+ const result = coerceValue(def, rawValue);
3933
+ if (result.error) {
3934
+ return {
3935
+ type: "message",
3936
+ messageType: "error",
3937
+ content: result.error
3938
+ };
3939
+ }
3940
+ if (key === "tools.approvalMode" && result.value === "yolo") {
3941
+ return {
3942
+ type: "message",
3943
+ messageType: "error",
3944
+ content: t(
3945
+ 'Setting tools.approvalMode to "yolo" is blocked via /config for security reasons. Edit settings.json directly if you understand the risks.'
3946
+ )
3947
+ };
3948
+ }
3949
+ try {
3950
+ context.services.settings.setValues([
3951
+ { scope: "User" /* User */, key, value: result.value }
3952
+ ]);
3953
+ } catch (error) {
3954
+ return {
3955
+ type: "message",
3956
+ messageType: "error",
3957
+ content: t('Failed to set "{{key}}": {{error}}', {
3958
+ key,
3959
+ error: error instanceof Error ? error.message : String(error)
3960
+ })
3961
+ };
3962
+ }
3963
+ const displayValue = isSensitiveKey(key) ? maskValue(result.value) : formatValue(result.value);
3964
+ let message = t("Set {{key}} = {{value}}", {
3965
+ key,
3966
+ value: displayValue
3967
+ });
3968
+ if (def.requiresRestart) {
3969
+ message += "\n" + t("(This setting requires a restart to take effect.)");
3970
+ }
3971
+ if (isSensitiveKey(key)) {
3972
+ message += "\n" + t(
3973
+ "(Security-sensitive setting \u2014 verify you are not exposing credentials.)"
3974
+ );
3975
+ }
3976
+ return {
3977
+ type: "message",
3978
+ messageType: "info",
3979
+ content: message
3980
+ };
3981
+ }, "action"),
3982
+ completion: /* @__PURE__ */ __name(async (_context, partialArg) => {
3983
+ const current = partialArg.trimStart();
3984
+ if (current.includes("=")) return null;
3985
+ const allKeys = getAllSettingKeys();
3986
+ return allKeys.filter((k) => {
3987
+ if (!k.startsWith(current)) return false;
3988
+ const def = getSettingDefinition(k);
3989
+ return def && SETTABLE_TYPES.has(def.type);
3990
+ }).map((k) => {
3991
+ const def = getSettingDefinition(k);
3992
+ return {
3993
+ value: k,
3994
+ description: def?.description ?? ""
3995
+ };
3996
+ });
3997
+ }, "completion")
3998
+ };
3999
+
3679
4000
  // packages/cli/src/ui/commands/deleteCommand.ts
3680
4001
  init_esbuild_shims();
3681
4002
  var deleteCommand = {
@@ -4407,7 +4728,7 @@ init_esbuild_shims();
4407
4728
  // packages/cli/src/utils/doctorChecks.ts
4408
4729
  init_esbuild_shims();
4409
4730
  import process4 from "node:process";
4410
- import os3 from "node:os";
4731
+ import os from "node:os";
4411
4732
  var MIN_NODE_MAJOR = 22;
4412
4733
  function checkNodeVersion() {
4413
4734
  const version = process4.version;
@@ -4456,7 +4777,7 @@ function checkPlatform() {
4456
4777
  category: t("System"),
4457
4778
  name: t("Platform"),
4458
4779
  status: "pass",
4459
- message: `${process4.platform}/${process4.arch} (${os3.release()})`
4780
+ message: `${process4.platform}/${process4.arch} (${os.release()})`
4460
4781
  };
4461
4782
  }
4462
4783
  __name(checkPlatform, "checkPlatform");
@@ -4756,7 +5077,7 @@ __name(runDoctorChecks, "runDoctorChecks");
4756
5077
  // packages/cli/src/utils/memoryDiagnostics.ts
4757
5078
  init_esbuild_shims();
4758
5079
  import * as fs4 from "node:fs";
4759
- import * as os4 from "node:os";
5080
+ import * as os2 from "node:os";
4760
5081
  import * as path4 from "node:path";
4761
5082
  import * as v8 from "node:v8";
4762
5083
  var HIGH_HEAP_PRESSURE_THRESHOLD = 0.85;
@@ -4813,7 +5134,7 @@ function getMemoryDiagnostics() {
4813
5134
  }
4814
5135
  __name(getMemoryDiagnostics, "getMemoryDiagnostics");
4815
5136
  function defaultHeapSnapshotDir() {
4816
- return path4.join(os4.homedir(), ".qwen", "memory-snapshots");
5137
+ return path4.join(os2.homedir(), ".qwen", "memory-snapshots");
4817
5138
  }
4818
5139
  __name(defaultHeapSnapshotDir, "defaultHeapSnapshotDir");
4819
5140
  function formatSnapshotTimestamp(now) {
@@ -4946,7 +5267,7 @@ function writeMemoryHeapSnapshot({
4946
5267
  }
4947
5268
  __name(writeMemoryHeapSnapshot, "writeMemoryHeapSnapshot");
4948
5269
  function defaultWait(ms) {
4949
- return new Promise((resolve6) => setTimeout(resolve6, ms));
5270
+ return new Promise((resolve5) => setTimeout(resolve5, ms));
4950
5271
  }
4951
5272
  __name(defaultWait, "defaultWait");
4952
5273
  function normalizeSampleCount(sampleCount) {
@@ -5156,7 +5477,7 @@ init_esbuild_shims();
5156
5477
  var import_undici = __toESM(require_undici(), 1);
5157
5478
  import { createHash } from "node:crypto";
5158
5479
  import * as fs5 from "node:fs";
5159
- import * as os5 from "node:os";
5480
+ import * as os3 from "node:os";
5160
5481
  import * as path5 from "node:path";
5161
5482
  import { Readable, Transform } from "node:stream";
5162
5483
  import { spawn as spawn2, execFile } from "node:child_process";
@@ -5359,7 +5680,7 @@ __name(isSafeTarEntryPath, "isSafeTarEntryPath");
5359
5680
  async function extractArchive(archivePath, destDir, target) {
5360
5681
  fs5.mkdirSync(destDir, { recursive: true });
5361
5682
  if (target.startsWith("win")) {
5362
- await new Promise((resolve6, reject) => {
5683
+ await new Promise((resolve5, reject) => {
5363
5684
  const ps = spawn2(
5364
5685
  "powershell.exe",
5365
5686
  [
@@ -5371,7 +5692,7 @@ async function extractArchive(archivePath, destDir, target) {
5371
5692
  );
5372
5693
  ps.on(
5373
5694
  "close",
5374
- (code) => code === 0 ? resolve6() : reject(new Error(`Expand-Archive exited with code ${code}`))
5695
+ (code) => code === 0 ? resolve5() : reject(new Error(`Expand-Archive exited with code ${code}`))
5375
5696
  );
5376
5697
  ps.on("error", reject);
5377
5698
  });
@@ -5379,7 +5700,7 @@ async function extractArchive(archivePath, destDir, target) {
5379
5700
  validateExtractedPaths(resolvedDest);
5380
5701
  } else {
5381
5702
  const resolvedDest = path5.resolve(destDir);
5382
- await extract({
5703
+ await So({
5383
5704
  file: archivePath,
5384
5705
  cwd: destDir,
5385
5706
  preservePaths: false,
@@ -5403,7 +5724,7 @@ async function extractArchive(archivePath, destDir, target) {
5403
5724
  }
5404
5725
  __name(extractArchive, "extractArchive");
5405
5726
  function spawnAndCapture(command, args, timeoutMs) {
5406
- return new Promise((resolve6, reject) => {
5727
+ return new Promise((resolve5, reject) => {
5407
5728
  let settled = false;
5408
5729
  const child = execFile(
5409
5730
  command,
@@ -5418,10 +5739,10 @@ function spawnAndCapture(command, args, timeoutMs) {
5418
5739
  }
5419
5740
  if (err) {
5420
5741
  const exitCode = "code" in err && typeof err.code === "number" ? err.code : 1;
5421
- resolve6({ exitCode, stdout: out || "", stderr: stderr || "" });
5742
+ resolve5({ exitCode, stdout: out || "", stderr: stderr || "" });
5422
5743
  return;
5423
5744
  }
5424
- resolve6({ exitCode: 0, stdout: out || "", stderr: stderr || "" });
5745
+ resolve5({ exitCode: 0, stdout: out || "", stderr: stderr || "" });
5425
5746
  }
5426
5747
  );
5427
5748
  child.on("error", (e) => {
@@ -5524,7 +5845,7 @@ function atomicReplace(standaloneDir, newDir, lockPath) {
5524
5845
  if (fs5.existsSync(oldDir)) {
5525
5846
  fs5.rmSync(oldDir, { recursive: true, force: true });
5526
5847
  }
5527
- if (os5.platform() === "win32") {
5848
+ if (os3.platform() === "win32") {
5528
5849
  if (UNSAFE_CMD_CHARS.test(standaloneDir) || UNSAFE_CMD_CHARS.test(oldDir) || UNSAFE_CMD_CHARS.test(pendingDir)) {
5529
5850
  throw new Error(
5530
5851
  "Installation path contains characters unsafe for deferred update script"
@@ -5634,13 +5955,13 @@ function ensurePathInShellRc(binDir) {
5634
5955
  assertSafeForShellEmbed(binDir, "binDir");
5635
5956
  const shell = process.env["SHELL"] || "";
5636
5957
  let rcFile = null;
5637
- const home = process.env["HOME"] || os5.homedir();
5958
+ const home = process.env["HOME"] || os3.homedir();
5638
5959
  if (shell.endsWith("/zsh")) {
5639
5960
  rcFile = path5.join(home, ".zshrc");
5640
5961
  } else if (shell.endsWith("/bash")) {
5641
5962
  const bashrc = path5.join(home, ".bashrc");
5642
5963
  const profile = path5.join(home, ".bash_profile");
5643
- if (os5.platform() === "darwin") {
5964
+ if (os3.platform() === "darwin") {
5644
5965
  rcFile = fs5.existsSync(profile) ? profile : bashrc;
5645
5966
  } else {
5646
5967
  rcFile = bashrc;
@@ -5668,8 +5989,8 @@ export PATH="${binDir}:$PATH"
5668
5989
  }
5669
5990
  __name(ensurePathInShellRc, "ensurePathInShellRc");
5670
5991
  function detectTarget() {
5671
- const platform3 = os5.platform();
5672
- const arch2 = os5.arch();
5992
+ const platform3 = os3.platform();
5993
+ const arch2 = os3.arch();
5673
5994
  if (platform3 === "darwin") {
5674
5995
  return arch2 === "arm64" ? "darwin-arm64" : "darwin-x64";
5675
5996
  }
@@ -5709,7 +6030,7 @@ async function performStandaloneUpdate(standaloneDir, newVersion) {
5709
6030
  if (isFirstTimeMigration) {
5710
6031
  fs5.mkdirSync(standaloneDir, { recursive: true });
5711
6032
  }
5712
- const tempDir = fs5.mkdtempSync(path5.join(os5.tmpdir(), "qwen-code-update-"));
6033
+ const tempDir = fs5.mkdtempSync(path5.join(os3.tmpdir(), "qwen-code-update-"));
5713
6034
  let extractDir;
5714
6035
  let updateResult;
5715
6036
  try {
@@ -6512,14 +6833,14 @@ async function cpuProfileDoctorAction(context, args = "") {
6512
6833
  })
6513
6834
  });
6514
6835
  }
6515
- await new Promise((resolve6) => {
6516
- const timer = setTimeout(resolve6, durationSec * 1e3);
6836
+ await new Promise((resolve5) => {
6837
+ const timer = setTimeout(resolve5, durationSec * 1e3);
6517
6838
  if (abortSignal) {
6518
6839
  abortSignal.addEventListener(
6519
6840
  "abort",
6520
6841
  () => {
6521
6842
  clearTimeout(timer);
6522
- resolve6();
6843
+ resolve5();
6523
6844
  },
6524
6845
  { once: true }
6525
6846
  );
@@ -6809,7 +7130,7 @@ async function extractMetadata(conversation, config) {
6809
7130
  const gitBranch = firstRecord?.gitBranch;
6810
7131
  let gitRepo;
6811
7132
  if (cwd) {
6812
- const { getGitRepoName } = await import("./src-KUV5J5Q2.js");
7133
+ const { getGitRepoName } = await import("./src-OVZLTVVM.js");
6813
7134
  gitRepo = getGitRepoName(cwd);
6814
7135
  }
6815
7136
  let model;
@@ -9236,15 +9557,15 @@ function getIdeStatusMessage(ideClient) {
9236
9557
  case "connected" /* Connected */:
9237
9558
  return {
9238
9559
  messageType: "info",
9239
- content: `\u{1F7E2} Connected to ${ideClient.getDetectedIdeDisplayName()}`
9560
+ content: `\u2713 Connected to ${ideClient.getDetectedIdeDisplayName()}`
9240
9561
  };
9241
9562
  case "connecting" /* Connecting */:
9242
9563
  return {
9243
9564
  messageType: "info",
9244
- content: `\u{1F7E1} Connecting...`
9565
+ content: `\u25D0 Connecting...`
9245
9566
  };
9246
9567
  default: {
9247
- let content = `\u{1F534} Disconnected`;
9568
+ let content = `\u2717 Disconnected`;
9248
9569
  if (connection?.details) {
9249
9570
  content += `: ${connection.details}`;
9250
9571
  }
@@ -9282,7 +9603,7 @@ async function getIdeStatusMessageWithFiles(ideClient) {
9282
9603
  const connection = ideClient.getConnectionStatus();
9283
9604
  switch (connection.status) {
9284
9605
  case "connected" /* Connected */: {
9285
- let content = `\u{1F7E2} Connected to ${ideClient.getDetectedIdeDisplayName()}`;
9606
+ let content = `\u2713 Connected to ${ideClient.getDetectedIdeDisplayName()}`;
9286
9607
  const context = ideContextStore.get();
9287
9608
  const openFiles = context?.workspaceState?.openFiles;
9288
9609
  if (openFiles && openFiles.length > 0) {
@@ -9296,10 +9617,10 @@ async function getIdeStatusMessageWithFiles(ideClient) {
9296
9617
  case "connecting" /* Connecting */:
9297
9618
  return {
9298
9619
  messageType: "info",
9299
- content: `\u{1F7E1} Connecting...`
9620
+ content: `\u25D0 Connecting...`
9300
9621
  };
9301
9622
  default: {
9302
- let content = `\u{1F534} Disconnected`;
9623
+ let content = `\u2717 Disconnected`;
9303
9624
  if (connection?.details) {
9304
9625
  content += `: ${connection.details}`;
9305
9626
  }
@@ -9427,7 +9748,7 @@ var ideCommand = /* @__PURE__ */ __name(async () => {
9427
9748
  if (ideClient.getConnectionStatus().status === "connected" /* Connected */) {
9428
9749
  break;
9429
9750
  }
9430
- await new Promise((resolve6) => setTimeout(resolve6, 500));
9751
+ await new Promise((resolve5) => setTimeout(resolve5, 500));
9431
9752
  }
9432
9753
  const { messageType, content } = getIdeStatusMessage(ideClient);
9433
9754
  if (messageType === "error") {
@@ -9518,7 +9839,7 @@ init_esbuild_shims();
9518
9839
  // packages/cli/src/config/claudeMcpImport.ts
9519
9840
  init_esbuild_shims();
9520
9841
  import * as fs8 from "node:fs";
9521
- import * as os6 from "node:os";
9842
+ import * as os4 from "node:os";
9522
9843
  import * as path9 from "node:path";
9523
9844
  var import_strip_json_comments = __toESM(require_strip_json_comments(), 1);
9524
9845
  function isRecord(value) {
@@ -9605,11 +9926,11 @@ function getClaudeProjectSettings(projects, cwd) {
9605
9926
  return void 0;
9606
9927
  }
9607
9928
  __name(getClaudeProjectSettings, "getClaudeProjectSettings");
9608
- function getClaudeCodeConfigPath(homeDir = os6.homedir()) {
9929
+ function getClaudeCodeConfigPath(homeDir = os4.homedir()) {
9609
9930
  return path9.join(homeDir, ".claude.json");
9610
9931
  }
9611
9932
  __name(getClaudeCodeConfigPath, "getClaudeCodeConfigPath");
9612
- function getClaudeDesktopConfigPath(homeDir = os6.homedir(), platform3 = process.platform, env = process.env) {
9933
+ function getClaudeDesktopConfigPath(homeDir = os4.homedir(), platform3 = process.platform, env = process.env) {
9613
9934
  if (platform3 === "win32") {
9614
9935
  const appData = env["APPDATA"] ?? path9.win32.join(homeDir, "AppData", "Roaming");
9615
9936
  return path9.win32.join(appData, "Claude", "claude_desktop_config.json");
@@ -9775,7 +10096,7 @@ function loadClaudeDesktopMcpServers(homeDir, platform3, env) {
9775
10096
  }
9776
10097
  __name(loadClaudeDesktopMcpServers, "loadClaudeDesktopMcpServers");
9777
10098
  function loadClaudeMcpSources(options) {
9778
- const homeDir = options.homeDir ?? os6.homedir();
10099
+ const homeDir = options.homeDir ?? os4.homedir();
9779
10100
  const cwd = options.cwd ?? process.cwd();
9780
10101
  const platform3 = options.platform ?? process.platform;
9781
10102
  const env = options.env ?? process.env;
@@ -10658,6 +10979,12 @@ init_esbuild_shims();
10658
10979
  var MAIN_MODEL_CONFIGURATION_HINT = "Configure models in settings.modelProviders and ensure the required environment variables are set. In interactive mode, run /auth to configure or switch providers, or run /model without arguments to choose from configured models.";
10659
10980
  var FAST_MODEL_CONFIGURATION_HINT = "Configure models in settings.modelProviders and ensure the required environment variables are set. In interactive mode, run /auth to configure or switch providers, or run /model --fast without a model to choose from configured models.";
10660
10981
  var VISION_MODEL_CONFIGURATION_HINT = "Configure an image-capable model in settings.modelProviders and ensure the required environment variables are set. Run /model --vision <model-id> to set it, or leave it unset to auto-pick a same-provider vision model.";
10982
+ function formatVisionModelSettingForDisplay(setting) {
10983
+ const parsed = parseVisionModelSetting(setting);
10984
+ if (!parsed) return setting.replace(/\0/g, "\\0");
10985
+ return parsed.baseUrl ? `${parsed.selector} (${parsed.baseUrl})` : parsed.selector;
10986
+ }
10987
+ __name(formatVisionModelSettingForDisplay, "formatVisionModelSettingForDisplay");
10661
10988
  function persistSetting(settings, path20, value) {
10662
10989
  settings.setValue(getPersistScopeForModelSelection(settings), path20, value);
10663
10990
  }
@@ -10720,6 +11047,29 @@ function formatUnavailableVisionModelMessage(modelName, availableModels) {
10720
11047
  );
10721
11048
  }
10722
11049
  __name(formatUnavailableVisionModelMessage, "formatUnavailableVisionModelMessage");
11050
+ function formatAmbiguousVisionModelMessage(modelName, matchingModels) {
11051
+ const endpoints = matchingModels.map((model) => model.baseUrl ?? "(default endpoint)").join(", ");
11052
+ const qualifiedSelectors = Array.from(
11053
+ new Set(
11054
+ matchingModels.map(
11055
+ (model) => model.authType ? `${model.authType}:${model.id}` : void 0
11056
+ ).filter((selector) => selector !== void 0)
11057
+ )
11058
+ );
11059
+ const scriptedHint = qualifiedSelectors.length > 1 ? `
11060
+ ${t(
11061
+ "For scripts, pass an auth-qualified selector such as {{selector}}.",
11062
+ {
11063
+ selector: qualifiedSelectors[0]
11064
+ }
11065
+ )}` : "";
11066
+ return t("Vision model '{{modelName}}' matches multiple configured endpoints.", {
11067
+ modelName
11068
+ }) + "\n" + t("Matching endpoints: {{endpoints}}.", { endpoints }) + "\n" + t(
11069
+ "Run /model --vision without an argument and choose the exact endpoint."
11070
+ ) + scriptedHint;
11071
+ }
11072
+ __name(formatAmbiguousVisionModelMessage, "formatAmbiguousVisionModelMessage");
10723
11073
  function formatNonVisionModelWarning(modelName) {
10724
11074
  return t(
10725
11075
  "\u26A0 '{{model}}' is not a known image-capable model; the vision bridge may fail on images.",
@@ -10760,10 +11110,10 @@ var modelCommand = {
10760
11110
  completionPriority: 100,
10761
11111
  get description() {
10762
11112
  return t(
10763
- "Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, --vision for the vision bridge model, [model-id] to switch immediately)."
11113
+ "Switch the model for this session (--fast for suggestion model, --voice for voice transcription model, --vision for the vision bridge model, [model-id] to switch immediately, or [model-id] [prompt] to run a one-off prompt on another model; the inline prompt is sent verbatim without @file expansion)."
10764
11114
  );
10765
11115
  },
10766
- argumentHint: "[--fast|--voice|--vision] [<model-id>]",
11116
+ argumentHint: "[--fast|--voice|--vision] [<model-id>] | <model-id> <prompt>",
10767
11117
  kind: "built-in" /* BUILT_IN */,
10768
11118
  supportedModes: ["interactive", "non_interactive", "acp"],
10769
11119
  completion: /* @__PURE__ */ __name(async (context, partialArg) => {
@@ -10960,13 +11310,15 @@ Use "/model --fast <model-id>" to set fast model.`
10960
11310
  const modelName2 = args.replace("--vision", "").trim();
10961
11311
  if (!modelName2) {
10962
11312
  if (context.executionMode !== "interactive") {
10963
- const visionModel = context.services.settings?.merged?.visionModel?.trim() || t("not set");
11313
+ const visionModel2 = context.services.settings?.merged?.visionModel?.trim();
10964
11314
  return {
10965
11315
  type: "message",
10966
11316
  messageType: "info",
10967
11317
  content: t(
10968
11318
  'Current vision model: {{visionModel}}\nUse "/model --vision <model-id>" to set the vision bridge model.',
10969
- { visionModel }
11319
+ {
11320
+ visionModel: visionModel2 ? formatVisionModelSettingForDisplay(visionModel2) : t("not set")
11321
+ }
10970
11322
  )
10971
11323
  };
10972
11324
  }
@@ -10997,9 +11349,17 @@ Use "/model --fast <model-id>" to set fast model.`
10997
11349
  };
10998
11350
  }
10999
11351
  const availableModels = (selector.authType ? config.getAvailableModelsForAuthType(selector.authType) : config.getAllConfiguredModels()).filter((m) => !m.fastOnly && !m.voiceOnly);
11000
- const matched = availableModels.find(
11352
+ const matchingModels = availableModels.filter(
11001
11353
  (model) => model.id === selector.modelId
11002
11354
  );
11355
+ if (matchingModels.length > 1) {
11356
+ return {
11357
+ type: "message",
11358
+ messageType: "error",
11359
+ content: formatAmbiguousVisionModelMessage(modelName2, matchingModels)
11360
+ };
11361
+ }
11362
+ const matched = matchingModels[0];
11003
11363
  if (!matched) {
11004
11364
  return {
11005
11365
  type: "message",
@@ -11022,8 +11382,10 @@ Use "/model --fast <model-id>" to set fast model.`
11022
11382
  )
11023
11383
  };
11024
11384
  }
11025
- persistSetting(settings, "visionModel", modelName2);
11026
- config.setVisionModel(modelName2);
11385
+ const qualifiedModelName = `${selector.authType ?? matched.authType}:${selector.modelId}`;
11386
+ const visionModel = matched.baseUrl ? `${qualifiedModelName}\0${matched.baseUrl}` : qualifiedModelName;
11387
+ persistSetting(settings, "visionModel", visionModel);
11388
+ config.setVisionModel(visionModel);
11027
11389
  const visionWarning = isImageCapable(matched) ? "" : `
11028
11390
  ${formatNonVisionModelWarning(modelName2)}`;
11029
11391
  return {
@@ -11048,15 +11410,11 @@ ${formatNonVisionModelWarning(modelName2)}`;
11048
11410
  content: t("Authentication type not available.")
11049
11411
  };
11050
11412
  }
11051
- const modelName = args.trim().split(/\s+/)[0] ?? "";
11413
+ const trimmedArgs = args.trim();
11414
+ const firstSpace = trimmedArgs.search(/\s/);
11415
+ const modelName = firstSpace === -1 ? trimmedArgs : trimmedArgs.slice(0, firstSpace);
11416
+ const inlinePrompt = firstSpace === -1 ? "" : trimmedArgs.slice(firstSpace + 1).trim();
11052
11417
  if (modelName) {
11053
- if (!settings) {
11054
- return {
11055
- type: "message",
11056
- messageType: "error",
11057
- content: t("Settings service not available.")
11058
- };
11059
- }
11060
11418
  const parsed = parseAcpModelOption(modelName);
11061
11419
  const targetAuthType = parsed.authType ?? authType;
11062
11420
  const availableModels = config.getAvailableModelsForAuthType(targetAuthType).filter((m) => !m.fastOnly && !m.voiceOnly);
@@ -11072,6 +11430,41 @@ ${formatNonVisionModelWarning(modelName2)}`;
11072
11430
  )
11073
11431
  };
11074
11432
  }
11433
+ if (inlinePrompt) {
11434
+ if (context.executionMode === "acp") {
11435
+ return {
11436
+ type: "message",
11437
+ messageType: "error",
11438
+ content: t(
11439
+ "Inline one-shot override isn't supported in this mode \u2014 run '/model {{model}}' first, then send your prompt.",
11440
+ { model: modelName }
11441
+ )
11442
+ };
11443
+ }
11444
+ const sameAuthType = targetAuthType === authType;
11445
+ if (!sameAuthType || !isInlineModelOverrideAllowed(config, parsed.modelId)) {
11446
+ return {
11447
+ type: "message",
11448
+ messageType: "error",
11449
+ content: t(
11450
+ "Inline one-shot override can't switch providers. '{{model}}' belongs to a different provider \u2014 run '/model {{model}}' first, then send your prompt.",
11451
+ { model: modelName }
11452
+ )
11453
+ };
11454
+ }
11455
+ return {
11456
+ type: "submit_prompt",
11457
+ content: inlinePrompt,
11458
+ modelOverride: parsed.modelId
11459
+ };
11460
+ }
11461
+ if (!settings) {
11462
+ return {
11463
+ type: "message",
11464
+ messageType: "error",
11465
+ content: t("Settings service not available.")
11466
+ };
11467
+ }
11075
11468
  const effectiveModelName = await switchMainModel(
11076
11469
  config,
11077
11470
  settings,
@@ -11129,21 +11522,14 @@ var rememberCommand = {
11129
11522
  }
11130
11523
  const useManagedMemory = config?.isManagedMemoryAvailable() ?? false;
11131
11524
  if (useManagedMemory) {
11132
- const projectDir = config ? getAutoMemoryRoot(config.getProjectRoot()) : void 0;
11133
- const userDir = getUserAutoMemoryRoot();
11134
- const dirHint = projectDir !== void 0 ? ` Choose the destination directory by the type's \`<scope>\`: USER memory at \`${userDir}\` for cross-project facts, PROJECT memory at \`${projectDir}\` for this-project-only facts.` : "";
11135
11525
  return {
11136
11526
  type: "submit_prompt",
11137
- content: `Please save the following to your memory system.${dirHint} Choose the most appropriate memory type (user, feedback, project, or reference) based on the content:
11138
-
11139
- ${fact}`
11527
+ content: buildManagedRememberPrompt(fact, config.getProjectRoot())
11140
11528
  };
11141
11529
  }
11142
11530
  return {
11143
11531
  type: "submit_prompt",
11144
- content: `Please save the following fact to memory (e.g. append to QWEN.md in the project root):
11145
-
11146
- ${fact}`
11532
+ content: buildBareRememberPrompt(fact)
11147
11533
  };
11148
11534
  }, "action")
11149
11535
  };
@@ -12722,7 +13108,7 @@ var summaryCommand = {
12722
13108
  ui.addItem(
12723
13109
  {
12724
13110
  type: "error",
12725
- text: `\u274C ${formatErrorMessage3(error)}`
13111
+ text: `\u2717 ${formatErrorMessage3(error)}`
12726
13112
  },
12727
13113
  Date.now()
12728
13114
  );
@@ -12823,7 +13209,7 @@ init_esbuild_shims();
12823
13209
  // packages/cli/src/ui/utils/terminalSetup.ts
12824
13210
  init_esbuild_shims();
12825
13211
  import { promises as fs12 } from "node:fs";
12826
- import * as os7 from "node:os";
13212
+ import * as os5 from "node:os";
12827
13213
  import * as path15 from "node:path";
12828
13214
  import { exec } from "node:child_process";
12829
13215
  import { promisify } from "node:util";
@@ -12847,7 +13233,7 @@ async function detectTerminal() {
12847
13233
  if (termProgram === "vscode" || process.env["VSCODE_GIT_IPC_HANDLE"]) {
12848
13234
  return "vscode";
12849
13235
  }
12850
- if (os7.platform() !== "win32") {
13236
+ if (os5.platform() !== "win32") {
12851
13237
  try {
12852
13238
  const { stdout } = await execAsync("ps -o comm= -p $PPID");
12853
13239
  const parentName = stdout.trim();
@@ -12877,10 +13263,10 @@ async function backupFile(filePath) {
12877
13263
  }
12878
13264
  __name(backupFile, "backupFile");
12879
13265
  function getVSCodeStyleConfigDir(appName) {
12880
- const platform3 = os7.platform();
13266
+ const platform3 = os5.platform();
12881
13267
  if (platform3 === "darwin") {
12882
13268
  return path15.join(
12883
- os7.homedir(),
13269
+ os5.homedir(),
12884
13270
  "Library",
12885
13271
  "Application Support",
12886
13272
  appName,
@@ -12892,7 +13278,7 @@ function getVSCodeStyleConfigDir(appName) {
12892
13278
  }
12893
13279
  return path15.join(process.env["APPDATA"], appName, "User");
12894
13280
  } else {
12895
- return path15.join(os7.homedir(), ".config", appName, "User");
13281
+ return path15.join(os5.homedir(), ".config", appName, "User");
12896
13282
  }
12897
13283
  }
12898
13284
  __name(getVSCodeStyleConfigDir, "getVSCodeStyleConfigDir");
@@ -13360,7 +13746,7 @@ var setupGithubCommand = {
13360
13746
 
13361
13747
  // packages/cli/src/ui/commands/insightCommand.ts
13362
13748
  init_esbuild_shims();
13363
- import { join as join10 } from "path";
13749
+ import { join as join9 } from "path";
13364
13750
  import { pathToFileURL } from "node:url";
13365
13751
 
13366
13752
  // packages/cli/src/services/insight/generators/StaticInsightGenerator.ts
@@ -13471,27 +13857,27 @@ function pLimit(concurrency) {
13471
13857
  activeCount--;
13472
13858
  resumeNext();
13473
13859
  }, "next");
13474
- const run = /* @__PURE__ */ __name(async (function_, resolve6, arguments_) => {
13860
+ const run = /* @__PURE__ */ __name(async (function_, resolve5, arguments_) => {
13475
13861
  const result = (async () => function_(...arguments_))();
13476
- resolve6(result);
13862
+ resolve5(result);
13477
13863
  try {
13478
13864
  await result;
13479
13865
  } catch {
13480
13866
  }
13481
13867
  next();
13482
13868
  }, "run");
13483
- const enqueue = /* @__PURE__ */ __name((function_, resolve6, reject, arguments_) => {
13869
+ const enqueue = /* @__PURE__ */ __name((function_, resolve5, reject, arguments_) => {
13484
13870
  const queueItem = { reject };
13485
13871
  new Promise((internalResolve) => {
13486
13872
  queueItem.run = internalResolve;
13487
13873
  queue.enqueue(queueItem);
13488
- }).then(run.bind(void 0, function_, resolve6, arguments_));
13874
+ }).then(run.bind(void 0, function_, resolve5, arguments_));
13489
13875
  if (activeCount < concurrency) {
13490
13876
  resumeNext();
13491
13877
  }
13492
13878
  }, "enqueue");
13493
- const generator = /* @__PURE__ */ __name((function_, ...arguments_) => new Promise((resolve6, reject) => {
13494
- enqueue(function_, resolve6, reject, arguments_);
13879
+ const generator = /* @__PURE__ */ __name((function_, ...arguments_) => new Promise((resolve5, reject) => {
13880
+ enqueue(function_, resolve5, reject, arguments_);
13495
13881
  }), "generator");
13496
13882
  Object.defineProperties(generator, {
13497
13883
  activeCount: {
@@ -14432,7 +14818,7 @@ None captured`;
14432
14818
  overallProgress
14433
14819
  );
14434
14820
  }
14435
- await new Promise((resolve6) => setTimeout(resolve6, 0));
14821
+ await new Promise((resolve5) => setTimeout(resolve5, 0));
14436
14822
  }
14437
14823
  const streakData = this.calculateStreaks(Object.keys(heatmap));
14438
14824
  let longestWorkDuration = 0;
@@ -14728,7 +15114,7 @@ var insightCommand = {
14728
15114
  action: /* @__PURE__ */ __name(async (context) => {
14729
15115
  try {
14730
15116
  context.ui.setDebugMessage(t("Generating insights..."));
14731
- const projectsDir = join10(Storage.getRuntimeBaseDir(), "projects");
15117
+ const projectsDir = join9(Storage.getRuntimeBaseDir(), "projects");
14732
15118
  if (!context.services.config) {
14733
15119
  if (context.executionMode !== "interactive") {
14734
15120
  return {
@@ -14771,12 +15157,12 @@ var insightCommand = {
14771
15157
  let isComplete = false;
14772
15158
  let resume = null;
14773
15159
  const flushResume = /* @__PURE__ */ __name(() => {
14774
- const resolve6 = resume;
14775
- if (!resolve6) {
15160
+ const resolve5 = resume;
15161
+ if (!resolve5) {
14776
15162
  return;
14777
15163
  }
14778
15164
  resume = null;
14779
- resolve6();
15165
+ resolve5();
14780
15166
  }, "flushResume");
14781
15167
  const pushMessage = /* @__PURE__ */ __name((message) => {
14782
15168
  pendingMessages.push(message);
@@ -14785,8 +15171,8 @@ var insightCommand = {
14785
15171
  const streamMessages = /* @__PURE__ */ __name(async function* () {
14786
15172
  while (!isComplete || pendingMessages.length > 0) {
14787
15173
  if (pendingMessages.length === 0) {
14788
- await new Promise((resolve6) => {
14789
- resume = resolve6;
15174
+ await new Promise((resolve5) => {
15175
+ resume = resolve5;
14790
15176
  });
14791
15177
  }
14792
15178
  while (pendingMessages.length > 0) {
@@ -15084,6 +15470,7 @@ var BuiltinCommandLoader = class {
15084
15470
  clearCommand,
15085
15471
  compressCommand,
15086
15472
  compressFastCommand,
15473
+ configCommand,
15087
15474
  contextCommand,
15088
15475
  copyCommand,
15089
15476
  diffCommand,
@@ -16389,6 +16776,7 @@ function handleCommandResult(result, outputHistoryItems) {
16389
16776
  return {
16390
16777
  type: "submit_prompt",
16391
16778
  content: result.content,
16779
+ ...result.modelOverride ? { modelOverride: result.modelOverride } : {},
16392
16780
  ...outputHistoryItems?.length ? { outputHistoryItems } : {}
16393
16781
  };
16394
16782
  case "message":
@@ -16796,6 +17184,31 @@ function computeUsageFromMetrics(metrics) {
16796
17184
  return usage2;
16797
17185
  }
16798
17186
  __name(computeUsageFromMetrics, "computeUsageFromMetrics");
17187
+ function buildInitialSystemReminders(config) {
17188
+ const reminders = [];
17189
+ if (config.getApprovalMode() === "plan" /* PLAN */) {
17190
+ reminders.push({ text: getPlanModeSystemReminder(config.getSdkMode?.()) });
17191
+ }
17192
+ const arenaManager = config.getArenaManager?.();
17193
+ if (arenaManager) {
17194
+ try {
17195
+ const sessionDir = arenaManager.getArenaSessionDir();
17196
+ const configPath = `${sessionDir}/config.json`;
17197
+ reminders.push({ text: getArenaSystemReminder(configPath) });
17198
+ } catch {
17199
+ }
17200
+ }
17201
+ return reminders;
17202
+ }
17203
+ __name(buildInitialSystemReminders, "buildInitialSystemReminders");
17204
+ function insertAfterFunctionResponses(parts, additions) {
17205
+ const firstNonFunctionResponse = parts.findIndex(
17206
+ (part) => !part.functionResponse
17207
+ );
17208
+ const insertAt = firstNonFunctionResponse === -1 ? parts.length : firstNonFunctionResponse;
17209
+ return [...parts.slice(0, insertAt), ...additions, ...parts.slice(insertAt)];
17210
+ }
17211
+ __name(insertAfterFunctionResponses, "insertAfterFunctionResponses");
16799
17212
  async function loadSlashCommandNames(config) {
16800
17213
  const controller = new AbortController();
16801
17214
  try {
@@ -17035,6 +17448,8 @@ export {
17035
17448
  normalizePartList,
17036
17449
  extractPartsFromUserMessage,
17037
17450
  computeUsageFromMetrics,
17451
+ buildInitialSystemReminders,
17452
+ insertAfterFunctionResponses,
17038
17453
  buildSystemMessage,
17039
17454
  createToolProgressHandler,
17040
17455
  createAgentToolProgressHandler,