@qwen-code/qwen-code 0.19.2 → 0.19.3-nightly.20260701.a974594d7
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 +34 -10
- package/bundled/loop/SKILL.test.ts +52 -0
- package/bundled/loop/autonomous-loop.test.ts +59 -0
- package/bundled/loop/autonomous-loop.ts +102 -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 +864 -0
- package/bundled/loop/loop-tick-resolver.ts +416 -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 +77 -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 +53 -1
- package/bundled/qc-helper/docs/features/status-line.md +3 -3
- package/bundled/qc-helper/docs/ide-integration/ide-integration.md +4 -4
- 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-UZHJ73JB.js} +29 -27
- package/chunks/{StandaloneSessionPicker-S22XBSN6.js → StandaloneSessionPicker-GGUIZWCE.js} +42 -37
- package/chunks/{acpAgent-4MCETHF2.js → acpAgent-QYZFICEZ.js} +1292 -332
- package/chunks/{agent-K3ENVYSB.js → agent-2EN7YNSW.js} +24 -23
- package/chunks/{agent-headless-HO3V3A3A.js → agent-headless-SLTEZ5LV.js} +24 -23
- package/chunks/{anthropicContentGenerator-E3TQ5XJJ.js → anthropicContentGenerator-CA3JTAMO.js} +33 -12
- package/chunks/{artifact-tool-QA4KRO3B.js → artifact-tool-RM7WINJO.js} +3 -3
- package/chunks/{askUserQuestion-HMWXW6VN.js → askUserQuestion-J3P6QAJ7.js} +2 -2
- package/chunks/{bridge-4LV2HBH2.js → bridge-HZVAUTMX.js} +29 -28
- package/chunks/{ca-7WC7ELX6.js → ca-RYOETBUW.js} +10 -9
- package/chunks/{chunk-JXQ23SNT.js → chunk-2JKEQWDZ.js} +623 -78
- package/chunks/chunk-32MCHZQC.js +73 -0
- package/chunks/{chunk-PXFFKNCO.js → chunk-35FH347N.js} +5308 -2500
- package/chunks/{chunk-5JZLXFPD.js → chunk-3O2BJMFW.js} +11 -11
- package/chunks/{chunk-2JD55C6G.js → chunk-3TK7FSCP.js} +2 -2
- package/chunks/{chunk-USGMPVOY.js → chunk-4722VFFU.js} +19 -10
- package/chunks/chunk-6FIWYVN4.js +4932 -0
- package/chunks/{chunk-I2RFAW6Q.js → chunk-7SP275SH.js} +7 -5
- package/chunks/{chunk-5R4SBCX6.js → chunk-AIBPG5MB.js} +3 -3
- package/chunks/{chunk-C4K3FEQ2.js → chunk-AVQDCKNF.js} +124 -21
- package/chunks/{chunk-OTBK43JR.js → chunk-B236XPGF.js} +1 -1
- package/chunks/{chunk-WA5OJGFL.js → chunk-B5MPZI4K.js} +458 -125
- package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
- package/chunks/{chunk-4W4T77MO.js → chunk-BLAE2TCO.js} +109 -6
- package/chunks/chunk-BMFMJINR.js +45 -0
- package/chunks/{chunk-T2VDEFUU.js → chunk-BZHLWC6T.js} +2 -2
- package/chunks/{chunk-XU5P23GN.js → chunk-CA4ML3VH.js} +3 -3
- package/chunks/{chunk-WGAEWQTF.js → chunk-DBR7PF4B.js} +1 -2
- package/chunks/{chunk-S566HKUS.js → chunk-DHXWNSJA.js} +15 -1
- package/chunks/{chunk-LLFFKXZZ.js → chunk-DJ25MIU2.js} +167 -43
- package/chunks/{chunk-KBXLIVWQ.js → chunk-DX3TKXNT.js} +2 -2
- package/chunks/{chunk-OIC6S73E.js → chunk-E5I6YSNO.js} +1 -1
- package/chunks/{chunk-TXVGVZYR.js → chunk-ESVSWG6Z.js} +3 -3
- package/chunks/{chunk-EX4W6ZYG.js → chunk-EUURTJY7.js} +1 -1
- package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
- package/chunks/{chunk-F6XNTYNE.js → chunk-FQDMX5IL.js} +30 -307
- package/chunks/{chunk-3QFE4OTE.js → chunk-FR3II765.js} +4 -4
- package/chunks/{chunk-VYFMN7C6.js → chunk-FV4SQ54H.js} +382 -55
- package/chunks/{chunk-ZD3NW5KL.js → chunk-FZY7NH37.js} +63 -9
- package/chunks/{chunk-CI5O6SQL.js → chunk-G525INVW.js} +4 -4
- package/chunks/{chunk-CGOMICBE.js → chunk-GDIG7TMG.js} +34 -1
- package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
- package/chunks/{chunk-TZM5JIAX.js → chunk-GZKQ36JS.js} +10 -7
- package/chunks/{chunk-BS64PXY3.js → chunk-HIYUAXBG.js} +1 -1
- package/chunks/{chunk-TMBPDHXD.js → chunk-HTWHAN44.js} +1 -1
- package/chunks/{chunk-EL5IHQON.js → chunk-HUGAEYZR.js} +6 -27
- package/chunks/{chunk-2BIF2NVV.js → chunk-HWG4XLD7.js} +2 -2
- package/chunks/{chunk-I5T6PIBQ.js → chunk-I4MXURND.js} +1076 -954
- package/chunks/{chunk-JTYRZODB.js → chunk-IBEM64M4.js} +39 -11
- package/chunks/{chunk-XKBP7M7A.js → chunk-IKO44NAT.js} +149 -31
- package/chunks/{chunk-2BAQ3ACS.js → chunk-JERW36RG.js} +404 -4
- package/chunks/{chunk-TOEGRAVX.js → chunk-JV7A66DR.js} +28 -16
- package/chunks/{chunk-3RJ3ZPPR.js → chunk-KKQWC6WS.js} +7 -7
- package/chunks/{chunk-EXMX5YHG.js → chunk-KXVVXAAC.js} +1 -1
- package/chunks/{chunk-Z7XXFPGP.js → chunk-LDWTYE33.js} +1 -1
- package/chunks/{chunk-X6EDWN44.js → chunk-LWGLBVWA.js} +1 -1
- package/chunks/{chunk-NYOHZYHM.js → chunk-LXEW6BHF.js} +45 -3
- package/chunks/{chunk-BGUDAULQ.js → chunk-LXGWLOCM.js} +5 -5
- package/chunks/{chunk-ZUAXI2OA.js → chunk-M2U5NM24.js} +188 -11366
- package/chunks/{chunk-BNXANYLH.js → chunk-MOUXUCXQ.js} +81 -1
- package/chunks/{chunk-FPACXT7T.js → chunk-MTJVHQDP.js} +534 -164
- package/chunks/{chunk-UAARJR2G.js → chunk-N4V4VBP6.js} +2 -2
- package/chunks/chunk-NIOPRZNN.js +27 -0
- package/chunks/{chunk-2TJ3YN6Q.js → chunk-NOYV2NXI.js} +517 -490
- package/chunks/{chunk-PRYMDRBV.js → chunk-NPQWQYU6.js} +1 -1
- package/chunks/{chunk-J6AW7O5D.js → chunk-NVTRORSK.js} +2 -2
- package/chunks/{chunk-PF523XJX.js → chunk-OE5J6UA7.js} +1 -1
- package/chunks/{chunk-RS4HRC75.js → chunk-OEY3YAL2.js} +99 -8
- package/chunks/{chunk-R36VMVEP.js → chunk-PLQTLKMR.js} +5 -5
- package/chunks/{chunk-UN3C6GOR.js → chunk-PPFWEV7G.js} +10 -108
- package/chunks/chunk-Q3JOGB4U.js +481 -0
- package/chunks/{chunk-HG6YKEBI.js → chunk-Q7TDHJ2G.js} +192 -30
- package/chunks/{chunk-EW6C27XX.js → chunk-QHHNFG22.js} +9 -3
- package/chunks/chunk-QYUE6W3T.js +123 -0
- package/chunks/{chunk-GZCJS5WH.js → chunk-SJBIFVD2.js} +2 -2
- package/chunks/{chunk-3UALQ56H.js → chunk-T42ACHFI.js} +1 -1
- package/chunks/chunk-T44AF4I6.js +690 -0
- package/chunks/{chunk-DBZUXSSV.js → chunk-TMILTLP3.js} +6 -6
- package/chunks/{chunk-EEEZIVFJ.js → chunk-TOAUDIS7.js} +1 -1
- package/chunks/chunk-UAKXW3DN.js +30 -0
- package/chunks/{chunk-VQRYPFCV.js → chunk-V5YJAUHW.js} +10 -460
- package/chunks/{chunk-D5E5TMYH.js → chunk-VHRREANT.js} +16 -2
- package/chunks/{chunk-5RVSM6NW.js → chunk-VN4CKYUW.js} +1 -1
- package/chunks/chunk-VXGPYF7U.js +37 -0
- package/chunks/{chunk-UAARVVBI.js → chunk-WGY3GIPP.js} +1 -1
- package/chunks/{chunk-GYZQA2FO.js → chunk-WJAY4WXR.js} +1 -1
- package/chunks/chunk-XKSCTXPK.js +167 -0
- package/chunks/chunk-YCEHOJZJ.js +840 -0
- package/chunks/{chunk-BG4BIP7F.js → chunk-YCRTJYSQ.js} +4 -2
- package/chunks/{chunk-CGEGHF2C.js → chunk-YPCPZSZB.js} +1 -1
- package/chunks/chunk-YTFBURQD.js +313 -0
- package/chunks/{chunk-HGNSRCRB.js → chunk-YXK4GPYO.js} +1 -1
- package/chunks/{chunk-OQHQHJRK.js → chunk-Z34RYLRO.js} +151 -4775
- package/chunks/chunk-ZGSV5ORL.js +11273 -0
- package/chunks/{computer-use-6BBRNT6S.js → computer-use-FCNWHVPW.js} +103 -49
- package/chunks/{contextCommand-UJAJ6N57.js → contextCommand-FVFMZZEU.js} +26 -25
- package/chunks/{cron-create-4KQE6YLH.js → cron-create-IY5NMIHQ.js} +4 -4
- package/chunks/{cron-delete-THME66UP.js → cron-delete-OLNEQWKO.js} +6 -6
- package/chunks/{cron-list-7A54SJ5N.js → cron-list-YAUAUV24.js} +5 -5
- package/chunks/{daemon-status-provider-CSL3BUOY.js → daemon-status-provider-42JEXENZ.js} +32 -32
- package/chunks/{de-ACHALDED.js → de-HB5NJXGB.js} +10 -9
- package/chunks/{dist-BD27IA3L.js → dist-4FCNM6KJ.js} +2 -2
- package/chunks/{dist-OD2FY543.js → dist-K4XZILIO.js} +1 -1
- package/chunks/{dist-BOOH5JWN.js → dist-SU6L7ZNJ.js} +114 -9
- 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-FFFEC6P4.js} +25 -24
- package/chunks/{edit-7J6WXARF.js → edit-32ILSGZY.js} +72 -30
- package/chunks/{en-NCUBOJOY.js → en-U3LWGSFX.js} +19 -9
- package/chunks/{enter-worktree-KULCKJPJ.js → enter-worktree-XWZKIN6A.js} +24 -23
- package/chunks/{enterPlanMode-H2CIOLMH.js → enterPlanMode-LPFFY7BJ.js} +24 -23
- package/chunks/{errors-6G2JYR54.js → errors-UXBPYPI2.js} +26 -25
- package/chunks/{exit-worktree-ECBWBVC5.js → exit-worktree-IBS4UIU7.js} +24 -23
- package/chunks/{exitPlanMode-DQV56GTW.js → exitPlanMode-JA72YHII.js} +24 -23
- package/chunks/{fast-path-35JJFS3C.js → fast-path-7UU67Y2W.js} +30 -13
- package/chunks/{fast-path-settings-TSVI53EB.js → fast-path-settings-UQLRFDQP.js} +3 -2
- package/chunks/{fr-GVKZ27MF.js → fr-XY3NQFCM.js} +10 -9
- package/chunks/{gemini-NDTG7WAX.js → gemini-GMVKJNMX.js} +211 -105
- package/chunks/{geminiContentGenerator-XTG6SFLA.js → geminiContentGenerator-7NIFF2L4.js} +4 -4
- package/chunks/{glob-SJ2JBZK4.js → glob-4NJCW5HI.js} +24 -23
- package/chunks/{grep-BRMWFEWR.js → grep-PAIMLQEL.js} +24 -23
- package/chunks/{initializer-P5AXF7PV.js → initializer-R6KU4VYM.js} +31 -28
- package/chunks/{ja-FKZ2WZ4D.js → ja-J7YAG7SA.js} +10 -9
- package/chunks/{keychain-token-storage-CSYMNRPP.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
- package/chunks/{list-6COK34BP.js → list-H7LXAO64.js} +32 -29
- package/chunks/{loadedSettingsAdapter-XIUTN245.js → loadedSettingsAdapter-H27JMTLU.js} +30 -27
- package/chunks/{loop-wakeup-33GPXJLA.js → loop-wakeup-Y3OIRQFM.js} +7 -7
- package/chunks/{ls-BYQY7RVV.js → ls-TVJEYS7O.js} +4 -4
- package/chunks/{lsp-X54RO4IV.js → lsp-JZSDVR3F.js} +2 -2
- package/chunks/{monitor-DH7KFSJV.js → monitor-JSIHDPXP.js} +24 -23
- package/chunks/nonInteractiveCli-Y4CHOETG.js +100 -0
- package/chunks/{notebook-edit-D4R4ZLMA.js → notebook-edit-SHRNL2UM.js} +52 -23
- package/chunks/{openaiContentGenerator-F74IPQ6E.js → openaiContentGenerator-ORZZ7VFO.js} +13 -12
- package/chunks/{pt-SY5NCFGR.js → pt-6RTAA6SS.js} +10 -9
- package/chunks/{qwenContentGenerator-ATTK5P4D.js → qwenContentGenerator-H643PL2G.js} +26 -25
- package/chunks/{qwenOAuth2-K4AASPCV.js → qwenOAuth2-OI2B7PES.js} +5 -4
- package/chunks/{read-file-767G23OY.js → read-file-5PRNPTTY.js} +8 -8
- package/chunks/{read-mcp-resource-I5HCZJ6X.js → read-mcp-resource-QTXGKTEV.js} +2 -2
- package/chunks/{ripGrep-4OMMGSWX.js → ripGrep-JIKZMABJ.js} +24 -23
- package/chunks/{ru-FWNXJG4F.js → ru-AUBGJ2C4.js} +10 -9
- package/chunks/{run-qwen-serve-REKSTYRA.js → run-qwen-serve-PQV7QOHZ.js} +284 -52
- package/chunks/{scheduler-UNTFDQLG.js → scheduler-OS3R5MGU.js} +24 -23
- package/chunks/{send-message-2DAFXEYP.js → send-message-DKGHWSTF.js} +2 -2
- package/chunks/{serve-KZ56QB5S.js → serve-LVYZDKCZ.js} +31 -29
- package/chunks/{server-BV5TZUMU.js → server-P4YIH35I.js} +11458 -8447
- package/chunks/{session-OIBXFSGD.js → session-DE4TZBKH.js} +195 -58
- package/chunks/{settings-WJTCBIRA.js → settings-DFTYMJYF.js} +30 -27
- package/chunks/{shell-WC52IBHW.js → shell-3GNQLNV7.js} +24 -23
- package/chunks/{skill-U7F7JR4M.js → skill-NCNG4KKZ.js} +38 -11
- package/chunks/{spawnChannel-EI2E5BCW.js → spawnChannel-DHRIMDVL.js} +26 -25
- package/chunks/{src-4F6FBZFI.js → src-PNZYGM3R.js} +104 -28
- package/chunks/{startInteractiveUI-SFRVB3CE.js → startInteractiveUI-P6GZBFQW.js} +2817 -2500
- package/chunks/{syntheticOutput-PPS3HDVA.js → syntheticOutput-X7L5HWLN.js} +3 -3
- package/chunks/{task-create-OUYCA553.js → task-create-AWEUI4GI.js} +6 -6
- package/chunks/{task-list-WAX7I2IA.js → task-list-KZ3VJLDU.js} +5 -5
- package/chunks/{task-stop-CAIL6FNH.js → task-stop-GUNOZKJ5.js} +2 -2
- package/chunks/{task-update-AHEO5OUT.js → task-update-Y56GP6DU.js} +6 -6
- package/chunks/{team-create-3WC7CIIW.js → team-create-6JMW3KQK.js} +24 -23
- package/chunks/{team-delete-HGHFG23B.js → team-delete-6AFRGDJY.js} +5 -5
- package/chunks/{theme-manager-DICFCT3P.js → theme-manager-FEHQO22G.js} +25 -24
- package/chunks/{todoWrite-IFBMN3FH.js → todoWrite-JRS6NOEU.js} +4 -4
- package/chunks/{tool-search-L5K7HLER.js → tool-search-IXAEKS7J.js} +101 -16
- package/chunks/trustedFolders-SJRXNHZE.js +76 -0
- package/chunks/types-QX5C3CHJ.js +12 -0
- package/chunks/{validateNonInterActiveAuth-GCH4Z6KI.js → validateNonInterActiveAuth-HCH7OBDH.js} +56 -51
- package/chunks/{web-fetch-B5IIQ5TT.js → web-fetch-RELNL37A.js} +29 -15
- package/chunks/{workflow-OB3AND7I.js → workflow-M2COBI7R.js} +38 -32
- package/chunks/{workspace-providers-status-ZIR5EPOO.js → workspace-providers-status-GOCWYDMK.js} +32 -29
- package/chunks/workspace-service-34C7SUBU.js +75 -0
- package/chunks/{write-file-SEXBNDZM.js → write-file-E52WRXZL.js} +67 -31
- package/chunks/{zh-RBEGQVQT.js → zh-F5T4WWZO.js} +19 -9
- package/chunks/{zh-TW-QGAVRXT3.js → zh-TW-LKLBTZHE.js} +19 -9
- package/cli-entry.js +20 -9
- package/cli.js +6 -6
- package/locales/ca.js +15 -13
- package/locales/de.js +15 -13
- package/locales/en.js +31 -13
- package/locales/fr.js +16 -14
- package/locales/ja.js +15 -14
- package/locales/pt.js +15 -13
- package/locales/ru.js +15 -13
- package/locales/zh-TW.js +28 -12
- package/locales/zh.js +28 -12
- 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-C2DILvUl.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-BMLRjppa.js → architectureDiagram-3BPJPVTR-b8gZ2cNw.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-qVDQC8KL.js → blockDiagram-GPEHLZMM-BuRpghMj.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CxWS6MBd.js → c4Diagram-AAUBKEIU-2ItdhFmE.js} +1 -1
- package/web-shell/assets/channel-eRvn2UA3.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-BtNuY5Yp.js → chunk-2J33WTMH-B1QXa0q3.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BU-x368d.js → chunk-4BX2VUAB-DXfhKlNq.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DRgTLvBu.js → chunk-55IACEB6-ClSNjxLo.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-D2aElv7q.js → chunk-727SXJPM-Dsh2wisB.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BwHCMRQ0.js → chunk-AQP2D5EJ-C1TkY5AR.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-BMyPH-ku.js → chunk-FMBD7UC4-CGtN9XR6.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BNKTstUf.js → chunk-ND2GUHAM-BHiPi1SS.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-gD3vsFId.js → chunk-QZHKN3VN-CzG3I5o1.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-YZNwy1rx.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-YZNwy1rx.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BG9FAsXE.js → cose-bilkent-S5V4N54A-EgrIoH_K.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-Cy1sR7om.js → dagre-BM42HDAG-BUnpdX8S.js} +1 -1
- package/web-shell/assets/default-aEtf0G7-.svg +1 -0
- package/web-shell/assets/{diagram-2AECGRRQ-Bxi1I_Vu.js → diagram-2AECGRRQ-BlLUCVYu.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BGCJjO6y.js → diagram-5GNKFQAL-FG-enmjQ.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CMTeLXp7.js → diagram-KO2AKTUF-BlzmTONk.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BN1wyAGh.js → diagram-LMA3HP47-CoBQ8mIx.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-UYSG_zcp.js → diagram-OG6HWLK6-DvxV6sX8.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DqXL08lw.js → erDiagram-TEJ5UH35-Jq1tpAoj.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BPJ9SFji.js → flowDiagram-I6XJVG4X-CbtYOry5.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-BEd9Pnms.js → ganttDiagram-6RSMTGT7-ZEn2VEKR.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DrNRH3oi.js → gitGraphDiagram-PVQCEYII-BZh-LkhJ.js} +1 -1
- package/web-shell/assets/index-5FhE0ORO.css +5 -0
- package/web-shell/assets/index-CDTGmqVm.js +720 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CFYBrkVI.js → infoDiagram-5YYISTIA-B9HuZygK.js} +1 -1
- package/web-shell/assets/insert-DmRbh9Rv.svg +1 -0
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Dxsddth7.js → ishikawaDiagram-YF4QCWOH-D76cNpYG.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-DxaDK80t.js → journeyDiagram-JHISSGLW-6bGo7P1t.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-Q0jQCOct.js → kanban-definition-UN3LZRKU-DuYyRBvB.js} +1 -1
- package/web-shell/assets/{linear-DGGM2kcP.js → linear-CpdSW1BC.js} +1 -1
- package/web-shell/assets/{mermaid.core-ByoxnWut.js → mermaid.core-s5xbZMMj.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-C0ZseHsi.js → mindmap-definition-RKZ34NQL-go01fZ2y.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-MQXNhl5A.js → pieDiagram-4H26LBE5-BfuZiEHO.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIR4ee2A.js → quadrantDiagram-W4KKPZXB-DsoINqV6.js} +1 -1
- package/web-shell/assets/queue-DWpnpFgW.svg +1 -0
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BTR0UdYQ.js → requirementDiagram-4Y6WPE33-B7FU4LiU.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-sfnhMELN.js → sankeyDiagram-5OEKKPKP-BEDjFnGB.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DXczHOHH.js → sequenceDiagram-3UESZ5HK-gzmmL5tK.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-DdE_KQFH.js → stateDiagram-AJRCARHV-BtHD4IN_.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DFy6gLDd.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-DIc61uE8.js → timeline-definition-PNZ67QCA-T_8gmMCf.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BF7ODmxB.js → vennDiagram-CIIHVFJN-DdjuqnjO.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-3pc1MEaw.js → wardley-L42UT6IY-Cgtrvb37.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-9jnPcZuP.js → wardleyDiagram-YWT4CUSO-BW3f3-yW.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-DcthaZK6.js → xychartDiagram-2RQKCTM6-BUS9IKkc.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-B6HQGTYR.js +0 -410
- package/chunks/chunk-RKIZXJMB.js +0 -13
- package/chunks/headlessSafetyWarnings-LJ6FJX77.js +0 -57
- 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
|
@@ -1,5 +1,22 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
buildPermissionSettings
|
|
5
|
+
} from "./chunk-DBR7PF4B.js";
|
|
6
|
+
import {
|
|
7
|
+
resolveVoiceStreamConfig,
|
|
8
|
+
resolveVoiceTranscriptionConfig,
|
|
9
|
+
transcribeVoiceAudio
|
|
10
|
+
} from "./chunk-T44AF4I6.js";
|
|
11
|
+
import {
|
|
12
|
+
getVoiceSettingsScope,
|
|
13
|
+
isSelectableVoiceModel,
|
|
14
|
+
isVoiceEnabled,
|
|
15
|
+
readVoiceLanguage,
|
|
16
|
+
readVoiceMode,
|
|
17
|
+
readVoiceModel,
|
|
18
|
+
resolveVoiceTransport
|
|
19
|
+
} from "./chunk-LXEW6BHF.js";
|
|
3
20
|
import {
|
|
4
21
|
MCP_RESTART_SERVER_DEADLINE_MS
|
|
5
22
|
} from "./chunk-P7M4GA57.js";
|
|
@@ -11,10 +28,15 @@ import {
|
|
|
11
28
|
WorkspaceInitPathEscapeError,
|
|
12
29
|
WorkspaceInitRaceError,
|
|
13
30
|
WorkspaceInitSymlinkError
|
|
14
|
-
} from "./chunk-
|
|
31
|
+
} from "./chunk-DHXWNSJA.js";
|
|
15
32
|
import {
|
|
16
|
-
|
|
17
|
-
|
|
33
|
+
WorkspacePermissionRulesSessionRequiredError,
|
|
34
|
+
WorkspaceSettingsPartialPersistError
|
|
35
|
+
} from "./chunk-BMFMJINR.js";
|
|
36
|
+
import {
|
|
37
|
+
getPersistScopeForModelSelection,
|
|
38
|
+
loadSettings
|
|
39
|
+
} from "./chunk-6FIWYVN4.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-VHRREANT.js";
|
|
53
|
+
import {
|
|
54
|
+
getWorkspaceTrustStatus
|
|
55
|
+
} from "./chunk-Z34RYLRO.js";
|
|
56
|
+
import {
|
|
57
|
+
writeStderrLine
|
|
58
|
+
} from "./chunk-Y6Z2O3WR.js";
|
|
59
|
+
import {
|
|
60
|
+
ModelsConfig
|
|
61
|
+
} from "./chunk-35FH347N.js";
|
|
62
|
+
import {
|
|
63
|
+
createDebugLogger
|
|
64
|
+
} from "./chunk-AVQDCKNF.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,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
createDebugLogger
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-AVQDCKNF.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esbuild_shims
|
|
8
8
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -14140,10 +14140,22 @@ var ajvOptions = {
|
|
|
14140
14140
|
// strictSchema defaults to true and prevents use of JSON schemas that
|
|
14141
14141
|
// include unrecognized keywords. The JSON schema spec specifically allows
|
|
14142
14142
|
// for the use of non-standard keywords and the spec-compliant behavior
|
|
14143
|
-
// is to ignore those keywords.
|
|
14144
|
-
|
|
14145
|
-
//
|
|
14146
|
-
|
|
14143
|
+
// is to ignore those keywords.
|
|
14144
|
+
strictSchema: false,
|
|
14145
|
+
// Ajv still validates known formats, but MCP/OpenAPI schemas often include
|
|
14146
|
+
// annotation-only formats like uint64 that would otherwise spam stderr.
|
|
14147
|
+
logger: {
|
|
14148
|
+
// eslint-disable-next-line no-console
|
|
14149
|
+
log: /* @__PURE__ */ __name((...args) => console.log(...args), "log"),
|
|
14150
|
+
warn: /* @__PURE__ */ __name((...args) => {
|
|
14151
|
+
if (typeof args[0] === "string" && args[0].startsWith("unknown format ")) {
|
|
14152
|
+
return;
|
|
14153
|
+
}
|
|
14154
|
+
console.warn(...args);
|
|
14155
|
+
}, "warn"),
|
|
14156
|
+
// eslint-disable-next-line no-console
|
|
14157
|
+
error: /* @__PURE__ */ __name((...args) => console.error(...args), "error")
|
|
14158
|
+
}
|
|
14147
14159
|
};
|
|
14148
14160
|
var ajvDefault = new AjvClass(ajvOptions);
|
|
14149
14161
|
var ajv2020 = new Ajv2020Class(ajvOptions);
|
|
@@ -14999,9 +15011,9 @@ var AgentStatistics = class {
|
|
|
14999
15011
|
const stats = this.getSummary(now);
|
|
15000
15012
|
const sr = stats.totalToolCalls > 0 ? stats.successRate ?? stats.successfulToolCalls / stats.totalToolCalls * 100 : 0;
|
|
15001
15013
|
const lines = [
|
|
15002
|
-
`\
|
|
15003
|
-
`\
|
|
15004
|
-
`\
|
|
15014
|
+
`\u25B8 Task Completed: ${taskDesc}`,
|
|
15015
|
+
`\u25CF Tool Usage: ${stats.totalToolCalls} calls${stats.totalToolCalls ? `, ${sr.toFixed(1)}% success` : ""}`,
|
|
15016
|
+
`\u25CF Duration: ${this.fmtDuration(stats.totalDurationMs)} | \u25CF Rounds: ${stats.rounds}`
|
|
15005
15017
|
];
|
|
15006
15018
|
if (typeof stats.totalTokens === "number") {
|
|
15007
15019
|
const parts = [
|
|
@@ -15009,7 +15021,7 @@ var AgentStatistics = class {
|
|
|
15009
15021
|
`out ${stats.outputTokens ?? 0}`
|
|
15010
15022
|
];
|
|
15011
15023
|
lines.push(
|
|
15012
|
-
`\
|
|
15024
|
+
`\u25CF Tokens: ${stats.totalTokens.toLocaleString()}${parts.length ? ` (${parts.join(", ")})` : ""}`
|
|
15013
15025
|
);
|
|
15014
15026
|
}
|
|
15015
15027
|
return lines.join("\n");
|
|
@@ -15018,23 +15030,23 @@ var AgentStatistics = class {
|
|
|
15018
15030
|
const stats = this.getSummary(now);
|
|
15019
15031
|
const sr = stats.totalToolCalls > 0 ? stats.successRate ?? stats.successfulToolCalls / stats.totalToolCalls * 100 : 0;
|
|
15020
15032
|
const lines = [];
|
|
15021
|
-
lines.push(`\
|
|
15033
|
+
lines.push(`\u25B8 Task Completed: ${taskDesc}`);
|
|
15022
15034
|
lines.push(
|
|
15023
|
-
`\
|
|
15035
|
+
`\u25CF Duration: ${this.fmtDuration(stats.totalDurationMs)} | \u25CF Rounds: ${stats.rounds}`
|
|
15024
15036
|
);
|
|
15025
15037
|
let quality = "Poor execution";
|
|
15026
15038
|
if (sr >= 95) quality = "Excellent execution";
|
|
15027
15039
|
else if (sr >= 85) quality = "Good execution";
|
|
15028
15040
|
else if (sr >= 70) quality = "Fair execution";
|
|
15029
|
-
lines.push(`\
|
|
15041
|
+
lines.push(`\u2713 Quality: ${quality} (${sr.toFixed(1)}% tool success)`);
|
|
15030
15042
|
const d = stats.totalDurationMs;
|
|
15031
15043
|
let speed = "Long execution - consider breaking down tasks";
|
|
15032
15044
|
if (d < 1e4) speed = "Fast completion - under 10 seconds";
|
|
15033
15045
|
else if (d < 6e4) speed = "Good speed - under a minute";
|
|
15034
15046
|
else if (d < 3e5) speed = "Moderate duration - a few minutes";
|
|
15035
|
-
lines.push(`\
|
|
15047
|
+
lines.push(`\u25CF Speed: ${speed}`);
|
|
15036
15048
|
lines.push(
|
|
15037
|
-
`\
|
|
15049
|
+
`\u25CF Tools: ${stats.totalToolCalls} calls, ${sr.toFixed(1)}% success (${stats.successfulToolCalls} ok, ${stats.failedToolCalls} failed)`
|
|
15038
15050
|
);
|
|
15039
15051
|
if (typeof stats.totalTokens === "number") {
|
|
15040
15052
|
const parts = [
|
|
@@ -15042,7 +15054,7 @@ var AgentStatistics = class {
|
|
|
15042
15054
|
`out ${stats.outputTokens ?? 0}`
|
|
15043
15055
|
];
|
|
15044
15056
|
lines.push(
|
|
15045
|
-
`\
|
|
15057
|
+
`\u25CF Tokens: ${stats.totalTokens.toLocaleString()} (${parts.join(", ")})`
|
|
15046
15058
|
);
|
|
15047
15059
|
}
|
|
15048
15060
|
if (stats.toolUsage && stats.toolUsage.length) {
|
|
@@ -15057,7 +15069,7 @@ var AgentStatistics = class {
|
|
|
15057
15069
|
}
|
|
15058
15070
|
const tips = this.generatePerformanceTips(stats);
|
|
15059
15071
|
if (tips.length) {
|
|
15060
|
-
lines.push("\n\
|
|
15072
|
+
lines.push("\n\u2605 Performance Insights:");
|
|
15061
15073
|
for (const tip of tips.slice(0, 3)) lines.push(` - ${tip}`);
|
|
15062
15074
|
}
|
|
15063
15075
|
return lines.join("\n");
|
|
@@ -7,13 +7,15 @@ import {
|
|
|
7
7
|
SETTINGS_DIRECTORY_NAME,
|
|
8
8
|
V1_INDICATOR_KEYS,
|
|
9
9
|
getGlobalQwenDirLite,
|
|
10
|
-
getPathComparisonVariants,
|
|
11
10
|
getSystemDefaultsPath,
|
|
12
11
|
getSystemSettingsPath,
|
|
13
|
-
isWithinRoot,
|
|
14
|
-
require_strip_json_comments,
|
|
15
12
|
resolveEnvVarsInObject
|
|
16
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-PPFWEV7G.js";
|
|
14
|
+
import {
|
|
15
|
+
getPathComparisonVariants,
|
|
16
|
+
isWithinRoot,
|
|
17
|
+
require_strip_json_comments
|
|
18
|
+
} from "./chunk-QYUE6W3T.js";
|
|
17
19
|
import {
|
|
18
20
|
require_main
|
|
19
21
|
} from "./chunk-SKAZWEV5.js";
|
|
@@ -272,9 +274,7 @@ function readTrustedFolderRulesFastPath() {
|
|
|
272
274
|
__name(readTrustedFolderRulesFastPath, "readTrustedFolderRulesFastPath");
|
|
273
275
|
function buildTrustedFolderRules(trustedFolders) {
|
|
274
276
|
const rules = [];
|
|
275
|
-
for (const [rulePath, trustLevel] of Object.entries(
|
|
276
|
-
trustedFolders
|
|
277
|
-
)) {
|
|
277
|
+
for (const [rulePath, trustLevel] of Object.entries(trustedFolders)) {
|
|
278
278
|
if (trustLevel === TRUST_FOLDER) {
|
|
279
279
|
rules.push({
|
|
280
280
|
level: "trusted",
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
t
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-3O2BJMFW.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esbuild_shims
|
|
8
8
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
__name
|
|
11
11
|
} from "./chunk-J2S4EL5Y.js";
|
|
12
12
|
|
|
13
|
-
// packages/cli/src/
|
|
13
|
+
// packages/cli/src/services/voice-model.ts
|
|
14
14
|
init_esbuild_shims();
|
|
15
15
|
function resolveVoiceTransport(model) {
|
|
16
16
|
const id = model.toLowerCase();
|
|
@@ -44,11 +44,53 @@ function formatUnsupportedVoiceModelMessage(modelName) {
|
|
|
44
44
|
}
|
|
45
45
|
__name(formatUnsupportedVoiceModelMessage, "formatUnsupportedVoiceModelMessage");
|
|
46
46
|
|
|
47
|
+
// packages/cli/src/services/voice-settings.ts
|
|
48
|
+
init_esbuild_shims();
|
|
49
|
+
function readVoiceModel(settings) {
|
|
50
|
+
const value = settings.merged?.voiceModel;
|
|
51
|
+
if (typeof value !== "string") {
|
|
52
|
+
return void 0;
|
|
53
|
+
}
|
|
54
|
+
const trimmed = value.trim();
|
|
55
|
+
return trimmed.length > 0 ? trimmed : void 0;
|
|
56
|
+
}
|
|
57
|
+
__name(readVoiceModel, "readVoiceModel");
|
|
58
|
+
function isVoiceEnabled(settings) {
|
|
59
|
+
return settings.merged?.general?.voice?.enabled === true;
|
|
60
|
+
}
|
|
61
|
+
__name(isVoiceEnabled, "isVoiceEnabled");
|
|
62
|
+
function readVoiceMode(settings) {
|
|
63
|
+
return settings.merged?.general?.voice?.mode === "tap" ? "tap" : "hold";
|
|
64
|
+
}
|
|
65
|
+
__name(readVoiceMode, "readVoiceMode");
|
|
66
|
+
function readVoiceLanguage(settings) {
|
|
67
|
+
const language = settings.merged.general?.voice?.language;
|
|
68
|
+
if (typeof language !== "string") {
|
|
69
|
+
return "";
|
|
70
|
+
}
|
|
71
|
+
return language.trim();
|
|
72
|
+
}
|
|
73
|
+
__name(readVoiceLanguage, "readVoiceLanguage");
|
|
74
|
+
function getVoiceSettingsScope(settings, workspaceTrusted = settings.isTrusted === true) {
|
|
75
|
+
return workspaceTrusted && typeof settings.workspace?.settings?.general?.voice?.enabled === "boolean" ? "Workspace" /* Workspace */ : "User" /* User */;
|
|
76
|
+
}
|
|
77
|
+
__name(getVoiceSettingsScope, "getVoiceSettingsScope");
|
|
78
|
+
function isVoiceMode(value) {
|
|
79
|
+
return value === "hold" || value === "tap";
|
|
80
|
+
}
|
|
81
|
+
__name(isVoiceMode, "isVoiceMode");
|
|
82
|
+
|
|
47
83
|
export {
|
|
48
84
|
resolveVoiceTransport,
|
|
49
85
|
isTranscribableVoiceModel,
|
|
50
86
|
isSelectableVoiceModel,
|
|
51
|
-
formatUnsupportedVoiceModelMessage
|
|
87
|
+
formatUnsupportedVoiceModelMessage,
|
|
88
|
+
readVoiceModel,
|
|
89
|
+
isVoiceEnabled,
|
|
90
|
+
readVoiceMode,
|
|
91
|
+
readVoiceLanguage,
|
|
92
|
+
getVoiceSettingsScope,
|
|
93
|
+
isVoiceMode
|
|
52
94
|
};
|
|
53
95
|
/**
|
|
54
96
|
* @license
|