@qwen-code/qwen-code 0.19.9 → 0.19.10-nightly.20260716.506ce0a1a
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 +14 -6
- package/bundled/qc-helper/docs/features/approval-mode.md +2 -2
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +33 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +64 -20
- package/bundled/qc-helper/docs/features/channels/wecom.md +8 -7
- 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/sandbox.md +2 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
- package/bundled/qc-helper/docs/qwen-serve.md +49 -20
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
- package/bundled/review/DESIGN.md +219 -33
- package/bundled/review/SKILL.md +429 -382
- package/chunks/{MaxSizedBox-6HYJ3ZPJ.js → MaxSizedBox-WOC3YDWA.js} +31 -32
- package/chunks/{StandaloneSessionPicker-WS4GXYOG.js → StandaloneSessionPicker-H5HZCAFD.js} +49 -48
- package/chunks/{acpAgent-5FWSOZL5.js → acpAgent-55YDJDNM.js} +922 -550
- package/chunks/{agent-HOLHB3RT.js → agent-H6VE5W3L.js} +26 -27
- package/chunks/{agent-headless-SXL6H56A.js → agent-headless-T4XJOCRU.js} +26 -27
- package/chunks/{anthropicContentGenerator-L73TO3DB.js → anthropicContentGenerator-HBRXJSP4.js} +78 -16
- package/chunks/{artifact-tool-U7IRTLIV.js → artifact-tool-MIZLXBLF.js} +2 -2
- package/chunks/{askUserQuestion-2DLUUZZG.js → askUserQuestion-XMJVPNWM.js} +2 -2
- package/chunks/{bridge-BCJQ7BBB.js → bridge-FTB6ZP3R.js} +31 -34
- package/chunks/{ca-UJ6HC4H2.js → ca-CODEN7TD.js} +9 -1
- package/chunks/channel-worker-group-K7QKH6IG.js +13 -0
- package/chunks/channel-worker-manager-CUDPU4CN.js +418 -0
- package/chunks/channel-worker-supervisor-4XTO2ZD3.js +20 -0
- package/chunks/{chunk-LXNEJD34.js → chunk-2FO5GFKZ.js} +1 -1
- package/chunks/{chunk-VA4KQY6V.js → chunk-2JNR4VP2.js} +3 -3
- package/chunks/{chunk-L36P3NBD.js → chunk-2W3OOD4W.js} +2 -0
- package/chunks/{chunk-7R3CZA3Q.js → chunk-2Z5UX4KI.js} +1 -1
- package/chunks/{chunk-CUMMSHH6.js → chunk-3DWIFU7L.js} +1 -1
- package/chunks/chunk-3MX7D6QN.js +516 -0
- package/chunks/{chunk-SJHDYNHF.js → chunk-4BJVSIS3.js} +3 -3
- package/chunks/{chunk-TO6QE22P.js → chunk-5CNYZ7TN.js} +26 -22
- package/chunks/{chunk-N3EMS75V.js → chunk-5DEJ4T6C.js} +1333 -1232
- package/chunks/chunk-5HBA2Z7V.js +28 -0
- package/chunks/{chunk-ZJE7NSL3.js → chunk-5M6IDOMF.js} +34 -97
- package/chunks/{chunk-SCGXUJBT.js → chunk-6LI3L22E.js} +3 -3
- package/chunks/{chunk-K434OPES.js → chunk-6WPJRYLZ.js} +3 -3
- package/chunks/{chunk-YAUFFXDS.js → chunk-7GM2RWCR.js} +12 -11
- package/chunks/{chunk-OQ4DRIOA.js → chunk-7HWE2W74.js} +2 -2
- package/chunks/{chunk-J4TSQ5EQ.js → chunk-7NFB7LBQ.js} +8 -1
- package/chunks/{chunk-MC23XKFE.js → chunk-A2HWMJVO.js} +37 -3
- package/chunks/{chunk-3G7CIHVV.js → chunk-ABNYOMDG.js} +4 -4
- package/chunks/{chunk-3AHXV67U.js → chunk-AGZLXLBY.js} +1 -1
- package/chunks/{chunk-RDJSGHZE.js → chunk-ALGGS7UH.js} +1 -38
- package/chunks/{chunk-Q4YQW46J.js → chunk-AMRZVQUY.js} +43 -40
- package/chunks/{chunk-W3JHSWRP.js → chunk-AN6C2U46.js} +4 -4
- package/chunks/{chunk-GWHYEOV2.js → chunk-ARKANCNX.js} +2 -1
- package/chunks/{chunk-5SFOMFG4.js → chunk-AVEOWVOM.js} +36 -2
- package/chunks/{chunk-34MW4KTI.js → chunk-BA5JGE5F.js} +2 -2
- package/chunks/{chunk-5HOMWMCL.js → chunk-BSJAQUFD.js} +5492 -1336
- package/chunks/{chunk-L6P4KPHR.js → chunk-BWJKL5DB.js} +58 -38
- package/chunks/{chunk-PVZM22CK.js → chunk-C32JFRGV.js} +5 -5
- package/chunks/{chunk-AKIVHSJR.js → chunk-CZIHPO7L.js} +163 -782
- package/chunks/chunk-DL7RCO6V.js +493 -0
- package/chunks/{chunk-KKNMOEZH.js → chunk-E2UVIFI2.js} +185 -398
- package/chunks/{chunk-5VXNZWGF.js → chunk-ENUQSKEY.js} +1 -1
- package/chunks/{chunk-PDZ7MBDG.js → chunk-EWILX3BM.js} +27 -6
- package/chunks/{chunk-BMGVRZN4.js → chunk-EZWX232B.js} +1 -1
- package/chunks/{chunk-4GORAUCN.js → chunk-F333XEAU.js} +1 -1
- package/chunks/{chunk-YLV3XXFB.js → chunk-FBU7WRZI.js} +17 -1
- package/chunks/chunk-FEOZBUMT.js +77 -0
- package/chunks/{chunk-5U27BZ72.js → chunk-FKEGVMPX.js} +269 -83
- package/chunks/chunk-FNX3LGAK.js +34 -0
- package/chunks/{chunk-LK7KUE55.js → chunk-FSA7ERJ2.js} +1 -1
- package/chunks/{chunk-PODM4SZ4.js → chunk-G3BIBPI7.js} +5 -5
- package/chunks/{chunk-A3XKDTSH.js → chunk-GA65O2TB.js} +4 -4
- package/chunks/{chunk-3BTRNWWD.js → chunk-GOXKNSDZ.js} +1 -64
- package/chunks/{channel-worker-supervisor-WSOAAYUO.js → chunk-GXGIM7QP.js} +67 -35
- package/chunks/{chunk-6PESIEKJ.js → chunk-GXUWGPYX.js} +68 -6
- package/chunks/chunk-GYTKQYDB.js +23 -0
- package/chunks/{chunk-GZRTYZ2R.js → chunk-H3XMJV7T.js} +218 -1
- package/chunks/{chunk-WQUQVGTF.js → chunk-HGRXW4HQ.js} +467 -106
- package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
- package/chunks/{chunk-ECNYL4AA.js → chunk-HUEWOHKV.js} +1 -1
- package/chunks/chunk-IDS7MSUP.js +74 -0
- package/chunks/{chunk-KHUQZZJ6.js → chunk-IHDRJLLR.js} +382 -36
- package/chunks/{chunk-CLFKOZEK.js → chunk-J4SEAF4X.js} +114 -4
- package/chunks/{chunk-B5ORX3FG.js → chunk-JGUT3LWZ.js} +6 -1
- package/chunks/{chunk-P67PFTUT.js → chunk-KEYEYCHZ.js} +4 -4
- package/chunks/{chunk-ORBGV7NJ.js → chunk-KKRTYONM.js} +6 -4
- package/chunks/{chunk-7PU4FYLG.js → chunk-KOXFAG6P.js} +4 -18
- package/chunks/{chunk-EGYZ275M.js → chunk-KWLVWNF5.js} +55 -7
- package/chunks/{chunk-XLA62MYB.js → chunk-KXECVZPD.js} +2 -2
- package/chunks/{chunk-IAVB3HM3.js → chunk-L4Y55KIS.js} +33 -1
- package/chunks/{chunk-4QLQE5WJ.js → chunk-L5U3ELZX.js} +1 -1
- package/chunks/{chunk-4ZVWQHEQ.js → chunk-LQIDP6K5.js} +1 -1
- package/chunks/{chunk-DC5Z3DU6.js → chunk-LXLTBIDP.js} +43 -6
- package/chunks/chunk-LXXMOYPL.js +22 -0
- package/chunks/{chunk-Q6I5QHMH.js → chunk-MFNKBXYH.js} +1 -1
- package/chunks/chunk-MR3PXB6E.js +48 -0
- package/chunks/{chunk-JZETEN3Z.js → chunk-N45S36AH.js} +3 -3
- package/chunks/{chunk-GWLSNBG4.js → chunk-NA3IG6XG.js} +748 -27
- package/chunks/{chunk-D5SKC4YG.js → chunk-O3M25JXE.js} +213 -29
- package/chunks/{chunk-EAXLGSFP.js → chunk-O6XGHDS5.js} +11 -11
- package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
- package/chunks/{chunk-X4NKFGFJ.js → chunk-OJAMDVF5.js} +0 -15
- package/chunks/{chunk-BZIFY5TF.js → chunk-OKAIGAYW.js} +3 -3
- package/chunks/{chunk-CNEIYWSA.js → chunk-OVIV236K.js} +5 -5
- package/chunks/{chunk-3SJSQXNS.js → chunk-PEJWA3QQ.js} +12 -8
- package/chunks/{chunk-E2IY465S.js → chunk-PWNOAWXB.js} +59 -12
- package/chunks/{chunk-B4G2WOFA.js → chunk-Q5MKHNIR.js} +28 -5
- package/chunks/{chunk-MXL5UP4X.js → chunk-Q6TUALBE.js} +1 -1
- package/chunks/{chunk-QYMQSECS.js → chunk-QAW7PIHT.js} +2 -2
- package/chunks/{chunk-HKMAENAO.js → chunk-QDTGDM2T.js} +14 -9
- package/chunks/{chunk-LUODI7WD.js → chunk-RCEEXIOO.js} +6 -4
- package/chunks/{chunk-W2UIXQDL.js → chunk-RTV5TUYB.js} +12 -4
- package/chunks/chunk-RW7DUKFO.js +91 -0
- package/chunks/{chunk-NVYTCB5Z.js → chunk-SA6QVLWI.js} +17325 -16259
- package/chunks/chunk-SJSI7PXU.js +59 -0
- package/chunks/{chunk-HVY356M2.js → chunk-SMGBWLNU.js} +3 -3
- package/chunks/{chunk-CEA3E3JB.js → chunk-SPJQO2CE.js} +2 -2
- package/chunks/{chunk-CC2ITGCF.js → chunk-STZQCNN3.js} +49 -6
- package/chunks/{chunk-HPDUL5MF.js → chunk-T2ZDAER2.js} +1 -1
- package/chunks/{chunk-XUOOWUZS.js → chunk-T3TQ3ACP.js} +1 -1
- package/chunks/{chunk-4C5BQ2D2.js → chunk-TIKDHS6V.js} +100 -17
- package/chunks/chunk-TV6K2FB4.js +224 -0
- package/chunks/{chunk-5XUCZNSY.js → chunk-TYLOFD2U.js} +1 -1
- package/chunks/{chunk-D2GFWEXB.js → chunk-UCUUH2JV.js} +6 -6
- package/chunks/{chunk-BAPGSC7U.js → chunk-UZP7K33Y.js} +23 -9
- package/chunks/{chunk-77XJ3SWN.js → chunk-VDAR6UO2.js} +8 -6
- package/chunks/{chunk-XYQSMABS.js → chunk-VKLVGA2D.js} +4 -4
- package/chunks/{chunk-JSG7ZSBC.js → chunk-VRR65QYW.js} +251 -3
- package/chunks/{chunk-U2NNEY4R.js → chunk-VT5AWJN4.js} +1 -1
- package/chunks/{chunk-ZLXQN2QS.js → chunk-WIEO4CWB.js} +1 -1
- package/chunks/{chunk-X6TJ3YZV.js → chunk-WKEO3GLZ.js} +160 -60
- package/chunks/{chunk-J3JA76CF.js → chunk-WTNZ6DXB.js} +1 -1
- package/chunks/{chunk-VWPVHAMO.js → chunk-XIWQ5QST.js} +8 -1
- package/chunks/{chunk-TDEXZKMT.js → chunk-Y66VOBRP.js} +2 -2
- package/chunks/{chunk-3VAGG5T5.js → chunk-YYBZUIPL.js} +1015 -100
- package/chunks/{chunk-CCDMCZPP.js → chunk-YZ3SBNP7.js} +1 -1
- package/chunks/{chunk-ATAKVRIF.js → chunk-Z3XA2TNG.js} +7 -7
- package/chunks/{chunk-EMDMPBJ4.js → chunk-Z7SVC7PJ.js} +10 -3
- package/chunks/{chunk-AURZZYMD.js → chunk-ZIVSSTUG.js} +4 -4
- package/chunks/{chunk-UOZWKTQG.js → chunk-ZPAHLFZU.js} +2 -2
- package/chunks/{chunk-34Z3U5RQ.js → chunk-ZQIYGQCG.js} +765 -168
- package/chunks/{computer-use-HM37RX6A.js → computer-use-NADT7ULB.js} +26 -27
- package/chunks/{config-utils-NV2SVGPB.js → config-utils-IQQT3GCI.js} +3 -2
- package/chunks/{contextCommand-OF5SFGH2.js → contextCommand-U7NEJYJ7.js} +28 -29
- package/chunks/{create-sub-session-INX7TXJI.js → create-sub-session-EAB2U5XW.js} +2 -2
- package/chunks/{create-sub-session-KPRT7ECJ.js → create-sub-session-SUN33INC.js} +26 -27
- package/chunks/{cron-create-AMBKGZX6.js → cron-create-GMVKSXZT.js} +4 -4
- package/chunks/{cron-delete-LRU4OJYG.js → cron-delete-VDZKUAVK.js} +4 -4
- package/chunks/{cron-list-WVP2JXER.js → cron-list-UG7C7RAR.js} +4 -4
- package/chunks/{daemon-ARHTSTXP.js → daemon-SJXEKP3H.js} +773 -126
- package/chunks/daemon-status-provider-WIIYLGZJ.js +74 -0
- package/chunks/{de-EBJN3OVN.js → de-NOXPCSYN.js} +9 -1
- package/chunks/{dist-XKU3ABM5.js → dist-4WCQEZIN.js} +4 -51
- package/chunks/{dist-QYCAEZIT.js → dist-DOPL5LSQ.js} +5 -1
- package/chunks/{dist-WKPOYU7O.js → dist-GXJVCOS7.js} +1 -1
- package/chunks/{dist-R7LN5AZE.js → dist-PX2ERZ6I.js} +2 -2
- package/chunks/{dist-PNVLTKTL.js → dist-V2YVLYOW.js} +215 -33
- package/chunks/{dist-VHV4EVHG.js → dist-VYWUKURL.js} +1 -1
- package/chunks/{earlyInputCapture-3VTHRC4C.js → earlyInputCapture-6FRM6UMU.js} +27 -28
- package/chunks/{edit-VNI4NJ73.js → edit-7GOIQTCZ.js} +27 -28
- package/chunks/{en-5A6LA7RK.js → en-JFVULHTB.js} +11 -1
- package/chunks/{enter-worktree-IYYBKPZT.js → enter-worktree-476E6WIK.js} +26 -27
- package/chunks/{enterPlanMode-GMC5FD5A.js → enterPlanMode-IRJM6W3C.js} +42 -28
- package/chunks/{environment-5HSSRMJ7.js → environment-ROMULS2X.js} +30 -30
- package/chunks/{errors-HMFCJJ7P.js → errors-OUIWPUDY.js} +28 -29
- package/chunks/{exit-worktree-6BHCMP5G.js → exit-worktree-PPSFK753.js} +26 -27
- package/chunks/{exitPlanMode-CJW7G74W.js → exitPlanMode-YKQMD4D7.js} +26 -27
- package/chunks/{fast-path-FRDMDVHG.js → fast-path-CNK2HHKH.js} +3 -3
- package/chunks/{fast-path-settings-5QZE64HR.js → fast-path-settings-DAOVFADC.js} +6 -4
- package/chunks/{fr-YXRABLYZ.js → fr-HVFNU42H.js} +9 -1
- package/chunks/{gemini-QYSEGHAX.js → gemini-WQNFT6TR.js} +216 -90
- package/chunks/{geminiContentGenerator-J7YNZDYP.js → geminiContentGenerator-4QJH2JDP.js} +4 -4
- package/chunks/{glob-BRCSGFOT.js → glob-36TVLBWW.js} +28 -28
- package/chunks/{grep-EE2DUOSY.js → grep-QTYLNO2M.js} +26 -27
- package/chunks/{handleAutoUpdate-5NWTLR67.js → handleAutoUpdate-36FQFODK.js} +30 -31
- package/chunks/{i18n-BASPENNQ.js → i18n-JUGYPVSP.js} +27 -28
- package/chunks/initializer-OBBJUS25.js +72 -0
- package/chunks/{installationInfo-W6V4DT7W.js → installationInfo-MCKTPX64.js} +27 -28
- package/chunks/{ja-7VQOANVG.js → ja-PY5AF544.js} +10 -2
- package/chunks/{keychain-token-storage-VKUBNCP4.js → keychain-token-storage-AU22CQI6.js} +2 -2
- package/chunks/list-VW5QY4VJ.js +75 -0
- package/chunks/loadedSettingsAdapter-IELOOXG6.js +69 -0
- package/chunks/{loop-wakeup-WX7BLWWP.js → loop-wakeup-QXWZSCYM.js} +5 -5
- package/chunks/{ls-ZB2BDP6T.js → ls-2OUTG3IZ.js} +4 -4
- package/chunks/{lsp-V5DN4YUJ.js → lsp-4VMNXZW6.js} +2 -2
- package/chunks/mcp-Q3EC37ZS.js +69 -0
- package/chunks/{monitor-X5Z3H4FY.js → monitor-DCZ27AFR.js} +26 -27
- package/chunks/nonInteractiveCli-KXD7PFO4.js +128 -0
- package/chunks/{notebook-edit-TRM2QIJK.js → notebook-edit-YU4XF5LI.js} +27 -28
- package/chunks/{openaiContentGenerator-AAYONPMF.js → openaiContentGenerator-KL5WER2D.js} +13 -13
- package/chunks/{pidfile-D4I4FTVA.js → pidfile-WBOD7EJV.js} +27 -28
- package/chunks/processUtils-AOV4R34M.js +29 -0
- package/chunks/{pt-2C6YCSHL.js → pt-A3PRQXMU.js} +9 -1
- package/chunks/{qwenContentGenerator-K3HZ2H76.js → qwenContentGenerator-YIGBHYE3.js} +28 -29
- package/chunks/{qwenOAuth2-PJQ27GSO.js → qwenOAuth2-LEYOU7RU.js} +5 -5
- package/chunks/{read-file-7SZSIZOL.js → read-file-WVL4Y76X.js} +9 -9
- package/chunks/{read-mcp-resource-SM5DA4RG.js → read-mcp-resource-JUFHCKSC.js} +2 -2
- package/chunks/{record-artifact-4XKZX3UW.js → record-artifact-DWSMBXYY.js} +2 -2
- package/chunks/{ripGrep-YNPFVCZP.js → ripGrep-6GSWJERP.js} +26 -27
- package/chunks/{ru-6BBHVZZV.js → ru-IBCWUTOC.js} +9 -1
- package/chunks/{run-qwen-serve-DMWV5N6L.js → run-qwen-serve-QYUQMEDT.js} +1233 -371
- package/chunks/{runtime-57WWRVHN.js → runtime-K2YZCNB3.js} +42 -38
- package/chunks/{scheduler-YBLGWSIL.js → scheduler-EQCSN7QV.js} +26 -27
- package/chunks/{send-message-F36YD6KQ.js → send-message-JZ752NWD.js} +3 -3
- package/chunks/{serve-R63NK3CV.js → serve-DX5UGZD4.js} +36 -35
- package/chunks/{server-Z22GCAXP.js → server-T6HJH3DR.js} +5869 -1398
- package/chunks/{session-HKAAI7BN.js → session-SNU6ACY6.js} +299 -100
- package/chunks/{settings-3EYN66GK.js → settings-AKHZZNEL.js} +34 -33
- package/chunks/{shell-6YXINTWJ.js → shell-EY74IEZK.js} +28 -27
- package/chunks/{skill-OO57P4X6.js → skill-DPU62O3H.js} +11 -11
- package/chunks/{spawnChannel-JD7G4VU6.js → spawnChannel-RQZRWJ2V.js} +28 -30
- package/chunks/{src-G5UPLZSZ.js → src-7FITDSVC.js} +164 -52
- package/chunks/{standalone-update-OB7F4JPZ.js → standalone-update-XO3RK6DO.js} +28 -29
- package/chunks/{startInteractiveUI-73EGLIIH.js → startInteractiveUI-DVWZRHYQ.js} +728 -382
- package/chunks/{syntheticOutput-34H7LGA7.js → syntheticOutput-LELY6HAI.js} +3 -3
- package/chunks/{task-create-FRGOEIKY.js → task-create-QY3BIMNM.js} +8 -7
- package/chunks/{task-list-OW766BXZ.js → task-list-D2U47WBJ.js} +6 -5
- package/chunks/{task-stop-SIR5SNBN.js → task-stop-N6E5IYLH.js} +2 -2
- package/chunks/{task-update-YRA532MT.js → task-update-HJCQILLB.js} +8 -7
- package/chunks/{team-create-PECAAPXK.js → team-create-FOSRT62K.js} +26 -27
- package/chunks/{team-delete-6OSECUZC.js → team-delete-RCWYDRF4.js} +6 -5
- package/chunks/{team-plan-approval-L6F434RY.js → team-plan-approval-6VUDV27J.js} +26 -27
- package/chunks/{theme-manager-ZG4RY6GU.js → theme-manager-6UT6IO5T.js} +27 -28
- package/chunks/{todoWrite-YDMFEV4G.js → todoWrite-FKCGATPJ.js} +4 -4
- package/chunks/{tool-search-THVIWAPB.js → tool-search-ASSFMMN5.js} +10 -10
- package/chunks/{total-session-admission-JOKNRIIA.js → total-session-admission-YYWUO23H.js} +32 -35
- package/chunks/tree-sitter-YJVE2ZUK.js +2980 -0
- package/chunks/{trustedFolders-EOGT3UVS.js → trustedFolders-4BWV2IBK.js} +29 -29
- package/chunks/types-ML3TRJQ5.js +16 -0
- package/chunks/update-relaunch-74DLGH73.js +87 -0
- package/chunks/{updateCheck-2KYEYVSB.js → updateCheck-CRFCGFO5.js} +31 -30
- package/chunks/{validateNonInterActiveAuth-EN6ZQSR2.js → validateNonInterActiveAuth-BTTEPBGQ.js} +76 -73
- package/chunks/{version-3UEA6ZIR.js → version-Y5JE5Q63.js} +1 -1
- package/chunks/{web-fetch-PAAEQKBW.js → web-fetch-CFCWTCAP.js} +5 -6
- package/chunks/{workflow-QCCCMYP3.js → workflow-6WC7VPQN.js} +27 -28
- package/chunks/workspace-providers-status-RVG2C5ZS.js +72 -0
- package/chunks/workspace-registration-store-SLEU3D3X.js +27 -0
- package/chunks/{workspace-registry-24QFLQYH.js → workspace-registry-QMWGVOTF.js} +32 -35
- package/chunks/workspace-service-G572JSEU.js +84 -0
- package/chunks/workspace-skills-status-VSSMSMNK.js +71 -0
- package/chunks/{write-file-I3MUDRIE.js → write-file-5XVDRORP.js} +27 -28
- package/chunks/{zh-RQE7I22T.js → zh-PAUNIMHQ.js} +12 -2
- package/chunks/{zh-TW-TBPQGHKH.js → zh-TW-GNEUIUFF.js} +12 -2
- package/cli-entry.js +92 -8
- package/cli.js +11 -11
- package/locales/ca.js +16 -0
- package/locales/de.js +16 -0
- package/locales/en.js +19 -0
- package/locales/fr.js +16 -0
- package/locales/ja.js +17 -1
- package/locales/pt.js +16 -0
- package/locales/ru.js +16 -0
- package/locales/zh-TW.js +20 -1
- package/locales/zh.js +20 -1
- package/package.json +3 -3
- package/web-shell/assets/{arc-C15hqnJe.js → arc-vx1tRwnX.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-B-At37J_.js → architectureDiagram-3BPJPVTR-DBi6iUA1.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-B51wjcU7.js → blockDiagram-GPEHLZMM-Ga9JJ4Ak.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-xBK7BAwN.js → c4Diagram-AAUBKEIU-D8Vi5FYw.js} +1 -1
- package/web-shell/assets/channel-B29zQDTL.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-xKmLg7Yr.js → chunk-2J33WTMH-CSV6yQpU.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BfkdKZCM.js → chunk-4BX2VUAB-toYlppdI.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DT713sZf.js → chunk-55IACEB6-DbjzuyAr.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-CYEeAamv.js → chunk-727SXJPM-IkkSjSkk.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-DBN-5CFd.js → chunk-AQP2D5EJ-D5wUL6Zm.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CGZKk4PH.js → chunk-FMBD7UC4-C3o2DXG0.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-qQbC2O-y.js → chunk-ND2GUHAM-CutIi14T.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-B3zeXwsX.js → chunk-QZHKN3VN-DZ0NRHH-.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BNGI2SvC.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BNGI2SvC.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BKsl1Wvy.js → cose-bilkent-S5V4N54A-B3Dl88UJ.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-CuuuLiBK.js → dagre-BM42HDAG-DfTxfF6-.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-CG4_eKiV.js → diagram-2AECGRRQ-CJyH98yO.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-DSFTmZB1.js → diagram-5GNKFQAL-EbOiJNmW.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-BxwlEHn8.js → diagram-KO2AKTUF-AYNqpqqA.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BUAg-jMG.js → diagram-LMA3HP47-BY5VPa4H.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-BFM2jlO5.js → diagram-OG6HWLK6-BhMYAKlk.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-CerbFPa2.js → erDiagram-TEJ5UH35-Bp8S_F9l.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BNeZz5Zz.js → flowDiagram-I6XJVG4X-az3TE9PU.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CTOogLaM.js → ganttDiagram-6RSMTGT7-CfkAEpCe.js} +3 -3
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-yxSFkXPj.js → gitGraphDiagram-PVQCEYII-D1QmjMCy.js} +1 -1
- package/web-shell/assets/index-C8sDwQUv.js +1130 -0
- package/web-shell/assets/index-CaBoc5bb.js +3 -0
- package/web-shell/assets/index-Dpg5Wymg.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-DYdAUevm.js → infoDiagram-5YYISTIA-D3ompLrG.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CNuijZ90.js → ishikawaDiagram-YF4QCWOH-D3MRWp9I.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-BTyiuonf.js → journeyDiagram-JHISSGLW-DVkKCa44.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DPJo0Uow.js → kanban-definition-UN3LZRKU-BLif81wF.js} +1 -1
- package/web-shell/assets/{linear-C8wKCbIC.js → linear-BDU96EGS.js} +1 -1
- package/web-shell/assets/{mermaid.core-BV5o7nW5.js → mermaid.core-B-CwC26B.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BtLcBmSt.js → mindmap-definition-RKZ34NQL-CS1WOJ4G.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-C22J7A9Q.js → pieDiagram-4H26LBE5-BzgtNXVP.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DSL10wiL.js → quadrantDiagram-W4KKPZXB-BRfGC8MA.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-feqh0UpX.js → requirementDiagram-4Y6WPE33-CPBZkC7g.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js → sankeyDiagram-5OEKKPKP-nqNvinIk.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DIluIcb1.js → sequenceDiagram-3UESZ5HK-CM_Wdjh3.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-hlhnuoYH.js → stateDiagram-AJRCARHV-L0y-48VE.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BX1DdF8s.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-Dqf_CqgL.js → timeline-definition-PNZ67QCA-B_n5rb3A.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DD2QhaTX.js → vennDiagram-CIIHVFJN-C9NmLV5e.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-B2uI85U_.js → wardley-L42UT6IY-CrefK9gt.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-U1aJX71g.js → wardleyDiagram-YWT4CUSO-BUccf-bC.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-C0ODHUee.js → xychartDiagram-2RQKCTM6-DM6ef92l.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-524RQP4Q.js +0 -305
- package/chunks/chunk-CARU2RR2.js +0 -24
- package/chunks/chunk-CU3L64TP.js +0 -93
- package/chunks/chunk-OCPBI7J5.js +0 -18
- package/chunks/chunk-TEGEBB2I.js +0 -122
- package/chunks/chunk-VTU57BWZ.js +0 -30
- package/chunks/daemon-status-provider-B2UTZUJ2.js +0 -76
- 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
|
@@ -6,21 +6,18 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
CLIENT_MCP_OVER_WS_CONFIG_FLAG
|
|
8
8
|
} from "./chunk-PZL23GTM.js";
|
|
9
|
-
import {
|
|
10
|
-
MAX_WORKSPACE_PATH_LENGTH
|
|
11
|
-
} from "./chunk-W7FJ3N32.js";
|
|
12
9
|
import {
|
|
13
10
|
require_lib
|
|
14
11
|
} from "./chunk-WBL3FJEU.js";
|
|
12
|
+
import {
|
|
13
|
+
MAX_WORKSPACE_PATH_LENGTH
|
|
14
|
+
} from "./chunk-W7FJ3N32.js";
|
|
15
15
|
import {
|
|
16
16
|
require_mime_db
|
|
17
17
|
} from "./chunk-T2NCM2ET.js";
|
|
18
18
|
import {
|
|
19
19
|
writeStderrLine
|
|
20
20
|
} from "./chunk-YUZI3WAC.js";
|
|
21
|
-
import {
|
|
22
|
-
require_once
|
|
23
|
-
} from "./chunk-CU3L64TP.js";
|
|
24
21
|
import {
|
|
25
22
|
require_safer
|
|
26
23
|
} from "./chunk-XWRJCPHC.js";
|
|
@@ -11322,6 +11319,86 @@ var require_utils2 = __commonJS({
|
|
|
11322
11319
|
}
|
|
11323
11320
|
});
|
|
11324
11321
|
|
|
11322
|
+
// node_modules/wrappy/wrappy.js
|
|
11323
|
+
var require_wrappy = __commonJS({
|
|
11324
|
+
"node_modules/wrappy/wrappy.js"(exports, module) {
|
|
11325
|
+
init_esbuild_shims();
|
|
11326
|
+
module.exports = wrappy;
|
|
11327
|
+
function wrappy(fn, cb) {
|
|
11328
|
+
if (fn && cb) return wrappy(fn)(cb);
|
|
11329
|
+
if (typeof fn !== "function")
|
|
11330
|
+
throw new TypeError("need wrapper function");
|
|
11331
|
+
Object.keys(fn).forEach(function(k) {
|
|
11332
|
+
wrapper[k] = fn[k];
|
|
11333
|
+
});
|
|
11334
|
+
return wrapper;
|
|
11335
|
+
function wrapper() {
|
|
11336
|
+
var args = new Array(arguments.length);
|
|
11337
|
+
for (var i = 0; i < args.length; i++) {
|
|
11338
|
+
args[i] = arguments[i];
|
|
11339
|
+
}
|
|
11340
|
+
var ret = fn.apply(this, args);
|
|
11341
|
+
var cb2 = args[args.length - 1];
|
|
11342
|
+
if (typeof ret === "function" && ret !== cb2) {
|
|
11343
|
+
Object.keys(cb2).forEach(function(k) {
|
|
11344
|
+
ret[k] = cb2[k];
|
|
11345
|
+
});
|
|
11346
|
+
}
|
|
11347
|
+
return ret;
|
|
11348
|
+
}
|
|
11349
|
+
__name(wrapper, "wrapper");
|
|
11350
|
+
}
|
|
11351
|
+
__name(wrappy, "wrappy");
|
|
11352
|
+
}
|
|
11353
|
+
});
|
|
11354
|
+
|
|
11355
|
+
// node_modules/once/once.js
|
|
11356
|
+
var require_once = __commonJS({
|
|
11357
|
+
"node_modules/once/once.js"(exports, module) {
|
|
11358
|
+
init_esbuild_shims();
|
|
11359
|
+
var wrappy = require_wrappy();
|
|
11360
|
+
module.exports = wrappy(once);
|
|
11361
|
+
module.exports.strict = wrappy(onceStrict);
|
|
11362
|
+
once.proto = once(function() {
|
|
11363
|
+
Object.defineProperty(Function.prototype, "once", {
|
|
11364
|
+
value: /* @__PURE__ */ __name(function() {
|
|
11365
|
+
return once(this);
|
|
11366
|
+
}, "value"),
|
|
11367
|
+
configurable: true
|
|
11368
|
+
});
|
|
11369
|
+
Object.defineProperty(Function.prototype, "onceStrict", {
|
|
11370
|
+
value: /* @__PURE__ */ __name(function() {
|
|
11371
|
+
return onceStrict(this);
|
|
11372
|
+
}, "value"),
|
|
11373
|
+
configurable: true
|
|
11374
|
+
});
|
|
11375
|
+
});
|
|
11376
|
+
function once(fn) {
|
|
11377
|
+
var f = /* @__PURE__ */ __name(function() {
|
|
11378
|
+
if (f.called) return f.value;
|
|
11379
|
+
f.called = true;
|
|
11380
|
+
return f.value = fn.apply(this, arguments);
|
|
11381
|
+
}, "f");
|
|
11382
|
+
f.called = false;
|
|
11383
|
+
return f;
|
|
11384
|
+
}
|
|
11385
|
+
__name(once, "once");
|
|
11386
|
+
function onceStrict(fn) {
|
|
11387
|
+
var f = /* @__PURE__ */ __name(function() {
|
|
11388
|
+
if (f.called)
|
|
11389
|
+
throw new Error(f.onceError);
|
|
11390
|
+
f.called = true;
|
|
11391
|
+
return f.value = fn.apply(this, arguments);
|
|
11392
|
+
}, "f");
|
|
11393
|
+
var name = fn.name || "Function wrapped with `once`";
|
|
11394
|
+
f.onceError = name + " shouldn't be called more than once";
|
|
11395
|
+
f.called = false;
|
|
11396
|
+
return f;
|
|
11397
|
+
}
|
|
11398
|
+
__name(onceStrict, "onceStrict");
|
|
11399
|
+
}
|
|
11400
|
+
});
|
|
11401
|
+
|
|
11325
11402
|
// node_modules/is-promise/index.js
|
|
11326
11403
|
var require_is_promise = __commonJS({
|
|
11327
11404
|
"node_modules/is-promise/index.js"(exports, module) {
|
|
@@ -16451,6 +16528,7 @@ var SERVE_CAPABILITY_REGISTRY = {
|
|
|
16451
16528
|
// the underlying ACP method from unstable_resumeSession to resumeSession.
|
|
16452
16529
|
unstable_session_resume: { since: "v1" },
|
|
16453
16530
|
session_list: { since: "v1" },
|
|
16531
|
+
session_source_metadata: { since: "v1" },
|
|
16454
16532
|
session_prompt: { since: "v1" },
|
|
16455
16533
|
session_cancel: { since: "v1" },
|
|
16456
16534
|
session_events: { since: "v1" },
|
|
@@ -16553,6 +16631,7 @@ var SERVE_CAPABILITY_REGISTRY = {
|
|
|
16553
16631
|
// unregistered — the toggle takes effect on the next ACP child spawn
|
|
16554
16632
|
// (`tools.disabled` is consulted at `Config` construction time).
|
|
16555
16633
|
workspace_tool_toggle: { since: "v1" },
|
|
16634
|
+
workspace_skill_toggle: { since: "v1" },
|
|
16556
16635
|
workspace_settings: { since: "v1" },
|
|
16557
16636
|
// `GET /workspace/permissions` is always available when this tag is
|
|
16558
16637
|
// advertised. `POST /workspace/permissions` updates the active ACP
|
|
@@ -16598,6 +16677,9 @@ var SERVE_CAPABILITY_REGISTRY = {
|
|
|
16598
16677
|
// may be `null` for too-short histories or transient model failures
|
|
16599
16678
|
// (best-effort, never throws). SDK helper: `DaemonClient.recapSession`.
|
|
16600
16679
|
session_recap: { since: "v1" },
|
|
16680
|
+
// `POST /session/:id/generate` streams a stateless, tool-free model call.
|
|
16681
|
+
// The ACP child prefers fastModel and falls back to the main session model.
|
|
16682
|
+
session_generation: { since: "v1" },
|
|
16601
16683
|
// Side question (/btw) against the session's conversation context.
|
|
16602
16684
|
// Single-turn, tool-free LLM call via runForkedAgent (cache path).
|
|
16603
16685
|
session_btw: { since: "v1" },
|
|
@@ -16674,20 +16756,57 @@ var SERVE_CAPABILITY_REGISTRY = {
|
|
|
16674
16756
|
// `POST /workspace/channel/reload`. The worker is stopped and relaunched;
|
|
16675
16757
|
// on relaunch it re-reads settings.json (channels / proxy / per-channel
|
|
16676
16758
|
// model), so channel settings changes apply without a full daemon restart.
|
|
16677
|
-
// Advertised CONDITIONALLY
|
|
16678
|
-
//
|
|
16759
|
+
// Advertised CONDITIONALLY while the runtime manager has a committed or
|
|
16760
|
+
// recoverable channel worker selection.
|
|
16679
16761
|
channel_reload: { since: "v1" },
|
|
16762
|
+
// Runtime GET/PUT/DELETE control for daemon-managed channel selection.
|
|
16763
|
+
// The route exists even when no selection was supplied at daemon boot.
|
|
16764
|
+
channel_control: { since: "v1" },
|
|
16680
16765
|
// Multi-workspace sessions closed loop (issue #6378 Phase 2a). Advertised
|
|
16681
16766
|
// only when one daemon hosts more than one registered workspace runtime.
|
|
16682
16767
|
multi_workspace_sessions: { since: "v1" },
|
|
16768
|
+
// Singular session rewind routes resolve the owning live workspace runtime.
|
|
16769
|
+
multi_workspace_session_rewind: { since: "v1" },
|
|
16770
|
+
// Singular session shell routes resolve the owning live workspace runtime.
|
|
16771
|
+
multi_workspace_session_shell: { since: "v1" },
|
|
16772
|
+
persistent_workspace_registration: { since: "v1" },
|
|
16773
|
+
workspace_runtime_removal: { since: "v1" },
|
|
16683
16774
|
// Workspace-qualified core REST routes under `/workspaces/:workspace/...`.
|
|
16684
16775
|
// Covers core file/status/permissions/trust/lifecycle/MCP/tool, memory,
|
|
16685
16776
|
// workspace agent CRUD, and persisted session organization surfaces.
|
|
16686
16777
|
// Workspace-qualified settings also require the existing
|
|
16687
16778
|
// `workspace_settings` tag because that surface depends on settings
|
|
16688
|
-
// persistence. ACP/WebSocket
|
|
16689
|
-
//
|
|
16779
|
+
// persistence. ACP/WebSocket and auth stay outside this core tag;
|
|
16780
|
+
// workspace-qualified Voice REST/WebSocket routes use their separate
|
|
16781
|
+
// `workspace_qualified_voice` capability below. V2 extension management
|
|
16782
|
+
// is advertised separately via `extension_management_v2`.
|
|
16690
16783
|
workspace_qualified_rest_core: { since: "v1" },
|
|
16784
|
+
// Workspace-qualified Voice REST and WebSocket routes. This tag is enough
|
|
16785
|
+
// to discover plural modalities because legacy Voice tags describe only
|
|
16786
|
+
// the primary runtime and may be absent for a secondary-only setup.
|
|
16787
|
+
workspace_qualified_voice: { since: "v1" },
|
|
16788
|
+
// Global extension catalog/mutations plus workspace-qualified activation
|
|
16789
|
+
// projections. This is additive to the legacy primary-workspace
|
|
16790
|
+
// `workspace_extensions` contract.
|
|
16791
|
+
extension_management_v2: { since: "v1" },
|
|
16792
|
+
// Workspace-qualified, daemon-local persisted transcript paging. The tag is
|
|
16793
|
+
// unconditional because the route also serves a trusted single-workspace
|
|
16794
|
+
// primary; authorization is evaluated for the selected runtime per request.
|
|
16795
|
+
workspace_persisted_transcript: { since: "v1" },
|
|
16796
|
+
// Workspace-qualified full session export from active persisted storage.
|
|
16797
|
+
// This is separate from `session_export` so clients do not infer the plural
|
|
16798
|
+
// route from the legacy primary-workspace export capability.
|
|
16799
|
+
workspace_session_export: { since: "v1" },
|
|
16800
|
+
// Workspace-qualified full session export from archived persisted storage.
|
|
16801
|
+
// This remains independent from active export so older daemons cannot ignore
|
|
16802
|
+
// archive intent and return an active transcript with the same session id.
|
|
16803
|
+
workspace_archived_session_export: { since: "v1" },
|
|
16804
|
+
// Workspace-qualified ACP transport (issue #6378 Phase 4):
|
|
16805
|
+
// `/workspaces/:workspace/acp` mounts a per-runtime ACP dispatcher (HTTP +
|
|
16806
|
+
// WebSocket) for each registered workspace, with per-runtime device-flow and
|
|
16807
|
+
// reverse client-MCP. Legacy `/acp` stays bound to the primary runtime.
|
|
16808
|
+
// Advertised only when the daemon hosts more than one workspace runtime.
|
|
16809
|
+
workspace_qualified_acp: { since: "v1" },
|
|
16691
16810
|
// Phase 2 "reverse tool channel" (issue #5626). A connected WS client (e.g.
|
|
16692
16811
|
// the Chrome extension) can host an MCP server that the daemon's agent
|
|
16693
16812
|
// calls by carrying `mcp_message` JSON-RPC frames over the daemon WS,
|
|
@@ -16748,13 +16867,48 @@ var CONDITIONAL_SERVE_FEATURES = /* @__PURE__ */ new Map([
|
|
|
16748
16867
|
"session_artifacts_persistence",
|
|
16749
16868
|
(toggles) => toggles.sessionArtifactsPersistenceAvailable === true
|
|
16750
16869
|
],
|
|
16870
|
+
[
|
|
16871
|
+
"session_generation",
|
|
16872
|
+
(toggles) => toggles.sessionGenerationAvailable === true
|
|
16873
|
+
],
|
|
16751
16874
|
["rate_limit", (toggles) => toggles.rateLimit === true],
|
|
16752
16875
|
["workspace_reload", (toggles) => toggles.reloadAvailable === true],
|
|
16753
16876
|
["channel_reload", (toggles) => toggles.channelReloadAvailable === true],
|
|
16877
|
+
["channel_control", (toggles) => toggles.channelControlAvailable === true],
|
|
16754
16878
|
[
|
|
16755
16879
|
"multi_workspace_sessions",
|
|
16756
16880
|
(toggles) => toggles.multiWorkspaceSessionsEnabled === true
|
|
16757
16881
|
],
|
|
16882
|
+
[
|
|
16883
|
+
"multi_workspace_session_rewind",
|
|
16884
|
+
(toggles) => toggles.multiWorkspaceSessionsEnabled === true
|
|
16885
|
+
],
|
|
16886
|
+
[
|
|
16887
|
+
"multi_workspace_session_shell",
|
|
16888
|
+
(toggles) => toggles.multiWorkspaceSessionsEnabled === true && toggles.sessionShellCommandEnabled === true
|
|
16889
|
+
],
|
|
16890
|
+
[
|
|
16891
|
+
"persistent_workspace_registration",
|
|
16892
|
+
(toggles) => toggles.persistentWorkspaceRegistrationAvailable === true
|
|
16893
|
+
],
|
|
16894
|
+
[
|
|
16895
|
+
"workspace_runtime_removal",
|
|
16896
|
+
(toggles) => toggles.workspaceRuntimeRemovalAvailable === true
|
|
16897
|
+
],
|
|
16898
|
+
[
|
|
16899
|
+
"workspace_qualified_acp",
|
|
16900
|
+
// The plural routes are pre-mounted for workspaces registered after app
|
|
16901
|
+
// creation, but the capability becomes meaningful only once a secondary
|
|
16902
|
+
// runtime exists. Until then the qualified primary route is only an alias
|
|
16903
|
+
// for the always-available legacy `/acp` surface.
|
|
16904
|
+
(toggles) => toggles.acpHttpEnabled === true && toggles.multiWorkspaceSessionsEnabled === true
|
|
16905
|
+
],
|
|
16906
|
+
[
|
|
16907
|
+
"workspace_qualified_voice",
|
|
16908
|
+
// Like qualified ACP, the plural Voice surface is mounted ahead of time
|
|
16909
|
+
// but only becomes useful once the daemon has a secondary runtime.
|
|
16910
|
+
(toggles) => toggles.acpHttpEnabled === true && toggles.multiWorkspaceSessionsEnabled === true
|
|
16911
|
+
],
|
|
16758
16912
|
["client_mcp_over_ws", (toggles) => toggles.clientMcpOverWsEnabled === true],
|
|
16759
16913
|
["cdp_tunnel_over_ws", (toggles) => toggles.cdpTunnelOverWsEnabled === true],
|
|
16760
16914
|
[
|
|
@@ -16826,6 +16980,7 @@ var PROTOTYPE_POLLUTION_KEYS = /* @__PURE__ */ new Set([
|
|
|
16826
16980
|
var CLIENT_ID_HEADER = "x-qwen-client-id";
|
|
16827
16981
|
var MAX_CLIENT_ID_LENGTH = 128;
|
|
16828
16982
|
var MAX_TOOL_NAME_LENGTH = 256;
|
|
16983
|
+
var MAX_SKILL_NAME_LENGTH = 256;
|
|
16829
16984
|
var MAX_SERVER_NAME_LENGTH = 256;
|
|
16830
16985
|
var CLIENT_ID_RE = /^[A-Za-z0-9._:-]+$/;
|
|
16831
16986
|
var INVALID_PERMISSION_OUTCOME_ERROR = '`outcome` must be `{ outcome: "cancelled" }` or `{ outcome: "selected", optionId: string }`';
|
|
@@ -16928,7 +17083,8 @@ __name(validateMcpRuntimeServerName, "validateMcpRuntimeServerName");
|
|
|
16928
17083
|
function parseAndValidateWorkspaceClientId(req, res, bridge) {
|
|
16929
17084
|
const raw = parseClientIdHeader(req, res);
|
|
16930
17085
|
if (raw === null || raw === void 0) return raw;
|
|
16931
|
-
|
|
17086
|
+
const bridges = Array.isArray(bridge) ? bridge : [bridge];
|
|
17087
|
+
if (!bridges.some((candidate) => candidate.knownClientIds().has(raw))) {
|
|
16932
17088
|
res.status(400).json({
|
|
16933
17089
|
error: `Client id "${raw}" is not registered for this workspace`,
|
|
16934
17090
|
code: "invalid_client_id",
|
|
@@ -17024,7 +17180,8 @@ init_esbuild_shims();
|
|
|
17024
17180
|
var MAX_BUCKETS = 1e4;
|
|
17025
17181
|
var GC_REQUEST_INTERVAL = 1e3;
|
|
17026
17182
|
var GC_TIMER_INTERVAL_MS = 5 * 60 * 1e3;
|
|
17027
|
-
|
|
17183
|
+
var WORKSPACE_QUALIFIED_ACP_PATH = /^\/workspaces\/[^/]+\/acp$/i;
|
|
17184
|
+
function resolveTier(method, path3, workspaceQualifiedAcpEnabled) {
|
|
17028
17185
|
const p = path3.endsWith("/") && path3.length > 1 ? path3.slice(0, -1) : path3;
|
|
17029
17186
|
if (method === "OPTIONS") return null;
|
|
17030
17187
|
if ((method === "GET" || method === "HEAD") && (p === "/health" || p === "/demo"))
|
|
@@ -17034,6 +17191,8 @@ function resolveTier(method, path3) {
|
|
|
17034
17191
|
if (method === "GET" && p.startsWith("/session/") && p.endsWith("/events"))
|
|
17035
17192
|
return null;
|
|
17036
17193
|
if (p === "/acp" || p.startsWith("/acp/")) return null;
|
|
17194
|
+
if (workspaceQualifiedAcpEnabled && WORKSPACE_QUALIFIED_ACP_PATH.test(p))
|
|
17195
|
+
return null;
|
|
17037
17196
|
if (method === "POST" && p.startsWith("/session/") && p.endsWith("/prompt"))
|
|
17038
17197
|
return "prompt";
|
|
17039
17198
|
if (method !== "GET" && method !== "HEAD") return "mutation";
|
|
@@ -17137,7 +17296,11 @@ function createRateLimiter(config) {
|
|
|
17137
17296
|
next();
|
|
17138
17297
|
return;
|
|
17139
17298
|
}
|
|
17140
|
-
const tier = resolveTier(
|
|
17299
|
+
const tier = resolveTier(
|
|
17300
|
+
req.method,
|
|
17301
|
+
req.path,
|
|
17302
|
+
config.workspaceQualifiedAcpEnabled === true
|
|
17303
|
+
);
|
|
17141
17304
|
if (tier === null) {
|
|
17142
17305
|
next();
|
|
17143
17306
|
return;
|
|
@@ -17298,6 +17461,7 @@ async function buildDaemonStatusResponse(detail, input) {
|
|
|
17298
17461
|
null
|
|
17299
17462
|
);
|
|
17300
17463
|
const acpSnapshot = input.acpHandle?.registry.getSnapshot();
|
|
17464
|
+
const acpAggregate = input.acpHandle?.getSnapshot();
|
|
17301
17465
|
const rateLimitHits = input.rateLimiter?.getHitCounts() ?? zeroRateHits();
|
|
17302
17466
|
let pendingPrompts = 0;
|
|
17303
17467
|
let derivedQueuedPrompts = 0;
|
|
@@ -17324,22 +17488,25 @@ async function buildDaemonStatusResponse(detail, input) {
|
|
|
17324
17488
|
state: "disabled",
|
|
17325
17489
|
channels: []
|
|
17326
17490
|
};
|
|
17491
|
+
const channelWorkers = (workspaceRuntimes?.length ?? 1) > 1 ? input.getChannelWorkerSnapshots?.() : void 0;
|
|
17327
17492
|
const totalAdmissionSnapshot = input.getTotalSessionAdmissionSnapshot?.();
|
|
17328
17493
|
const issues = [];
|
|
17329
17494
|
let full;
|
|
17330
17495
|
pushRuntimeIssues(
|
|
17331
17496
|
issues,
|
|
17332
17497
|
acpSnapshot,
|
|
17498
|
+
acpAggregate,
|
|
17333
17499
|
rateLimitHits,
|
|
17334
17500
|
input,
|
|
17335
17501
|
channelWorker,
|
|
17502
|
+
channelWorkers,
|
|
17336
17503
|
totalAdmissionSnapshot,
|
|
17337
17504
|
workspaceSnapshots
|
|
17338
17505
|
);
|
|
17339
17506
|
if (detail === "full") {
|
|
17340
17507
|
full = await buildFullStatus(
|
|
17341
17508
|
input,
|
|
17342
|
-
|
|
17509
|
+
acpAggregate,
|
|
17343
17510
|
workspaceSnapshots.flatMap((item) => item.snapshot.sessions)
|
|
17344
17511
|
);
|
|
17345
17512
|
pushFullIssues(issues, full);
|
|
@@ -17404,16 +17571,17 @@ async function buildDaemonStatusResponse(detail, input) {
|
|
|
17404
17571
|
},
|
|
17405
17572
|
channel: { live: aggregatedChannelLive },
|
|
17406
17573
|
channelWorker,
|
|
17574
|
+
...channelWorkers && channelWorkers.length > 0 ? { channelWorkers } : {},
|
|
17407
17575
|
transport: {
|
|
17408
17576
|
restSseActive: input.getRestSseActive(),
|
|
17409
17577
|
acp: {
|
|
17410
17578
|
enabled: acpSnapshot !== void 0,
|
|
17411
|
-
connections:
|
|
17412
|
-
connectionStreams:
|
|
17413
|
-
sessionStreams:
|
|
17414
|
-
sseStreams:
|
|
17415
|
-
wsStreams:
|
|
17416
|
-
pendingClientRequests:
|
|
17579
|
+
connections: acpAggregate?.connectionCount ?? 0,
|
|
17580
|
+
connectionStreams: acpAggregate?.connectionStreams ?? 0,
|
|
17581
|
+
sessionStreams: acpAggregate?.sessionStreams ?? 0,
|
|
17582
|
+
sseStreams: acpAggregate?.sseStreams ?? 0,
|
|
17583
|
+
wsStreams: acpAggregate?.wsStreams ?? 0,
|
|
17584
|
+
pendingClientRequests: acpAggregate?.pendingClientRequests ?? 0
|
|
17417
17585
|
}
|
|
17418
17586
|
},
|
|
17419
17587
|
rateLimit: {
|
|
@@ -17550,7 +17718,7 @@ async function withTimeout(promise, section, timeoutMs) {
|
|
|
17550
17718
|
}
|
|
17551
17719
|
}
|
|
17552
17720
|
__name(withTimeout, "withTimeout");
|
|
17553
|
-
function pushRuntimeIssues(issues, acpSnapshot, rateLimitHits, input, channelWorker, totalAdmissionSnapshot, workspaceSnapshots) {
|
|
17721
|
+
function pushRuntimeIssues(issues, acpSnapshot, acpAggregate, rateLimitHits, input, channelWorker, channelWorkers, totalAdmissionSnapshot, workspaceSnapshots) {
|
|
17554
17722
|
for (const { workspaceCwd, snapshot } of workspaceSnapshots) {
|
|
17555
17723
|
if (snapshot.limits.maxSessions !== null && snapshot.limits.maxSessions > 0 && snapshot.sessionCount / snapshot.limits.maxSessions >= CAPACITY_WARNING_RATIO) {
|
|
17556
17724
|
issues.push({
|
|
@@ -17575,12 +17743,19 @@ function pushRuntimeIssues(issues, acpSnapshot, rateLimitHits, input, channelWor
|
|
|
17575
17743
|
});
|
|
17576
17744
|
}
|
|
17577
17745
|
}
|
|
17578
|
-
if (acpSnapshot !== void 0 && acpSnapshot.connectionCap !== null && acpSnapshot.connectionCap > 0
|
|
17579
|
-
|
|
17580
|
-
|
|
17581
|
-
|
|
17582
|
-
|
|
17583
|
-
|
|
17746
|
+
if (acpSnapshot !== void 0 && acpSnapshot.connectionCap !== null && acpSnapshot.connectionCap > 0) {
|
|
17747
|
+
const cap = acpSnapshot.connectionCap;
|
|
17748
|
+
const busiest = (acpAggregate?.mounts ?? []).reduce(
|
|
17749
|
+
(max, m) => Math.max(max, m.connectionCount),
|
|
17750
|
+
acpSnapshot.connectionCount
|
|
17751
|
+
);
|
|
17752
|
+
if (busiest / cap >= CAPACITY_WARNING_RATIO) {
|
|
17753
|
+
issues.push({
|
|
17754
|
+
code: "connection_capacity_high",
|
|
17755
|
+
severity: "warning",
|
|
17756
|
+
message: `ACP connections are at ${busiest}/${cap} on the busiest workspace mount.`
|
|
17757
|
+
});
|
|
17758
|
+
}
|
|
17584
17759
|
}
|
|
17585
17760
|
const pendingPermissionCount = workspaceSnapshots.reduce(
|
|
17586
17761
|
(sum, item) => sum + item.snapshot.pendingPermissionCount,
|
|
@@ -17610,6 +17785,16 @@ function pushRuntimeIssues(issues, acpSnapshot, rateLimitHits, input, channelWor
|
|
|
17610
17785
|
message: `${sumRateHits(rateLimitHits)} request(s) have been rejected by rate limiting since start.`
|
|
17611
17786
|
});
|
|
17612
17787
|
}
|
|
17788
|
+
const groupedWorkers = channelWorkers && channelWorkers.length > 0 ? channelWorkers : void 0;
|
|
17789
|
+
const workers = groupedWorkers ?? [channelWorker];
|
|
17790
|
+
for (const worker of workers) {
|
|
17791
|
+
pushChannelWorkerIssues(issues, worker, groupedWorkers !== void 0);
|
|
17792
|
+
}
|
|
17793
|
+
}
|
|
17794
|
+
__name(pushRuntimeIssues, "pushRuntimeIssues");
|
|
17795
|
+
function pushChannelWorkerIssues(issues, channelWorker, grouped) {
|
|
17796
|
+
const workspace = "workspaceCwd" in channelWorker ? ` for workspace ${channelWorker.workspaceCwd}` : "";
|
|
17797
|
+
const section = grouped ? "runtime.channelWorkers" : "runtime.channelWorker";
|
|
17613
17798
|
if (channelWorker.enabled && (channelWorker.state === "exited" || channelWorker.state === "failed")) {
|
|
17614
17799
|
const detailParts = [
|
|
17615
17800
|
channelWorker.pid !== void 0 ? `pid=${channelWorker.pid}` : void 0,
|
|
@@ -17628,8 +17813,8 @@ function pushRuntimeIssues(issues, acpSnapshot, rateLimitHits, input, channelWor
|
|
|
17628
17813
|
issues.push({
|
|
17629
17814
|
code: "channel_worker_exited",
|
|
17630
17815
|
severity: isPermanentFailure ? "error" : "warning",
|
|
17631
|
-
message: `Channel worker is ${channelWorker.state}${details}${error}.`,
|
|
17632
|
-
section
|
|
17816
|
+
message: `Channel worker${workspace} is ${channelWorker.state}${details}${error}.`,
|
|
17817
|
+
section
|
|
17633
17818
|
});
|
|
17634
17819
|
}
|
|
17635
17820
|
if (channelWorker.enabled && channelWorker.state === "running" && channelWorker.requestedChannels !== void 0) {
|
|
@@ -17641,13 +17826,13 @@ function pushRuntimeIssues(issues, acpSnapshot, rateLimitHits, input, channelWor
|
|
|
17641
17826
|
issues.push({
|
|
17642
17827
|
code: "channel_worker_partial_connect",
|
|
17643
17828
|
severity: "warning",
|
|
17644
|
-
message: `Channel worker connected ${channelWorker.channels.length}/${channelWorker.requestedChannels.length} channel(s). Failed: ${failed.join(", ")}.`,
|
|
17645
|
-
section
|
|
17829
|
+
message: `Channel worker${workspace} connected ${channelWorker.channels.length}/${channelWorker.requestedChannels.length} channel(s). Failed: ${failed.join(", ")}.`,
|
|
17830
|
+
section
|
|
17646
17831
|
});
|
|
17647
17832
|
}
|
|
17648
17833
|
}
|
|
17649
17834
|
}
|
|
17650
|
-
__name(
|
|
17835
|
+
__name(pushChannelWorkerIssues, "pushChannelWorkerIssues");
|
|
17651
17836
|
function pushFullIssues(issues, full) {
|
|
17652
17837
|
for (const [name, section] of Object.entries(full.workspace)) {
|
|
17653
17838
|
if (section.status === "unavailable") {
|
|
@@ -17865,20 +18050,177 @@ function copyNumber(from, to, key) {
|
|
|
17865
18050
|
}
|
|
17866
18051
|
__name(copyNumber, "copyNumber");
|
|
17867
18052
|
|
|
18053
|
+
// packages/cli/src/serve/acp-http-enabled.ts
|
|
18054
|
+
init_esbuild_shims();
|
|
18055
|
+
function resolveAcpHttpEnabled(env = process.env) {
|
|
18056
|
+
return env["QWEN_SERVE_ACP_HTTP"] !== "0";
|
|
18057
|
+
}
|
|
18058
|
+
__name(resolveAcpHttpEnabled, "resolveAcpHttpEnabled");
|
|
18059
|
+
|
|
17868
18060
|
// packages/cli/src/serve/cdp-mcp-command.ts
|
|
17869
18061
|
init_esbuild_shims();
|
|
17870
18062
|
var QWEN_CDP_MCP_COMMAND_ENV = "QWEN_CDP_MCP_COMMAND";
|
|
17871
|
-
var QWEN_SERVE_ACP_HTTP_ENV = "QWEN_SERVE_ACP_HTTP";
|
|
17872
18063
|
function resolveCdpMcpCommand(env) {
|
|
17873
18064
|
const command = env[QWEN_CDP_MCP_COMMAND_ENV]?.trim();
|
|
17874
18065
|
return command ? command : void 0;
|
|
17875
18066
|
}
|
|
17876
18067
|
__name(resolveCdpMcpCommand, "resolveCdpMcpCommand");
|
|
17877
18068
|
function isBrowserAutomationMcpAvailable(opts, env) {
|
|
17878
|
-
return opts.cdpTunnelOverWs === true && !opts.token && env
|
|
18069
|
+
return opts.cdpTunnelOverWs === true && !opts.token && resolveAcpHttpEnabled(env) && resolveCdpMcpCommand(env) !== void 0;
|
|
17879
18070
|
}
|
|
17880
18071
|
__name(isBrowserAutomationMcpAvailable, "isBrowserAutomationMcpAvailable");
|
|
17881
18072
|
|
|
18073
|
+
// packages/cli/src/serve/voice/workspace-voice-coordinator.ts
|
|
18074
|
+
init_esbuild_shims();
|
|
18075
|
+
var MAX_CONCURRENT_VOICE_SESSIONS = 8;
|
|
18076
|
+
var DISPOSE_WAIT_MS = 5e3;
|
|
18077
|
+
var VoiceLeaseAbortError = class extends Error {
|
|
18078
|
+
constructor(kind, message) {
|
|
18079
|
+
super(message);
|
|
18080
|
+
this.kind = kind;
|
|
18081
|
+
this.name = "VoiceLeaseAbortError";
|
|
18082
|
+
}
|
|
18083
|
+
static {
|
|
18084
|
+
__name(this, "VoiceLeaseAbortError");
|
|
18085
|
+
}
|
|
18086
|
+
};
|
|
18087
|
+
var Lease = class {
|
|
18088
|
+
constructor(onRelease) {
|
|
18089
|
+
this.onRelease = onRelease;
|
|
18090
|
+
}
|
|
18091
|
+
static {
|
|
18092
|
+
__name(this, "Lease");
|
|
18093
|
+
}
|
|
18094
|
+
controller = new AbortController();
|
|
18095
|
+
signal = this.controller.signal;
|
|
18096
|
+
released = false;
|
|
18097
|
+
release() {
|
|
18098
|
+
if (this.released) return;
|
|
18099
|
+
this.released = true;
|
|
18100
|
+
this.onRelease(this);
|
|
18101
|
+
}
|
|
18102
|
+
abort(reason) {
|
|
18103
|
+
if (!this.signal.aborted) this.controller.abort(reason);
|
|
18104
|
+
}
|
|
18105
|
+
};
|
|
18106
|
+
var WorkspaceVoiceCoordinator = class {
|
|
18107
|
+
static {
|
|
18108
|
+
__name(this, "WorkspaceVoiceCoordinator");
|
|
18109
|
+
}
|
|
18110
|
+
states = /* @__PURE__ */ new Map();
|
|
18111
|
+
disposed = /* @__PURE__ */ new WeakSet();
|
|
18112
|
+
active = 0;
|
|
18113
|
+
acquire(runtime) {
|
|
18114
|
+
if (this.disposed.has(runtime)) {
|
|
18115
|
+
return { kind: "rejected", reason: "draining" };
|
|
18116
|
+
}
|
|
18117
|
+
const state = this.stateFor(runtime);
|
|
18118
|
+
if (state.draining) return { kind: "rejected", reason: "draining" };
|
|
18119
|
+
if (this.active >= MAX_CONCURRENT_VOICE_SESSIONS) {
|
|
18120
|
+
return { kind: "rejected", reason: "capacity" };
|
|
18121
|
+
}
|
|
18122
|
+
const lease = new Lease((current) => this.release(runtime, current));
|
|
18123
|
+
state.leases.add(lease);
|
|
18124
|
+
this.active++;
|
|
18125
|
+
return { kind: "admitted", lease };
|
|
18126
|
+
}
|
|
18127
|
+
beginWorkspaceDrain(runtime) {
|
|
18128
|
+
this.stateFor(runtime).draining = true;
|
|
18129
|
+
}
|
|
18130
|
+
cancelWorkspaceDrain(runtime) {
|
|
18131
|
+
const state = this.states.get(runtime);
|
|
18132
|
+
if (!state || state.completed) return;
|
|
18133
|
+
state.draining = false;
|
|
18134
|
+
if (state.leases.size === 0) this.states.delete(runtime);
|
|
18135
|
+
}
|
|
18136
|
+
completeWorkspaceDrain(runtime) {
|
|
18137
|
+
this.disposed.add(runtime);
|
|
18138
|
+
const state = this.states.get(runtime);
|
|
18139
|
+
if (!state) return;
|
|
18140
|
+
state.draining = true;
|
|
18141
|
+
state.completed = true;
|
|
18142
|
+
const abortReason = new VoiceLeaseAbortError(
|
|
18143
|
+
"workspace_removed",
|
|
18144
|
+
"Workspace drain completed"
|
|
18145
|
+
);
|
|
18146
|
+
for (const lease of state.leases) lease.abort(abortReason);
|
|
18147
|
+
this.deleteIfIdle(runtime, state);
|
|
18148
|
+
}
|
|
18149
|
+
getWorkspaceActivity(runtime) {
|
|
18150
|
+
return this.states.get(runtime)?.leases.size ?? 0;
|
|
18151
|
+
}
|
|
18152
|
+
async disposeRuntime(runtime, reason) {
|
|
18153
|
+
this.disposed.add(runtime);
|
|
18154
|
+
const state = this.states.get(runtime);
|
|
18155
|
+
if (!state) return;
|
|
18156
|
+
state.draining = true;
|
|
18157
|
+
state.completed = true;
|
|
18158
|
+
const abortReason = new VoiceLeaseAbortError(
|
|
18159
|
+
reason,
|
|
18160
|
+
reason === "workspace_removed" ? "Workspace runtime was removed" : "Daemon is shutting down"
|
|
18161
|
+
);
|
|
18162
|
+
for (const lease of state.leases) lease.abort(abortReason);
|
|
18163
|
+
if (state.leases.size === 0) {
|
|
18164
|
+
this.deleteIfIdle(runtime, state);
|
|
18165
|
+
return;
|
|
18166
|
+
}
|
|
18167
|
+
let resolveIdle;
|
|
18168
|
+
const idle = new Promise((resolve) => {
|
|
18169
|
+
resolveIdle = resolve;
|
|
18170
|
+
state.idleWaiters.add(resolve);
|
|
18171
|
+
});
|
|
18172
|
+
let timeout;
|
|
18173
|
+
let timedOut = false;
|
|
18174
|
+
try {
|
|
18175
|
+
await Promise.race([
|
|
18176
|
+
idle,
|
|
18177
|
+
new Promise((resolve) => {
|
|
18178
|
+
timeout = setTimeout(() => {
|
|
18179
|
+
timedOut = true;
|
|
18180
|
+
resolve();
|
|
18181
|
+
}, DISPOSE_WAIT_MS);
|
|
18182
|
+
timeout.unref?.();
|
|
18183
|
+
})
|
|
18184
|
+
]);
|
|
18185
|
+
} finally {
|
|
18186
|
+
if (timeout) clearTimeout(timeout);
|
|
18187
|
+
if (resolveIdle) state.idleWaiters.delete(resolveIdle);
|
|
18188
|
+
}
|
|
18189
|
+
if (timedOut && state.leases.size > 0) {
|
|
18190
|
+
process.stderr.write(
|
|
18191
|
+
`qwen serve: Voice runtime disposal timed out with ${state.leases.size} active lease(s).
|
|
18192
|
+
`
|
|
18193
|
+
);
|
|
18194
|
+
}
|
|
18195
|
+
}
|
|
18196
|
+
stateFor(runtime) {
|
|
18197
|
+
let state = this.states.get(runtime);
|
|
18198
|
+
if (!state) {
|
|
18199
|
+
state = {
|
|
18200
|
+
draining: false,
|
|
18201
|
+
completed: false,
|
|
18202
|
+
leases: /* @__PURE__ */ new Set(),
|
|
18203
|
+
idleWaiters: /* @__PURE__ */ new Set()
|
|
18204
|
+
};
|
|
18205
|
+
this.states.set(runtime, state);
|
|
18206
|
+
}
|
|
18207
|
+
return state;
|
|
18208
|
+
}
|
|
18209
|
+
release(runtime, lease) {
|
|
18210
|
+
const state = this.states.get(runtime);
|
|
18211
|
+
if (!state || !state.leases.delete(lease)) return;
|
|
18212
|
+
this.active--;
|
|
18213
|
+
if (state.leases.size === 0) {
|
|
18214
|
+
for (const resolve of state.idleWaiters) resolve();
|
|
18215
|
+
state.idleWaiters.clear();
|
|
18216
|
+
}
|
|
18217
|
+
this.deleteIfIdle(runtime, state);
|
|
18218
|
+
}
|
|
18219
|
+
deleteIfIdle(runtime, state) {
|
|
18220
|
+
if (state.completed && state.leases.size === 0) this.states.delete(runtime);
|
|
18221
|
+
}
|
|
18222
|
+
};
|
|
18223
|
+
|
|
17882
18224
|
export {
|
|
17883
18225
|
require_express2 as require_express,
|
|
17884
18226
|
sanitizeForStderr,
|
|
@@ -17909,6 +18251,7 @@ export {
|
|
|
17909
18251
|
CLIENT_ID_HEADER,
|
|
17910
18252
|
MAX_CLIENT_ID_LENGTH,
|
|
17911
18253
|
MAX_TOOL_NAME_LENGTH,
|
|
18254
|
+
MAX_SKILL_NAME_LENGTH,
|
|
17912
18255
|
MAX_SERVER_NAME_LENGTH,
|
|
17913
18256
|
CLIENT_ID_RE,
|
|
17914
18257
|
safeBody,
|
|
@@ -17931,10 +18274,13 @@ export {
|
|
|
17931
18274
|
allowOriginMode,
|
|
17932
18275
|
listenerMaxConnections,
|
|
17933
18276
|
positiveFiniteOrNull,
|
|
18277
|
+
resolveAcpHttpEnabled,
|
|
17934
18278
|
QWEN_CDP_MCP_COMMAND_ENV,
|
|
17935
|
-
QWEN_SERVE_ACP_HTTP_ENV,
|
|
17936
18279
|
resolveCdpMcpCommand,
|
|
17937
|
-
isBrowserAutomationMcpAvailable
|
|
18280
|
+
isBrowserAutomationMcpAvailable,
|
|
18281
|
+
MAX_CONCURRENT_VOICE_SESSIONS,
|
|
18282
|
+
VoiceLeaseAbortError,
|
|
18283
|
+
WorkspaceVoiceCoordinator
|
|
17938
18284
|
};
|
|
17939
18285
|
/**
|
|
17940
18286
|
* @license
|