@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
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
formatFetchErrorForUser
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-GEHVIWAT.js";
|
|
6
6
|
import {
|
|
7
7
|
openBrowserSecurely
|
|
8
8
|
} from "./chunk-22IFUCVR.js";
|
|
9
|
+
import {
|
|
10
|
+
atomicWriteFile
|
|
11
|
+
} from "./chunk-3227DZO4.js";
|
|
9
12
|
import {
|
|
10
13
|
combineAbortSignals
|
|
11
14
|
} from "./chunk-64WXLC72.js";
|
|
12
|
-
import {
|
|
13
|
-
atomicWriteFile
|
|
14
|
-
} from "./chunk-3UALQ56H.js";
|
|
15
15
|
import {
|
|
16
16
|
Storage,
|
|
17
17
|
createDebugLogger
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-UX4SGCGN.js";
|
|
19
19
|
import {
|
|
20
20
|
init_esbuild_shims
|
|
21
21
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
SkillError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-RIP623NO.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esbuild_shims
|
|
8
8
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -51,6 +51,7 @@ var MissingCliEntryError = class extends Error {
|
|
|
51
51
|
var SERVE_STATUS_EXT_METHODS = {
|
|
52
52
|
workspaceMcp: "qwen/status/workspace/mcp",
|
|
53
53
|
workspaceMcpTools: "qwen/status/workspace/mcp/tools",
|
|
54
|
+
workspaceMcpResources: "qwen/status/workspace/mcp/resources",
|
|
54
55
|
workspaceSkills: "qwen/status/workspace/skills",
|
|
55
56
|
workspaceTools: "qwen/status/workspace/tools",
|
|
56
57
|
workspaceProviders: "qwen/status/workspace/providers",
|
|
@@ -78,6 +79,7 @@ var SERVE_CONTROL_EXT_METHODS = {
|
|
|
78
79
|
sessionShellHistory: "qwen/control/session/shell_history",
|
|
79
80
|
sessionLanguage: "qwen/control/session/language",
|
|
80
81
|
sessionRewind: "qwen/control/session/rewind",
|
|
82
|
+
sessionContinue: "qwen/control/session/continue",
|
|
81
83
|
sessionTitle: "qwen/control/session/title",
|
|
82
84
|
workspaceMcpRestart: "qwen/control/workspace/mcp/restart",
|
|
83
85
|
workspaceMcpManage: "qwen/control/workspace/mcp/manage",
|
|
@@ -88,7 +90,19 @@ var SERVE_CONTROL_EXT_METHODS = {
|
|
|
88
90
|
workspaceMcpRuntimeAdd: "qwen/control/workspace/mcp/runtime-add",
|
|
89
91
|
workspaceMcpRuntimeRemove: "qwen/control/workspace/mcp/runtime-remove",
|
|
90
92
|
workspaceReload: "qwen/control/workspace/reload",
|
|
91
|
-
workspaceExtensionsRefresh: "qwen/control/workspace/extensions/refresh"
|
|
93
|
+
workspaceExtensionsRefresh: "qwen/control/workspace/extensions/refresh",
|
|
94
|
+
/**
|
|
95
|
+
* Reverse tool channel (issue #5626, Phase 2). Unlike every other entry
|
|
96
|
+
* here — which the PARENT serve process calls DOWN into the `qwen --acp`
|
|
97
|
+
* child — this one is called by the CHILD UP into the parent: a
|
|
98
|
+
* client-hosted (extension) MCP server's `sendSdkMcpMessage` round-trips a
|
|
99
|
+
* JSON-RPC `mcp_message` from the child's `McpClientManager` back to the
|
|
100
|
+
* parent's `ClientMcpRegistrar`, which pushes it down the daemon WS to the
|
|
101
|
+
* client and returns the correlated response. Params: `{ server, payload }`;
|
|
102
|
+
* result: `{ payload }`.
|
|
103
|
+
*/
|
|
104
|
+
clientMcpMessage: "qwen/control/client_mcp/message",
|
|
105
|
+
sessionCd: "qwen/control/session/cd"
|
|
92
106
|
};
|
|
93
107
|
var IDLE_HOOK_EVENTS = {
|
|
94
108
|
PreToolUse: { description: "Before tool execution", matcherKind: "toolName" },
|
|
@@ -8,14 +8,14 @@ import {
|
|
|
8
8
|
} from "./chunk-5DWXLGOM.js";
|
|
9
9
|
import {
|
|
10
10
|
loadSettings
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-HEVBZSXG.js";
|
|
12
12
|
import {
|
|
13
13
|
writeStderrLine
|
|
14
14
|
} from "./chunk-Y6Z2O3WR.js";
|
|
15
15
|
import {
|
|
16
16
|
MCP_BUDGET_WARN_FRACTION,
|
|
17
17
|
parsePositiveIntegerEnv
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-RIP623NO.js";
|
|
19
19
|
import {
|
|
20
20
|
openBrowserSecurely,
|
|
21
21
|
shouldLaunchBrowser
|
|
@@ -257,7 +257,7 @@ var serveCommand = {
|
|
|
257
257
|
process.exit(1);
|
|
258
258
|
}
|
|
259
259
|
}
|
|
260
|
-
const { runQwenServe } = await import("./run-qwen-serve-
|
|
260
|
+
const { runQwenServe } = await import("./run-qwen-serve-4B5QBMLQ.js");
|
|
261
261
|
try {
|
|
262
262
|
const handle = await runQwenServe({
|
|
263
263
|
port: argv.port,
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
// Force strict mode and setup for ESM
|
|
2
|
+
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
themeManager
|
|
5
|
+
} from "./chunk-I4H7PRWQ.js";
|
|
6
|
+
import {
|
|
7
|
+
init_esbuild_shims
|
|
8
|
+
} from "./chunk-A4BMJM77.js";
|
|
9
|
+
|
|
10
|
+
// packages/cli/src/ui/colors.ts
|
|
11
|
+
init_esbuild_shims();
|
|
12
|
+
var Colors = {
|
|
13
|
+
get type() {
|
|
14
|
+
return themeManager.getActiveTheme().colors.type;
|
|
15
|
+
},
|
|
16
|
+
get Foreground() {
|
|
17
|
+
return themeManager.getActiveTheme().colors.Foreground;
|
|
18
|
+
},
|
|
19
|
+
get Background() {
|
|
20
|
+
return themeManager.getActiveTheme().colors.Background;
|
|
21
|
+
},
|
|
22
|
+
get LightBlue() {
|
|
23
|
+
return themeManager.getActiveTheme().colors.LightBlue;
|
|
24
|
+
},
|
|
25
|
+
get AccentBlue() {
|
|
26
|
+
return themeManager.getActiveTheme().colors.AccentBlue;
|
|
27
|
+
},
|
|
28
|
+
get AccentPurple() {
|
|
29
|
+
return themeManager.getActiveTheme().colors.AccentPurple;
|
|
30
|
+
},
|
|
31
|
+
get AccentCyan() {
|
|
32
|
+
return themeManager.getActiveTheme().colors.AccentCyan;
|
|
33
|
+
},
|
|
34
|
+
get AccentGreen() {
|
|
35
|
+
return themeManager.getActiveTheme().colors.AccentGreen;
|
|
36
|
+
},
|
|
37
|
+
get AccentYellow() {
|
|
38
|
+
return themeManager.getActiveTheme().colors.AccentYellow;
|
|
39
|
+
},
|
|
40
|
+
get AccentRed() {
|
|
41
|
+
return themeManager.getActiveTheme().colors.AccentRed;
|
|
42
|
+
},
|
|
43
|
+
get AccentYellowDim() {
|
|
44
|
+
return themeManager.getActiveTheme().colors.AccentYellowDim;
|
|
45
|
+
},
|
|
46
|
+
get AccentRedDim() {
|
|
47
|
+
return themeManager.getActiveTheme().colors.AccentRedDim;
|
|
48
|
+
},
|
|
49
|
+
get DiffAdded() {
|
|
50
|
+
return themeManager.getActiveTheme().colors.DiffAdded;
|
|
51
|
+
},
|
|
52
|
+
get DiffRemoved() {
|
|
53
|
+
return themeManager.getActiveTheme().colors.DiffRemoved;
|
|
54
|
+
},
|
|
55
|
+
get Comment() {
|
|
56
|
+
return themeManager.getActiveTheme().colors.Comment;
|
|
57
|
+
},
|
|
58
|
+
get Gray() {
|
|
59
|
+
return themeManager.getActiveTheme().colors.Gray;
|
|
60
|
+
},
|
|
61
|
+
get GradientColors() {
|
|
62
|
+
return themeManager.getActiveTheme().colors.GradientColors;
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
export {
|
|
67
|
+
Colors
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* @license
|
|
71
|
+
* Copyright 2025 Google LLC
|
|
72
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
73
|
+
*/
|
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
buildPermissionSettings
|
|
5
|
+
} from "./chunk-WN6K47NR.js";
|
|
6
|
+
import {
|
|
7
|
+
resolveVoiceStreamConfig,
|
|
8
|
+
resolveVoiceTranscriptionConfig,
|
|
9
|
+
transcribeVoiceAudio
|
|
10
|
+
} from "./chunk-HFQ2XSE7.js";
|
|
11
|
+
import {
|
|
12
|
+
getVoiceSettingsScope,
|
|
13
|
+
isSelectableVoiceModel,
|
|
14
|
+
isVoiceEnabled,
|
|
15
|
+
readVoiceLanguage,
|
|
16
|
+
readVoiceMode,
|
|
17
|
+
readVoiceModel,
|
|
18
|
+
resolveVoiceTransport
|
|
19
|
+
} from "./chunk-5XQ4A26L.js";
|
|
3
20
|
import {
|
|
4
21
|
MCP_RESTART_SERVER_DEADLINE_MS
|
|
5
22
|
} from "./chunk-P7M4GA57.js";
|
|
@@ -11,10 +28,7 @@ import {
|
|
|
11
28
|
WorkspaceInitPathEscapeError,
|
|
12
29
|
WorkspaceInitRaceError,
|
|
13
30
|
WorkspaceInitSymlinkError
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import {
|
|
16
|
-
writeStderrLine
|
|
17
|
-
} from "./chunk-Y6Z2O3WR.js";
|
|
31
|
+
} from "./chunk-DHXWNSJA.js";
|
|
18
32
|
import {
|
|
19
33
|
SERVE_CONTROL_EXT_METHODS,
|
|
20
34
|
SERVE_STATUS_EXT_METHODS,
|
|
@@ -27,7 +41,27 @@ import {
|
|
|
27
41
|
createIdleWorkspaceProvidersStatus,
|
|
28
42
|
createIdleWorkspaceSkillsStatus,
|
|
29
43
|
mapDomainErrorToErrorKind
|
|
30
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-3M4W4U5G.js";
|
|
45
|
+
import {
|
|
46
|
+
WorkspacePermissionRulesSessionRequiredError,
|
|
47
|
+
WorkspaceSettingsPartialPersistError
|
|
48
|
+
} from "./chunk-BMFMJINR.js";
|
|
49
|
+
import {
|
|
50
|
+
getPersistScopeForModelSelection,
|
|
51
|
+
loadSettings
|
|
52
|
+
} from "./chunk-HEVBZSXG.js";
|
|
53
|
+
import {
|
|
54
|
+
getWorkspaceTrustStatus
|
|
55
|
+
} from "./chunk-ARYCHZ4B.js";
|
|
56
|
+
import {
|
|
57
|
+
writeStderrLine
|
|
58
|
+
} from "./chunk-Y6Z2O3WR.js";
|
|
59
|
+
import {
|
|
60
|
+
ModelsConfig
|
|
61
|
+
} from "./chunk-RIP623NO.js";
|
|
62
|
+
import {
|
|
63
|
+
createDebugLogger
|
|
64
|
+
} from "./chunk-UX4SGCGN.js";
|
|
31
65
|
import {
|
|
32
66
|
init_esbuild_shims
|
|
33
67
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -39,6 +73,231 @@ import {
|
|
|
39
73
|
init_esbuild_shims();
|
|
40
74
|
import { promises as fs, constants as fsConstants } from "node:fs";
|
|
41
75
|
import * as path from "node:path";
|
|
76
|
+
|
|
77
|
+
// packages/cli/src/services/voice-service.ts
|
|
78
|
+
init_esbuild_shims();
|
|
79
|
+
var debugLogger = createDebugLogger("VOICE_SERVICE");
|
|
80
|
+
var EMPTY_WORKSPACE_VOICE_UPDATE_ERROR = "At least one of `enabled`, `mode`, `language`, or `voiceModel` must be provided";
|
|
81
|
+
var WorkspaceVoiceError = class extends Error {
|
|
82
|
+
static {
|
|
83
|
+
__name(this, "WorkspaceVoiceError");
|
|
84
|
+
}
|
|
85
|
+
status;
|
|
86
|
+
code;
|
|
87
|
+
constructor(status, code, message) {
|
|
88
|
+
super(message);
|
|
89
|
+
this.name = "WorkspaceVoiceError";
|
|
90
|
+
this.status = status;
|
|
91
|
+
this.code = code;
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
function voiceSettingsScopeToWire(scope) {
|
|
95
|
+
return scope === "Workspace" /* Workspace */ ? "workspace" : "user";
|
|
96
|
+
}
|
|
97
|
+
__name(voiceSettingsScopeToWire, "voiceSettingsScopeToWire");
|
|
98
|
+
function buildWorkspaceVoiceSettingsWrites(settings, update, opts = {}) {
|
|
99
|
+
const voiceSettingsScope = getVoiceSettingsScope(
|
|
100
|
+
settings,
|
|
101
|
+
opts.workspaceTrusted
|
|
102
|
+
);
|
|
103
|
+
const writes = [];
|
|
104
|
+
if (update.voiceModel !== void 0) {
|
|
105
|
+
writes.push({
|
|
106
|
+
scope: getPersistScopeForModelSelection(settings),
|
|
107
|
+
key: "voiceModel",
|
|
108
|
+
value: update.voiceModel
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
if (update.mode !== void 0) {
|
|
112
|
+
writes.push({
|
|
113
|
+
scope: voiceSettingsScope,
|
|
114
|
+
key: "general.voice.mode",
|
|
115
|
+
value: update.mode
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (update.language !== void 0) {
|
|
119
|
+
writes.push({
|
|
120
|
+
scope: voiceSettingsScope,
|
|
121
|
+
key: "general.voice.language",
|
|
122
|
+
value: update.language
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
if (update.enabled !== void 0) {
|
|
126
|
+
writes.push({
|
|
127
|
+
scope: voiceSettingsScope,
|
|
128
|
+
key: "general.voice.enabled",
|
|
129
|
+
value: update.enabled
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
return writes;
|
|
133
|
+
}
|
|
134
|
+
__name(buildWorkspaceVoiceSettingsWrites, "buildWorkspaceVoiceSettingsWrites");
|
|
135
|
+
function createVoiceModelSource(settings) {
|
|
136
|
+
return new ModelsConfig({
|
|
137
|
+
modelProvidersConfig: settings.merged.modelProviders
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
__name(createVoiceModelSource, "createVoiceModelSource");
|
|
141
|
+
function listAvailableVoiceModels(settings) {
|
|
142
|
+
const models = createVoiceModelSource(settings).getAllConfiguredModels();
|
|
143
|
+
const idCounts = /* @__PURE__ */ new Map();
|
|
144
|
+
for (const model of models) {
|
|
145
|
+
idCounts.set(model.id, (idCounts.get(model.id) ?? 0) + 1);
|
|
146
|
+
}
|
|
147
|
+
const duplicateIds = [...idCounts.entries()].filter(([, count]) => count > 1).map(([id]) => id);
|
|
148
|
+
if (duplicateIds.length > 0) {
|
|
149
|
+
debugLogger.debug(
|
|
150
|
+
`Skipping duplicate voice model ids: ${duplicateIds.join(", ")}`
|
|
151
|
+
);
|
|
152
|
+
}
|
|
153
|
+
return models.filter((model) => (idCounts.get(model.id) ?? 0) === 1).filter(isSelectableVoiceModel).map((model) => ({
|
|
154
|
+
id: model.id,
|
|
155
|
+
transport: resolveVoiceTransport(model.id)
|
|
156
|
+
})).filter(
|
|
157
|
+
(model) => model.transport !== "unsupported"
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
__name(listAvailableVoiceModels, "listAvailableVoiceModels");
|
|
161
|
+
function hasConfiguredBatchVoiceTranscriptionModel(settings) {
|
|
162
|
+
for (const model of listAvailableVoiceModels(settings)) {
|
|
163
|
+
if (model.transport !== "qwen-asr-chat") {
|
|
164
|
+
continue;
|
|
165
|
+
}
|
|
166
|
+
try {
|
|
167
|
+
validateWorkspaceVoiceConfig(settings, model.id);
|
|
168
|
+
return true;
|
|
169
|
+
} catch (err) {
|
|
170
|
+
debugLogger.debug(
|
|
171
|
+
`Skipping unavailable batch voice model '${model.id}': ${err instanceof Error ? err.message : String(err)}`
|
|
172
|
+
);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
__name(hasConfiguredBatchVoiceTranscriptionModel, "hasConfiguredBatchVoiceTranscriptionModel");
|
|
178
|
+
function buildWorkspaceVoiceStatus(workspaceCwd, settings) {
|
|
179
|
+
return {
|
|
180
|
+
v: 1,
|
|
181
|
+
workspaceCwd,
|
|
182
|
+
enabled: isVoiceEnabled(settings),
|
|
183
|
+
mode: readVoiceMode(settings),
|
|
184
|
+
language: readVoiceLanguage(settings),
|
|
185
|
+
voiceModel: readVoiceModel(settings) ?? null,
|
|
186
|
+
availableVoiceModels: listAvailableVoiceModels(settings)
|
|
187
|
+
};
|
|
188
|
+
}
|
|
189
|
+
__name(buildWorkspaceVoiceStatus, "buildWorkspaceVoiceStatus");
|
|
190
|
+
function validateWorkspaceVoiceModel(settings, voiceModel) {
|
|
191
|
+
const models = createVoiceModelSource(settings).getAllConfiguredModels();
|
|
192
|
+
const matches = models.filter((model2) => model2.id === voiceModel);
|
|
193
|
+
if (matches.length === 0) {
|
|
194
|
+
throw new WorkspaceVoiceError(
|
|
195
|
+
400,
|
|
196
|
+
"unknown_voice_model",
|
|
197
|
+
`Voice model '${voiceModel}' is not configured.`
|
|
198
|
+
);
|
|
199
|
+
}
|
|
200
|
+
if (matches.length > 1) {
|
|
201
|
+
throw new WorkspaceVoiceError(
|
|
202
|
+
400,
|
|
203
|
+
"ambiguous_voice_model",
|
|
204
|
+
`Voice model '${voiceModel}' is ambiguous.`
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
const [model] = matches;
|
|
208
|
+
if (!model || !isSelectableVoiceModel(model)) {
|
|
209
|
+
throw new WorkspaceVoiceError(
|
|
210
|
+
400,
|
|
211
|
+
"unsupported_voice_model",
|
|
212
|
+
`Voice model '${voiceModel}' cannot be used for transcription.`
|
|
213
|
+
);
|
|
214
|
+
}
|
|
215
|
+
const transport = resolveVoiceTransport(model.id);
|
|
216
|
+
if (transport === "unsupported") {
|
|
217
|
+
throw new WorkspaceVoiceError(
|
|
218
|
+
400,
|
|
219
|
+
"unsupported_voice_model",
|
|
220
|
+
`Voice model '${voiceModel}' cannot be used for transcription.`
|
|
221
|
+
);
|
|
222
|
+
}
|
|
223
|
+
return { id: model.id, transport };
|
|
224
|
+
}
|
|
225
|
+
__name(validateWorkspaceVoiceModel, "validateWorkspaceVoiceModel");
|
|
226
|
+
function validateWorkspaceVoiceConfig(settings, voiceModel) {
|
|
227
|
+
const descriptor = validateWorkspaceVoiceModel(settings, voiceModel);
|
|
228
|
+
try {
|
|
229
|
+
const config = createVoiceModelSource(settings);
|
|
230
|
+
if (descriptor.transport === "qwen-asr-chat") {
|
|
231
|
+
resolveVoiceTranscriptionConfig({ config, settings, voiceModel });
|
|
232
|
+
} else {
|
|
233
|
+
resolveVoiceStreamConfig({ config, settings, voiceModel });
|
|
234
|
+
}
|
|
235
|
+
} catch (err) {
|
|
236
|
+
throw new WorkspaceVoiceError(
|
|
237
|
+
400,
|
|
238
|
+
"invalid_voice_model",
|
|
239
|
+
err instanceof Error ? err.message : `Voice model '${voiceModel}' is not configured for transcription.`
|
|
240
|
+
);
|
|
241
|
+
}
|
|
242
|
+
return descriptor;
|
|
243
|
+
}
|
|
244
|
+
__name(validateWorkspaceVoiceConfig, "validateWorkspaceVoiceConfig");
|
|
245
|
+
function validateWorkspaceVoiceState(settings, update) {
|
|
246
|
+
if (update.enabled === void 0 && update.mode === void 0 && update.language === void 0 && update.voiceModel === void 0) {
|
|
247
|
+
throw new WorkspaceVoiceError(
|
|
248
|
+
400,
|
|
249
|
+
"invalid_voice_update",
|
|
250
|
+
EMPTY_WORKSPACE_VOICE_UPDATE_ERROR
|
|
251
|
+
);
|
|
252
|
+
}
|
|
253
|
+
const nextEnabled = update.enabled ?? isVoiceEnabled(settings);
|
|
254
|
+
const nextVoiceModel = update.voiceModel ?? readVoiceModel(settings);
|
|
255
|
+
if (update.voiceModel) {
|
|
256
|
+
validateWorkspaceVoiceModel(settings, update.voiceModel);
|
|
257
|
+
}
|
|
258
|
+
if (!nextEnabled) {
|
|
259
|
+
return;
|
|
260
|
+
}
|
|
261
|
+
if (!nextVoiceModel) {
|
|
262
|
+
throw new WorkspaceVoiceError(
|
|
263
|
+
400,
|
|
264
|
+
"voice_model_required",
|
|
265
|
+
"A valid voiceModel is required before enabling voice."
|
|
266
|
+
);
|
|
267
|
+
}
|
|
268
|
+
validateWorkspaceVoiceConfig(settings, nextVoiceModel);
|
|
269
|
+
}
|
|
270
|
+
__name(validateWorkspaceVoiceState, "validateWorkspaceVoiceState");
|
|
271
|
+
async function transcribeWorkspaceVoiceAudio(input) {
|
|
272
|
+
const descriptor = validateWorkspaceVoiceModel(
|
|
273
|
+
input.settings,
|
|
274
|
+
input.voiceModel
|
|
275
|
+
);
|
|
276
|
+
if (descriptor.transport !== "qwen-asr-chat") {
|
|
277
|
+
throw new WorkspaceVoiceError(
|
|
278
|
+
400,
|
|
279
|
+
"unsupported_voice_model",
|
|
280
|
+
`Voice model '${input.voiceModel}' requires realtime transcription, which is not supported by this daemon endpoint.`
|
|
281
|
+
);
|
|
282
|
+
}
|
|
283
|
+
const text = await transcribeVoiceAudio(
|
|
284
|
+
{ data: input.data, mimeType: input.mimeType },
|
|
285
|
+
{
|
|
286
|
+
config: createVoiceModelSource(input.settings),
|
|
287
|
+
settings: input.settings,
|
|
288
|
+
voiceModel: input.voiceModel,
|
|
289
|
+
abortSignal: input.abortSignal
|
|
290
|
+
}
|
|
291
|
+
);
|
|
292
|
+
return {
|
|
293
|
+
text,
|
|
294
|
+
model: input.voiceModel,
|
|
295
|
+
transport: descriptor.transport
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
__name(transcribeWorkspaceVoiceAudio, "transcribeWorkspaceVoiceAudio");
|
|
299
|
+
|
|
300
|
+
// packages/cli/src/serve/workspace-service/index.ts
|
|
42
301
|
async function canonicalizeExistingAncestor(inputPath) {
|
|
43
302
|
let current = inputPath;
|
|
44
303
|
while (true) {
|
|
@@ -77,6 +336,8 @@ function createDaemonWorkspaceService(deps) {
|
|
|
77
336
|
workspaceProvidersStatusProvider,
|
|
78
337
|
isChannelLive,
|
|
79
338
|
persistDisabledTools,
|
|
339
|
+
persistSetting,
|
|
340
|
+
persistSettings,
|
|
80
341
|
queryWorkspaceStatus,
|
|
81
342
|
invokeWorkspaceCommand,
|
|
82
343
|
refreshExtensionsForAllSessions: refreshExtensionsForAllSessionsOnBridge,
|
|
@@ -185,7 +446,133 @@ function createDaemonWorkspaceService(deps) {
|
|
|
185
446
|
() => createIdleWorkspaceExtensionsStatus(boundWorkspace)
|
|
186
447
|
);
|
|
187
448
|
},
|
|
449
|
+
async getWorkspaceTrustStatus(_ctx) {
|
|
450
|
+
return getWorkspaceTrustStatus(
|
|
451
|
+
loadSettings(boundWorkspace).merged,
|
|
452
|
+
boundWorkspace
|
|
453
|
+
);
|
|
454
|
+
},
|
|
455
|
+
async getWorkspacePermissionsStatus(_ctx) {
|
|
456
|
+
return buildPermissionSettings(loadSettings(boundWorkspace));
|
|
457
|
+
},
|
|
458
|
+
async getWorkspaceVoiceStatus(_ctx) {
|
|
459
|
+
return buildWorkspaceVoiceStatus(
|
|
460
|
+
boundWorkspace,
|
|
461
|
+
loadSettings(boundWorkspace)
|
|
462
|
+
);
|
|
463
|
+
},
|
|
188
464
|
// -- Mutations --
|
|
465
|
+
async requestWorkspaceTrustChange(ctx, request) {
|
|
466
|
+
publishWorkspaceEvent({
|
|
467
|
+
type: "trust_change_requested",
|
|
468
|
+
data: {
|
|
469
|
+
workspaceCwd: boundWorkspace,
|
|
470
|
+
desiredState: request.desiredState,
|
|
471
|
+
...request.reason !== void 0 ? { reason: request.reason } : {}
|
|
472
|
+
},
|
|
473
|
+
originatorClientId: ctx.originatorClientId
|
|
474
|
+
});
|
|
475
|
+
return {
|
|
476
|
+
accepted: false,
|
|
477
|
+
desiredState: request.desiredState,
|
|
478
|
+
requiresOperatorAction: true
|
|
479
|
+
};
|
|
480
|
+
},
|
|
481
|
+
async setWorkspacePermissionRules(ctx, request) {
|
|
482
|
+
const key = `permissions.${request.ruleType}`;
|
|
483
|
+
try {
|
|
484
|
+
const result = await invokeWorkspaceCommand(
|
|
485
|
+
"qwen/permissions/setRules",
|
|
486
|
+
{
|
|
487
|
+
cwd: boundWorkspace,
|
|
488
|
+
scope: request.scope,
|
|
489
|
+
ruleType: request.ruleType,
|
|
490
|
+
rules: request.rules
|
|
491
|
+
}
|
|
492
|
+
);
|
|
493
|
+
publishWorkspaceEvent({
|
|
494
|
+
type: "settings_changed",
|
|
495
|
+
data: { key, value: request.rules, scope: request.scope },
|
|
496
|
+
originatorClientId: ctx.originatorClientId
|
|
497
|
+
});
|
|
498
|
+
return result;
|
|
499
|
+
} catch (err) {
|
|
500
|
+
if (!(err instanceof SessionNotFoundError)) {
|
|
501
|
+
throw err;
|
|
502
|
+
}
|
|
503
|
+
throw new WorkspacePermissionRulesSessionRequiredError();
|
|
504
|
+
}
|
|
505
|
+
},
|
|
506
|
+
async setWorkspaceVoiceSettings(ctx, request) {
|
|
507
|
+
if (!persistSettings && !persistSetting) {
|
|
508
|
+
throw new WorkspaceVoiceError(
|
|
509
|
+
501,
|
|
510
|
+
"not_implemented",
|
|
511
|
+
"Workspace voice settings persistence is not available"
|
|
512
|
+
);
|
|
513
|
+
}
|
|
514
|
+
const settings = loadSettings(boundWorkspace);
|
|
515
|
+
validateWorkspaceVoiceState(settings, request);
|
|
516
|
+
const workspaceTrusted = getWorkspaceTrustStatus(settings.merged, boundWorkspace).effective.state === "trusted";
|
|
517
|
+
const writes = buildWorkspaceVoiceSettingsWrites(settings, request, {
|
|
518
|
+
workspaceTrusted
|
|
519
|
+
});
|
|
520
|
+
const publishWrite = /* @__PURE__ */ __name((write) => {
|
|
521
|
+
publishWorkspaceEvent({
|
|
522
|
+
type: "settings_changed",
|
|
523
|
+
data: {
|
|
524
|
+
key: write.key,
|
|
525
|
+
value: write.value,
|
|
526
|
+
scope: voiceSettingsScopeToWire(write.scope)
|
|
527
|
+
},
|
|
528
|
+
originatorClientId: ctx.originatorClientId
|
|
529
|
+
});
|
|
530
|
+
}, "publishWrite");
|
|
531
|
+
if (persistSettings) {
|
|
532
|
+
try {
|
|
533
|
+
await persistSettings(boundWorkspace, writes);
|
|
534
|
+
} catch (err) {
|
|
535
|
+
if (err instanceof WorkspaceSettingsPartialPersistError) {
|
|
536
|
+
for (const write of err.committedWrites) {
|
|
537
|
+
publishWrite(write);
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
throw err;
|
|
541
|
+
}
|
|
542
|
+
for (const write of writes) {
|
|
543
|
+
publishWrite(write);
|
|
544
|
+
}
|
|
545
|
+
} else {
|
|
546
|
+
const committed = [];
|
|
547
|
+
for (const write of writes) {
|
|
548
|
+
try {
|
|
549
|
+
await persistSetting(
|
|
550
|
+
boundWorkspace,
|
|
551
|
+
write.scope,
|
|
552
|
+
write.key,
|
|
553
|
+
write.value
|
|
554
|
+
);
|
|
555
|
+
} catch (err) {
|
|
556
|
+
writeStderrLine(
|
|
557
|
+
`qwen serve: workspace voice partial persist error (workspace=${boundWorkspace}, committed=${committed.length}/${writes.length}, failedKey=${write.key}, failedScope=${voiceSettingsScopeToWire(write.scope)}): ${err instanceof Error ? err.message : String(err)}`
|
|
558
|
+
);
|
|
559
|
+
throw new WorkspaceSettingsPartialPersistError(
|
|
560
|
+
`Voice settings partial persist failed: committed=${committed.length}/${writes.length}`,
|
|
561
|
+
committed,
|
|
562
|
+
err
|
|
563
|
+
);
|
|
564
|
+
}
|
|
565
|
+
committed.push(write);
|
|
566
|
+
}
|
|
567
|
+
for (const write of committed) {
|
|
568
|
+
publishWrite(write);
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
return buildWorkspaceVoiceStatus(
|
|
572
|
+
boundWorkspace,
|
|
573
|
+
loadSettings(boundWorkspace)
|
|
574
|
+
);
|
|
575
|
+
},
|
|
189
576
|
async setWorkspaceToolEnabled(ctx, toolName, enabled) {
|
|
190
577
|
await persistDisabledTools(boundWorkspace, toolName, enabled);
|
|
191
578
|
publishWorkspaceEvent({
|
|
@@ -477,8 +864,21 @@ function createDaemonWorkspaceService(deps) {
|
|
|
477
864
|
__name(createDaemonWorkspaceService, "createDaemonWorkspaceService");
|
|
478
865
|
|
|
479
866
|
export {
|
|
867
|
+
EMPTY_WORKSPACE_VOICE_UPDATE_ERROR,
|
|
868
|
+
WorkspaceVoiceError,
|
|
869
|
+
voiceSettingsScopeToWire,
|
|
870
|
+
buildWorkspaceVoiceSettingsWrites,
|
|
871
|
+
hasConfiguredBatchVoiceTranscriptionModel,
|
|
872
|
+
buildWorkspaceVoiceStatus,
|
|
873
|
+
validateWorkspaceVoiceState,
|
|
874
|
+
transcribeWorkspaceVoiceAudio,
|
|
480
875
|
createDaemonWorkspaceService
|
|
481
876
|
};
|
|
877
|
+
/**
|
|
878
|
+
* @license
|
|
879
|
+
* Copyright 2025 Qwen
|
|
880
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
881
|
+
*/
|
|
482
882
|
/**
|
|
483
883
|
* @license
|
|
484
884
|
* Copyright 2025 Qwen Team
|