@qwen-code/qwen-code 0.19.3-nightly.20260701.a974594d7 → 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 (234) hide show
  1. package/bundled/loop/loop-tick-resolver.test.ts +42 -0
  2. package/bundled/loop/loop-tick-resolver.ts +1 -1
  3. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  4. package/bundled/qc-helper/docs/configuration/settings.md +23 -11
  5. package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
  6. package/bundled/qc-helper/docs/features/auto-mode.md +40 -0
  7. package/bundled/qc-helper/docs/features/channels/overview.md +81 -18
  8. package/bundled/qc-helper/docs/features/code-review.md +17 -61
  9. package/bundled/qc-helper/docs/features/commands.md +6 -6
  10. package/bundled/qc-helper/docs/features/mcp.md +3 -1
  11. package/bundled/qc-helper/docs/features/scheduled-tasks.md +10 -0
  12. package/bundled/qc-helper/docs/qwen-serve.md +19 -0
  13. package/bundled/review/DESIGN.md +21 -26
  14. package/bundled/review/SKILL.md +45 -129
  15. package/chunks/{MaxSizedBox-UZHJ73JB.js → MaxSizedBox-ERTNFI22.js} +20 -18
  16. package/chunks/{StandaloneSessionPicker-GGUIZWCE.js → StandaloneSessionPicker-Y5NGRLRY.js} +32 -29
  17. package/chunks/{acpAgent-QYZFICEZ.js → acpAgent-UMN6OYTR.js} +473 -187
  18. package/chunks/{agent-2EN7YNSW.js → agent-56DZU4ZU.js} +17 -15
  19. package/chunks/{agent-headless-SLTEZ5LV.js → agent-headless-SR7N2IJG.js} +17 -15
  20. package/chunks/{anthropicContentGenerator-CA3JTAMO.js → anthropicContentGenerator-5OZFO6WQ.js} +1 -1
  21. package/chunks/{artifact-tool-RM7WINJO.js → artifact-tool-JVZMHA4B.js} +1 -1
  22. package/chunks/{askUserQuestion-J3P6QAJ7.js → askUserQuestion-CMJZ2F3D.js} +1 -1
  23. package/chunks/{bridge-HZVAUTMX.js → bridge-AUHNFOUS.js} +23 -21
  24. package/chunks/channel-worker-supervisor-A74FV522.js +308 -0
  25. package/chunks/{chunk-N4V4VBP6.js → chunk-2X2JUE47.js} +2 -2
  26. package/chunks/{chunk-JV7A66DR.js → chunk-4VZH35PN.js} +528 -358
  27. package/chunks/{chunk-M2U5NM24.js → chunk-54YZOP7P.js} +309 -72
  28. package/chunks/{chunk-WGY3GIPP.js → chunk-6AQR7732.js} +1 -1
  29. package/chunks/{chunk-FR3II765.js → chunk-6CIIP6OE.js} +4 -4
  30. package/chunks/{chunk-IKO44NAT.js → chunk-6TLY5W3B.js} +2 -2
  31. package/chunks/{chunk-VN4CKYUW.js → chunk-73H73ASU.js} +1 -1
  32. package/chunks/{chunk-IBEM64M4.js → chunk-75X2VLSH.js} +36 -25
  33. package/chunks/{chunk-PLQTLKMR.js → chunk-7KPI4LAI.js} +3 -3
  34. package/chunks/{chunk-NVTRORSK.js → chunk-7VPC7D7O.js} +2 -2
  35. package/chunks/chunk-AHNXYU4O.js +24 -0
  36. package/chunks/{chunk-MTJVHQDP.js → chunk-B7KGXIPZ.js} +302 -257
  37. package/chunks/{chunk-35FH347N.js → chunk-BFG6OZN7.js} +16097 -16236
  38. package/chunks/{chunk-T44AF4I6.js → chunk-BNJLLAQ7.js} +1 -1
  39. package/chunks/{chunk-OEY3YAL2.js → chunk-BQNJBEUA.js} +2 -2
  40. package/chunks/{chunk-Q7TDHJ2G.js → chunk-C2IHHGBZ.js} +10 -10
  41. package/chunks/chunk-CG7SVARK.js +367 -0
  42. package/chunks/{chunk-7SP275SH.js → chunk-CS5XYDBO.js} +5 -5
  43. package/chunks/{chunk-V5YJAUHW.js → chunk-CUGEBAKG.js} +1 -1
  44. package/chunks/{chunk-FQDMX5IL.js → chunk-D5KISTLW.js} +309 -72
  45. package/chunks/{chunk-I4MXURND.js → chunk-DQ74W65K.js} +356 -468
  46. package/chunks/chunk-E5A7LHNN.js +51 -0
  47. package/chunks/{chunk-3PJXIDKI.js → chunk-E6US47KI.js} +3 -27
  48. package/chunks/chunk-EDAGQADF.js +21 -0
  49. package/chunks/{chunk-HUGAEYZR.js → chunk-FNLXLI4I.js} +2 -2
  50. package/chunks/{chunk-WJAY4WXR.js → chunk-FYKX6XOT.js} +1 -1
  51. package/chunks/{chunk-CA4ML3VH.js → chunk-G7OQ3RFJ.js} +1 -1
  52. package/chunks/{chunk-VHRREANT.js → chunk-GICCHL2Q.js} +3 -1
  53. package/chunks/{chunk-QHHNFG22.js → chunk-GLPV75ES.js} +1 -1
  54. package/chunks/{chunk-LD2XBG6Z.js → chunk-GO6LNQXT.js} +1 -39
  55. package/chunks/chunk-HI55Z6PR.js +3523 -0
  56. package/chunks/{chunk-B5MPZI4K.js → chunk-HJDF3ZVU.js} +2670 -1233
  57. package/chunks/{chunk-GDIG7TMG.js → chunk-HRZB5CSC.js} +1 -1
  58. package/chunks/{chunk-LDWTYE33.js → chunk-J3F7X3LW.js} +1 -1
  59. package/chunks/{chunk-FV4SQ54H.js → chunk-KVPFPC4J.js} +227 -85
  60. package/chunks/{chunk-Q3JOGB4U.js → chunk-L7QPM2YD.js} +1 -1
  61. package/chunks/{chunk-4722VFFU.js → chunk-L7VH7HQA.js} +6 -6
  62. package/chunks/{chunk-HWG4XLD7.js → chunk-LKWAVAB5.js} +1 -1
  63. package/chunks/{chunk-YCRTJYSQ.js → chunk-MEQWZGK5.js} +1 -1
  64. package/chunks/{chunk-6FIWYVN4.js → chunk-MKHC4BYZ.js} +30 -5
  65. package/chunks/{chunk-YCEHOJZJ.js → chunk-MNDTD5E5.js} +65 -38
  66. package/chunks/{chunk-ZGSV5ORL.js → chunk-MVZXZWGT.js} +809 -759
  67. package/chunks/chunk-MX2YXRER.js +44 -0
  68. package/chunks/{chunk-TMILTLP3.js → chunk-ND25GXEU.js} +21 -4
  69. package/chunks/{chunk-AIBPG5MB.js → chunk-OAFUMTWW.js} +2 -2
  70. package/chunks/chunk-OJCECIJA.js +238 -0
  71. package/chunks/{chunk-EUURTJY7.js → chunk-PIYV6COW.js} +1 -1
  72. package/chunks/{chunk-LXEW6BHF.js → chunk-Q7VHIRDD.js} +1 -1
  73. package/chunks/{chunk-DBR7PF4B.js → chunk-QAFQLTXG.js} +1 -1
  74. package/chunks/{chunk-3TK7FSCP.js → chunk-QMIND2AS.js} +3 -3
  75. package/chunks/{chunk-ESVSWG6Z.js → chunk-QOMAHFYI.js} +1 -1
  76. package/chunks/{chunk-J37FGIOA.js → chunk-QXPI7FEC.js} +38 -4
  77. package/chunks/chunk-RM3PGSGL.js +66 -0
  78. package/chunks/chunk-RNBYOUGV.js +42 -0
  79. package/chunks/chunk-S5EQPDTM.js +91 -0
  80. package/chunks/{chunk-GZKQ36JS.js → chunk-SFN4TEHY.js} +4 -4
  81. package/chunks/{chunk-DHXWNSJA.js → chunk-T22H4V4R.js} +42 -0
  82. package/chunks/{chunk-LXGWLOCM.js → chunk-TENOUWY2.js} +1 -1
  83. package/chunks/{chunk-BLAE2TCO.js → chunk-TTFNVEO5.js} +3 -3
  84. package/chunks/{chunk-FZY7NH37.js → chunk-UANCYOOQ.js} +1 -1
  85. package/chunks/{chunk-E5I6YSNO.js → chunk-UQFP2FEF.js} +1 -1
  86. package/chunks/{chunk-3O2BJMFW.js → chunk-UQYOMM6J.js} +4 -4
  87. package/chunks/{chunk-JERW36RG.js → chunk-UT5JU5DJ.js} +15 -15
  88. package/chunks/{chunk-DJ25MIU2.js → chunk-VKGG724L.js} +8 -8
  89. package/chunks/{chunk-G525INVW.js → chunk-W2ZOAX7F.js} +3 -3
  90. package/chunks/{chunk-HIYUAXBG.js → chunk-W6X4FGWX.js} +1 -1
  91. package/chunks/{chunk-OE5J6UA7.js → chunk-XCUFHOAD.js} +1 -1
  92. package/chunks/{chunk-KXVVXAAC.js → chunk-YBDZ63KI.js} +3 -3
  93. package/chunks/{chunk-Z34RYLRO.js → chunk-ZJP5T7IA.js} +1 -1
  94. package/chunks/{chunk-NOYV2NXI.js → chunk-ZXCVPMIK.js} +411 -43
  95. package/chunks/{computer-use-FCNWHVPW.js → computer-use-VWN5HH6A.js} +20 -18
  96. package/chunks/{contextCommand-FVFMZZEU.js → contextCommand-DFFG5KDJ.js} +19 -17
  97. package/chunks/{cron-create-IY5NMIHQ.js → cron-create-CSSWJ67I.js} +1 -1
  98. package/chunks/{cron-delete-OLNEQWKO.js → cron-delete-E56CFQ7A.js} +1 -1
  99. package/chunks/{cron-list-YAUAUV24.js → cron-list-BKSINY6Y.js} +1 -1
  100. package/chunks/daemon-5T6IHWJV.js +8430 -0
  101. package/chunks/{daemon-status-provider-42JEXENZ.js → daemon-status-provider-V5UY7O7J.js} +26 -24
  102. package/chunks/{dist-4FCNM6KJ.js → dist-2HDL5SHQ.js} +2 -2
  103. package/chunks/{dist-SU6L7ZNJ.js → dist-B7SSDVWT.js} +3 -3
  104. package/chunks/{dist-VD7HXTML.js → dist-BL3SL665.js} +1 -1
  105. package/chunks/{dist-UKPWQJCL.js → dist-TAVAGZU6.js} +37 -13
  106. package/chunks/{dist-K4XZILIO.js → dist-XBOVZ3R5.js} +26 -5
  107. package/chunks/{earlyInputCapture-FFFEC6P4.js → earlyInputCapture-VVYU4FDO.js} +17 -15
  108. package/chunks/{edit-32ILSGZY.js → edit-F35PTMBA.js} +17 -15
  109. package/chunks/{en-U3LWGSFX.js → en-FZREZFPO.js} +18 -0
  110. package/chunks/{enter-worktree-XWZKIN6A.js → enter-worktree-3DIW7EGJ.js} +17 -15
  111. package/chunks/{enterPlanMode-LPFFY7BJ.js → enterPlanMode-QNXT77KP.js} +27 -15
  112. package/chunks/{errors-UXBPYPI2.js → errors-M53YG76R.js} +19 -17
  113. package/chunks/{exit-worktree-IBS4UIU7.js → exit-worktree-BSDWNWHZ.js} +17 -15
  114. package/chunks/{exitPlanMode-JA72YHII.js → exitPlanMode-EL7AY327.js} +41 -23
  115. package/chunks/{fast-path-7UU67Y2W.js → fast-path-DUCSMUFW.js} +2 -2
  116. package/chunks/{gemini-GMVKJNMX.js → gemini-F3IERB37.js} +59 -51
  117. package/chunks/{geminiContentGenerator-7NIFF2L4.js → geminiContentGenerator-6OULAKFQ.js} +1 -1
  118. package/chunks/{glob-4NJCW5HI.js → glob-ZMLFTD4T.js} +17 -15
  119. package/chunks/{grep-PAIMLQEL.js → grep-H5X66EI7.js} +17 -15
  120. package/chunks/{initializer-R6KU4VYM.js → initializer-LEOT2OLH.js} +21 -19
  121. package/chunks/{list-H7LXAO64.js → list-M3DKXML6.js} +23 -21
  122. package/chunks/{loadedSettingsAdapter-H27JMTLU.js → loadedSettingsAdapter-OKMQFGGG.js} +21 -19
  123. package/chunks/{loop-wakeup-Y3OIRQFM.js → loop-wakeup-FPBAVVPR.js} +2 -2
  124. package/chunks/{ls-TVJEYS7O.js → ls-UGWQXPTY.js} +1 -1
  125. package/chunks/{lsp-JZSDVR3F.js → lsp-24WV7NXB.js} +1 -1
  126. package/chunks/{monitor-JSIHDPXP.js → monitor-ARL5P45R.js} +19 -16
  127. package/chunks/{nonInteractiveCli-Y4CHOETG.js → nonInteractiveCli-NUVLF3YR.js} +53 -45
  128. package/chunks/{notebook-edit-SHRNL2UM.js → notebook-edit-ANTZ2DDY.js} +17 -15
  129. package/chunks/{openaiContentGenerator-ORZZ7VFO.js → openaiContentGenerator-TFGMKGHN.js} +6 -6
  130. package/chunks/pidfile-AWTL4C63.js +72 -0
  131. package/chunks/{qwenContentGenerator-H643PL2G.js → qwenContentGenerator-6QWAYTWS.js} +18 -16
  132. package/chunks/{qwenOAuth2-OI2B7PES.js → qwenOAuth2-LWLA6MQG.js} +3 -3
  133. package/chunks/{read-file-5PRNPTTY.js → read-file-EJY73XQ3.js} +4 -4
  134. package/chunks/{read-mcp-resource-QTXGKTEV.js → read-mcp-resource-NCBTPP7X.js} +1 -1
  135. package/chunks/{ripGrep-JIKZMABJ.js → ripGrep-HC4SA6CQ.js} +17 -15
  136. package/chunks/{run-qwen-serve-PQV7QOHZ.js → run-qwen-serve-AGLZ642J.js} +291 -55
  137. package/chunks/{scheduler-OS3R5MGU.js → scheduler-TURO7NGY.js} +17 -15
  138. package/chunks/{send-message-DKGHWSTF.js → send-message-3S2NYS3O.js} +5 -3
  139. package/chunks/{serve-LVYZDKCZ.js → serve-5DAMOIDW.js} +22 -19
  140. package/chunks/{server-P4YIH35I.js → server-4AGEK2HC.js} +2268 -1222
  141. package/chunks/{session-DE4TZBKH.js → session-7ZOQUC4Y.js} +54 -46
  142. package/chunks/{settings-DFTYMJYF.js → settings-DR4V6L5Y.js} +20 -18
  143. package/chunks/{shell-3GNQLNV7.js → shell-H5WFKUXH.js} +17 -15
  144. package/chunks/{skill-NCNG4KKZ.js → skill-ANHU5ZCR.js} +4 -4
  145. package/chunks/{spawnChannel-DHRIMDVL.js → spawnChannel-VN5LJV7Z.js} +19 -17
  146. package/chunks/{src-PNZYGM3R.js → src-OVZLTVVM.js} +49 -17
  147. package/chunks/{startInteractiveUI-P6GZBFQW.js → startInteractiveUI-OA22V32P.js} +11110 -10670
  148. package/chunks/{syntheticOutput-X7L5HWLN.js → syntheticOutput-SV7GBHZ5.js} +2 -2
  149. package/chunks/{task-create-AWEUI4GI.js → task-create-W2H2UJCH.js} +6 -5
  150. package/chunks/{task-list-KZ3VJLDU.js → task-list-THBOPV4G.js} +5 -4
  151. package/chunks/{task-stop-GUNOZKJ5.js → task-stop-33FVCNCJ.js} +1 -1
  152. package/chunks/{task-update-Y56GP6DU.js → task-update-LVFQLXEI.js} +6 -5
  153. package/chunks/{team-create-6JMW3KQK.js → team-create-OYL5CAQO.js} +17 -15
  154. package/chunks/{team-delete-6AFRGDJY.js → team-delete-NTUQ25UY.js} +5 -4
  155. package/chunks/{theme-manager-FEHQO22G.js → theme-manager-XCMPF2SI.js} +17 -15
  156. package/chunks/{todoWrite-JRS6NOEU.js → todoWrite-SEPO2RI3.js} +1 -1
  157. package/chunks/{tool-search-IXAEKS7J.js → tool-search-YXW55X6Z.js} +29 -5
  158. package/chunks/{trustedFolders-SJRXNHZE.js → trustedFolders-TEPGM5YL.js} +18 -16
  159. package/chunks/{validateNonInterActiveAuth-HCH7OBDH.js → validateNonInterActiveAuth-OQIS7WUE.js} +50 -42
  160. package/chunks/{web-fetch-RELNL37A.js → web-fetch-OE7LHURA.js} +4 -4
  161. package/chunks/{workflow-M2COBI7R.js → workflow-RTUWORAP.js} +48 -27
  162. package/chunks/{workspace-providers-status-GOCWYDMK.js → workspace-providers-status-DM2XANVB.js} +23 -21
  163. package/chunks/{workspace-service-34C7SUBU.js → workspace-service-VKBI2KZD.js} +27 -25
  164. package/chunks/{write-file-E52WRXZL.js → write-file-WGALQ53L.js} +17 -15
  165. package/chunks/{zh-TW-LKLBTZHE.js → zh-TW-6GIKXEAN.js} +18 -0
  166. package/chunks/{zh-F5T4WWZO.js → zh-V3B4TFWL.js} +18 -0
  167. package/cli.js +6 -6
  168. package/locales/en.js +30 -0
  169. package/locales/fr.js +1 -2
  170. package/locales/ja.js +1 -2
  171. package/locales/zh-TW.js +29 -0
  172. package/locales/zh.js +29 -0
  173. package/node_modules/@qwen-code/audio-capture/package.json +1 -1
  174. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  175. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  176. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  177. package/package.json +3 -3
  178. package/web-shell/assets/{arc-C2DILvUl.js → arc-Det5Ccum.js} +1 -1
  179. package/web-shell/assets/{architectureDiagram-3BPJPVTR-b8gZ2cNw.js → architectureDiagram-3BPJPVTR-DqNWVFpl.js} +1 -1
  180. package/web-shell/assets/{blockDiagram-GPEHLZMM-BuRpghMj.js → blockDiagram-GPEHLZMM-CYl7tYBi.js} +1 -1
  181. package/web-shell/assets/{c4Diagram-AAUBKEIU-2ItdhFmE.js → c4Diagram-AAUBKEIU-DaAEi0NQ.js} +1 -1
  182. package/web-shell/assets/channel-Bm0bFauD.js +1 -0
  183. package/web-shell/assets/{chunk-2J33WTMH-B1QXa0q3.js → chunk-2J33WTMH-Df2CDEE2.js} +1 -1
  184. package/web-shell/assets/{chunk-4BX2VUAB-DXfhKlNq.js → chunk-4BX2VUAB-DNBFcyL2.js} +1 -1
  185. package/web-shell/assets/{chunk-55IACEB6-ClSNjxLo.js → chunk-55IACEB6-BKjF-0HI.js} +1 -1
  186. package/web-shell/assets/{chunk-727SXJPM-Dsh2wisB.js → chunk-727SXJPM-DYwAwfIM.js} +1 -1
  187. package/web-shell/assets/{chunk-AQP2D5EJ-C1TkY5AR.js → chunk-AQP2D5EJ-C6FswLqy.js} +1 -1
  188. package/web-shell/assets/{chunk-FMBD7UC4-CGtN9XR6.js → chunk-FMBD7UC4-DRWAcZSY.js} +1 -1
  189. package/web-shell/assets/{chunk-ND2GUHAM-BHiPi1SS.js → chunk-ND2GUHAM-AoL16mNR.js} +1 -1
  190. package/web-shell/assets/{chunk-QZHKN3VN-CzG3I5o1.js → chunk-QZHKN3VN-a8PtLMck.js} +1 -1
  191. package/web-shell/assets/classDiagram-4FO5ZUOK--NgUfb55.js +1 -0
  192. package/web-shell/assets/classDiagram-v2-Q7XG4LA2--NgUfb55.js +1 -0
  193. package/web-shell/assets/{cose-bilkent-S5V4N54A-EgrIoH_K.js → cose-bilkent-S5V4N54A-C4Aeu5qf.js} +1 -1
  194. package/web-shell/assets/{dagre-BM42HDAG-BUnpdX8S.js → dagre-BM42HDAG-BOulamjo.js} +1 -1
  195. package/web-shell/assets/{diagram-2AECGRRQ-BlLUCVYu.js → diagram-2AECGRRQ-D1wt2ykO.js} +1 -1
  196. package/web-shell/assets/{diagram-5GNKFQAL-FG-enmjQ.js → diagram-5GNKFQAL-BRseus-O.js} +1 -1
  197. package/web-shell/assets/{diagram-KO2AKTUF-BlzmTONk.js → diagram-KO2AKTUF-XSMkNzpZ.js} +1 -1
  198. package/web-shell/assets/{diagram-LMA3HP47-CoBQ8mIx.js → diagram-LMA3HP47-21KNLqoi.js} +1 -1
  199. package/web-shell/assets/{diagram-OG6HWLK6-DvxV6sX8.js → diagram-OG6HWLK6-DnUI8F5G.js} +1 -1
  200. package/web-shell/assets/{erDiagram-TEJ5UH35-Jq1tpAoj.js → erDiagram-TEJ5UH35-BVSOMuM2.js} +1 -1
  201. package/web-shell/assets/{flowDiagram-I6XJVG4X-CbtYOry5.js → flowDiagram-I6XJVG4X-fYtDPJsW.js} +1 -1
  202. package/web-shell/assets/{ganttDiagram-6RSMTGT7-ZEn2VEKR.js → ganttDiagram-6RSMTGT7-CmRXosW_.js} +1 -1
  203. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BZh-LkhJ.js → gitGraphDiagram-PVQCEYII-DPrmySxO.js} +1 -1
  204. package/web-shell/assets/index-BpKnmyFV.js +717 -0
  205. package/web-shell/assets/index-fLrtxpOG.css +5 -0
  206. package/web-shell/assets/{infoDiagram-5YYISTIA-B9HuZygK.js → infoDiagram-5YYISTIA-x3VbEuCV.js} +1 -1
  207. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D76cNpYG.js → ishikawaDiagram-YF4QCWOH-SmitHRMC.js} +1 -1
  208. package/web-shell/assets/{journeyDiagram-JHISSGLW-6bGo7P1t.js → journeyDiagram-JHISSGLW-BxvA551S.js} +1 -1
  209. package/web-shell/assets/{kanban-definition-UN3LZRKU-DuYyRBvB.js → kanban-definition-UN3LZRKU-DNHC16jY.js} +1 -1
  210. package/web-shell/assets/{linear-CpdSW1BC.js → linear-CQ6irBL9.js} +1 -1
  211. package/web-shell/assets/{mermaid.core-s5xbZMMj.js → mermaid.core-DtB6NO1e.js} +72 -72
  212. package/web-shell/assets/{mindmap-definition-RKZ34NQL-go01fZ2y.js → mindmap-definition-RKZ34NQL-QKMAgV2v.js} +1 -1
  213. package/web-shell/assets/{pieDiagram-4H26LBE5-BfuZiEHO.js → pieDiagram-4H26LBE5-bvb6dGn6.js} +1 -1
  214. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DsoINqV6.js → quadrantDiagram-W4KKPZXB-DLgdlG4D.js} +1 -1
  215. package/web-shell/assets/{requirementDiagram-4Y6WPE33-B7FU4LiU.js → requirementDiagram-4Y6WPE33-2M9YH4GF.js} +1 -1
  216. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BEDjFnGB.js → sankeyDiagram-5OEKKPKP-DzwfclTH.js} +1 -1
  217. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-gzmmL5tK.js → sequenceDiagram-3UESZ5HK-BvPmTuy2.js} +1 -1
  218. package/web-shell/assets/{stateDiagram-AJRCARHV-BtHD4IN_.js → stateDiagram-AJRCARHV-BjwUmrJF.js} +1 -1
  219. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C4L8zXeL.js +1 -0
  220. package/web-shell/assets/{timeline-definition-PNZ67QCA-T_8gmMCf.js → timeline-definition-PNZ67QCA-CXzS6qqz.js} +1 -1
  221. package/web-shell/assets/{vennDiagram-CIIHVFJN-DdjuqnjO.js → vennDiagram-CIIHVFJN-yRSolF5B.js} +1 -1
  222. package/web-shell/assets/{wardley-L42UT6IY-Cgtrvb37.js → wardley-L42UT6IY-ClLJjHPG.js} +1 -1
  223. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BW3f3-yW.js → wardleyDiagram-YWT4CUSO-VIa6t2p2.js} +1 -1
  224. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BUS9IKkc.js → xychartDiagram-2RQKCTM6-CtmrkezW.js} +1 -1
  225. package/web-shell/index.html +18 -2
  226. package/chunks/chunk-2JKEQWDZ.js +0 -1596
  227. package/chunks/chunk-32MCHZQC.js +0 -73
  228. package/chunks/chunk-UAKXW3DN.js +0 -30
  229. package/web-shell/assets/channel-eRvn2UA3.js +0 -1
  230. package/web-shell/assets/classDiagram-4FO5ZUOK-YZNwy1rx.js +0 -1
  231. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-YZNwy1rx.js +0 -1
  232. package/web-shell/assets/index-5FhE0ORO.css +0 -5
  233. package/web-shell/assets/index-CDTGmqVm.js +0 -720
  234. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DFy6gLDd.js +0 -1
