@qwen-code/qwen-code 0.19.9 → 0.19.10
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/qc-helper/docs/configuration/settings.md +7 -0
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +3 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +11 -3
- package/bundled/qc-helper/docs/features/code-review.md +88 -44
- package/bundled/qc-helper/docs/features/commands.md +6 -6
- package/bundled/qc-helper/docs/features/hooks.md +29 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
- package/bundled/qc-helper/docs/qwen-serve.md +46 -20
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
- package/bundled/review/DESIGN.md +219 -33
- package/bundled/review/SKILL.md +449 -153
- package/chunks/{MaxSizedBox-6HYJ3ZPJ.js → MaxSizedBox-67ODZ4SZ.js} +31 -31
- package/chunks/{StandaloneSessionPicker-WS4GXYOG.js → StandaloneSessionPicker-SIPBQT5Z.js} +51 -49
- package/chunks/{acpAgent-5FWSOZL5.js → acpAgent-VPZJXLFX.js} +528 -478
- package/chunks/{agent-HOLHB3RT.js → agent-Z7NWL6XL.js} +26 -26
- package/chunks/{agent-headless-SXL6H56A.js → agent-headless-73HZ6ROQ.js} +26 -26
- package/chunks/{anthropicContentGenerator-L73TO3DB.js → anthropicContentGenerator-56U3YCP2.js} +5 -5
- package/chunks/{artifact-tool-U7IRTLIV.js → artifact-tool-BWZZJ42H.js} +2 -2
- package/chunks/{askUserQuestion-2DLUUZZG.js → askUserQuestion-WU3S5A5T.js} +2 -2
- package/chunks/{bridge-BCJQ7BBB.js → bridge-XFKW6S7Q.js} +32 -32
- package/chunks/{ca-UJ6HC4H2.js → ca-C2JTT2N5.js} +4 -1
- package/chunks/channel-worker-group-K7QKH6IG.js +13 -0
- package/chunks/channel-worker-manager-5RWKSGEU.js +418 -0
- package/chunks/channel-worker-supervisor-PCDAZN4D.js +20 -0
- package/chunks/{chunk-LXNEJD34.js → chunk-2FO5GFKZ.js} +1 -1
- package/chunks/{chunk-B5ORX3FG.js → chunk-2UUAIFQO.js} +1 -1
- package/chunks/{chunk-L36P3NBD.js → chunk-2W3OOD4W.js} +2 -0
- package/chunks/{chunk-7R3CZA3Q.js → chunk-2Z5UX4KI.js} +1 -1
- package/chunks/chunk-3MX7D6QN.js +516 -0
- package/chunks/{chunk-E2IY465S.js → chunk-3XJFUTNM.js} +10 -10
- package/chunks/{chunk-JZETEN3Z.js → chunk-422XAKCK.js} +3 -3
- package/chunks/{chunk-N3EMS75V.js → chunk-4FMG7EDJ.js} +1268 -1233
- package/chunks/{chunk-HKMAENAO.js → chunk-4YWLED2A.js} +8 -6
- package/chunks/{chunk-SCGXUJBT.js → chunk-5EBKKSBX.js} +3 -3
- package/chunks/chunk-5HBA2Z7V.js +28 -0
- package/chunks/{chunk-XYQSMABS.js → chunk-5LROA5W4.js} +4 -4
- package/chunks/{chunk-ZJE7NSL3.js → chunk-5M6IDOMF.js} +34 -97
- package/chunks/{chunk-VA4KQY6V.js → chunk-65N2J6V2.js} +3 -3
- package/chunks/{chunk-4C5BQ2D2.js → chunk-6GETGQWP.js} +71 -12
- package/chunks/{chunk-PVZM22CK.js → chunk-6GKMJPOC.js} +5 -5
- package/chunks/{chunk-W2UIXQDL.js → chunk-6OATMEYN.js} +1 -1
- package/chunks/{chunk-GZRTYZ2R.js → chunk-6W6DI34P.js} +154 -1
- package/chunks/{chunk-EMDMPBJ4.js → chunk-7L4XBYVW.js} +3 -3
- package/chunks/{chunk-EAXLGSFP.js → chunk-7MJAZMXK.js} +8 -8
- package/chunks/{chunk-K434OPES.js → chunk-7NAWTFVY.js} +3 -3
- package/chunks/{chunk-J4TSQ5EQ.js → chunk-7NFB7LBQ.js} +8 -1
- package/chunks/{chunk-5SFOMFG4.js → chunk-7R4DPSRA.js} +36 -2
- package/chunks/{chunk-P67PFTUT.js → chunk-AAR5SGMD.js} +4 -4
- package/chunks/{chunk-RDJSGHZE.js → chunk-ALGGS7UH.js} +1 -38
- package/chunks/{chunk-GWHYEOV2.js → chunk-ARKANCNX.js} +2 -1
- package/chunks/{chunk-D2GFWEXB.js → chunk-B5I2IIWY.js} +6 -6
- package/chunks/{chunk-524RQP4Q.js → chunk-B7NUUEXC.js} +10 -4
- package/chunks/{chunk-CUMMSHH6.js → chunk-BBNVFRGD.js} +1 -1
- package/chunks/{chunk-5HOMWMCL.js → chunk-CEW4HDPK.js} +4166 -1338
- package/chunks/chunk-CJFNEBYB.js +91 -0
- package/chunks/{chunk-VWPVHAMO.js → chunk-CUUXANEQ.js} +5 -1
- package/chunks/{chunk-GWLSNBG4.js → chunk-DK33QJ3V.js} +30 -26
- package/chunks/{chunk-HPDUL5MF.js → chunk-DPFBNG72.js} +1 -1
- package/chunks/{chunk-KKNMOEZH.js → chunk-E2UVIFI2.js} +185 -398
- package/chunks/{chunk-MC23XKFE.js → chunk-E67NFMF4.js} +3 -3
- package/chunks/{chunk-OQ4DRIOA.js → chunk-EQY6POVO.js} +2 -2
- package/chunks/{chunk-XUOOWUZS.js → chunk-F7NXQH4Y.js} +1 -1
- package/chunks/{chunk-YLV3XXFB.js → chunk-FBU7WRZI.js} +17 -1
- package/chunks/{chunk-LK7KUE55.js → chunk-FSA7ERJ2.js} +1 -1
- package/chunks/{chunk-PDZ7MBDG.js → chunk-FXMC7SL2.js} +27 -6
- package/chunks/{chunk-SJHDYNHF.js → chunk-GDQQRV43.js} +3 -3
- package/chunks/{chunk-34MW4KTI.js → chunk-GGJII3FM.js} +2 -2
- package/chunks/{chunk-3BTRNWWD.js → chunk-GOXKNSDZ.js} +1 -64
- package/chunks/chunk-GYTKQYDB.js +23 -0
- package/chunks/{chunk-HVY356M2.js → chunk-H3FQOPPS.js} +3 -3
- package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
- package/chunks/{chunk-WQUQVGTF.js → chunk-HHEFI4RP.js} +183 -96
- package/chunks/chunk-IDS7MSUP.js +74 -0
- package/chunks/{chunk-6PESIEKJ.js → chunk-JSJFKYWT.js} +68 -6
- package/chunks/{chunk-CNEIYWSA.js → chunk-K4PZ5F5T.js} +5 -5
- package/chunks/{chunk-NVYTCB5Z.js → chunk-K7CRWKOE.js} +14534 -13980
- package/chunks/{chunk-ORBGV7NJ.js → chunk-KKRTYONM.js} +6 -4
- package/chunks/{chunk-IAVB3HM3.js → chunk-KSO42X3Z.js} +13 -0
- package/chunks/chunk-L37RC7MQ.js +493 -0
- package/chunks/{chunk-4QLQE5WJ.js → chunk-L5U3ELZX.js} +1 -1
- package/chunks/{chunk-3G7CIHVV.js → chunk-L62SEJWY.js} +4 -4
- package/chunks/{chunk-EGYZ275M.js → chunk-LNUXFLLJ.js} +4 -4
- package/chunks/{chunk-4ZVWQHEQ.js → chunk-LQIDP6K5.js} +1 -1
- package/chunks/{chunk-VTU57BWZ.js → chunk-LQU7EVFA.js} +1 -1
- package/chunks/{chunk-B4G2WOFA.js → chunk-LTNI523B.js} +2 -2
- package/chunks/{chunk-DC5Z3DU6.js → chunk-LXLTBIDP.js} +43 -6
- package/chunks/{chunk-KHUQZZJ6.js → chunk-MO7O5722.js} +370 -36
- package/chunks/chunk-MR3PXB6E.js +48 -0
- package/chunks/{chunk-5VXNZWGF.js → chunk-N6FXRR6P.js} +1 -1
- package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
- package/chunks/{chunk-TO6QE22P.js → chunk-OATTJGPJ.js} +26 -22
- package/chunks/{chunk-X6TJ3YZV.js → chunk-OFEVHGVU.js} +159 -57
- package/chunks/{chunk-X4NKFGFJ.js → chunk-OJAMDVF5.js} +0 -15
- package/chunks/{chunk-BZIFY5TF.js → chunk-OKAIGAYW.js} +3 -3
- package/chunks/{chunk-3VAGG5T5.js → chunk-P6LART6G.js} +116 -15
- package/chunks/{chunk-3SJSQXNS.js → chunk-PEJWA3QQ.js} +12 -8
- package/chunks/{chunk-BAPGSC7U.js → chunk-Q5GLXH5Q.js} +23 -9
- package/chunks/{chunk-MXL5UP4X.js → chunk-Q6TUALBE.js} +1 -1
- package/chunks/{chunk-QYMQSECS.js → chunk-QAW7PIHT.js} +2 -2
- package/chunks/{chunk-LUODI7WD.js → chunk-RCEEXIOO.js} +6 -4
- package/chunks/{chunk-YAUFFXDS.js → chunk-RDRVMDWV.js} +12 -11
- package/chunks/{chunk-CEA3E3JB.js → chunk-SPJQO2CE.js} +2 -2
- package/chunks/{chunk-U2NNEY4R.js → chunk-SPUYQB4T.js} +1 -1
- package/chunks/{chunk-34Z3U5RQ.js → chunk-SXU3KKNI.js} +514 -114
- package/chunks/{chunk-ECNYL4AA.js → chunk-TISZXPAX.js} +1 -1
- package/chunks/{chunk-JSG7ZSBC.js → chunk-TQBODCFD.js} +1 -1
- package/chunks/{chunk-AKIVHSJR.js → chunk-TTUO4DNG.js} +111 -93
- package/chunks/chunk-TV6K2FB4.js +224 -0
- package/chunks/{chunk-4GORAUCN.js → chunk-TXY2C3D2.js} +1 -1
- package/chunks/{chunk-5XUCZNSY.js → chunk-TYLOFD2U.js} +1 -1
- package/chunks/{chunk-CLFKOZEK.js → chunk-UFOKA4PR.js} +1 -1
- package/chunks/{channel-worker-supervisor-WSOAAYUO.js → chunk-URU5UEK6.js} +67 -35
- package/chunks/{chunk-D5SKC4YG.js → chunk-V7EQTZYR.js} +41 -13
- package/chunks/{chunk-L6P4KPHR.js → chunk-VBRRNQB7.js} +59 -39
- package/chunks/{chunk-BMGVRZN4.js → chunk-W34A5MJH.js} +1 -1
- package/chunks/{chunk-PODM4SZ4.js → chunk-WDW64OW3.js} +5 -5
- package/chunks/{chunk-W3JHSWRP.js → chunk-WDWJ4OQJ.js} +4 -4
- package/chunks/{chunk-Q4YQW46J.js → chunk-WIASPMLX.js} +31 -17
- package/chunks/{chunk-ZLXQN2QS.js → chunk-WIEO4CWB.js} +1 -1
- package/chunks/{chunk-A3XKDTSH.js → chunk-WLXYAKV7.js} +4 -4
- package/chunks/{chunk-Q6I5QHMH.js → chunk-WTSXKLG5.js} +1 -1
- package/chunks/{chunk-J3JA76CF.js → chunk-WX6SD4IQ.js} +1 -1
- package/chunks/{chunk-77XJ3SWN.js → chunk-X362TMXZ.js} +5 -5
- package/chunks/{chunk-CCDMCZPP.js → chunk-XLIRF7IK.js} +1 -1
- package/chunks/{chunk-AURZZYMD.js → chunk-XXJKGHZV.js} +4 -4
- package/chunks/{chunk-TDEXZKMT.js → chunk-Y66VOBRP.js} +2 -2
- package/chunks/{chunk-CC2ITGCF.js → chunk-YHN5SUIJ.js} +49 -6
- package/chunks/{chunk-3AHXV67U.js → chunk-YU56QGXX.js} +1 -1
- package/chunks/{chunk-5U27BZ72.js → chunk-YX4LLZ3D.js} +187 -75
- package/chunks/{chunk-ATAKVRIF.js → chunk-YYPXHMWO.js} +7 -7
- package/chunks/{chunk-XLA62MYB.js → chunk-ZKMGAFYV.js} +2 -2
- package/chunks/{chunk-UOZWKTQG.js → chunk-ZPAHLFZU.js} +2 -2
- package/chunks/{chunk-7PU4FYLG.js → chunk-ZQTZXVHP.js} +4 -4
- package/chunks/chunk-ZRKBI3DP.js +34 -0
- package/chunks/{computer-use-HM37RX6A.js → computer-use-IYTX45WA.js} +26 -26
- package/chunks/{config-utils-NV2SVGPB.js → config-utils-CFT33LTP.js} +3 -2
- package/chunks/{contextCommand-OF5SFGH2.js → contextCommand-272V77WU.js} +28 -28
- package/chunks/{create-sub-session-KPRT7ECJ.js → create-sub-session-CBJMQLYP.js} +26 -26
- package/chunks/{create-sub-session-INX7TXJI.js → create-sub-session-WNX2OQVX.js} +2 -2
- package/chunks/{cron-create-AMBKGZX6.js → cron-create-36TIFKRT.js} +4 -4
- package/chunks/{cron-delete-LRU4OJYG.js → cron-delete-OQD3WULU.js} +4 -4
- package/chunks/{cron-list-WVP2JXER.js → cron-list-4533T2FH.js} +4 -4
- package/chunks/{daemon-ARHTSTXP.js → daemon-RNGFPMAB.js} +575 -58
- package/chunks/{daemon-status-provider-B2UTZUJ2.js → daemon-status-provider-L4STG5VO.js} +36 -36
- package/chunks/{de-EBJN3OVN.js → de-2VCDRDGU.js} +4 -1
- package/chunks/{dist-VHV4EVHG.js → dist-3V3ZV6ML.js} +1 -1
- package/chunks/{dist-XKU3ABM5.js → dist-ERCPDVA6.js} +1 -1
- package/chunks/{dist-PNVLTKTL.js → dist-HNN7DR2L.js} +158 -4
- package/chunks/{dist-WKPOYU7O.js → dist-JZE7F6YR.js} +1 -1
- package/chunks/{dist-QYCAEZIT.js → dist-MOEC47TR.js} +5 -1
- package/chunks/{dist-R7LN5AZE.js → dist-PHEPJLXD.js} +2 -2
- package/chunks/{earlyInputCapture-3VTHRC4C.js → earlyInputCapture-EN4BRREQ.js} +27 -27
- package/chunks/{edit-VNI4NJ73.js → edit-OMAF2QDR.js} +27 -27
- package/chunks/{en-5A6LA7RK.js → en-NJCA3TAA.js} +5 -1
- package/chunks/{enter-worktree-IYYBKPZT.js → enter-worktree-BBZX52HG.js} +26 -26
- package/chunks/{enterPlanMode-GMC5FD5A.js → enterPlanMode-5NNFMBUY.js} +42 -27
- package/chunks/{environment-5HSSRMJ7.js → environment-7TEWMJYN.js} +30 -29
- package/chunks/{errors-HMFCJJ7P.js → errors-I4VKVX3F.js} +28 -28
- package/chunks/{exit-worktree-6BHCMP5G.js → exit-worktree-FUWRJI33.js} +26 -26
- package/chunks/{exitPlanMode-CJW7G74W.js → exitPlanMode-IHCJ5EEI.js} +26 -26
- package/chunks/{fast-path-FRDMDVHG.js → fast-path-ZA57TOH4.js} +3 -3
- package/chunks/{fast-path-settings-5QZE64HR.js → fast-path-settings-DAOVFADC.js} +6 -4
- package/chunks/{fr-YXRABLYZ.js → fr-5F3E7WKD.js} +4 -1
- package/chunks/{gemini-QYSEGHAX.js → gemini-UOAKVXBG.js} +139 -76
- package/chunks/{geminiContentGenerator-J7YNZDYP.js → geminiContentGenerator-G6UCE6MW.js} +4 -4
- package/chunks/{glob-BRCSGFOT.js → glob-4GJQ2UFF.js} +28 -27
- package/chunks/{grep-EE2DUOSY.js → grep-5QSYXF2E.js} +26 -26
- package/chunks/{handleAutoUpdate-5NWTLR67.js → handleAutoUpdate-ULHNWL6R.js} +30 -30
- package/chunks/{i18n-BASPENNQ.js → i18n-CYDUTF6F.js} +27 -27
- package/chunks/initializer-NRFKUGIO.js +73 -0
- package/chunks/{installationInfo-W6V4DT7W.js → installationInfo-WELKRHHE.js} +27 -27
- package/chunks/{ja-7VQOANVG.js → ja-66J6B53L.js} +5 -2
- package/chunks/{keychain-token-storage-VKUBNCP4.js → keychain-token-storage-AU22CQI6.js} +2 -2
- package/chunks/list-JVDXEG2E.js +76 -0
- package/chunks/loadedSettingsAdapter-WAM4VUTG.js +70 -0
- package/chunks/{loop-wakeup-WX7BLWWP.js → loop-wakeup-MVUKDVCP.js} +5 -5
- package/chunks/{ls-ZB2BDP6T.js → ls-RXNIAQDE.js} +4 -4
- package/chunks/{lsp-V5DN4YUJ.js → lsp-HB5LM5IL.js} +2 -2
- package/chunks/mcp-YHOZN3ZM.js +70 -0
- package/chunks/{monitor-X5Z3H4FY.js → monitor-R7XZPJHQ.js} +26 -26
- package/chunks/nonInteractiveCli-NSOB6D74.js +129 -0
- package/chunks/{notebook-edit-TRM2QIJK.js → notebook-edit-6RNKE2L2.js} +27 -27
- package/chunks/{openaiContentGenerator-AAYONPMF.js → openaiContentGenerator-XNS5S64I.js} +12 -12
- package/chunks/{pidfile-D4I4FTVA.js → pidfile-XE4RRR2P.js} +27 -27
- package/chunks/{pt-2C6YCSHL.js → pt-TFZO5Y6T.js} +4 -1
- package/chunks/{qwenContentGenerator-K3HZ2H76.js → qwenContentGenerator-APDPJ3VN.js} +28 -28
- package/chunks/{qwenOAuth2-PJQ27GSO.js → qwenOAuth2-LEYOU7RU.js} +5 -5
- package/chunks/{read-file-7SZSIZOL.js → read-file-XSUWXSR7.js} +8 -8
- package/chunks/{read-mcp-resource-SM5DA4RG.js → read-mcp-resource-6LRTZKXI.js} +2 -2
- package/chunks/{record-artifact-4XKZX3UW.js → record-artifact-PMDTY4OS.js} +2 -2
- package/chunks/{ripGrep-YNPFVCZP.js → ripGrep-APB3CDMU.js} +26 -26
- package/chunks/{ru-6BBHVZZV.js → ru-4L4LFHIT.js} +4 -1
- package/chunks/{run-qwen-serve-DMWV5N6L.js → run-qwen-serve-NWTGPERT.js} +1232 -371
- package/chunks/{runtime-57WWRVHN.js → runtime-EIO3NQKR.js} +42 -37
- package/chunks/{scheduler-YBLGWSIL.js → scheduler-JJDZBDRN.js} +26 -26
- package/chunks/{send-message-F36YD6KQ.js → send-message-SR4WSXP2.js} +3 -3
- package/chunks/{serve-R63NK3CV.js → serve-WTIPB3EI.js} +36 -34
- package/chunks/{server-Z22GCAXP.js → server-NJPHQHLH.js} +5238 -1328
- package/chunks/{session-HKAAI7BN.js → session-O4AO7FTS.js} +298 -98
- package/chunks/{settings-3EYN66GK.js → settings-HQNDK7TG.js} +34 -32
- package/chunks/{shell-6YXINTWJ.js → shell-UIXM6PWG.js} +26 -26
- package/chunks/{skill-OO57P4X6.js → skill-3XMB4ULV.js} +10 -10
- package/chunks/{spawnChannel-JD7G4VU6.js → spawnChannel-3R632QRM.js} +28 -28
- package/chunks/{src-G5UPLZSZ.js → src-USZKPUOC.js} +85 -27
- package/chunks/{standalone-update-OB7F4JPZ.js → standalone-update-L5XW3D7K.js} +28 -28
- package/chunks/{startInteractiveUI-73EGLIIH.js → startInteractiveUI-CPZOL2WB.js} +730 -397
- package/chunks/{syntheticOutput-34H7LGA7.js → syntheticOutput-YKFNUQZD.js} +3 -3
- package/chunks/{task-create-FRGOEIKY.js → task-create-NUFOHU53.js} +8 -7
- package/chunks/{task-list-OW766BXZ.js → task-list-Z2IKQY3S.js} +6 -5
- package/chunks/{task-stop-SIR5SNBN.js → task-stop-KQFIVQTJ.js} +2 -2
- package/chunks/{task-update-YRA532MT.js → task-update-HKADXSTD.js} +8 -7
- package/chunks/{team-create-PECAAPXK.js → team-create-XXPRF3IQ.js} +26 -26
- package/chunks/{team-delete-6OSECUZC.js → team-delete-SDNTGZLG.js} +6 -5
- package/chunks/{team-plan-approval-L6F434RY.js → team-plan-approval-EOTTKHDW.js} +26 -26
- package/chunks/{theme-manager-ZG4RY6GU.js → theme-manager-P6UITO2L.js} +27 -27
- package/chunks/{todoWrite-YDMFEV4G.js → todoWrite-YNXB27GB.js} +4 -4
- package/chunks/{tool-search-THVIWAPB.js → tool-search-DDNGK2LR.js} +9 -9
- package/chunks/{total-session-admission-JOKNRIIA.js → total-session-admission-PL5N7DNY.js} +33 -33
- package/chunks/tree-sitter-YJVE2ZUK.js +2980 -0
- package/chunks/{trustedFolders-EOGT3UVS.js → trustedFolders-C5LMF3UR.js} +29 -28
- package/chunks/types-ML3TRJQ5.js +16 -0
- package/chunks/{updateCheck-2KYEYVSB.js → updateCheck-QTVVISH7.js} +29 -29
- package/chunks/{validateNonInterActiveAuth-EN6ZQSR2.js → validateNonInterActiveAuth-RY4RKBQG.js} +75 -71
- package/chunks/{version-3UEA6ZIR.js → version-U45RYOSD.js} +1 -1
- package/chunks/{web-fetch-PAAEQKBW.js → web-fetch-ZSPR3PRR.js} +5 -5
- package/chunks/{workflow-QCCCMYP3.js → workflow-TCIAQYOA.js} +27 -27
- package/chunks/workspace-providers-status-I3G2HYLY.js +73 -0
- package/chunks/workspace-registration-store-IH5GLZ6Y.js +27 -0
- package/chunks/{workspace-registry-24QFLQYH.js → workspace-registry-QEKBELIX.js} +33 -33
- package/chunks/workspace-service-ORKHGLP3.js +86 -0
- package/chunks/workspace-skills-status-D7QCNDYY.js +72 -0
- package/chunks/{write-file-I3MUDRIE.js → write-file-JGRQR5VM.js} +27 -27
- package/chunks/{zh-RQE7I22T.js → zh-FSAH32JB.js} +6 -2
- package/chunks/{zh-TW-TBPQGHKH.js → zh-TW-D2YIE2LO.js} +6 -2
- package/cli.js +11 -11
- package/locales/ca.js +6 -0
- package/locales/de.js +6 -0
- package/locales/en.js +8 -0
- package/locales/fr.js +6 -0
- package/locales/ja.js +7 -1
- package/locales/pt.js +6 -0
- package/locales/ru.js +6 -0
- package/locales/zh-TW.js +9 -1
- package/locales/zh.js +9 -1
- package/package.json +3 -3
- package/web-shell/assets/{arc-C15hqnJe.js → arc-CUeDlxvE.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-B-At37J_.js → architectureDiagram-3BPJPVTR-PiUszkQA.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-B51wjcU7.js → blockDiagram-GPEHLZMM-s2wYSO7e.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-xBK7BAwN.js → c4Diagram-AAUBKEIU-DyLxZoz9.js} +1 -1
- package/web-shell/assets/channel-DkuJJ0qd.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-xKmLg7Yr.js → chunk-2J33WTMH-Dsdai7Tk.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BfkdKZCM.js → chunk-4BX2VUAB-DEosOjV7.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DT713sZf.js → chunk-55IACEB6-sNsRLTXf.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-CYEeAamv.js → chunk-727SXJPM-DkRNZzmh.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-DBN-5CFd.js → chunk-AQP2D5EJ-BrsRNpzd.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CGZKk4PH.js → chunk-FMBD7UC4-CI039lpl.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-qQbC2O-y.js → chunk-ND2GUHAM-M-pkeIfu.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-B3zeXwsX.js → chunk-QZHKN3VN-C4ckGNbH.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CwqHc0TB.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwqHc0TB.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BKsl1Wvy.js → cose-bilkent-S5V4N54A-BciKUAFq.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-CuuuLiBK.js → dagre-BM42HDAG-C1nTSgU6.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-CG4_eKiV.js → diagram-2AECGRRQ-BDPNWr1m.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-DSFTmZB1.js → diagram-5GNKFQAL-CNFhTszL.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-BxwlEHn8.js → diagram-KO2AKTUF-CjPa4p5a.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BUAg-jMG.js → diagram-LMA3HP47-ZzPykSyG.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-BFM2jlO5.js → diagram-OG6HWLK6-0UVtZ9A4.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-CerbFPa2.js → erDiagram-TEJ5UH35-CajDZCat.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BNeZz5Zz.js → flowDiagram-I6XJVG4X-BRuFBIvL.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CTOogLaM.js → ganttDiagram-6RSMTGT7-BevGmJqG.js} +3 -3
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-yxSFkXPj.js → gitGraphDiagram-PVQCEYII-DvPMpBMb.js} +1 -1
- package/web-shell/assets/index-Cnvv4VcI.css +5 -0
- package/web-shell/assets/index-D1Uyklxa.js +1088 -0
- package/web-shell/assets/index-DzHwQkQq.js +3 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-DYdAUevm.js → infoDiagram-5YYISTIA-Oixn7tA9.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CNuijZ90.js → ishikawaDiagram-YF4QCWOH-BgKpeg-j.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-BTyiuonf.js → journeyDiagram-JHISSGLW-74mwxIaA.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DPJo0Uow.js → kanban-definition-UN3LZRKU-D4D6cEqA.js} +1 -1
- package/web-shell/assets/{linear-C8wKCbIC.js → linear-atZRE_L2.js} +1 -1
- package/web-shell/assets/{mermaid.core-BV5o7nW5.js → mermaid.core-KKudX-JC.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BtLcBmSt.js → mindmap-definition-RKZ34NQL-CMCej9yG.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-C22J7A9Q.js → pieDiagram-4H26LBE5-nhx40X7q.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DSL10wiL.js → quadrantDiagram-W4KKPZXB-CUmVcN3M.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-feqh0UpX.js → requirementDiagram-4Y6WPE33-C_vyEwyy.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js → sankeyDiagram-5OEKKPKP-DU6G4VWR.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DIluIcb1.js → sequenceDiagram-3UESZ5HK-DdeRR_KJ.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-hlhnuoYH.js → stateDiagram-AJRCARHV-C6iCI8ps.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C0_6nR6C.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-Dqf_CqgL.js → timeline-definition-PNZ67QCA-B_Ea8Cb7.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DD2QhaTX.js → vennDiagram-CIIHVFJN-BPUVZEJA.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-B2uI85U_.js → wardley-L42UT6IY-BWEj0lKY.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-U1aJX71g.js → wardleyDiagram-YWT4CUSO-BvDsdIQw.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-C0ODHUee.js → xychartDiagram-2RQKCTM6-crz0QhF_.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-CU3L64TP.js +0 -93
- package/chunks/initializer-UTQ7FB7G.js +0 -71
- package/chunks/list-DEICDL65.js +0 -74
- package/chunks/loadedSettingsAdapter-NOWEGDYJ.js +0 -68
- package/chunks/mcp-L5JXEEIA.js +0 -68
- package/chunks/nonInteractiveCli-LS2K4X6A.js +0 -124
- package/chunks/types-JNKGKUJT.js +0 -12
- package/chunks/workspace-providers-status-4KMGETOJ.js +0 -71
- package/chunks/workspace-service-RVLBMSMZ.js +0 -80
- package/chunks/workspace-skills-status-DS4ZVFTO.js +0 -70
- package/web-shell/assets/channel-CLiQD50f.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-D3sYqow5.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-D3sYqow5.js +0 -1
- package/web-shell/assets/index-D5IWFVk1.css +0 -5
- package/web-shell/assets/index-KFJRDhX7.js +0 -783
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BhQMwgpl.js +0 -1
|
@@ -33,10 +33,36 @@ var WorkspacePermissionRulesSessionRequiredError = class extends Error {
|
|
|
33
33
|
this.name = "WorkspacePermissionRulesSessionRequiredError";
|
|
34
34
|
}
|
|
35
35
|
};
|
|
36
|
+
var WorkspaceSkillNotFoundError = class extends Error {
|
|
37
|
+
constructor(skillName) {
|
|
38
|
+
super(`Skill not found: ${skillName}`);
|
|
39
|
+
this.skillName = skillName;
|
|
40
|
+
this.name = "WorkspaceSkillNotFoundError";
|
|
41
|
+
}
|
|
42
|
+
static {
|
|
43
|
+
__name(this, "WorkspaceSkillNotFoundError");
|
|
44
|
+
}
|
|
45
|
+
};
|
|
46
|
+
var WorkspaceSkillNotToggleableError = class extends Error {
|
|
47
|
+
constructor(skillName, reason, lockedScope) {
|
|
48
|
+
super(
|
|
49
|
+
lockedScope ? `Skill ${skillName} is locked by ${lockedScope} settings` : `Skill ${skillName} is not toggleable: ${reason}`
|
|
50
|
+
);
|
|
51
|
+
this.skillName = skillName;
|
|
52
|
+
this.reason = reason;
|
|
53
|
+
this.lockedScope = lockedScope;
|
|
54
|
+
this.name = "WorkspaceSkillNotToggleableError";
|
|
55
|
+
}
|
|
56
|
+
static {
|
|
57
|
+
__name(this, "WorkspaceSkillNotToggleableError");
|
|
58
|
+
}
|
|
59
|
+
};
|
|
36
60
|
|
|
37
61
|
export {
|
|
38
62
|
WorkspaceSettingsPartialPersistError,
|
|
39
|
-
WorkspacePermissionRulesSessionRequiredError
|
|
63
|
+
WorkspacePermissionRulesSessionRequiredError,
|
|
64
|
+
WorkspaceSkillNotFoundError,
|
|
65
|
+
WorkspaceSkillNotToggleableError
|
|
40
66
|
};
|
|
41
67
|
/**
|
|
42
68
|
* @license
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
|
-
|
|
5
|
-
} from "./chunk-
|
|
4
|
+
resolveChannelCwd
|
|
5
|
+
} from "./chunk-ZRKBI3DP.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esbuild_shims
|
|
8
8
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -21,12 +21,12 @@ function ensureBuiltins() {
|
|
|
21
21
|
if (!builtinsPromise) {
|
|
22
22
|
builtinsPromise = (async () => {
|
|
23
23
|
const labelled = [
|
|
24
|
-
{ name: "telegram", promise: import("./dist-
|
|
25
|
-
{ name: "weixin", promise: import("./dist-
|
|
26
|
-
{ name: "dingtalk", promise: import("./dist-
|
|
27
|
-
{ name: "wecom", promise: import("./dist-
|
|
28
|
-
{ name: "feishu", promise: import("./dist-
|
|
29
|
-
{ name: "qqbot", promise: import("./dist-
|
|
24
|
+
{ name: "telegram", promise: import("./dist-JZE7F6YR.js") },
|
|
25
|
+
{ name: "weixin", promise: import("./dist-PHEPJLXD.js") },
|
|
26
|
+
{ name: "dingtalk", promise: import("./dist-HNN7DR2L.js") },
|
|
27
|
+
{ name: "wecom", promise: import("./dist-ERCPDVA6.js") },
|
|
28
|
+
{ name: "feishu", promise: import("./dist-MOEC47TR.js") },
|
|
29
|
+
{ name: "qqbot", promise: import("./dist-3V3ZV6ML.js") }
|
|
30
30
|
];
|
|
31
31
|
const results = await Promise.allSettled(labelled.map((l) => l.promise));
|
|
32
32
|
for (let i = 0; i < results.length; i++) {
|
|
@@ -74,13 +74,13 @@ var CHANNEL_APPROVAL_MODES = /* @__PURE__ */ new Set([
|
|
|
74
74
|
"auto",
|
|
75
75
|
"yolo"
|
|
76
76
|
]);
|
|
77
|
-
function resolveEnvVars(value) {
|
|
77
|
+
function resolveEnvVars(value, env = process.env) {
|
|
78
78
|
if (value.startsWith("$$")) {
|
|
79
79
|
return value.substring(1);
|
|
80
80
|
}
|
|
81
81
|
if (value.startsWith("$")) {
|
|
82
82
|
const envName = value.substring(1);
|
|
83
|
-
const envValue =
|
|
83
|
+
const envValue = env[envName];
|
|
84
84
|
if (envValue === void 0) {
|
|
85
85
|
throw new Error(
|
|
86
86
|
`Environment variable ${envName} is not set (referenced as ${value})`
|
|
@@ -231,7 +231,7 @@ function parseWebhookTarget(channelName, path, raw) {
|
|
|
231
231
|
return target;
|
|
232
232
|
}
|
|
233
233
|
__name(parseWebhookTarget, "parseWebhookTarget");
|
|
234
|
-
function parseWebhookSource(channelName, path, raw) {
|
|
234
|
+
function parseWebhookSource(channelName, path, raw, env) {
|
|
235
235
|
const record = requireObjectField(channelName, path, raw);
|
|
236
236
|
const rawTargets = requireObjectField(
|
|
237
237
|
channelName,
|
|
@@ -254,7 +254,8 @@ function parseWebhookSource(channelName, path, raw) {
|
|
|
254
254
|
);
|
|
255
255
|
}
|
|
256
256
|
const secret = hasSecret ? resolveEnvVars(
|
|
257
|
-
requireStringField(channelName, `${path}.secret`, record["secret"])
|
|
257
|
+
requireStringField(channelName, `${path}.secret`, record["secret"]),
|
|
258
|
+
env
|
|
258
259
|
) : resolveWebhookSecretEnv(
|
|
259
260
|
channelName,
|
|
260
261
|
path,
|
|
@@ -262,7 +263,8 @@ function parseWebhookSource(channelName, path, raw) {
|
|
|
262
263
|
channelName,
|
|
263
264
|
`${path}.secretEnv`,
|
|
264
265
|
record["secretEnv"]
|
|
265
|
-
)
|
|
266
|
+
),
|
|
267
|
+
env
|
|
266
268
|
);
|
|
267
269
|
if (secret.length === 0) {
|
|
268
270
|
throw new Error(
|
|
@@ -272,14 +274,14 @@ function parseWebhookSource(channelName, path, raw) {
|
|
|
272
274
|
return { secret, targets };
|
|
273
275
|
}
|
|
274
276
|
__name(parseWebhookSource, "parseWebhookSource");
|
|
275
|
-
function resolveWebhookSecretEnv(channelName, path, secretEnv) {
|
|
277
|
+
function resolveWebhookSecretEnv(channelName, path, secretEnv, env) {
|
|
276
278
|
const envName = secretEnv.startsWith("$") ? secretEnv.substring(1) : secretEnv;
|
|
277
279
|
if (!ENV_VAR_NAME_PATTERN.test(envName)) {
|
|
278
280
|
throw new Error(
|
|
279
281
|
`Channel "${channelName}" field "${path}.secretEnv" must be an environment variable name or $-prefixed reference.`
|
|
280
282
|
);
|
|
281
283
|
}
|
|
282
|
-
const envValue =
|
|
284
|
+
const envValue = env[envName];
|
|
283
285
|
if (envValue === void 0) {
|
|
284
286
|
throw new Error(
|
|
285
287
|
`Channel "${channelName}" field "${path}.secretEnv" references an unset environment variable.`
|
|
@@ -293,7 +295,7 @@ function resolveWebhookSecretEnv(channelName, path, secretEnv) {
|
|
|
293
295
|
return envValue;
|
|
294
296
|
}
|
|
295
297
|
__name(resolveWebhookSecretEnv, "resolveWebhookSecretEnv");
|
|
296
|
-
function parseWebhookConfig(channelName, rawConfig) {
|
|
298
|
+
function parseWebhookConfig(channelName, rawConfig, env = process.env) {
|
|
297
299
|
const raw = rawConfig["webhooks"];
|
|
298
300
|
if (raw === void 0 || raw === null) {
|
|
299
301
|
return void 0;
|
|
@@ -309,7 +311,8 @@ function parseWebhookConfig(channelName, rawConfig) {
|
|
|
309
311
|
sources[source] = parseWebhookSource(
|
|
310
312
|
channelName,
|
|
311
313
|
`webhooks.sources.${source}`,
|
|
312
|
-
sourceConfig
|
|
314
|
+
sourceConfig,
|
|
315
|
+
env
|
|
313
316
|
);
|
|
314
317
|
}
|
|
315
318
|
return { sources };
|
|
@@ -330,11 +333,11 @@ function parseApprovalModeConfig(channelName, rawConfig) {
|
|
|
330
333
|
return approvalMode;
|
|
331
334
|
}
|
|
332
335
|
__name(parseApprovalModeConfig, "parseApprovalModeConfig");
|
|
333
|
-
function parseChannelWebhookConfig(channelName, rawConfig) {
|
|
334
|
-
return parseWebhookConfig(channelName, rawConfig);
|
|
336
|
+
function parseChannelWebhookConfig(channelName, rawConfig, env = process.env) {
|
|
337
|
+
return parseWebhookConfig(channelName, rawConfig, env);
|
|
335
338
|
}
|
|
336
339
|
__name(parseChannelWebhookConfig, "parseChannelWebhookConfig");
|
|
337
|
-
function parseChannelWebhookConfigLenient(channelName, rawConfig, onSourceError) {
|
|
340
|
+
function parseChannelWebhookConfigLenient(channelName, rawConfig, onSourceError, env = process.env) {
|
|
338
341
|
const raw = rawConfig["webhooks"];
|
|
339
342
|
if (raw === void 0 || raw === null) {
|
|
340
343
|
return void 0;
|
|
@@ -351,7 +354,8 @@ function parseChannelWebhookConfigLenient(channelName, rawConfig, onSourceError)
|
|
|
351
354
|
sources[source] = parseWebhookSource(
|
|
352
355
|
channelName,
|
|
353
356
|
`webhooks.sources.${source}`,
|
|
354
|
-
sourceConfig
|
|
357
|
+
sourceConfig,
|
|
358
|
+
env
|
|
355
359
|
);
|
|
356
360
|
} catch (error) {
|
|
357
361
|
onSourceError?.(source, error);
|
|
@@ -416,7 +420,7 @@ async function parseChannelConfig(name, rawConfig, defaultCwd = process.cwd(), o
|
|
|
416
420
|
senderPolicy: rawConfig["senderPolicy"] || "allowlist",
|
|
417
421
|
allowedUsers: rawConfig["allowedUsers"] || [],
|
|
418
422
|
sessionScope: rawConfig["sessionScope"] || "user",
|
|
419
|
-
cwd:
|
|
423
|
+
cwd: resolveChannelCwd(rawConfig["cwd"], defaultCwd),
|
|
420
424
|
approvalMode: parseApprovalModeConfig(name, rawConfig),
|
|
421
425
|
instructions: rawConfig["instructions"],
|
|
422
426
|
identity: parseObjectStringFields(name, rawConfig, "identity", [
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
buildPermissionSettings
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-N6FXRR6P.js";
|
|
6
6
|
import {
|
|
7
7
|
resolveVoiceStreamConfig,
|
|
8
8
|
resolveVoiceTranscriptionConfig,
|
|
9
9
|
transcribeVoiceAudio
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-FXMC7SL2.js";
|
|
11
11
|
import {
|
|
12
12
|
getVoiceSettingsScope,
|
|
13
13
|
isSelectableVoiceModel,
|
|
@@ -16,11 +16,13 @@ import {
|
|
|
16
16
|
readVoiceMode,
|
|
17
17
|
readVoiceModel,
|
|
18
18
|
resolveVoiceTransport
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-DPFBNG72.js";
|
|
20
20
|
import {
|
|
21
21
|
WorkspacePermissionRulesSessionRequiredError,
|
|
22
|
-
WorkspaceSettingsPartialPersistError
|
|
23
|
-
|
|
22
|
+
WorkspaceSettingsPartialPersistError,
|
|
23
|
+
WorkspaceSkillNotFoundError,
|
|
24
|
+
WorkspaceSkillNotToggleableError
|
|
25
|
+
} from "./chunk-OA4JVLSA.js";
|
|
24
26
|
import {
|
|
25
27
|
MCP_RESTART_SERVER_DEADLINE_MS
|
|
26
28
|
} from "./chunk-OCPBI7J5.js";
|
|
@@ -32,8 +34,9 @@ import {
|
|
|
32
34
|
WorkspaceInitPathEscapeError,
|
|
33
35
|
WorkspaceInitRaceError,
|
|
34
36
|
WorkspaceInitSymlinkError
|
|
35
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-KSO42X3Z.js";
|
|
36
38
|
import {
|
|
39
|
+
BridgeChannelClosedError,
|
|
37
40
|
SERVE_CONTROL_EXT_METHODS,
|
|
38
41
|
SERVE_STATUS_EXT_METHODS,
|
|
39
42
|
STATUS_SCHEMA_VERSION,
|
|
@@ -45,23 +48,23 @@ import {
|
|
|
45
48
|
createIdleWorkspaceProvidersStatus,
|
|
46
49
|
createIdleWorkspaceSkillsStatus,
|
|
47
50
|
mapDomainErrorToErrorKind
|
|
48
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-CUUXANEQ.js";
|
|
49
52
|
import {
|
|
50
53
|
getPersistScopeForModelSelection,
|
|
51
54
|
loadSettings
|
|
52
|
-
} from "./chunk-
|
|
55
|
+
} from "./chunk-6GETGQWP.js";
|
|
53
56
|
import {
|
|
54
57
|
getWorkspaceTrustStatus
|
|
55
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-4YWLED2A.js";
|
|
56
59
|
import {
|
|
57
60
|
writeStderrLine
|
|
58
61
|
} from "./chunk-YUZI3WAC.js";
|
|
59
62
|
import {
|
|
60
63
|
ModelsConfig
|
|
61
|
-
} from "./chunk-
|
|
64
|
+
} from "./chunk-K7CRWKOE.js";
|
|
62
65
|
import {
|
|
63
66
|
createDebugLogger
|
|
64
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-7NFB7LBQ.js";
|
|
65
68
|
import {
|
|
66
69
|
init_esbuild_shims
|
|
67
70
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -96,14 +99,11 @@ function voiceSettingsScopeToWire(scope) {
|
|
|
96
99
|
}
|
|
97
100
|
__name(voiceSettingsScopeToWire, "voiceSettingsScopeToWire");
|
|
98
101
|
function buildWorkspaceVoiceSettingsWrites(settings, update, opts = {}) {
|
|
99
|
-
const voiceSettingsScope = getVoiceSettingsScope(
|
|
100
|
-
settings,
|
|
101
|
-
opts.workspaceTrusted
|
|
102
|
-
);
|
|
102
|
+
const voiceSettingsScope = opts.scopeOverride ?? getVoiceSettingsScope(settings, opts.workspaceTrusted);
|
|
103
103
|
const writes = [];
|
|
104
104
|
if (update.voiceModel !== void 0) {
|
|
105
105
|
writes.push({
|
|
106
|
-
scope: getPersistScopeForModelSelection(settings),
|
|
106
|
+
scope: opts.scopeOverride ?? getPersistScopeForModelSelection(settings),
|
|
107
107
|
key: "voiceModel",
|
|
108
108
|
value: update.voiceModel
|
|
109
109
|
});
|
|
@@ -158,13 +158,13 @@ function listAvailableVoiceModels(settings) {
|
|
|
158
158
|
);
|
|
159
159
|
}
|
|
160
160
|
__name(listAvailableVoiceModels, "listAvailableVoiceModels");
|
|
161
|
-
function hasConfiguredBatchVoiceTranscriptionModel(settings) {
|
|
161
|
+
function hasConfiguredBatchVoiceTranscriptionModel(settings, opts = {}) {
|
|
162
162
|
for (const model of listAvailableVoiceModels(settings)) {
|
|
163
163
|
if (model.transport !== "qwen-asr-chat") {
|
|
164
164
|
continue;
|
|
165
165
|
}
|
|
166
166
|
try {
|
|
167
|
-
validateWorkspaceVoiceConfig(settings, model.id);
|
|
167
|
+
validateWorkspaceVoiceConfig(settings, model.id, opts);
|
|
168
168
|
return true;
|
|
169
169
|
} catch (err) {
|
|
170
170
|
debugLogger.debug(
|
|
@@ -223,14 +223,24 @@ function validateWorkspaceVoiceModel(settings, voiceModel) {
|
|
|
223
223
|
return { id: model.id, transport };
|
|
224
224
|
}
|
|
225
225
|
__name(validateWorkspaceVoiceModel, "validateWorkspaceVoiceModel");
|
|
226
|
-
function validateWorkspaceVoiceConfig(settings, voiceModel) {
|
|
226
|
+
function validateWorkspaceVoiceConfig(settings, voiceModel, opts = {}) {
|
|
227
227
|
const descriptor = validateWorkspaceVoiceModel(settings, voiceModel);
|
|
228
228
|
try {
|
|
229
229
|
const config = createVoiceModelSource(settings);
|
|
230
230
|
if (descriptor.transport === "qwen-asr-chat") {
|
|
231
|
-
resolveVoiceTranscriptionConfig({
|
|
231
|
+
resolveVoiceTranscriptionConfig({
|
|
232
|
+
config,
|
|
233
|
+
settings,
|
|
234
|
+
voiceModel,
|
|
235
|
+
env: opts.env
|
|
236
|
+
});
|
|
232
237
|
} else {
|
|
233
|
-
resolveVoiceStreamConfig({
|
|
238
|
+
resolveVoiceStreamConfig({
|
|
239
|
+
config,
|
|
240
|
+
settings,
|
|
241
|
+
voiceModel,
|
|
242
|
+
env: opts.env
|
|
243
|
+
});
|
|
234
244
|
}
|
|
235
245
|
} catch (err) {
|
|
236
246
|
throw new WorkspaceVoiceError(
|
|
@@ -242,7 +252,7 @@ function validateWorkspaceVoiceConfig(settings, voiceModel) {
|
|
|
242
252
|
return descriptor;
|
|
243
253
|
}
|
|
244
254
|
__name(validateWorkspaceVoiceConfig, "validateWorkspaceVoiceConfig");
|
|
245
|
-
function validateWorkspaceVoiceState(settings, update) {
|
|
255
|
+
function validateWorkspaceVoiceState(settings, update, opts = {}) {
|
|
246
256
|
if (update.enabled === void 0 && update.mode === void 0 && update.language === void 0 && update.voiceModel === void 0) {
|
|
247
257
|
throw new WorkspaceVoiceError(
|
|
248
258
|
400,
|
|
@@ -265,7 +275,7 @@ function validateWorkspaceVoiceState(settings, update) {
|
|
|
265
275
|
"A valid voiceModel is required before enabling voice."
|
|
266
276
|
);
|
|
267
277
|
}
|
|
268
|
-
validateWorkspaceVoiceConfig(settings, nextVoiceModel);
|
|
278
|
+
validateWorkspaceVoiceConfig(settings, nextVoiceModel, opts);
|
|
269
279
|
}
|
|
270
280
|
__name(validateWorkspaceVoiceState, "validateWorkspaceVoiceState");
|
|
271
281
|
async function transcribeWorkspaceVoiceAudio(input) {
|
|
@@ -286,6 +296,7 @@ async function transcribeWorkspaceVoiceAudio(input) {
|
|
|
286
296
|
config: createVoiceModelSource(input.settings),
|
|
287
297
|
settings: input.settings,
|
|
288
298
|
voiceModel: input.voiceModel,
|
|
299
|
+
env: input.env,
|
|
289
300
|
abortSignal: input.abortSignal
|
|
290
301
|
}
|
|
291
302
|
);
|
|
@@ -360,8 +371,11 @@ function createDaemonWorkspaceService(deps) {
|
|
|
360
371
|
workspaceSkillsStatusProvider,
|
|
361
372
|
isChannelLive,
|
|
362
373
|
persistDisabledTools,
|
|
374
|
+
persistDisabledSkills,
|
|
363
375
|
persistSetting,
|
|
364
376
|
persistSettings,
|
|
377
|
+
voiceEnv,
|
|
378
|
+
voiceSettingsScope,
|
|
365
379
|
preheatAcpChild: preheatAcpChildOnBridge,
|
|
366
380
|
queryWorkspaceStatus,
|
|
367
381
|
invokeWorkspaceCommand,
|
|
@@ -370,6 +384,35 @@ function createDaemonWorkspaceService(deps) {
|
|
|
370
384
|
} = deps;
|
|
371
385
|
let lastWorkspaceSkillsStatus;
|
|
372
386
|
let inFlightAcpPreheat;
|
|
387
|
+
const getWorkspaceSkillsStatus = /* @__PURE__ */ __name(async () => {
|
|
388
|
+
let status;
|
|
389
|
+
try {
|
|
390
|
+
status = await queryWorkspaceStatus(
|
|
391
|
+
SERVE_STATUS_EXT_METHODS.workspaceSkills,
|
|
392
|
+
() => createIdleWorkspaceSkillsStatus(boundWorkspace)
|
|
393
|
+
);
|
|
394
|
+
} catch (err) {
|
|
395
|
+
writeStderrLine(
|
|
396
|
+
`qwen serve: getWorkspaceSkillsStatus query failed: ${err instanceof Error ? err.message : String(err)}`
|
|
397
|
+
);
|
|
398
|
+
status = createIdleWorkspaceSkillsStatus(boundWorkspace);
|
|
399
|
+
}
|
|
400
|
+
if (status.initialized) {
|
|
401
|
+
lastWorkspaceSkillsStatus = status;
|
|
402
|
+
return status;
|
|
403
|
+
}
|
|
404
|
+
if (lastWorkspaceSkillsStatus) return lastWorkspaceSkillsStatus;
|
|
405
|
+
if (workspaceSkillsStatusProvider) {
|
|
406
|
+
try {
|
|
407
|
+
return await workspaceSkillsStatusProvider(boundWorkspace);
|
|
408
|
+
} catch (err) {
|
|
409
|
+
writeStderrLine(
|
|
410
|
+
`qwen serve: getWorkspaceSkillsStatus local provider failed: ${err instanceof Error ? err.message : String(err)}`
|
|
411
|
+
);
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
return status;
|
|
415
|
+
}, "getWorkspaceSkillsStatus");
|
|
373
416
|
return {
|
|
374
417
|
// -- Status queries (delegate to ACP child via queryWorkspaceStatus) --
|
|
375
418
|
async getWorkspaceMcpStatus(_ctx) {
|
|
@@ -379,35 +422,7 @@ function createDaemonWorkspaceService(deps) {
|
|
|
379
422
|
);
|
|
380
423
|
},
|
|
381
424
|
async getWorkspaceSkillsStatus(_ctx) {
|
|
382
|
-
|
|
383
|
-
try {
|
|
384
|
-
status = await queryWorkspaceStatus(
|
|
385
|
-
SERVE_STATUS_EXT_METHODS.workspaceSkills,
|
|
386
|
-
() => createIdleWorkspaceSkillsStatus(boundWorkspace)
|
|
387
|
-
);
|
|
388
|
-
} catch (err) {
|
|
389
|
-
writeStderrLine(
|
|
390
|
-
`qwen serve: getWorkspaceSkillsStatus query failed: ${err instanceof Error ? err.message : String(err)}`
|
|
391
|
-
);
|
|
392
|
-
status = createIdleWorkspaceSkillsStatus(boundWorkspace);
|
|
393
|
-
}
|
|
394
|
-
if (status.initialized) {
|
|
395
|
-
lastWorkspaceSkillsStatus = status;
|
|
396
|
-
return status;
|
|
397
|
-
}
|
|
398
|
-
if (lastWorkspaceSkillsStatus) {
|
|
399
|
-
return lastWorkspaceSkillsStatus;
|
|
400
|
-
}
|
|
401
|
-
if (workspaceSkillsStatusProvider) {
|
|
402
|
-
try {
|
|
403
|
-
return await workspaceSkillsStatusProvider(boundWorkspace);
|
|
404
|
-
} catch (err) {
|
|
405
|
-
writeStderrLine(
|
|
406
|
-
`qwen serve: getWorkspaceSkillsStatus local provider failed: ${err instanceof Error ? err.message : String(err)}`
|
|
407
|
-
);
|
|
408
|
-
}
|
|
409
|
-
}
|
|
410
|
-
return status;
|
|
425
|
+
return getWorkspaceSkillsStatus();
|
|
411
426
|
},
|
|
412
427
|
async getWorkspaceProvidersStatus(_ctx) {
|
|
413
428
|
if (workspaceProvidersStatusProvider) {
|
|
@@ -566,7 +581,10 @@ function createDaemonWorkspaceService(deps) {
|
|
|
566
581
|
async getWorkspaceVoiceStatus(_ctx) {
|
|
567
582
|
return buildWorkspaceVoiceStatus(
|
|
568
583
|
boundWorkspace,
|
|
569
|
-
loadSettings(
|
|
584
|
+
loadSettings(
|
|
585
|
+
boundWorkspace,
|
|
586
|
+
voiceEnv ? { skipLoadEnvironment: true } : true
|
|
587
|
+
)
|
|
570
588
|
);
|
|
571
589
|
},
|
|
572
590
|
// -- Mutations --
|
|
@@ -619,11 +637,15 @@ function createDaemonWorkspaceService(deps) {
|
|
|
619
637
|
"Workspace voice settings persistence is not available"
|
|
620
638
|
);
|
|
621
639
|
}
|
|
622
|
-
const settings = loadSettings(
|
|
623
|
-
|
|
640
|
+
const settings = loadSettings(
|
|
641
|
+
boundWorkspace,
|
|
642
|
+
voiceEnv ? { skipLoadEnvironment: true } : true
|
|
643
|
+
);
|
|
644
|
+
validateWorkspaceVoiceState(settings, request, { env: voiceEnv });
|
|
624
645
|
const workspaceTrusted = getWorkspaceTrustStatus(settings.merged, boundWorkspace).effective.state === "trusted";
|
|
625
646
|
const writes = buildWorkspaceVoiceSettingsWrites(settings, request, {
|
|
626
|
-
workspaceTrusted
|
|
647
|
+
workspaceTrusted,
|
|
648
|
+
...voiceSettingsScope ? { scopeOverride: voiceSettingsScope } : {}
|
|
627
649
|
});
|
|
628
650
|
const publishWrite = /* @__PURE__ */ __name((write) => {
|
|
629
651
|
publishWorkspaceEvent({
|
|
@@ -664,6 +686,9 @@ function createDaemonWorkspaceService(deps) {
|
|
|
664
686
|
writeStderrLine(
|
|
665
687
|
`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)}`
|
|
666
688
|
);
|
|
689
|
+
for (const committedWrite of committed) {
|
|
690
|
+
publishWrite(committedWrite);
|
|
691
|
+
}
|
|
667
692
|
throw new WorkspaceSettingsPartialPersistError(
|
|
668
693
|
`Voice settings partial persist failed: committed=${committed.length}/${writes.length}`,
|
|
669
694
|
committed,
|
|
@@ -678,7 +703,10 @@ function createDaemonWorkspaceService(deps) {
|
|
|
678
703
|
}
|
|
679
704
|
return buildWorkspaceVoiceStatus(
|
|
680
705
|
boundWorkspace,
|
|
681
|
-
loadSettings(
|
|
706
|
+
loadSettings(
|
|
707
|
+
boundWorkspace,
|
|
708
|
+
voiceEnv ? { skipLoadEnvironment: true } : true
|
|
709
|
+
)
|
|
682
710
|
);
|
|
683
711
|
},
|
|
684
712
|
async setWorkspaceToolEnabled(ctx, toolName, enabled) {
|
|
@@ -690,6 +718,80 @@ function createDaemonWorkspaceService(deps) {
|
|
|
690
718
|
});
|
|
691
719
|
return { toolName, enabled };
|
|
692
720
|
},
|
|
721
|
+
async setWorkspaceSkillEnabled(ctx, requestedSkillName, enabled) {
|
|
722
|
+
const normalizedName = requestedSkillName.trim().toLowerCase();
|
|
723
|
+
const status = await getWorkspaceSkillsStatus();
|
|
724
|
+
const skill = status.skills.find(
|
|
725
|
+
(candidate) => candidate.name.trim().toLowerCase() === normalizedName
|
|
726
|
+
);
|
|
727
|
+
if (!skill) throw new WorkspaceSkillNotFoundError(requestedSkillName);
|
|
728
|
+
if (skill.userInvocable === false) {
|
|
729
|
+
throw new WorkspaceSkillNotToggleableError(
|
|
730
|
+
skill.name,
|
|
731
|
+
"not_user_invocable"
|
|
732
|
+
);
|
|
733
|
+
}
|
|
734
|
+
const disabled = loadSettings(boundWorkspace).merged.skills?.disabled;
|
|
735
|
+
const disabledNames = new Set(
|
|
736
|
+
(Array.isArray(disabled) ? disabled : []).filter((name) => typeof name === "string").map((name) => name.trim().toLowerCase()).filter(Boolean)
|
|
737
|
+
);
|
|
738
|
+
if (skill.level === "extension" && skill.status === "disabled" && !disabledNames.has(normalizedName)) {
|
|
739
|
+
throw new WorkspaceSkillNotToggleableError(
|
|
740
|
+
skill.name,
|
|
741
|
+
"inactive_extension"
|
|
742
|
+
);
|
|
743
|
+
}
|
|
744
|
+
const persisted = await persistDisabledSkills(
|
|
745
|
+
boundWorkspace,
|
|
746
|
+
skill.name,
|
|
747
|
+
enabled
|
|
748
|
+
);
|
|
749
|
+
const channelLive = isChannelLive?.() ?? false;
|
|
750
|
+
let activation = channelLive ? "applied" : "deferred";
|
|
751
|
+
let sessionsRefreshed = 0;
|
|
752
|
+
let sessionsFailed = 0;
|
|
753
|
+
if (persisted.changed) {
|
|
754
|
+
lastWorkspaceSkillsStatus = void 0;
|
|
755
|
+
if (channelLive) {
|
|
756
|
+
try {
|
|
757
|
+
const refreshed = await invokeWorkspaceCommand(
|
|
758
|
+
SERVE_CONTROL_EXT_METHODS.workspaceSkillsRefresh,
|
|
759
|
+
{ cwd: boundWorkspace }
|
|
760
|
+
);
|
|
761
|
+
sessionsRefreshed = refreshed.sessionsRefreshed;
|
|
762
|
+
sessionsFailed = refreshed.sessionsFailed;
|
|
763
|
+
if (sessionsFailed > 0) activation = "partial";
|
|
764
|
+
} catch (err) {
|
|
765
|
+
if (err instanceof SessionNotFoundError || err instanceof BridgeChannelClosedError) {
|
|
766
|
+
activation = "deferred";
|
|
767
|
+
} else {
|
|
768
|
+
activation = "partial";
|
|
769
|
+
sessionsFailed = 1;
|
|
770
|
+
writeStderrLine(
|
|
771
|
+
`qwen serve: workspace skill refresh failed: ${err instanceof Error ? err.message : String(err)}`
|
|
772
|
+
);
|
|
773
|
+
}
|
|
774
|
+
}
|
|
775
|
+
}
|
|
776
|
+
publishWorkspaceEvent({
|
|
777
|
+
type: "settings_changed",
|
|
778
|
+
data: {
|
|
779
|
+
key: "skills.disabled",
|
|
780
|
+
value: persisted.disabled.length > 0 ? persisted.disabled : void 0,
|
|
781
|
+
scope: "workspace"
|
|
782
|
+
},
|
|
783
|
+
originatorClientId: ctx.originatorClientId
|
|
784
|
+
});
|
|
785
|
+
}
|
|
786
|
+
return {
|
|
787
|
+
skillName: skill.name,
|
|
788
|
+
enabled,
|
|
789
|
+
changed: persisted.changed,
|
|
790
|
+
activation,
|
|
791
|
+
sessionsRefreshed,
|
|
792
|
+
sessionsFailed
|
|
793
|
+
};
|
|
794
|
+
},
|
|
693
795
|
async initWorkspace(ctx, opts) {
|
|
694
796
|
const filename = contextFilename;
|
|
695
797
|
const target = path.resolve(boundWorkspace, filename);
|
|
@@ -7,15 +7,6 @@ import {
|
|
|
7
7
|
__name
|
|
8
8
|
} from "./chunk-J2S4EL5Y.js";
|
|
9
9
|
|
|
10
|
-
// packages/cli/src/serve/channel-worker-env.ts
|
|
11
|
-
init_esbuild_shims();
|
|
12
|
-
var CHANNEL_DAEMON_WORKER_SENTINEL = "QWEN_CHANNEL_DAEMON_WORKER";
|
|
13
|
-
var CHANNEL_WORKER_HEARTBEAT_INTERVAL_MS = 15e3;
|
|
14
|
-
var QWEN_DAEMON_TOKEN_ENV = "QWEN_DAEMON_TOKEN";
|
|
15
|
-
var QWEN_DAEMON_URL_ENV = "QWEN_DAEMON_URL";
|
|
16
|
-
var QWEN_DAEMON_WORKSPACE_ENV = "QWEN_DAEMON_WORKSPACE";
|
|
17
|
-
var QWEN_SERVER_TOKEN_ENV = "QWEN_SERVER_TOKEN";
|
|
18
|
-
|
|
19
10
|
// packages/cli/src/serve/channel-webhook-ipc.ts
|
|
20
11
|
init_esbuild_shims();
|
|
21
12
|
import { randomUUID } from "node:crypto";
|
|
@@ -65,12 +56,6 @@ function isChannelWebhookTaskResultMessage(value) {
|
|
|
65
56
|
__name(isChannelWebhookTaskResultMessage, "isChannelWebhookTaskResultMessage");
|
|
66
57
|
|
|
67
58
|
export {
|
|
68
|
-
CHANNEL_DAEMON_WORKER_SENTINEL,
|
|
69
|
-
CHANNEL_WORKER_HEARTBEAT_INTERVAL_MS,
|
|
70
|
-
QWEN_DAEMON_TOKEN_ENV,
|
|
71
|
-
QWEN_DAEMON_URL_ENV,
|
|
72
|
-
QWEN_DAEMON_WORKSPACE_ENV,
|
|
73
|
-
QWEN_SERVER_TOKEN_ENV,
|
|
74
59
|
ChannelWebhookEnqueueError,
|
|
75
60
|
isChannelWebhookEnqueueErrorCode,
|
|
76
61
|
isChannelWebhookEnqueueError,
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
formatFetchErrorForUser
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-ZPAHLFZU.js";
|
|
6
6
|
import {
|
|
7
7
|
openBrowserSecurely
|
|
8
8
|
} from "./chunk-JESCGQM3.js";
|
|
9
9
|
import {
|
|
10
10
|
atomicWriteFile
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-WIEO4CWB.js";
|
|
12
12
|
import {
|
|
13
13
|
combineAbortSignals
|
|
14
14
|
} from "./chunk-DJ2GSRLV.js";
|
|
15
15
|
import {
|
|
16
16
|
Storage,
|
|
17
17
|
createDebugLogger
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-7NFB7LBQ.js";
|
|
19
19
|
import {
|
|
20
20
|
init_esbuild_shims
|
|
21
21
|
} from "./chunk-5O2XNYP6.js";
|