@qwen-code/qwen-code 0.19.3-nightly.20260701.a974594d7 → 0.19.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/loop/loop-tick-resolver.test.ts +42 -0
- package/bundled/loop/loop-tick-resolver.ts +1 -1
- package/bundled/qc-helper/docs/configuration/auth.md +1 -1
- package/bundled/qc-helper/docs/configuration/settings.md +23 -11
- package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
- package/bundled/qc-helper/docs/features/auto-mode.md +40 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +81 -18
- package/bundled/qc-helper/docs/features/code-review.md +17 -61
- package/bundled/qc-helper/docs/features/commands.md +6 -6
- package/bundled/qc-helper/docs/features/mcp.md +3 -1
- package/bundled/qc-helper/docs/features/scheduled-tasks.md +10 -0
- package/bundled/qc-helper/docs/qwen-serve.md +19 -0
- package/bundled/review/DESIGN.md +21 -26
- package/bundled/review/SKILL.md +45 -129
- package/chunks/{MaxSizedBox-UZHJ73JB.js → MaxSizedBox-ERTNFI22.js} +20 -18
- package/chunks/{StandaloneSessionPicker-GGUIZWCE.js → StandaloneSessionPicker-Y5NGRLRY.js} +32 -29
- package/chunks/{acpAgent-QYZFICEZ.js → acpAgent-UMN6OYTR.js} +473 -187
- package/chunks/{agent-2EN7YNSW.js → agent-56DZU4ZU.js} +17 -15
- package/chunks/{agent-headless-SLTEZ5LV.js → agent-headless-SR7N2IJG.js} +17 -15
- package/chunks/{anthropicContentGenerator-CA3JTAMO.js → anthropicContentGenerator-5OZFO6WQ.js} +1 -1
- package/chunks/{artifact-tool-RM7WINJO.js → artifact-tool-JVZMHA4B.js} +1 -1
- package/chunks/{askUserQuestion-J3P6QAJ7.js → askUserQuestion-CMJZ2F3D.js} +1 -1
- package/chunks/{bridge-HZVAUTMX.js → bridge-AUHNFOUS.js} +23 -21
- package/chunks/channel-worker-supervisor-A74FV522.js +308 -0
- package/chunks/{chunk-N4V4VBP6.js → chunk-2X2JUE47.js} +2 -2
- package/chunks/{chunk-JV7A66DR.js → chunk-4VZH35PN.js} +528 -358
- package/chunks/{chunk-M2U5NM24.js → chunk-54YZOP7P.js} +309 -72
- package/chunks/{chunk-WGY3GIPP.js → chunk-6AQR7732.js} +1 -1
- package/chunks/{chunk-FR3II765.js → chunk-6CIIP6OE.js} +4 -4
- package/chunks/{chunk-IKO44NAT.js → chunk-6TLY5W3B.js} +2 -2
- package/chunks/{chunk-VN4CKYUW.js → chunk-73H73ASU.js} +1 -1
- package/chunks/{chunk-IBEM64M4.js → chunk-75X2VLSH.js} +36 -25
- package/chunks/{chunk-PLQTLKMR.js → chunk-7KPI4LAI.js} +3 -3
- package/chunks/{chunk-NVTRORSK.js → chunk-7VPC7D7O.js} +2 -2
- package/chunks/chunk-AHNXYU4O.js +24 -0
- package/chunks/{chunk-MTJVHQDP.js → chunk-B7KGXIPZ.js} +302 -257
- package/chunks/{chunk-35FH347N.js → chunk-BFG6OZN7.js} +16097 -16236
- package/chunks/{chunk-T44AF4I6.js → chunk-BNJLLAQ7.js} +1 -1
- package/chunks/{chunk-OEY3YAL2.js → chunk-BQNJBEUA.js} +2 -2
- package/chunks/{chunk-Q7TDHJ2G.js → chunk-C2IHHGBZ.js} +10 -10
- package/chunks/chunk-CG7SVARK.js +367 -0
- package/chunks/{chunk-7SP275SH.js → chunk-CS5XYDBO.js} +5 -5
- package/chunks/{chunk-V5YJAUHW.js → chunk-CUGEBAKG.js} +1 -1
- package/chunks/{chunk-FQDMX5IL.js → chunk-D5KISTLW.js} +309 -72
- package/chunks/{chunk-I4MXURND.js → chunk-DQ74W65K.js} +356 -468
- package/chunks/chunk-E5A7LHNN.js +51 -0
- package/chunks/{chunk-3PJXIDKI.js → chunk-E6US47KI.js} +3 -27
- package/chunks/chunk-EDAGQADF.js +21 -0
- package/chunks/{chunk-HUGAEYZR.js → chunk-FNLXLI4I.js} +2 -2
- package/chunks/{chunk-WJAY4WXR.js → chunk-FYKX6XOT.js} +1 -1
- package/chunks/{chunk-CA4ML3VH.js → chunk-G7OQ3RFJ.js} +1 -1
- package/chunks/{chunk-VHRREANT.js → chunk-GICCHL2Q.js} +3 -1
- package/chunks/{chunk-QHHNFG22.js → chunk-GLPV75ES.js} +1 -1
- package/chunks/{chunk-LD2XBG6Z.js → chunk-GO6LNQXT.js} +1 -39
- package/chunks/chunk-HI55Z6PR.js +3523 -0
- package/chunks/{chunk-B5MPZI4K.js → chunk-HJDF3ZVU.js} +2670 -1233
- package/chunks/{chunk-GDIG7TMG.js → chunk-HRZB5CSC.js} +1 -1
- package/chunks/{chunk-LDWTYE33.js → chunk-J3F7X3LW.js} +1 -1
- package/chunks/{chunk-FV4SQ54H.js → chunk-KVPFPC4J.js} +227 -85
- package/chunks/{chunk-Q3JOGB4U.js → chunk-L7QPM2YD.js} +1 -1
- package/chunks/{chunk-4722VFFU.js → chunk-L7VH7HQA.js} +6 -6
- package/chunks/{chunk-HWG4XLD7.js → chunk-LKWAVAB5.js} +1 -1
- package/chunks/{chunk-YCRTJYSQ.js → chunk-MEQWZGK5.js} +1 -1
- package/chunks/{chunk-6FIWYVN4.js → chunk-MKHC4BYZ.js} +30 -5
- package/chunks/{chunk-YCEHOJZJ.js → chunk-MNDTD5E5.js} +65 -38
- package/chunks/{chunk-ZGSV5ORL.js → chunk-MVZXZWGT.js} +809 -759
- package/chunks/chunk-MX2YXRER.js +44 -0
- package/chunks/{chunk-TMILTLP3.js → chunk-ND25GXEU.js} +21 -4
- package/chunks/{chunk-AIBPG5MB.js → chunk-OAFUMTWW.js} +2 -2
- package/chunks/chunk-OJCECIJA.js +238 -0
- package/chunks/{chunk-EUURTJY7.js → chunk-PIYV6COW.js} +1 -1
- package/chunks/{chunk-LXEW6BHF.js → chunk-Q7VHIRDD.js} +1 -1
- package/chunks/{chunk-DBR7PF4B.js → chunk-QAFQLTXG.js} +1 -1
- package/chunks/{chunk-3TK7FSCP.js → chunk-QMIND2AS.js} +3 -3
- package/chunks/{chunk-ESVSWG6Z.js → chunk-QOMAHFYI.js} +1 -1
- package/chunks/{chunk-J37FGIOA.js → chunk-QXPI7FEC.js} +38 -4
- package/chunks/chunk-RM3PGSGL.js +66 -0
- package/chunks/chunk-RNBYOUGV.js +42 -0
- package/chunks/chunk-S5EQPDTM.js +91 -0
- package/chunks/{chunk-GZKQ36JS.js → chunk-SFN4TEHY.js} +4 -4
- package/chunks/{chunk-DHXWNSJA.js → chunk-T22H4V4R.js} +42 -0
- package/chunks/{chunk-LXGWLOCM.js → chunk-TENOUWY2.js} +1 -1
- package/chunks/{chunk-BLAE2TCO.js → chunk-TTFNVEO5.js} +3 -3
- package/chunks/{chunk-FZY7NH37.js → chunk-UANCYOOQ.js} +1 -1
- package/chunks/{chunk-E5I6YSNO.js → chunk-UQFP2FEF.js} +1 -1
- package/chunks/{chunk-3O2BJMFW.js → chunk-UQYOMM6J.js} +4 -4
- package/chunks/{chunk-JERW36RG.js → chunk-UT5JU5DJ.js} +15 -15
- package/chunks/{chunk-DJ25MIU2.js → chunk-VKGG724L.js} +8 -8
- package/chunks/{chunk-G525INVW.js → chunk-W2ZOAX7F.js} +3 -3
- package/chunks/{chunk-HIYUAXBG.js → chunk-W6X4FGWX.js} +1 -1
- package/chunks/{chunk-OE5J6UA7.js → chunk-XCUFHOAD.js} +1 -1
- package/chunks/{chunk-KXVVXAAC.js → chunk-YBDZ63KI.js} +3 -3
- package/chunks/{chunk-Z34RYLRO.js → chunk-ZJP5T7IA.js} +1 -1
- package/chunks/{chunk-NOYV2NXI.js → chunk-ZXCVPMIK.js} +411 -43
- package/chunks/{computer-use-FCNWHVPW.js → computer-use-VWN5HH6A.js} +20 -18
- package/chunks/{contextCommand-FVFMZZEU.js → contextCommand-DFFG5KDJ.js} +19 -17
- package/chunks/{cron-create-IY5NMIHQ.js → cron-create-CSSWJ67I.js} +1 -1
- package/chunks/{cron-delete-OLNEQWKO.js → cron-delete-E56CFQ7A.js} +1 -1
- package/chunks/{cron-list-YAUAUV24.js → cron-list-BKSINY6Y.js} +1 -1
- package/chunks/daemon-5T6IHWJV.js +8430 -0
- package/chunks/{daemon-status-provider-42JEXENZ.js → daemon-status-provider-V5UY7O7J.js} +26 -24
- package/chunks/{dist-4FCNM6KJ.js → dist-2HDL5SHQ.js} +2 -2
- package/chunks/{dist-SU6L7ZNJ.js → dist-B7SSDVWT.js} +3 -3
- package/chunks/{dist-VD7HXTML.js → dist-BL3SL665.js} +1 -1
- package/chunks/{dist-UKPWQJCL.js → dist-TAVAGZU6.js} +37 -13
- package/chunks/{dist-K4XZILIO.js → dist-XBOVZ3R5.js} +26 -5
- package/chunks/{earlyInputCapture-FFFEC6P4.js → earlyInputCapture-VVYU4FDO.js} +17 -15
- package/chunks/{edit-32ILSGZY.js → edit-F35PTMBA.js} +17 -15
- package/chunks/{en-U3LWGSFX.js → en-FZREZFPO.js} +18 -0
- package/chunks/{enter-worktree-XWZKIN6A.js → enter-worktree-3DIW7EGJ.js} +17 -15
- package/chunks/{enterPlanMode-LPFFY7BJ.js → enterPlanMode-QNXT77KP.js} +27 -15
- package/chunks/{errors-UXBPYPI2.js → errors-M53YG76R.js} +19 -17
- package/chunks/{exit-worktree-IBS4UIU7.js → exit-worktree-BSDWNWHZ.js} +17 -15
- package/chunks/{exitPlanMode-JA72YHII.js → exitPlanMode-EL7AY327.js} +41 -23
- package/chunks/{fast-path-7UU67Y2W.js → fast-path-DUCSMUFW.js} +2 -2
- package/chunks/{gemini-GMVKJNMX.js → gemini-F3IERB37.js} +59 -51
- package/chunks/{geminiContentGenerator-7NIFF2L4.js → geminiContentGenerator-6OULAKFQ.js} +1 -1
- package/chunks/{glob-4NJCW5HI.js → glob-ZMLFTD4T.js} +17 -15
- package/chunks/{grep-PAIMLQEL.js → grep-H5X66EI7.js} +17 -15
- package/chunks/{initializer-R6KU4VYM.js → initializer-LEOT2OLH.js} +21 -19
- package/chunks/{list-H7LXAO64.js → list-M3DKXML6.js} +23 -21
- package/chunks/{loadedSettingsAdapter-H27JMTLU.js → loadedSettingsAdapter-OKMQFGGG.js} +21 -19
- package/chunks/{loop-wakeup-Y3OIRQFM.js → loop-wakeup-FPBAVVPR.js} +2 -2
- package/chunks/{ls-TVJEYS7O.js → ls-UGWQXPTY.js} +1 -1
- package/chunks/{lsp-JZSDVR3F.js → lsp-24WV7NXB.js} +1 -1
- package/chunks/{monitor-JSIHDPXP.js → monitor-ARL5P45R.js} +19 -16
- package/chunks/{nonInteractiveCli-Y4CHOETG.js → nonInteractiveCli-NUVLF3YR.js} +53 -45
- package/chunks/{notebook-edit-SHRNL2UM.js → notebook-edit-ANTZ2DDY.js} +17 -15
- package/chunks/{openaiContentGenerator-ORZZ7VFO.js → openaiContentGenerator-TFGMKGHN.js} +6 -6
- package/chunks/pidfile-AWTL4C63.js +72 -0
- package/chunks/{qwenContentGenerator-H643PL2G.js → qwenContentGenerator-6QWAYTWS.js} +18 -16
- package/chunks/{qwenOAuth2-OI2B7PES.js → qwenOAuth2-LWLA6MQG.js} +3 -3
- package/chunks/{read-file-5PRNPTTY.js → read-file-EJY73XQ3.js} +4 -4
- package/chunks/{read-mcp-resource-QTXGKTEV.js → read-mcp-resource-NCBTPP7X.js} +1 -1
- package/chunks/{ripGrep-JIKZMABJ.js → ripGrep-HC4SA6CQ.js} +17 -15
- package/chunks/{run-qwen-serve-PQV7QOHZ.js → run-qwen-serve-AGLZ642J.js} +291 -55
- package/chunks/{scheduler-OS3R5MGU.js → scheduler-TURO7NGY.js} +17 -15
- package/chunks/{send-message-DKGHWSTF.js → send-message-3S2NYS3O.js} +5 -3
- package/chunks/{serve-LVYZDKCZ.js → serve-5DAMOIDW.js} +22 -19
- package/chunks/{server-P4YIH35I.js → server-4AGEK2HC.js} +2268 -1222
- package/chunks/{session-DE4TZBKH.js → session-7ZOQUC4Y.js} +54 -46
- package/chunks/{settings-DFTYMJYF.js → settings-DR4V6L5Y.js} +20 -18
- package/chunks/{shell-3GNQLNV7.js → shell-H5WFKUXH.js} +17 -15
- package/chunks/{skill-NCNG4KKZ.js → skill-ANHU5ZCR.js} +4 -4
- package/chunks/{spawnChannel-DHRIMDVL.js → spawnChannel-VN5LJV7Z.js} +19 -17
- package/chunks/{src-PNZYGM3R.js → src-OVZLTVVM.js} +49 -17
- package/chunks/{startInteractiveUI-P6GZBFQW.js → startInteractiveUI-OA22V32P.js} +11110 -10670
- package/chunks/{syntheticOutput-X7L5HWLN.js → syntheticOutput-SV7GBHZ5.js} +2 -2
- package/chunks/{task-create-AWEUI4GI.js → task-create-W2H2UJCH.js} +6 -5
- package/chunks/{task-list-KZ3VJLDU.js → task-list-THBOPV4G.js} +5 -4
- package/chunks/{task-stop-GUNOZKJ5.js → task-stop-33FVCNCJ.js} +1 -1
- package/chunks/{task-update-Y56GP6DU.js → task-update-LVFQLXEI.js} +6 -5
- package/chunks/{team-create-6JMW3KQK.js → team-create-OYL5CAQO.js} +17 -15
- package/chunks/{team-delete-6AFRGDJY.js → team-delete-NTUQ25UY.js} +5 -4
- package/chunks/{theme-manager-FEHQO22G.js → theme-manager-XCMPF2SI.js} +17 -15
- package/chunks/{todoWrite-JRS6NOEU.js → todoWrite-SEPO2RI3.js} +1 -1
- package/chunks/{tool-search-IXAEKS7J.js → tool-search-YXW55X6Z.js} +29 -5
- package/chunks/{trustedFolders-SJRXNHZE.js → trustedFolders-TEPGM5YL.js} +18 -16
- package/chunks/{validateNonInterActiveAuth-HCH7OBDH.js → validateNonInterActiveAuth-OQIS7WUE.js} +50 -42
- package/chunks/{web-fetch-RELNL37A.js → web-fetch-OE7LHURA.js} +4 -4
- package/chunks/{workflow-M2COBI7R.js → workflow-RTUWORAP.js} +48 -27
- package/chunks/{workspace-providers-status-GOCWYDMK.js → workspace-providers-status-DM2XANVB.js} +23 -21
- package/chunks/{workspace-service-34C7SUBU.js → workspace-service-VKBI2KZD.js} +27 -25
- package/chunks/{write-file-E52WRXZL.js → write-file-WGALQ53L.js} +17 -15
- package/chunks/{zh-TW-LKLBTZHE.js → zh-TW-6GIKXEAN.js} +18 -0
- package/chunks/{zh-F5T4WWZO.js → zh-V3B4TFWL.js} +18 -0
- package/cli.js +6 -6
- package/locales/en.js +30 -0
- package/locales/fr.js +1 -2
- package/locales/ja.js +1 -2
- package/locales/zh-TW.js +29 -0
- package/locales/zh.js +29 -0
- package/node_modules/@qwen-code/audio-capture/package.json +1 -1
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
- package/package.json +3 -3
- package/web-shell/assets/{arc-C2DILvUl.js → arc-Det5Ccum.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-b8gZ2cNw.js → architectureDiagram-3BPJPVTR-DqNWVFpl.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-BuRpghMj.js → blockDiagram-GPEHLZMM-CYl7tYBi.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-2ItdhFmE.js → c4Diagram-AAUBKEIU-DaAEi0NQ.js} +1 -1
- package/web-shell/assets/channel-Bm0bFauD.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-B1QXa0q3.js → chunk-2J33WTMH-Df2CDEE2.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-DXfhKlNq.js → chunk-4BX2VUAB-DNBFcyL2.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-ClSNjxLo.js → chunk-55IACEB6-BKjF-0HI.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-Dsh2wisB.js → chunk-727SXJPM-DYwAwfIM.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-C1TkY5AR.js → chunk-AQP2D5EJ-C6FswLqy.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CGtN9XR6.js → chunk-FMBD7UC4-DRWAcZSY.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BHiPi1SS.js → chunk-ND2GUHAM-AoL16mNR.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-CzG3I5o1.js → chunk-QZHKN3VN-a8PtLMck.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK--NgUfb55.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2--NgUfb55.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-EgrIoH_K.js → cose-bilkent-S5V4N54A-C4Aeu5qf.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-BUnpdX8S.js → dagre-BM42HDAG-BOulamjo.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BlLUCVYu.js → diagram-2AECGRRQ-D1wt2ykO.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-FG-enmjQ.js → diagram-5GNKFQAL-BRseus-O.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-BlzmTONk.js → diagram-KO2AKTUF-XSMkNzpZ.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-CoBQ8mIx.js → diagram-LMA3HP47-21KNLqoi.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-DvxV6sX8.js → diagram-OG6HWLK6-DnUI8F5G.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-Jq1tpAoj.js → erDiagram-TEJ5UH35-BVSOMuM2.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-CbtYOry5.js → flowDiagram-I6XJVG4X-fYtDPJsW.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-ZEn2VEKR.js → ganttDiagram-6RSMTGT7-CmRXosW_.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BZh-LkhJ.js → gitGraphDiagram-PVQCEYII-DPrmySxO.js} +1 -1
- package/web-shell/assets/index-BpKnmyFV.js +717 -0
- package/web-shell/assets/index-fLrtxpOG.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-B9HuZygK.js → infoDiagram-5YYISTIA-x3VbEuCV.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D76cNpYG.js → ishikawaDiagram-YF4QCWOH-SmitHRMC.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-6bGo7P1t.js → journeyDiagram-JHISSGLW-BxvA551S.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DuYyRBvB.js → kanban-definition-UN3LZRKU-DNHC16jY.js} +1 -1
- package/web-shell/assets/{linear-CpdSW1BC.js → linear-CQ6irBL9.js} +1 -1
- package/web-shell/assets/{mermaid.core-s5xbZMMj.js → mermaid.core-DtB6NO1e.js} +72 -72
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-go01fZ2y.js → mindmap-definition-RKZ34NQL-QKMAgV2v.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-BfuZiEHO.js → pieDiagram-4H26LBE5-bvb6dGn6.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DsoINqV6.js → quadrantDiagram-W4KKPZXB-DLgdlG4D.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-B7FU4LiU.js → requirementDiagram-4Y6WPE33-2M9YH4GF.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BEDjFnGB.js → sankeyDiagram-5OEKKPKP-DzwfclTH.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-gzmmL5tK.js → sequenceDiagram-3UESZ5HK-BvPmTuy2.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-BtHD4IN_.js → stateDiagram-AJRCARHV-BjwUmrJF.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C4L8zXeL.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-T_8gmMCf.js → timeline-definition-PNZ67QCA-CXzS6qqz.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DdjuqnjO.js → vennDiagram-CIIHVFJN-yRSolF5B.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-Cgtrvb37.js → wardley-L42UT6IY-ClLJjHPG.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BW3f3-yW.js → wardleyDiagram-YWT4CUSO-VIa6t2p2.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-BUS9IKkc.js → xychartDiagram-2RQKCTM6-CtmrkezW.js} +1 -1
- package/web-shell/index.html +18 -2
- package/chunks/chunk-2JKEQWDZ.js +0 -1596
- package/chunks/chunk-32MCHZQC.js +0 -73
- package/chunks/chunk-UAKXW3DN.js +0 -30
- package/web-shell/assets/channel-eRvn2UA3.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-YZNwy1rx.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-YZNwy1rx.js +0 -1
- package/web-shell/assets/index-5FhE0ORO.css +0 -5
- package/web-shell/assets/index-CDTGmqVm.js +0 -720
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DFy6gLDd.js +0 -1
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
MID_TURN_QUEUE_DRAIN_METHOD
|
|
5
|
+
} from "./chunk-EWALXUAD.js";
|
|
6
|
+
import {
|
|
7
|
+
DEFAULT_RING_SIZE,
|
|
8
|
+
EVENT_SCHEMA_VERSION,
|
|
9
|
+
EventBus
|
|
10
|
+
} from "./chunk-ALX6BUYW.js";
|
|
11
|
+
import {
|
|
12
|
+
defaultSpawnChannelFactory
|
|
13
|
+
} from "./chunk-YBDZ63KI.js";
|
|
3
14
|
import {
|
|
4
15
|
MCP_RESTART_SERVER_DEADLINE_MS
|
|
5
16
|
} from "./chunk-P7M4GA57.js";
|
|
@@ -22,26 +33,10 @@ import {
|
|
|
22
33
|
SessionShellDisabledError,
|
|
23
34
|
WorkspaceMismatchError,
|
|
24
35
|
isNotCurrentlyGeneratingCancelError
|
|
25
|
-
} from "./chunk-
|
|
26
|
-
import {
|
|
27
|
-
MID_TURN_QUEUE_DRAIN_METHOD
|
|
28
|
-
} from "./chunk-EWALXUAD.js";
|
|
36
|
+
} from "./chunk-T22H4V4R.js";
|
|
29
37
|
import {
|
|
30
38
|
canonicalizeWorkspace
|
|
31
39
|
} from "./chunk-SEZC2725.js";
|
|
32
|
-
import {
|
|
33
|
-
DEFAULT_RING_SIZE,
|
|
34
|
-
EVENT_SCHEMA_VERSION,
|
|
35
|
-
EventBus
|
|
36
|
-
} from "./chunk-ALX6BUYW.js";
|
|
37
|
-
import {
|
|
38
|
-
defaultSpawnChannelFactory
|
|
39
|
-
} from "./chunk-KXVVXAAC.js";
|
|
40
|
-
import {
|
|
41
|
-
ClientSideConnection,
|
|
42
|
-
PROTOCOL_VERSION,
|
|
43
|
-
RequestError
|
|
44
|
-
} from "./chunk-UFC57OYT.js";
|
|
45
40
|
import {
|
|
46
41
|
BridgeChannelClosedError,
|
|
47
42
|
BridgeTimeoutError,
|
|
@@ -50,15 +45,20 @@ import {
|
|
|
50
45
|
STATUS_SCHEMA_VERSION,
|
|
51
46
|
createIdleWorkspaceExtensionsStatus,
|
|
52
47
|
createIdleWorkspaceHooksStatus
|
|
53
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-GICCHL2Q.js";
|
|
49
|
+
import {
|
|
50
|
+
ClientSideConnection,
|
|
51
|
+
PROTOCOL_VERSION,
|
|
52
|
+
RequestError
|
|
53
|
+
} from "./chunk-UFC57OYT.js";
|
|
54
54
|
import {
|
|
55
55
|
ShellExecutionService,
|
|
56
56
|
TrustGateError
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-BFG6OZN7.js";
|
|
58
58
|
import {
|
|
59
59
|
DAEMON_TRACEPARENT_META_KEY,
|
|
60
60
|
DAEMON_TRACESTATE_META_KEY
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-HJDF3ZVU.js";
|
|
62
62
|
import {
|
|
63
63
|
init_esbuild_shims
|
|
64
64
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -1909,6 +1909,24 @@ function extractPermissionResponseMetadata(response) {
|
|
|
1909
1909
|
return void 0;
|
|
1910
1910
|
}
|
|
1911
1911
|
__name(extractPermissionResponseMetadata, "extractPermissionResponseMetadata");
|
|
1912
|
+
function parseWorkspaceMemoryRememberResult(response) {
|
|
1913
|
+
if (response === null || typeof response !== "object" || Array.isArray(response)) {
|
|
1914
|
+
throw new Error("Malformed workspace memory remember response");
|
|
1915
|
+
}
|
|
1916
|
+
const record = response;
|
|
1917
|
+
const summary = record["summary"];
|
|
1918
|
+
const filesTouched = record["filesTouched"];
|
|
1919
|
+
const touchedScopes = record["touchedScopes"];
|
|
1920
|
+
if (summary !== void 0 && typeof summary !== "string" || !Array.isArray(filesTouched) || !filesTouched.every((file) => typeof file === "string") || !Array.isArray(touchedScopes) || !touchedScopes.every((scope) => scope === "user" || scope === "project")) {
|
|
1921
|
+
throw new Error("Malformed workspace memory remember response");
|
|
1922
|
+
}
|
|
1923
|
+
return {
|
|
1924
|
+
...summary === void 0 ? {} : { summary },
|
|
1925
|
+
filesTouched,
|
|
1926
|
+
touchedScopes
|
|
1927
|
+
};
|
|
1928
|
+
}
|
|
1929
|
+
__name(parseWorkspaceMemoryRememberResult, "parseWorkspaceMemoryRememberResult");
|
|
1912
1930
|
function echoPromptToSessionBus(entry, req, originatorClientId) {
|
|
1913
1931
|
const prompt = req.prompt;
|
|
1914
1932
|
if (!Array.isArray(prompt) || prompt.length === 0) return;
|
|
@@ -2059,6 +2077,7 @@ __name(extractPromptText, "extractPromptText");
|
|
|
2059
2077
|
var DEFAULT_INIT_TIMEOUT_MS = 1e4;
|
|
2060
2078
|
var PERSIST_TIMEOUT_MS = 5e3;
|
|
2061
2079
|
var MCP_RESTART_TIMEOUT_MS = 3e5;
|
|
2080
|
+
var WORKSPACE_MEMORY_REMEMBER_TIMEOUT_MS = 3e5;
|
|
2062
2081
|
var MCP_OAUTH_TIMEOUT_MS = 6e5;
|
|
2063
2082
|
var DAEMON_RETRY_META_KEY = "qwen.daemon.retry";
|
|
2064
2083
|
var DAEMON_CONTINUE_META_KEY = "qwen.daemon.continueLastTurn";
|
|
@@ -2194,7 +2213,7 @@ function createAcpSessionBridge(opts) {
|
|
|
2194
2213
|
cancelIdleTimer();
|
|
2195
2214
|
idleTimer = setTimeout(() => {
|
|
2196
2215
|
idleTimer = void 0;
|
|
2197
|
-
if (ci
|
|
2216
|
+
if (hasNoChannelWork(ci)) {
|
|
2198
2217
|
writeStderrLine(
|
|
2199
2218
|
`qwen serve: idle timeout (${timeoutMs}ms) expired, killing channel`
|
|
2200
2219
|
);
|
|
@@ -2204,6 +2223,33 @@ function createAcpSessionBridge(opts) {
|
|
|
2204
2223
|
idleTimer.unref();
|
|
2205
2224
|
}
|
|
2206
2225
|
__name(startIdleTimer, "startIdleTimer");
|
|
2226
|
+
function hasNoChannelWork(ci, opts2) {
|
|
2227
|
+
const inFlightSpawnCount = ci.sessionSpawnsInFlight - (opts2?.ignoreCurrentSessionSpawn === true ? 1 : 0);
|
|
2228
|
+
const pendingRestoreCount = ci.pendingRestoreIds.size - (opts2?.ignoreRestoreId !== void 0 && ci.pendingRestoreIds.has(opts2.ignoreRestoreId) ? 1 : 0);
|
|
2229
|
+
return ci.sessionIds.size === 0 && pendingRestoreCount === 0 && ci.workspaceControlInFlight === 0 && inFlightSpawnCount === 0;
|
|
2230
|
+
}
|
|
2231
|
+
__name(hasNoChannelWork, "hasNoChannelWork");
|
|
2232
|
+
async function reapPendingEmptyChannel(ci) {
|
|
2233
|
+
if (!ci.emptyReapPending || !hasNoChannelWork(ci)) return;
|
|
2234
|
+
ci.emptyReapPending = false;
|
|
2235
|
+
ci.isDying = true;
|
|
2236
|
+
await ci.channel.kill().catch(() => {
|
|
2237
|
+
});
|
|
2238
|
+
}
|
|
2239
|
+
__name(reapPendingEmptyChannel, "reapPendingEmptyChannel");
|
|
2240
|
+
async function withWorkspaceControl(ci, fn) {
|
|
2241
|
+
ci.workspaceControlInFlight++;
|
|
2242
|
+
try {
|
|
2243
|
+
return await fn();
|
|
2244
|
+
} finally {
|
|
2245
|
+
ci.workspaceControlInFlight = Math.max(
|
|
2246
|
+
0,
|
|
2247
|
+
ci.workspaceControlInFlight - 1
|
|
2248
|
+
);
|
|
2249
|
+
await reapPendingEmptyChannel(ci);
|
|
2250
|
+
}
|
|
2251
|
+
}
|
|
2252
|
+
__name(withWorkspaceControl, "withWorkspaceControl");
|
|
2207
2253
|
function startSessionReaper() {
|
|
2208
2254
|
if (sessionReapIntervalMs <= 0 || sessionIdleTimeoutMs <= 0) {
|
|
2209
2255
|
writeStderrLine("qwen serve: session reaper disabled");
|
|
@@ -2390,6 +2436,9 @@ function createAcpSessionBridge(opts) {
|
|
|
2390
2436
|
client,
|
|
2391
2437
|
sessionIds: /* @__PURE__ */ new Set(),
|
|
2392
2438
|
pendingRestoreIds: /* @__PURE__ */ new Set(),
|
|
2439
|
+
sessionSpawnsInFlight: 0,
|
|
2440
|
+
workspaceControlInFlight: 0,
|
|
2441
|
+
emptyReapPending: false,
|
|
2393
2442
|
isDying: false,
|
|
2394
2443
|
handshakeComplete: false
|
|
2395
2444
|
};
|
|
@@ -2493,63 +2542,75 @@ function createAcpSessionBridge(opts) {
|
|
|
2493
2542
|
__name(ensureChannel, "ensureChannel");
|
|
2494
2543
|
async function doSpawn(modelServiceId, effectiveScope, requestedClientId) {
|
|
2495
2544
|
const ci = await ensureChannel();
|
|
2545
|
+
ci.sessionSpawnsInFlight++;
|
|
2546
|
+
let sessionRegistered = false;
|
|
2496
2547
|
let newSessionResp;
|
|
2497
2548
|
try {
|
|
2498
|
-
|
|
2499
|
-
|
|
2500
|
-
|
|
2501
|
-
|
|
2502
|
-
|
|
2503
|
-
|
|
2504
|
-
|
|
2505
|
-
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2511
|
-
|
|
2549
|
+
try {
|
|
2550
|
+
newSessionResp = await telemetry.withSpan(
|
|
2551
|
+
"session.new",
|
|
2552
|
+
{
|
|
2553
|
+
"qwen-code.daemon.bridge.operation": "session.new",
|
|
2554
|
+
"qwen-code.daemon.session_scope": effectiveScope
|
|
2555
|
+
},
|
|
2556
|
+
async () => await withTimeout(
|
|
2557
|
+
ci.connection.newSession({
|
|
2558
|
+
cwd: boundWorkspace,
|
|
2559
|
+
mcpServers: []
|
|
2560
|
+
}),
|
|
2561
|
+
initTimeoutMs,
|
|
2562
|
+
"newSession"
|
|
2563
|
+
)
|
|
2564
|
+
);
|
|
2565
|
+
} catch (err) {
|
|
2566
|
+
if (hasNoChannelWork(ci, { ignoreCurrentSessionSpawn: true })) {
|
|
2567
|
+
ci.isDying = true;
|
|
2568
|
+
await ci.channel.kill().catch(() => {
|
|
2569
|
+
});
|
|
2570
|
+
} else {
|
|
2571
|
+
ci.emptyReapPending = true;
|
|
2572
|
+
}
|
|
2573
|
+
throw err;
|
|
2574
|
+
}
|
|
2575
|
+
if (shuttingDown) {
|
|
2576
|
+
throw new Error("AcpSessionBridge is shutting down");
|
|
2577
|
+
}
|
|
2578
|
+
const entry = createSessionEntry(
|
|
2579
|
+
ci,
|
|
2580
|
+
newSessionResp.sessionId,
|
|
2581
|
+
boundWorkspace
|
|
2512
2582
|
);
|
|
2513
|
-
|
|
2514
|
-
|
|
2515
|
-
|
|
2516
|
-
|
|
2583
|
+
sessionRegistered = true;
|
|
2584
|
+
seedSnapshotCaches(entry, newSessionResp);
|
|
2585
|
+
const clientId = registerClient(entry, requestedClientId);
|
|
2586
|
+
if (effectiveScope === "single" && !defaultEntry) defaultEntry = entry;
|
|
2587
|
+
if (modelServiceId) {
|
|
2588
|
+
await applyModelServiceId(
|
|
2589
|
+
entry,
|
|
2590
|
+
modelServiceId,
|
|
2591
|
+
initTimeoutMs,
|
|
2592
|
+
clientId
|
|
2593
|
+
).catch(() => {
|
|
2517
2594
|
});
|
|
2518
2595
|
}
|
|
2519
|
-
|
|
2520
|
-
|
|
2521
|
-
|
|
2522
|
-
|
|
2523
|
-
|
|
2524
|
-
|
|
2525
|
-
|
|
2526
|
-
|
|
2527
|
-
|
|
2528
|
-
|
|
2529
|
-
|
|
2530
|
-
|
|
2531
|
-
|
|
2532
|
-
|
|
2533
|
-
|
|
2534
|
-
|
|
2535
|
-
|
|
2536
|
-
initTimeoutMs,
|
|
2537
|
-
clientId
|
|
2538
|
-
).catch(() => {
|
|
2539
|
-
});
|
|
2540
|
-
}
|
|
2541
|
-
if (!byId.has(entry.sessionId)) {
|
|
2542
|
-
throw new Error(
|
|
2543
|
-
`Session ${entry.sessionId} died during model-switch initialization`
|
|
2544
|
-
);
|
|
2596
|
+
if (!byId.has(entry.sessionId)) {
|
|
2597
|
+
throw new Error(
|
|
2598
|
+
`Session ${entry.sessionId} died during model-switch initialization`
|
|
2599
|
+
);
|
|
2600
|
+
}
|
|
2601
|
+
return {
|
|
2602
|
+
sessionId: entry.sessionId,
|
|
2603
|
+
workspaceCwd: entry.workspaceCwd,
|
|
2604
|
+
attached: false,
|
|
2605
|
+
clientId,
|
|
2606
|
+
createdAt: entry.createdAt
|
|
2607
|
+
};
|
|
2608
|
+
} finally {
|
|
2609
|
+
ci.sessionSpawnsInFlight = Math.max(0, ci.sessionSpawnsInFlight - 1);
|
|
2610
|
+
if (!sessionRegistered) {
|
|
2611
|
+
await reapPendingEmptyChannel(ci);
|
|
2612
|
+
}
|
|
2545
2613
|
}
|
|
2546
|
-
return {
|
|
2547
|
-
sessionId: entry.sessionId,
|
|
2548
|
-
workspaceCwd: entry.workspaceCwd,
|
|
2549
|
-
attached: false,
|
|
2550
|
-
clientId,
|
|
2551
|
-
createdAt: entry.createdAt
|
|
2552
|
-
};
|
|
2553
2614
|
}
|
|
2554
2615
|
__name(doSpawn, "doSpawn");
|
|
2555
2616
|
async function applyModelServiceId(entry, modelId, timeoutMs, originatorClientId) {
|
|
@@ -2688,13 +2749,24 @@ function createAcpSessionBridge(opts) {
|
|
|
2688
2749
|
]);
|
|
2689
2750
|
return response;
|
|
2690
2751
|
}, "requestSessionStatus");
|
|
2691
|
-
const notifyAgentSessionClose = /* @__PURE__ */ __name(async (entry, ci, label) => {
|
|
2692
|
-
if (!ci || ci.channel !== entry.channel)
|
|
2752
|
+
const notifyAgentSessionClose = /* @__PURE__ */ __name(async (entry, ci, label, opts2) => {
|
|
2753
|
+
if (!ci || ci.channel !== entry.channel) {
|
|
2754
|
+
if (opts2?.throwOnFailure === true) {
|
|
2755
|
+
writeStderrLine(
|
|
2756
|
+
`qwen serve: ${label} ACP session close channel unavailable for session ${JSON.stringify(entry.sessionId)}; agent close skipped`
|
|
2757
|
+
);
|
|
2758
|
+
throw new Error(
|
|
2759
|
+
`ACP session close channel unavailable for ${entry.sessionId}`
|
|
2760
|
+
);
|
|
2761
|
+
}
|
|
2762
|
+
return;
|
|
2763
|
+
}
|
|
2693
2764
|
try {
|
|
2694
2765
|
await Promise.race([
|
|
2695
2766
|
withTimeout(
|
|
2696
2767
|
entry.connection.extMethod(SERVE_CONTROL_EXT_METHODS.sessionClose, {
|
|
2697
|
-
sessionId: entry.sessionId
|
|
2768
|
+
sessionId: entry.sessionId,
|
|
2769
|
+
...opts2?.requireFlush === true ? { requireFlush: true } : {}
|
|
2698
2770
|
}),
|
|
2699
2771
|
initTimeoutMs,
|
|
2700
2772
|
SERVE_CONTROL_EXT_METHODS.sessionClose
|
|
@@ -2707,6 +2779,9 @@ function createAcpSessionBridge(opts) {
|
|
|
2707
2779
|
err instanceof Error ? err.message : err
|
|
2708
2780
|
)}`
|
|
2709
2781
|
);
|
|
2782
|
+
if (opts2?.throwOnFailure === true) {
|
|
2783
|
+
throw err;
|
|
2784
|
+
}
|
|
2710
2785
|
}
|
|
2711
2786
|
}, "notifyAgentSessionClose");
|
|
2712
2787
|
const broadcastWorkspaceEvent = /* @__PURE__ */ __name((envelope, skipSessionId) => {
|
|
@@ -3009,10 +3084,11 @@ function createAcpSessionBridge(opts) {
|
|
|
3009
3084
|
if (isAcpSessionResourceNotFound(err, req.sessionId)) {
|
|
3010
3085
|
throw new SessionNotFoundError(req.sessionId);
|
|
3011
3086
|
}
|
|
3012
|
-
|
|
3087
|
+
ci.emptyReapPending = hasNoChannelWork(ci, {
|
|
3088
|
+
ignoreRestoreId: req.sessionId
|
|
3089
|
+
});
|
|
3090
|
+
if (ci.emptyReapPending) {
|
|
3013
3091
|
ci.isDying = true;
|
|
3014
|
-
await ci.channel.kill().catch(() => {
|
|
3015
|
-
});
|
|
3016
3092
|
}
|
|
3017
3093
|
throw err;
|
|
3018
3094
|
}
|
|
@@ -3063,7 +3139,7 @@ function createAcpSessionBridge(opts) {
|
|
|
3063
3139
|
hasActivePrompt: entry.promptActive,
|
|
3064
3140
|
...replayFieldsFor(entry, action)
|
|
3065
3141
|
};
|
|
3066
|
-
})().finally(() => {
|
|
3142
|
+
})().finally(async () => {
|
|
3067
3143
|
ci?.pendingRestoreIds.delete(req.sessionId);
|
|
3068
3144
|
ci?.client.clearRestoreInFlight(req.sessionId);
|
|
3069
3145
|
pendingRestoreEvents.delete(req.sessionId);
|
|
@@ -3071,6 +3147,9 @@ function createAcpSessionBridge(opts) {
|
|
|
3071
3147
|
restoreEvents.close();
|
|
3072
3148
|
ci?.client.markSessionClosed(req.sessionId);
|
|
3073
3149
|
}
|
|
3150
|
+
if (ci) {
|
|
3151
|
+
await reapPendingEmptyChannel(ci);
|
|
3152
|
+
}
|
|
3074
3153
|
});
|
|
3075
3154
|
inFlightRestores.set(req.sessionId, { action, promise, coalesceState });
|
|
3076
3155
|
try {
|
|
@@ -3103,6 +3182,13 @@ function createAcpSessionBridge(opts) {
|
|
|
3103
3182
|
`qwen serve: closeSession channelInfoForEntry returned undefined for session ${JSON.stringify(sessionId)} \u2014 channel cleanup skipped (entry's channel already torn down)`
|
|
3104
3183
|
);
|
|
3105
3184
|
}
|
|
3185
|
+
const requireAgentClose = closeOpts?.requireAgentClose === true;
|
|
3186
|
+
if (requireAgentClose) {
|
|
3187
|
+
await notifyAgentSessionClose(entry, ci, "closeSession", {
|
|
3188
|
+
throwOnFailure: true,
|
|
3189
|
+
requireFlush: true
|
|
3190
|
+
});
|
|
3191
|
+
}
|
|
3106
3192
|
if (ci && ci.channel === entry.channel) {
|
|
3107
3193
|
ci.sessionIds.delete(sessionId);
|
|
3108
3194
|
}
|
|
@@ -3133,7 +3219,9 @@ function createAcpSessionBridge(opts) {
|
|
|
3133
3219
|
} catch {
|
|
3134
3220
|
}
|
|
3135
3221
|
entry.events.close();
|
|
3136
|
-
|
|
3222
|
+
if (!requireAgentClose) {
|
|
3223
|
+
await notifyAgentSessionClose(entry, ci, "closeSession");
|
|
3224
|
+
}
|
|
3137
3225
|
try {
|
|
3138
3226
|
await telemetry.withSpan(
|
|
3139
3227
|
"session.close.cancel_active_prompt",
|
|
@@ -3145,8 +3233,11 @@ function createAcpSessionBridge(opts) {
|
|
|
3145
3233
|
);
|
|
3146
3234
|
} catch {
|
|
3147
3235
|
}
|
|
3148
|
-
if (ci && ci
|
|
3149
|
-
await
|
|
3236
|
+
if (ci && hasNoChannelWork(ci)) {
|
|
3237
|
+
await reapPendingEmptyChannel(ci);
|
|
3238
|
+
if (!ci.isDying) {
|
|
3239
|
+
await startIdleTimer(ci, `closeSession "${sessionId}"`);
|
|
3240
|
+
}
|
|
3150
3241
|
}
|
|
3151
3242
|
}
|
|
3152
3243
|
__name(closeSessionImpl, "closeSessionImpl");
|
|
@@ -4003,6 +4094,54 @@ function createAcpSessionBridge(opts) {
|
|
|
4003
4094
|
);
|
|
4004
4095
|
return response;
|
|
4005
4096
|
},
|
|
4097
|
+
async isWorkspaceMemoryRememberAvailable() {
|
|
4098
|
+
const info = await ensureChannel();
|
|
4099
|
+
try {
|
|
4100
|
+
const response = await withWorkspaceControl(
|
|
4101
|
+
info,
|
|
4102
|
+
() => withTimeout(
|
|
4103
|
+
Promise.race([
|
|
4104
|
+
info.connection.extMethod(
|
|
4105
|
+
SERVE_CONTROL_EXT_METHODS.workspaceMemoryRememberAvailability,
|
|
4106
|
+
{ cwd: boundWorkspace }
|
|
4107
|
+
),
|
|
4108
|
+
getChannelClosedReject(info)
|
|
4109
|
+
]),
|
|
4110
|
+
initTimeoutMs,
|
|
4111
|
+
SERVE_CONTROL_EXT_METHODS.workspaceMemoryRememberAvailability
|
|
4112
|
+
)
|
|
4113
|
+
);
|
|
4114
|
+
return response !== null && typeof response === "object" && response["available"] === true;
|
|
4115
|
+
} finally {
|
|
4116
|
+
if (hasNoChannelWork(info)) {
|
|
4117
|
+
await startIdleTimer(info, "workspace memory remember availability");
|
|
4118
|
+
}
|
|
4119
|
+
}
|
|
4120
|
+
},
|
|
4121
|
+
async runWorkspaceMemoryRemember(request) {
|
|
4122
|
+
const info = await ensureChannel();
|
|
4123
|
+
try {
|
|
4124
|
+
const response = await withWorkspaceControl(
|
|
4125
|
+
info,
|
|
4126
|
+
() => withTimeout(
|
|
4127
|
+
Promise.race([
|
|
4128
|
+
info.connection.extMethod(
|
|
4129
|
+
SERVE_CONTROL_EXT_METHODS.workspaceMemoryRemember,
|
|
4130
|
+
{ ...request, cwd: boundWorkspace }
|
|
4131
|
+
),
|
|
4132
|
+
getChannelClosedReject(info)
|
|
4133
|
+
]),
|
|
4134
|
+
WORKSPACE_MEMORY_REMEMBER_TIMEOUT_MS,
|
|
4135
|
+
SERVE_CONTROL_EXT_METHODS.workspaceMemoryRemember
|
|
4136
|
+
)
|
|
4137
|
+
);
|
|
4138
|
+
return parseWorkspaceMemoryRememberResult(response);
|
|
4139
|
+
} finally {
|
|
4140
|
+
if (hasNoChannelWork(info)) {
|
|
4141
|
+
await startIdleTimer(info, "workspace memory remember");
|
|
4142
|
+
}
|
|
4143
|
+
}
|
|
4144
|
+
},
|
|
4006
4145
|
async getWorkspaceMcpToolsStatus(serverName) {
|
|
4007
4146
|
return requestWorkspaceStatus(
|
|
4008
4147
|
SERVE_STATUS_EXT_METHODS.workspaceMcpTools,
|
|
@@ -4961,8 +5100,11 @@ function createAcpSessionBridge(opts) {
|
|
|
4961
5100
|
} catch {
|
|
4962
5101
|
}
|
|
4963
5102
|
entry.events.close();
|
|
4964
|
-
if (ci && ci
|
|
4965
|
-
await
|
|
5103
|
+
if (ci && hasNoChannelWork(ci)) {
|
|
5104
|
+
await reapPendingEmptyChannel(ci);
|
|
5105
|
+
if (!ci.isDying) {
|
|
5106
|
+
await startIdleTimer(ci, `killSession "${sessionId}"`);
|
|
5107
|
+
}
|
|
4966
5108
|
}
|
|
4967
5109
|
},
|
|
4968
5110
|
async detachClient(sessionId, clientId) {
|
|
@@ -5049,7 +5191,7 @@ function createAcpSessionBridge(opts) {
|
|
|
5049
5191
|
if (shuttingDown) return;
|
|
5050
5192
|
const ci = await ensureChannel();
|
|
5051
5193
|
const idleMs = resolvedChannelIdleTimeoutMs();
|
|
5052
|
-
if (idleMs > 0 && ci
|
|
5194
|
+
if (idleMs > 0 && hasNoChannelWork(ci)) {
|
|
5053
5195
|
await startIdleTimer(ci);
|
|
5054
5196
|
}
|
|
5055
5197
|
}
|
|
@@ -6,17 +6,17 @@ import {
|
|
|
6
6
|
parseAcpBaseModelId,
|
|
7
7
|
resolveCliGenerationConfig,
|
|
8
8
|
sanitizeProviderBaseUrl
|
|
9
|
-
} from "./chunk-
|
|
10
|
-
import {
|
|
11
|
-
loadSettings
|
|
12
|
-
} from "./chunk-6FIWYVN4.js";
|
|
9
|
+
} from "./chunk-BQNJBEUA.js";
|
|
13
10
|
import {
|
|
14
11
|
STATUS_SCHEMA_VERSION
|
|
15
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-GICCHL2Q.js";
|
|
13
|
+
import {
|
|
14
|
+
loadSettings
|
|
15
|
+
} from "./chunk-MKHC4BYZ.js";
|
|
16
16
|
import {
|
|
17
17
|
ModelsConfig,
|
|
18
18
|
resolveProviderProtocol
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-BFG6OZN7.js";
|
|
20
20
|
import {
|
|
21
21
|
tokenLimit
|
|
22
22
|
} from "./chunk-YTFBURQD.js";
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
getLanguageNameFromLocale,
|
|
7
7
|
getLanguageSettingsOptions,
|
|
8
8
|
t
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-UQYOMM6J.js";
|
|
10
10
|
import {
|
|
11
11
|
DEFAULT_DARK_THEME_NAME,
|
|
12
12
|
DEFAULT_LIGHT_THEME_NAME
|
|
@@ -29,7 +29,7 @@ import {
|
|
|
29
29
|
import {
|
|
30
30
|
isWorkspaceTrusted,
|
|
31
31
|
updateSettingsFilePreservingFormat
|
|
32
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-ZJP5T7IA.js";
|
|
33
33
|
import {
|
|
34
34
|
require_strip_json_comments
|
|
35
35
|
} from "./chunk-QYUE6W3T.js";
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
|
|
41
41
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
|
|
42
42
|
stripRuntimeSnapshotPrefix
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-BFG6OZN7.js";
|
|
44
44
|
import {
|
|
45
45
|
require_main
|
|
46
46
|
} from "./chunk-SKAZWEV5.js";
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
import {
|
|
51
51
|
DEFAULT_SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH,
|
|
52
52
|
SENSITIVE_SPAN_ATTRIBUTE_MAX_LENGTH_LIMIT
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-HJDF3ZVU.js";
|
|
54
54
|
import {
|
|
55
55
|
FatalConfigError,
|
|
56
56
|
QWEN_DIR,
|
|
@@ -857,7 +857,7 @@ var SETTINGS_SCHEMA = {
|
|
|
857
857
|
category: "UI",
|
|
858
858
|
requiresRestart: false,
|
|
859
859
|
default: false,
|
|
860
|
-
description: "Render conversation history in an in-app scrollable viewport instead of the terminal scrollback buffer. Recommended if you see flicker, scroll-storm, or interface freeze on long sessions, after Ctrl+O, after Ctrl+E / Ctrl+F (expand), after window resize, or when alt-tabbing back. Scroll with Shift+\u2191/\u2193 (line), PgUp/PgDn (page), Ctrl+Home/End (top/bottom), or the mouse wheel. Does NOT use the host terminal scrollback while enabled; for native text selection, hold Shift (or Option on macOS) while dragging.",
|
|
860
|
+
description: "Render conversation history in an in-app scrollable viewport instead of the terminal scrollback buffer. Recommended if you see flicker, scroll-storm, or interface freeze on long sessions, after Ctrl+O, after Ctrl+E / Ctrl+F (expand), after window resize, or when alt-tabbing back. Scroll with Shift+\u2191/\u2193 (line), PgUp/PgDn (page), Ctrl+Home/End (top/bottom), or the mouse wheel. Also enables mouse interactions: click an option in a menu/dialog to select it, hover to highlight it, and click in the prompt to position the cursor. Does NOT use the host terminal scrollback while enabled; for native text selection, hold Shift (or Option on macOS) while dragging.",
|
|
861
861
|
showInDialog: true
|
|
862
862
|
},
|
|
863
863
|
shellOutputMaxLines: {
|
|
@@ -1773,6 +1773,15 @@ var SETTINGS_SCHEMA = {
|
|
|
1773
1773
|
description: "Environment / context lines injected into the classifier system prompt.",
|
|
1774
1774
|
showInDialog: false,
|
|
1775
1775
|
mergeStrategy: "union" /* UNION */
|
|
1776
|
+
},
|
|
1777
|
+
classifyAllShell: {
|
|
1778
|
+
type: "boolean",
|
|
1779
|
+
label: "Classify All Shell Commands",
|
|
1780
|
+
category: "Tools",
|
|
1781
|
+
requiresRestart: true,
|
|
1782
|
+
default: false,
|
|
1783
|
+
description: "Route ALL shell commands through the auto-mode classifier, including read-only commands that would otherwise be auto-approved. Provides defense-in-depth for production environments.",
|
|
1784
|
+
showInDialog: false
|
|
1776
1785
|
}
|
|
1777
1786
|
}
|
|
1778
1787
|
}
|
|
@@ -2124,6 +2133,17 @@ var SETTINGS_SCHEMA = {
|
|
|
2124
2133
|
description: 'A list of MCP servers to exclude. Supports glob patterns (e.g. "*puppeteer*"). Takes precedence over mcp.allowed.',
|
|
2125
2134
|
showInDialog: false,
|
|
2126
2135
|
mergeStrategy: "concat" /* CONCAT */
|
|
2136
|
+
},
|
|
2137
|
+
toolIdleTimeoutMs: {
|
|
2138
|
+
type: "number",
|
|
2139
|
+
label: "MCP Tool Idle Timeout (ms)",
|
|
2140
|
+
category: "MCP",
|
|
2141
|
+
requiresRestart: false,
|
|
2142
|
+
default: 3e5,
|
|
2143
|
+
minimum: 1e4,
|
|
2144
|
+
maximum: 36e5,
|
|
2145
|
+
description: "Idle timeout in milliseconds for MCP tool calls. If the MCP server does not produce any response or progress update within this time, the call is aborted. Default: 300000 (5 minutes). Can be overridden via QWEN_CODE_MCP_TOOL_IDLE_TIMEOUT_MS environment variable.",
|
|
2146
|
+
showInDialog: false
|
|
2127
2147
|
}
|
|
2128
2148
|
}
|
|
2129
2149
|
},
|
|
@@ -2978,6 +2998,10 @@ function getEffectiveValue(key, settings, mergedSettings) {
|
|
|
2978
2998
|
return definition.default;
|
|
2979
2999
|
}
|
|
2980
3000
|
__name(getEffectiveValue, "getEffectiveValue");
|
|
3001
|
+
function getAllSettingKeys() {
|
|
3002
|
+
return Object.keys(getFlattenedSchema());
|
|
3003
|
+
}
|
|
3004
|
+
__name(getAllSettingKeys, "getAllSettingKeys");
|
|
2981
3005
|
var SETTINGS_DIALOG_ORDER = [
|
|
2982
3006
|
// Workflow Control - most impactful setting
|
|
2983
3007
|
"tools.approvalMode",
|
|
@@ -4882,6 +4906,7 @@ export {
|
|
|
4882
4906
|
getNestedValue,
|
|
4883
4907
|
getNestedProperty,
|
|
4884
4908
|
getEffectiveValue,
|
|
4909
|
+
getAllSettingKeys,
|
|
4885
4910
|
validateSettingValue,
|
|
4886
4911
|
getDialogSettingKeys,
|
|
4887
4912
|
settingExistsInScope,
|