@@ -1,12 +1,15 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import {
4
- contextCommand
5
- } from "./chunk-GZKQ36JS.js";
6
3
  import {
7
4
  isValidSessionId,
8
5
  validateAuthMethod
9
- } from "./chunk-ZGSV5ORL.js";
6
+ } from "./chunk-MVZXZWGT.js";
7
+ import {
8
+ isKittyProtocolEnabled
9
+ } from "./chunk-JZSY4WP3.js";
10
+ import {
11
+ contextCommand
12
+ } from "./chunk-SFN4TEHY.js";
10
13
  import {
11
14
  VSCODE_SHIFT_ENTER_SEQUENCE,
12
15
  calculateCost,
@@ -17,41 +20,38 @@ import {
17
20
  getSystemInfoFields,
18
21
  useKeypress,
19
22
  writeOsc52
20
- } from "./chunk-IBEM64M4.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-N4V4VBP6.js";
29
+ } from "./chunk-2X2JUE47.js";
27
30
  import {
28
31
  require_react
29
32
  } from "./chunk-KYMBIKIW.js";
30
- import {
31
- isKittyProtocolEnabled
32
- } from "./chunk-JZSY4WP3.js";
33
33
  import {
34
34
  themeManager
35
35
  } from "./chunk-HTWHAN44.js";
