@qwen-code/qwen-code 0.19.2 → 0.19.3
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 +12 -7
- package/bundled/loop/SKILL.test.ts +32 -0
- package/bundled/qc-helper/SKILL.md +14 -14
- 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 +60 -60
- package/bundled/qc-helper/docs/features/commands.md +108 -77
- 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/chunks/{MaxSizedBox-7RERNLFK.js → MaxSizedBox-QNF3EIGU.js} +29 -30
- package/chunks/{StandaloneSessionPicker-S22XBSN6.js → StandaloneSessionPicker-Z52JTYST.js} +42 -40
- package/chunks/{acpAgent-4MCETHF2.js → acpAgent-7RZUOWOM.js} +406 -118
- package/chunks/{agent-K3ENVYSB.js → agent-4FG7WTHJ.js} +24 -26
- package/chunks/{agent-headless-HO3V3A3A.js → agent-headless-RQ5BTX3G.js} +24 -26
- package/chunks/{anthropicContentGenerator-E3TQ5XJJ.js → anthropicContentGenerator-PFITVL7Y.js} +31 -13
- 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-JL2PMCIW.js} +29 -32
- package/chunks/{ca-7WC7ELX6.js → ca-IUFWESZL.js} +1 -0
- package/chunks/{chunk-3UALQ56H.js → chunk-3227DZO4.js} +1 -1
- package/chunks/{chunk-JTYRZODB.js → chunk-3TV3HUWZ.js} +16 -7
- package/chunks/{chunk-NYOHZYHM.js → chunk-4LUZAKMK.js} +45 -3
- package/chunks/{chunk-EL5IHQON.js → chunk-4QK3O43S.js} +6 -27
- package/chunks/chunk-5GOVVXEV.js +73 -0
- package/chunks/{chunk-R36VMVEP.js → chunk-6V4NZFUS.js} +5 -5
- package/chunks/{chunk-XKBP7M7A.js → chunk-ADCIHOQZ.js} +138 -28
- 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-BTLJ2MF5.js +690 -0
- package/chunks/{chunk-OIC6S73E.js → chunk-BUUQ5HPX.js} +1 -1
- package/chunks/{chunk-2BIF2NVV.js → chunk-BVSVIN45.js} +2 -2
- package/chunks/{chunk-JXQ23SNT.js → chunk-BW4KCQFD.js} +54 -2
- package/chunks/{chunk-TOEGRAVX.js → chunk-BX5YO7UW.js} +17 -5
- package/chunks/{chunk-5RVSM6NW.js → chunk-BXSHL2SF.js} +1 -1
- package/chunks/{chunk-UN3C6GOR.js → chunk-CF6BB3LT.js} +0 -107
- package/chunks/{chunk-Z7XXFPGP.js → chunk-CKQA6AWF.js} +1 -1
- package/chunks/{chunk-I2RFAW6Q.js → chunk-CNLEDYE3.js} +7 -5
- package/chunks/{chunk-PRYMDRBV.js → chunk-DDMOU62Q.js} +1 -1
- package/chunks/chunk-EDMZZFDU.js +11213 -0
- package/chunks/{chunk-IRJWHZWU.js → chunk-EJYJYJZ2.js} +70 -3
- package/chunks/{chunk-OQHQHJRK.js → chunk-F3ZYSEY6.js} +151 -4775
- package/chunks/chunk-FKAVULLM.js +4909 -0
- package/chunks/{chunk-TZM5JIAX.js → chunk-FNJ7BDPH.js} +6 -6
- package/chunks/{chunk-EXMX5YHG.js → chunk-FXKVLFFY.js} +1 -1
- package/chunks/{chunk-EX4W6ZYG.js → chunk-GGBIN5K7.js} +1 -1
- package/chunks/{chunk-BS64PXY3.js → chunk-GT2FGICD.js} +1 -1
- package/chunks/{chunk-HG6YKEBI.js → chunk-HPZTOP4I.js} +75 -23
- package/chunks/{chunk-OTBK43JR.js → chunk-HYCC3XM3.js} +1 -1
- package/chunks/{chunk-3QFE4OTE.js → chunk-HZT4UCFB.js} +4 -4
- package/chunks/{chunk-GYZQA2FO.js → chunk-I2LYBGNI.js} +1 -1
- package/chunks/{chunk-TMBPDHXD.js → chunk-I4H7PRWQ.js} +1 -1
- package/chunks/{chunk-2BAQ3ACS.js → chunk-J33ZR6OJ.js} +404 -4
- package/chunks/{chunk-4W4T77MO.js → chunk-J7FA27RO.js} +109 -6
- package/chunks/{chunk-S566HKUS.js → chunk-JE5FVRPC.js} +38 -7
- package/chunks/{chunk-CGOMICBE.js → chunk-JJXWTVSK.js} +1 -1
- package/chunks/{chunk-EEEZIVFJ.js → chunk-JOLIREYR.js} +1 -1
- package/chunks/{chunk-DBZUXSSV.js → chunk-JVHEVCAU.js} +5 -5
- package/chunks/chunk-K5XU6E4T.js +167 -0
- package/chunks/{chunk-EW6C27XX.js → chunk-KMGMKW5Q.js} +1 -1
- package/chunks/{chunk-D5E5TMYH.js → chunk-L7OKCI7T.js} +4 -2
- package/chunks/{chunk-ZUAXI2OA.js → chunk-M2U5NM24.js} +188 -11366
- package/chunks/{chunk-CI5O6SQL.js → chunk-MNF6S5PR.js} +4 -4
- package/chunks/{chunk-FPACXT7T.js → chunk-N4EJFBN5.js} +421 -163
- 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-VQRYPFCV.js → chunk-O75BHFQW.js} +10 -460
- package/chunks/{chunk-WGAEWQTF.js → chunk-ODLIHNOY.js} +1 -2
- package/chunks/{chunk-J6AW7O5D.js → chunk-PDE7CSDS.js} +2 -2
- package/chunks/{chunk-5R4SBCX6.js → chunk-PR32FRT6.js} +3 -3
- package/chunks/{chunk-LLFFKXZZ.js → chunk-QE6KJYLT.js} +56 -29
- package/chunks/{chunk-3RJ3ZPPR.js → chunk-QI7GOGJR.js} +7 -7
- package/chunks/{chunk-XU5P23GN.js → chunk-QLDPRILK.js} +3 -3
- package/chunks/{chunk-WA5OJGFL.js → chunk-QNKBEJO2.js} +359 -76
- package/chunks/{chunk-UAARVVBI.js → chunk-QWFNTRH4.js} +1 -1
- package/chunks/chunk-QYUE6W3T.js +123 -0
- package/chunks/{chunk-5JZLXFPD.js → chunk-R5OP2ATH.js} +11 -11
- package/chunks/{chunk-BNXANYLH.js → chunk-RD6YJJJ6.js} +81 -1
- package/chunks/{chunk-2TJ3YN6Q.js → chunk-RRFZXMYP.js} +380 -400
- package/chunks/{chunk-ZN5T4BHI.js → chunk-RYLJU2DY.js} +1 -1
- package/chunks/{chunk-ZD3NW5KL.js → chunk-S7AKE7HL.js} +3 -3
- package/chunks/{chunk-BG4BIP7F.js → chunk-SBBN4BWR.js} +4 -2
- package/chunks/{chunk-T2VDEFUU.js → chunk-SKQZZVAV.js} +2 -2
- package/chunks/{chunk-USGMPVOY.js → chunk-SLNKLLEO.js} +14 -9
- package/chunks/chunk-SMXULRAN.js +37 -0
- package/chunks/{chunk-PF523XJX.js → chunk-SMYQZVZ3.js} +1 -1
- package/chunks/{chunk-I5T6PIBQ.js → chunk-STUWFKGD.js} +1001 -887
- package/chunks/{chunk-UAARJR2G.js → chunk-T4T2FNV4.js} +2 -2
- package/chunks/{chunk-F6XNTYNE.js → chunk-U3KSMM7G.js} +8 -4
- package/chunks/chunk-UFLGERMB.js +813 -0
- package/chunks/{chunk-BGUDAULQ.js → chunk-UO5GVXQE.js} +5 -5
- package/chunks/{chunk-C4K3FEQ2.js → chunk-UX4SGCGN.js} +32 -3
- package/chunks/{chunk-RS4HRC75.js → chunk-UYT3MWEB.js} +85 -8
- package/chunks/{chunk-VYFMN7C6.js → chunk-VBZ452JT.js} +113 -24
- package/chunks/{chunk-KBXLIVWQ.js → chunk-VVLOGDB6.js} +2 -2
- package/chunks/{chunk-TXVGVZYR.js → chunk-XJYUPHRC.js} +3 -3
- package/chunks/{chunk-2JD55C6G.js → chunk-Y6YMRS3U.js} +2 -2
- package/chunks/{chunk-PXFFKNCO.js → chunk-YAINVQ3Q.js} +2961 -1349
- package/chunks/{chunk-X6EDWN44.js → chunk-ZP6UKOPB.js} +1 -1
- package/chunks/{computer-use-6BBRNT6S.js → computer-use-JGB36FDW.js} +103 -52
- package/chunks/{contextCommand-UJAJ6N57.js → contextCommand-WYU6OQ2F.js} +26 -28
- 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-HH2EC5FI.js +65 -0
- package/chunks/{de-ACHALDED.js → de-EOW5PVHF.js} +1 -0
- package/chunks/{dist-BOOH5JWN.js → dist-663NZ6MI.js} +1 -1
- package/chunks/{dist-QHJRBCMP.js → dist-J37VXPLD.js} +46 -5
- package/chunks/{dist-OD2FY543.js → dist-LB6OGPVM.js} +1 -1
- package/chunks/{dist-BD27IA3L.js → dist-NHEYYB2B.js} +2 -2
- package/chunks/{dist-QFFZWACU.js → dist-PQPZ5Q4N.js} +1 -1
- package/chunks/{earlyInputCapture-X6KMCSHD.js → earlyInputCapture-44RISVVJ.js} +25 -27
- package/chunks/{edit-7J6WXARF.js → edit-NN6GM5DT.js} +68 -30
- package/chunks/{en-NCUBOJOY.js → en-HPWEJBTR.js} +8 -0
- package/chunks/{enter-worktree-KULCKJPJ.js → enter-worktree-PB3O2C7D.js} +24 -26
- package/chunks/{enterPlanMode-H2CIOLMH.js → enterPlanMode-YQFNNSUA.js} +24 -26
- package/chunks/{errors-6G2JYR54.js → errors-LS7XU5DZ.js} +26 -28
- package/chunks/{exit-worktree-ECBWBVC5.js → exit-worktree-E2FTNSBK.js} +24 -26
- package/chunks/{exitPlanMode-DQV56GTW.js → exitPlanMode-GLYK2BUB.js} +24 -26
- package/chunks/{fast-path-35JJFS3C.js → fast-path-WQ6M7LI7.js} +4 -4
- package/chunks/{fast-path-settings-TSVI53EB.js → fast-path-settings-OAGU3X5H.js} +3 -2
- package/chunks/{fr-GVKZ27MF.js → fr-BN5NKSAC.js} +1 -0
- package/chunks/{gemini-NDTG7WAX.js → gemini-2YFLVA2M.js} +204 -103
- package/chunks/{geminiContentGenerator-XTG6SFLA.js → geminiContentGenerator-XV6SV6CD.js} +4 -4
- package/chunks/{glob-SJ2JBZK4.js → glob-2H6CDDMK.js} +24 -26
- package/chunks/{grep-BRMWFEWR.js → grep-VXIUXM3C.js} +24 -26
- package/chunks/{headlessSafetyWarnings-LJ6FJX77.js → headlessSafetyWarnings-TBE35GJ4.js} +24 -26
- package/chunks/initializer-2Y7SLOKV.js +61 -0
- 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-ZAFHZ7OS.js +65 -0
- package/chunks/loadedSettingsAdapter-6KJXD6M3.js +60 -0
- package/chunks/{loop-wakeup-33GPXJLA.js → loop-wakeup-CITGGQHA.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-HKLRS2HQ.js} +24 -26
- package/chunks/nonInteractiveCli-5W4GIZQM.js +96 -0
- package/chunks/{notebook-edit-D4R4ZLMA.js → notebook-edit-Y6SKSGTT.js} +52 -26
- package/chunks/{openaiContentGenerator-F74IPQ6E.js → openaiContentGenerator-J7G2FYJT.js} +13 -14
- package/chunks/{pt-SY5NCFGR.js → pt-TNZRNLQB.js} +1 -0
- package/chunks/{qwenContentGenerator-ATTK5P4D.js → qwenContentGenerator-5XIEM5GV.js} +26 -28
- package/chunks/{qwenOAuth2-K4AASPCV.js → qwenOAuth2-AG3PFFLZ.js} +4 -4
- package/chunks/{read-file-767G23OY.js → read-file-J7D552ZJ.js} +9 -10
- package/chunks/{read-mcp-resource-I5HCZJ6X.js → read-mcp-resource-DQQW7H7T.js} +2 -2
- package/chunks/{ripGrep-4OMMGSWX.js → ripGrep-IEIFIWP4.js} +24 -26
- package/chunks/{ru-FWNXJG4F.js → ru-NIAUBKCN.js} +1 -0
- package/chunks/{run-qwen-serve-REKSTYRA.js → run-qwen-serve-SGEEVMXD.js} +149 -41
- package/chunks/{scheduler-UNTFDQLG.js → scheduler-7CQI3S4Q.js} +24 -26
- package/chunks/{send-message-2DAFXEYP.js → send-message-EE4TWKVU.js} +2 -2
- package/chunks/{serve-KZ56QB5S.js → serve-V6GVZR6U.js} +31 -31
- package/chunks/{server-BV5TZUMU.js → server-4QMUWXPW.js} +6996 -5864
- package/chunks/{session-OIBXFSGD.js → session-NRO7UFOY.js} +62 -57
- package/chunks/{settings-WJTCBIRA.js → settings-SGWRDQSC.js} +30 -30
- package/chunks/{shell-WC52IBHW.js → shell-62ANGIHL.js} +24 -26
- package/chunks/{skill-U7F7JR4M.js → skill-VWAQAWW6.js} +39 -13
- package/chunks/{spawnChannel-EI2E5BCW.js → spawnChannel-3VHW5EPY.js} +26 -28
- package/chunks/{src-4F6FBZFI.js → src-KUV5J5Q2.js} +52 -28
- package/chunks/{startInteractiveUI-SFRVB3CE.js → startInteractiveUI-6EYJN3JV.js} +2588 -2371
- 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-LPOGCPM7.js} +24 -26
- package/chunks/{team-delete-HGHFG23B.js → team-delete-LKBYPASD.js} +5 -5
- package/chunks/{theme-manager-DICFCT3P.js → theme-manager-LYLGAERF.js} +25 -27
- package/chunks/{todoWrite-IFBMN3FH.js → todoWrite-OYXKTVYN.js} +4 -4
- package/chunks/{tool-search-L5K7HLER.js → tool-search-YPUFJ3ZQ.js} +102 -18
- package/chunks/trustedFolders-5B24TMEA.js +73 -0
- package/chunks/types-QX5C3CHJ.js +12 -0
- package/chunks/{validateNonInterActiveAuth-GCH4Z6KI.js → validateNonInterActiveAuth-BTDTYOVT.js} +57 -54
- package/chunks/{web-fetch-B5IIQ5TT.js → web-fetch-EEB5LZYU.js} +28 -15
- package/chunks/{workflow-OB3AND7I.js → workflow-LAWIW5LI.js} +32 -33
- package/chunks/workspace-providers-status-PIAFVYHA.js +62 -0
- package/chunks/workspace-service-YAIOD4HG.js +71 -0
- package/chunks/{write-file-SEXBNDZM.js → write-file-PCV226DJ.js} +63 -30
- 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 +6 -3
- package/web-shell/assets/{arc-D_ae_Y9k.js → arc-DA7r8Ueo.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-BMLRjppa.js → architectureDiagram-3BPJPVTR-ZDUxPtZ2.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-qVDQC8KL.js → blockDiagram-GPEHLZMM-vrtOf1kJ.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CxWS6MBd.js → c4Diagram-AAUBKEIU-BHFjzIi4.js} +1 -1
- package/web-shell/assets/channel-iRo68q4Q.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-BtNuY5Yp.js → chunk-2J33WTMH-mdeQVz59.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BU-x368d.js → chunk-4BX2VUAB-BkKMlwBX.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DRgTLvBu.js → chunk-55IACEB6-B7bnXNfu.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-D2aElv7q.js → chunk-727SXJPM-DGz8Mm6i.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BwHCMRQ0.js → chunk-AQP2D5EJ-BQAydUNk.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-BMyPH-ku.js → chunk-FMBD7UC4-GHr2LN_p.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BNKTstUf.js → chunk-ND2GUHAM-7R91lnUx.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-gD3vsFId.js → chunk-QZHKN3VN-aTJD3lSQ.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-iHF24a8X.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-iHF24a8X.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BG9FAsXE.js → cose-bilkent-S5V4N54A-BTf8t1RL.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-Cy1sR7om.js → dagre-BM42HDAG-_sgp3WuA.js} +1 -1
- package/web-shell/assets/default-aEtf0G7-.svg +1 -0
- package/web-shell/assets/{diagram-2AECGRRQ-Bxi1I_Vu.js → diagram-2AECGRRQ-CROtRy1w.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BGCJjO6y.js → diagram-5GNKFQAL-BqGRzwSc.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CMTeLXp7.js → diagram-KO2AKTUF-CMrcEtA7.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BN1wyAGh.js → diagram-LMA3HP47-BRydGNW5.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-UYSG_zcp.js → diagram-OG6HWLK6-D0ilgNjV.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DqXL08lw.js → erDiagram-TEJ5UH35-2lnQeJUM.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BPJ9SFji.js → flowDiagram-I6XJVG4X-C_ZMdQiC.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-BEd9Pnms.js → ganttDiagram-6RSMTGT7-Dw9V_Ny0.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DrNRH3oi.js → gitGraphDiagram-PVQCEYII-HDXI-F1B.js} +1 -1
- package/web-shell/assets/index-CHmzAWys.css +5 -0
- package/web-shell/assets/index-w6GTOHh1.js +713 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CFYBrkVI.js → infoDiagram-5YYISTIA-CuB8Ebua.js} +1 -1
- package/web-shell/assets/insert-DmRbh9Rv.svg +1 -0
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Dxsddth7.js → ishikawaDiagram-YF4QCWOH-D_tyhVwh.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-DxaDK80t.js → journeyDiagram-JHISSGLW-CgCwJQNU.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-Q0jQCOct.js → kanban-definition-UN3LZRKU-PZUtcbPx.js} +1 -1
- package/web-shell/assets/{linear-DGGM2kcP.js → linear-CZqRdJIU.js} +1 -1
- package/web-shell/assets/{mermaid.core-ByoxnWut.js → mermaid.core-CPW_4UEF.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-C0ZseHsi.js → mindmap-definition-RKZ34NQL-D_Y75ID7.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-MQXNhl5A.js → pieDiagram-4H26LBE5-Q4dTyLeF.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIR4ee2A.js → quadrantDiagram-W4KKPZXB-ckw329Ft.js} +1 -1
- package/web-shell/assets/queue-DWpnpFgW.svg +1 -0
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BTR0UdYQ.js → requirementDiagram-4Y6WPE33-DbVDm4It.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-sfnhMELN.js → sankeyDiagram-5OEKKPKP-CHuZ_ecH.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DXczHOHH.js → sequenceDiagram-3UESZ5HK-DU2YSpq-.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-DdE_KQFH.js → stateDiagram-AJRCARHV-CA9PEBUo.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-t1LRI0oY.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-DIc61uE8.js → timeline-definition-PNZ67QCA-Bhlo4WVc.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BF7ODmxB.js → vennDiagram-CIIHVFJN-6xtPLsyl.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-3pc1MEaw.js → wardley-L42UT6IY-3eozmXPf.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-9jnPcZuP.js → wardleyDiagram-YWT4CUSO-BOn6hKss.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-DcthaZK6.js → xychartDiagram-2RQKCTM6-BsP4-I_y.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-5P5XGNYH.js +0 -93
- package/chunks/chunk-B6HQGTYR.js +0 -410
- package/chunks/chunk-SEZC2725.js +0 -36
- package/chunks/chunk-SYCJMSIJ.js +0 -82
- package/chunks/daemon-status-provider-CSL3BUOY.js +0 -68
- package/chunks/initializer-P5AXF7PV.js +0 -61
- package/chunks/list-6COK34BP.js +0 -65
- package/chunks/loadedSettingsAdapter-XIUTN245.js +0 -60
- package/chunks/nonInteractiveCli-7575LBXP.js +0 -91
- package/chunks/workspace-providers-status-ZIR5EPOO.js +0 -62
- 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
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
buildPermissionSettings
|
|
5
|
+
} from "./chunk-ODLIHNOY.js";
|
|
6
|
+
import {
|
|
7
|
+
resolveVoiceStreamConfig,
|
|
8
|
+
resolveVoiceTranscriptionConfig,
|
|
9
|
+
transcribeVoiceAudio
|
|
10
|
+
} from "./chunk-BTLJ2MF5.js";
|
|
11
|
+
import {
|
|
12
|
+
getVoiceSettingsScope,
|
|
13
|
+
isSelectableVoiceModel,
|
|
14
|
+
isVoiceEnabled,
|
|
15
|
+
readVoiceLanguage,
|
|
16
|
+
readVoiceMode,
|
|
17
|
+
readVoiceModel,
|
|
18
|
+
resolveVoiceTransport
|
|
19
|
+
} from "./chunk-4LUZAKMK.js";
|
|
20
|
+
import {
|
|
21
|
+
WorkspacePermissionRulesSessionRequiredError,
|
|
22
|
+
WorkspaceSettingsPartialPersistError
|
|
23
|
+
} from "./chunk-BMFMJINR.js";
|
|
3
24
|
import {
|
|
4
25
|
MCP_RESTART_SERVER_DEADLINE_MS
|
|
5
26
|
} from "./chunk-P7M4GA57.js";
|
|
@@ -11,10 +32,11 @@ import {
|
|
|
11
32
|
WorkspaceInitPathEscapeError,
|
|
12
33
|
WorkspaceInitRaceError,
|
|
13
34
|
WorkspaceInitSymlinkError
|
|
14
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-JE5FVRPC.js";
|
|
15
36
|
import {
|
|
16
|
-
|
|
17
|
-
|
|
37
|
+
getPersistScopeForModelSelection,
|
|
38
|
+
loadSettings
|
|
39
|
+
} from "./chunk-FKAVULLM.js";
|
|
18
40
|
import {
|
|
19
41
|
SERVE_CONTROL_EXT_METHODS,
|
|
20
42
|
SERVE_STATUS_EXT_METHODS,
|
|
@@ -27,7 +49,19 @@ import {
|
|
|
27
49
|
createIdleWorkspaceProvidersStatus,
|
|
28
50
|
createIdleWorkspaceSkillsStatus,
|
|
29
51
|
mapDomainErrorToErrorKind
|
|
30
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-L7OKCI7T.js";
|
|
53
|
+
import {
|
|
54
|
+
getWorkspaceTrustStatus
|
|
55
|
+
} from "./chunk-F3ZYSEY6.js";
|
|
56
|
+
import {
|
|
57
|
+
writeStderrLine
|
|
58
|
+
} from "./chunk-Y6Z2O3WR.js";
|
|
59
|
+
import {
|
|
60
|
+
ModelsConfig
|
|
61
|
+
} from "./chunk-YAINVQ3Q.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
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
getEffectiveSupportedModes
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3TV3HUWZ.js";
|
|
6
6
|
import {
|
|
7
7
|
require_jsx_runtime
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-T4T2FNV4.js";
|
|
9
9
|
import {
|
|
10
10
|
require_react
|
|
11
11
|
} from "./chunk-KYMBIKIW.js";
|
|
12
12
|
import {
|
|
13
13
|
uiTelemetryService
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-QNKBEJO2.js";
|
|
15
15
|
import {
|
|
16
16
|
init_esbuild_shims
|
|
17
17
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -24,6 +24,12 @@ import {
|
|
|
24
24
|
init_esbuild_shims();
|
|
25
25
|
var import_react = __toESM(require_react(), 1);
|
|
26
26
|
var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
|
|
27
|
+
var EMPTY_SKILL_METRICS = {
|
|
28
|
+
totalCalls: 0,
|
|
29
|
+
totalSuccess: 0,
|
|
30
|
+
totalFail: 0,
|
|
31
|
+
byName: {}
|
|
32
|
+
};
|
|
27
33
|
function areModelMetricsCoreEqual(a, b) {
|
|
28
34
|
if (a.api.totalRequests !== b.api.totalRequests || a.api.totalErrors !== b.api.totalErrors || a.api.totalLatencyMs !== b.api.totalLatencyMs) {
|
|
29
35
|
return false;
|
|
@@ -59,6 +65,27 @@ function areToolCallStatsEqual(a, b) {
|
|
|
59
65
|
return true;
|
|
60
66
|
}
|
|
61
67
|
__name(areToolCallStatsEqual, "areToolCallStatsEqual");
|
|
68
|
+
function areSkillCallStatsEqual(a, b) {
|
|
69
|
+
return a.count === b.count && a.success === b.success && a.fail === b.fail;
|
|
70
|
+
}
|
|
71
|
+
__name(areSkillCallStatsEqual, "areSkillCallStatsEqual");
|
|
72
|
+
function areSkillMetricsEqual(a, b) {
|
|
73
|
+
if (a.totalCalls !== b.totalCalls || a.totalSuccess !== b.totalSuccess || a.totalFail !== b.totalFail) {
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
const aKeys = Object.keys(a.byName);
|
|
77
|
+
const bKeys = Object.keys(b.byName);
|
|
78
|
+
if (aKeys.length !== bKeys.length) return false;
|
|
79
|
+
for (const key of aKeys) {
|
|
80
|
+
const skillA = a.byName[key];
|
|
81
|
+
const skillB = b.byName[key];
|
|
82
|
+
if (!skillB || !areSkillCallStatsEqual(skillA, skillB)) {
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
__name(areSkillMetricsEqual, "areSkillMetricsEqual");
|
|
62
89
|
function areMetricsEqual(a, b) {
|
|
63
90
|
if (a === b) return true;
|
|
64
91
|
if (!a || !b) return false;
|
|
@@ -83,6 +110,12 @@ function areMetricsEqual(a, b) {
|
|
|
83
110
|
return false;
|
|
84
111
|
}
|
|
85
112
|
}
|
|
113
|
+
if (!areSkillMetricsEqual(
|
|
114
|
+
a.skills ?? EMPTY_SKILL_METRICS,
|
|
115
|
+
b.skills ?? EMPTY_SKILL_METRICS
|
|
116
|
+
)) {
|
|
117
|
+
return false;
|
|
118
|
+
}
|
|
86
119
|
const modelsAKeys = Object.keys(a.models);
|
|
87
120
|
const modelsBKeys = Object.keys(b.models);
|
|
88
121
|
if (modelsAKeys.length !== modelsBKeys.length) return false;
|
|
@@ -94,13 +127,82 @@ function areMetricsEqual(a, b) {
|
|
|
94
127
|
return true;
|
|
95
128
|
}
|
|
96
129
|
__name(areMetricsEqual, "areMetricsEqual");
|
|
130
|
+
function cloneSessionMetrics(metrics) {
|
|
131
|
+
return {
|
|
132
|
+
models: Object.fromEntries(
|
|
133
|
+
Object.entries(metrics.models).map(([name, model]) => [
|
|
134
|
+
name,
|
|
135
|
+
{
|
|
136
|
+
api: { ...model.api },
|
|
137
|
+
tokens: { ...model.tokens },
|
|
138
|
+
bySource: Object.fromEntries(
|
|
139
|
+
Object.entries(model.bySource).map(([source, sourceMetrics]) => [
|
|
140
|
+
source,
|
|
141
|
+
{
|
|
142
|
+
api: { ...sourceMetrics.api },
|
|
143
|
+
tokens: { ...sourceMetrics.tokens }
|
|
144
|
+
}
|
|
145
|
+
])
|
|
146
|
+
)
|
|
147
|
+
}
|
|
148
|
+
])
|
|
149
|
+
),
|
|
150
|
+
tools: {
|
|
151
|
+
totalCalls: metrics.tools.totalCalls,
|
|
152
|
+
totalSuccess: metrics.tools.totalSuccess,
|
|
153
|
+
totalFail: metrics.tools.totalFail,
|
|
154
|
+
totalDurationMs: metrics.tools.totalDurationMs,
|
|
155
|
+
totalDecisions: { ...metrics.tools.totalDecisions },
|
|
156
|
+
byName: Object.fromEntries(
|
|
157
|
+
Object.entries(metrics.tools.byName).map(([name, stats]) => [
|
|
158
|
+
name,
|
|
159
|
+
{
|
|
160
|
+
count: stats.count,
|
|
161
|
+
success: stats.success,
|
|
162
|
+
fail: stats.fail,
|
|
163
|
+
durationMs: stats.durationMs,
|
|
164
|
+
decisions: { ...stats.decisions }
|
|
165
|
+
}
|
|
166
|
+
])
|
|
167
|
+
)
|
|
168
|
+
},
|
|
169
|
+
files: {
|
|
170
|
+
totalLinesAdded: metrics.files.totalLinesAdded,
|
|
171
|
+
totalLinesRemoved: metrics.files.totalLinesRemoved
|
|
172
|
+
},
|
|
173
|
+
...metrics.skills ? {
|
|
174
|
+
skills: {
|
|
175
|
+
totalCalls: metrics.skills.totalCalls,
|
|
176
|
+
totalSuccess: metrics.skills.totalSuccess,
|
|
177
|
+
totalFail: metrics.skills.totalFail,
|
|
178
|
+
byName: Object.fromEntries(
|
|
179
|
+
Object.entries(metrics.skills.byName).map(([name, stats]) => [
|
|
180
|
+
name,
|
|
181
|
+
{
|
|
182
|
+
count: stats.count,
|
|
183
|
+
success: stats.success,
|
|
184
|
+
fail: stats.fail
|
|
185
|
+
}
|
|
186
|
+
])
|
|
187
|
+
)
|
|
188
|
+
}
|
|
189
|
+
} : {}
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
__name(cloneSessionMetrics, "cloneSessionMetrics");
|
|
193
|
+
function getMetricsForDisplay(sessionId) {
|
|
194
|
+
return cloneSessionMetrics(
|
|
195
|
+
sessionId ? uiTelemetryService.getMetricsForSession(sessionId) : uiTelemetryService.getMetrics()
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
__name(getMetricsForDisplay, "getMetricsForDisplay");
|
|
97
199
|
var SessionStatsContext = (0, import_react.createContext)(
|
|
98
200
|
void 0
|
|
99
201
|
);
|
|
100
202
|
var createDefaultStats = /* @__PURE__ */ __name((sessionId = "") => ({
|
|
101
203
|
sessionId,
|
|
102
204
|
sessionStartTime: /* @__PURE__ */ new Date(),
|
|
103
|
-
metrics:
|
|
205
|
+
metrics: getMetricsForDisplay(sessionId),
|
|
104
206
|
lastPromptTokenCount: 0,
|
|
105
207
|
promptCount: 0
|
|
106
208
|
}), "createDefaultStats");
|
|
@@ -114,12 +216,13 @@ var SessionStatsProvider = /* @__PURE__ */ __name(({ sessionId, children }) => {
|
|
|
114
216
|
lastPromptTokenCount
|
|
115
217
|
}) => {
|
|
116
218
|
setStats((prevState) => {
|
|
117
|
-
|
|
219
|
+
const nextMetrics = prevState.sessionId ? getMetricsForDisplay(prevState.sessionId) : cloneSessionMetrics(metrics);
|
|
220
|
+
if (prevState.lastPromptTokenCount === lastPromptTokenCount && areMetricsEqual(prevState.metrics, nextMetrics)) {
|
|
118
221
|
return prevState;
|
|
119
222
|
}
|
|
120
223
|
return {
|
|
121
224
|
...prevState,
|
|
122
|
-
metrics,
|
|
225
|
+
metrics: nextMetrics,
|
|
123
226
|
lastPromptTokenCount
|
|
124
227
|
};
|
|
125
228
|
});
|
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import {
|
|
4
|
-
MAX_WORKSPACE_PATH_LENGTH
|
|
5
|
-
} from "./chunk-SEZC2725.js";
|
|
6
3
|
import {
|
|
7
4
|
init_esbuild_shims
|
|
8
5
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -10,6 +7,24 @@ import {
|
|
|
10
7
|
__name
|
|
11
8
|
} from "./chunk-J2S4EL5Y.js";
|
|
12
9
|
|
|
10
|
+
// packages/acp-bridge/src/workspacePaths.ts
|
|
11
|
+
init_esbuild_shims();
|
|
12
|
+
import { realpathSync } from "node:fs";
|
|
13
|
+
import * as path from "node:path";
|
|
14
|
+
function canonicalizeWorkspace(p) {
|
|
15
|
+
const resolved = path.resolve(p);
|
|
16
|
+
try {
|
|
17
|
+
return realpathSync.native(resolved);
|
|
18
|
+
} catch (err) {
|
|
19
|
+
if (err && typeof err === "object" && err.code === "ENOENT") {
|
|
20
|
+
return resolved;
|
|
21
|
+
}
|
|
22
|
+
throw err;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
__name(canonicalizeWorkspace, "canonicalizeWorkspace");
|
|
26
|
+
var MAX_WORKSPACE_PATH_LENGTH = 4096;
|
|
27
|
+
|
|
13
28
|
// packages/acp-bridge/src/bridgeErrors.ts
|
|
14
29
|
init_esbuild_shims();
|
|
15
30
|
var NOT_CURRENTLY_GENERATING_CANCEL_MESSAGE = "Not currently generating";
|
|
@@ -220,12 +235,12 @@ var WorkspaceInitConflictError = class extends Error {
|
|
|
220
235
|
}
|
|
221
236
|
path;
|
|
222
237
|
existingSize;
|
|
223
|
-
constructor(
|
|
238
|
+
constructor(path2, existingSize) {
|
|
224
239
|
super(
|
|
225
|
-
`Workspace file ${
|
|
240
|
+
`Workspace file ${path2} already exists (${existingSize} bytes); pass {force: true} to overwrite.`
|
|
226
241
|
);
|
|
227
242
|
this.name = "WorkspaceInitConflictError";
|
|
228
|
-
this.path =
|
|
243
|
+
this.path = path2;
|
|
229
244
|
this.existingSize = existingSize;
|
|
230
245
|
}
|
|
231
246
|
};
|
|
@@ -331,8 +346,23 @@ var BranchWhilePromptActiveError = class extends Error {
|
|
|
331
346
|
this.sessionId = sessionId;
|
|
332
347
|
}
|
|
333
348
|
};
|
|
349
|
+
var CdWhilePromptActiveError = class extends Error {
|
|
350
|
+
static {
|
|
351
|
+
__name(this, "CdWhilePromptActiveError");
|
|
352
|
+
}
|
|
353
|
+
sessionId;
|
|
354
|
+
constructor(sessionId) {
|
|
355
|
+
super(
|
|
356
|
+
`Cannot change directory for session ${sessionId}: a prompt is currently active`
|
|
357
|
+
);
|
|
358
|
+
this.name = "CdWhilePromptActiveError";
|
|
359
|
+
this.sessionId = sessionId;
|
|
360
|
+
}
|
|
361
|
+
};
|
|
334
362
|
|
|
335
363
|
export {
|
|
364
|
+
canonicalizeWorkspace,
|
|
365
|
+
MAX_WORKSPACE_PATH_LENGTH,
|
|
336
366
|
NOT_CURRENTLY_GENERATING_CANCEL_MESSAGE,
|
|
337
367
|
isNotCurrentlyGeneratingCancelError,
|
|
338
368
|
SessionNotFoundError,
|
|
@@ -357,7 +387,8 @@ export {
|
|
|
357
387
|
McpServerRestartFailedError,
|
|
358
388
|
SessionBusyError,
|
|
359
389
|
InvalidRewindTargetError,
|
|
360
|
-
BranchWhilePromptActiveError
|
|
390
|
+
BranchWhilePromptActiveError,
|
|
391
|
+
CdWhilePromptActiveError
|
|
361
392
|
};
|
|
362
393
|
/**
|
|
363
394
|
* @license
|