@qwen-code/qwen-code 0.19.2 → 0.19.3-nightly.20260701.a974594d7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/extension-creator/SKILL.md +357 -0
- package/bundled/loop/SKILL.md +34 -10
- package/bundled/loop/SKILL.test.ts +52 -0
- package/bundled/loop/autonomous-loop.test.ts +59 -0
- package/bundled/loop/autonomous-loop.ts +102 -0
- package/bundled/loop/loop-task-file.test.ts +1064 -0
- package/bundled/loop/loop-task-file.ts +404 -0
- package/bundled/loop/loop-tick-resolver.test.ts +864 -0
- package/bundled/loop/loop-tick-resolver.ts +416 -0
- package/bundled/qc-helper/SKILL.md +26 -19
- package/bundled/qc-helper/docs/configuration/auth.md +11 -11
- package/bundled/qc-helper/docs/configuration/model-providers.md +13 -13
- package/bundled/qc-helper/docs/configuration/settings.md +77 -75
- package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
- package/bundled/qc-helper/docs/features/commands.md +108 -77
- package/bundled/qc-helper/docs/features/hooks.md +6 -1
- package/bundled/qc-helper/docs/features/memory.md +53 -1
- package/bundled/qc-helper/docs/features/status-line.md +3 -3
- package/bundled/qc-helper/docs/ide-integration/ide-integration.md +4 -4
- package/bundled/qc-helper/docs/qwen-serve.md +24 -2
- package/bundled/qc-helper/docs/support/tos-privacy.md +16 -3
- package/bundled/qc-helper/docs/support/troubleshooting.md +6 -0
- package/chunks/{MaxSizedBox-7RERNLFK.js → MaxSizedBox-UZHJ73JB.js} +29 -27
- package/chunks/{StandaloneSessionPicker-S22XBSN6.js → StandaloneSessionPicker-GGUIZWCE.js} +42 -37
- package/chunks/{acpAgent-4MCETHF2.js → acpAgent-QYZFICEZ.js} +1292 -332
- package/chunks/{agent-K3ENVYSB.js → agent-2EN7YNSW.js} +24 -23
- package/chunks/{agent-headless-HO3V3A3A.js → agent-headless-SLTEZ5LV.js} +24 -23
- package/chunks/{anthropicContentGenerator-E3TQ5XJJ.js → anthropicContentGenerator-CA3JTAMO.js} +33 -12
- package/chunks/{artifact-tool-QA4KRO3B.js → artifact-tool-RM7WINJO.js} +3 -3
- package/chunks/{askUserQuestion-HMWXW6VN.js → askUserQuestion-J3P6QAJ7.js} +2 -2
- package/chunks/{bridge-4LV2HBH2.js → bridge-HZVAUTMX.js} +29 -28
- package/chunks/{ca-7WC7ELX6.js → ca-RYOETBUW.js} +10 -9
- package/chunks/{chunk-JXQ23SNT.js → chunk-2JKEQWDZ.js} +623 -78
- package/chunks/chunk-32MCHZQC.js +73 -0
- package/chunks/{chunk-PXFFKNCO.js → chunk-35FH347N.js} +5308 -2500
- package/chunks/{chunk-5JZLXFPD.js → chunk-3O2BJMFW.js} +11 -11
- package/chunks/{chunk-2JD55C6G.js → chunk-3TK7FSCP.js} +2 -2
- package/chunks/{chunk-USGMPVOY.js → chunk-4722VFFU.js} +19 -10
- package/chunks/chunk-6FIWYVN4.js +4932 -0
- package/chunks/{chunk-I2RFAW6Q.js → chunk-7SP275SH.js} +7 -5
- package/chunks/{chunk-5R4SBCX6.js → chunk-AIBPG5MB.js} +3 -3
- package/chunks/{chunk-C4K3FEQ2.js → chunk-AVQDCKNF.js} +124 -21
- package/chunks/{chunk-OTBK43JR.js → chunk-B236XPGF.js} +1 -1
- package/chunks/{chunk-WA5OJGFL.js → chunk-B5MPZI4K.js} +458 -125
- package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
- package/chunks/{chunk-4W4T77MO.js → chunk-BLAE2TCO.js} +109 -6
- package/chunks/chunk-BMFMJINR.js +45 -0
- package/chunks/{chunk-T2VDEFUU.js → chunk-BZHLWC6T.js} +2 -2
- package/chunks/{chunk-XU5P23GN.js → chunk-CA4ML3VH.js} +3 -3
- package/chunks/{chunk-WGAEWQTF.js → chunk-DBR7PF4B.js} +1 -2
- package/chunks/{chunk-S566HKUS.js → chunk-DHXWNSJA.js} +15 -1
- package/chunks/{chunk-LLFFKXZZ.js → chunk-DJ25MIU2.js} +167 -43
- package/chunks/{chunk-KBXLIVWQ.js → chunk-DX3TKXNT.js} +2 -2
- package/chunks/{chunk-OIC6S73E.js → chunk-E5I6YSNO.js} +1 -1
- package/chunks/{chunk-TXVGVZYR.js → chunk-ESVSWG6Z.js} +3 -3
- package/chunks/{chunk-EX4W6ZYG.js → chunk-EUURTJY7.js} +1 -1
- package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
- package/chunks/{chunk-F6XNTYNE.js → chunk-FQDMX5IL.js} +30 -307
- package/chunks/{chunk-3QFE4OTE.js → chunk-FR3II765.js} +4 -4
- package/chunks/{chunk-VYFMN7C6.js → chunk-FV4SQ54H.js} +382 -55
- package/chunks/{chunk-ZD3NW5KL.js → chunk-FZY7NH37.js} +63 -9
- package/chunks/{chunk-CI5O6SQL.js → chunk-G525INVW.js} +4 -4
- package/chunks/{chunk-CGOMICBE.js → chunk-GDIG7TMG.js} +34 -1
- package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
- package/chunks/{chunk-TZM5JIAX.js → chunk-GZKQ36JS.js} +10 -7
- package/chunks/{chunk-BS64PXY3.js → chunk-HIYUAXBG.js} +1 -1
- package/chunks/{chunk-TMBPDHXD.js → chunk-HTWHAN44.js} +1 -1
- package/chunks/{chunk-EL5IHQON.js → chunk-HUGAEYZR.js} +6 -27
- package/chunks/{chunk-2BIF2NVV.js → chunk-HWG4XLD7.js} +2 -2
- package/chunks/{chunk-I5T6PIBQ.js → chunk-I4MXURND.js} +1076 -954
- package/chunks/{chunk-JTYRZODB.js → chunk-IBEM64M4.js} +39 -11
- package/chunks/{chunk-XKBP7M7A.js → chunk-IKO44NAT.js} +149 -31
- package/chunks/{chunk-2BAQ3ACS.js → chunk-JERW36RG.js} +404 -4
- package/chunks/{chunk-TOEGRAVX.js → chunk-JV7A66DR.js} +28 -16
- package/chunks/{chunk-3RJ3ZPPR.js → chunk-KKQWC6WS.js} +7 -7
- package/chunks/{chunk-EXMX5YHG.js → chunk-KXVVXAAC.js} +1 -1
- package/chunks/{chunk-Z7XXFPGP.js → chunk-LDWTYE33.js} +1 -1
- package/chunks/{chunk-X6EDWN44.js → chunk-LWGLBVWA.js} +1 -1
- package/chunks/{chunk-NYOHZYHM.js → chunk-LXEW6BHF.js} +45 -3
- package/chunks/{chunk-BGUDAULQ.js → chunk-LXGWLOCM.js} +5 -5
- package/chunks/{chunk-ZUAXI2OA.js → chunk-M2U5NM24.js} +188 -11366
- package/chunks/{chunk-BNXANYLH.js → chunk-MOUXUCXQ.js} +81 -1
- package/chunks/{chunk-FPACXT7T.js → chunk-MTJVHQDP.js} +534 -164
- package/chunks/{chunk-UAARJR2G.js → chunk-N4V4VBP6.js} +2 -2
- package/chunks/chunk-NIOPRZNN.js +27 -0
- package/chunks/{chunk-2TJ3YN6Q.js → chunk-NOYV2NXI.js} +517 -490
- package/chunks/{chunk-PRYMDRBV.js → chunk-NPQWQYU6.js} +1 -1
- package/chunks/{chunk-J6AW7O5D.js → chunk-NVTRORSK.js} +2 -2
- package/chunks/{chunk-PF523XJX.js → chunk-OE5J6UA7.js} +1 -1
- package/chunks/{chunk-RS4HRC75.js → chunk-OEY3YAL2.js} +99 -8
- package/chunks/{chunk-R36VMVEP.js → chunk-PLQTLKMR.js} +5 -5
- package/chunks/{chunk-UN3C6GOR.js → chunk-PPFWEV7G.js} +10 -108
- package/chunks/chunk-Q3JOGB4U.js +481 -0
- package/chunks/{chunk-HG6YKEBI.js → chunk-Q7TDHJ2G.js} +192 -30
- package/chunks/{chunk-EW6C27XX.js → chunk-QHHNFG22.js} +9 -3
- package/chunks/chunk-QYUE6W3T.js +123 -0
- package/chunks/{chunk-GZCJS5WH.js → chunk-SJBIFVD2.js} +2 -2
- package/chunks/{chunk-3UALQ56H.js → chunk-T42ACHFI.js} +1 -1
- package/chunks/chunk-T44AF4I6.js +690 -0
- package/chunks/{chunk-DBZUXSSV.js → chunk-TMILTLP3.js} +6 -6
- package/chunks/{chunk-EEEZIVFJ.js → chunk-TOAUDIS7.js} +1 -1
- package/chunks/chunk-UAKXW3DN.js +30 -0
- package/chunks/{chunk-VQRYPFCV.js → chunk-V5YJAUHW.js} +10 -460
- package/chunks/{chunk-D5E5TMYH.js → chunk-VHRREANT.js} +16 -2
- package/chunks/{chunk-5RVSM6NW.js → chunk-VN4CKYUW.js} +1 -1
- package/chunks/chunk-VXGPYF7U.js +37 -0
- package/chunks/{chunk-UAARVVBI.js → chunk-WGY3GIPP.js} +1 -1
- package/chunks/{chunk-GYZQA2FO.js → chunk-WJAY4WXR.js} +1 -1
- package/chunks/chunk-XKSCTXPK.js +167 -0
- package/chunks/chunk-YCEHOJZJ.js +840 -0
- package/chunks/{chunk-BG4BIP7F.js → chunk-YCRTJYSQ.js} +4 -2
- package/chunks/{chunk-CGEGHF2C.js → chunk-YPCPZSZB.js} +1 -1
- package/chunks/chunk-YTFBURQD.js +313 -0
- package/chunks/{chunk-HGNSRCRB.js → chunk-YXK4GPYO.js} +1 -1
- package/chunks/{chunk-OQHQHJRK.js → chunk-Z34RYLRO.js} +151 -4775
- package/chunks/chunk-ZGSV5ORL.js +11273 -0
- package/chunks/{computer-use-6BBRNT6S.js → computer-use-FCNWHVPW.js} +103 -49
- package/chunks/{contextCommand-UJAJ6N57.js → contextCommand-FVFMZZEU.js} +26 -25
- package/chunks/{cron-create-4KQE6YLH.js → cron-create-IY5NMIHQ.js} +4 -4
- package/chunks/{cron-delete-THME66UP.js → cron-delete-OLNEQWKO.js} +6 -6
- package/chunks/{cron-list-7A54SJ5N.js → cron-list-YAUAUV24.js} +5 -5
- package/chunks/{daemon-status-provider-CSL3BUOY.js → daemon-status-provider-42JEXENZ.js} +32 -32
- package/chunks/{de-ACHALDED.js → de-HB5NJXGB.js} +10 -9
- package/chunks/{dist-BD27IA3L.js → dist-4FCNM6KJ.js} +2 -2
- package/chunks/{dist-OD2FY543.js → dist-K4XZILIO.js} +1 -1
- package/chunks/{dist-BOOH5JWN.js → dist-SU6L7ZNJ.js} +114 -9
- package/chunks/{dist-QHJRBCMP.js → dist-UKPWQJCL.js} +44 -2
- package/chunks/{dist-QFFZWACU.js → dist-VD7HXTML.js} +20 -9
- package/chunks/{earlyInputCapture-X6KMCSHD.js → earlyInputCapture-FFFEC6P4.js} +25 -24
- package/chunks/{edit-7J6WXARF.js → edit-32ILSGZY.js} +72 -30
- package/chunks/{en-NCUBOJOY.js → en-U3LWGSFX.js} +19 -9
- package/chunks/{enter-worktree-KULCKJPJ.js → enter-worktree-XWZKIN6A.js} +24 -23
- package/chunks/{enterPlanMode-H2CIOLMH.js → enterPlanMode-LPFFY7BJ.js} +24 -23
- package/chunks/{errors-6G2JYR54.js → errors-UXBPYPI2.js} +26 -25
- package/chunks/{exit-worktree-ECBWBVC5.js → exit-worktree-IBS4UIU7.js} +24 -23
- package/chunks/{exitPlanMode-DQV56GTW.js → exitPlanMode-JA72YHII.js} +24 -23
- package/chunks/{fast-path-35JJFS3C.js → fast-path-7UU67Y2W.js} +30 -13
- package/chunks/{fast-path-settings-TSVI53EB.js → fast-path-settings-UQLRFDQP.js} +3 -2
- package/chunks/{fr-GVKZ27MF.js → fr-XY3NQFCM.js} +10 -9
- package/chunks/{gemini-NDTG7WAX.js → gemini-GMVKJNMX.js} +211 -105
- package/chunks/{geminiContentGenerator-XTG6SFLA.js → geminiContentGenerator-7NIFF2L4.js} +4 -4
- package/chunks/{glob-SJ2JBZK4.js → glob-4NJCW5HI.js} +24 -23
- package/chunks/{grep-BRMWFEWR.js → grep-PAIMLQEL.js} +24 -23
- package/chunks/{initializer-P5AXF7PV.js → initializer-R6KU4VYM.js} +31 -28
- package/chunks/{ja-FKZ2WZ4D.js → ja-J7YAG7SA.js} +10 -9
- package/chunks/{keychain-token-storage-CSYMNRPP.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
- package/chunks/{list-6COK34BP.js → list-H7LXAO64.js} +32 -29
- package/chunks/{loadedSettingsAdapter-XIUTN245.js → loadedSettingsAdapter-H27JMTLU.js} +30 -27
- package/chunks/{loop-wakeup-33GPXJLA.js → loop-wakeup-Y3OIRQFM.js} +7 -7
- package/chunks/{ls-BYQY7RVV.js → ls-TVJEYS7O.js} +4 -4
- package/chunks/{lsp-X54RO4IV.js → lsp-JZSDVR3F.js} +2 -2
- package/chunks/{monitor-DH7KFSJV.js → monitor-JSIHDPXP.js} +24 -23
- package/chunks/nonInteractiveCli-Y4CHOETG.js +100 -0
- package/chunks/{notebook-edit-D4R4ZLMA.js → notebook-edit-SHRNL2UM.js} +52 -23
- package/chunks/{openaiContentGenerator-F74IPQ6E.js → openaiContentGenerator-ORZZ7VFO.js} +13 -12
- package/chunks/{pt-SY5NCFGR.js → pt-6RTAA6SS.js} +10 -9
- package/chunks/{qwenContentGenerator-ATTK5P4D.js → qwenContentGenerator-H643PL2G.js} +26 -25
- package/chunks/{qwenOAuth2-K4AASPCV.js → qwenOAuth2-OI2B7PES.js} +5 -4
- package/chunks/{read-file-767G23OY.js → read-file-5PRNPTTY.js} +8 -8
- package/chunks/{read-mcp-resource-I5HCZJ6X.js → read-mcp-resource-QTXGKTEV.js} +2 -2
- package/chunks/{ripGrep-4OMMGSWX.js → ripGrep-JIKZMABJ.js} +24 -23
- package/chunks/{ru-FWNXJG4F.js → ru-AUBGJ2C4.js} +10 -9
- package/chunks/{run-qwen-serve-REKSTYRA.js → run-qwen-serve-PQV7QOHZ.js} +284 -52
- package/chunks/{scheduler-UNTFDQLG.js → scheduler-OS3R5MGU.js} +24 -23
- package/chunks/{send-message-2DAFXEYP.js → send-message-DKGHWSTF.js} +2 -2
- package/chunks/{serve-KZ56QB5S.js → serve-LVYZDKCZ.js} +31 -29
- package/chunks/{server-BV5TZUMU.js → server-P4YIH35I.js} +11458 -8447
- package/chunks/{session-OIBXFSGD.js → session-DE4TZBKH.js} +195 -58
- package/chunks/{settings-WJTCBIRA.js → settings-DFTYMJYF.js} +30 -27
- package/chunks/{shell-WC52IBHW.js → shell-3GNQLNV7.js} +24 -23
- package/chunks/{skill-U7F7JR4M.js → skill-NCNG4KKZ.js} +38 -11
- package/chunks/{spawnChannel-EI2E5BCW.js → spawnChannel-DHRIMDVL.js} +26 -25
- package/chunks/{src-4F6FBZFI.js → src-PNZYGM3R.js} +104 -28
- package/chunks/{startInteractiveUI-SFRVB3CE.js → startInteractiveUI-P6GZBFQW.js} +2817 -2500
- package/chunks/{syntheticOutput-PPS3HDVA.js → syntheticOutput-X7L5HWLN.js} +3 -3
- package/chunks/{task-create-OUYCA553.js → task-create-AWEUI4GI.js} +6 -6
- package/chunks/{task-list-WAX7I2IA.js → task-list-KZ3VJLDU.js} +5 -5
- package/chunks/{task-stop-CAIL6FNH.js → task-stop-GUNOZKJ5.js} +2 -2
- package/chunks/{task-update-AHEO5OUT.js → task-update-Y56GP6DU.js} +6 -6
- package/chunks/{team-create-3WC7CIIW.js → team-create-6JMW3KQK.js} +24 -23
- package/chunks/{team-delete-HGHFG23B.js → team-delete-6AFRGDJY.js} +5 -5
- package/chunks/{theme-manager-DICFCT3P.js → theme-manager-FEHQO22G.js} +25 -24
- package/chunks/{todoWrite-IFBMN3FH.js → todoWrite-JRS6NOEU.js} +4 -4
- package/chunks/{tool-search-L5K7HLER.js → tool-search-IXAEKS7J.js} +101 -16
- package/chunks/trustedFolders-SJRXNHZE.js +76 -0
- package/chunks/types-QX5C3CHJ.js +12 -0
- package/chunks/{validateNonInterActiveAuth-GCH4Z6KI.js → validateNonInterActiveAuth-HCH7OBDH.js} +56 -51
- package/chunks/{web-fetch-B5IIQ5TT.js → web-fetch-RELNL37A.js} +29 -15
- package/chunks/{workflow-OB3AND7I.js → workflow-M2COBI7R.js} +38 -32
- package/chunks/{workspace-providers-status-ZIR5EPOO.js → workspace-providers-status-GOCWYDMK.js} +32 -29
- package/chunks/workspace-service-34C7SUBU.js +75 -0
- package/chunks/{write-file-SEXBNDZM.js → write-file-E52WRXZL.js} +67 -31
- package/chunks/{zh-RBEGQVQT.js → zh-F5T4WWZO.js} +19 -9
- package/chunks/{zh-TW-QGAVRXT3.js → zh-TW-LKLBTZHE.js} +19 -9
- package/cli-entry.js +20 -9
- package/cli.js +6 -6
- package/locales/ca.js +15 -13
- package/locales/de.js +15 -13
- package/locales/en.js +31 -13
- package/locales/fr.js +16 -14
- package/locales/ja.js +15 -14
- package/locales/pt.js +15 -13
- package/locales/ru.js +15 -13
- package/locales/zh-TW.js +28 -12
- package/locales/zh.js +28 -12
- package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +35 -0
- package/node_modules/@qwen-code/audio-capture/dist/index.js +48 -0
- package/node_modules/@qwen-code/audio-capture/dist/index.js.map +1 -0
- package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +7 -0
- package/node_modules/@qwen-code/audio-capture/dist/platform.js +18 -0
- package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +1 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +21 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +58 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +5 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +84 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +19 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +6 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +207 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +7 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +43 -0
- package/node_modules/@qwen-code/audio-capture/package.json +30 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/linux-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/linux-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
- package/package.json +18 -6
- package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
- package/postinstall.js +50 -0
- package/web-shell/assets/{arc-D_ae_Y9k.js → arc-C2DILvUl.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-BMLRjppa.js → architectureDiagram-3BPJPVTR-b8gZ2cNw.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-qVDQC8KL.js → blockDiagram-GPEHLZMM-BuRpghMj.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CxWS6MBd.js → c4Diagram-AAUBKEIU-2ItdhFmE.js} +1 -1
- package/web-shell/assets/channel-eRvn2UA3.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-BtNuY5Yp.js → chunk-2J33WTMH-B1QXa0q3.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BU-x368d.js → chunk-4BX2VUAB-DXfhKlNq.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DRgTLvBu.js → chunk-55IACEB6-ClSNjxLo.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-D2aElv7q.js → chunk-727SXJPM-Dsh2wisB.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BwHCMRQ0.js → chunk-AQP2D5EJ-C1TkY5AR.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-BMyPH-ku.js → chunk-FMBD7UC4-CGtN9XR6.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BNKTstUf.js → chunk-ND2GUHAM-BHiPi1SS.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-gD3vsFId.js → chunk-QZHKN3VN-CzG3I5o1.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-YZNwy1rx.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-YZNwy1rx.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BG9FAsXE.js → cose-bilkent-S5V4N54A-EgrIoH_K.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-Cy1sR7om.js → dagre-BM42HDAG-BUnpdX8S.js} +1 -1
- package/web-shell/assets/default-aEtf0G7-.svg +1 -0
- package/web-shell/assets/{diagram-2AECGRRQ-Bxi1I_Vu.js → diagram-2AECGRRQ-BlLUCVYu.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BGCJjO6y.js → diagram-5GNKFQAL-FG-enmjQ.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CMTeLXp7.js → diagram-KO2AKTUF-BlzmTONk.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BN1wyAGh.js → diagram-LMA3HP47-CoBQ8mIx.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-UYSG_zcp.js → diagram-OG6HWLK6-DvxV6sX8.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DqXL08lw.js → erDiagram-TEJ5UH35-Jq1tpAoj.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BPJ9SFji.js → flowDiagram-I6XJVG4X-CbtYOry5.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-BEd9Pnms.js → ganttDiagram-6RSMTGT7-ZEn2VEKR.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DrNRH3oi.js → gitGraphDiagram-PVQCEYII-BZh-LkhJ.js} +1 -1
- package/web-shell/assets/index-5FhE0ORO.css +5 -0
- package/web-shell/assets/index-CDTGmqVm.js +720 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CFYBrkVI.js → infoDiagram-5YYISTIA-B9HuZygK.js} +1 -1
- package/web-shell/assets/insert-DmRbh9Rv.svg +1 -0
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Dxsddth7.js → ishikawaDiagram-YF4QCWOH-D76cNpYG.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-DxaDK80t.js → journeyDiagram-JHISSGLW-6bGo7P1t.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-Q0jQCOct.js → kanban-definition-UN3LZRKU-DuYyRBvB.js} +1 -1
- package/web-shell/assets/{linear-DGGM2kcP.js → linear-CpdSW1BC.js} +1 -1
- package/web-shell/assets/{mermaid.core-ByoxnWut.js → mermaid.core-s5xbZMMj.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-C0ZseHsi.js → mindmap-definition-RKZ34NQL-go01fZ2y.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-MQXNhl5A.js → pieDiagram-4H26LBE5-BfuZiEHO.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIR4ee2A.js → quadrantDiagram-W4KKPZXB-DsoINqV6.js} +1 -1
- package/web-shell/assets/queue-DWpnpFgW.svg +1 -0
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BTR0UdYQ.js → requirementDiagram-4Y6WPE33-B7FU4LiU.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-sfnhMELN.js → sankeyDiagram-5OEKKPKP-BEDjFnGB.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DXczHOHH.js → sequenceDiagram-3UESZ5HK-gzmmL5tK.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-DdE_KQFH.js → stateDiagram-AJRCARHV-BtHD4IN_.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DFy6gLDd.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-DIc61uE8.js → timeline-definition-PNZ67QCA-T_8gmMCf.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BF7ODmxB.js → vennDiagram-CIIHVFJN-DdjuqnjO.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-3pc1MEaw.js → wardley-L42UT6IY-Cgtrvb37.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-9jnPcZuP.js → wardleyDiagram-YWT4CUSO-BW3f3-yW.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-DcthaZK6.js → xychartDiagram-2RQKCTM6-BUS9IKkc.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-B6HQGTYR.js +0 -410
- package/chunks/chunk-RKIZXJMB.js +0 -13
- package/chunks/headlessSafetyWarnings-LJ6FJX77.js +0 -57
- package/chunks/nonInteractiveCli-7575LBXP.js +0 -91
- package/chunks/workspace-service-OM5D4OI2.js +0 -60
- package/web-shell/assets/channel-DYPNiTww.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-p_g25Tni.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-p_g25Tni.js +0 -1
- package/web-shell/assets/index-CpOXWDPh.js +0 -714
- package/web-shell/assets/index-oVK7qhre.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BHUSEndU.js +0 -1
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
RUNTIME_STARTUP_CANCELLED_MESSAGE
|
|
5
|
+
} from "./chunk-GHOTR7HL.js";
|
|
3
6
|
import {
|
|
4
7
|
CAPABILITIES_SCHEMA_VERSION,
|
|
8
|
+
ClientMcpSenderRegistry,
|
|
5
9
|
SERVE_CAPABILITY_REGISTRY,
|
|
6
10
|
allowOriginCors,
|
|
7
11
|
allowOriginMode,
|
|
@@ -20,27 +24,29 @@ import {
|
|
|
20
24
|
positiveFiniteOrNull,
|
|
21
25
|
require_express,
|
|
22
26
|
resolveWebShellDir
|
|
23
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-MTJVHQDP.js";
|
|
24
28
|
import "./chunk-3HX5LZ6R.js";
|
|
25
29
|
import "./chunk-7RYW5LQV.js";
|
|
26
30
|
import {
|
|
27
31
|
getCliVersion
|
|
28
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-HIYUAXBG.js";
|
|
33
|
+
import "./chunk-EWALXUAD.js";
|
|
29
34
|
import {
|
|
30
35
|
canonicalizeWorkspace
|
|
31
36
|
} from "./chunk-SEZC2725.js";
|
|
32
|
-
import {
|
|
33
|
-
writeStderrLine,
|
|
34
|
-
writeStdoutLine
|
|
35
|
-
} from "./chunk-Y6Z2O3WR.js";
|
|
36
37
|
import {
|
|
37
38
|
loadServeFastPathSettings,
|
|
38
39
|
preResolveServeFastPathHomeEnvOverrides
|
|
39
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-KKQWC6WS.js";
|
|
40
41
|
import {
|
|
41
42
|
getGlobalQwenDirLite,
|
|
42
43
|
resolveConfigPathLite
|
|
43
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-PPFWEV7G.js";
|
|
45
|
+
import {
|
|
46
|
+
writeStderrLine,
|
|
47
|
+
writeStdoutLine
|
|
48
|
+
} from "./chunk-Y6Z2O3WR.js";
|
|
49
|
+
import "./chunk-QYUE6W3T.js";
|
|
44
50
|
import "./chunk-5P5XGNYH.js";
|
|
45
51
|
import "./chunk-SKAZWEV5.js";
|
|
46
52
|
import "./chunk-UWCTAVOD.js";
|
|
@@ -347,10 +353,14 @@ __name(initDaemonLogger, "initDaemonLogger");
|
|
|
347
353
|
|
|
348
354
|
// packages/cli/src/serve/run-qwen-serve.ts
|
|
349
355
|
var QWEN_SERVER_TOKEN_ENV = "QWEN_SERVER_TOKEN";
|
|
356
|
+
var QWEN_SERVE_CLIENT_MCP_OVER_WS_ENV = "QWEN_SERVE_CLIENT_MCP_OVER_WS";
|
|
357
|
+
var QWEN_SERVE_CDP_TUNNEL_OVER_WS_ENV = "QWEN_SERVE_CDP_TUNNEL_OVER_WS";
|
|
350
358
|
var QWEN_SERVE_PROMPT_DEADLINE_MS_ENV = "QWEN_SERVE_PROMPT_DEADLINE_MS";
|
|
351
359
|
var QWEN_SERVE_WRITER_IDLE_TIMEOUT_MS_ENV = "QWEN_SERVE_WRITER_IDLE_TIMEOUT_MS";
|
|
352
360
|
var SHUTDOWN_FORCE_CLOSE_MS = 5e3;
|
|
353
361
|
var DEFAULT_RUNTIME_STARTUP_TIMEOUT_MS = 12e4;
|
|
362
|
+
var FAST_PATH_RUNTIME_START_AFTER_HEALTH_MS = 50;
|
|
363
|
+
var FAST_PATH_RUNTIME_START_FALLBACK_MS = 1e3;
|
|
354
364
|
var RUNTIME_STARTUP_TIMEOUT_ENV = "QWEN_SERVE_RUNTIME_STARTUP_TIMEOUT_MS";
|
|
355
365
|
var MAX_EVENT_RING_SIZE = 1e6;
|
|
356
366
|
var DEFAULT_MAX_SESSIONS = 20;
|
|
@@ -515,7 +525,7 @@ function shouldPreheatBridge(deps) {
|
|
|
515
525
|
__name(shouldPreheatBridge, "shouldPreheatBridge");
|
|
516
526
|
var coreRuntimePromise;
|
|
517
527
|
function loadCoreRuntime() {
|
|
518
|
-
coreRuntimePromise ??= import("./src-
|
|
528
|
+
coreRuntimePromise ??= import("./src-PNZYGM3R.js");
|
|
519
529
|
return coreRuntimePromise;
|
|
520
530
|
}
|
|
521
531
|
__name(loadCoreRuntime, "loadCoreRuntime");
|
|
@@ -545,11 +555,13 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
|
|
|
545
555
|
var settingsRuntimePromise;
|
|
546
556
|
function loadSettingsRuntimeModules() {
|
|
547
557
|
settingsRuntimePromise ??= Promise.all([
|
|
548
|
-
import("./settings-
|
|
549
|
-
import("./loadedSettingsAdapter-
|
|
550
|
-
|
|
558
|
+
import("./settings-DFTYMJYF.js"),
|
|
559
|
+
import("./loadedSettingsAdapter-H27JMTLU.js"),
|
|
560
|
+
import("./trustedFolders-SJRXNHZE.js")
|
|
561
|
+
]).then(([settings, loadedSettingsAdapter, trustedFolders]) => ({
|
|
551
562
|
settings,
|
|
552
|
-
loadedSettingsAdapter
|
|
563
|
+
loadedSettingsAdapter,
|
|
564
|
+
trustedFolders
|
|
553
565
|
}));
|
|
554
566
|
return settingsRuntimePromise;
|
|
555
567
|
}
|
|
@@ -560,15 +572,17 @@ async function loadServeRuntimeModules() {
|
|
|
560
572
|
bridgeModule,
|
|
561
573
|
spawnChannelModule,
|
|
562
574
|
workspaceModule,
|
|
575
|
+
workspaceTypesModule,
|
|
563
576
|
daemonStatusProviderModule,
|
|
564
577
|
workspaceProvidersStatusModule
|
|
565
578
|
] = await Promise.all([
|
|
566
|
-
import("./server-
|
|
567
|
-
import("./bridge-
|
|
568
|
-
import("./spawnChannel-
|
|
569
|
-
import("./workspace-service-
|
|
570
|
-
import("./
|
|
571
|
-
import("./
|
|
579
|
+
import("./server-P4YIH35I.js"),
|
|
580
|
+
import("./bridge-HZVAUTMX.js"),
|
|
581
|
+
import("./spawnChannel-DHRIMDVL.js"),
|
|
582
|
+
import("./workspace-service-34C7SUBU.js"),
|
|
583
|
+
import("./types-QX5C3CHJ.js"),
|
|
584
|
+
import("./daemon-status-provider-42JEXENZ.js"),
|
|
585
|
+
import("./workspace-providers-status-GOCWYDMK.js")
|
|
572
586
|
]);
|
|
573
587
|
return {
|
|
574
588
|
createServeApp: serverModule.createServeApp,
|
|
@@ -577,6 +591,7 @@ async function loadServeRuntimeModules() {
|
|
|
577
591
|
createAcpSessionBridge: bridgeModule.createAcpSessionBridge,
|
|
578
592
|
createSpawnChannelFactory: spawnChannelModule.createSpawnChannelFactory,
|
|
579
593
|
createDaemonWorkspaceService: workspaceModule.createDaemonWorkspaceService,
|
|
594
|
+
WorkspaceSettingsPartialPersistError: workspaceTypesModule.WorkspaceSettingsPartialPersistError,
|
|
580
595
|
createDaemonStatusProvider: daemonStatusProviderModule.createDaemonStatusProvider,
|
|
581
596
|
createWorkspaceProvidersStatusProvider: workspaceProvidersStatusModule.createWorkspaceProvidersStatusProvider
|
|
582
597
|
};
|
|
@@ -612,7 +627,11 @@ function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled) {
|
|
|
612
627
|
persistSettingAvailable: true,
|
|
613
628
|
sessionShellCommandEnabled,
|
|
614
629
|
rateLimit: opts.rateLimit === true,
|
|
615
|
-
reloadAvailable: true
|
|
630
|
+
reloadAvailable: true,
|
|
631
|
+
// Advertise the same WS feature flags as the runtime path (serve-features.ts)
|
|
632
|
+
// so the bootstrap `/capabilities` window doesn't briefly under-report them.
|
|
633
|
+
clientMcpOverWsEnabled: opts.clientMcpOverWs === true,
|
|
634
|
+
cdpTunnelOverWsEnabled: opts.cdpTunnelOverWs === true
|
|
616
635
|
});
|
|
617
636
|
}
|
|
618
637
|
__name(currentServeFeaturesForRunQwenServe, "currentServeFeaturesForRunQwenServe");
|
|
@@ -737,6 +756,14 @@ async function waitForRuntimeStartingForShutdown(runtimeStarting, daemonLog, tim
|
|
|
737
756
|
});
|
|
738
757
|
}
|
|
739
758
|
__name(waitForRuntimeStartingForShutdown, "waitForRuntimeStartingForShutdown");
|
|
759
|
+
var BOOTSTRAP_HEALTH_PATH = "/health";
|
|
760
|
+
var BOOTSTRAP_CAPABILITIES_PATH = "/capabilities";
|
|
761
|
+
var BOOTSTRAP_DAEMON_STATUS_PATH = "/daemon/status";
|
|
762
|
+
var BOOTSTRAP_SERVE_PATHS = /* @__PURE__ */ new Set([
|
|
763
|
+
BOOTSTRAP_HEALTH_PATH,
|
|
764
|
+
BOOTSTRAP_CAPABILITIES_PATH,
|
|
765
|
+
BOOTSTRAP_DAEMON_STATUS_PATH
|
|
766
|
+
]);
|
|
740
767
|
function createBootstrapServeApp(input) {
|
|
741
768
|
const {
|
|
742
769
|
opts,
|
|
@@ -747,7 +774,8 @@ function createBootstrapServeApp(input) {
|
|
|
747
774
|
qwenCodeVersion,
|
|
748
775
|
sessionShellCommandEnabled,
|
|
749
776
|
permissionPolicy,
|
|
750
|
-
getRuntimeError
|
|
777
|
+
getRuntimeError,
|
|
778
|
+
onHealthServed
|
|
751
779
|
} = input;
|
|
752
780
|
const app = (0, import_express.default)();
|
|
753
781
|
installSameOriginOriginStrip(app, getPort);
|
|
@@ -766,18 +794,21 @@ function createBootstrapServeApp(input) {
|
|
|
766
794
|
});
|
|
767
795
|
return;
|
|
768
796
|
}
|
|
797
|
+
if (onHealthServed) {
|
|
798
|
+
res.once("finish", onHealthServed);
|
|
799
|
+
}
|
|
769
800
|
res.status(200).json({ status: "ok" });
|
|
770
801
|
}, "healthHandler");
|
|
771
802
|
const loopback = isLoopbackBind(opts.hostname);
|
|
772
803
|
const exposeHealthPreAuth = loopback && !opts.requireAuth;
|
|
773
804
|
if (exposeHealthPreAuth) {
|
|
774
|
-
app.get(
|
|
805
|
+
app.get(BOOTSTRAP_HEALTH_PATH, healthHandler);
|
|
775
806
|
}
|
|
776
807
|
app.use(bearerAuth(opts.token));
|
|
777
808
|
if (!exposeHealthPreAuth) {
|
|
778
|
-
app.get(
|
|
809
|
+
app.get(BOOTSTRAP_HEALTH_PATH, healthHandler);
|
|
779
810
|
}
|
|
780
|
-
app.get(
|
|
811
|
+
app.get(BOOTSTRAP_CAPABILITIES_PATH, (_req, res) => {
|
|
781
812
|
res.status(200).json(
|
|
782
813
|
createBootstrapCapabilities({
|
|
783
814
|
opts,
|
|
@@ -788,7 +819,7 @@ function createBootstrapServeApp(input) {
|
|
|
788
819
|
})
|
|
789
820
|
);
|
|
790
821
|
});
|
|
791
|
-
app.get(
|
|
822
|
+
app.get(BOOTSTRAP_DAEMON_STATUS_PATH, (req, res) => {
|
|
792
823
|
const detail = parseDaemonStatusDetail(req.query["detail"]);
|
|
793
824
|
if (!detail.ok || !detail.detail) {
|
|
794
825
|
res.status(400).json({
|
|
@@ -910,16 +941,58 @@ function createBootstrapServeApp(input) {
|
|
|
910
941
|
return app;
|
|
911
942
|
}
|
|
912
943
|
__name(createBootstrapServeApp, "createBootstrapServeApp");
|
|
913
|
-
function createDelegatingServeApp(bootstrapApp, getRuntimeApp) {
|
|
944
|
+
function createDelegatingServeApp(bootstrapApp, getRuntimeApp, options = {}) {
|
|
914
945
|
const app = (0, import_express.default)();
|
|
915
946
|
app.use((req, res, next) => {
|
|
916
|
-
const
|
|
917
|
-
|
|
918
|
-
|
|
947
|
+
const dispatch = /* @__PURE__ */ __name(async () => {
|
|
948
|
+
let target = getRuntimeApp();
|
|
949
|
+
if (!target && options.waitForDeferredRuntimeRoutes === true && !isBootstrapServeRoute(req) && !isCorsPreflightRequest(req) && options.startRuntime && options.runtimeReady) {
|
|
950
|
+
if (options.authenticateDeferredRuntimeRequest && !runSynchronousRequestGate(
|
|
951
|
+
options.authenticateDeferredRuntimeRequest,
|
|
952
|
+
req,
|
|
953
|
+
res,
|
|
954
|
+
next
|
|
955
|
+
)) {
|
|
956
|
+
return;
|
|
957
|
+
}
|
|
958
|
+
options.startRuntime();
|
|
959
|
+
try {
|
|
960
|
+
await options.runtimeReady;
|
|
961
|
+
} catch {
|
|
962
|
+
}
|
|
963
|
+
target = getRuntimeApp();
|
|
964
|
+
}
|
|
965
|
+
const handler = target ?? bootstrapApp;
|
|
966
|
+
handler(req, res, next);
|
|
967
|
+
}, "dispatch");
|
|
968
|
+
void dispatch().catch(next);
|
|
919
969
|
});
|
|
920
970
|
return app;
|
|
921
971
|
}
|
|
922
972
|
__name(createDelegatingServeApp, "createDelegatingServeApp");
|
|
973
|
+
function isBootstrapServeRoute(req) {
|
|
974
|
+
const path2 = req.path.length > 1 && req.path.endsWith("/") ? req.path.slice(0, -1) : req.path;
|
|
975
|
+
return BOOTSTRAP_SERVE_PATHS.has(path2);
|
|
976
|
+
}
|
|
977
|
+
__name(isBootstrapServeRoute, "isBootstrapServeRoute");
|
|
978
|
+
function isCorsPreflightRequest(req) {
|
|
979
|
+
return req.method === "OPTIONS" && Boolean(req.headers.origin) && Boolean(
|
|
980
|
+
req.headers["access-control-request-method"] || req.headers["access-control-request-headers"]
|
|
981
|
+
);
|
|
982
|
+
}
|
|
983
|
+
__name(isCorsPreflightRequest, "isCorsPreflightRequest");
|
|
984
|
+
function runSynchronousRequestGate(handler, req, res, next) {
|
|
985
|
+
let passed = false;
|
|
986
|
+
handler(req, res, (err) => {
|
|
987
|
+
if (err) {
|
|
988
|
+
next(err);
|
|
989
|
+
return;
|
|
990
|
+
}
|
|
991
|
+
passed = true;
|
|
992
|
+
});
|
|
993
|
+
return passed;
|
|
994
|
+
}
|
|
995
|
+
__name(runSynchronousRequestGate, "runSynchronousRequestGate");
|
|
923
996
|
async function runQwenServe(optsIn, deps = {}) {
|
|
924
997
|
const runStartedAt = performance.now();
|
|
925
998
|
const shouldPreheat = !deps.bridge && shouldPreheatBridge(deps);
|
|
@@ -952,7 +1025,16 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
952
1025
|
...optsIn,
|
|
953
1026
|
token,
|
|
954
1027
|
promptDeadlineMs,
|
|
955
|
-
writerIdleTimeoutMs
|
|
1028
|
+
writerIdleTimeoutMs,
|
|
1029
|
+
// Reverse tool channel (issue #5626, Phase 2). Opt-in via env until the
|
|
1030
|
+
// public contract settles — the WS `mcp_register` / `mcp_message` frames
|
|
1031
|
+
// and the child↔parent `client_mcp/message` round-trip stay dormant
|
|
1032
|
+
// otherwise. An explicit `clientMcpOverWs` in `optsIn` (embedded callers)
|
|
1033
|
+
// still wins.
|
|
1034
|
+
clientMcpOverWs: optsIn.clientMcpOverWs ?? process.env[QWEN_SERVE_CLIENT_MCP_OVER_WS_ENV] === "1",
|
|
1035
|
+
// CDP tunnel (Plan C, issue #5626). Opt-in via env until the contract
|
|
1036
|
+
// settles; an explicit `cdpTunnelOverWs` in `optsIn` still wins.
|
|
1037
|
+
cdpTunnelOverWs: optsIn.cdpTunnelOverWs ?? process.env[QWEN_SERVE_CDP_TUNNEL_OVER_WS_ENV] === "1"
|
|
956
1038
|
};
|
|
957
1039
|
validateRateLimitOptions(opts);
|
|
958
1040
|
if (!opts.hostname.startsWith("[") && opts.hostname.split(":").length === 2) {
|
|
@@ -1132,10 +1214,25 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1132
1214
|
}
|
|
1133
1215
|
const childEnvOverrides = {
|
|
1134
1216
|
QWEN_SERVE_MCP_CLIENT_BUDGET: opts.mcpClientBudget !== void 0 ? String(opts.mcpClientBudget) : void 0,
|
|
1135
|
-
QWEN_SERVE_MCP_BUDGET_MODE: opts.mcpBudgetMode
|
|
1217
|
+
QWEN_SERVE_MCP_BUDGET_MODE: opts.mcpBudgetMode,
|
|
1218
|
+
// CDP tunnel (Plan C, #5626): forward the flag + bound port so the spawned
|
|
1219
|
+
// ACP child can auto-register chrome-devtools-mcp against this `/cdp`
|
|
1220
|
+
// endpoint. Only meaningful with a fixed `--port`: the override map is frozen
|
|
1221
|
+
// at bridge construction, so an ephemeral `--port 0` (resolved only after
|
|
1222
|
+
// `listen`) can't be threaded here. Leave the port unset in that case so the
|
|
1223
|
+
// child surfaces a clear diagnostic instead of a bogus port "0".
|
|
1224
|
+
QWEN_SERVE_CDP_TUNNEL_OVER_WS: opts.cdpTunnelOverWs ? "1" : void 0,
|
|
1225
|
+
QWEN_SERVE_CDP_TUNNEL_PORT: opts.cdpTunnelOverWs && opts.port > 0 ? String(opts.port) : void 0,
|
|
1226
|
+
// Tell the child whether `/cdp` requires bearer auth. The ACP child can't
|
|
1227
|
+
// inherit QWEN_SERVER_TOKEN (the spawn path scrubs it) and chrome-devtools-
|
|
1228
|
+
// mcp is launched with `--wsEndpoint` only, so it can't authenticate against
|
|
1229
|
+
// an auth-gated `/cdp`. The child uses this flag to skip auto-registering the
|
|
1230
|
+
// browser tools (with a diagnostic) instead of registering tools that can't
|
|
1231
|
+
// connect. See buildCdpTunnelMcpServer in acpAgent.ts.
|
|
1232
|
+
QWEN_SERVE_CDP_TUNNEL_AUTH_REQUIRED: opts.cdpTunnelOverWs && (token || opts.requireAuth) ? "1" : void 0
|
|
1136
1233
|
};
|
|
1137
|
-
const
|
|
1138
|
-
|
|
1234
|
+
const cliVersionPromise = getCliVersion();
|
|
1235
|
+
let cliVersion;
|
|
1139
1236
|
const diagnosticSink = /* @__PURE__ */ __name((line, level) => daemonLog.raw(line, level), "diagnosticSink");
|
|
1140
1237
|
let actualPort = opts.port;
|
|
1141
1238
|
const webShellDir = opts.serveWebShell === false ? void 0 : resolveWebShellDir();
|
|
@@ -1167,6 +1264,9 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1167
1264
|
let markRuntimeReady;
|
|
1168
1265
|
let markRuntimeFailed;
|
|
1169
1266
|
let runtimeStartupSettled = false;
|
|
1267
|
+
let startRuntimeAfterHealth;
|
|
1268
|
+
let startRuntimeForRequest;
|
|
1269
|
+
const deferRuntimeUntilFirstHealth = deps.resolveOnListen === true && deps.deferRuntimeUntilFirstHealth === true;
|
|
1170
1270
|
const runtimeReady = new Promise((resolve, reject) => {
|
|
1171
1271
|
markRuntimeReady = resolve;
|
|
1172
1272
|
markRuntimeFailed = reject;
|
|
@@ -1178,11 +1278,13 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1178
1278
|
() => runtimeStartupError
|
|
1179
1279
|
);
|
|
1180
1280
|
const buildRuntime = /* @__PURE__ */ __name(async () => {
|
|
1181
|
-
const [runtime, core, settingsRuntime] = await Promise.all([
|
|
1281
|
+
const [runtime, core, settingsRuntime, resolvedCliVersion] = await Promise.all([
|
|
1182
1282
|
loadServeRuntimeModules(),
|
|
1183
1283
|
loadCoreRuntime(),
|
|
1184
|
-
loadSettingsRuntimeModules()
|
|
1284
|
+
loadSettingsRuntimeModules(),
|
|
1285
|
+
cliVersionPromise
|
|
1185
1286
|
]);
|
|
1287
|
+
cliVersion = resolvedCliVersion;
|
|
1186
1288
|
let runtimeBootSettings;
|
|
1187
1289
|
try {
|
|
1188
1290
|
runtimeBootSettings = settingsRuntime.settings.loadSettings(boundWorkspace);
|
|
@@ -1191,15 +1293,35 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1191
1293
|
`qwen serve: could not read full settings for runtime startup (${err instanceof Error ? err.message : String(err)}); falling back to defaults.`
|
|
1192
1294
|
);
|
|
1193
1295
|
}
|
|
1296
|
+
const trustedWorkspace = deps.trustedWorkspace ?? (runtimeBootSettings ? settingsRuntime.trustedFolders.getWorkspaceTrustStatus(
|
|
1297
|
+
runtimeBootSettings.merged,
|
|
1298
|
+
boundWorkspace
|
|
1299
|
+
).effective.state === "trusted" : true);
|
|
1300
|
+
if (deps.trustedWorkspace === void 0 && runtimeBootSettings && !trustedWorkspace) {
|
|
1301
|
+
daemonLog.warn(
|
|
1302
|
+
"workspace file writes are disabled because the bound workspace is not trusted",
|
|
1303
|
+
{ workspace: boundWorkspace }
|
|
1304
|
+
);
|
|
1305
|
+
}
|
|
1194
1306
|
const daemonWorkspaceHash = core.hashDaemonWorkspace(boundWorkspace);
|
|
1195
|
-
|
|
1196
|
-
|
|
1197
|
-
|
|
1198
|
-
|
|
1307
|
+
let daemonTelemetrySettings;
|
|
1308
|
+
try {
|
|
1309
|
+
daemonTelemetrySettings = await core.resolveTelemetrySettings({
|
|
1310
|
+
env: process.env,
|
|
1311
|
+
settings: runtimeBootSettings?.merged.telemetry
|
|
1312
|
+
});
|
|
1313
|
+
} catch (err) {
|
|
1314
|
+
if (err instanceof core.FatalConfigError) {
|
|
1315
|
+
throw new core.FatalConfigError(
|
|
1316
|
+
`Invalid telemetry configuration: ${err.message}.`
|
|
1317
|
+
);
|
|
1318
|
+
}
|
|
1319
|
+
throw err;
|
|
1320
|
+
}
|
|
1199
1321
|
core.initializeTelemetry(
|
|
1200
1322
|
createDaemonTelemetryRuntimeConfig(
|
|
1201
1323
|
daemonTelemetrySettings,
|
|
1202
|
-
|
|
1324
|
+
resolvedCliVersion,
|
|
1203
1325
|
`daemon:${daemonWorkspaceHash}:${process.pid}`,
|
|
1204
1326
|
{
|
|
1205
1327
|
otlpEndpoint: core.DEFAULT_OTLP_ENDPOINT,
|
|
@@ -1257,6 +1379,7 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1257
1379
|
});
|
|
1258
1380
|
const statusProvider = runtime.createDaemonStatusProvider();
|
|
1259
1381
|
const workspaceProvidersStatusProvider = runtime.createWorkspaceProvidersStatusProvider();
|
|
1382
|
+
const clientMcpSenderRegistry = new ClientMcpSenderRegistry();
|
|
1260
1383
|
const persistDisabledToolsFn = /* @__PURE__ */ __name((workspace, toolName, enabled) => withSettingsLock(workspace, async () => {
|
|
1261
1384
|
const fresh = settingsRuntime.settings.loadSettings(workspace);
|
|
1262
1385
|
const wsScope = fresh.forScope(WORKSPACE_SETTING_SCOPE).settings;
|
|
@@ -1271,7 +1394,42 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1271
1394
|
[...next].sort()
|
|
1272
1395
|
);
|
|
1273
1396
|
}), "persistDisabledToolsFn");
|
|
1397
|
+
const persistSettingFn = /* @__PURE__ */ __name((workspace, scope, key, value) => withSettingsLock(workspace, async () => {
|
|
1398
|
+
const fresh = settingsRuntime.settings.loadSettings(workspace);
|
|
1399
|
+
fresh.setValue(scope, key, value);
|
|
1400
|
+
return fresh;
|
|
1401
|
+
}), "persistSettingFn");
|
|
1402
|
+
const persistSettingsFn = /* @__PURE__ */ __name((workspace, writes) => withSettingsLock(workspace, async () => {
|
|
1403
|
+
const fresh = settingsRuntime.settings.loadSettings(workspace);
|
|
1404
|
+
const writesByScope = /* @__PURE__ */ new Map();
|
|
1405
|
+
for (const write of writes) {
|
|
1406
|
+
writesByScope.set(
|
|
1407
|
+
write.scope,
|
|
1408
|
+
(writesByScope.get(write.scope) ?? 0) + 1
|
|
1409
|
+
);
|
|
1410
|
+
}
|
|
1411
|
+
const committedScopes = /* @__PURE__ */ new Set();
|
|
1412
|
+
let committed = 0;
|
|
1413
|
+
try {
|
|
1414
|
+
fresh.setValues(writes, (scope) => {
|
|
1415
|
+
committedScopes.add(scope);
|
|
1416
|
+
committed += writesByScope.get(scope) ?? 0;
|
|
1417
|
+
});
|
|
1418
|
+
} catch (err) {
|
|
1419
|
+
const failedWrite = writes.find((write) => !committedScopes.has(write.scope)) ?? writes[committed];
|
|
1420
|
+
const message = `persistSettings partial failure (workspace=${workspace}, committed=${committed}/${writes.length}, failedKey=${failedWrite?.key ?? "<unknown>"}, failedScope=${failedWrite?.scope ?? "<unknown>"}): ${err instanceof Error ? err.message : String(err)}`;
|
|
1421
|
+
writeStderrLine(`qwen serve: ${message}`);
|
|
1422
|
+
throw new runtime.WorkspaceSettingsPartialPersistError(
|
|
1423
|
+
message,
|
|
1424
|
+
writes.filter((write) => committedScopes.has(write.scope)),
|
|
1425
|
+
err
|
|
1426
|
+
);
|
|
1427
|
+
}
|
|
1428
|
+
}), "persistSettingsFn");
|
|
1274
1429
|
const bridge = deps.bridge ?? runtime.createAcpSessionBridge({
|
|
1430
|
+
// Reverse tool channel: let `BridgeClient.extMethod` reach the WS
|
|
1431
|
+
// connection that hosts a named client MCP server (#5626).
|
|
1432
|
+
clientMcpSender: clientMcpSenderRegistry.lookup,
|
|
1275
1433
|
maxSessions: opts.maxSessions,
|
|
1276
1434
|
...opts.maxPendingPromptsPerSession !== void 0 ? { maxPendingPromptsPerSession: opts.maxPendingPromptsPerSession } : {},
|
|
1277
1435
|
...opts.eventRingSize !== void 0 ? { eventRingSize: opts.eventRingSize } : {},
|
|
@@ -1305,6 +1463,8 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1305
1463
|
workspaceProvidersStatusProvider,
|
|
1306
1464
|
isChannelLive: /* @__PURE__ */ __name(() => bridge.isChannelLive(), "isChannelLive"),
|
|
1307
1465
|
persistDisabledTools: persistDisabledToolsFn,
|
|
1466
|
+
persistSetting: persistSettingFn,
|
|
1467
|
+
persistSettings: persistSettingsFn,
|
|
1308
1468
|
reloadDaemonEnv: /* @__PURE__ */ __name((workspace) => withSettingsLock(workspace, async () => {
|
|
1309
1469
|
const fresh = settingsRuntime.settings.loadSettings(workspace, {
|
|
1310
1470
|
skipLoadEnvironment: true
|
|
@@ -1328,16 +1488,17 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1328
1488
|
bridge,
|
|
1329
1489
|
webShellDir,
|
|
1330
1490
|
boundWorkspace,
|
|
1331
|
-
qwenCodeVersion:
|
|
1491
|
+
qwenCodeVersion: resolvedCliVersion,
|
|
1332
1492
|
startup,
|
|
1333
1493
|
fsFactory,
|
|
1334
1494
|
daemonLog,
|
|
1335
1495
|
workspace: workspaceService,
|
|
1496
|
+
// Reverse tool channel (#5626): the SAME registry wired into `bridge` above,
|
|
1497
|
+
// so the WS provider and the child-answering bridge share one sender map.
|
|
1498
|
+
clientMcpSenderRegistry,
|
|
1336
1499
|
persistDisabledTools: persistDisabledToolsFn,
|
|
1337
|
-
persistSetting:
|
|
1338
|
-
|
|
1339
|
-
fresh.setValue(scope, key, value);
|
|
1340
|
-
}), "persistSetting"),
|
|
1500
|
+
persistSetting: persistSettingFn,
|
|
1501
|
+
persistSettings: persistSettingsFn,
|
|
1341
1502
|
installAuthProvider: /* @__PURE__ */ __name((req) => withSettingsLock(
|
|
1342
1503
|
boundWorkspace,
|
|
1343
1504
|
async () => {
|
|
@@ -1351,23 +1512,26 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1351
1512
|
});
|
|
1352
1513
|
const plan = core.buildInstallPlan(provider, inputs);
|
|
1353
1514
|
const fresh = settingsRuntime.settings.loadSettings(boundWorkspace);
|
|
1515
|
+
const adapter = settingsRuntime.loadedSettingsAdapter.createLoadedSettingsAdapter(
|
|
1516
|
+
fresh
|
|
1517
|
+
);
|
|
1354
1518
|
await core.applyProviderInstallPlan(plan, {
|
|
1355
|
-
settings:
|
|
1356
|
-
fresh
|
|
1357
|
-
),
|
|
1519
|
+
settings: adapter,
|
|
1358
1520
|
doRefreshAuth: false
|
|
1359
1521
|
});
|
|
1360
1522
|
core.emitDaemonLog("Auth provider installed.", {
|
|
1361
1523
|
"qwen-code.daemon.auth.provider_id": provider.id,
|
|
1362
1524
|
"qwen-code.daemon.auth.auth_type": plan.authType
|
|
1363
1525
|
});
|
|
1526
|
+
const effectiveModelId = adapter.getValue("model.name") ?? plan.modelSelection?.modelId;
|
|
1527
|
+
const effectiveBaseUrl = adapter.getValue("model.baseUrl") ?? plan.modelSelection?.baseUrl ?? inputs.baseUrl;
|
|
1364
1528
|
return {
|
|
1365
1529
|
v: 1,
|
|
1366
1530
|
providerId: provider.id,
|
|
1367
1531
|
providerLabel: provider.label,
|
|
1368
1532
|
authType: plan.authType,
|
|
1369
|
-
...
|
|
1370
|
-
...
|
|
1533
|
+
...effectiveModelId ? { modelId: effectiveModelId } : {},
|
|
1534
|
+
...effectiveBaseUrl ? { baseUrl: effectiveBaseUrl } : {},
|
|
1371
1535
|
message: `Successfully configured ${provider.label}. Use /model to switch models.`
|
|
1372
1536
|
};
|
|
1373
1537
|
}
|
|
@@ -1383,6 +1547,7 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1383
1547
|
runtimeStartupSettled = true;
|
|
1384
1548
|
markRuntimeReady();
|
|
1385
1549
|
}
|
|
1550
|
+
cliVersion ??= await cliVersionPromise;
|
|
1386
1551
|
const bootstrapApp = createBootstrapServeApp({
|
|
1387
1552
|
opts,
|
|
1388
1553
|
getPort: /* @__PURE__ */ __name(() => actualPort, "getPort"),
|
|
@@ -1392,9 +1557,15 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1392
1557
|
qwenCodeVersion: cliVersion,
|
|
1393
1558
|
sessionShellCommandEnabled,
|
|
1394
1559
|
permissionPolicy,
|
|
1395
|
-
getRuntimeError: /* @__PURE__ */ __name(() => runtimeStartupError, "getRuntimeError")
|
|
1560
|
+
getRuntimeError: /* @__PURE__ */ __name(() => runtimeStartupError, "getRuntimeError"),
|
|
1561
|
+
onHealthServed: deferRuntimeUntilFirstHealth ? () => startRuntimeAfterHealth?.() : void 0
|
|
1562
|
+
});
|
|
1563
|
+
const app = runtimeApp ?? createDelegatingServeApp(bootstrapApp, () => runtimeApp, {
|
|
1564
|
+
waitForDeferredRuntimeRoutes: deferRuntimeUntilFirstHealth,
|
|
1565
|
+
startRuntime: /* @__PURE__ */ __name(() => startRuntimeForRequest?.(), "startRuntime"),
|
|
1566
|
+
runtimeReady,
|
|
1567
|
+
authenticateDeferredRuntimeRequest: bearerAuth(opts.token)
|
|
1396
1568
|
});
|
|
1397
|
-
const app = runtimeApp ?? createDelegatingServeApp(bootstrapApp, () => runtimeApp);
|
|
1398
1569
|
let listenHostname = opts.hostname;
|
|
1399
1570
|
if (opts.hostname.startsWith("[")) {
|
|
1400
1571
|
const inner = opts.hostname.slice(1, -1);
|
|
@@ -1447,6 +1618,8 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1447
1618
|
let shuttingDown = false;
|
|
1448
1619
|
let closePromise;
|
|
1449
1620
|
let runtimeStartupTimer;
|
|
1621
|
+
let runtimeStartAfterHealthTimer;
|
|
1622
|
+
let runtimeStartFallbackTimer;
|
|
1450
1623
|
const runtimeStartupTimeoutMs = resolveRuntimeStartupTimeoutMs(
|
|
1451
1624
|
deps.runtimeStartupTimeoutMs
|
|
1452
1625
|
);
|
|
@@ -1455,6 +1628,27 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1455
1628
|
clearTimeout(runtimeStartupTimer);
|
|
1456
1629
|
runtimeStartupTimer = void 0;
|
|
1457
1630
|
}, "clearRuntimeStartupTimer");
|
|
1631
|
+
const clearRuntimeStartFallbackTimer = /* @__PURE__ */ __name(() => {
|
|
1632
|
+
if (!runtimeStartFallbackTimer) return;
|
|
1633
|
+
clearTimeout(runtimeStartFallbackTimer);
|
|
1634
|
+
runtimeStartFallbackTimer = void 0;
|
|
1635
|
+
}, "clearRuntimeStartFallbackTimer");
|
|
1636
|
+
const clearRuntimeStartAfterHealthTimer = /* @__PURE__ */ __name(() => {
|
|
1637
|
+
if (!runtimeStartAfterHealthTimer) return;
|
|
1638
|
+
clearTimeout(runtimeStartAfterHealthTimer);
|
|
1639
|
+
runtimeStartAfterHealthTimer = void 0;
|
|
1640
|
+
}, "clearRuntimeStartAfterHealthTimer");
|
|
1641
|
+
const cancelDeferredRuntimeStartup = /* @__PURE__ */ __name(() => {
|
|
1642
|
+
if (!deferRuntimeUntilFirstHealth || runtimeStarting || runtimeStartupSettled)
|
|
1643
|
+
return;
|
|
1644
|
+
daemonLog.info(
|
|
1645
|
+
"deferred runtime: cancelled, server closed before startup"
|
|
1646
|
+
);
|
|
1647
|
+
runtimeStartupSettled = true;
|
|
1648
|
+
const error = new Error(RUNTIME_STARTUP_CANCELLED_MESSAGE);
|
|
1649
|
+
runtimeStartupError = error.message;
|
|
1650
|
+
markRuntimeFailed(error);
|
|
1651
|
+
}, "cancelDeferredRuntimeStartup");
|
|
1458
1652
|
const shutdownBridgeAfterFailedStartup = /* @__PURE__ */ __name(async (bridge) => {
|
|
1459
1653
|
if (!bridge || deps.bridge) return;
|
|
1460
1654
|
try {
|
|
@@ -1511,6 +1705,8 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1511
1705
|
}, "startBridgePreheat");
|
|
1512
1706
|
const startRuntime = /* @__PURE__ */ __name(() => {
|
|
1513
1707
|
if (runtimeStarting) return;
|
|
1708
|
+
clearRuntimeStartAfterHealthTimer();
|
|
1709
|
+
clearRuntimeStartFallbackTimer();
|
|
1514
1710
|
runtimeStarting = buildRuntime().then(async (runtime) => {
|
|
1515
1711
|
if (runtimeStartupSettled) {
|
|
1516
1712
|
await shutdownBridgeAfterFailedStartup(runtime.bridge);
|
|
@@ -1546,6 +1742,37 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1546
1742
|
runtimeStartupTimer.unref();
|
|
1547
1743
|
}
|
|
1548
1744
|
}, "startRuntime");
|
|
1745
|
+
startRuntimeForRequest = startRuntime;
|
|
1746
|
+
const scheduleRuntimeStartFallback = /* @__PURE__ */ __name(() => {
|
|
1747
|
+
if (shuttingDown || runtimeStarting || runtimeStartFallbackTimer)
|
|
1748
|
+
return;
|
|
1749
|
+
daemonLog.info(
|
|
1750
|
+
`deferred runtime: scheduling fallback start in ${FAST_PATH_RUNTIME_START_FALLBACK_MS}ms`
|
|
1751
|
+
);
|
|
1752
|
+
runtimeStartFallbackTimer = setTimeout(() => {
|
|
1753
|
+
runtimeStartFallbackTimer = void 0;
|
|
1754
|
+
if (shuttingDown) return;
|
|
1755
|
+
daemonLog.info("deferred runtime: fallback timer fired, starting");
|
|
1756
|
+
startRuntime();
|
|
1757
|
+
}, FAST_PATH_RUNTIME_START_FALLBACK_MS);
|
|
1758
|
+
runtimeStartFallbackTimer.unref();
|
|
1759
|
+
}, "scheduleRuntimeStartFallback");
|
|
1760
|
+
startRuntimeAfterHealth = /* @__PURE__ */ __name(() => {
|
|
1761
|
+
if (shuttingDown || runtimeStarting || runtimeStartAfterHealthTimer) {
|
|
1762
|
+
return;
|
|
1763
|
+
}
|
|
1764
|
+
clearRuntimeStartFallbackTimer();
|
|
1765
|
+
daemonLog.info(
|
|
1766
|
+
`deferred runtime: health served, scheduling start in ${FAST_PATH_RUNTIME_START_AFTER_HEALTH_MS}ms`
|
|
1767
|
+
);
|
|
1768
|
+
runtimeStartAfterHealthTimer = setTimeout(() => {
|
|
1769
|
+
runtimeStartAfterHealthTimer = void 0;
|
|
1770
|
+
if (shuttingDown) return;
|
|
1771
|
+
daemonLog.info("deferred runtime: health timer fired, starting");
|
|
1772
|
+
startRuntime();
|
|
1773
|
+
}, FAST_PATH_RUNTIME_START_AFTER_HEALTH_MS);
|
|
1774
|
+
runtimeStartAfterHealthTimer.unref();
|
|
1775
|
+
}, "startRuntimeAfterHealth");
|
|
1549
1776
|
const onSignal = /* @__PURE__ */ __name(async (signal) => {
|
|
1550
1777
|
if (shuttingDown) {
|
|
1551
1778
|
daemonLog.warn(`received ${signal} during drain \u2014 forcing exit`);
|
|
@@ -1585,6 +1812,9 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1585
1812
|
if (closePromise) return closePromise;
|
|
1586
1813
|
closePromise = new Promise((res, rej) => {
|
|
1587
1814
|
shuttingDown = true;
|
|
1815
|
+
clearRuntimeStartAfterHealthTimer();
|
|
1816
|
+
clearRuntimeStartFallbackTimer();
|
|
1817
|
+
cancelDeferredRuntimeStartup();
|
|
1588
1818
|
let settled = false;
|
|
1589
1819
|
let bridgeShutdownError;
|
|
1590
1820
|
const finish = /* @__PURE__ */ __name((err) => {
|
|
@@ -1688,6 +1918,8 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
1688
1918
|
if (shouldPreheat) {
|
|
1689
1919
|
startBridgePreheat(bridgeRef);
|
|
1690
1920
|
}
|
|
1921
|
+
} else if (deferRuntimeUntilFirstHealth) {
|
|
1922
|
+
scheduleRuntimeStartFallback();
|
|
1691
1923
|
} else {
|
|
1692
1924
|
startRuntime();
|
|
1693
1925
|
}
|