36
36
  import {
37
37
  getErrorMessage as getErrorMessage2
38
- } from "./chunk-AIBPG5MB.js";
38
+ } from "./chunk-OAFUMTWW.js";
39
39
  import {
40
40
  GITHUB_WORKFLOW_PATHS,
41
41
  setupGithub
42
- } from "./chunk-Q3JOGB4U.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-GDIG7TMG.js";
49
+ } from "./chunk-HRZB5CSC.js";
50
50
  import {
51
51
  getExtendedSystemInfo,
52
52
  getGitVersion,
53
53
  getNpmVersion
54
- } from "./chunk-G525INVW.js";
54
+ } from "./chunk-W2ZOAX7F.js";
55
55
  import {
56
56
  formatDuration,
57
57
  formatMemoryUsage,
@@ -60,7 +60,7 @@ import {
60
60
  import {
61
61
  isInlineModelOverrideAllowed,
62
62
  parseAcpModelOption
63
- } from "./chunk-OEY3YAL2.js";
63
+ } from "./chunk-BQNJBEUA.js";
64
64
  import {
65
65
  formatUnsupportedVoiceModelMessage,
66
66
  getVoiceSettingsScope,
@@ -68,14 +68,19 @@ import {
68
68
  isVoiceEnabled,
69
69
  readVoiceMode,
70
70
  readVoiceModel
71
- } from "./chunk-LXEW6BHF.js";
71
+ } from "./chunk-Q7VHIRDD.js";
72
72
  import {
73
73
  OUTPUT_LANGUAGE_AUTO,
74
+ getAllSettingKeys,
75
+ getFlattenedSchema,
76
+ getNestedProperty,
74
77
  getPersistScopeForModelSelection,
78
+ getSettingDefinition,
75
79
  isAutoLanguage,
76
80
  resolveOutputLanguage,
81
+ validateSettingValue,
77
82
  writeOutputLanguageAndRegisterPath
78
- } from "./chunk-6FIWYVN4.js";
83
+ } from "./chunk-MKHC4BYZ.js";
79
84
  import {
80
85
  SUPPORTED_LANGUAGES,
81
86
  getCurrentLanguage,
@@ -83,11 +88,11 @@ import {
83
88
  resolveSupportedLanguage,
84
89
  setLanguageAsync,
85
90
  t
86
- } from "./chunk-3O2BJMFW.js";
91
+ } from "./chunk-UQYOMM6J.js";
87
92
  import {
88
93
  isFolderTrustEnabled,
89
94
  loadTrustedFolders
90
- } from "./chunk-Z34RYLRO.js";
95
+ } from "./chunk-ZJP5T7IA.js";
91
96
  import {
92
97
  require_strip_json_comments
93
98
  } from "./chunk-QYUE6W3T.js";
