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