@qwen-code/qwen-code 0.19.8 → 0.19.9
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/SKILL.md +1 -0
- package/bundled/qc-helper/docs/configuration/auth.md +40 -55
- package/bundled/qc-helper/docs/configuration/model-providers.md +224 -218
- package/bundled/qc-helper/docs/configuration/settings.md +60 -51
- package/bundled/qc-helper/docs/features/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +9 -2
- package/bundled/qc-helper/docs/features/channels/overview.md +71 -4
- package/bundled/qc-helper/docs/features/channels/wecom.md +6 -0
- package/bundled/qc-helper/docs/features/code-review.md +29 -5
- package/bundled/qc-helper/docs/features/commands.md +39 -38
- package/bundled/qc-helper/docs/features/computer-use.md +77 -0
- package/bundled/qc-helper/docs/features/tool-use-summaries.md +19 -23
- package/bundled/qc-helper/docs/integration-vscode.md +2 -2
- package/bundled/qc-helper/docs/qwen-serve.md +29 -12
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
- package/bundled/review/DESIGN.md +93 -22
- package/bundled/review/SKILL.md +295 -86
- package/chunks/MaxSizedBox-6HYJ3ZPJ.js +70 -0
- package/chunks/{StandaloneSessionPicker-EYRGH6PJ.js → StandaloneSessionPicker-WS4GXYOG.js} +79 -79
- package/chunks/{acpAgent-GRFTTRHW.js → acpAgent-5FWSOZL5.js} +968 -200
- package/chunks/agent-HOLHB3RT.js +68 -0
- package/chunks/agent-headless-SXL6H56A.js +62 -0
- package/chunks/{anthropicContentGenerator-CPF22MA7.js → anthropicContentGenerator-L73TO3DB.js} +187 -31
- package/chunks/{artifact-tool-D233YJFH.js → artifact-tool-U7IRTLIV.js} +5 -5
- package/chunks/{askUserQuestion-MKL5ZTMC.js → askUserQuestion-2DLUUZZG.js} +6 -6
- package/chunks/bridge-BCJQ7BBB.js +78 -0
- package/chunks/{ca-MKD32FQL.js → ca-UJ6HC4H2.js} +64 -5
- package/chunks/{channel-worker-supervisor-NZQUOEFJ.js → channel-worker-supervisor-WSOAAYUO.js} +137 -13
- package/chunks/{chunk-QQDPRDVW.js → chunk-2HRYPZT5.js} +1 -1
- package/chunks/{chunk-2PSWA5ID.js → chunk-2X56YUSZ.js} +1 -1
- package/chunks/{chunk-DIWVZ3VM.js → chunk-34MW4KTI.js} +5 -5
- package/chunks/{chunk-IBY3Q3HG.js → chunk-34Z3U5RQ.js} +508 -126
- package/chunks/{chunk-UXEW557D.js → chunk-3AHXV67U.js} +3 -3
- package/chunks/{chunk-O2YT7VB4.js → chunk-3BTRNWWD.js} +1 -1
- package/chunks/chunk-3G7CIHVV.js +71 -0
- package/chunks/{chunk-FBET5XZ2.js → chunk-3SJSQXNS.js} +20 -5
- package/chunks/{chunk-BUZ6HGL4.js → chunk-3VAGG5T5.js} +248 -55
- package/chunks/{chunk-M7S4GK5Z.js → chunk-4C5BQ2D2.js} +74 -27
- package/chunks/{chunk-5MBO76SL.js → chunk-4GORAUCN.js} +3 -3
- package/chunks/{chunk-55ZMG67I.js → chunk-4LD5APFL.js} +4 -4
- package/chunks/{chunk-TLWA7TPR.js → chunk-4QLQE5WJ.js} +2 -2
- package/chunks/{chunk-UIDXQNMV.js → chunk-4WGODMVR.js} +1 -1
- package/chunks/{chunk-E6US47KI.js → chunk-4WKAA4KS.js} +1 -1
- package/chunks/{chunk-H6EMK6QK.js → chunk-4ZVWQHEQ.js} +11913 -5207
- package/chunks/{chunk-HW4N45EE.js → chunk-524RQP4Q.js} +29 -8
- package/chunks/{chunk-3GONHQOA.js → chunk-57OAHC2Y.js} +1 -1
- package/chunks/{chunk-JZSY4WP3.js → chunk-5DTTYNB7.js} +1 -1
- package/chunks/{chunk-YDOXPLYL.js → chunk-5HOMWMCL.js} +1147 -738
- package/chunks/{chunk-A4BMJM77.js → chunk-5O2XNYP6.js} +1 -0
- package/chunks/{chunk-ZL5HN75Q.js → chunk-5SFOMFG4.js} +2 -2
- package/chunks/{chunk-2EM7ECZD.js → chunk-5U27BZ72.js} +179 -63
- package/chunks/{chunk-JRQ7EVGE.js → chunk-5VXNZWGF.js} +2 -2
- package/chunks/{chunk-QYNNN7BK.js → chunk-5XUCZNSY.js} +2 -2
- package/chunks/{chunk-GO6LNQXT.js → chunk-6AM5D4ME.js} +1 -1
- package/chunks/{chunk-BJBWRCSK.js → chunk-6H67XLET.js} +1 -1
- package/chunks/{chunk-PUVCVELY.js → chunk-6PESIEKJ.js} +4 -4
- package/chunks/{chunk-3UP777ZS.js → chunk-6RLROE6G.js} +1 -1
- package/chunks/{chunk-ZERZSAZL.js → chunk-75DOP5OR.js} +2 -2
- package/chunks/{chunk-RMLZAUWH.js → chunk-77XJ3SWN.js} +10 -12
- package/chunks/{chunk-L46XKEGM.js → chunk-7PU4FYLG.js} +5 -8
- package/chunks/{chunk-NQKLOAVJ.js → chunk-7R3CZA3Q.js} +2 -2
- package/chunks/{chunk-SAIILPQ3.js → chunk-7X7TEQNX.js} +5 -3
- package/chunks/{chunk-OQXDAMKY.js → chunk-A3XKDTSH.js} +8 -8
- package/chunks/{chunk-IRJWHZWU.js → chunk-A4UCTEB5.js} +2 -2
- package/chunks/{chunk-TSPB77TG.js → chunk-AKIVHSJR.js} +923 -2892
- package/chunks/{chunk-FQNC62B2.js → chunk-ATAKVRIF.js} +11 -11
- package/chunks/{chunk-GSHQYYIV.js → chunk-AURZZYMD.js} +6 -26
- package/chunks/{chunk-CHB5SLZZ.js → chunk-B4G2WOFA.js} +3 -3
- package/chunks/{chunk-X3YGAX7V.js → chunk-B5ORX3FG.js} +4 -2
- package/chunks/chunk-BAPGSC7U.js +239 -0
- package/chunks/{chunk-UX6OTBVD.js → chunk-BMGVRZN4.js} +2 -2
- package/chunks/{chunk-ZN5T4BHI.js → chunk-BPZALHVR.js} +2 -2
- package/chunks/{chunk-IJRL2S3D.js → chunk-BZIFY5TF.js} +6 -6
- package/chunks/{chunk-OFEVLU4C.js → chunk-CARU2RR2.js} +1 -1
- package/chunks/chunk-CC2ITGCF.js +176 -0
- package/chunks/{chunk-HDOH3QYE.js → chunk-CCDMCZPP.js} +2 -2
- package/chunks/{chunk-FV7425LN.js → chunk-CEA3E3JB.js} +18 -5
- package/chunks/{chunk-BOBOCR5H.js → chunk-CLFKOZEK.js} +4 -4
- package/chunks/{chunk-P3XEEI3X.js → chunk-CNEIYWSA.js} +38 -9
- package/chunks/{chunk-GLE2YUPU.js → chunk-COH43MRJ.js} +1 -1
- package/chunks/{chunk-E5A7LHNN.js → chunk-CPBF7KYF.js} +1 -1
- package/chunks/{chunk-UWCTAVOD.js → chunk-CR3C7WXL.js} +1 -1
- package/chunks/{chunk-5P5XGNYH.js → chunk-CU3L64TP.js} +1 -1
- package/chunks/{chunk-CD6USWHZ.js → chunk-CUMMSHH6.js} +2 -2
- package/chunks/{chunk-IWKSG2AR.js → chunk-CXAOG665.js} +1 -1
- package/chunks/{chunk-WQTHLB5T.js → chunk-D2GFWEXB.js} +7 -7
- package/chunks/{chunk-I6WGFJJ3.js → chunk-D5SKC4YG.js} +38 -12
- package/chunks/{chunk-MZ7BABX3.js → chunk-DC5Z3DU6.js} +2 -2
- package/chunks/{chunk-64WXLC72.js → chunk-DJ2GSRLV.js} +1 -1
- package/chunks/{chunk-QN5NZ3UQ.js → chunk-DMTGGOSA.js} +2 -2
- package/chunks/{chunk-A5JOJ77H.js → chunk-E2IY465S.js} +38 -15
- package/chunks/{chunk-KHDZHZMH.js → chunk-E5Z2AVNV.js} +1 -1
- package/chunks/{chunk-SQ2UATK7.js → chunk-EAXLGSFP.js} +11 -11
- package/chunks/{chunk-JCH35JB3.js → chunk-ECNYL4AA.js} +2 -2
- package/chunks/{chunk-E7EMCSUG.js → chunk-EGYZ275M.js} +64 -42
- package/chunks/{chunk-6VK6FIMQ.js → chunk-EMDMPBJ4.js} +415 -379
- package/chunks/{chunk-5IFG2VC4.js → chunk-FCMNKVXT.js} +1 -1
- package/chunks/{chunk-V35MD7KN.js → chunk-GRC5HGPI.js} +1 -1
- package/chunks/{chunk-WMPVYQ4P.js → chunk-GWHYEOV2.js} +2 -2
- package/chunks/{chunk-27BHARDE.js → chunk-GWLSNBG4.js} +2103 -13
- package/chunks/chunk-GZRTYZ2R.js +292 -0
- package/chunks/{chunk-A2X3KLC3.js → chunk-GZXCZHCT.js} +3 -3
- package/chunks/{chunk-K5PGHDBN.js → chunk-H6XPXXMH.js} +1 -1
- package/chunks/{chunk-DICGXFAI.js → chunk-HKMAENAO.js} +8 -8
- package/chunks/{chunk-ZE6E424U.js → chunk-HPDUL5MF.js} +2 -2
- package/chunks/{chunk-KYMBIKIW.js → chunk-HTHUX2T5.js} +1 -1
- package/chunks/{chunk-LQ7TMOCE.js → chunk-HTO4JFDZ.js} +1 -1
- package/chunks/{chunk-ON3JA3RU.js → chunk-HVY356M2.js} +7 -9
- package/chunks/{chunk-GGQQA4JW.js → chunk-IAVB3HM3.js} +2 -2
- package/chunks/{chunk-FEJ2FZ3U.js → chunk-J3JA76CF.js} +2 -2
- package/chunks/{chunk-4CGOWHKM.js → chunk-J4MOFEOK.js} +2 -2
- package/chunks/{chunk-22MNNNXE.js → chunk-J4TSQ5EQ.js} +3 -2
- package/chunks/{chunk-22IFUCVR.js → chunk-JESCGQM3.js} +1 -1
- package/chunks/{chunk-CCGOFQV3.js → chunk-JSG7ZSBC.js} +8 -7
- package/chunks/{chunk-WF4FAXDL.js → chunk-JZETEN3Z.js} +62 -62
- package/chunks/{chunk-GN3F6PIU.js → chunk-K434OPES.js} +5 -5
- package/chunks/{chunk-YKZIAK7C.js → chunk-KHUQZZJ6.js} +66 -16
- package/chunks/{chunk-X2XNQQJI.js → chunk-KKNMOEZH.js} +4 -4
- package/chunks/{chunk-MRO43B25.js → chunk-KW7NOTN6.js} +1 -1
- package/chunks/{chunk-6IAWPIQ6.js → chunk-L36P3NBD.js} +3 -3
- package/chunks/{chunk-54YZOP7P.js → chunk-L573Z2QZ.js} +11894 -5190
- package/chunks/{chunk-DHOLNQLC.js → chunk-L6P4KPHR.js} +12 -12
- package/chunks/{chunk-E7KNELIZ.js → chunk-LK7KUE55.js} +2 -2
- package/chunks/{chunk-W7EEOR7D.js → chunk-LUODI7WD.js} +5 -5
- package/chunks/{chunk-CSOTA7KX.js → chunk-LXNEJD34.js} +2 -2
- package/chunks/{chunk-HLKG6CZN.js → chunk-M5GB774H.js} +1 -1
- package/chunks/{chunk-3B26UVCX.js → chunk-MC23XKFE.js} +39 -10
- package/chunks/{chunk-PC4ZXHU2.js → chunk-MXL5UP4X.js} +3 -3
- package/chunks/{chunk-BVYU3ZTI.js → chunk-N3EMS75V.js} +73 -30
- package/chunks/{chunk-332PWN27.js → chunk-NHDKSOEY.js} +1 -1
- package/chunks/{chunk-3GNOQZDC.js → chunk-NVYTCB5Z.js} +4797 -2620
- package/chunks/{chunk-P7M4GA57.js → chunk-OCPBI7J5.js} +1 -1
- package/chunks/chunk-OQ4DRIOA.js +296 -0
- package/chunks/{chunk-42XGFRJS.js → chunk-ORBGV7NJ.js} +5 -5
- package/chunks/{chunk-AYNCLGTW.js → chunk-P67PFTUT.js} +8 -51
- package/chunks/{chunk-VGGOPZUL.js → chunk-PDZ7MBDG.js} +12 -5
- package/chunks/{chunk-WHJQ3JUS.js → chunk-PODM4SZ4.js} +12 -12
- package/chunks/{chunk-JPALE3PA.js → chunk-PVZM22CK.js} +6 -6
- package/chunks/{chunk-AGHU5VRK.js → chunk-PZL23GTM.js} +1 -1
- package/chunks/{chunk-L4AMBVQG.js → chunk-Q4YQW46J.js} +31 -17
- package/chunks/{chunk-XYR5RUA5.js → chunk-Q6I5QHMH.js} +10 -3
- package/chunks/{chunk-FXGLL2HL.js → chunk-Q7YDKOGY.js} +1 -1
- package/chunks/{chunk-LGFAYIKX.js → chunk-QHTIBUWB.js} +1 -1
- package/chunks/{chunk-P3MYAZBY.js → chunk-QMGX2KO2.js} +1 -1
- package/chunks/{chunk-Z3I3QJK3.js → chunk-QRUIS3DN.js} +1 -1
- package/chunks/{chunk-ITOGNELQ.js → chunk-QSWDGAIC.js} +2 -2
- package/chunks/{chunk-GHOTR7HL.js → chunk-QUPXZXLV.js} +1 -1
- package/chunks/{chunk-XOHNA2S6.js → chunk-QYMQSECS.js} +3 -3
- package/chunks/{chunk-QYUE6W3T.js → chunk-RDJSGHZE.js} +1 -1
- package/chunks/{chunk-TLRYABYP.js → chunk-RKUWKYED.js} +1 -1
- package/chunks/{chunk-RNBYOUGV.js → chunk-RXFQM6FQ.js} +1 -1
- package/chunks/{chunk-QXPI7FEC.js → chunk-S3TWXGKA.js} +4 -4
- package/chunks/{chunk-BOBRZZKD.js → chunk-SCGXUJBT.js} +5 -5
- package/chunks/{chunk-44NROQYV.js → chunk-SJHDYNHF.js} +4 -4
- package/chunks/{chunk-MLZQVCF3.js → chunk-SZRN75WQ.js} +1 -1
- package/chunks/{chunk-7RYW5LQV.js → chunk-T2NCM2ET.js} +2 -2
- package/chunks/{chunk-Z2Z3GUXZ.js → chunk-TB6UDU4T.js} +1 -1
- package/chunks/{chunk-SUAKHHK7.js → chunk-TDEXZKMT.js} +3 -3
- package/chunks/{chunk-EXPMGZZV.js → chunk-TEGEBB2I.js} +1 -1
- package/chunks/{chunk-MX2YXRER.js → chunk-TJTKSVIV.js} +1 -1
- package/chunks/chunk-TO6QE22P.js +444 -0
- package/chunks/{chunk-H6BD2ELD.js → chunk-TYAMGABM.js} +2 -2
- package/chunks/chunk-U2NNEY4R.js +38 -0
- package/chunks/{chunk-VRDMOSQS.js → chunk-UDXSXLER.js} +2 -2
- package/chunks/{chunk-AHNJGLFV.js → chunk-UOZWKTQG.js} +3 -3
- package/chunks/{chunk-CJCKDMWO.js → chunk-URK542T4.js} +1 -1
- package/chunks/{chunk-AHNXYU4O.js → chunk-V6WHFGST.js} +1 -1
- package/chunks/{chunk-DCZWC4PF.js → chunk-VA4KQY6V.js} +5 -5
- package/chunks/{chunk-ZTQ26VBE.js → chunk-VDDGDZMA.js} +1 -1
- package/chunks/{chunk-OMX7CUOE.js → chunk-VGC4I5JJ.js} +1 -1
- package/chunks/{chunk-43W4YSO6.js → chunk-VJNBRRZG.js} +2 -2
- package/chunks/{chunk-J7RCB6N5.js → chunk-VTU57BWZ.js} +2 -2
- package/chunks/{chunk-LAXNEOBG.js → chunk-VWPVHAMO.js} +15 -3
- package/chunks/{chunk-VZ7HY3YU.js → chunk-W2UIXQDL.js} +3 -3
- package/chunks/{chunk-JZHIQJOE.js → chunk-W3JHSWRP.js} +6 -6
- package/chunks/{chunk-ER3BKOLB.js → chunk-W7FJ3N32.js} +1 -1
- package/chunks/{chunk-3HX5LZ6R.js → chunk-WBL3FJEU.js} +2 -2
- package/chunks/{chunk-BMFMJINR.js → chunk-WL4L7EZH.js} +1 -1
- package/chunks/{chunk-PMFULMLX.js → chunk-WQUQVGTF.js} +2057 -266
- package/chunks/chunk-X4NKFGFJ.js +81 -0
- package/chunks/{chunk-YHKAK72D.js → chunk-X6TJ3YZV.js} +102 -16
- package/chunks/{chunk-3RW4AZJV.js → chunk-XFSFZCM5.js} +1 -1
- package/chunks/{chunk-O7FIRWJV.js → chunk-XLA62MYB.js} +3 -3
- package/chunks/{chunk-2MPVVENX.js → chunk-XU457J4V.js} +2 -2
- package/chunks/{chunk-EEN2TKST.js → chunk-XUOOWUZS.js} +2 -2
- package/chunks/{chunk-SIUQ3YYX.js → chunk-XVNQMZ2I.js} +1 -1
- package/chunks/{chunk-SYCJMSIJ.js → chunk-XWRJCPHC.js} +1 -1
- package/chunks/{chunk-TI3BWD4D.js → chunk-XYQSMABS.js} +39 -19
- package/chunks/chunk-YAF2MQZ6.js +19 -0
- package/chunks/{chunk-O33TBKDC.js → chunk-YAUFFXDS.js} +154 -19
- package/chunks/{chunk-OACJLMLD.js → chunk-YLV3XXFB.js} +2 -2
- package/chunks/{chunk-BR4QREVK.js → chunk-YQ3U5MUC.js} +1 -1
- package/chunks/{chunk-Y6Z2O3WR.js → chunk-YUZI3WAC.js} +1 -1
- package/chunks/{chunk-II73RK2S.js → chunk-YVEDCAUE.js} +1 -1
- package/chunks/{chunk-SKAZWEV5.js → chunk-ZJE7NSL3.js} +1 -1
- package/chunks/{chunk-7LTB54MK.js → chunk-ZLXQN2QS.js} +2 -2
- package/chunks/cli-entry-path-4VJ3Y6T2.js +10 -0
- package/chunks/{computer-use-WMY3UOBX.js → computer-use-HM37RX6A.js} +50 -50
- package/chunks/config-utils-NV2SVGPB.js +23 -0
- package/chunks/contextCommand-OF5SFGH2.js +68 -0
- package/chunks/create-sub-session-INX7TXJI.js +207 -0
- package/chunks/create-sub-session-KPRT7ECJ.js +375 -0
- package/chunks/{cron-create-JSXEIPVS.js → cron-create-AMBKGZX6.js} +9 -9
- package/chunks/{cron-delete-OIFVEPGU.js → cron-delete-LRU4OJYG.js} +7 -7
- package/chunks/{cron-list-D4ZX4IOE.js → cron-list-WVP2JXER.js} +14 -10
- package/chunks/{daemon-WPAENEBW.js → daemon-ARHTSTXP.js} +478 -6
- package/chunks/daemon-status-provider-B2UTZUJ2.js +76 -0
- package/chunks/{de-ZFPPQVSF.js → de-EBJN3OVN.js} +64 -5
- package/chunks/{devtools-FM6GJPYG.js → devtools-4QFYJT6U.js} +3 -3
- package/chunks/{dist-Z34QPAQW.js → dist-PNVLTKTL.js} +374 -78
- package/chunks/{dist-63IS3ZMI.js → dist-PZV5RKM6.js} +4 -4
- package/chunks/{dist-BEXOZXLQ.js → dist-QYCAEZIT.js} +32 -15
- package/chunks/{dist-H2AEJCZ5.js → dist-R7LN5AZE.js} +5 -5
- package/chunks/{dist-E6UANPIM.js → dist-VHV4EVHG.js} +1011 -197
- package/chunks/{dist-O2IRTRPP.js → dist-WKPOYU7O.js} +10 -10
- package/chunks/{dist-SCFLLYMK.js → dist-XKU3ABM5.js} +12 -11
- package/chunks/earlyInputCapture-3VTHRC4C.js +69 -0
- package/chunks/{edit-OTYWAXGP.js → edit-VNI4NJ73.js} +51 -51
- package/chunks/{en-N4EPZAQI.js → en-5A6LA7RK.js} +74 -6
- package/chunks/{enter-worktree-HNYBDVCX.js → enter-worktree-IYYBKPZT.js} +50 -50
- package/chunks/{enterPlanMode-CJCNGT63.js → enterPlanMode-GMC5FD5A.js} +50 -50
- package/chunks/environment-5HSSRMJ7.js +88 -0
- package/chunks/errors-HMFCJJ7P.js +75 -0
- package/chunks/{exit-worktree-DUUKOE3X.js → exit-worktree-6BHCMP5G.js} +50 -50
- package/chunks/{exitPlanMode-AMMSXOAJ.js → exitPlanMode-CJW7G74W.js} +51 -51
- package/chunks/{fast-path-OV6NIP3K.js → fast-path-FRDMDVHG.js} +8 -8
- package/chunks/{fast-path-settings-7RIFI3PK.js → fast-path-settings-5QZE64HR.js} +6 -6
- package/chunks/{fileFromPath-IBEHA3CO.js → fileFromPath-UDALK7FM.js} +3 -3
- package/chunks/{fr-5WWMY53B.js → fr-YXRABLYZ.js} +64 -5
- package/chunks/{gemini-NQ3WWBKB.js → gemini-QYSEGHAX.js} +119 -111
- package/chunks/{geminiContentGenerator-CDUNEJQE.js → geminiContentGenerator-J7YNZDYP.js} +9 -9
- package/chunks/{getMachineId-bsd-4CASPIU4.js → getMachineId-bsd-EXV7SWPA.js} +3 -3
- package/chunks/{getMachineId-darwin-HPQPEMZR.js → getMachineId-darwin-IUOMFXU3.js} +3 -3
- package/chunks/{getMachineId-linux-AUARKYHL.js → getMachineId-linux-K7XJYFHL.js} +2 -2
- package/chunks/{getMachineId-unsupported-S32ZDA2T.js → getMachineId-unsupported-EA5FDRJ6.js} +2 -2
- package/chunks/{getMachineId-win-4EFLHYIJ.js → getMachineId-win-KBA6RAI5.js} +3 -3
- package/chunks/{glob-ROV3YS4R.js → glob-BRCSGFOT.js} +95 -74
- package/chunks/{grep-NRITKDCD.js → grep-EE2DUOSY.js} +50 -50
- package/chunks/handleAutoUpdate-5NWTLR67.js +69 -0
- package/chunks/i18n-BASPENNQ.js +84 -0
- package/chunks/initializer-UTQ7FB7G.js +71 -0
- package/chunks/installationInfo-W6V4DT7W.js +65 -0
- package/chunks/{ja-CUHZOLEJ.js → ja-7VQOANVG.js} +64 -5
- package/chunks/{keychain-token-storage-UJV5XP4Z.js → keychain-token-storage-VKUBNCP4.js} +4 -4
- package/chunks/{kittyProtocolDetector-OJRCJLIU.js → kittyProtocolDetector-HCNNKJTI.js} +2 -2
- package/chunks/list-DEICDL65.js +74 -0
- package/chunks/loadedSettingsAdapter-NOWEGDYJ.js +68 -0
- package/chunks/{loop-wakeup-OHWEMFP5.js → loop-wakeup-WX7BLWWP.js} +10 -10
- package/chunks/{lowlight-FYAAUU5J.js → lowlight-J2OZNPCA.js} +1 -1
- package/chunks/{ls-7MFU2QYW.js → ls-ZB2BDP6T.js} +6 -6
- package/chunks/{lsp-XHDTPTGV.js → lsp-V5DN4YUJ.js} +4 -4
- package/chunks/mcp-L5JXEEIA.js +68 -0
- package/chunks/{monitor-FL2ZO33W.js → monitor-X5Z3H4FY.js} +50 -50
- package/chunks/{multipart-parser-AJ4WASWR.js → multipart-parser-AWZKXSQN.js} +3 -3
- package/chunks/nonInteractiveCli-LS2K4X6A.js +124 -0
- package/chunks/{notebook-edit-6PULTHL5.js → notebook-edit-TRM2QIJK.js} +51 -51
- package/chunks/openaiContentGenerator-AAYONPMF.js +56 -0
- package/chunks/pidfile-D4I4FTVA.js +73 -0
- package/chunks/{pt-OLYN42DS.js → pt-2C6YCSHL.js} +64 -5
- package/chunks/{qwenContentGenerator-NX2E7PB7.js → qwenContentGenerator-K3HZ2H76.js} +52 -52
- package/chunks/{qwenOAuth2-ZV7YLMND.js → qwenOAuth2-PJQ27GSO.js} +9 -9
- package/chunks/read-file-7SZSIZOL.js +30 -0
- package/chunks/{read-mcp-resource-CNQHBSJM.js → read-mcp-resource-SM5DA4RG.js} +5 -5
- package/chunks/{read-package-up-ER5OJUGP.js → read-package-up-TCM6I7S2.js} +2 -2
- package/chunks/{record-artifact-SQ2OKRJW.js → record-artifact-4XKZX3UW.js} +4 -4
- package/chunks/ripGrep-YNPFVCZP.js +60 -0
- package/chunks/{ru-LDM3GWVQ.js → ru-6BBHVZZV.js} +64 -5
- package/chunks/{run-qwen-serve-JK2DL7PI.js → run-qwen-serve-DMWV5N6L.js} +395 -74
- package/chunks/runtime-57WWRVHN.js +94 -0
- package/chunks/{scheduler-O4IGVZKK.js → scheduler-YBLGWSIL.js} +51 -51
- package/chunks/{send-message-76GT3JMC.js → send-message-F36YD6KQ.js} +7 -7
- package/chunks/serve-R63NK3CV.js +74 -0
- package/chunks/{server-SGNPKX2O.js → server-Z22GCAXP.js} +3956 -869
- package/chunks/{session-5BNM25EZ.js → session-HKAAI7BN.js} +117 -112
- package/chunks/settings-3EYN66GK.js +118 -0
- package/chunks/shell-6YXINTWJ.js +68 -0
- package/chunks/{skill-I22QK5XS.js → skill-OO57P4X6.js} +24 -24
- package/chunks/spawnChannel-JD7G4VU6.js +70 -0
- package/chunks/{src-BBQSM46M.js → src-G5UPLZSZ.js} +122 -52
- package/chunks/{src-7XL4G4DC.js → src-VLI3TKEY.js} +4 -4
- package/chunks/standalone-update-OB7F4JPZ.js +79 -0
- package/chunks/{startInteractiveUI-JII36UGN.js → startInteractiveUI-73EGLIIH.js} +1775 -1663
- package/chunks/stdioHelpers-UMY72QRP.js +14 -0
- package/chunks/{syntheticOutput-F7LSDCAR.js → syntheticOutput-34H7LGA7.js} +5 -5
- package/chunks/task-create-FRGOEIKY.js +22 -0
- package/chunks/{task-list-TGGJX7EA.js → task-list-OW766BXZ.js} +10 -10
- package/chunks/{task-stop-W7NGTMYQ.js → task-stop-SIR5SNBN.js} +4 -4
- package/chunks/{task-update-XYWMHJGJ.js → task-update-YRA532MT.js} +12 -12
- package/chunks/{team-create-A7NUU5AQ.js → team-create-PECAAPXK.js} +50 -50
- package/chunks/{team-delete-UHQQ2QQX.js → team-delete-6OSECUZC.js} +10 -10
- package/chunks/{team-plan-approval-TOQRJ2KI.js → team-plan-approval-L6F434RY.js} +50 -50
- package/chunks/theme-manager-ZG4RY6GU.js +64 -0
- package/chunks/{todoWrite-C4ZAMSR3.js → todoWrite-YDMFEV4G.js} +6 -6
- package/chunks/{tool-search-SZ4EFS2T.js → tool-search-THVIWAPB.js} +24 -24
- package/chunks/total-session-admission-JOKNRIIA.js +72 -0
- package/chunks/trustedFolders-EOGT3UVS.js +79 -0
- package/chunks/{types-QX5C3CHJ.js → types-JNKGKUJT.js} +2 -2
- package/chunks/updateCheck-2KYEYVSB.js +69 -0
- package/chunks/updateEventEmitter-5MKC7BLQ.js +10 -0
- package/chunks/validateNonInterActiveAuth-EN6ZQSR2.js +190 -0
- package/chunks/{version-NO2XSNNP.js → version-3UEA6ZIR.js} +3 -3
- package/chunks/{web-fetch-UYGMOHW4.js → web-fetch-PAAEQKBW.js} +8 -8
- package/chunks/{workflow-WO2H6NRI.js → workflow-QCCCMYP3.js} +51 -51
- package/chunks/workspace-providers-status-4KMGETOJ.js +71 -0
- package/chunks/workspace-registry-24QFLQYH.js +76 -0
- package/chunks/workspace-service-RVLBMSMZ.js +80 -0
- package/chunks/workspace-skills-status-DS4ZVFTO.js +70 -0
- package/chunks/{write-file-PX2Z7IBE.js → write-file-I3MUDRIE.js} +51 -51
- package/chunks/{yargs-B64EYTCF.js → yargs-6H2AUULL.js} +2 -2
- package/chunks/{zh-J4F6QWQV.js → zh-RQE7I22T.js} +74 -6
- package/chunks/{zh-TW-XVDWOLSW.js → zh-TW-TBPQGHKH.js} +74 -6
- package/cli.js +18 -17
- package/locales/ca.js +85 -7
- package/locales/de.js +84 -7
- package/locales/en.js +101 -7
- package/locales/fr.js +85 -7
- package/locales/ja.js +86 -6
- package/locales/pt.js +84 -7
- package/locales/ru.js +84 -7
- package/locales/zh-TW.js +97 -6
- package/locales/zh.js +97 -6
- package/package.json +3 -6
- package/web-shell/assets/{arc-BWyoJpY2.js → arc-C15hqnJe.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-BT0mGrz2.js → architectureDiagram-3BPJPVTR-B-At37J_.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-BLgUWvyf.js → blockDiagram-GPEHLZMM-B51wjcU7.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-DYx9M7oU.js → c4Diagram-AAUBKEIU-xBK7BAwN.js} +1 -1
- package/web-shell/assets/channel-CLiQD50f.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CfMHWbuZ.js → chunk-2J33WTMH-xKmLg7Yr.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-B1URoqEV.js → chunk-4BX2VUAB-BfkdKZCM.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DAIaM4QF.js → chunk-55IACEB6-DT713sZf.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-B2X34knw.js → chunk-727SXJPM-CYEeAamv.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-Cif-zLTQ.js → chunk-AQP2D5EJ-DBN-5CFd.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-H18WCXdY.js → chunk-FMBD7UC4-CGZKk4PH.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-YFtetHi0.js → chunk-ND2GUHAM-qQbC2O-y.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-By2hiH3r.js → chunk-QZHKN3VN-B3zeXwsX.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-D3sYqow5.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-D3sYqow5.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-VrcnnLZu.js → cose-bilkent-S5V4N54A-BKsl1Wvy.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-CGo-IaVV.js → dagre-BM42HDAG-CuuuLiBK.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-Dl4QjzIB.js → diagram-2AECGRRQ-CG4_eKiV.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-qMLmsO0u.js → diagram-5GNKFQAL-DSFTmZB1.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CHlmuxPI.js → diagram-KO2AKTUF-BxwlEHn8.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BUwU3GwT.js → diagram-LMA3HP47-BUAg-jMG.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-HEhwPDUM.js → diagram-OG6HWLK6-BFM2jlO5.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-1n0llBmM.js → erDiagram-TEJ5UH35-CerbFPa2.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BN74uMnt.js → flowDiagram-I6XJVG4X-BNeZz5Zz.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-BoOq78i3.js → ganttDiagram-6RSMTGT7-CTOogLaM.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CN8b00c8.js → gitGraphDiagram-PVQCEYII-yxSFkXPj.js} +1 -1
- package/web-shell/assets/index-D5IWFVk1.css +5 -0
- package/web-shell/assets/index-KFJRDhX7.js +783 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CCurnIna.js → infoDiagram-5YYISTIA-DYdAUevm.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-AwuRqdUP.js → ishikawaDiagram-YF4QCWOH-CNuijZ90.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-B7IICk-E.js → journeyDiagram-JHISSGLW-BTyiuonf.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-BYF0OKhx.js → kanban-definition-UN3LZRKU-DPJo0Uow.js} +1 -1
- package/web-shell/assets/{linear-GWWguGfD.js → linear-C8wKCbIC.js} +1 -1
- package/web-shell/assets/{mermaid.core-JqtkxvCl.js → mermaid.core-BV5o7nW5.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-B0MmHsZ6.js → mindmap-definition-RKZ34NQL-BtLcBmSt.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-DhImUZLQ.js → pieDiagram-4H26LBE5-C22J7A9Q.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DGeSC3DT.js → quadrantDiagram-W4KKPZXB-DSL10wiL.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-DkspY6Re.js → requirementDiagram-4Y6WPE33-feqh0UpX.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CaOofS2x.js → sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DFQ_kFnN.js → sequenceDiagram-3UESZ5HK-DIluIcb1.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-D3snw0Tz.js → stateDiagram-AJRCARHV-hlhnuoYH.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BhQMwgpl.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-l4zH8nLM.js → timeline-definition-PNZ67QCA-Dqf_CqgL.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BnRlA98M.js → vennDiagram-CIIHVFJN-DD2QhaTX.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-BS0xUdmd.js → wardley-L42UT6IY-B2uI85U_.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-DKGBUWyQ.js → wardleyDiagram-YWT4CUSO-U1aJX71g.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-DVb2HuOB.js → xychartDiagram-2RQKCTM6-C0ODHUee.js} +1 -1
- package/web-shell/index.html +16 -4
- package/chunks/MaxSizedBox-5DT2SD7B.js +0 -71
- package/chunks/agent-H2DGKS77.js +0 -68
- package/chunks/agent-headless-KFMFIT6J.js +0 -62
- package/chunks/bridge-NA3ZQQKJ.js +0 -78
- package/chunks/chunk-6SHO7WFF.js +0 -79
- package/chunks/chunk-IFEWJXFS.js +0 -37
- package/chunks/chunk-S6RLAIUR.js +0 -23
- package/chunks/chunk-XNXVCNAT.js +0 -88
- package/chunks/contextCommand-LXFZRP4L.js +0 -68
- package/chunks/daemon-status-provider-GJRXY5EN.js +0 -76
- package/chunks/earlyInputCapture-KNOYZ4MJ.js +0 -69
- package/chunks/environment-ATFTYMLZ.js +0 -88
- package/chunks/errors-A54HAADA.js +0 -75
- package/chunks/handleAutoUpdate-CEZJAARW.js +0 -65
- package/chunks/initializer-BRFJKRRX.js +0 -71
- package/chunks/list-KVHF7O4X.js +0 -73
- package/chunks/loadedSettingsAdapter-LL5PSFKX.js +0 -68
- package/chunks/mcp-3GCXRTOQ.js +0 -68
- package/chunks/nonInteractiveCli-PTQI3DV6.js +0 -119
- package/chunks/openaiContentGenerator-YE42PKCY.js +0 -56
- package/chunks/pidfile-NZYSCFRK.js +0 -73
- package/chunks/read-file-33XGP5HF.js +0 -30
- package/chunks/ripGrep-QWZLGTAN.js +0 -60
- package/chunks/serve-JTMIGANH.js +0 -74
- package/chunks/settings-3MI4XXP6.js +0 -118
- package/chunks/shell-YJKBE67T.js +0 -68
- package/chunks/spawnChannel-UNV6W4DU.js +0 -70
- package/chunks/task-create-WCHTB435.js +0 -22
- package/chunks/theme-manager-WZ4RRMMB.js +0 -64
- package/chunks/total-session-admission-ULXJWXFV.js +0 -72
- package/chunks/trustedFolders-LAZZPZ3D.js +0 -79
- package/chunks/updateCheck-KONLM73X.js +0 -65
- package/chunks/validateNonInterActiveAuth-MPKSRCXD.js +0 -184
- package/chunks/workspace-providers-status-3W7E7DFW.js +0 -71
- package/chunks/workspace-registry-SXJZNN3O.js +0 -74
- package/chunks/workspace-service-CZRQZ4Q4.js +0 -80
- package/chunks/workspace-skills-status-K7WFREPD.js +0 -70
- package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +0 -35
- package/node_modules/@qwen-code/audio-capture/dist/index.js +0 -48
- package/node_modules/@qwen-code/audio-capture/dist/index.js.map +0 -1
- package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +0 -7
- package/node_modules/@qwen-code/audio-capture/dist/platform.js +0 -18
- package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +0 -1
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +0 -21
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +0 -58
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +0 -5
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +0 -84
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +0 -19
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +0 -6
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +0 -207
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +0 -7
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +0 -43
- package/node_modules/@qwen-code/audio-capture/package.json +0 -30
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
- package/web-shell/assets/channel-wmPUGHtg.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BA2ljEjW.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BA2ljEjW.js +0 -1
- package/web-shell/assets/index-CNwoO1Cn.js +0 -783
- package/web-shell/assets/index-CWQ0z6kZ.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BbSm_9d0.js +0 -1
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
import {
|
|
4
4
|
DaemonMetricsRing,
|
|
5
5
|
computeCpuPercent
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-YVEDCAUE.js";
|
|
7
7
|
import {
|
|
8
|
-
|
|
9
|
-
} from "./chunk-
|
|
8
|
+
RUNTIME_STARTUP_CANCELLED_MESSAGE
|
|
9
|
+
} from "./chunk-QUPXZXLV.js";
|
|
10
10
|
import {
|
|
11
11
|
CAPABILITIES_SCHEMA_VERSION,
|
|
12
12
|
ClientMcpSenderRegistry,
|
|
@@ -22,71 +22,75 @@ import {
|
|
|
22
22
|
getRateLimiter,
|
|
23
23
|
getServeProtocolVersions,
|
|
24
24
|
hostAllowlist,
|
|
25
|
+
isBrowserAutomationMcpAvailable,
|
|
25
26
|
listenerMaxConnections,
|
|
26
27
|
parseAllowOriginPatterns,
|
|
27
28
|
parseDaemonStatusDetail,
|
|
28
29
|
positiveFiniteOrNull,
|
|
29
30
|
require_express,
|
|
30
31
|
resolveWebShellDir
|
|
31
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-KHUQZZJ6.js";
|
|
32
33
|
import {
|
|
33
34
|
isLoopbackBind
|
|
34
|
-
} from "./chunk-
|
|
35
|
-
import "./chunk-3HX5LZ6R.js";
|
|
36
|
-
import "./chunk-7RYW5LQV.js";
|
|
37
|
-
import {
|
|
38
|
-
RUNTIME_STARTUP_CANCELLED_MESSAGE
|
|
39
|
-
} from "./chunk-GHOTR7HL.js";
|
|
35
|
+
} from "./chunk-RXFQM6FQ.js";
|
|
40
36
|
import {
|
|
41
37
|
LOAD_REPLAY_META_KEY
|
|
42
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-PZL23GTM.js";
|
|
39
|
+
import {
|
|
40
|
+
canonicalizeWorkspace
|
|
41
|
+
} from "./chunk-W7FJ3N32.js";
|
|
43
42
|
import {
|
|
44
43
|
DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
|
|
45
44
|
normalizeCompactedReplayMaxBytes
|
|
46
|
-
} from "./chunk-
|
|
47
|
-
import
|
|
48
|
-
|
|
49
|
-
} from "./chunk-ER3BKOLB.js";
|
|
45
|
+
} from "./chunk-COH43MRJ.js";
|
|
46
|
+
import "./chunk-WBL3FJEU.js";
|
|
47
|
+
import "./chunk-T2NCM2ET.js";
|
|
50
48
|
import {
|
|
51
49
|
loadServeFastPathSettings,
|
|
52
50
|
preResolveServeFastPathHomeEnvOverrides
|
|
53
|
-
} from "./chunk-
|
|
51
|
+
} from "./chunk-3SJSQXNS.js";
|
|
52
|
+
import {
|
|
53
|
+
getGlobalQwenDirLite,
|
|
54
|
+
resolveConfigPathLite
|
|
55
|
+
} from "./chunk-3BTRNWWD.js";
|
|
56
|
+
import "./chunk-QRUIS3DN.js";
|
|
54
57
|
import {
|
|
58
|
+
ChannelWebhookEnqueueError,
|
|
55
59
|
QWEN_SERVER_TOKEN_ENV
|
|
56
|
-
} from "./chunk-
|
|
60
|
+
} from "./chunk-X4NKFGFJ.js";
|
|
57
61
|
import {
|
|
58
62
|
channelSelectionNames
|
|
59
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-TJTKSVIV.js";
|
|
60
64
|
import {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
import
|
|
65
|
+
sanitizeLogText
|
|
66
|
+
} from "./chunk-34Z3U5RQ.js";
|
|
67
|
+
import "./chunk-UDXSXLER.js";
|
|
68
|
+
import {
|
|
69
|
+
isWithinRoot
|
|
70
|
+
} from "./chunk-RDJSGHZE.js";
|
|
65
71
|
import {
|
|
66
72
|
getCliVersion
|
|
67
|
-
} from "./chunk-
|
|
68
|
-
import "./chunk-
|
|
73
|
+
} from "./chunk-3AHXV67U.js";
|
|
74
|
+
import "./chunk-VJNBRRZG.js";
|
|
69
75
|
import {
|
|
70
76
|
writeStderrLine,
|
|
71
77
|
writeStdoutLine
|
|
72
|
-
} from "./chunk-
|
|
73
|
-
import
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
import "./chunk-
|
|
77
|
-
import "./chunk-
|
|
78
|
-
import "./chunk-UWCTAVOD.js";
|
|
79
|
-
import "./chunk-SYCJMSIJ.js";
|
|
78
|
+
} from "./chunk-YUZI3WAC.js";
|
|
79
|
+
import "./chunk-CU3L64TP.js";
|
|
80
|
+
import "./chunk-ZJE7NSL3.js";
|
|
81
|
+
import "./chunk-H6XPXXMH.js";
|
|
82
|
+
import "./chunk-CR3C7WXL.js";
|
|
83
|
+
import "./chunk-XWRJCPHC.js";
|
|
80
84
|
import {
|
|
81
85
|
finalizeStartupProfile,
|
|
82
86
|
profileCheckpoint
|
|
83
|
-
} from "./chunk-
|
|
84
|
-
import "./chunk-
|
|
85
|
-
import "./chunk-
|
|
86
|
-
import "./chunk-
|
|
87
|
+
} from "./chunk-QSWDGAIC.js";
|
|
88
|
+
import "./chunk-Q7YDKOGY.js";
|
|
89
|
+
import "./chunk-DMTGGOSA.js";
|
|
90
|
+
import "./chunk-YQ3U5MUC.js";
|
|
87
91
|
import {
|
|
88
92
|
init_esbuild_shims
|
|
89
|
-
} from "./chunk-
|
|
93
|
+
} from "./chunk-5O2XNYP6.js";
|
|
90
94
|
import {
|
|
91
95
|
__name,
|
|
92
96
|
__toESM
|
|
@@ -95,7 +99,7 @@ import {
|
|
|
95
99
|
// packages/cli/src/serve/run-qwen-serve.ts
|
|
96
100
|
init_esbuild_shims();
|
|
97
101
|
var import_express = __toESM(require_express(), 1);
|
|
98
|
-
import { X509Certificate } from "node:crypto";
|
|
102
|
+
import { X509Certificate, createHash as createHash2, timingSafeEqual } from "node:crypto";
|
|
99
103
|
import * as fs from "node:fs";
|
|
100
104
|
import * as https from "node:https";
|
|
101
105
|
import * as path from "node:path";
|
|
@@ -1074,6 +1078,10 @@ function extractContextFilename(value) {
|
|
|
1074
1078
|
return void 0;
|
|
1075
1079
|
}
|
|
1076
1080
|
__name(extractContextFilename, "extractContextFilename");
|
|
1081
|
+
function sessionArtifactsPersistenceAvailableFromSettings(settings) {
|
|
1082
|
+
return settings?.general?.chatRecording !== false;
|
|
1083
|
+
}
|
|
1084
|
+
__name(sessionArtifactsPersistenceAvailableFromSettings, "sessionArtifactsPersistenceAvailableFromSettings");
|
|
1077
1085
|
var settingsWriteLocks = /* @__PURE__ */ new Map();
|
|
1078
1086
|
function withSettingsLock(workspace, fn) {
|
|
1079
1087
|
const prev = settingsWriteLocks.get(workspace) ?? Promise.resolve();
|
|
@@ -1085,11 +1093,13 @@ __name(withSettingsLock, "withSettingsLock");
|
|
|
1085
1093
|
var channelWorkerRuntimePromise;
|
|
1086
1094
|
async function loadChannelWorkerRuntime() {
|
|
1087
1095
|
channelWorkerRuntimePromise ??= Promise.all([
|
|
1088
|
-
import("./channel-worker-supervisor-
|
|
1089
|
-
import("./pidfile-
|
|
1090
|
-
|
|
1096
|
+
import("./channel-worker-supervisor-WSOAAYUO.js"),
|
|
1097
|
+
import("./pidfile-D4I4FTVA.js"),
|
|
1098
|
+
import("./cli-entry-path-4VJ3Y6T2.js")
|
|
1099
|
+
]).then(([supervisor, pidfile, cliEntryPath]) => ({
|
|
1091
1100
|
createChannelWorkerSupervisor: supervisor.createChannelWorkerSupervisor,
|
|
1092
|
-
channelServicePidfile: pidfile
|
|
1101
|
+
channelServicePidfile: pidfile,
|
|
1102
|
+
findCliEntryPath: cliEntryPath.findCliEntryPath
|
|
1093
1103
|
})).catch((err) => {
|
|
1094
1104
|
channelWorkerRuntimePromise = void 0;
|
|
1095
1105
|
throw err;
|
|
@@ -1108,9 +1118,18 @@ function createDisabledChannelWorkerSupervisor() {
|
|
|
1108
1118
|
},
|
|
1109
1119
|
async stop() {
|
|
1110
1120
|
},
|
|
1121
|
+
async restart() {
|
|
1122
|
+
return { ...snapshot, channels: [] };
|
|
1123
|
+
},
|
|
1111
1124
|
killAllSync() {
|
|
1112
1125
|
},
|
|
1113
|
-
snapshot: /* @__PURE__ */ __name(() => ({ ...snapshot, channels: [] }), "snapshot")
|
|
1126
|
+
snapshot: /* @__PURE__ */ __name(() => ({ ...snapshot, channels: [] }), "snapshot"),
|
|
1127
|
+
async enqueueWebhookTask() {
|
|
1128
|
+
throw new ChannelWebhookEnqueueError(
|
|
1129
|
+
"channel_worker_unavailable",
|
|
1130
|
+
"Channel worker is not running."
|
|
1131
|
+
);
|
|
1132
|
+
}
|
|
1114
1133
|
};
|
|
1115
1134
|
}
|
|
1116
1135
|
__name(createDisabledChannelWorkerSupervisor, "createDisabledChannelWorkerSupervisor");
|
|
@@ -1157,7 +1176,7 @@ function shouldPreheatBridge(deps) {
|
|
|
1157
1176
|
__name(shouldPreheatBridge, "shouldPreheatBridge");
|
|
1158
1177
|
var coreRuntimePromise;
|
|
1159
1178
|
function loadCoreRuntime() {
|
|
1160
|
-
coreRuntimePromise ??= import("./src-
|
|
1179
|
+
coreRuntimePromise ??= import("./src-G5UPLZSZ.js");
|
|
1161
1180
|
return coreRuntimePromise;
|
|
1162
1181
|
}
|
|
1163
1182
|
__name(loadCoreRuntime, "loadCoreRuntime");
|
|
@@ -1187,10 +1206,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
|
|
|
1187
1206
|
var settingsRuntimePromise;
|
|
1188
1207
|
function loadSettingsRuntimeModules() {
|
|
1189
1208
|
settingsRuntimePromise ??= Promise.all([
|
|
1190
|
-
import("./settings-
|
|
1191
|
-
import("./environment-
|
|
1192
|
-
import("./loadedSettingsAdapter-
|
|
1193
|
-
import("./trustedFolders-
|
|
1209
|
+
import("./settings-3EYN66GK.js"),
|
|
1210
|
+
import("./environment-5HSSRMJ7.js"),
|
|
1211
|
+
import("./loadedSettingsAdapter-NOWEGDYJ.js"),
|
|
1212
|
+
import("./trustedFolders-EOGT3UVS.js")
|
|
1194
1213
|
]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
|
|
1195
1214
|
settings,
|
|
1196
1215
|
environment,
|
|
@@ -1200,6 +1219,21 @@ function loadSettingsRuntimeModules() {
|
|
|
1200
1219
|
return settingsRuntimePromise;
|
|
1201
1220
|
}
|
|
1202
1221
|
__name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
|
|
1222
|
+
var channelWebhookConfigRuntimePromise;
|
|
1223
|
+
function loadChannelWebhookConfigRuntime() {
|
|
1224
|
+
channelWebhookConfigRuntimePromise ??= Promise.all([
|
|
1225
|
+
import("./runtime-57WWRVHN.js"),
|
|
1226
|
+
import("./config-utils-NV2SVGPB.js")
|
|
1227
|
+
]).then(([channelRuntime, configUtils]) => ({
|
|
1228
|
+
loadChannelsConfig: channelRuntime.loadChannelsConfig,
|
|
1229
|
+
parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
|
|
1230
|
+
})).catch((err) => {
|
|
1231
|
+
channelWebhookConfigRuntimePromise = void 0;
|
|
1232
|
+
throw err;
|
|
1233
|
+
});
|
|
1234
|
+
return channelWebhookConfigRuntimePromise;
|
|
1235
|
+
}
|
|
1236
|
+
__name(loadChannelWebhookConfigRuntime, "loadChannelWebhookConfigRuntime");
|
|
1203
1237
|
async function loadServeRuntimeModules() {
|
|
1204
1238
|
const [
|
|
1205
1239
|
serverModule,
|
|
@@ -1213,16 +1247,16 @@ async function loadServeRuntimeModules() {
|
|
|
1213
1247
|
totalSessionAdmissionModule,
|
|
1214
1248
|
workspaceRegistryModule
|
|
1215
1249
|
] = await Promise.all([
|
|
1216
|
-
import("./server-
|
|
1217
|
-
import("./bridge-
|
|
1218
|
-
import("./spawnChannel-
|
|
1219
|
-
import("./workspace-service-
|
|
1220
|
-
import("./types-
|
|
1221
|
-
import("./daemon-status-provider-
|
|
1222
|
-
import("./workspace-providers-status-
|
|
1223
|
-
import("./workspace-skills-status-
|
|
1224
|
-
import("./total-session-admission-
|
|
1225
|
-
import("./workspace-registry-
|
|
1250
|
+
import("./server-Z22GCAXP.js"),
|
|
1251
|
+
import("./bridge-BCJQ7BBB.js"),
|
|
1252
|
+
import("./spawnChannel-JD7G4VU6.js"),
|
|
1253
|
+
import("./workspace-service-RVLBMSMZ.js"),
|
|
1254
|
+
import("./types-JNKGKUJT.js"),
|
|
1255
|
+
import("./daemon-status-provider-B2UTZUJ2.js"),
|
|
1256
|
+
import("./workspace-providers-status-4KMGETOJ.js"),
|
|
1257
|
+
import("./workspace-skills-status-DS4ZVFTO.js"),
|
|
1258
|
+
import("./total-session-admission-JOKNRIIA.js"),
|
|
1259
|
+
import("./workspace-registry-24QFLQYH.js")
|
|
1226
1260
|
]);
|
|
1227
1261
|
return {
|
|
1228
1262
|
createServeApp: serverModule.createServeApp,
|
|
@@ -1237,7 +1271,8 @@ async function loadServeRuntimeModules() {
|
|
|
1237
1271
|
createWorkspaceProvidersStatusProvider: workspaceProvidersStatusModule.createWorkspaceProvidersStatusProvider,
|
|
1238
1272
|
createWorkspaceSkillsStatusProvider: workspaceSkillsStatusModule.createWorkspaceSkillsStatusProvider,
|
|
1239
1273
|
createTotalSessionAdmissionController: totalSessionAdmissionModule.createTotalSessionAdmissionController,
|
|
1240
|
-
createWorkspaceRegistry: workspaceRegistryModule.createWorkspaceRegistry
|
|
1274
|
+
createWorkspaceRegistry: workspaceRegistryModule.createWorkspaceRegistry,
|
|
1275
|
+
createWorkspaceSessionOwnerIndex: workspaceRegistryModule.createWorkspaceSessionOwnerIndex
|
|
1241
1276
|
};
|
|
1242
1277
|
}
|
|
1243
1278
|
__name(loadServeRuntimeModules, "loadServeRuntimeModules");
|
|
@@ -1261,7 +1296,7 @@ function sessionIdleTimeoutMs(value) {
|
|
|
1261
1296
|
return value !== void 0 ? channelIdleTimeoutMs(value) : DEFAULT_SESSION_IDLE_TIMEOUT_MS;
|
|
1262
1297
|
}
|
|
1263
1298
|
__name(sessionIdleTimeoutMs, "sessionIdleTimeoutMs");
|
|
1264
|
-
function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled) {
|
|
1299
|
+
function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled, sessionArtifactsPersistenceAvailable, env) {
|
|
1265
1300
|
return getAdvertisedServeFeatures(void 0, {
|
|
1266
1301
|
requireAuth: opts.requireAuth === true,
|
|
1267
1302
|
mcpPoolActive: opts.mcpPoolActive !== false,
|
|
@@ -1270,12 +1305,15 @@ function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled) {
|
|
|
1270
1305
|
...opts.writerIdleTimeoutMs !== void 0 ? { writerIdleTimeoutMs: opts.writerIdleTimeoutMs } : {},
|
|
1271
1306
|
persistSettingAvailable: true,
|
|
1272
1307
|
sessionShellCommandEnabled,
|
|
1308
|
+
sessionArtifactsPersistenceAvailable,
|
|
1273
1309
|
rateLimit: opts.rateLimit === true,
|
|
1274
1310
|
reloadAvailable: true,
|
|
1311
|
+
channelReloadAvailable: opts.channelSelection !== void 0,
|
|
1275
1312
|
// Advertise the same WS feature flags as the runtime path (serve-features.ts)
|
|
1276
1313
|
// so the bootstrap `/capabilities` window doesn't briefly under-report them.
|
|
1277
1314
|
clientMcpOverWsEnabled: opts.clientMcpOverWs === true,
|
|
1278
|
-
cdpTunnelOverWsEnabled: opts.cdpTunnelOverWs === true
|
|
1315
|
+
cdpTunnelOverWsEnabled: opts.cdpTunnelOverWs === true,
|
|
1316
|
+
browserAutomationMcpAvailable: isBrowserAutomationMcpAvailable(opts, env)
|
|
1279
1317
|
});
|
|
1280
1318
|
}
|
|
1281
1319
|
__name(currentServeFeaturesForRunQwenServe, "currentServeFeaturesForRunQwenServe");
|
|
@@ -1287,7 +1325,9 @@ function createBootstrapCapabilities(input) {
|
|
|
1287
1325
|
mode: input.opts.mode,
|
|
1288
1326
|
features: currentServeFeaturesForRunQwenServe(
|
|
1289
1327
|
input.opts,
|
|
1290
|
-
input.sessionShellCommandEnabled
|
|
1328
|
+
input.sessionShellCommandEnabled,
|
|
1329
|
+
input.sessionArtifactsPersistenceAvailable,
|
|
1330
|
+
input.env
|
|
1291
1331
|
),
|
|
1292
1332
|
modelServices: [],
|
|
1293
1333
|
workspaceCwd: input.boundWorkspace,
|
|
@@ -1432,6 +1472,7 @@ function createBootstrapServeApp(input) {
|
|
|
1432
1472
|
daemonLog,
|
|
1433
1473
|
qwenCodeVersion,
|
|
1434
1474
|
sessionShellCommandEnabled,
|
|
1475
|
+
sessionArtifactsPersistenceAvailable,
|
|
1435
1476
|
permissionPolicy,
|
|
1436
1477
|
multiWorkspaceCapabilitiesRequireRuntime,
|
|
1437
1478
|
getRuntimeError,
|
|
@@ -1487,7 +1528,9 @@ function createBootstrapServeApp(input) {
|
|
|
1487
1528
|
boundWorkspace,
|
|
1488
1529
|
qwenCodeVersion,
|
|
1489
1530
|
sessionShellCommandEnabled,
|
|
1490
|
-
|
|
1531
|
+
sessionArtifactsPersistenceAvailable,
|
|
1532
|
+
permissionPolicy,
|
|
1533
|
+
env: process.env
|
|
1491
1534
|
})
|
|
1492
1535
|
);
|
|
1493
1536
|
});
|
|
@@ -1558,7 +1601,9 @@ function createBootstrapServeApp(input) {
|
|
|
1558
1601
|
protocolVersions: getServeProtocolVersions(),
|
|
1559
1602
|
features: currentServeFeaturesForRunQwenServe(
|
|
1560
1603
|
opts,
|
|
1561
|
-
sessionShellCommandEnabled
|
|
1604
|
+
sessionShellCommandEnabled,
|
|
1605
|
+
sessionArtifactsPersistenceAvailable,
|
|
1606
|
+
process.env
|
|
1562
1607
|
)
|
|
1563
1608
|
},
|
|
1564
1609
|
runtime: {
|
|
@@ -1630,13 +1675,12 @@ function createDelegatingServeApp(bootstrapApp, getRuntimeApp, options = {}) {
|
|
|
1630
1675
|
const dispatch = /* @__PURE__ */ __name(async () => {
|
|
1631
1676
|
let target = getRuntimeApp();
|
|
1632
1677
|
if (!target && options.waitForDeferredRuntimeRoutes === true && !isBootstrapServeRoute(req) && !isCorsPreflightRequest(req) && options.startRuntime && options.runtimeReady) {
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
res,
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
return;
|
|
1678
|
+
const webhookRequest = isChannelWebhookRequest(req);
|
|
1679
|
+
const authGate = webhookRequest ? options.authenticateDeferredChannelWebhookRequest ?? options.authenticateDeferredRuntimeRequest : options.authenticateDeferredRuntimeRequest;
|
|
1680
|
+
if (authGate) {
|
|
1681
|
+
if (!runSynchronousRequestGate(authGate, req, res, next)) {
|
|
1682
|
+
return;
|
|
1683
|
+
}
|
|
1640
1684
|
}
|
|
1641
1685
|
options.startRuntime();
|
|
1642
1686
|
try {
|
|
@@ -1658,6 +1702,80 @@ function isBootstrapServeRoute(req) {
|
|
|
1658
1702
|
return BOOTSTRAP_SERVE_PATHS.has(path2);
|
|
1659
1703
|
}
|
|
1660
1704
|
__name(isBootstrapServeRoute, "isBootstrapServeRoute");
|
|
1705
|
+
function isChannelWebhookRequest(req) {
|
|
1706
|
+
return req.method === "POST" && /^\/channels\/[^/]+\/webhooks\/[^/]+\/?$/u.test(req.path);
|
|
1707
|
+
}
|
|
1708
|
+
__name(isChannelWebhookRequest, "isChannelWebhookRequest");
|
|
1709
|
+
function createDeferredChannelWebhookAuth(workspace, runtime, daemonLog) {
|
|
1710
|
+
return (req, res, next) => {
|
|
1711
|
+
const match = /^\/channels\/([^/]+)\/webhooks\/([^/]+)\/?$/u.exec(req.path);
|
|
1712
|
+
const channelName = decodeDeferredWebhookPathSegment(match?.[1]);
|
|
1713
|
+
const source = decodeDeferredWebhookPathSegment(match?.[2]);
|
|
1714
|
+
if (!channelName || !source) {
|
|
1715
|
+
daemonLog.warn("deferred webhook auth failed", {
|
|
1716
|
+
channelName: channelName ?? "unknown",
|
|
1717
|
+
source: source ?? "unknown",
|
|
1718
|
+
reason: "invalid webhook path"
|
|
1719
|
+
});
|
|
1720
|
+
res.status(401).json({ error: "Invalid webhook secret" });
|
|
1721
|
+
return;
|
|
1722
|
+
}
|
|
1723
|
+
const secret = readDeferredWebhookSecret(
|
|
1724
|
+
runtime,
|
|
1725
|
+
workspace,
|
|
1726
|
+
channelName,
|
|
1727
|
+
source
|
|
1728
|
+
);
|
|
1729
|
+
if (!matchesWebhookSecret(req.get("x-qwen-webhook-secret"), secret)) {
|
|
1730
|
+
daemonLog.warn("deferred webhook auth failed", {
|
|
1731
|
+
channelName,
|
|
1732
|
+
source,
|
|
1733
|
+
reason: secret ? "secret mismatch" : "source not configured"
|
|
1734
|
+
});
|
|
1735
|
+
res.status(401).json({ error: "Invalid webhook secret" });
|
|
1736
|
+
return;
|
|
1737
|
+
}
|
|
1738
|
+
next();
|
|
1739
|
+
};
|
|
1740
|
+
}
|
|
1741
|
+
__name(createDeferredChannelWebhookAuth, "createDeferredChannelWebhookAuth");
|
|
1742
|
+
function decodeDeferredWebhookPathSegment(segment) {
|
|
1743
|
+
if (segment === void 0) return void 0;
|
|
1744
|
+
try {
|
|
1745
|
+
return decodeURIComponent(segment);
|
|
1746
|
+
} catch {
|
|
1747
|
+
return void 0;
|
|
1748
|
+
}
|
|
1749
|
+
}
|
|
1750
|
+
__name(decodeDeferredWebhookPathSegment, "decodeDeferredWebhookPathSegment");
|
|
1751
|
+
function readDeferredWebhookSecret(runtime, workspace, channelName, source) {
|
|
1752
|
+
try {
|
|
1753
|
+
const rawConfig = runtime.loadChannelsConfig(workspace)[channelName];
|
|
1754
|
+
if (typeof rawConfig !== "object" || rawConfig === null) {
|
|
1755
|
+
return void 0;
|
|
1756
|
+
}
|
|
1757
|
+
return runtime.parseChannelWebhookConfig(
|
|
1758
|
+
channelName,
|
|
1759
|
+
rawConfig
|
|
1760
|
+
)?.sources[source]?.secret;
|
|
1761
|
+
} catch (err) {
|
|
1762
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
1763
|
+
writeStderrLine(
|
|
1764
|
+
`[webhook-secret] failed to read deferred webhook secret for ${sanitizeLogText(channelName, 128)}/${sanitizeLogText(source, 128)}: ${sanitizeLogText(reason, 512)}`
|
|
1765
|
+
);
|
|
1766
|
+
return void 0;
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
__name(readDeferredWebhookSecret, "readDeferredWebhookSecret");
|
|
1770
|
+
function matchesWebhookSecret(candidate, expected) {
|
|
1771
|
+
if (typeof candidate !== "string" || typeof expected !== "string" || expected.length === 0) {
|
|
1772
|
+
return false;
|
|
1773
|
+
}
|
|
1774
|
+
const expectedDigest = createHash2("sha256").update(expected).digest();
|
|
1775
|
+
const candidateDigest = createHash2("sha256").update(candidate).digest();
|
|
1776
|
+
return timingSafeEqual(expectedDigest, candidateDigest);
|
|
1777
|
+
}
|
|
1778
|
+
__name(matchesWebhookSecret, "matchesWebhookSecret");
|
|
1661
1779
|
function isCorsPreflightRequest(req) {
|
|
1662
1780
|
return req.method === "OPTIONS" && Boolean(req.headers.origin) && Boolean(
|
|
1663
1781
|
req.headers["access-control-request-method"] || req.headers["access-control-request-headers"]
|
|
@@ -1933,8 +2051,10 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1933
2051
|
let permissionPolicy;
|
|
1934
2052
|
let permissionConsensusQuorum;
|
|
1935
2053
|
let bootSettings;
|
|
2054
|
+
let sessionArtifactsPersistenceAvailable = true;
|
|
1936
2055
|
try {
|
|
1937
2056
|
bootSettings = deps.bootSettings ?? loadServeFastPathSettings(boundWorkspace);
|
|
2057
|
+
sessionArtifactsPersistenceAvailable = sessionArtifactsPersistenceAvailableFromSettings(bootSettings);
|
|
1938
2058
|
contextFilenameForInit = extractContextFilename(
|
|
1939
2059
|
bootSettings.context?.fileName
|
|
1940
2060
|
);
|
|
@@ -2114,6 +2234,7 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2114
2234
|
}, "disposeDaemonEventLoopMonitor");
|
|
2115
2235
|
let channelWorker = createDisabledChannelWorkerSupervisor();
|
|
2116
2236
|
const getChannelWorkerSnapshot = /* @__PURE__ */ __name(() => channelWorker.snapshot(), "getChannelWorkerSnapshot");
|
|
2237
|
+
const reloadChannelWorker = /* @__PURE__ */ __name(() => channelWorker.restart(), "reloadChannelWorker");
|
|
2117
2238
|
const writeChannelWorkerPidfile = /* @__PURE__ */ __name((snapshot = channelWorker.snapshot(), options = {}) => {
|
|
2118
2239
|
if (!opts.channelSelection || !channelServicePidfile) return;
|
|
2119
2240
|
try {
|
|
@@ -2414,6 +2535,7 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2414
2535
|
getBridges: /* @__PURE__ */ __name(() => runtimeBridges.length > 0 ? runtimeBridges : bridgeRef ? [bridgeRef] : [], "getBridges")
|
|
2415
2536
|
}
|
|
2416
2537
|
);
|
|
2538
|
+
const sessionOwnerIndex = runtime.createWorkspaceSessionOwnerIndex();
|
|
2417
2539
|
const persistDisabledToolsFn = /* @__PURE__ */ __name((workspace, toolName, enabled) => withSettingsLock(workspace, async () => {
|
|
2418
2540
|
const fresh = settingsRuntime.settings.loadSettings(workspace);
|
|
2419
2541
|
const wsScope = fresh.forScope(WORKSPACE_SETTING_SCOPE).settings;
|
|
@@ -2460,12 +2582,19 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2460
2582
|
);
|
|
2461
2583
|
}
|
|
2462
2584
|
}), "persistSettingsFn");
|
|
2585
|
+
const { createSubSessionLauncher } = await import("./create-sub-session-KPRT7ECJ.js");
|
|
2586
|
+
const subSessionLauncher = createSubSessionLauncher({
|
|
2587
|
+
getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
|
|
2588
|
+
boundWorkspace
|
|
2589
|
+
});
|
|
2463
2590
|
const bridge = deps.bridge ?? runtime.createAcpSessionBridge({
|
|
2464
2591
|
// Reverse tool channel: let `BridgeClient.extMethod` reach the WS
|
|
2465
2592
|
// connection that hosts a named client MCP server (#5626).
|
|
2466
2593
|
clientMcpSender: clientMcpSenderRegistry.lookup,
|
|
2594
|
+
onCreateSubSession: subSessionLauncher.launch,
|
|
2467
2595
|
maxSessions: opts.maxSessions,
|
|
2468
2596
|
freshSessionAdmission: totalSessionAdmission.admit,
|
|
2597
|
+
sessionLifecycle: sessionOwnerIndex.handleBridgeSessionLifecycle,
|
|
2469
2598
|
...opts.maxPendingPromptsPerSession !== void 0 ? { maxPendingPromptsPerSession: opts.maxPendingPromptsPerSession } : {},
|
|
2470
2599
|
...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
|
|
2471
2600
|
...opts.compactedReplayMaxBytes !== void 0 ? { compactedReplayMaxBytes: opts.compactedReplayMaxBytes } : {},
|
|
@@ -2504,6 +2633,7 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2504
2633
|
persistDisabledTools: persistDisabledToolsFn,
|
|
2505
2634
|
persistSetting: persistSettingFn,
|
|
2506
2635
|
persistSettings: persistSettingsFn,
|
|
2636
|
+
preheatAcpChild: /* @__PURE__ */ __name(() => bridge.preheat(), "preheatAcpChild"),
|
|
2507
2637
|
reloadDaemonEnv: /* @__PURE__ */ __name((workspace) => withSettingsLock(workspace, async () => {
|
|
2508
2638
|
const fresh = settingsRuntime.settings.loadSettings(workspace, {
|
|
2509
2639
|
skipLoadEnvironment: true
|
|
@@ -2614,6 +2744,7 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2614
2744
|
}
|
|
2615
2745
|
};
|
|
2616
2746
|
}, "createRuntimeEnvMetadata");
|
|
2747
|
+
const subSessionStoppers = [];
|
|
2617
2748
|
for (const workspaceInput of workspaceInputs.slice(1)) {
|
|
2618
2749
|
let secondarySettings;
|
|
2619
2750
|
try {
|
|
@@ -2667,10 +2798,17 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2667
2798
|
...opts.experimentalLsp === true ? { extraArgs: ["--experimental-lsp"] } : {}
|
|
2668
2799
|
});
|
|
2669
2800
|
const secondaryClientMcpSenderRegistry = new ClientMcpSenderRegistry();
|
|
2801
|
+
let secondaryBridgeRef;
|
|
2802
|
+
const secondarySubSessionLauncher = createSubSessionLauncher({
|
|
2803
|
+
getBridge: /* @__PURE__ */ __name(() => secondaryBridgeRef, "getBridge"),
|
|
2804
|
+
boundWorkspace: workspaceInput.cwd
|
|
2805
|
+
});
|
|
2670
2806
|
const secondaryBridge = runtime.createAcpSessionBridge({
|
|
2671
2807
|
clientMcpSender: secondaryClientMcpSenderRegistry.lookup,
|
|
2808
|
+
onCreateSubSession: secondarySubSessionLauncher.launch,
|
|
2672
2809
|
maxSessions: opts.maxSessions,
|
|
2673
2810
|
freshSessionAdmission: totalSessionAdmission.admit,
|
|
2811
|
+
sessionLifecycle: sessionOwnerIndex.handleBridgeSessionLifecycle,
|
|
2674
2812
|
...opts.maxPendingPromptsPerSession !== void 0 ? { maxPendingPromptsPerSession: opts.maxPendingPromptsPerSession } : {},
|
|
2675
2813
|
...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
|
|
2676
2814
|
...opts.compactedReplayMaxBytes !== void 0 ? { compactedReplayMaxBytes: opts.compactedReplayMaxBytes } : {},
|
|
@@ -2696,8 +2834,10 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2696
2834
|
fresh.setValue(WORKSPACE_SETTING_SCOPE, "tools.approvalMode", mode);
|
|
2697
2835
|
}), "persistApprovalMode")
|
|
2698
2836
|
});
|
|
2837
|
+
secondaryBridgeRef = secondaryBridge;
|
|
2699
2838
|
runtimeBridges.push(secondaryBridge);
|
|
2700
2839
|
internalRuntimeBridgesForCleanup.push(secondaryBridge);
|
|
2840
|
+
subSessionStoppers.push(secondarySubSessionLauncher.stop);
|
|
2701
2841
|
const secondaryWorkspaceService = runtime.createDaemonWorkspaceService({
|
|
2702
2842
|
boundWorkspace: workspaceInput.cwd,
|
|
2703
2843
|
contextFilename: contextFilenameForInit ?? "QWEN.md",
|
|
@@ -2707,6 +2847,7 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2707
2847
|
}),
|
|
2708
2848
|
workspaceSkillsStatusProvider: runtime.createWorkspaceSkillsStatusProvider(),
|
|
2709
2849
|
isChannelLive: /* @__PURE__ */ __name(() => secondaryBridge.isChannelLive(), "isChannelLive"),
|
|
2850
|
+
preheatAcpChild: /* @__PURE__ */ __name(() => secondaryBridge.preheat(), "preheatAcpChild"),
|
|
2710
2851
|
persistDisabledTools: persistDisabledToolsFn,
|
|
2711
2852
|
persistSetting: persistSettingFn,
|
|
2712
2853
|
persistSettings: persistSettingsFn,
|
|
@@ -2772,7 +2913,9 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2772
2913
|
clientMcpSenderRegistry: secondaryClientMcpSenderRegistry
|
|
2773
2914
|
});
|
|
2774
2915
|
}
|
|
2775
|
-
const workspaceRegistry = runtime.createWorkspaceRegistry(workspaceRuntimes
|
|
2916
|
+
const workspaceRegistry = runtime.createWorkspaceRegistry(workspaceRuntimes, {
|
|
2917
|
+
sessionOwnerIndex
|
|
2918
|
+
});
|
|
2776
2919
|
core.registerDaemonGaugeCallbacks({
|
|
2777
2920
|
sessionCount: /* @__PURE__ */ __name(() => workspaceRegistry.list().reduce((sum, item) => sum + item.bridge.sessionCount, 0), "sessionCount"),
|
|
2778
2921
|
sseCount: /* @__PURE__ */ __name(() => runtime.getActiveSseCount(), "sseCount"),
|
|
@@ -2864,8 +3007,163 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2864
3007
|
metricsLoopDelay.disable();
|
|
2865
3008
|
}
|
|
2866
3009
|
};
|
|
3010
|
+
const createDynamicWorkspaceRuntime = /* @__PURE__ */ __name(async (cwd) => {
|
|
3011
|
+
let wsSettings;
|
|
3012
|
+
try {
|
|
3013
|
+
wsSettings = settingsRuntime.settings.loadSettings(cwd);
|
|
3014
|
+
} catch (err) {
|
|
3015
|
+
writeStderrLine(
|
|
3016
|
+
`qwen serve: could not read full settings for dynamic workspace ${cwd} (${err instanceof Error ? err.message : String(err)}); falling back to defaults.`
|
|
3017
|
+
);
|
|
3018
|
+
}
|
|
3019
|
+
const trusted = wsSettings ? settingsRuntime.trustedFolders.getWorkspaceTrustStatus(
|
|
3020
|
+
wsSettings.merged,
|
|
3021
|
+
cwd
|
|
3022
|
+
).effective.state === "trusted" : false;
|
|
3023
|
+
const wsEnv = createRuntimeEnvMetadata(cwd, wsSettings);
|
|
3024
|
+
const wsHash = core.hashDaemonWorkspace(cwd);
|
|
3025
|
+
const wsFsFactory = runtime.resolveBridgeFsFactory({
|
|
3026
|
+
boundWorkspaces: [cwd],
|
|
3027
|
+
trusted,
|
|
3028
|
+
emit: deps.fsAuditEmit,
|
|
3029
|
+
pathLocks: sharedPathLocks,
|
|
3030
|
+
...customIgnoreFiles !== void 0 ? { customIgnoreFiles } : {}
|
|
3031
|
+
});
|
|
3032
|
+
const wsChannelFactory = runtime.createSpawnChannelFactory({
|
|
3033
|
+
sourceEnv: wsEnv.effectiveEnv,
|
|
3034
|
+
onDiagnosticLine: diagnosticSink,
|
|
3035
|
+
pipeHooks: {
|
|
3036
|
+
onMessageSent: /* @__PURE__ */ __name((bytes) => recordPipeMessage("outbound", bytes), "onMessageSent"),
|
|
3037
|
+
onMessageReceived: /* @__PURE__ */ __name((bytes) => recordPipeMessage("inbound", bytes), "onMessageReceived"),
|
|
3038
|
+
onMessageObserved: /* @__PURE__ */ __name(({ direction, bytes, message }) => observeLargePipeFrame({
|
|
3039
|
+
direction: daemonPipeDirection(direction),
|
|
3040
|
+
bytes,
|
|
3041
|
+
message
|
|
3042
|
+
}), "onMessageObserved")
|
|
3043
|
+
},
|
|
3044
|
+
...opts.experimentalLsp === true ? { extraArgs: ["--experimental-lsp"] } : {}
|
|
3045
|
+
});
|
|
3046
|
+
const wsClientMcpRegistry = new ClientMcpSenderRegistry();
|
|
3047
|
+
let wsBridgeRef;
|
|
3048
|
+
const wsSubSessionLauncher = createSubSessionLauncher({
|
|
3049
|
+
getBridge: /* @__PURE__ */ __name(() => wsBridgeRef, "getBridge"),
|
|
3050
|
+
boundWorkspace: cwd
|
|
3051
|
+
});
|
|
3052
|
+
const wsBridge = runtime.createAcpSessionBridge({
|
|
3053
|
+
clientMcpSender: wsClientMcpRegistry.lookup,
|
|
3054
|
+
onCreateSubSession: wsSubSessionLauncher.launch,
|
|
3055
|
+
maxSessions: opts.maxSessions,
|
|
3056
|
+
freshSessionAdmission: totalSessionAdmission.admit,
|
|
3057
|
+
sessionLifecycle: sessionOwnerIndex.handleBridgeSessionLifecycle,
|
|
3058
|
+
...opts.maxPendingPromptsPerSession !== void 0 ? { maxPendingPromptsPerSession: opts.maxPendingPromptsPerSession } : {},
|
|
3059
|
+
...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
|
|
3060
|
+
...opts.compactedReplayMaxBytes !== void 0 ? { compactedReplayMaxBytes: opts.compactedReplayMaxBytes } : {},
|
|
3061
|
+
...opts.channelIdleTimeoutMs !== void 0 ? { channelIdleTimeoutMs: opts.channelIdleTimeoutMs } : {},
|
|
3062
|
+
...opts.sessionReapIntervalMs !== void 0 ? { sessionReapIntervalMs: opts.sessionReapIntervalMs } : {},
|
|
3063
|
+
...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
|
|
3064
|
+
...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
|
|
3065
|
+
boundWorkspace: cwd,
|
|
3066
|
+
sessionShellCommandEnabled,
|
|
3067
|
+
childEnvOverrides,
|
|
3068
|
+
channelFactory: wsChannelFactory,
|
|
3069
|
+
onDiagnosticLine: diagnosticSink,
|
|
3070
|
+
telemetry: createRuntimeBridgeTelemetry(wsHash),
|
|
3071
|
+
...permissionPolicy !== void 0 ? { permissionPolicy } : {},
|
|
3072
|
+
...permissionConsensusQuorum !== void 0 ? { permissionConsensusQuorum } : {},
|
|
3073
|
+
permissionAudit: permissionAuditPublisher,
|
|
3074
|
+
statusProvider: runtime.createDaemonStatusProvider({
|
|
3075
|
+
env: wsEnv.effectiveEnv
|
|
3076
|
+
}),
|
|
3077
|
+
fileSystem: createBridgeFileSystemAdapter(wsFsFactory),
|
|
3078
|
+
persistApprovalMode: /* @__PURE__ */ __name((workspace, mode) => withSettingsLock(workspace, async () => {
|
|
3079
|
+
const fresh = settingsRuntime.settings.loadSettings(workspace);
|
|
3080
|
+
fresh.setValue(WORKSPACE_SETTING_SCOPE, "tools.approvalMode", mode);
|
|
3081
|
+
}), "persistApprovalMode")
|
|
3082
|
+
});
|
|
3083
|
+
wsBridgeRef = wsBridge;
|
|
3084
|
+
const wsService = runtime.createDaemonWorkspaceService({
|
|
3085
|
+
boundWorkspace: cwd,
|
|
3086
|
+
contextFilename: contextFilenameForInit ?? "QWEN.md",
|
|
3087
|
+
statusProvider: runtime.createDaemonStatusProvider({
|
|
3088
|
+
env: wsEnv.effectiveEnv
|
|
3089
|
+
}),
|
|
3090
|
+
workspaceProvidersStatusProvider: runtime.createWorkspaceProvidersStatusProvider({
|
|
3091
|
+
env: wsEnv.effectiveEnv
|
|
3092
|
+
}),
|
|
3093
|
+
workspaceSkillsStatusProvider: runtime.createWorkspaceSkillsStatusProvider(),
|
|
3094
|
+
isChannelLive: /* @__PURE__ */ __name(() => wsBridge.isChannelLive(), "isChannelLive"),
|
|
3095
|
+
preheatAcpChild: /* @__PURE__ */ __name(() => wsBridge.preheat(), "preheatAcpChild"),
|
|
3096
|
+
persistDisabledTools: persistDisabledToolsFn,
|
|
3097
|
+
persistSetting: persistSettingFn,
|
|
3098
|
+
persistSettings: persistSettingsFn,
|
|
3099
|
+
reloadDaemonEnv: /* @__PURE__ */ __name((workspace) => withSettingsLock(workspace, async () => {
|
|
3100
|
+
const fresh = settingsRuntime.settings.loadSettings(workspace, {
|
|
3101
|
+
skipLoadEnvironment: true
|
|
3102
|
+
});
|
|
3103
|
+
const result = settingsRuntime.settings.reloadEnvironment(
|
|
3104
|
+
fresh.merged,
|
|
3105
|
+
workspace
|
|
3106
|
+
);
|
|
3107
|
+
try {
|
|
3108
|
+
const refreshedRuntimeEnv = settingsRuntime.environment.buildRuntimeEnvironment(
|
|
3109
|
+
fresh.merged,
|
|
3110
|
+
workspace,
|
|
3111
|
+
daemonRuntimeBaseEnv
|
|
3112
|
+
);
|
|
3113
|
+
logRuntimeEnvFileReadFailures(workspace, refreshedRuntimeEnv);
|
|
3114
|
+
wsEnv.replace(refreshedRuntimeEnv.effectiveEnv);
|
|
3115
|
+
wsEnv.metadata.envFileReadFailed = refreshedRuntimeEnv.envFileReadFailed;
|
|
3116
|
+
wsEnv.metadata.envFileReadFailures.splice(
|
|
3117
|
+
0,
|
|
3118
|
+
wsEnv.metadata.envFileReadFailures.length,
|
|
3119
|
+
...refreshedRuntimeEnv.envFileReadFailures
|
|
3120
|
+
);
|
|
3121
|
+
wsEnv.metadata.overlayKeys.splice(
|
|
3122
|
+
0,
|
|
3123
|
+
wsEnv.metadata.overlayKeys.length,
|
|
3124
|
+
...refreshedRuntimeEnv.overlayKeys
|
|
3125
|
+
);
|
|
3126
|
+
wsEnv.metadata.envFilePaths.splice(
|
|
3127
|
+
0,
|
|
3128
|
+
wsEnv.metadata.envFilePaths.length,
|
|
3129
|
+
...refreshedRuntimeEnv.envFilePaths
|
|
3130
|
+
);
|
|
3131
|
+
delete wsEnv.metadata.fallbackReason;
|
|
3132
|
+
} catch (err) {
|
|
3133
|
+
wsEnv.metadata.fallbackReason = err instanceof Error ? err.message : String(err);
|
|
3134
|
+
daemonLog.warn(
|
|
3135
|
+
"failed to rebuild dynamic runtime env snapshot after daemon env reload; preserving previous runtime env",
|
|
3136
|
+
{
|
|
3137
|
+
workspace,
|
|
3138
|
+
error: wsEnv.metadata.fallbackReason
|
|
3139
|
+
}
|
|
3140
|
+
);
|
|
3141
|
+
}
|
|
3142
|
+
return result;
|
|
3143
|
+
}), "reloadDaemonEnv"),
|
|
3144
|
+
queryWorkspaceStatus: /* @__PURE__ */ __name((method, idle) => wsBridge.queryWorkspaceStatus(method, idle), "queryWorkspaceStatus"),
|
|
3145
|
+
invokeWorkspaceCommand: /* @__PURE__ */ __name((method, params, invokeOpts) => wsBridge.invokeWorkspaceCommand(method, params, invokeOpts), "invokeWorkspaceCommand"),
|
|
3146
|
+
refreshExtensionsForAllSessions: /* @__PURE__ */ __name(() => wsBridge.refreshExtensionsForAllSessions(), "refreshExtensionsForAllSessions"),
|
|
3147
|
+
publishWorkspaceEvent: /* @__PURE__ */ __name((event) => wsBridge.publishWorkspaceEvent(event), "publishWorkspaceEvent")
|
|
3148
|
+
});
|
|
3149
|
+
runtimeBridges.push(wsBridge);
|
|
3150
|
+
internalRuntimeBridgesForCleanup.push(wsBridge);
|
|
3151
|
+
subSessionStoppers.push(wsSubSessionLauncher.stop);
|
|
3152
|
+
return {
|
|
3153
|
+
workspaceId: wsHash,
|
|
3154
|
+
workspaceCwd: cwd,
|
|
3155
|
+
primary: false,
|
|
3156
|
+
trusted,
|
|
3157
|
+
env: wsEnv.metadata,
|
|
3158
|
+
bridge: wsBridge,
|
|
3159
|
+
workspaceService: wsService,
|
|
3160
|
+
routeFileSystemFactory: wsFsFactory,
|
|
3161
|
+
clientMcpSenderRegistry: wsClientMcpRegistry
|
|
3162
|
+
};
|
|
3163
|
+
}, "createDynamicWorkspaceRuntime");
|
|
2867
3164
|
const app2 = runtime.createServeApp(opts, () => actualPort, {
|
|
2868
3165
|
workspaceRegistry,
|
|
3166
|
+
createWorkspaceRuntime: createDynamicWorkspaceRuntime,
|
|
2869
3167
|
bridge,
|
|
2870
3168
|
webShellDir,
|
|
2871
3169
|
boundWorkspace,
|
|
@@ -2880,6 +3178,11 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2880
3178
|
primaryRuntimeEnv,
|
|
2881
3179
|
daemonLog,
|
|
2882
3180
|
getChannelWorkerSnapshot,
|
|
3181
|
+
enqueueChannelWebhookTask: /* @__PURE__ */ __name((task) => channelWorker.enqueueWebhookTask(task), "enqueueChannelWebhookTask"),
|
|
3182
|
+
// Gate both the `channel_reload` capability and the reload route on the
|
|
3183
|
+
// presence of this dep, so it is advertised only when a channel worker
|
|
3184
|
+
// exists to reload.
|
|
3185
|
+
...opts.channelSelection ? { reloadChannelWorker } : {},
|
|
2883
3186
|
getPerfSnapshot: /* @__PURE__ */ __name(() => ({
|
|
2884
3187
|
eventLoop: currentDaemonEventLoopMonitor.snapshot(),
|
|
2885
3188
|
promptQueueWait: {
|
|
@@ -2903,6 +3206,9 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2903
3206
|
persistDisabledTools: persistDisabledToolsFn,
|
|
2904
3207
|
persistSetting: persistSettingFn,
|
|
2905
3208
|
persistSettings: persistSettingsFn,
|
|
3209
|
+
sessionArtifactsPersistenceAvailable: sessionArtifactsPersistenceAvailableFromSettings(
|
|
3210
|
+
runtimeBootSettings?.merged
|
|
3211
|
+
),
|
|
2906
3212
|
installAuthProvider: /* @__PURE__ */ __name((req) => withSettingsLock(
|
|
2907
3213
|
boundWorkspace,
|
|
2908
3214
|
async () => {
|
|
@@ -2941,6 +3247,8 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2941
3247
|
}
|
|
2942
3248
|
), "installAuthProvider")
|
|
2943
3249
|
});
|
|
3250
|
+
app2.locals.subSessionStoppers = subSessionStoppers;
|
|
3251
|
+
subSessionStoppers.push(subSessionLauncher.stop);
|
|
2944
3252
|
return { app: app2, bridge };
|
|
2945
3253
|
}, "buildRuntime");
|
|
2946
3254
|
if (deps.bridge) {
|
|
@@ -2962,17 +3270,24 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
2962
3270
|
daemonLog,
|
|
2963
3271
|
qwenCodeVersion: cliVersion,
|
|
2964
3272
|
sessionShellCommandEnabled,
|
|
3273
|
+
sessionArtifactsPersistenceAvailable,
|
|
2965
3274
|
permissionPolicy,
|
|
2966
3275
|
multiWorkspaceCapabilitiesRequireRuntime: workspaceInputs.length > 1,
|
|
2967
3276
|
getRuntimeError: /* @__PURE__ */ __name(() => runtimeStartupError, "getRuntimeError"),
|
|
2968
3277
|
getChannelWorkerSnapshot,
|
|
2969
3278
|
onHealthServed: deferRuntimeUntilFirstHealth ? () => startRuntimeAfterHealth?.() : void 0
|
|
2970
3279
|
});
|
|
3280
|
+
const deferredChannelWebhookAuth = deferRuntimeUntilFirstHealth ? createDeferredChannelWebhookAuth(
|
|
3281
|
+
boundWorkspace,
|
|
3282
|
+
await loadChannelWebhookConfigRuntime(),
|
|
3283
|
+
daemonLog
|
|
3284
|
+
) : void 0;
|
|
2971
3285
|
const app = runtimeApp ?? createDelegatingServeApp(bootstrapApp, () => runtimeApp, {
|
|
2972
3286
|
waitForDeferredRuntimeRoutes: deferRuntimeUntilFirstHealth,
|
|
2973
3287
|
startRuntime: /* @__PURE__ */ __name(() => startRuntimeForRequest?.(), "startRuntime"),
|
|
2974
3288
|
runtimeReady,
|
|
2975
|
-
authenticateDeferredRuntimeRequest: bearerAuth(opts.token)
|
|
3289
|
+
authenticateDeferredRuntimeRequest: bearerAuth(opts.token),
|
|
3290
|
+
authenticateDeferredChannelWebhookRequest: deferredChannelWebhookAuth
|
|
2976
3291
|
});
|
|
2977
3292
|
let listenHostname = opts.hostname;
|
|
2978
3293
|
if (opts.hostname.startsWith("[")) {
|
|
@@ -3010,7 +3325,8 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
3010
3325
|
try {
|
|
3011
3326
|
if (opts.channelSelection) {
|
|
3012
3327
|
const createSupervisor = deps.channelWorkerSupervisorFactory ?? channelRuntime?.createChannelWorkerSupervisor;
|
|
3013
|
-
|
|
3328
|
+
const findCliEntryPath = channelRuntime?.findCliEntryPath;
|
|
3329
|
+
if (!createSupervisor || !findCliEntryPath) {
|
|
3014
3330
|
throw new Error(
|
|
3015
3331
|
"Channel worker supervisor runtime is not available."
|
|
3016
3332
|
);
|
|
@@ -3311,6 +3627,10 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
3311
3627
|
closePromise = new Promise((res, rej) => {
|
|
3312
3628
|
shuttingDown = true;
|
|
3313
3629
|
app.locals.stopScheduledTaskKeepalive?.();
|
|
3630
|
+
const stoppers = app.locals.subSessionStoppers;
|
|
3631
|
+
if (stoppers) {
|
|
3632
|
+
for (const stop of stoppers) stop();
|
|
3633
|
+
}
|
|
3314
3634
|
clearRuntimeStartAfterHealthTimer();
|
|
3315
3635
|
clearRuntimeStartFallbackTimer();
|
|
3316
3636
|
cancelDeferredRuntimeStartup();
|
|
@@ -3512,6 +3832,7 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
3512
3832
|
__name(runQwenServe, "runQwenServe");
|
|
3513
3833
|
export {
|
|
3514
3834
|
InvalidPolicyConfigError,
|
|
3835
|
+
createDisabledChannelWorkerSupervisor,
|
|
3515
3836
|
createLazyBridgeProxy,
|
|
3516
3837
|
extractContextFilename,
|
|
3517
3838
|
formatChannelWorkerDaemonUrl,
|