@@ -105,10 +110,13 @@ import {
105
110
  SESSION_TITLE_MAX_LENGTH,
106
111
  SessionService,
107
112
  ShellExecutionService,
113
+ So,
108
114
  appendToLastTextPart,
109
115
  buildBackgroundEntryLabel,
116
+ buildBareRememberPrompt,
110
117
  buildBtwCacheSafeParams,
111
118
  buildBtwPrompt,
119
+ buildManagedRememberPrompt,
112
120
  canUseRipgrep,
113
121
  checkArgumentSafety,
114
122
  checkCommandPermissions,
@@ -117,7 +125,6 @@ import {
117
125
  encodeInsightProgressMessage,
118
126
  encodeInsightReadyMessage,
119
127
  escapeShellArg,
120
- extract,
121
128
  findProviderByCredentials,
122
129
  flatMapTextParts,
123
130
  generateSessionRecap,
@@ -147,6 +154,7 @@ import {
147
154
  normalizeSkillPriority,
148
155
  parse,
149
156
  parseInstallSource,
157
+ parseVisionModelSetting,
150
158
  partToString,
151
159
  persistSessionUsage,
152
160
  readPathFromWorkspace,
@@ -160,13 +168,13 @@ import {
160
168
  stripStartupContext,
161
169
  tryGenerateSessionTitle,
162
170
  unregisterGoalHook
163
- } from "./chunk-35FH347N.js";
171
+ } from "./chunk-BFG6OZN7.js";
164
172
  import {
165
173
  external_exports
166
174
  } from "./chunk-K5PGHDBN.js";
167
175
  import {
168
176
  runSideQuery
169
- } from "./chunk-YCRTJYSQ.js";
177
+ } from "./chunk-MEQWZGK5.js";
170
178
  import {
171
179
  applySkillAllowedTools,
172
180
  buildSkillLlmContent
@@ -187,14 +195,13 @@ import {
187
195
  recordSkillInvocation,
188
196
  resolveOpenAILogDir,
189
197
  uiTelemetryService
190
- } from "./chunk-B5MPZI4K.js";
198
+ } from "./chunk-HJDF3ZVU.js";
191
199
  import {
192
- getAutoMemoryRoot,
193
- getUserAutoMemoryRoot
200
+ getAutoMemoryRoot
194
201
  } from "./chunk-MOUXUCXQ.js";
195
202
  import {
196
203
  ToolNames
197
- } from "./chunk-JV7A66DR.js";
204
+ } from "./chunk-4VZH35PN.js";
198
205
  import {
199
206
  openBrowserSecurely
200
207
  } from "./chunk-22IFUCVR.js";
