@qwen-code/qwen-code 0.19.2 → 0.19.3-nightly.20260630.e00fe6a27
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/extension-creator/SKILL.md +357 -0
- package/bundled/loop/SKILL.md +21 -7
- package/bundled/loop/SKILL.test.ts +41 -0
- package/bundled/loop/loop-task-file.test.ts +1064 -0
- package/bundled/loop/loop-task-file.ts +404 -0
- package/bundled/loop/loop-tick-resolver.test.ts +665 -0
- package/bundled/loop/loop-tick-resolver.ts +347 -0
- package/bundled/qc-helper/SKILL.md +26 -19
- package/bundled/qc-helper/docs/configuration/auth.md +11 -11
- package/bundled/qc-helper/docs/configuration/model-providers.md +13 -13
- package/bundled/qc-helper/docs/configuration/settings.md +76 -75
- package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
- package/bundled/qc-helper/docs/features/commands.md +108 -77
- package/bundled/qc-helper/docs/features/hooks.md +6 -1
- package/bundled/qc-helper/docs/features/memory.md +52 -0
- package/bundled/qc-helper/docs/qwen-serve.md +24 -2
- package/bundled/qc-helper/docs/support/tos-privacy.md +16 -3
- package/bundled/qc-helper/docs/support/troubleshooting.md +6 -0
- package/chunks/{MaxSizedBox-7RERNLFK.js → MaxSizedBox-T5X5MN5Q.js} +29 -27
- package/chunks/{StandaloneSessionPicker-S22XBSN6.js → StandaloneSessionPicker-P3E3WTOQ.js} +42 -37
- package/chunks/{acpAgent-4MCETHF2.js → acpAgent-QEP6DXFW.js} +864 -175
- package/chunks/{agent-K3ENVYSB.js → agent-UDANDUF7.js} +24 -23
- package/chunks/{agent-headless-HO3V3A3A.js → agent-headless-KYVSZHSO.js} +24 -23
- package/chunks/{anthropicContentGenerator-E3TQ5XJJ.js → anthropicContentGenerator-KWSJAQ7B.js} +33 -12
- package/chunks/{artifact-tool-QA4KRO3B.js → artifact-tool-D2X7G3C3.js} +2 -2
- package/chunks/{askUserQuestion-HMWXW6VN.js → askUserQuestion-UGETICJQ.js} +2 -2
- package/chunks/{bridge-4LV2HBH2.js → bridge-X42LXPTA.js} +31 -30
- package/chunks/{ca-7WC7ELX6.js → ca-IUFWESZL.js} +1 -0
- package/chunks/{chunk-JXQ23SNT.js → chunk-2JKEQWDZ.js} +623 -78
- package/chunks/{chunk-2TJ3YN6Q.js → chunk-2RJA6J57.js} +416 -401
- package/chunks/{chunk-3UALQ56H.js → chunk-3227DZO4.js} +1 -1
- package/chunks/{chunk-BGUDAULQ.js → chunk-3CPCDXFR.js} +5 -5
- package/chunks/{chunk-5RVSM6NW.js → chunk-3HUHAQF3.js} +1 -1
- package/chunks/{chunk-D5E5TMYH.js → chunk-3M4W4U5G.js} +16 -2
- package/chunks/{chunk-DBZUXSSV.js → chunk-4X7NIEQJ.js} +3 -3
- package/chunks/chunk-5GOVVXEV.js +73 -0
- package/chunks/{chunk-2BAQ3ACS.js → chunk-5SM4VT6V.js} +405 -5
- package/chunks/{chunk-NYOHZYHM.js → chunk-5XQ4A26L.js} +45 -3
- package/chunks/{chunk-CI5O6SQL.js → chunk-6FKEVYCD.js} +4 -4
- package/chunks/{chunk-ZD3NW5KL.js → chunk-7LM4XHPE.js} +63 -9
- package/chunks/chunk-7UNP2XM7.js +840 -0
- package/chunks/{chunk-OQHQHJRK.js → chunk-ARYCHZ4B.js} +151 -4775
- package/chunks/chunk-BC3C4F3Q.js +40 -0
- package/chunks/{chunk-CGEGHF2C.js → chunk-BKXBARJZ.js} +1 -1
- package/chunks/chunk-BMFMJINR.js +45 -0
- package/chunks/chunk-BOJWHRMX.js +11273 -0
- package/chunks/{chunk-CGOMICBE.js → chunk-BSZEQNUA.js} +34 -1
- package/chunks/{chunk-OIC6S73E.js → chunk-BUUQ5HPX.js} +1 -1
- package/chunks/{chunk-2BIF2NVV.js → chunk-BVSVIN45.js} +2 -2
- package/chunks/{chunk-TOEGRAVX.js → chunk-BX5YO7UW.js} +17 -5
- package/chunks/{chunk-4W4T77MO.js → chunk-BXVWV4GI.js} +109 -6
- package/chunks/{chunk-VQRYPFCV.js → chunk-CYHVPQYT.js} +10 -460
- package/chunks/{chunk-PRYMDRBV.js → chunk-DDMOU62Q.js} +1 -1
- package/chunks/{chunk-S566HKUS.js → chunk-DHXWNSJA.js} +15 -1
- package/chunks/{chunk-F6XNTYNE.js → chunk-E6XQPQXW.js} +30 -307
- package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
- package/chunks/{chunk-EL5IHQON.js → chunk-EWYQFWYF.js} +6 -27
- package/chunks/{chunk-HG6YKEBI.js → chunk-F2DOT6UZ.js} +161 -30
- package/chunks/{chunk-JTYRZODB.js → chunk-FOOIZCWL.js} +16 -7
- package/chunks/{chunk-EX4W6ZYG.js → chunk-G5G4TFZ7.js} +1 -1
- package/chunks/{chunk-EW6C27XX.js → chunk-GEHVIWAT.js} +9 -3
- package/chunks/chunk-HEVBZSXG.js +4923 -0
- package/chunks/chunk-HFQ2XSE7.js +690 -0
- package/chunks/{chunk-PF523XJX.js → chunk-HPGTGMP3.js} +1 -1
- package/chunks/{chunk-OTBK43JR.js → chunk-HYCC3XM3.js} +1 -1
- package/chunks/{chunk-TMBPDHXD.js → chunk-I4H7PRWQ.js} +1 -1
- package/chunks/{chunk-EEEZIVFJ.js → chunk-JOLIREYR.js} +1 -1
- package/chunks/{chunk-TZM5JIAX.js → chunk-JYPQTRA3.js} +10 -7
- package/chunks/chunk-K5XU6E4T.js +167 -0
- package/chunks/{chunk-BS64PXY3.js → chunk-KFVU7ODN.js} +1 -1
- package/chunks/{chunk-3RJ3ZPPR.js → chunk-KKQWC6WS.js} +7 -7
- package/chunks/{chunk-3QFE4OTE.js → chunk-LBW7NW7X.js} +4 -4
- package/chunks/{chunk-Z7XXFPGP.js → chunk-LDWTYE33.js} +1 -1
- package/chunks/{chunk-EXMX5YHG.js → chunk-LP5E4YIH.js} +1 -1
- package/chunks/{chunk-ZUAXI2OA.js → chunk-M2U5NM24.js} +188 -11366
- package/chunks/{chunk-I5T6PIBQ.js → chunk-MBV2CTRL.js} +1010 -925
- package/chunks/{chunk-5JZLXFPD.js → chunk-MTHMXSNT.js} +11 -11
- package/chunks/{chunk-FPACXT7T.js → chunk-MTJVHQDP.js} +534 -164
- package/chunks/chunk-NDOC6M5S.js +481 -0
- package/chunks/{chunk-HGNSRCRB.js → chunk-NL4C3H6C.js} +1 -1
- package/chunks/{chunk-GZCJS5WH.js → chunk-O2VBQ3Y2.js} +2 -2
- package/chunks/{chunk-UN3C6GOR.js → chunk-PPFWEV7G.js} +10 -108
- package/chunks/{chunk-RS4HRC75.js → chunk-QI2CFVRF.js} +85 -8
- package/chunks/{chunk-XU5P23GN.js → chunk-QLDPRILK.js} +3 -3
- package/chunks/chunk-QYUE6W3T.js +123 -0
- package/chunks/{chunk-USGMPVOY.js → chunk-R3LHDWF2.js} +21 -12
- package/chunks/{chunk-BNXANYLH.js → chunk-RD6YJJJ6.js} +81 -1
- package/chunks/{chunk-PXFFKNCO.js → chunk-RIP623NO.js} +4877 -2469
- package/chunks/{chunk-XKBP7M7A.js → chunk-RYBSUGOR.js} +142 -30
- package/chunks/{chunk-BG4BIP7F.js → chunk-SBBN4BWR.js} +4 -2
- package/chunks/{chunk-T2VDEFUU.js → chunk-SKQZZVAV.js} +2 -2
- package/chunks/{chunk-5R4SBCX6.js → chunk-SL5MOGQH.js} +3 -3
- package/chunks/chunk-SMXULRAN.js +37 -0
- package/chunks/{chunk-WA5OJGFL.js → chunk-SS6WJMQK.js} +363 -76
- package/chunks/{chunk-UAARVVBI.js → chunk-TNWFHGN6.js} +1 -1
- package/chunks/{chunk-I2RFAW6Q.js → chunk-TT6Q3EN4.js} +7 -5
- package/chunks/chunk-UAKXW3DN.js +30 -0
- package/chunks/{chunk-C4K3FEQ2.js → chunk-UX4SGCGN.js} +32 -3
- package/chunks/{chunk-J6AW7O5D.js → chunk-WHDQZHRU.js} +2 -2
- package/chunks/{chunk-WGAEWQTF.js → chunk-WN6K47NR.js} +1 -2
- package/chunks/{chunk-UAARJR2G.js → chunk-WQT5SOI6.js} +2 -2
- package/chunks/{chunk-VYFMN7C6.js → chunk-WUMVIRTN.js} +225 -37
- package/chunks/{chunk-R36VMVEP.js → chunk-XJMKOTVV.js} +5 -5
- package/chunks/{chunk-TXVGVZYR.js → chunk-XJYUPHRC.js} +3 -3
- package/chunks/{chunk-2JD55C6G.js → chunk-Y6YMRS3U.js} +2 -2
- package/chunks/{chunk-LLFFKXZZ.js → chunk-YALKC62D.js} +56 -29
- package/chunks/{chunk-GYZQA2FO.js → chunk-YLZJCUH6.js} +1 -1
- package/chunks/chunk-YTFBURQD.js +313 -0
- package/chunks/{chunk-KBXLIVWQ.js → chunk-ZFPRYHWR.js} +2 -2
- package/chunks/{chunk-X6EDWN44.js → chunk-ZP6UKOPB.js} +1 -1
- package/chunks/{computer-use-6BBRNT6S.js → computer-use-LF2S6LUZ.js} +103 -49
- package/chunks/{contextCommand-UJAJ6N57.js → contextCommand-VPX5UG55.js} +26 -25
- package/chunks/{cron-create-4KQE6YLH.js → cron-create-SKEY55RG.js} +4 -4
- package/chunks/{cron-delete-THME66UP.js → cron-delete-I3NAT32Z.js} +6 -6
- package/chunks/{cron-list-7A54SJ5N.js → cron-list-6XRRL6TH.js} +5 -5
- package/chunks/{daemon-status-provider-CSL3BUOY.js → daemon-status-provider-5JAWZS4V.js} +34 -34
- package/chunks/{de-ACHALDED.js → de-EOW5PVHF.js} +1 -0
- package/chunks/{dist-BD27IA3L.js → dist-4FCNM6KJ.js} +2 -2
- package/chunks/{dist-OD2FY543.js → dist-O3H4PABL.js} +2 -2
- package/chunks/{dist-BOOH5JWN.js → dist-SCAAUWPS.js} +18 -4
- package/chunks/{dist-QHJRBCMP.js → dist-UKPWQJCL.js} +44 -2
- package/chunks/{dist-QFFZWACU.js → dist-VD7HXTML.js} +20 -9
- package/chunks/{earlyInputCapture-X6KMCSHD.js → earlyInputCapture-7FRQMU4P.js} +25 -24
- package/chunks/{edit-7J6WXARF.js → edit-REKJDIRL.js} +68 -27
- package/chunks/{en-NCUBOJOY.js → en-HPWEJBTR.js} +8 -0
- package/chunks/{enter-worktree-KULCKJPJ.js → enter-worktree-GBKUDCD3.js} +24 -23
- package/chunks/{enterPlanMode-H2CIOLMH.js → enterPlanMode-WB3Y4FGT.js} +24 -23
- package/chunks/{errors-6G2JYR54.js → errors-2XJDYO3M.js} +26 -25
- package/chunks/{exit-worktree-ECBWBVC5.js → exit-worktree-KKC7O2ZV.js} +24 -23
- package/chunks/{exitPlanMode-DQV56GTW.js → exitPlanMode-7HMS3TF7.js} +24 -23
- package/chunks/{fast-path-35JJFS3C.js → fast-path-XVNIYWGG.js} +4 -4
- package/chunks/{fast-path-settings-TSVI53EB.js → fast-path-settings-UQLRFDQP.js} +3 -2
- package/chunks/{fr-GVKZ27MF.js → fr-BN5NKSAC.js} +1 -0
- package/chunks/{gemini-NDTG7WAX.js → gemini-U5TPU3IQ.js} +210 -104
- package/chunks/{geminiContentGenerator-XTG6SFLA.js → geminiContentGenerator-ZVWRHXOO.js} +4 -4
- package/chunks/{glob-SJ2JBZK4.js → glob-FEJWIH2W.js} +24 -23
- package/chunks/{grep-BRMWFEWR.js → grep-KMP25IIA.js} +24 -23
- package/chunks/{headlessSafetyWarnings-LJ6FJX77.js → headlessSafetyWarnings-5DEDET4M.js} +24 -23
- package/chunks/{initializer-P5AXF7PV.js → initializer-FJTACLOH.js} +31 -28
- package/chunks/{ja-FKZ2WZ4D.js → ja-7DEUB2TS.js} +1 -0
- package/chunks/{keychain-token-storage-CSYMNRPP.js → keychain-token-storage-YLMDLKXT.js} +2 -2
- package/chunks/{list-6COK34BP.js → list-SCQXYJUW.js} +32 -29
- package/chunks/{loadedSettingsAdapter-XIUTN245.js → loadedSettingsAdapter-P6KPNAG7.js} +30 -27
- package/chunks/{loop-wakeup-33GPXJLA.js → loop-wakeup-FYEQEJUA.js} +7 -7
- package/chunks/{ls-BYQY7RVV.js → ls-R5WP4BGZ.js} +4 -4
- package/chunks/{lsp-X54RO4IV.js → lsp-GSICJMMW.js} +2 -2
- package/chunks/{monitor-DH7KFSJV.js → monitor-JU3HHHVY.js} +24 -23
- package/chunks/nonInteractiveCli-IZEKUHU3.js +100 -0
- package/chunks/{notebook-edit-D4R4ZLMA.js → notebook-edit-YHY3Z2QQ.js} +52 -23
- package/chunks/{openaiContentGenerator-F74IPQ6E.js → openaiContentGenerator-4WUVA3Q2.js} +13 -12
- package/chunks/{pt-SY5NCFGR.js → pt-TNZRNLQB.js} +1 -0
- package/chunks/{qwenContentGenerator-ATTK5P4D.js → qwenContentGenerator-MVYYR44B.js} +26 -25
- package/chunks/{qwenOAuth2-K4AASPCV.js → qwenOAuth2-6HNGHALT.js} +5 -4
- package/chunks/{read-file-767G23OY.js → read-file-NABEO2X4.js} +8 -8
- package/chunks/{read-mcp-resource-I5HCZJ6X.js → read-mcp-resource-DQQW7H7T.js} +2 -2
- package/chunks/{ripGrep-4OMMGSWX.js → ripGrep-YXLK6UTX.js} +24 -23
- package/chunks/{ru-FWNXJG4F.js → ru-NIAUBKCN.js} +1 -0
- package/chunks/{run-qwen-serve-REKSTYRA.js → run-qwen-serve-4B5QBMLQ.js} +144 -41
- package/chunks/{scheduler-UNTFDQLG.js → scheduler-XAKIYBDL.js} +24 -23
- package/chunks/{send-message-2DAFXEYP.js → send-message-EE4TWKVU.js} +2 -2
- package/chunks/{serve-KZ56QB5S.js → serve-4RXVLUKD.js} +30 -28
- package/chunks/{server-BV5TZUMU.js → server-7PA5QGIA.js} +11037 -8747
- package/chunks/{session-OIBXFSGD.js → session-WNVWRYAH.js} +194 -57
- package/chunks/{settings-WJTCBIRA.js → settings-YJH32TFF.js} +30 -27
- package/chunks/{shell-WC52IBHW.js → shell-YFLABOS5.js} +24 -23
- package/chunks/{skill-U7F7JR4M.js → skill-N3J7FUAY.js} +38 -11
- package/chunks/{spawnChannel-EI2E5BCW.js → spawnChannel-D6WVMFZJ.js} +26 -25
- package/chunks/{src-4F6FBZFI.js → src-IU5GDBEH.js} +88 -28
- package/chunks/{startInteractiveUI-SFRVB3CE.js → startInteractiveUI-QIPQTRT4.js} +2784 -2474
- package/chunks/{syntheticOutput-PPS3HDVA.js → syntheticOutput-T5YHQ6S2.js} +3 -3
- package/chunks/{task-create-OUYCA553.js → task-create-BLY7RHXX.js} +6 -6
- package/chunks/{task-list-WAX7I2IA.js → task-list-3QUYNVYR.js} +5 -5
- package/chunks/{task-stop-CAIL6FNH.js → task-stop-U4RATK2V.js} +2 -2
- package/chunks/{task-update-AHEO5OUT.js → task-update-U54O7KJX.js} +6 -6
- package/chunks/{team-create-3WC7CIIW.js → team-create-TP4CLLM3.js} +24 -23
- package/chunks/{team-delete-HGHFG23B.js → team-delete-LKBYPASD.js} +5 -5
- package/chunks/{theme-manager-DICFCT3P.js → theme-manager-N2TBIBZT.js} +25 -24
- package/chunks/{todoWrite-IFBMN3FH.js → todoWrite-OYXKTVYN.js} +4 -4
- package/chunks/{tool-search-L5K7HLER.js → tool-search-GBBSICYB.js} +101 -16
- package/chunks/trustedFolders-F7TBU5CD.js +76 -0
- package/chunks/types-QX5C3CHJ.js +12 -0
- package/chunks/{validateNonInterActiveAuth-GCH4Z6KI.js → validateNonInterActiveAuth-EQDQPSMI.js} +55 -50
- package/chunks/{web-fetch-B5IIQ5TT.js → web-fetch-PCVCML2X.js} +29 -15
- package/chunks/{workflow-OB3AND7I.js → workflow-ANJ4FYBK.js} +32 -30
- package/chunks/{workspace-providers-status-ZIR5EPOO.js → workspace-providers-status-462QQKQM.js} +32 -29
- package/chunks/workspace-service-VTG4G6CW.js +75 -0
- package/chunks/{write-file-SEXBNDZM.js → write-file-3P3WMQQW.js} +63 -27
- package/chunks/{zh-RBEGQVQT.js → zh-5EUYXASN.js} +8 -0
- package/chunks/{zh-TW-QGAVRXT3.js → zh-TW-TR3XYGE5.js} +8 -0
- package/cli-entry.js +20 -9
- package/cli.js +6 -6
- package/locales/ca.js +2 -0
- package/locales/de.js +2 -0
- package/locales/en.js +14 -0
- package/locales/fr.js +2 -0
- package/locales/ja.js +1 -0
- package/locales/pt.js +2 -0
- package/locales/ru.js +2 -0
- package/locales/zh-TW.js +12 -0
- package/locales/zh.js +12 -0
- package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +35 -0
- package/node_modules/@qwen-code/audio-capture/dist/index.js +48 -0
- package/node_modules/@qwen-code/audio-capture/dist/index.js.map +1 -0
- package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +7 -0
- package/node_modules/@qwen-code/audio-capture/dist/platform.js +18 -0
- package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +1 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +21 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +58 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +5 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +84 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +19 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +6 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +207 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +7 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +43 -0
- package/node_modules/@qwen-code/audio-capture/package.json +30 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
- package/package.json +18 -6
- package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
- package/postinstall.js +50 -0
- package/web-shell/assets/{arc-D_ae_Y9k.js → arc-DIemsO_F.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-BMLRjppa.js → architectureDiagram-3BPJPVTR-CTlUvIQv.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-qVDQC8KL.js → blockDiagram-GPEHLZMM-DG0jmIZK.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CxWS6MBd.js → c4Diagram-AAUBKEIU-WljDBi55.js} +1 -1
- package/web-shell/assets/channel-CbzRbdpA.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-BtNuY5Yp.js → chunk-2J33WTMH-8nc6onr2.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BU-x368d.js → chunk-4BX2VUAB-EopXix8Z.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DRgTLvBu.js → chunk-55IACEB6-BE4Jz3N3.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-D2aElv7q.js → chunk-727SXJPM-C_eErgDN.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BwHCMRQ0.js → chunk-AQP2D5EJ-DFtVW-Is.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-BMyPH-ku.js → chunk-FMBD7UC4-CJPyxIg9.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BNKTstUf.js → chunk-ND2GUHAM-Bk-xgj6M.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-gD3vsFId.js → chunk-QZHKN3VN-p3Y4yaFB.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BFdyQ52h.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BFdyQ52h.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BG9FAsXE.js → cose-bilkent-S5V4N54A-BCMO6Js3.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-Cy1sR7om.js → dagre-BM42HDAG-DUMrwASf.js} +1 -1
- package/web-shell/assets/default-aEtf0G7-.svg +1 -0
- package/web-shell/assets/{diagram-2AECGRRQ-Bxi1I_Vu.js → diagram-2AECGRRQ-C5d7qJbL.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BGCJjO6y.js → diagram-5GNKFQAL-CjLzMhbT.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CMTeLXp7.js → diagram-KO2AKTUF-RCoNWeAm.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BN1wyAGh.js → diagram-LMA3HP47-KThXjaNV.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-UYSG_zcp.js → diagram-OG6HWLK6-DKsC2BWz.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DqXL08lw.js → erDiagram-TEJ5UH35-DJ2ukmq0.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BPJ9SFji.js → flowDiagram-I6XJVG4X-zzqaARRX.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-BEd9Pnms.js → ganttDiagram-6RSMTGT7-kFUg-gqT.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DrNRH3oi.js → gitGraphDiagram-PVQCEYII-C6JnMVzD.js} +1 -1
- package/web-shell/assets/index-B3XUm7dw.js +713 -0
- package/web-shell/assets/index-CHmzAWys.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CFYBrkVI.js → infoDiagram-5YYISTIA-XqPVhp89.js} +1 -1
- package/web-shell/assets/insert-DmRbh9Rv.svg +1 -0
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Dxsddth7.js → ishikawaDiagram-YF4QCWOH-D2k8sGpf.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-DxaDK80t.js → journeyDiagram-JHISSGLW-CQEST1GE.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-Q0jQCOct.js → kanban-definition-UN3LZRKU-DZ7kqVBC.js} +1 -1
- package/web-shell/assets/{linear-DGGM2kcP.js → linear-B6C_6q_E.js} +1 -1
- package/web-shell/assets/{mermaid.core-ByoxnWut.js → mermaid.core-CsyNP1qt.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-C0ZseHsi.js → mindmap-definition-RKZ34NQL-B1VDIzJq.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-MQXNhl5A.js → pieDiagram-4H26LBE5-DN0E7Jwu.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIR4ee2A.js → quadrantDiagram-W4KKPZXB-UKTQdHKm.js} +1 -1
- package/web-shell/assets/queue-DWpnpFgW.svg +1 -0
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BTR0UdYQ.js → requirementDiagram-4Y6WPE33-BRGceQvN.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-sfnhMELN.js → sankeyDiagram-5OEKKPKP-2DDyu41v.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DXczHOHH.js → sequenceDiagram-3UESZ5HK-CT5iE8ZU.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-DdE_KQFH.js → stateDiagram-AJRCARHV-CqMQ_s4G.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CamhV5pM.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-DIc61uE8.js → timeline-definition-PNZ67QCA-Di37QSZU.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BF7ODmxB.js → vennDiagram-CIIHVFJN-DCXvpz5S.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-3pc1MEaw.js → wardley-L42UT6IY-CpUCk6OX.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-9jnPcZuP.js → wardleyDiagram-YWT4CUSO-D01pVEBg.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-DcthaZK6.js → xychartDiagram-2RQKCTM6-DOu5JDoz.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-B6HQGTYR.js +0 -410
- package/chunks/chunk-R2BXK7SX.js +0 -13
- package/chunks/chunk-RKIZXJMB.js +0 -13
- package/chunks/nonInteractiveCli-7575LBXP.js +0 -91
- package/chunks/workspace-service-OM5D4OI2.js +0 -60
- package/web-shell/assets/channel-DYPNiTww.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-p_g25Tni.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-p_g25Tni.js +0 -1
- package/web-shell/assets/index-CpOXWDPh.js +0 -714
- package/web-shell/assets/index-oVK7qhre.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BHUSEndU.js +0 -1
|
@@ -5,17 +5,19 @@ import {
|
|
|
5
5
|
} from "./chunk-3GONHQOA.js";
|
|
6
6
|
import {
|
|
7
7
|
getErrorMessage
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-SL5MOGQH.js";
|
|
9
9
|
import {
|
|
10
|
-
isWorkspaceTrusted,
|
|
11
10
|
loadSettings
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HEVBZSXG.js";
|
|
13
12
|
import {
|
|
14
13
|
getCurrentLanguage,
|
|
15
14
|
initializeI18n,
|
|
16
15
|
resolveLanguageSetting,
|
|
17
16
|
t
|
|
18
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-MTHMXSNT.js";
|
|
18
|
+
import {
|
|
19
|
+
isWorkspaceTrusted
|
|
20
|
+
} from "./chunk-ARYCHZ4B.js";
|
|
19
21
|
import {
|
|
20
22
|
writeStderrLine,
|
|
21
23
|
writeStdoutLine
|
|
@@ -27,7 +29,7 @@ import {
|
|
|
27
29
|
redactUrlCredentials,
|
|
28
30
|
require_prompts,
|
|
29
31
|
stripAnsi
|
|
30
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-RIP623NO.js";
|
|
31
33
|
import {
|
|
32
34
|
init_esbuild_shims
|
|
33
35
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
// Force strict mode and setup for ESM
|
|
2
|
+
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
init_esbuild_shims
|
|
5
|
+
} from "./chunk-A4BMJM77.js";
|
|
6
|
+
import {
|
|
7
|
+
__name
|
|
8
|
+
} from "./chunk-J2S4EL5Y.js";
|
|
9
|
+
|
|
10
|
+
// packages/cli/src/serve/validate-server-name.ts
|
|
11
|
+
init_esbuild_shims();
|
|
12
|
+
var VALID_SERVER_NAME = /^[A-Za-z0-9_-]+$/;
|
|
13
|
+
var RESERVED_SERVER_NAMES = /* @__PURE__ */ new Set([
|
|
14
|
+
"__proto__",
|
|
15
|
+
"constructor",
|
|
16
|
+
"prototype"
|
|
17
|
+
]);
|
|
18
|
+
function isValidServerName(name) {
|
|
19
|
+
return typeof name === "string" && name.length > 0 && name.length <= 256 && VALID_SERVER_NAME.test(name) && !RESERVED_SERVER_NAMES.has(name);
|
|
20
|
+
}
|
|
21
|
+
__name(isValidServerName, "isValidServerName");
|
|
22
|
+
|
|
23
|
+
export {
|
|
24
|
+
isValidServerName
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* @license
|
|
28
|
+
* Copyright 2026 Qwen Team
|
|
29
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
30
|
+
*/
|
|
@@ -31,11 +31,40 @@ function isAbortError(error) {
|
|
|
31
31
|
return false;
|
|
32
32
|
}
|
|
33
33
|
__name(isAbortError, "isAbortError");
|
|
34
|
+
function describeErrorCause(cause) {
|
|
35
|
+
if (cause == null) return void 0;
|
|
36
|
+
if (cause instanceof AggregateError && Array.isArray(cause.errors)) {
|
|
37
|
+
const inner = cause.errors.map((e) => describeSingleError(e)).filter((s) => Boolean(s));
|
|
38
|
+
if (inner.length > 0) {
|
|
39
|
+
return [...new Set(inner)].join("; ");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return describeSingleError(cause);
|
|
43
|
+
}
|
|
44
|
+
__name(describeErrorCause, "describeErrorCause");
|
|
45
|
+
function describeSingleError(err) {
|
|
46
|
+
if (err instanceof Error) {
|
|
47
|
+
const code = err.code;
|
|
48
|
+
const codeStr = typeof code === "string" ? code : void 0;
|
|
49
|
+
const msg = err.message?.trim();
|
|
50
|
+
if (msg && codeStr && !msg.includes(codeStr)) {
|
|
51
|
+
return `${codeStr}: ${msg}`;
|
|
52
|
+
}
|
|
53
|
+
return msg || codeStr || (err.name !== "Error" ? err.name : void 0);
|
|
54
|
+
}
|
|
55
|
+
if (err && typeof err === "object" && "code" in err) {
|
|
56
|
+
const code = err.code;
|
|
57
|
+
if (typeof code === "string" && code) return code;
|
|
58
|
+
}
|
|
59
|
+
const str = String(err);
|
|
60
|
+
return str && str !== "[object Object]" ? str : void 0;
|
|
61
|
+
}
|
|
62
|
+
__name(describeSingleError, "describeSingleError");
|
|
34
63
|
function getErrorMessage(error) {
|
|
35
64
|
if (error instanceof Error) {
|
|
36
|
-
const
|
|
37
|
-
if (
|
|
38
|
-
return `${error.message} (cause: ${
|
|
65
|
+
const detail = describeErrorCause(error.cause);
|
|
66
|
+
if (detail && detail !== error.message) {
|
|
67
|
+
return `${error.message} (cause: ${detail})`;
|
|
39
68
|
}
|
|
40
69
|
return error.message;
|
|
41
70
|
}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
functionResponsePartsToString
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-2RJA6J57.js";
|
|
6
6
|
import {
|
|
7
7
|
parseAndFormatApiError
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-RIP623NO.js";
|
|
9
9
|
import {
|
|
10
10
|
init_esbuild_shims
|
|
11
11
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
parseRule
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RIP623NO.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esbuild_shims
|
|
8
8
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -127,7 +127,6 @@ export {
|
|
|
127
127
|
isPermissionRuleType,
|
|
128
128
|
readPermissionRuleSet,
|
|
129
129
|
normalizePermissionRules,
|
|
130
|
-
normalizePermissionRuleInputs,
|
|
131
130
|
buildPermissionSettings
|
|
132
131
|
};
|
|
133
132
|
/**
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
eastAsianWidth,
|
|
8
8
|
isFullWidth,
|
|
9
9
|
isWide
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-BSZEQNUA.js";
|
|
11
11
|
import {
|
|
12
12
|
stripAnsi
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-RIP623NO.js";
|
|
14
14
|
import {
|
|
15
15
|
init_esbuild_shims
|
|
16
16
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -1,14 +1,25 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
DEFAULT_RING_SIZE,
|
|
5
|
+
EVENT_SCHEMA_VERSION,
|
|
6
|
+
EventBus
|
|
7
|
+
} from "./chunk-ALX6BUYW.js";
|
|
8
|
+
import {
|
|
9
|
+
defaultSpawnChannelFactory
|
|
10
|
+
} from "./chunk-LP5E4YIH.js";
|
|
11
|
+
import {
|
|
12
|
+
ClientSideConnection,
|
|
13
|
+
PROTOCOL_VERSION,
|
|
14
|
+
RequestError
|
|
15
|
+
} from "./chunk-UFC57OYT.js";
|
|
6
16
|
import {
|
|
7
17
|
MCP_RESTART_SERVER_DEADLINE_MS
|
|
8
18
|
} from "./chunk-P7M4GA57.js";
|
|
9
19
|
import {
|
|
10
20
|
BranchWhilePromptActiveError,
|
|
11
21
|
CancelSentinelCollisionError,
|
|
22
|
+
CdWhilePromptActiveError,
|
|
12
23
|
InvalidClientIdError,
|
|
13
24
|
InvalidPermissionOptionError,
|
|
14
25
|
InvalidRewindTargetError,
|
|
@@ -24,23 +35,7 @@ import {
|
|
|
24
35
|
SessionShellDisabledError,
|
|
25
36
|
WorkspaceMismatchError,
|
|
26
37
|
isNotCurrentlyGeneratingCancelError
|
|
27
|
-
} from "./chunk-
|
|
28
|
-
import {
|
|
29
|
-
canonicalizeWorkspace
|
|
30
|
-
} from "./chunk-SEZC2725.js";
|
|
31
|
-
import {
|
|
32
|
-
DEFAULT_RING_SIZE,
|
|
33
|
-
EVENT_SCHEMA_VERSION,
|
|
34
|
-
EventBus
|
|
35
|
-
} from "./chunk-ALX6BUYW.js";
|
|
36
|
-
import {
|
|
37
|
-
defaultSpawnChannelFactory
|
|
38
|
-
} from "./chunk-EXMX5YHG.js";
|
|
39
|
-
import {
|
|
40
|
-
ClientSideConnection,
|
|
41
|
-
PROTOCOL_VERSION,
|
|
42
|
-
RequestError
|
|
43
|
-
} from "./chunk-UFC57OYT.js";
|
|
38
|
+
} from "./chunk-DHXWNSJA.js";
|
|
44
39
|
import {
|
|
45
40
|
BridgeChannelClosedError,
|
|
46
41
|
BridgeTimeoutError,
|
|
@@ -49,15 +44,21 @@ import {
|
|
|
49
44
|
STATUS_SCHEMA_VERSION,
|
|
50
45
|
createIdleWorkspaceExtensionsStatus,
|
|
51
46
|
createIdleWorkspaceHooksStatus
|
|
52
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-3M4W4U5G.js";
|
|
48
|
+
import {
|
|
49
|
+
MID_TURN_QUEUE_DRAIN_METHOD
|
|
50
|
+
} from "./chunk-EWALXUAD.js";
|
|
51
|
+
import {
|
|
52
|
+
canonicalizeWorkspace
|
|
53
|
+
} from "./chunk-SEZC2725.js";
|
|
53
54
|
import {
|
|
54
55
|
ShellExecutionService,
|
|
55
56
|
TrustGateError
|
|
56
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-RIP623NO.js";
|
|
57
58
|
import {
|
|
58
59
|
DAEMON_TRACEPARENT_META_KEY,
|
|
59
60
|
DAEMON_TRACESTATE_META_KEY
|
|
60
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-SS6WJMQK.js";
|
|
61
62
|
import {
|
|
62
63
|
init_esbuild_shims
|
|
63
64
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -1099,7 +1100,7 @@ function sliceLineRange(content, startLine, endLine) {
|
|
|
1099
1100
|
}
|
|
1100
1101
|
__name(sliceLineRange, "sliceLineRange");
|
|
1101
1102
|
var BridgeClient = class {
|
|
1102
|
-
constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted) {
|
|
1103
|
+
constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted, clientMcpSender) {
|
|
1103
1104
|
this.resolveEntry = resolveEntry;
|
|
1104
1105
|
this.resolvePendingRestoreEvents = resolvePendingRestoreEvents;
|
|
1105
1106
|
this.mediator = mediator;
|
|
@@ -1108,6 +1109,7 @@ var BridgeClient = class {
|
|
|
1108
1109
|
this.fileSystem = fileSystem;
|
|
1109
1110
|
this.onModelPromoted = onModelPromoted;
|
|
1110
1111
|
this.onModePromoted = onModePromoted;
|
|
1112
|
+
this.clientMcpSender = clientMcpSender;
|
|
1111
1113
|
}
|
|
1112
1114
|
static {
|
|
1113
1115
|
__name(this, "BridgeClient");
|
|
@@ -1254,6 +1256,9 @@ var BridgeClient = class {
|
|
|
1254
1256
|
* treats that as "drain unsupported" and stops asking.
|
|
1255
1257
|
*/
|
|
1256
1258
|
async extMethod(method, params) {
|
|
1259
|
+
if (method === SERVE_CONTROL_EXT_METHODS.clientMcpMessage) {
|
|
1260
|
+
return this.handleClientMcpMessage(params);
|
|
1261
|
+
}
|
|
1257
1262
|
if (method !== MID_TURN_QUEUE_DRAIN_METHOD) {
|
|
1258
1263
|
throw RequestError.methodNotFound(method);
|
|
1259
1264
|
}
|
|
@@ -1283,6 +1288,52 @@ var BridgeClient = class {
|
|
|
1283
1288
|
}
|
|
1284
1289
|
return { messages };
|
|
1285
1290
|
}
|
|
1291
|
+
/**
|
|
1292
|
+
* Reverse tool channel (issue #5626, Phase 2) — answer the child's
|
|
1293
|
+
* `qwen/control/client_mcp/message` ext-method. The child's session
|
|
1294
|
+
* `McpClientManager` calls this when its agent drives a client-hosted
|
|
1295
|
+
* (extension) MCP server: `params` carries the advertised `server` name and
|
|
1296
|
+
* the JSON-RPC `payload` (initialize / tools/list / tools/call / a
|
|
1297
|
+
* notification). We resolve the per-WS-connection sender via the injected
|
|
1298
|
+
* `clientMcpSender` lookup, deliver the payload over the daemon WS, and
|
|
1299
|
+
* return the correlated response as `{ payload }`.
|
|
1300
|
+
*
|
|
1301
|
+
* Rejects with ACP `methodNotFound` when no `clientMcpSender` is wired (Mode
|
|
1302
|
+
* A / tests can't host a client MCP server), and `invalidParams` when the
|
|
1303
|
+
* frame is malformed or the named server is no longer hosted (e.g. the
|
|
1304
|
+
* extension disconnected mid-turn) — the agent's `SdkControlClientTransport`
|
|
1305
|
+
* surfaces that as a transport error rather than hanging.
|
|
1306
|
+
*/
|
|
1307
|
+
async handleClientMcpMessage(params) {
|
|
1308
|
+
if (!this.clientMcpSender) {
|
|
1309
|
+
throw RequestError.methodNotFound(
|
|
1310
|
+
SERVE_CONTROL_EXT_METHODS.clientMcpMessage
|
|
1311
|
+
);
|
|
1312
|
+
}
|
|
1313
|
+
const server = params["server"];
|
|
1314
|
+
if (typeof server !== "string" || server.length === 0) {
|
|
1315
|
+
throw RequestError.invalidParams(
|
|
1316
|
+
void 0,
|
|
1317
|
+
"`server` must be a non-empty string"
|
|
1318
|
+
);
|
|
1319
|
+
}
|
|
1320
|
+
const payload = params["payload"];
|
|
1321
|
+
if (payload === null || typeof payload !== "object") {
|
|
1322
|
+
throw RequestError.invalidParams(
|
|
1323
|
+
void 0,
|
|
1324
|
+
"`payload` must be a JSON-RPC message object"
|
|
1325
|
+
);
|
|
1326
|
+
}
|
|
1327
|
+
const send = this.clientMcpSender(server);
|
|
1328
|
+
if (!send) {
|
|
1329
|
+
throw RequestError.invalidParams(
|
|
1330
|
+
void 0,
|
|
1331
|
+
`client-hosted MCP server '${server}' is not currently connected`
|
|
1332
|
+
);
|
|
1333
|
+
}
|
|
1334
|
+
const response = await send(payload);
|
|
1335
|
+
return { payload: response };
|
|
1336
|
+
}
|
|
1286
1337
|
/**
|
|
1287
1338
|
* Handle child->bridge ACP `extNotification` calls. Six methods are
|
|
1288
1339
|
* recognized — `qwen/notify/session/model-update`,
|
|
@@ -1990,6 +2041,7 @@ var PERSIST_TIMEOUT_MS = 5e3;
|
|
|
1990
2041
|
var MCP_RESTART_TIMEOUT_MS = 3e5;
|
|
1991
2042
|
var MCP_OAUTH_TIMEOUT_MS = 6e5;
|
|
1992
2043
|
var DAEMON_RETRY_META_KEY = "qwen.daemon.retry";
|
|
2044
|
+
var DAEMON_CONTINUE_META_KEY = "qwen.daemon.continueLastTurn";
|
|
1993
2045
|
var SESSION_RECAP_TIMEOUT_MS = 6e4;
|
|
1994
2046
|
var SESSION_BTW_TIMEOUT_MS = 6e4;
|
|
1995
2047
|
var SHELL_COMMAND_TIMEOUT_MS = 12e4;
|
|
@@ -2174,6 +2226,14 @@ function createAcpSessionBridge(opts) {
|
|
|
2174
2226
|
const aliveChannels = /* @__PURE__ */ new Set();
|
|
2175
2227
|
let inFlightChannelSpawn;
|
|
2176
2228
|
const byId = /* @__PURE__ */ new Map();
|
|
2229
|
+
const toSessionSummary = /* @__PURE__ */ __name((entry) => ({
|
|
2230
|
+
sessionId: entry.sessionId,
|
|
2231
|
+
workspaceCwd: entry.workspaceCwd,
|
|
2232
|
+
createdAt: entry.createdAt,
|
|
2233
|
+
displayName: entry.displayName,
|
|
2234
|
+
clientCount: entry.clientIds.size,
|
|
2235
|
+
hasActivePrompt: entry.promptActive
|
|
2236
|
+
}), "toSessionSummary");
|
|
2177
2237
|
const permissionConsensusQuorum = opts.permissionConsensusQuorum;
|
|
2178
2238
|
if (permissionConsensusQuorum !== void 0 && (!Number.isInteger(permissionConsensusQuorum) || permissionConsensusQuorum < 1)) {
|
|
2179
2239
|
throw new Error(
|
|
@@ -2294,7 +2354,14 @@ function createAcpSessionBridge(opts) {
|
|
|
2294
2354
|
},
|
|
2295
2355
|
originator
|
|
2296
2356
|
);
|
|
2297
|
-
}
|
|
2357
|
+
},
|
|
2358
|
+
// Reverse tool channel (issue #5626, Phase 2): forward the optional
|
|
2359
|
+
// client-hosted-MCP sender lookup so `BridgeClient.extMethod` can
|
|
2360
|
+
// answer `qwen/control/client_mcp/message` from the child by reaching
|
|
2361
|
+
// the per-WS-connection `ClientMcpRegistrar`. Omitted callers (tests,
|
|
2362
|
+
// Mode A) never host a client MCP server, so the method stays
|
|
2363
|
+
// unreachable.
|
|
2364
|
+
opts.clientMcpSender
|
|
2298
2365
|
);
|
|
2299
2366
|
const connection = new ClientSideConnection(() => client, channel.stream);
|
|
2300
2367
|
const info = {
|
|
@@ -2828,6 +2895,7 @@ function createAcpSessionBridge(opts) {
|
|
|
2828
2895
|
// Late attachers get the same ACP state the original restore
|
|
2829
2896
|
// caller saw; spawn-only sessions don't carry a state payload.
|
|
2830
2897
|
state: existing.restoreState ?? {},
|
|
2898
|
+
hasActivePrompt: existing.promptActive,
|
|
2831
2899
|
...replayFieldsFor(existing, action)
|
|
2832
2900
|
};
|
|
2833
2901
|
}
|
|
@@ -2860,7 +2928,8 @@ function createAcpSessionBridge(opts) {
|
|
|
2860
2928
|
...restored,
|
|
2861
2929
|
attached: true,
|
|
2862
2930
|
clientId: registerClient(entry, req.clientId),
|
|
2863
|
-
createdAt: entry.createdAt
|
|
2931
|
+
createdAt: entry.createdAt,
|
|
2932
|
+
hasActivePrompt: entry.promptActive
|
|
2864
2933
|
};
|
|
2865
2934
|
}
|
|
2866
2935
|
if (byId.size + inFlightSpawns.size + inFlightRestores.size >= maxSessions) {
|
|
@@ -2948,6 +3017,7 @@ function createAcpSessionBridge(opts) {
|
|
|
2948
3017
|
clientId: clientId2,
|
|
2949
3018
|
createdAt: racedEntry.createdAt,
|
|
2950
3019
|
state: racedEntry.restoreState ?? {},
|
|
3020
|
+
hasActivePrompt: racedEntry.promptActive,
|
|
2951
3021
|
...replayFieldsFor(racedEntry, action)
|
|
2952
3022
|
};
|
|
2953
3023
|
}
|
|
@@ -2969,6 +3039,7 @@ function createAcpSessionBridge(opts) {
|
|
|
2969
3039
|
clientId,
|
|
2970
3040
|
createdAt: entry.createdAt,
|
|
2971
3041
|
state,
|
|
3042
|
+
hasActivePrompt: entry.promptActive,
|
|
2972
3043
|
...replayFieldsFor(entry, action)
|
|
2973
3044
|
};
|
|
2974
3045
|
})().finally(() => {
|
|
@@ -3059,7 +3130,7 @@ function createAcpSessionBridge(opts) {
|
|
|
3059
3130
|
}
|
|
3060
3131
|
__name(closeSessionImpl, "closeSessionImpl");
|
|
3061
3132
|
startSessionReaper();
|
|
3062
|
-
|
|
3133
|
+
const bridgeApi = {
|
|
3063
3134
|
getDaemonStatusSnapshot() {
|
|
3064
3135
|
return {
|
|
3065
3136
|
limits: {
|
|
@@ -3146,7 +3217,8 @@ function createAcpSessionBridge(opts) {
|
|
|
3146
3217
|
workspaceCwd: existing.workspaceCwd,
|
|
3147
3218
|
attached: true,
|
|
3148
3219
|
clientId,
|
|
3149
|
-
createdAt: existing.createdAt
|
|
3220
|
+
createdAt: existing.createdAt,
|
|
3221
|
+
hasActivePrompt: existing.promptActive
|
|
3150
3222
|
};
|
|
3151
3223
|
}
|
|
3152
3224
|
const inFlight = inFlightSpawns.get(workspaceKey);
|
|
@@ -3170,7 +3242,12 @@ function createAcpSessionBridge(opts) {
|
|
|
3170
3242
|
).catch(() => {
|
|
3171
3243
|
});
|
|
3172
3244
|
}
|
|
3173
|
-
return {
|
|
3245
|
+
return {
|
|
3246
|
+
...session,
|
|
3247
|
+
attached: true,
|
|
3248
|
+
clientId,
|
|
3249
|
+
hasActivePrompt: attachedEntry.promptActive
|
|
3250
|
+
};
|
|
3174
3251
|
}
|
|
3175
3252
|
}
|
|
3176
3253
|
if (byId.size + inFlightSpawns.size + inFlightRestores.size >= maxSessions) {
|
|
@@ -3245,6 +3322,7 @@ function createAcpSessionBridge(opts) {
|
|
|
3245
3322
|
const requestedRetry = req.retry === true;
|
|
3246
3323
|
const isRetry = requestedRetry && entry.retryAllowed;
|
|
3247
3324
|
entry.retryAllowed = false;
|
|
3325
|
+
const isContinue = context?.continue === true;
|
|
3248
3326
|
const promptRequest = (() => {
|
|
3249
3327
|
const copy = {
|
|
3250
3328
|
...normalized
|
|
@@ -3252,9 +3330,13 @@ function createAcpSessionBridge(opts) {
|
|
|
3252
3330
|
delete copy.retry;
|
|
3253
3331
|
const meta = copy._meta && typeof copy._meta === "object" ? { ...copy._meta } : {};
|
|
3254
3332
|
delete meta[DAEMON_RETRY_META_KEY];
|
|
3333
|
+
delete meta[DAEMON_CONTINUE_META_KEY];
|
|
3255
3334
|
if (isRetry) {
|
|
3256
3335
|
meta[DAEMON_RETRY_META_KEY] = true;
|
|
3257
3336
|
}
|
|
3337
|
+
if (isContinue) {
|
|
3338
|
+
meta[DAEMON_CONTINUE_META_KEY] = true;
|
|
3339
|
+
}
|
|
3258
3340
|
if (Object.keys(meta).length > 0) {
|
|
3259
3341
|
copy._meta = meta;
|
|
3260
3342
|
} else {
|
|
@@ -3273,7 +3355,7 @@ function createAcpSessionBridge(opts) {
|
|
|
3273
3355
|
}
|
|
3274
3356
|
try {
|
|
3275
3357
|
entry.cancelBroadcast = false;
|
|
3276
|
-
if (!isRetry) {
|
|
3358
|
+
if (!isRetry && !isContinue) {
|
|
3277
3359
|
echoPromptToSessionBus(
|
|
3278
3360
|
entry,
|
|
3279
3361
|
promptRequest,
|
|
@@ -3616,6 +3698,59 @@ function createAcpSessionBridge(opts) {
|
|
|
3616
3698
|
);
|
|
3617
3699
|
return branchResult;
|
|
3618
3700
|
},
|
|
3701
|
+
async changeSessionCwd(sessionId, req, context) {
|
|
3702
|
+
if (shuttingDown) throw new Error("AcpSessionBridge is shutting down");
|
|
3703
|
+
const entry = byId.get(sessionId);
|
|
3704
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
3705
|
+
const originatorClientId = resolveTrustedClientId(
|
|
3706
|
+
entry,
|
|
3707
|
+
context?.clientId
|
|
3708
|
+
);
|
|
3709
|
+
const cdPromise = entry.promptQueue.then(async () => {
|
|
3710
|
+
if (entry.promptActive) {
|
|
3711
|
+
throw new CdWhilePromptActiveError(sessionId);
|
|
3712
|
+
}
|
|
3713
|
+
const ci = await ensureChannel();
|
|
3714
|
+
const raw = await ci.connection.extMethod(
|
|
3715
|
+
SERVE_CONTROL_EXT_METHODS.sessionCd,
|
|
3716
|
+
{
|
|
3717
|
+
sessionId,
|
|
3718
|
+
path: req.path
|
|
3719
|
+
}
|
|
3720
|
+
);
|
|
3721
|
+
const extResult = raw;
|
|
3722
|
+
if (typeof extResult?.previousCwd !== "string" || typeof extResult?.newCwd !== "string" || !Array.isArray(extResult?.warnings)) {
|
|
3723
|
+
throw new Error(
|
|
3724
|
+
`changeSessionCwd: unexpected response shape from agent: ${JSON.stringify(raw)}`
|
|
3725
|
+
);
|
|
3726
|
+
}
|
|
3727
|
+
if (extResult.previousCwd !== extResult.newCwd) {
|
|
3728
|
+
entry.events.publish({
|
|
3729
|
+
type: "session_cwd_changed",
|
|
3730
|
+
data: {
|
|
3731
|
+
sessionId,
|
|
3732
|
+
previousCwd: extResult.previousCwd,
|
|
3733
|
+
newCwd: extResult.newCwd
|
|
3734
|
+
},
|
|
3735
|
+
...originatorClientId ? { originatorClientId } : {}
|
|
3736
|
+
});
|
|
3737
|
+
}
|
|
3738
|
+
return extResult;
|
|
3739
|
+
});
|
|
3740
|
+
entry.promptQueue = cdPromise.then(
|
|
3741
|
+
() => void 0,
|
|
3742
|
+
() => void 0
|
|
3743
|
+
);
|
|
3744
|
+
const result = await withTimeout(
|
|
3745
|
+
cdPromise,
|
|
3746
|
+
Math.max(initTimeoutMs, 3e4),
|
|
3747
|
+
"changeSessionCwd"
|
|
3748
|
+
);
|
|
3749
|
+
writeStderrLine(
|
|
3750
|
+
`qwen serve: session ${sessionId} cwd changed: ${result.previousCwd} -> ${result.newCwd}` + (result.warnings.length > 0 ? ` (warnings: ${result.warnings.join("; ")})` : "")
|
|
3751
|
+
);
|
|
3752
|
+
return { sessionId, ...result };
|
|
3753
|
+
},
|
|
3619
3754
|
async closeSession(sessionId, context, closeOpts) {
|
|
3620
3755
|
return closeSessionImpl(sessionId, context, closeOpts);
|
|
3621
3756
|
},
|
|
@@ -3679,18 +3814,16 @@ function createAcpSessionBridge(opts) {
|
|
|
3679
3814
|
const out = [];
|
|
3680
3815
|
for (const entry of byId.values()) {
|
|
3681
3816
|
if (entry.workspaceCwd === key) {
|
|
3682
|
-
out.push(
|
|
3683
|
-
sessionId: entry.sessionId,
|
|
3684
|
-
workspaceCwd: entry.workspaceCwd,
|
|
3685
|
-
createdAt: entry.createdAt,
|
|
3686
|
-
displayName: entry.displayName,
|
|
3687
|
-
clientCount: entry.clientIds.size,
|
|
3688
|
-
hasActivePrompt: entry.promptActive
|
|
3689
|
-
});
|
|
3817
|
+
out.push(toSessionSummary(entry));
|
|
3690
3818
|
}
|
|
3691
3819
|
}
|
|
3692
3820
|
return out;
|
|
3693
3821
|
},
|
|
3822
|
+
getSessionSummary(sessionId) {
|
|
3823
|
+
const entry = byId.get(sessionId);
|
|
3824
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
3825
|
+
return toSessionSummary(entry);
|
|
3826
|
+
},
|
|
3694
3827
|
recordHeartbeat(sessionId, context) {
|
|
3695
3828
|
const entry = byId.get(sessionId);
|
|
3696
3829
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
@@ -3790,6 +3923,27 @@ function createAcpSessionBridge(opts) {
|
|
|
3790
3923
|
{ serverName }
|
|
3791
3924
|
);
|
|
3792
3925
|
},
|
|
3926
|
+
async getWorkspaceMcpResourcesStatus(serverName) {
|
|
3927
|
+
return requestWorkspaceStatus(
|
|
3928
|
+
SERVE_STATUS_EXT_METHODS.workspaceMcpResources,
|
|
3929
|
+
() => ({
|
|
3930
|
+
v: STATUS_SCHEMA_VERSION,
|
|
3931
|
+
workspaceCwd: boundWorkspace,
|
|
3932
|
+
serverName,
|
|
3933
|
+
initialized: false,
|
|
3934
|
+
acpChannelLive: false,
|
|
3935
|
+
resources: [],
|
|
3936
|
+
errors: [
|
|
3937
|
+
{
|
|
3938
|
+
kind: "mcp_resources",
|
|
3939
|
+
status: "not_started",
|
|
3940
|
+
hint: "spawn a session to populate"
|
|
3941
|
+
}
|
|
3942
|
+
]
|
|
3943
|
+
}),
|
|
3944
|
+
{ serverName }
|
|
3945
|
+
);
|
|
3946
|
+
},
|
|
3793
3947
|
async getWorkspaceToolsStatus() {
|
|
3794
3948
|
return requestWorkspaceStatus(
|
|
3795
3949
|
SERVE_STATUS_EXT_METHODS.workspaceTools,
|
|
@@ -3853,6 +4007,39 @@ function createAcpSessionBridge(opts) {
|
|
|
3853
4007
|
SERVE_CONTROL_EXT_METHODS.sessionGoalClear
|
|
3854
4008
|
);
|
|
3855
4009
|
},
|
|
4010
|
+
async continueSession(sessionId, context) {
|
|
4011
|
+
const entry = byId.get(sessionId);
|
|
4012
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
4013
|
+
resolveTrustedClientId(entry, context?.clientId);
|
|
4014
|
+
const decision = await requestSessionStatus(sessionId, SERVE_CONTROL_EXT_METHODS.sessionContinue);
|
|
4015
|
+
if (!decision.accepted) {
|
|
4016
|
+
return decision;
|
|
4017
|
+
}
|
|
4018
|
+
const liveEntry = byId.get(sessionId);
|
|
4019
|
+
if (!liveEntry) throw new SessionNotFoundError(sessionId);
|
|
4020
|
+
const lastEventId = liveEntry.events.lastEventId;
|
|
4021
|
+
const promptId = context?.promptId;
|
|
4022
|
+
const promptPromise = bridgeApi.sendPrompt(
|
|
4023
|
+
sessionId,
|
|
4024
|
+
{ sessionId, prompt: [] },
|
|
4025
|
+
void 0,
|
|
4026
|
+
{
|
|
4027
|
+
...context?.clientId !== void 0 ? { clientId: context.clientId } : {},
|
|
4028
|
+
...promptId !== void 0 ? { promptId } : {},
|
|
4029
|
+
continue: true
|
|
4030
|
+
}
|
|
4031
|
+
);
|
|
4032
|
+
promptPromise.catch((err) => {
|
|
4033
|
+
teeServeDebugLine(
|
|
4034
|
+
`continueSession: continuation turn failed for ${sessionId}: ${err instanceof Error ? err.message : String(err)}`
|
|
4035
|
+
);
|
|
4036
|
+
});
|
|
4037
|
+
return {
|
|
4038
|
+
...decision,
|
|
4039
|
+
...promptId !== void 0 ? { promptId } : {},
|
|
4040
|
+
lastEventId
|
|
4041
|
+
};
|
|
4042
|
+
},
|
|
3856
4043
|
async getSessionStatsStatus(sessionId) {
|
|
3857
4044
|
return requestSessionStatus(
|
|
3858
4045
|
sessionId,
|
|
@@ -4728,6 +4915,7 @@ function createAcpSessionBridge(opts) {
|
|
|
4728
4915
|
}
|
|
4729
4916
|
}
|
|
4730
4917
|
};
|
|
4918
|
+
return bridgeApi;
|
|
4731
4919
|
}
|
|
4732
4920
|
__name(createAcpSessionBridge, "createAcpSessionBridge");
|
|
4733
4921
|
async function withTimeout(p, ms, label) {
|
|
@@ -3,24 +3,24 @@
|
|
|
3
3
|
import {
|
|
4
4
|
AUTO_THEME_NAME,
|
|
5
5
|
themeManager
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-I4H7PRWQ.js";
|
|
7
7
|
import {
|
|
8
8
|
initializeI18n,
|
|
9
9
|
resolveLanguageSetting,
|
|
10
10
|
t
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-MTHMXSNT.js";
|
|
12
12
|
import {
|
|
13
13
|
IdeClient
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-RIP623NO.js";
|
|
15
15
|
import {
|
|
16
16
|
AuthEvent,
|
|
17
17
|
IdeConnectionEvent,
|
|
18
18
|
logAuth,
|
|
19
19
|
logIdeConnection
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-SS6WJMQK.js";
|
|
21
21
|
import {
|
|
22
22
|
getErrorMessage
|
|
23
|
-
} from "./chunk-
|
|
23
|
+
} from "./chunk-UX4SGCGN.js";
|
|
24
24
|
import {
|
|
25
25
|
init_esbuild_shims
|
|
26
26
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -3,17 +3,17 @@
|
|
|
3
3
|
import {
|
|
4
4
|
getInboxesDir,
|
|
5
5
|
require_proper_lockfile
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-BVSVIN45.js";
|
|
7
7
|
import {
|
|
8
8
|
Mutex
|
|
9
9
|
} from "./chunk-OMX7CUOE.js";
|
|
10
10
|
import {
|
|
11
11
|
atomicWriteJSON
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-3227DZO4.js";
|
|
13
13
|
import {
|
|
14
14
|
createDebugLogger,
|
|
15
15
|
isNodeError
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-UX4SGCGN.js";
|
|
17
17
|
import {
|
|
18
18
|
init_esbuild_shims
|
|
19
19
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
createTask
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QLDPRILK.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveActiveTeamName
|
|
8
8
|
} from "./chunk-LD2XBG6Z.js";
|
|
@@ -11,7 +11,7 @@ import {
|
|
|
11
11
|
BaseToolInvocation,
|
|
12
12
|
ToolDisplayNames,
|
|
13
13
|
ToolNames
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-BX5YO7UW.js";
|
|
15
15
|
import {
|
|
16
16
|
init_esbuild_shims
|
|
17
17
|
} from "./chunk-A4BMJM77.js";
|