@qwen-code/qwen-code 0.19.7 → 0.19.8-nightly.20260710.205430235
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.
- package/bundled/qc-helper/SKILL.md +1 -0
- package/bundled/qc-helper/docs/configuration/auth.md +40 -55
- package/bundled/qc-helper/docs/configuration/model-providers.md +224 -218
- package/bundled/qc-helper/docs/configuration/settings.md +43 -36
- package/bundled/qc-helper/docs/features/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +20 -12
- package/bundled/qc-helper/docs/features/channels/plugins.md +1 -0
- package/bundled/qc-helper/docs/features/code-review.md +2 -1
- package/bundled/qc-helper/docs/features/commands.md +39 -38
- package/bundled/qc-helper/docs/features/computer-use.md +77 -0
- package/bundled/qc-helper/docs/features/hooks.md +36 -34
- package/bundled/qc-helper/docs/features/memory.md +1 -1
- package/bundled/qc-helper/docs/features/tool-use-summaries.md +19 -23
- package/bundled/qc-helper/docs/qwen-serve.md +22 -12
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
- package/bundled/review/DESIGN.md +14 -13
- package/bundled/review/SKILL.md +38 -61
- package/chunks/{MaxSizedBox-XY5LIO5O.js → MaxSizedBox-LOFYQFYJ.js} +13 -14
- package/chunks/{StandaloneSessionPicker-APISIRJZ.js → StandaloneSessionPicker-U5OQBGEB.js} +31 -29
- package/chunks/{acpAgent-MMOSC2YA.js → acpAgent-SDIFRIED.js} +637 -131
- package/chunks/{agent-TKIBLLQT.js → agent-JIBBVHNQ.js} +10 -10
- package/chunks/{agent-headless-VLX4C7KX.js → agent-headless-6LGZYJYU.js} +10 -10
- package/chunks/{anthropicContentGenerator-AKYPSZIV.js → anthropicContentGenerator-55REPTTF.js} +30 -3
- package/chunks/{artifact-tool-D233YJFH.js → artifact-tool-EIN46DPM.js} +1 -1
- package/chunks/{askUserQuestion-MKL5ZTMC.js → askUserQuestion-6YX6ZRX7.js} +1 -1
- package/chunks/{bridge-BCU73DZO.js → bridge-HVPFYNM4.js} +17 -16
- package/chunks/{ca-HCMB2I54.js → ca-MULEGDVS.js} +89 -5
- package/chunks/{channel-worker-supervisor-CRCVYQIE.js → channel-worker-supervisor-OPXXT4JK.js} +20 -3
- package/chunks/{chunk-DGHJTO2K.js → chunk-2AF26HVM.js} +31 -2
- package/chunks/{chunk-3B26UVCX.js → chunk-2GUVUHJY.js} +6 -4
- package/chunks/{chunk-FV7425LN.js → chunk-2SZOMGOR.js} +4 -1
- package/chunks/{chunk-CNSF3WO5.js → chunk-32KS5XSX.js} +3 -3
- package/chunks/{chunk-4UCTWSTP.js → chunk-34UUM3IN.js} +1 -1
- package/chunks/{chunk-G7ZG7CA6.js → chunk-3UP777ZS.js} +8 -7
- package/chunks/{chunk-MIG5SQNL.js → chunk-4CSVIZLT.js} +4 -4
- package/chunks/{chunk-GD236YPV.js → chunk-4ONWIT5C.js} +1 -1
- package/chunks/{chunk-4ZJIPVPB.js → chunk-4XK7TNBP.js} +8 -8
- package/chunks/{chunk-I4A4K72C.js → chunk-5F2H3PXG.js} +446 -232
- package/chunks/chunk-5HOF2K5U.js +19 -0
- package/chunks/{chunk-GMOWQOQQ.js → chunk-5ZVIYNLN.js} +228 -36
- package/chunks/chunk-6O6Z2I5Q.js +292 -0
- package/chunks/{chunk-RYFZCUJO.js → chunk-6QKT5VNZ.js} +14 -6
- package/chunks/{chunk-SD4N3QJ2.js → chunk-6ZPSVWLF.js} +61 -17
- package/chunks/{chunk-X265R5C6.js → chunk-7YGSDQ5J.js} +2 -2
- package/chunks/{chunk-PRDFOIZF.js → chunk-A6KEUFJO.js} +32 -5
- package/chunks/{chunk-OWVIH4HY.js → chunk-B5OAMPJ5.js} +389 -87
- package/chunks/{chunk-ME3YSROJ.js → chunk-CV2AT2WJ.js} +22 -10
- package/chunks/{chunk-U4FRHCLA.js → chunk-DDKUYKHA.js} +1912 -201
- package/chunks/{chunk-YDSYD7UI.js → chunk-E3SA2LY4.js} +2 -2
- package/chunks/{chunk-6IAWPIQ6.js → chunk-EDM5O3SX.js} +2 -2
- package/chunks/{chunk-CISB3IQF.js → chunk-FONJQQWI.js} +65 -6
- package/chunks/{chunk-FRFFNYUY.js → chunk-G3WIMNL4.js} +3 -3
- package/chunks/{chunk-B34OV7K2.js → chunk-GGQQA4JW.js} +13 -0
- package/chunks/chunk-GLE2YUPU.js +34 -0
- package/chunks/{chunk-MJI36HER.js → chunk-GOTMC3BX.js} +1 -1
- package/chunks/{chunk-RFIL6REB.js → chunk-GRB4QSBD.js} +168 -31
- package/chunks/chunk-GVVY7GSP.js +38 -0
- package/chunks/{chunk-7JGISHHZ.js → chunk-HDEUQRAR.js} +14 -156
- package/chunks/{chunk-NZEGNV4V.js → chunk-HPRI22FZ.js} +6 -6
- package/chunks/{chunk-STAZRKOT.js → chunk-I34IHZFJ.js} +117 -459
- package/chunks/{chunk-JF7DFPQ5.js → chunk-I3MBKL6Z.js} +12 -2
- package/chunks/{chunk-DNV4FSN5.js → chunk-I5XN6KDI.js} +21 -4
- package/chunks/{chunk-VZ7HY3YU.js → chunk-IAMRWMFU.js} +1 -1
- package/chunks/{chunk-44NROQYV.js → chunk-JOQMY62N.js} +1 -1
- package/chunks/{chunk-VQWAZSXN.js → chunk-JW4IKIZ2.js} +57 -35
- package/chunks/{chunk-SAIILPQ3.js → chunk-KJMYXFUR.js} +3 -1
- package/chunks/{chunk-AFOLR6YL.js → chunk-KQ6MKCFE.js} +102 -16
- package/chunks/{chunk-X3YGAX7V.js → chunk-KS2FRTYI.js} +2 -0
- package/chunks/{chunk-IUE7YWC3.js → chunk-LE7EF36E.js} +7 -7
- package/chunks/{chunk-B4U2M63D.js → chunk-LRY7HD3Q.js} +2101 -11
- package/chunks/{chunk-PUQLHSQ2.js → chunk-ME7E6WZB.js} +6 -8
- package/chunks/{chunk-LEIJKM7Q.js → chunk-MEK7ZRJ3.js} +1 -1
- package/chunks/{chunk-AJBEAUIS.js → chunk-MG2TNCRX.js} +4 -3
- package/chunks/{chunk-GL5TV7B5.js → chunk-MSMQURDV.js} +21 -5
- package/chunks/{chunk-6BN7NZ5Z.js → chunk-NXDJLKKX.js} +4 -6
- package/chunks/{chunk-FEJ2FZ3U.js → chunk-NY2ZOFMM.js} +1 -1
- package/chunks/{chunk-QZF5U5KA.js → chunk-NY5BE643.js} +8 -8
- package/chunks/{chunk-4RQIB5UZ.js → chunk-O2YT7VB4.js} +0 -34
- package/chunks/{chunk-4KJ2BPIT.js → chunk-OACJLMLD.js} +2 -38
- package/chunks/chunk-PCWSPWXZ.js +168 -0
- package/chunks/{chunk-XPJH4PKR.js → chunk-PJ74K3DH.js} +1 -1
- package/chunks/{chunk-FTFXDZYI.js → chunk-PW7VWRLX.js} +45 -29
- package/chunks/chunk-R3SLDK6Y.js +468 -0
- package/chunks/{chunk-4O344UEE.js → chunk-SDJOZOYY.js} +38 -18
- package/chunks/{chunk-ALZ75L2X.js → chunk-SMYIBRAA.js} +412 -376
- package/chunks/{chunk-CCGOFQV3.js → chunk-SS5P6JM6.js} +6 -5
- package/chunks/{chunk-AIY5UTFI.js → chunk-T3XHYGMG.js} +925 -2872
- package/chunks/{chunk-Q6OEPOOC.js → chunk-TB6GWNV4.js} +1 -1
- package/chunks/{chunk-24XYI5EI.js → chunk-TERKDCOZ.js} +3 -3
- package/chunks/chunk-TVO5C767.js +159 -0
- package/chunks/{chunk-TBAZMRW3.js → chunk-TVW53EK7.js} +1 -1
- package/chunks/chunk-TX5QZYK6.js +296 -0
- package/chunks/{chunk-JD33UY7E.js → chunk-TZRVTPJ6.js} +15 -9
- package/chunks/{chunk-65CFHNSE.js → chunk-UAFB2DNB.js} +59 -59
- package/chunks/{chunk-QAKFYMJI.js → chunk-UOXLB2LY.js} +152 -17
- package/chunks/chunk-V35MD7KN.js +13 -0
- package/chunks/{chunk-XSAFNANZ.js → chunk-VWDJHVXM.js} +12 -12
- package/chunks/{chunk-XISQIIT7.js → chunk-W77ZLCSX.js} +1 -1
- package/chunks/{chunk-BWVQN2HV.js → chunk-WTEIUA2V.js} +4 -4
- package/chunks/{chunk-TDGF35EN.js → chunk-XOHNA2S6.js} +1 -1
- package/chunks/{chunk-HJ3GX3Y3.js → chunk-XZVUZSDG.js} +25 -11
- package/chunks/{chunk-ADZG46HR.js → chunk-YHGCTQG3.js} +1 -1
- package/chunks/{chunk-2NPS2UDH.js → chunk-YUNPEB3Q.js} +478 -43
- package/chunks/chunk-Z3I3QJK3.js +47 -0
- package/chunks/{chunk-P7I3D7FM.js → chunk-Z466FBSA.js} +1 -1
- package/chunks/{chunk-YEGT55NW.js → chunk-ZDAZSR2O.js} +3009 -1220
- package/chunks/{chunk-VEB3NYSO.js → chunk-ZJQBTFJ6.js} +6 -1
- package/chunks/chunk-ZL5HN75Q.js +61 -0
- package/chunks/{computer-use-X4KUU3NM.js → computer-use-IW5XBECT.js} +10 -10
- package/chunks/{contextCommand-LAYJZF7H.js → contextCommand-4QPLK2SH.js} +14 -14
- package/chunks/create-sub-session-7JK3EYWA.js +212 -0
- package/chunks/create-sub-session-EVYZYAE3.js +364 -0
- package/chunks/{cron-create-JSXEIPVS.js → cron-create-2CCO2PW6.js} +2 -2
- package/chunks/{cron-delete-OIFVEPGU.js → cron-delete-ETVTP5IV.js} +2 -2
- package/chunks/{cron-list-D4ZX4IOE.js → cron-list-FS3KWOY5.js} +2 -2
- package/chunks/{daemon-F3I2RXP6.js → daemon-NNUYIBWA.js} +461 -0
- package/chunks/{daemon-status-provider-XSAFKVDS.js → daemon-status-provider-3EPG6BXX.js} +21 -19
- package/chunks/{de-PLLFDERI.js → de-QRG6J2CM.js} +89 -5
- package/chunks/{dist-YTRKAVUB.js → dist-3EIIFOJV.js} +1 -1
- package/chunks/{dist-PKFTNUHO.js → dist-7F5GWZDZ.js} +2 -1
- package/chunks/{dist-FQ5WRJPL.js → dist-CBJ7OJ5R.js} +2 -2
- package/chunks/{dist-OT7G2WNM.js → dist-LIFJ2YAI.js} +1 -1
- package/chunks/{dist-573HNSVO.js → dist-OKXOQ63L.js} +2 -1
- package/chunks/{dist-IMFFBMAT.js → dist-SU5LY5R4.js} +3 -1
- package/chunks/{earlyInputCapture-AERYYGXE.js → earlyInputCapture-HP5XAS7A.js} +10 -10
- package/chunks/{edit-WZTZDGCI.js → edit-MDICC6KH.js} +11 -11
- package/chunks/{en-GA2RMXY5.js → en-HF3KFWZG.js} +91 -5
- package/chunks/{enter-worktree-DEPXBJEL.js → enter-worktree-JWTRNEN4.js} +10 -10
- package/chunks/{enterPlanMode-JFGXZHHJ.js → enterPlanMode-GMRZMTBQ.js} +10 -10
- package/chunks/environment-2CJAFOFN.js +88 -0
- package/chunks/{errors-GMZL4QV7.js → errors-UZOVFD2U.js} +13 -13
- package/chunks/{exit-worktree-Y7XBK3VV.js → exit-worktree-QQGEG343.js} +10 -10
- package/chunks/{exitPlanMode-WQQER65F.js → exitPlanMode-YK2JVAAB.js} +10 -10
- package/chunks/{fast-path-W2U6XDNO.js → fast-path-6SD4JNQW.js} +12 -3
- package/chunks/{fast-path-settings-RCRXH2JG.js → fast-path-settings-RAQGCIT7.js} +3 -2
- package/chunks/{fr-GWNQG4XH.js → fr-RSCO6HHD.js} +89 -5
- package/chunks/{gemini-T4WX6SRW.js → gemini-TFQXPUZB.js} +436 -140
- package/chunks/{geminiContentGenerator-MKQACXEJ.js → geminiContentGenerator-LJ2BNXHX.js} +1 -1
- package/chunks/{glob-4KKSHZDF.js → glob-3IJ6JR5W.js} +10 -10
- package/chunks/{grep-GHRYXSLZ.js → grep-UFZ2RFQZ.js} +10 -10
- package/chunks/{handleAutoUpdate-HN7ZOSXY.js → handleAutoUpdate-TEZC5ZIR.js} +17 -13
- package/chunks/i18n-5QEODTJV.js +84 -0
- package/chunks/{initializer-SRN3IM42.js → initializer-222MPCLQ.js} +18 -16
- package/chunks/installationInfo-OZ62OHZ2.js +65 -0
- package/chunks/{ja-2HOTA47X.js → ja-RRFGG2DC.js} +89 -5
- package/chunks/{list-INTVXUPA.js → list-BN5VBIIE.js} +20 -18
- package/chunks/{loadedSettingsAdapter-QVHHQPGM.js → loadedSettingsAdapter-EHTUJRFB.js} +18 -16
- package/chunks/{loop-wakeup-OHWEMFP5.js → loop-wakeup-SR2KWT4B.js} +3 -3
- package/chunks/{ls-L654WOAT.js → ls-RUBQK5Q2.js} +2 -2
- package/chunks/{lsp-M35KE54Y.js → lsp-DUTVY2ZA.js} +3 -5
- package/chunks/{mcp-7V4T46RG.js → mcp-OPGHD26Y.js} +18 -16
- package/chunks/{monitor-464OY2UE.js → monitor-WXBDVYYV.js} +10 -10
- package/chunks/{nonInteractiveCli-LJEEODU2.js → nonInteractiveCli-CWIBGJ4U.js} +54 -49
- package/chunks/{notebook-edit-BLJYCNDO.js → notebook-edit-T7P7M73F.js} +11 -11
- package/chunks/{openaiContentGenerator-PFF6HYB2.js → openaiContentGenerator-OES264C3.js} +7 -7
- package/chunks/{pidfile-LIBUENIV.js → pidfile-LJ3NLS2P.js} +10 -10
- package/chunks/{pt-2THT3YHA.js → pt-D4CG46JM.js} +89 -5
- package/chunks/{qwenContentGenerator-SUUHZ6CR.js → qwenContentGenerator-QJ67LAJ5.js} +12 -12
- package/chunks/{read-file-L7TBQVX7.js → read-file-KZD7TLU7.js} +5 -5
- package/chunks/{read-mcp-resource-CNQHBSJM.js → read-mcp-resource-Q56IMYOH.js} +1 -1
- package/chunks/{record-artifact-PP3LKHTS.js → record-artifact-GZ5D5HZX.js} +4 -4
- package/chunks/{ripGrep-CKKX3GRB.js → ripGrep-KUJLX75U.js} +10 -10
- package/chunks/{ru-Z67YJHBG.js → ru-O2QUEL22.js} +89 -5
- package/chunks/{run-qwen-serve-5OKADVLE.js → run-qwen-serve-M52KVRGI.js} +664 -153
- package/chunks/{scheduler-ZRW3AIDU.js → scheduler-FFATTAYZ.js} +10 -10
- package/chunks/{send-message-OA6MV4EU.js → send-message-HAGK3VTV.js} +2 -2
- package/chunks/{serve-36WS32W6.js → serve-B5S32524.js} +21 -18
- package/chunks/{server-M372UENX.js → server-6HK5FJMR.js} +3301 -665
- package/chunks/{session-F5KSNP2N.js → session-3WB76VTQ.js} +55 -50
- package/chunks/{settings-WFLNS3WT.js → settings-W3IX7NHK.js} +27 -23
- package/chunks/{shell-DEDSWN56.js → shell-HZIU2ZG7.js} +10 -10
- package/chunks/{skill-A2TL2NPC.js → skill-34OUFB65.js} +5 -5
- package/chunks/{spawnChannel-RQHUWTCL.js → spawnChannel-FTZJ3I5O.js} +12 -12
- package/chunks/{src-XKZMNHXS.js → src-NELBIIGI.js} +48 -10
- package/chunks/standalone-update-LICI2VSK.js +79 -0
- package/chunks/{startInteractiveUI-REKSTOHU.js → startInteractiveUI-LZEV5YI2.js} +2203 -1764
- package/chunks/stdioHelpers-CA7MG65Z.js +14 -0
- package/chunks/{syntheticOutput-F7LSDCAR.js → syntheticOutput-XFFJVCGV.js} +2 -2
- package/chunks/{task-create-RPFZNB4B.js → task-create-VINUSVBF.js} +3 -3
- package/chunks/{task-list-TGGJX7EA.js → task-list-YZ2AWQEG.js} +1 -1
- package/chunks/{task-stop-W7NGTMYQ.js → task-stop-PEXPKUW3.js} +1 -1
- package/chunks/{task-update-5WUG5MVQ.js → task-update-BHIX57YH.js} +3 -3
- package/chunks/{team-create-TBQVWAG7.js → team-create-2JS2OYSF.js} +10 -10
- package/chunks/{team-delete-UHQQ2QQX.js → team-delete-2OHXSBVS.js} +1 -1
- package/chunks/{team-plan-approval-FZPGUSHJ.js → team-plan-approval-PHLGYUY7.js} +10 -10
- package/chunks/{theme-manager-DQZVNSOC.js → theme-manager-UYXLX37P.js} +10 -10
- package/chunks/{todoWrite-C4ZAMSR3.js → todoWrite-7Q4ELT4F.js} +1 -1
- package/chunks/{tool-search-FDQ3SLNJ.js → tool-search-2MWA3GWE.js} +6 -6
- package/chunks/total-session-admission-PRZK35X4.js +72 -0
- package/chunks/{trustedFolders-Z475EIHL.js → trustedFolders-IT4JBNPG.js} +12 -12
- package/chunks/{updateCheck-E2ZX7RL7.js → updateCheck-X3ZWDO3Z.js} +17 -13
- package/chunks/updateEventEmitter-NXWTRHXY.js +10 -0
- package/chunks/{validateNonInterActiveAuth-O4ECBHQL.js → validateNonInterActiveAuth-IAOL7CM3.js} +51 -45
- package/chunks/{version-CEDD6ZZR.js → version-25QF6A5H.js} +1 -1
- package/chunks/{web-fetch-UYGMOHW4.js → web-fetch-I7FOWHGA.js} +2 -2
- package/chunks/{workflow-CQQ4J4I6.js → workflow-LZZ5U3IT.js} +11 -11
- package/chunks/{workspace-providers-status-MVYXMYDG.js → workspace-providers-status-7DTOAWEL.js} +21 -18
- package/chunks/workspace-registry-BBIPESIZ.js +76 -0
- package/chunks/{workspace-service-OMBR6ZLG.js → workspace-service-SY3P3FUY.js} +25 -23
- package/chunks/{workspace-skills-status-IMMQ7CAY.js → workspace-skills-status-GTT2A4WN.js} +20 -18
- package/chunks/{write-file-VWGY7AJP.js → write-file-M6IHNW3V.js} +11 -11
- package/chunks/{zh-7XVVRTDH.js → zh-K2EH6BDD.js} +91 -5
- package/chunks/{zh-TW-DPH554OG.js → zh-TW-4GPXJ7ZY.js} +91 -5
- package/cli.js +13 -12
- package/locales/ca.js +115 -7
- package/locales/de.js +114 -7
- package/locales/en.js +118 -7
- package/locales/fr.js +115 -7
- package/locales/ja.js +116 -6
- package/locales/pt.js +114 -7
- package/locales/ru.js +114 -7
- package/locales/zh-TW.js +114 -6
- package/locales/zh.js +114 -6
- package/package.json +3 -6
- package/web-shell/assets/{arc-C7hjaa7g.js → arc-G3HZaqaL.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-pm9KtMZY.js → architectureDiagram-3BPJPVTR-DhBrwwch.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CApElKsU.js → blockDiagram-GPEHLZMM-16JbbF0N.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-BeDe0-9N.js → c4Diagram-AAUBKEIU-DQ3-pKgc.js} +1 -1
- package/web-shell/assets/channel-CX7ZHuuL.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-DJEkmLdl.js → chunk-2J33WTMH-ERCn30sp.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-DXX8gdpe.js → chunk-4BX2VUAB-DTysfbFi.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DORmk1kQ.js → chunk-55IACEB6-BFGrbTBi.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DWmO4mCZ.js → chunk-727SXJPM-DCX4Oar-.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-C7LRaYw2.js → chunk-AQP2D5EJ-CgT6sBr3.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CCdXgyC5.js → chunk-FMBD7UC4-C1Uuk1KV.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-SyL_xvWc.js → chunk-ND2GUHAM-DajgESiu.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-BzOuCKxa.js → chunk-QZHKN3VN-DLJSvy9X.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-B-oT3UI8.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B-oT3UI8.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BMPWyDKc.js → cose-bilkent-S5V4N54A-CH3w3qs7.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-B_GnPWik.js → dagre-BM42HDAG-BloXan9B.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-fJqMc3S_.js → diagram-2AECGRRQ-BbZiGcmK.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-ximV3O9D.js → diagram-5GNKFQAL-GQlYvLJv.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-2vVyjzqw.js → diagram-KO2AKTUF-CtIBvVq3.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-Dckcx1sT.js → diagram-LMA3HP47-D5TBo9a2.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-BAVv47ga.js → diagram-OG6HWLK6-N0gQhw6R.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-Bn3nf5J0.js → erDiagram-TEJ5UH35-zab9vDj3.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BIbGF9JT.js → flowDiagram-I6XJVG4X-BnnjtWJa.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CDbhb3AH.js → ganttDiagram-6RSMTGT7-2T0SQU4f.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CbKG1a_w.js → gitGraphDiagram-PVQCEYII-DAD6_que.js} +1 -1
- package/web-shell/assets/index-XLkWfLja.css +5 -0
- package/web-shell/assets/index-srlTR1Jg.js +786 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-DUFxTy8m.js → infoDiagram-5YYISTIA-C-j8d0xO.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D69hrBG8.js → ishikawaDiagram-YF4QCWOH-D97bAKoT.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-DsvEw51Y.js → journeyDiagram-JHISSGLW-BJAHfJmm.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-lFFjZEYd.js → kanban-definition-UN3LZRKU-CZgR5aac.js} +1 -1
- package/web-shell/assets/{linear-Bo5bWzvo.js → linear-DOd4kYhA.js} +1 -1
- package/web-shell/assets/{mermaid.core-C_HKMJx5.js → mermaid.core-BBaplnXA.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-DlV-NUTs.js → mindmap-definition-RKZ34NQL-IhBF_BR5.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-B2e6FH2a.js → pieDiagram-4H26LBE5-B4R4sYyH.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D75kSk-b.js → quadrantDiagram-W4KKPZXB-DKd1SJ61.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CQ6xakhM.js → requirementDiagram-4Y6WPE33-Cw96V0Xb.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-J_XTKrcY.js → sankeyDiagram-5OEKKPKP-C6ne_yWi.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-D7jTcBtf.js → sequenceDiagram-3UESZ5HK-CCyp4PDp.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CrlM_OT3.js → stateDiagram-AJRCARHV-DHvIqTmx.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DvFhmpwA.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-5oZi76Ef.js → timeline-definition-PNZ67QCA-amb3n9zH.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DO5YptPK.js → vennDiagram-CIIHVFJN-Abf2qRFJ.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-4t1eJDvM.js → wardley-L42UT6IY-BBlOp1av.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DKZc661S.js → wardleyDiagram-YWT4CUSO-gE_sZ0Ak.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-su9hp08G.js → xychartDiagram-2RQKCTM6-BwOni53i.js} +1 -1
- package/web-shell/index.html +16 -4
- package/chunks/chunk-6SHO7WFF.js +0 -79
- package/chunks/chunk-IFEWJXFS.js +0 -37
- package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +0 -35
- package/node_modules/@qwen-code/audio-capture/dist/index.js +0 -48
- package/node_modules/@qwen-code/audio-capture/dist/index.js.map +0 -1
- package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +0 -7
- package/node_modules/@qwen-code/audio-capture/dist/platform.js +0 -18
- package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +0 -1
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +0 -21
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +0 -58
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +0 -5
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +0 -84
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +0 -19
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +0 -6
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +0 -207
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +0 -7
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +0 -43
- package/node_modules/@qwen-code/audio-capture/package.json +0 -30
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
- package/web-shell/assets/channel-BNf1dW-j.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-uOIGlzgi.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-uOIGlzgi.js +0 -1
- package/web-shell/assets/index-CnE2ur2L.js +0 -779
- package/web-shell/assets/index-hSKXrlSE.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Bs4TK_84.js +0 -1
- /package/chunks/{chunk-Y6Z2O3WR.js → chunk-JM7BYJO5.js} +0 -0
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
DEFAULT_DARK_THEME_NAME,
|
|
5
|
+
DEFAULT_LIGHT_THEME_NAME
|
|
6
|
+
} from "./chunk-TLRYABYP.js";
|
|
3
7
|
import {
|
|
4
8
|
SUPPORTED_LANGUAGES,
|
|
5
9
|
detectSystemLanguage,
|
|
6
10
|
getLanguageNameFromLocale,
|
|
7
11
|
getLanguageSettingsOptions,
|
|
8
12
|
t
|
|
9
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-UOXLB2LY.js";
|
|
10
14
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
15
|
+
getHomeEnvFallbackVars,
|
|
16
|
+
loadEnvironment,
|
|
17
|
+
preResolveHomeEnvOverrides
|
|
18
|
+
} from "./chunk-R3SLDK6Y.js";
|
|
14
19
|
import {
|
|
15
20
|
CONSOLIDATED_DISABLE_KEYS,
|
|
16
|
-
DEFAULT_EXCLUDED_ENV_VARS,
|
|
17
|
-
ENV_CORRUPTED_PATH,
|
|
18
|
-
ENV_WAS_RECOVERED,
|
|
19
|
-
HOME_ENV_BOOTSTRAP_KEYS,
|
|
20
|
-
PROJECT_ENV_HARDCODED_EXCLUSIONS,
|
|
21
21
|
V1_INDICATOR_KEYS,
|
|
22
22
|
V1_TO_V2_MIGRATION_MAP,
|
|
23
23
|
V1_TO_V2_PRESERVE_DISABLE_MAP,
|
|
@@ -25,11 +25,15 @@ import {
|
|
|
25
25
|
getSystemDefaultsPath,
|
|
26
26
|
getSystemSettingsPath,
|
|
27
27
|
resolveEnvVarsInObject
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-O2YT7VB4.js";
|
|
29
|
+
import {
|
|
30
|
+
ENV_CORRUPTED_PATH,
|
|
31
|
+
ENV_WAS_RECOVERED
|
|
32
|
+
} from "./chunk-Z3I3QJK3.js";
|
|
29
33
|
import {
|
|
30
34
|
isWorkspaceTrusted,
|
|
31
35
|
updateSettingsFilePreservingFormat
|
|
32
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-4CSVIZLT.js";
|
|
33
37
|
import {
|
|
34
38
|
require_strip_json_comments
|
|
35
39
|
} from "./chunk-QYUE6W3T.js";
|
|
@@ -42,20 +46,16 @@ import {
|
|
|
42
46
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
|
|
43
47
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
|
|
44
48
|
stripRuntimeSnapshotPrefix
|
|
45
|
-
} from "./chunk-
|
|
46
|
-
import {
|
|
47
|
-
require_main
|
|
48
|
-
} from "./chunk-SKAZWEV5.js";
|
|
49
|
+
} from "./chunk-ZDAZSR2O.js";
|
|
49
50
|
import {
|
|
50
51
|
DEFAULT_QWEN_CUSTOM_IGNORE_FILE_NAMES
|
|
51
52
|
} from "./chunk-TLWA7TPR.js";
|
|
52
53
|
import {
|
|
53
54
|
DEFAULT_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH,
|
|
54
55
|
SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH_LIMIT
|
|
55
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-5ZVIYNLN.js";
|
|
56
57
|
import {
|
|
57
58
|
FatalConfigError,
|
|
58
|
-
QWEN_DIR,
|
|
59
59
|
Storage,
|
|
60
60
|
createDebugLogger,
|
|
61
61
|
getErrorMessage
|
|
@@ -70,10 +70,10 @@ import {
|
|
|
70
70
|
|
|
71
71
|
// packages/cli/src/config/settings.ts
|
|
72
72
|
init_esbuild_shims();
|
|
73
|
-
import * as
|
|
74
|
-
import * as
|
|
75
|
-
import { homedir
|
|
76
|
-
import
|
|
73
|
+
import * as fs3 from "node:fs";
|
|
74
|
+
import * as path2 from "node:path";
|
|
75
|
+
import { homedir } from "node:os";
|
|
76
|
+
import process from "node:process";
|
|
77
77
|
var import_strip_json_comments = __toESM(require_strip_json_comments(), 1);
|
|
78
78
|
|
|
79
79
|
// packages/cli/src/config/modelProvidersScope.ts
|
|
@@ -841,25 +841,30 @@ var SETTINGS_SCHEMA = {
|
|
|
841
841
|
category: "UI",
|
|
842
842
|
requiresRestart: false,
|
|
843
843
|
default: false,
|
|
844
|
-
|
|
845
|
-
|
|
844
|
+
// Retired from the TUI (compact tool output is now always-on there, and
|
|
845
|
+
// Ctrl+O opens the transcript instead of toggling this). Kept as a
|
|
846
|
+
// hidden, schema-only setting so the web shell's independent compact
|
|
847
|
+
// toggle can still persist via the daemon settings routes (mirrors
|
|
848
|
+
// `voiceModel`). Not shown in the TUI settings dialog.
|
|
849
|
+
description: "Compact view (web shell only; not used by the TUI).",
|
|
850
|
+
showInDialog: false
|
|
846
851
|
},
|
|
847
|
-
|
|
852
|
+
useTerminalBuffer: {
|
|
848
853
|
type: "boolean",
|
|
849
|
-
label: "
|
|
854
|
+
label: "Virtualized History (reduces flicker on long sessions)",
|
|
850
855
|
category: "UI",
|
|
851
|
-
requiresRestart:
|
|
856
|
+
requiresRestart: false,
|
|
852
857
|
default: false,
|
|
853
|
-
description: "
|
|
858
|
+
description: "Render conversation history in an in-app scrollable viewport instead of the terminal scrollback buffer. Recommended if you see flicker, scroll-storm, or interface freeze on long sessions, after Ctrl+O, after Ctrl+E / Ctrl+F (expand), after window resize, or when alt-tabbing back. Scroll with Shift+\u2191/\u2193 (line), PgUp/PgDn (page), Ctrl+Home/End (top/bottom), or the mouse wheel. Also enables mouse interactions: click an option in a menu/dialog to select it, hover to highlight it, and click in the prompt to position the cursor. Does NOT use the host terminal scrollback while enabled; for native text selection, hold Shift (or Option on macOS) while dragging.",
|
|
854
859
|
showInDialog: true
|
|
855
860
|
},
|
|
856
|
-
|
|
861
|
+
showScrollbar: {
|
|
857
862
|
type: "boolean",
|
|
858
|
-
label: "
|
|
863
|
+
label: "Show Scrollbar (Virtualized History)",
|
|
859
864
|
category: "UI",
|
|
860
865
|
requiresRestart: false,
|
|
861
|
-
default:
|
|
862
|
-
description: "
|
|
866
|
+
default: true,
|
|
867
|
+
description: "Show the auto-hiding scrollbar in the in-app scrollable viewport (Virtualized History). The bar appears while scrolling and fades out when idle. Disable to hide it entirely.",
|
|
863
868
|
showInDialog: true
|
|
864
869
|
},
|
|
865
870
|
shellOutputMaxLines: {
|
|
@@ -1093,6 +1098,19 @@ var SETTINGS_SCHEMA = {
|
|
|
1093
1098
|
description: "Image-capable model used as the vision bridge: when a text-only main model receives an image, it is transcribed by this model first. Set with /model --vision. Leave empty to auto-pick a same-provider vision model.",
|
|
1094
1099
|
showInDialog: true
|
|
1095
1100
|
},
|
|
1101
|
+
visionBridgeTimeoutMs: {
|
|
1102
|
+
type: "integer",
|
|
1103
|
+
label: "Vision Bridge Timeout (ms)",
|
|
1104
|
+
category: "Model",
|
|
1105
|
+
// Read once in the Config constructor with no setter, so a mid-session
|
|
1106
|
+
// change only takes effect on restart.
|
|
1107
|
+
requiresRestart: true,
|
|
1108
|
+
default: void 0,
|
|
1109
|
+
minimum: 1,
|
|
1110
|
+
maximum: 2147483647,
|
|
1111
|
+
description: "Per-attempt timeout in milliseconds for the vision bridge image transcription call (a positive integer up to 2147483647). Unset uses the built-in 30s. Raise for slow or proxied vision endpoints.",
|
|
1112
|
+
showInDialog: false
|
|
1113
|
+
},
|
|
1096
1114
|
modelFallbacks: {
|
|
1097
1115
|
type: "string",
|
|
1098
1116
|
label: "Model Fallbacks",
|
|
@@ -1588,6 +1606,16 @@ var SETTINGS_SCHEMA = {
|
|
|
1588
1606
|
description: "Ask for confirmation before auto-generated skills are added to the skill library. When off, auto-skills are saved immediately.",
|
|
1589
1607
|
showInDialog: false
|
|
1590
1608
|
},
|
|
1609
|
+
agentTimeoutMinutes: {
|
|
1610
|
+
type: "number",
|
|
1611
|
+
label: "Memory Agent Timeout (minutes)",
|
|
1612
|
+
category: "Memory",
|
|
1613
|
+
requiresRestart: true,
|
|
1614
|
+
default: void 0,
|
|
1615
|
+
minimum: 0,
|
|
1616
|
+
description: "Max runtime in minutes for background memory agents (extraction, dream, remember, skill review). Unset uses each agent's built-in default (2\u20135 minutes); 0 disables the time limit. Useful for slow local models that need longer than the defaults.",
|
|
1617
|
+
showInDialog: false
|
|
1618
|
+
},
|
|
1591
1619
|
enableTeamMemory: {
|
|
1592
1620
|
type: "boolean",
|
|
1593
1621
|
label: "Enable Team Memory",
|
|
@@ -2716,7 +2744,7 @@ var SETTINGS_SCHEMA = {
|
|
|
2716
2744
|
category: "Experimental",
|
|
2717
2745
|
requiresRestart: false,
|
|
2718
2746
|
default: true,
|
|
2719
|
-
description: "Generate a short LLM-based label after each tool batch completes.
|
|
2747
|
+
description: "Generate a short LLM-based label after each tool batch completes. For a completed tool group the label replaces the generic `Tool \xD7 N` header; when the group is force-expanded it appears as a dim `\u25CF <label>` line below the tool group. Requires a fast model to be configured; runs in parallel with the next API call so latency is hidden. Currently affects interactive CLI rendering only \u2014 SDK / non-interactive emission of the `tool_use_summary` message is not yet wired (the message factory is exported for a follow-up PR). Can be overridden with QWEN_CODE_EMIT_TOOL_USE_SUMMARIES=0 or =1.",
|
|
2720
2748
|
showInDialog: true
|
|
2721
2749
|
}
|
|
2722
2750
|
}
|
|
@@ -3047,8 +3075,8 @@ function getDefaultValue(key) {
|
|
|
3047
3075
|
return getFlattenedSchema()[key]?.default;
|
|
3048
3076
|
}
|
|
3049
3077
|
__name(getDefaultValue, "getDefaultValue");
|
|
3050
|
-
function getNestedValue(obj,
|
|
3051
|
-
const [first, ...rest] =
|
|
3078
|
+
function getNestedValue(obj, path3) {
|
|
3079
|
+
const [first, ...rest] = path3;
|
|
3052
3080
|
if (!first || !(first in obj)) {
|
|
3053
3081
|
return void 0;
|
|
3054
3082
|
}
|
|
@@ -3062,8 +3090,8 @@ function getNestedValue(obj, path4) {
|
|
|
3062
3090
|
return void 0;
|
|
3063
3091
|
}
|
|
3064
3092
|
__name(getNestedValue, "getNestedValue");
|
|
3065
|
-
function getNestedProperty(obj,
|
|
3066
|
-
return getNestedValue(obj,
|
|
3093
|
+
function getNestedProperty(obj, path3) {
|
|
3094
|
+
return getNestedValue(obj, path3.split("."));
|
|
3067
3095
|
}
|
|
3068
3096
|
__name(getNestedProperty, "getNestedProperty");
|
|
3069
3097
|
function getEffectiveValue(key, settings, mergedSettings) {
|
|
@@ -3071,12 +3099,12 @@ function getEffectiveValue(key, settings, mergedSettings) {
|
|
|
3071
3099
|
if (!definition) {
|
|
3072
3100
|
return void 0;
|
|
3073
3101
|
}
|
|
3074
|
-
const
|
|
3075
|
-
let value = getNestedValue(settings,
|
|
3102
|
+
const path3 = key.split(".");
|
|
3103
|
+
let value = getNestedValue(settings, path3);
|
|
3076
3104
|
if (value !== void 0) {
|
|
3077
3105
|
return value;
|
|
3078
3106
|
}
|
|
3079
|
-
value = getNestedValue(mergedSettings,
|
|
3107
|
+
value = getNestedValue(mergedSettings, path3);
|
|
3080
3108
|
if (value !== void 0) {
|
|
3081
3109
|
return value;
|
|
3082
3110
|
}
|
|
@@ -3130,6 +3158,15 @@ function validateSettingValue(def, value) {
|
|
|
3130
3158
|
if (def.maximum !== void 0 && value > def.maximum)
|
|
3131
3159
|
return `Value must be <= ${def.maximum}`;
|
|
3132
3160
|
break;
|
|
3161
|
+
case "integer":
|
|
3162
|
+
if (typeof value !== "number" || !Number.isFinite(value))
|
|
3163
|
+
return "Value must be a finite integer";
|
|
3164
|
+
if (!Number.isInteger(value)) return "Value must be an integer";
|
|
3165
|
+
if (def.minimum !== void 0 && value < def.minimum)
|
|
3166
|
+
return `Value must be >= ${def.minimum}`;
|
|
3167
|
+
if (def.maximum !== void 0 && value > def.maximum)
|
|
3168
|
+
return `Value must be <= ${def.maximum}`;
|
|
3169
|
+
break;
|
|
3133
3170
|
case "string":
|
|
3134
3171
|
if (typeof value !== "string") return "Value must be a string";
|
|
3135
3172
|
if (value.length > MAX_SETTING_STRING_VALUE_LENGTH)
|
|
@@ -3162,8 +3199,8 @@ function getDialogSettingKeys() {
|
|
|
3162
3199
|
}
|
|
3163
3200
|
__name(getDialogSettingKeys, "getDialogSettingKeys");
|
|
3164
3201
|
function settingExistsInScope(key, scopeSettings) {
|
|
3165
|
-
const
|
|
3166
|
-
const value = getNestedValue(scopeSettings,
|
|
3202
|
+
const path3 = key.split(".");
|
|
3203
|
+
const value = getNestedValue(scopeSettings, path3);
|
|
3167
3204
|
return value !== void 0;
|
|
3168
3205
|
}
|
|
3169
3206
|
__name(settingExistsInScope, "settingExistsInScope");
|
|
@@ -3176,8 +3213,8 @@ function pathHasUnsafeSegment(keys) {
|
|
|
3176
3213
|
return false;
|
|
3177
3214
|
}
|
|
3178
3215
|
__name(pathHasUnsafeSegment, "pathHasUnsafeSegment");
|
|
3179
|
-
function setNestedPropertyForce(obj,
|
|
3180
|
-
const keys =
|
|
3216
|
+
function setNestedPropertyForce(obj, path3, value) {
|
|
3217
|
+
const keys = path3.split(".");
|
|
3181
3218
|
if (pathHasUnsafeSegment(keys)) return;
|
|
3182
3219
|
const lastKey = keys.pop();
|
|
3183
3220
|
if (!lastKey) return;
|
|
@@ -3191,8 +3228,8 @@ function setNestedPropertyForce(obj, path4, value) {
|
|
|
3191
3228
|
current[lastKey] = value;
|
|
3192
3229
|
}
|
|
3193
3230
|
__name(setNestedPropertyForce, "setNestedPropertyForce");
|
|
3194
|
-
function setNestedPropertySafe(obj,
|
|
3195
|
-
const keys =
|
|
3231
|
+
function setNestedPropertySafe(obj, path3, value) {
|
|
3232
|
+
const keys = path3.split(".");
|
|
3196
3233
|
if (pathHasUnsafeSegment(keys)) return;
|
|
3197
3234
|
const lastKey = keys.pop();
|
|
3198
3235
|
if (!lastKey) return;
|
|
@@ -3211,8 +3248,8 @@ function setNestedPropertySafe(obj, path4, value) {
|
|
|
3211
3248
|
current[lastKey] = value;
|
|
3212
3249
|
}
|
|
3213
3250
|
__name(setNestedPropertySafe, "setNestedPropertySafe");
|
|
3214
|
-
function deleteNestedPropertySafe(obj,
|
|
3215
|
-
const keys =
|
|
3251
|
+
function deleteNestedPropertySafe(obj, path3) {
|
|
3252
|
+
const keys = path3.split(".");
|
|
3216
3253
|
const lastKey = keys.pop();
|
|
3217
3254
|
if (!lastKey) return;
|
|
3218
3255
|
let current = obj;
|
|
@@ -3244,10 +3281,10 @@ function getRestartRequiredFromModified(modifiedSettings) {
|
|
|
3244
3281
|
__name(getRestartRequiredFromModified, "getRestartRequiredFromModified");
|
|
3245
3282
|
function saveModifiedSettings(modifiedSettings, pendingSettings, loadedSettings, scope) {
|
|
3246
3283
|
modifiedSettings.forEach((settingKey) => {
|
|
3247
|
-
const
|
|
3284
|
+
const path3 = settingKey.split(".");
|
|
3248
3285
|
const value = getNestedValue(
|
|
3249
3286
|
pendingSettings,
|
|
3250
|
-
|
|
3287
|
+
path3
|
|
3251
3288
|
);
|
|
3252
3289
|
const existsInOriginalFile = settingExistsInScope(
|
|
3253
3290
|
settingKey,
|
|
@@ -3349,12 +3386,12 @@ function isPlainObject(item) {
|
|
|
3349
3386
|
return !!item && typeof item === "object" && !Array.isArray(item);
|
|
3350
3387
|
}
|
|
3351
3388
|
__name(isPlainObject, "isPlainObject");
|
|
3352
|
-
function mergeRecursively(target, source, getMergeStrategyForPath2,
|
|
3389
|
+
function mergeRecursively(target, source, getMergeStrategyForPath2, path3 = []) {
|
|
3353
3390
|
for (const key of Object.keys(source)) {
|
|
3354
3391
|
if (key === "__proto__" || key === "constructor" || key === "prototype") {
|
|
3355
3392
|
continue;
|
|
3356
3393
|
}
|
|
3357
|
-
const newPath = [...
|
|
3394
|
+
const newPath = [...path3, key];
|
|
3358
3395
|
const srcValue = source[key];
|
|
3359
3396
|
const objValue = target[key];
|
|
3360
3397
|
const mergeStrategy = getMergeStrategyForPath2(newPath);
|
|
@@ -3950,382 +3987,12 @@ function needsMigration(settings) {
|
|
|
3950
3987
|
}
|
|
3951
3988
|
__name(needsMigration, "needsMigration");
|
|
3952
3989
|
|
|
3953
|
-
// packages/cli/src/config/environment.ts
|
|
3954
|
-
init_esbuild_shims();
|
|
3955
|
-
var dotenv = __toESM(require_main(), 1);
|
|
3956
|
-
import * as fs3 from "node:fs";
|
|
3957
|
-
import * as path2 from "node:path";
|
|
3958
|
-
import * as os from "node:os";
|
|
3959
|
-
var SETTINGS_DIRECTORY_NAME = QWEN_DIR;
|
|
3960
|
-
var RELOAD_EXCLUDED_KEYS = /* @__PURE__ */ new Set([
|
|
3961
|
-
...PROJECT_ENV_HARDCODED_EXCLUSIONS,
|
|
3962
|
-
"QWEN_SERVER_TOKEN",
|
|
3963
|
-
"QWEN_CLI_ENTRY",
|
|
3964
|
-
"NODE_OPTIONS",
|
|
3965
|
-
"NODE_PATH",
|
|
3966
|
-
"NODE_TLS_REJECT_UNAUTHORIZED",
|
|
3967
|
-
"LD_PRELOAD",
|
|
3968
|
-
"LD_AUDIT",
|
|
3969
|
-
"LD_LIBRARY_PATH",
|
|
3970
|
-
"DYLD_INSERT_LIBRARIES",
|
|
3971
|
-
"DYLD_LIBRARY_PATH",
|
|
3972
|
-
"BASH_ENV",
|
|
3973
|
-
"ENV",
|
|
3974
|
-
"PATH",
|
|
3975
|
-
"HOME",
|
|
3976
|
-
"TMPDIR",
|
|
3977
|
-
"TMP",
|
|
3978
|
-
"TEMP"
|
|
3979
|
-
]);
|
|
3980
|
-
var dotEnvSourcedKeys = /* @__PURE__ */ new Set();
|
|
3981
|
-
var settingsEnvSourcedKeys = /* @__PURE__ */ new Set();
|
|
3982
|
-
var lastReloadSnapshot = /* @__PURE__ */ new Map();
|
|
3983
|
-
var lastReloadSnapshotSeeded = false;
|
|
3984
|
-
function getUserLevelEnvPaths() {
|
|
3985
|
-
const homeDir = os.homedir();
|
|
3986
|
-
const globalQwenDir = Storage.getGlobalQwenDir();
|
|
3987
|
-
const paths = /* @__PURE__ */ new Set([
|
|
3988
|
-
path2.normalize(path2.join(homeDir, ".env")),
|
|
3989
|
-
path2.normalize(path2.join(globalQwenDir, ".env"))
|
|
3990
|
-
]);
|
|
3991
|
-
const legacyQwenEnv = path2.normalize(path2.join(homeDir, QWEN_DIR, ".env"));
|
|
3992
|
-
paths.add(legacyQwenEnv);
|
|
3993
|
-
return paths;
|
|
3994
|
-
}
|
|
3995
|
-
__name(getUserLevelEnvPaths, "getUserLevelEnvPaths");
|
|
3996
|
-
var homeEnvBootstrapped = false;
|
|
3997
|
-
function preResolveHomeEnvOverrides() {
|
|
3998
|
-
if (homeEnvBootstrapped) {
|
|
3999
|
-
return;
|
|
4000
|
-
}
|
|
4001
|
-
homeEnvBootstrapped = true;
|
|
4002
|
-
if (HOME_ENV_BOOTSTRAP_KEYS.every((key) => process.env[key])) {
|
|
4003
|
-
return;
|
|
4004
|
-
}
|
|
4005
|
-
const initialQwenHome = process.env["QWEN_HOME"];
|
|
4006
|
-
const initialQwenDir = Storage.getGlobalQwenDir();
|
|
4007
|
-
const candidates = [path2.join(initialQwenDir, ".env")];
|
|
4008
|
-
if (!initialQwenHome) {
|
|
4009
|
-
candidates.push(path2.join(path2.dirname(initialQwenDir), ".env"));
|
|
4010
|
-
}
|
|
4011
|
-
for (const candidate of candidates) {
|
|
4012
|
-
readHomeEnvInto(candidate);
|
|
4013
|
-
}
|
|
4014
|
-
const discoveredQwenHome = process.env["QWEN_HOME"];
|
|
4015
|
-
if (discoveredQwenHome && discoveredQwenHome !== initialQwenHome) {
|
|
4016
|
-
const discoveredDir = Storage.getGlobalQwenDir();
|
|
4017
|
-
if (discoveredDir !== initialQwenDir) {
|
|
4018
|
-
readHomeEnvInto(path2.join(discoveredDir, ".env"));
|
|
4019
|
-
}
|
|
4020
|
-
}
|
|
4021
|
-
}
|
|
4022
|
-
__name(preResolveHomeEnvOverrides, "preResolveHomeEnvOverrides");
|
|
4023
|
-
function readHomeEnvInto(file) {
|
|
4024
|
-
if (!fs3.existsSync(file)) {
|
|
4025
|
-
return;
|
|
4026
|
-
}
|
|
4027
|
-
try {
|
|
4028
|
-
const parsed = dotenv.parse(fs3.readFileSync(file, "utf-8"));
|
|
4029
|
-
for (const key of PROJECT_ENV_HARDCODED_EXCLUSIONS) {
|
|
4030
|
-
if (parsed[key] && !Object.hasOwn(process.env, key)) {
|
|
4031
|
-
process.env[key] = parsed[key];
|
|
4032
|
-
}
|
|
4033
|
-
}
|
|
4034
|
-
} catch (_e) {
|
|
4035
|
-
}
|
|
4036
|
-
}
|
|
4037
|
-
__name(readHomeEnvInto, "readHomeEnvInto");
|
|
4038
|
-
function resetHomeEnvBootstrapForTesting() {
|
|
4039
|
-
homeEnvBootstrapped = false;
|
|
4040
|
-
}
|
|
4041
|
-
__name(resetHomeEnvBootstrapForTesting, "resetHomeEnvBootstrapForTesting");
|
|
4042
|
-
function resetEnvironmentTrackingForTesting() {
|
|
4043
|
-
dotEnvSourcedKeys.clear();
|
|
4044
|
-
settingsEnvSourcedKeys.clear();
|
|
4045
|
-
lastReloadSnapshot.clear();
|
|
4046
|
-
lastReloadSnapshotSeeded = false;
|
|
4047
|
-
}
|
|
4048
|
-
__name(resetEnvironmentTrackingForTesting, "resetEnvironmentTrackingForTesting");
|
|
4049
|
-
function getHomeEnvFallbackVars(onReadError) {
|
|
4050
|
-
const globalQwenDir = Storage.getGlobalQwenDir();
|
|
4051
|
-
const candidates = [path2.join(globalQwenDir, ".env")];
|
|
4052
|
-
if (!process.env["QWEN_HOME"]) {
|
|
4053
|
-
candidates.push(path2.join(path2.dirname(globalQwenDir), ".env"));
|
|
4054
|
-
}
|
|
4055
|
-
const result = {};
|
|
4056
|
-
for (const candidate of candidates) {
|
|
4057
|
-
if (!fs3.existsSync(candidate)) {
|
|
4058
|
-
continue;
|
|
4059
|
-
}
|
|
4060
|
-
try {
|
|
4061
|
-
const parsed = dotenv.parse(fs3.readFileSync(candidate, "utf-8"));
|
|
4062
|
-
for (const key in parsed) {
|
|
4063
|
-
if (Object.hasOwn(parsed, key) && !Object.hasOwn(process.env, key)) {
|
|
4064
|
-
result[key] ??= parsed[key];
|
|
4065
|
-
}
|
|
4066
|
-
}
|
|
4067
|
-
} catch (e) {
|
|
4068
|
-
onReadError?.(
|
|
4069
|
-
`Failed to read home .env candidate ${candidate}: ${getErrorMessage(e)}`
|
|
4070
|
-
);
|
|
4071
|
-
}
|
|
4072
|
-
}
|
|
4073
|
-
return result;
|
|
4074
|
-
}
|
|
4075
|
-
__name(getHomeEnvFallbackVars, "getHomeEnvFallbackVars");
|
|
4076
|
-
function findEnvFiles(settings, startDir, userLevelPaths = getUserLevelEnvPaths()) {
|
|
4077
|
-
const homeDir = os.homedir();
|
|
4078
|
-
let realStartDir = path2.resolve(startDir);
|
|
4079
|
-
try {
|
|
4080
|
-
realStartDir = fs3.realpathSync(realStartDir);
|
|
4081
|
-
} catch {
|
|
4082
|
-
}
|
|
4083
|
-
const isTrusted = isWorkspaceTrusted(
|
|
4084
|
-
settings,
|
|
4085
|
-
void 0,
|
|
4086
|
-
realStartDir
|
|
4087
|
-
).isTrusted;
|
|
4088
|
-
const globalQwenDir = Storage.getGlobalQwenDir();
|
|
4089
|
-
const legacyQwenDir = path2.normalize(path2.join(homeDir, QWEN_DIR));
|
|
4090
|
-
const hasCustomConfigDir = path2.normalize(globalQwenDir) !== legacyQwenDir;
|
|
4091
|
-
const found = [];
|
|
4092
|
-
const seen = /* @__PURE__ */ new Set();
|
|
4093
|
-
const canUseEnvFile = /* @__PURE__ */ __name((filePath) => isTrusted !== false || userLevelPaths.has(path2.normalize(filePath)), "canUseEnvFile");
|
|
4094
|
-
const pushCandidate = /* @__PURE__ */ __name((filePath) => {
|
|
4095
|
-
const normalized = path2.normalize(filePath);
|
|
4096
|
-
if (!seen.has(normalized) && fs3.existsSync(filePath) && canUseEnvFile(filePath)) {
|
|
4097
|
-
seen.add(normalized);
|
|
4098
|
-
found.push(filePath);
|
|
4099
|
-
return true;
|
|
4100
|
-
}
|
|
4101
|
-
return false;
|
|
4102
|
-
}, "pushCandidate");
|
|
4103
|
-
const pushHomeCandidates = /* @__PURE__ */ __name(() => {
|
|
4104
|
-
const candidates = [path2.join(globalQwenDir, ".env")];
|
|
4105
|
-
if (hasCustomConfigDir) {
|
|
4106
|
-
candidates.push(path2.join(legacyQwenDir, ".env"));
|
|
4107
|
-
}
|
|
4108
|
-
candidates.push(path2.join(homeDir, ".env"));
|
|
4109
|
-
for (const candidate of candidates) {
|
|
4110
|
-
pushCandidate(candidate);
|
|
4111
|
-
}
|
|
4112
|
-
}, "pushHomeCandidates");
|
|
4113
|
-
let currentDir = realStartDir;
|
|
4114
|
-
let visitedHomeDir = false;
|
|
4115
|
-
while (true) {
|
|
4116
|
-
if (currentDir === homeDir) {
|
|
4117
|
-
visitedHomeDir = true;
|
|
4118
|
-
pushHomeCandidates();
|
|
4119
|
-
return found;
|
|
4120
|
-
} else {
|
|
4121
|
-
const geminiEnvPath = path2.join(currentDir, QWEN_DIR, ".env");
|
|
4122
|
-
if (pushCandidate(geminiEnvPath)) {
|
|
4123
|
-
pushHomeCandidates();
|
|
4124
|
-
return found;
|
|
4125
|
-
}
|
|
4126
|
-
const envPath = path2.join(currentDir, ".env");
|
|
4127
|
-
if (pushCandidate(envPath)) {
|
|
4128
|
-
pushHomeCandidates();
|
|
4129
|
-
return found;
|
|
4130
|
-
}
|
|
4131
|
-
}
|
|
4132
|
-
const parentDir = path2.dirname(currentDir);
|
|
4133
|
-
if (parentDir === currentDir || !parentDir) {
|
|
4134
|
-
if (!visitedHomeDir) {
|
|
4135
|
-
pushHomeCandidates();
|
|
4136
|
-
}
|
|
4137
|
-
return found;
|
|
4138
|
-
}
|
|
4139
|
-
currentDir = parentDir;
|
|
4140
|
-
}
|
|
4141
|
-
}
|
|
4142
|
-
__name(findEnvFiles, "findEnvFiles");
|
|
4143
|
-
function setUpCloudShellEnvironment(envFilePath) {
|
|
4144
|
-
if (envFilePath && fs3.existsSync(envFilePath)) {
|
|
4145
|
-
const envFileContent = fs3.readFileSync(envFilePath);
|
|
4146
|
-
const parsedEnv = dotenv.parse(envFileContent);
|
|
4147
|
-
if (parsedEnv["GOOGLE_CLOUD_PROJECT"]) {
|
|
4148
|
-
process.env["GOOGLE_CLOUD_PROJECT"] = parsedEnv["GOOGLE_CLOUD_PROJECT"];
|
|
4149
|
-
} else {
|
|
4150
|
-
process.env["GOOGLE_CLOUD_PROJECT"] = "cloudshell-gca";
|
|
4151
|
-
}
|
|
4152
|
-
} else {
|
|
4153
|
-
process.env["GOOGLE_CLOUD_PROJECT"] = "cloudshell-gca";
|
|
4154
|
-
}
|
|
4155
|
-
}
|
|
4156
|
-
__name(setUpCloudShellEnvironment, "setUpCloudShellEnvironment");
|
|
4157
|
-
function setUpCloudShellEnvironmentFromFiles(envFilePaths) {
|
|
4158
|
-
for (const envFilePath of envFilePaths) {
|
|
4159
|
-
if (!fs3.existsSync(envFilePath)) {
|
|
4160
|
-
continue;
|
|
4161
|
-
}
|
|
4162
|
-
const envFileContent = fs3.readFileSync(envFilePath);
|
|
4163
|
-
const parsedEnv = dotenv.parse(envFileContent);
|
|
4164
|
-
if (parsedEnv["GOOGLE_CLOUD_PROJECT"]) {
|
|
4165
|
-
process.env["GOOGLE_CLOUD_PROJECT"] = parsedEnv["GOOGLE_CLOUD_PROJECT"];
|
|
4166
|
-
return;
|
|
4167
|
-
}
|
|
4168
|
-
}
|
|
4169
|
-
process.env["GOOGLE_CLOUD_PROJECT"] = "cloudshell-gca";
|
|
4170
|
-
}
|
|
4171
|
-
__name(setUpCloudShellEnvironmentFromFiles, "setUpCloudShellEnvironmentFromFiles");
|
|
4172
|
-
function loadEnvironment(settings, startDir = process.cwd()) {
|
|
4173
|
-
const userLevelPaths = getUserLevelEnvPaths();
|
|
4174
|
-
const envFilePaths = findEnvFiles(settings, startDir, userLevelPaths);
|
|
4175
|
-
if (process.env["CLOUD_SHELL"] === "true") {
|
|
4176
|
-
setUpCloudShellEnvironmentFromFiles(envFilePaths);
|
|
4177
|
-
}
|
|
4178
|
-
for (const envFilePath of envFilePaths) {
|
|
4179
|
-
try {
|
|
4180
|
-
const envFileContent = fs3.readFileSync(envFilePath, "utf-8");
|
|
4181
|
-
const parsedEnv = dotenv.parse(envFileContent);
|
|
4182
|
-
const excludedVars = settings?.advanced?.excludedEnvVars || DEFAULT_EXCLUDED_ENV_VARS;
|
|
4183
|
-
const normalizedEnvFilePath = path2.normalize(envFilePath);
|
|
4184
|
-
const isHomeScopedEnvFile = userLevelPaths.has(normalizedEnvFilePath);
|
|
4185
|
-
const isQwenScopedEnvFile = isHomeScopedEnvFile || path2.basename(path2.dirname(normalizedEnvFilePath)) === QWEN_DIR;
|
|
4186
|
-
for (const key in parsedEnv) {
|
|
4187
|
-
if (Object.hasOwn(parsedEnv, key)) {
|
|
4188
|
-
if (!isHomeScopedEnvFile && PROJECT_ENV_HARDCODED_EXCLUSIONS.includes(key)) {
|
|
4189
|
-
continue;
|
|
4190
|
-
}
|
|
4191
|
-
if (!isQwenScopedEnvFile && excludedVars.includes(key)) {
|
|
4192
|
-
continue;
|
|
4193
|
-
}
|
|
4194
|
-
const existingValue = process.env[key];
|
|
4195
|
-
const isEffectivelyUnset = !Object.hasOwn(process.env, key) || existingValue === "";
|
|
4196
|
-
if (isEffectivelyUnset) {
|
|
4197
|
-
process.env[key] = parsedEnv[key];
|
|
4198
|
-
dotEnvSourcedKeys.add(key);
|
|
4199
|
-
}
|
|
4200
|
-
if (!lastReloadSnapshotSeeded && !lastReloadSnapshot.has(key)) {
|
|
4201
|
-
lastReloadSnapshot.set(key, parsedEnv[key]);
|
|
4202
|
-
}
|
|
4203
|
-
}
|
|
4204
|
-
}
|
|
4205
|
-
} catch (_e) {
|
|
4206
|
-
}
|
|
4207
|
-
}
|
|
4208
|
-
if (settings.env) {
|
|
4209
|
-
for (const [key, value] of Object.entries(settings.env)) {
|
|
4210
|
-
if (PROJECT_ENV_HARDCODED_EXCLUSIONS.includes(key)) {
|
|
4211
|
-
continue;
|
|
4212
|
-
}
|
|
4213
|
-
const existingValue = process.env[key];
|
|
4214
|
-
const isEffectivelyUnset = !Object.hasOwn(process.env, key) || existingValue === "";
|
|
4215
|
-
if (isEffectivelyUnset && typeof value === "string") {
|
|
4216
|
-
process.env[key] = value;
|
|
4217
|
-
settingsEnvSourcedKeys.add(key);
|
|
4218
|
-
}
|
|
4219
|
-
if (!lastReloadSnapshotSeeded && typeof value === "string" && !lastReloadSnapshot.has(key)) {
|
|
4220
|
-
lastReloadSnapshot.set(key, value);
|
|
4221
|
-
}
|
|
4222
|
-
}
|
|
4223
|
-
}
|
|
4224
|
-
lastReloadSnapshotSeeded = true;
|
|
4225
|
-
}
|
|
4226
|
-
__name(loadEnvironment, "loadEnvironment");
|
|
4227
|
-
function reloadEnvironment(settings, workspaceCwd) {
|
|
4228
|
-
const userLevelPaths = getUserLevelEnvPaths();
|
|
4229
|
-
const envFilePaths = findEnvFiles(settings, workspaceCwd, userLevelPaths);
|
|
4230
|
-
if (process.env["CLOUD_SHELL"] === "true") {
|
|
4231
|
-
setUpCloudShellEnvironmentFromFiles(envFilePaths);
|
|
4232
|
-
}
|
|
4233
|
-
let dotEnvReadFailed = false;
|
|
4234
|
-
const newDotEnvKeys = /* @__PURE__ */ new Map();
|
|
4235
|
-
const newSettingsEnvKeys = /* @__PURE__ */ new Map();
|
|
4236
|
-
for (const envFilePath of envFilePaths) {
|
|
4237
|
-
try {
|
|
4238
|
-
const envFileContent = fs3.readFileSync(envFilePath, "utf-8");
|
|
4239
|
-
const parsedEnv = dotenv.parse(envFileContent);
|
|
4240
|
-
const excludedVars = settings?.advanced?.excludedEnvVars || DEFAULT_EXCLUDED_ENV_VARS;
|
|
4241
|
-
const normalizedEnvFilePath = path2.normalize(envFilePath);
|
|
4242
|
-
const isHomeScopedEnvFile = userLevelPaths.has(normalizedEnvFilePath);
|
|
4243
|
-
const isQwenScopedEnvFile = isHomeScopedEnvFile || path2.basename(path2.dirname(normalizedEnvFilePath)) === QWEN_DIR;
|
|
4244
|
-
for (const key in parsedEnv) {
|
|
4245
|
-
if (!Object.hasOwn(parsedEnv, key)) continue;
|
|
4246
|
-
if (RELOAD_EXCLUDED_KEYS.has(key)) continue;
|
|
4247
|
-
if (!isHomeScopedEnvFile && PROJECT_ENV_HARDCODED_EXCLUSIONS.includes(key)) {
|
|
4248
|
-
continue;
|
|
4249
|
-
}
|
|
4250
|
-
if (!isQwenScopedEnvFile && excludedVars.includes(key)) continue;
|
|
4251
|
-
if (!newDotEnvKeys.has(key)) {
|
|
4252
|
-
newDotEnvKeys.set(key, parsedEnv[key]);
|
|
4253
|
-
}
|
|
4254
|
-
}
|
|
4255
|
-
} catch {
|
|
4256
|
-
dotEnvReadFailed = true;
|
|
4257
|
-
}
|
|
4258
|
-
}
|
|
4259
|
-
if (settings.env) {
|
|
4260
|
-
for (const [key, value] of Object.entries(settings.env)) {
|
|
4261
|
-
if (RELOAD_EXCLUDED_KEYS.has(key)) continue;
|
|
4262
|
-
if (PROJECT_ENV_HARDCODED_EXCLUSIONS.includes(key)) continue;
|
|
4263
|
-
if (typeof value !== "string") continue;
|
|
4264
|
-
const dotEnvValue = newDotEnvKeys.get(key);
|
|
4265
|
-
if (dotEnvValue !== void 0 && dotEnvValue !== "") continue;
|
|
4266
|
-
if (dotEnvReadFailed && lastReloadSnapshot.has(key)) continue;
|
|
4267
|
-
newSettingsEnvKeys.set(key, value);
|
|
4268
|
-
}
|
|
4269
|
-
}
|
|
4270
|
-
const allNewKeys = /* @__PURE__ */ new Set([
|
|
4271
|
-
...newDotEnvKeys.keys(),
|
|
4272
|
-
...newSettingsEnvKeys.keys()
|
|
4273
|
-
]);
|
|
4274
|
-
const updatedKeys = [];
|
|
4275
|
-
const removedKeys = [];
|
|
4276
|
-
if (!dotEnvReadFailed) {
|
|
4277
|
-
const previouslyKnown = /* @__PURE__ */ new Set([
|
|
4278
|
-
...lastReloadSnapshot.keys(),
|
|
4279
|
-
...dotEnvSourcedKeys,
|
|
4280
|
-
...settingsEnvSourcedKeys
|
|
4281
|
-
]);
|
|
4282
|
-
for (const key of previouslyKnown) {
|
|
4283
|
-
if (!allNewKeys.has(key) && !RELOAD_EXCLUDED_KEYS.has(key)) {
|
|
4284
|
-
delete process.env[key];
|
|
4285
|
-
removedKeys.push(key);
|
|
4286
|
-
}
|
|
4287
|
-
}
|
|
4288
|
-
}
|
|
4289
|
-
for (const [key, value] of newDotEnvKeys) {
|
|
4290
|
-
if (value === "" && newSettingsEnvKeys.has(key)) continue;
|
|
4291
|
-
if (process.env[key] !== value) {
|
|
4292
|
-
updatedKeys.push(key);
|
|
4293
|
-
}
|
|
4294
|
-
process.env[key] = value;
|
|
4295
|
-
}
|
|
4296
|
-
for (const [key, value] of newSettingsEnvKeys) {
|
|
4297
|
-
if (process.env[key] !== value) {
|
|
4298
|
-
updatedKeys.push(key);
|
|
4299
|
-
}
|
|
4300
|
-
process.env[key] = value;
|
|
4301
|
-
}
|
|
4302
|
-
if (!dotEnvReadFailed) {
|
|
4303
|
-
dotEnvSourcedKeys.clear();
|
|
4304
|
-
for (const key of newDotEnvKeys.keys()) {
|
|
4305
|
-
dotEnvSourcedKeys.add(key);
|
|
4306
|
-
}
|
|
4307
|
-
lastReloadSnapshot.clear();
|
|
4308
|
-
for (const [key, value] of newDotEnvKeys) {
|
|
4309
|
-
lastReloadSnapshot.set(key, value);
|
|
4310
|
-
}
|
|
4311
|
-
for (const [key, value] of newSettingsEnvKeys) {
|
|
4312
|
-
lastReloadSnapshot.set(key, value);
|
|
4313
|
-
}
|
|
4314
|
-
}
|
|
4315
|
-
settingsEnvSourcedKeys.clear();
|
|
4316
|
-
for (const key of newSettingsEnvKeys.keys()) {
|
|
4317
|
-
settingsEnvSourcedKeys.add(key);
|
|
4318
|
-
}
|
|
4319
|
-
return { updatedKeys, removedKeys };
|
|
4320
|
-
}
|
|
4321
|
-
__name(reloadEnvironment, "reloadEnvironment");
|
|
4322
|
-
|
|
4323
3990
|
// packages/cli/src/config/settings.ts
|
|
4324
3991
|
var debugLogger2 = createDebugLogger("SETTINGS");
|
|
4325
|
-
function getMergeStrategyForPath(
|
|
3992
|
+
function getMergeStrategyForPath(path3) {
|
|
4326
3993
|
let current = void 0;
|
|
4327
3994
|
let currentSchema = getSettingsSchema();
|
|
4328
|
-
for (const key of
|
|
3995
|
+
for (const key of path3) {
|
|
4329
3996
|
if (!currentSchema || !currentSchema[key]) {
|
|
4330
3997
|
return void 0;
|
|
4331
3998
|
}
|
|
@@ -4340,7 +4007,7 @@ function getUserSettingsPath() {
|
|
|
4340
4007
|
}
|
|
4341
4008
|
__name(getUserSettingsPath, "getUserSettingsPath");
|
|
4342
4009
|
function getUserSettingsDir() {
|
|
4343
|
-
return
|
|
4010
|
+
return path2.dirname(getUserSettingsPath());
|
|
4344
4011
|
}
|
|
4345
4012
|
__name(getUserSettingsDir, "getUserSettingsDir");
|
|
4346
4013
|
var SETTINGS_VERSION = 4;
|
|
@@ -4602,14 +4269,14 @@ var LoadedSettings = class {
|
|
|
4602
4269
|
reloadScopeFromDisk(scope) {
|
|
4603
4270
|
const file = this.forScope(scope);
|
|
4604
4271
|
try {
|
|
4605
|
-
if (!
|
|
4272
|
+
if (!fs3.existsSync(file.path)) {
|
|
4606
4273
|
file.settings = {};
|
|
4607
4274
|
file.originalSettings = {};
|
|
4608
4275
|
file.rawJson = void 0;
|
|
4609
4276
|
this._merged = this.computeMergedSettings();
|
|
4610
4277
|
return;
|
|
4611
4278
|
}
|
|
4612
|
-
const content =
|
|
4279
|
+
const content = fs3.readFileSync(file.path, "utf-8");
|
|
4613
4280
|
const parsed = JSON.parse((0, import_strip_json_comments.default)(content));
|
|
4614
4281
|
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
4615
4282
|
const resolved = resolveEnvVarsInObject(
|
|
@@ -4666,33 +4333,33 @@ function createMinimalSettings() {
|
|
|
4666
4333
|
}
|
|
4667
4334
|
__name(createMinimalSettings, "createMinimalSettings");
|
|
4668
4335
|
function detectQwenHomeRedirectWithoutMigration(activeUserSettingsPath) {
|
|
4669
|
-
if (!
|
|
4336
|
+
if (!process.env["QWEN_HOME"]) {
|
|
4670
4337
|
return null;
|
|
4671
4338
|
}
|
|
4672
4339
|
const activeQwenDir = Storage.getGlobalQwenDir();
|
|
4673
|
-
const savedQwenHome =
|
|
4674
|
-
delete
|
|
4340
|
+
const savedQwenHome = process.env["QWEN_HOME"];
|
|
4341
|
+
delete process.env["QWEN_HOME"];
|
|
4675
4342
|
let legacyQwenDir;
|
|
4676
4343
|
try {
|
|
4677
4344
|
legacyQwenDir = Storage.getGlobalQwenDir();
|
|
4678
4345
|
} finally {
|
|
4679
|
-
|
|
4346
|
+
process.env["QWEN_HOME"] = savedQwenHome;
|
|
4680
4347
|
}
|
|
4681
|
-
if (
|
|
4348
|
+
if (path2.resolve(activeQwenDir) === path2.resolve(legacyQwenDir)) {
|
|
4682
4349
|
return null;
|
|
4683
4350
|
}
|
|
4684
|
-
if (
|
|
4351
|
+
if (fs3.existsSync(activeUserSettingsPath)) {
|
|
4685
4352
|
return null;
|
|
4686
4353
|
}
|
|
4687
|
-
const legacyUserSettings =
|
|
4688
|
-
if (!
|
|
4354
|
+
const legacyUserSettings = path2.join(legacyQwenDir, "settings.json");
|
|
4355
|
+
if (!fs3.existsSync(legacyUserSettings)) {
|
|
4689
4356
|
return null;
|
|
4690
4357
|
}
|
|
4691
4358
|
return `QWEN_HOME points to "${activeQwenDir}" but no settings.json was found there. Existing config remains at "${legacyQwenDir}" \u2014 OAuth tokens, settings, memory, extensions, and skills are not auto-migrated. Copy them manually if you want them to apply at the new location.`;
|
|
4692
4359
|
}
|
|
4693
4360
|
__name(detectQwenHomeRedirectWithoutMigration, "detectQwenHomeRedirectWithoutMigration");
|
|
4694
4361
|
var CORRUPTED_SUFFIX = ".corrupted";
|
|
4695
|
-
function loadSettings(workspaceDir =
|
|
4362
|
+
function loadSettings(workspaceDir = process.cwd(), consumeCorruptionEnvVars = true) {
|
|
4696
4363
|
const opts = typeof consumeCorruptionEnvVars === "object" ? consumeCorruptionEnvVars : { consumeCorruptionEnvVars };
|
|
4697
4364
|
preResolveHomeEnvOverrides();
|
|
4698
4365
|
const userSettingsPath = getUserSettingsPath();
|
|
@@ -4705,21 +4372,21 @@ function loadSettings(workspaceDir = process2.cwd(), consumeCorruptionEnvVars =
|
|
|
4705
4372
|
const systemSettingsPath = getSystemSettingsPath();
|
|
4706
4373
|
const systemDefaultsPath = getSystemDefaultsPath();
|
|
4707
4374
|
const migratedInMemorScopes = /* @__PURE__ */ new Set();
|
|
4708
|
-
const resolvedWorkspaceDir =
|
|
4709
|
-
const resolvedHomeDir =
|
|
4375
|
+
const resolvedWorkspaceDir = path2.resolve(workspaceDir);
|
|
4376
|
+
const resolvedHomeDir = path2.resolve(homedir());
|
|
4710
4377
|
let realWorkspaceDir = resolvedWorkspaceDir;
|
|
4711
4378
|
try {
|
|
4712
|
-
realWorkspaceDir =
|
|
4379
|
+
realWorkspaceDir = fs3.realpathSync(resolvedWorkspaceDir);
|
|
4713
4380
|
} catch (_e) {
|
|
4714
4381
|
}
|
|
4715
|
-
const realHomeDir =
|
|
4382
|
+
const realHomeDir = fs3.realpathSync(resolvedHomeDir);
|
|
4716
4383
|
const workspaceSettingsPath = new Storage(
|
|
4717
4384
|
workspaceDir
|
|
4718
4385
|
).getWorkspaceSettingsPath();
|
|
4719
4386
|
const loadAndMigrate = /* @__PURE__ */ __name((filePath, scope) => {
|
|
4720
4387
|
try {
|
|
4721
|
-
if (
|
|
4722
|
-
const content =
|
|
4388
|
+
if (fs3.existsSync(filePath)) {
|
|
4389
|
+
const content = fs3.readFileSync(filePath, "utf-8");
|
|
4723
4390
|
let rawSettings;
|
|
4724
4391
|
const corruptedPath = `${filePath}${CORRUPTED_SUFFIX}`;
|
|
4725
4392
|
let corruptedSaved = false;
|
|
@@ -4731,7 +4398,7 @@ function loadSettings(workspaceDir = process2.cwd(), consumeCorruptionEnvVars =
|
|
|
4731
4398
|
`Settings file ${filePath} has invalid JSON (${getErrorMessage(parseError)}). Resetting to empty settings.`
|
|
4732
4399
|
);
|
|
4733
4400
|
try {
|
|
4734
|
-
|
|
4401
|
+
fs3.copyFileSync(filePath, corruptedPath);
|
|
4735
4402
|
corruptedSaved = true;
|
|
4736
4403
|
} catch (copyError) {
|
|
4737
4404
|
debugLogger2.warn(
|
|
@@ -4743,7 +4410,7 @@ function loadSettings(workspaceDir = process2.cwd(), consumeCorruptionEnvVars =
|
|
|
4743
4410
|
debugLogger2.warn(warningMsg);
|
|
4744
4411
|
if (corruptedSaved) {
|
|
4745
4412
|
try {
|
|
4746
|
-
|
|
4413
|
+
fs3.writeFileSync(filePath, "{}", "utf-8");
|
|
4747
4414
|
} catch {
|
|
4748
4415
|
}
|
|
4749
4416
|
}
|
|
@@ -4755,12 +4422,12 @@ function loadSettings(workspaceDir = process2.cwd(), consumeCorruptionEnvVars =
|
|
|
4755
4422
|
};
|
|
4756
4423
|
}
|
|
4757
4424
|
}
|
|
4758
|
-
const envCorruptedPath =
|
|
4425
|
+
const envCorruptedPath = process.env[ENV_CORRUPTED_PATH];
|
|
4759
4426
|
if ((opts.consumeCorruptionEnvVars ?? true) && envCorruptedPath && envCorruptedPath === corruptedPath && scope === "User" /* User */) {
|
|
4760
4427
|
corruptedSaved = true;
|
|
4761
|
-
recoveredFromEnvVar =
|
|
4762
|
-
delete
|
|
4763
|
-
delete
|
|
4428
|
+
recoveredFromEnvVar = process.env[ENV_WAS_RECOVERED] === "1";
|
|
4429
|
+
delete process.env[ENV_CORRUPTED_PATH];
|
|
4430
|
+
delete process.env[ENV_WAS_RECOVERED];
|
|
4764
4431
|
}
|
|
4765
4432
|
if (typeof rawSettings !== "object" || rawSettings === null || Array.isArray(rawSettings)) {
|
|
4766
4433
|
settingsErrors.push({
|
|
@@ -4955,9 +4622,9 @@ function createSettingsUpdate(key, value) {
|
|
|
4955
4622
|
__name(createSettingsUpdate, "createSettingsUpdate");
|
|
4956
4623
|
function saveSettings(settingsFile, updates = settingsFile.originalSettings, replacePath = [], opts = {}) {
|
|
4957
4624
|
try {
|
|
4958
|
-
const dirPath =
|
|
4959
|
-
if (!
|
|
4960
|
-
|
|
4625
|
+
const dirPath = path2.dirname(settingsFile.path);
|
|
4626
|
+
if (!fs3.existsSync(dirPath)) {
|
|
4627
|
+
fs3.mkdirSync(dirPath, { recursive: true });
|
|
4961
4628
|
}
|
|
4962
4629
|
const written = updateSettingsFilePreservingFormat(
|
|
4963
4630
|
settingsFile.path,
|
|
@@ -5010,15 +4677,6 @@ export {
|
|
|
5010
4677
|
backupSettingsFile,
|
|
5011
4678
|
restoreSettingsFromBackup,
|
|
5012
4679
|
cleanupSettingsBackup,
|
|
5013
|
-
SETTINGS_DIRECTORY_NAME,
|
|
5014
|
-
preResolveHomeEnvOverrides,
|
|
5015
|
-
resetHomeEnvBootstrapForTesting,
|
|
5016
|
-
resetEnvironmentTrackingForTesting,
|
|
5017
|
-
getHomeEnvFallbackVars,
|
|
5018
|
-
findEnvFiles,
|
|
5019
|
-
setUpCloudShellEnvironment,
|
|
5020
|
-
loadEnvironment,
|
|
5021
|
-
reloadEnvironment,
|
|
5022
4680
|
getUserSettingsPath,
|
|
5023
4681
|
getUserSettingsDir,
|
|
5024
4682
|
SETTINGS_VERSION,
|