@@ -211,7 +218,7 @@ import {
211
218
  isCpuProfileRecording,
212
219
  startCpuProfile,
213
220
  stopCpuProfile
214
- } from "./chunk-OE5J6UA7.js";
221
+ } from "./chunk-XCUFHOAD.js";
215
222
  import {
216
223
  init_esbuild_shims
217
224
  } from "./chunk-A4BMJM77.js";
@@ -3664,6 +3671,332 @@ var clearCommand = {
3664
3671
  }, "action")
3665
3672
  };
3666
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
+
3667
4000
  // packages/cli/src/ui/commands/deleteCommand.ts
3668
4001
  init_esbuild_shims();
3669
4002
  var deleteCommand = {
@@ -5367,7 +5700,7 @@ async function extractArchive(archivePath, destDir, target) {
5367
5700
  validateExtractedPaths(resolvedDest);
5368
5701
  } else {
5369
5702
  const resolvedDest = path5.resolve(destDir);
5370
- await extract({
5703
+ await So({
5371
5704
  file: archivePath,
5372
5705
  cwd: destDir,
5373
5706
  preservePaths: false,
@@ -6797,7 +7130,7 @@ async function extractMetadata(conversation, config) {
6797
7130
  const gitBranch = firstRecord?.gitBranch;
6798
7131
  let gitRepo;
6799
7132
  if (cwd) {
6800
- const { getGitRepoName } = await import("./src-PNZYGM3R.js");
7133
+ const { getGitRepoName } = await import("./src-OVZLTVVM.js");
6801
7134
  gitRepo = getGitRepoName(cwd);
6802
7135
  }
6803
7136
  let model;
@@ -10646,6 +10979,12 @@ init_esbuild_shims();
10646
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.";
10647
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.";
10648
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");
10649
10988
  function persistSetting(settings, path20, value) {
10650
10989
  settings.setValue(getPersistScopeForModelSelection(settings), path20, value);
10651
10990
  }
@@ -10708,6 +11047,29 @@ function formatUnavailableVisionModelMessage(modelName, availableModels) {
10708
11047
  );
10709
11048
  }
10710
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");
10711
11073
  function formatNonVisionModelWarning(modelName) {
10712
11074
  return t(
10713
11075
  "\u26A0 '{{model}}' is not a known image-capable model; the vision bridge may fail on images.",
@@ -10948,13 +11310,15 @@ Use "/model --fast <model-id>" to set fast model.`
10948
11310
  const modelName2 = args.replace("--vision", "").trim();
10949
11311
  if (!modelName2) {
10950
11312
  if (context.executionMode !== "interactive") {
10951
- const visionModel = context.services.settings?.merged?.visionModel?.trim() || t("not set");
11313
+ const visionModel2 = context.services.settings?.merged?.visionModel?.trim();
10952
11314
  return {
10953
11315
  type: "message",
10954
11316
  messageType: "info",
10955
11317
  content: t(
10956
11318
  'Current vision model: {{visionModel}}\nUse "/model --vision <model-id>" to set the vision bridge model.',
10957
- { visionModel }
11319
+ {
11320
+ visionModel: visionModel2 ? formatVisionModelSettingForDisplay(visionModel2) : t("not set")
11321
+ }
10958
11322
  )
10959
11323
  };
10960
11324
  }
@@ -10985,9 +11349,17 @@ Use "/model --fast <model-id>" to set fast model.`
10985
11349
  };
10986
11350
  }
10987
11351
  const availableModels = (selector.authType ? config.getAvailableModelsForAuthType(selector.authType) : config.getAllConfiguredModels()).filter((m) => !m.fastOnly && !m.voiceOnly);
10988
- const matched = availableModels.find(
11352
+ const matchingModels = availableModels.filter(
10989
11353
  (model) => model.id === selector.modelId
10990
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];
10991
11363
  if (!matched) {
10992
11364
  return {
10993
11365
  type: "message",
@@ -11010,8 +11382,10 @@ Use "/model --fast <model-id>" to set fast model.`
11010
11382
  )
11011
11383
  };
11012
11384
  }
11013
- persistSetting(settings, "visionModel", modelName2);
11014
- 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);
11015
11389
  const visionWarning = isImageCapable(matched) ? "" : `
11016
11390
  ${formatNonVisionModelWarning(modelName2)}`;
11017
11391
  return {
@@ -11148,21 +11522,14 @@ var rememberCommand = {
11148
11522
  }
11149
11523
  const useManagedMemory = config?.isManagedMemoryAvailable() ?? false;
11150
11524
  if (useManagedMemory) {
11151
- const projectDir = config ? getAutoMemoryRoot(config.getProjectRoot()) : void 0;
11152
- const userDir = getUserAutoMemoryRoot();
11153
- 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.` : "";
11154
11525
  return {
11155
11526
  type: "submit_prompt",
11156
- 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:
11157
-
11158
- ${fact}`
11527
+ content: buildManagedRememberPrompt(fact, config.getProjectRoot())
11159
11528
  };
11160
11529
  }
11161
11530
  return {
11162
11531
  type: "submit_prompt",
11163
- content: `Please save the following fact to memory (e.g. append to QWEN.md in the project root):
11164
-
11165
- ${fact}`
11532
+ content: buildBareRememberPrompt(fact)
11166
11533
  };
11167
11534
  }, "action")
11168
11535
  };
@@ -15103,6 +15470,7 @@ var BuiltinCommandLoader = class {
15103
15470
  clearCommand,
15104
15471
  compressCommand,
15105
15472
  compressFastCommand,
15473
+ configCommand,
15106
15474
  contextCommand,
15107
15475
  copyCommand,
15108
15476
  diffCommand,