@qwen-code/qwen-code 0.23.2-preview.0 → 0.23.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/qc-helper/docs/configuration/auth.md +1 -1
- package/bundled/qc-helper/docs/configuration/model-providers.md +19 -15
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +1 -1
- package/bundled/qc-helper/docs/features/channels/github.md +1 -9
- package/bundled/qc-helper/docs/features/channels/overview.md +26 -51
- package/bundled/qc-helper/docs/features/channels/qqbot.md +1 -2
- package/bundled/qc-helper/docs/features/commands.md +48 -9
- package/bundled/qc-helper/docs/features/goals.md +2 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +8 -0
- package/bundled/qc-helper/docs/qwen-serve.md +62 -48
- package/chunks/{MaxSizedBox-ZZJT3PJF.js → MaxSizedBox-4C3BKKKY.js} +17 -16
- package/chunks/{StandaloneSessionPicker-DIOSZTMX.js → StandaloneSessionPicker-TXVF65YW.js} +32 -31
- package/chunks/{acpAgent-62JUP5A7.js → acpAgent-H5XBKGB4.js} +301 -166
- package/chunks/{agent-NLPEQQDZ.js → agent-T5LEFJIU.js} +10 -10
- package/chunks/{agent-headless-Y2GR5F2Q.js → agent-headless-VZKSRH36.js} +10 -10
- package/chunks/{anthropicContentGenerator-I7LQZH26.js → anthropicContentGenerator-PRJWWVYJ.js} +2 -2
- package/chunks/{artifact-tool-P52OKKEF.js → artifact-tool-G5LHNECG.js} +1 -1
- package/chunks/{bridge-Q66BD62H.js → bridge-AOX5IY44.js} +18 -17
- package/chunks/{channel-management-service-TRTLQTSV.js → channel-management-service-MWQGHPAS.js} +4 -4
- package/chunks/{channel-settings-store-R5STFWUW.js → channel-settings-store-XZCGDGHW.js} +26 -25
- package/chunks/{channel-worker-group-PIYPVCTF.js → channel-worker-group-SQ5FRWOH.js} +5 -5
- package/chunks/{channel-worker-manager-FQHEDTD2.js → channel-worker-manager-TU4ZNWOE.js} +5 -5
- package/chunks/{channel-worker-supervisor-XJPZZ3VK.js → channel-worker-supervisor-EMITFMCP.js} +4 -4
- package/chunks/{chunk-3SH53ANB.js → chunk-22GORRNY.js} +12 -0
- package/chunks/{chunk-7L35FKPF.js → chunk-2BMXHB6N.js} +2 -2
- package/chunks/chunk-2WC3Y7YY.js +1033 -0
- package/chunks/{chunk-WZ4YULVF.js → chunk-3OAXF3UK.js} +210 -80
- package/chunks/{chunk-W673V2H3.js → chunk-46MMBZHI.js} +3 -3
- package/chunks/{chunk-6GRDHIVI.js → chunk-4I3WFI3U.js} +4 -4
- package/chunks/{chunk-QXXBW2G4.js → chunk-4JNHNVAZ.js} +3 -3
- package/chunks/{chunk-R2266LQ5.js → chunk-4WMGYG3F.js} +2 -2
- package/chunks/{chunk-Y6ZWXM44.js → chunk-5BH2AIEY.js} +1 -1
- package/chunks/{chunk-EA4NFWVG.js → chunk-5OZUKLL7.js} +3 -3
- package/chunks/{chunk-RX3FYFCN.js → chunk-67XTVRVB.js} +1 -1
- package/chunks/{chunk-MA5OUNN6.js → chunk-6G4V7SE4.js} +1 -1
- package/chunks/{chunk-B54PFQS5.js → chunk-7CLLH5TI.js} +1 -1
- package/chunks/{chunk-7GZCCHJL.js → chunk-7LTCFO6T.js} +3 -3
- package/chunks/{chunk-33MLFMCL.js → chunk-7NDZKE2M.js} +2 -2
- package/chunks/{chunk-5WC2ECUK.js → chunk-7PD7ZMX5.js} +17 -4
- package/chunks/{chunk-ZUNWKOAP.js → chunk-7SVM3RP2.js} +4 -24
- package/chunks/{chunk-5GD7LYOH.js → chunk-A7EFXK7P.js} +1 -1
- package/chunks/{chunk-RDV4NLI3.js → chunk-AO2VMS72.js} +2 -2
- package/chunks/{chunk-XAXTQURR.js → chunk-APXIW2TF.js} +3 -3
- package/chunks/{chunk-3BTHHXXE.js → chunk-AUTUFD5X.js} +1 -1
- package/chunks/{chunk-VH764G6B.js → chunk-B25JYXZE.js} +2 -2
- package/chunks/{chunk-MMMA36MN.js → chunk-BK7D2JR6.js} +3 -3
- package/chunks/{chunk-RPFJJ33Z.js → chunk-CALTQWTZ.js} +1 -1
- package/chunks/{chunk-EUXF6URV.js → chunk-CCBTNJB4.js} +16 -18
- package/chunks/{chunk-BF3RUIVP.js → chunk-CH2YDT6X.js} +36 -38
- package/chunks/{chunk-L6ZME3W7.js → chunk-CMWU6P4D.js} +1 -1
- package/chunks/{chunk-QJAFSFYA.js → chunk-CWVZBIZJ.js} +1 -1
- package/chunks/{chunk-JDPBJIKI.js → chunk-DAI65CMX.js} +1 -1
- package/chunks/{chunk-GM44O6F7.js → chunk-DARWOZY6.js} +1 -1
- package/chunks/{chunk-J4ECGDA3.js → chunk-ELD3OBPU.js} +3 -3
- package/chunks/{chunk-ZELCTN6Y.js → chunk-F23YN37B.js} +10 -0
- package/chunks/{chunk-OIPUQE3S.js → chunk-F2NYVASI.js} +14 -1
- package/chunks/{chunk-ODBNTMZW.js → chunk-FAJPLSYF.js} +36 -29
- package/chunks/{chunk-GXIHBIHC.js → chunk-FGHPZGOP.js} +29 -24
- package/chunks/{chunk-TK4XHPKW.js → chunk-G37O7YO6.js} +2 -2
- package/chunks/{chunk-4JKLPTV6.js → chunk-G3ZUMSFS.js} +12 -5
- package/chunks/{chunk-743XE7N7.js → chunk-G5VOXCRX.js} +1 -1
- package/chunks/{chunk-BL6B2QS2.js → chunk-GOEVQADN.js} +618 -1122
- package/chunks/{chunk-XI7RST4D.js → chunk-GOKAOSCN.js} +1 -1
- package/chunks/{chunk-FDOGGKAA.js → chunk-GSFV5RQW.js} +2 -0
- package/chunks/{chunk-43CI6YWJ.js → chunk-HJ5UJQQL.js} +1384 -1245
- package/chunks/{chunk-LUVXLLMS.js → chunk-IR6JKBAP.js} +1 -1
- package/chunks/{chunk-CPJRFFPH.js → chunk-IRGDIDGJ.js} +558 -158
- package/chunks/{chunk-DCPRCDSR.js → chunk-IWABUX6T.js} +1 -1
- package/chunks/{chunk-DTB5BXRG.js → chunk-JO77FGNZ.js} +16 -15
- package/chunks/{chunk-45ROPFQY.js → chunk-JYGIJA4W.js} +1 -1
- package/chunks/{chunk-M6YLOETP.js → chunk-KCF2436G.js} +1 -1
- package/chunks/{chunk-CABDNUJ4.js → chunk-KEPC5BOL.js} +5 -5
- package/chunks/{chunk-RN6V5HKE.js → chunk-KFECPHLV.js} +3 -3
- package/chunks/{chunk-WIRYFL2L.js → chunk-LEAOJ43M.js} +17 -15
- package/chunks/{chunk-IUJLW6ZI.js → chunk-LUNC5KCL.js} +3 -3
- package/chunks/{chunk-WZS3X663.js → chunk-LWX4WDFF.js} +2 -5
- package/chunks/{chunk-ISPBBKJN.js → chunk-MV5DTLJV.js} +7 -2
- package/chunks/chunk-NFXXBWSE.js +463 -0
- package/chunks/{chunk-PQSCGZT2.js → chunk-NPKCVSXX.js} +26 -2
- package/chunks/{chunk-7RXOEUFF.js → chunk-NX7ZTXFF.js} +1 -1
- package/chunks/{chunk-G5QLLD53.js → chunk-OXR34GCD.js} +14 -2
- package/chunks/{chunk-VHPG7BH6.js → chunk-PDN7FJZV.js} +1 -1
- package/chunks/{chunk-UHUT4IDM.js → chunk-PFKGV6PO.js} +9 -9
- package/chunks/{chunk-NFIDVZND.js → chunk-QB3KS3N3.js} +2 -21
- package/chunks/{chunk-QLM7D7W3.js → chunk-QFJZAY7W.js} +7 -7
- package/chunks/{chunk-NVS4Z6GT.js → chunk-QHLHE2OT.js} +1 -1
- package/chunks/{chunk-B44JBZBB.js → chunk-QQK4L3UU.js} +1 -1
- package/chunks/{chunk-63ACHB2H.js → chunk-QTB4VP4K.js} +50 -18
- package/chunks/{chunk-4BLTSTF6.js → chunk-R3JIDRUL.js} +4 -4
- package/chunks/{chunk-VEQBVJYH.js → chunk-R457KFV7.js} +3 -3
- package/chunks/{chunk-CG2PDIGD.js → chunk-RM244SCQ.js} +1 -1
- package/chunks/{chunk-W7PXLIZJ.js → chunk-RNAJVXUG.js} +5 -5
- package/chunks/{chunk-VF6D6EGV.js → chunk-S5QR6CB5.js} +52 -6
- package/chunks/{chunk-IRKQ4YYX.js → chunk-SVWWF5TZ.js} +29 -1
- package/chunks/{chunk-5HBA2Z7V.js → chunk-TGNNLRC3.js} +2 -3
- package/chunks/{chunk-ORREXWOM.js → chunk-TODNHE76.js} +3 -3
- package/chunks/{chunk-W3ONSAYO.js → chunk-TOOOLHVS.js} +2 -2
- package/chunks/{chunk-EHTKOO6W.js → chunk-TRQNRP2H.js} +2 -2
- package/chunks/{chunk-PQWM4SX2.js → chunk-U6REWGVR.js} +2 -2
- package/chunks/{chunk-UXDVUFKU.js → chunk-ULZECEIP.js} +2 -2
- package/chunks/{chunk-6YEOCHSE.js → chunk-VBLAI2HA.js} +101 -0
- package/chunks/{chunk-M73KHGNR.js → chunk-VJJXG73H.js} +404 -226
- package/chunks/{chunk-Q2F43WTJ.js → chunk-WBU2PIZ5.js} +23 -6
- package/chunks/{chunk-UULHYZ4W.js → chunk-WDN64MVT.js} +74 -15
- package/chunks/{chunk-XVTCSVBK.js → chunk-WDVV3LRM.js} +193 -169
- package/chunks/{chunk-LBKYQ33T.js → chunk-WK7P62DV.js} +16 -10
- package/chunks/{chunk-ULY4ISY2.js → chunk-WXD7INFV.js} +19 -4
- package/chunks/{chunk-ZIPYCXQP.js → chunk-WXPPUPHM.js} +1 -1
- package/chunks/{chunk-5Z4FCEPY.js → chunk-X7LFJF5D.js} +600 -46
- package/chunks/{chunk-YHDGABDC.js → chunk-XKBFYTCD.js} +1 -1
- package/chunks/{chunk-MWEF5MUK.js → chunk-XSOXPG2L.js} +8 -8
- package/chunks/{chunk-5VZFJTL2.js → chunk-YLOHCA6I.js} +2 -2
- package/chunks/{chunk-LN3WBOKU.js → chunk-YQGW3M6Z.js} +2 -2
- package/chunks/{chunk-2OR32P5M.js → chunk-ZN5TKAVR.js} +125 -10
- package/chunks/{chunk-XBLG564H.js → chunk-ZP5XDLSA.js} +10 -10
- package/chunks/{config-utils-37FHWPTP.js → config-utils-GPLIABL2.js} +21 -20
- package/chunks/{contextCommand-R4JUBV5N.js → contextCommand-NCUQUDBY.js} +18 -17
- package/chunks/{core-runtime-6U4OXU5C.js → core-runtime-WKYKWVYU.js} +23 -21
- package/chunks/{create-sub-session-LLUYAGZN.js → create-sub-session-PPLXB3JJ.js} +17 -16
- package/chunks/{daemon-UI6SQSBV.js → daemon-2CKIAO3I.js} +2 -2
- package/chunks/{daemon-git-worktree-guard-O2UTNFJC.js → daemon-git-worktree-guard-73ZWOLKL.js} +17 -16
- package/chunks/{daemon-status-provider-7GMAKSTX.js → daemon-status-provider-OK7VONJG.js} +22 -21
- package/chunks/{daemon-trust-policy-VNP76VMO.js → daemon-trust-policy-CAUCREG2.js} +22 -21
- package/chunks/{daemon-trust-policy-monitor-TD5O3BZA.js → daemon-trust-policy-monitor-3Y36OOEQ.js} +22 -21
- package/chunks/{deferred-core-runtime-NJM63YJS.js → deferred-core-runtime-Q7WFWYD3.js} +17 -16
- package/chunks/{dist-STAGIFNB.js → dist-6YDUH3BB.js} +388 -102
- package/chunks/{dist-XJ25G6OH.js → dist-BNQVF565.js} +2 -8
- package/chunks/{dist-NQ2636VT.js → dist-F34J4FZX.js} +1 -1
- package/chunks/{dist-OR2ZQTXZ.js → dist-F6JLAJLE.js} +1 -1
- package/chunks/{dist-WZTUKIDR.js → dist-NP7QKLVG.js} +2 -2
- package/chunks/{dist-M4CBX53H.js → dist-UFTFGI6I.js} +1 -1
- package/chunks/{dist-5I4HLUTO.js → dist-XLV33CLY.js} +1 -2
- package/chunks/{dist-24TCWK5H.js → dist-Y5KC3IHW.js} +1 -2
- package/chunks/{dist-FDISN4AK.js → dist-ZDNJK74R.js} +3 -7
- package/chunks/{edit-GL7OA6RV.js → edit-YJD6IETK.js} +10 -10
- package/chunks/{enterPlanMode-VC4BCSZE.js → enterPlanMode-EFPVTWIH.js} +10 -10
- package/chunks/{environment-BI6IBAZJ.js → environment-HP3AXFTB.js} +19 -18
- package/chunks/{errors-D6G2ZM2R.js → errors-22ON46G7.js} +19 -18
- package/chunks/{exitPlanMode-DX446CA6.js → exitPlanMode-MOQUNCBH.js} +10 -10
- package/chunks/{fast-path-MAYDLJIP.js → fast-path-2X7BPMXX.js} +3 -3
- package/chunks/{glob-TVKRFY36.js → glob-Y7ACIB3P.js} +10 -10
- package/chunks/{goal-tools-CA6YANRN.js → goal-tools-DABMICUC.js} +10 -10
- package/chunks/{handleAutoUpdate-AW4ZAHON.js → handleAutoUpdate-MCAMHYDI.js} +19 -18
- package/chunks/{i18n-IH5CRAY7.js → i18n-C3GDCALP.js} +17 -16
- package/chunks/{initializer-UBR37ZNM.js → initializer-4URDQL2G.js} +22 -21
- package/chunks/{installationInfo-Y52756EC.js → installationInfo-LBOL6SBV.js} +17 -16
- package/chunks/{list-7V5JDZPO.js → list-JOGBAC2R.js} +25 -24
- package/chunks/{list-agents-I5TRH3J7.js → list-agents-2CXPGJUE.js} +3 -3
- package/chunks/{llm-QDB6JVF5.js → llm-2KPNSAVY.js} +65 -59
- package/chunks/{llm-content-generator-EO6MZCEO.js → llm-content-generator-GR3FOHLB.js} +2 -2
- package/chunks/{loadedSettingsAdapter-I3YQKMC4.js → loadedSettingsAdapter-DVKROEJD.js} +22 -21
- package/chunks/{loggingContentGenerator-MNXYUGDG.js → loggingContentGenerator-P4K6K5W4.js} +12 -12
- package/chunks/{managed-npm-update-EA3EXPTO.js → managed-npm-update-VWBKHNIN.js} +17 -16
- package/chunks/{mcp-QTAJ544Y.js → mcp-6YYNSYLK.js} +22 -21
- package/chunks/{monitor-6FQKQOTP.js → monitor-A255TNZR.js} +10 -10
- package/chunks/{nonInteractiveCli-MRCTZL5X.js → nonInteractiveCli-LXGIKQAT.js} +55 -54
- package/chunks/{notebook-edit-BQQCKI7K.js → notebook-edit-5UYHS2DM.js} +10 -10
- package/chunks/{open-with-auth-D6JD6LDS.js → open-with-auth-6MVIHMXB.js} +1 -1
- package/chunks/{openaiContentGenerator-TTSKXNVH.js → openaiContentGenerator-A6MAMEO5.js} +7 -7
- package/chunks/{pidfile-KPIS6RIT.js → pidfile-B7DZC4TP.js} +20 -17
- package/chunks/{processUtils-ZCASPKK4.js → processUtils-BPZ2MCZS.js} +2 -2
- package/chunks/{prompt-terminal-ledger-D6HM6TV7.js → prompt-terminal-ledger-FYYTAOXS.js} +18 -17
- package/chunks/{qwenContentGenerator-GGZEFLBD.js → qwenContentGenerator-4IOJFD4S.js} +13 -13
- package/chunks/{read-file-VE5GDFLP.js → read-file-A4H4O3VQ.js} +2 -2
- package/chunks/{resumeHistoryUtils-HSSGMYDC.js → resumeHistoryUtils-YQQ43E4N.js} +19 -18
- package/chunks/{ripGrep-SEJE7AA6.js → ripGrep-W32NWFTA.js} +3 -3
- package/chunks/{run-qwen-serve-OJYVH7N6.js → run-qwen-serve-WBSWWIRV.js} +216 -64
- package/chunks/{runtime-KGMQQFJD.js → runtime-VRVBX2E5.js} +29 -26
- package/chunks/{scheduled-tasks-7H5HWHYD.js → scheduled-tasks-D65KJDA3.js} +20 -19
- package/chunks/{scheduler-BE42AKDG.js → scheduler-M2YPN7Z7.js} +19 -18
- package/chunks/{send-message-AWKUDJBH.js → send-message-76BKWKFZ.js} +3 -3
- package/chunks/{serve-KZVKYMSL.js → serve-BE3H2P6P.js} +22 -21
- package/chunks/{server-PJRALPJQ.js → server-FLY5JERG.js} +84 -148
- package/chunks/{session-IHITXU2S.js → session-JVN62R5K.js} +85 -57
- package/chunks/{session-attachments-root-GQ2TUI3Y.js → session-attachments-root-7ACGLHXA.js} +17 -16
- package/chunks/{session-pr-refresh-H43LULTE.js → session-pr-refresh-TQS57SDK.js} +19 -18
- package/chunks/{settings-RKEQQDFC.js → settings-D44YMZFT.js} +21 -20
- package/chunks/{shell-6PJ444U5.js → shell-3VE6I4V5.js} +10 -10
- package/chunks/{skill-Q3UP7B5V.js → skill-FHEGRRZU.js} +2 -2
- package/chunks/{skill-settings-LZR5YRRW.js → skill-settings-VHEJMBFL.js} +21 -20
- package/chunks/{spawnChannel-WM3DT2BF.js → spawnChannel-T6MX2ZDN.js} +17 -16
- package/chunks/{standalone-update-E5474IBI.js → standalone-update-QUGHFMCS.js} +18 -17
- package/chunks/{start-opentui-ui-WLWZNQ2I.js → start-opentui-ui-IHIIZ2LE.js} +438 -203
- package/chunks/{startInteractiveUI-FBQSGWGO.js → startInteractiveUI-LR7K2ARZ.js} +1171 -1234
- package/chunks/{task-create-PMAFST2T.js → task-create-MWXJFRRM.js} +3 -3
- package/chunks/{task-list-R2HSY2NC.js → task-list-EYO3FE57.js} +2 -2
- package/chunks/{task-update-JYC57USF.js → task-update-2JJJRHMT.js} +3 -3
- package/chunks/{team-create-VIGUFUT4.js → team-create-GY3VFY47.js} +10 -10
- package/chunks/{team-delete-CBHVBTPB.js → team-delete-IQZ6XGFI.js} +2 -2
- package/chunks/{team-plan-approval-HQVZA3MD.js → team-plan-approval-BQPGZOT5.js} +10 -10
- package/chunks/{terminal-image-renderer-LUKNCOVM.js → terminal-image-renderer-YNYW5CQG.js} +17 -16
- package/chunks/{theme-manager-LOENKYLY.js → theme-manager-U6CIK3GM.js} +17 -16
- package/chunks/{tool-search-ZIFAQCE2.js → tool-search-XI3QWD5I.js} +2 -2
- package/chunks/{total-session-admission-FUUJH3QH.js → total-session-admission-3SNSJJ32.js} +18 -17
- package/chunks/{trustedFolders-C76KYROP.js → trustedFolders-OVAQKNV5.js} +18 -17
- package/chunks/{update-relaunch-4G2SRXKX.js → update-relaunch-XV5O74E3.js} +5 -5
- package/chunks/{updateCheck-EIZIO7HI.js → updateCheck-CHUYWD6L.js} +17 -16
- package/chunks/{useAutoAcceptIndicator-EAA6KSY4.js → useAutoAcceptIndicator-VKSVIXZC.js} +23 -22
- package/chunks/{validateNonInterActiveAuth-BRX22QCN.js → validateNonInterActiveAuth-ZNUTD3E5.js} +53 -52
- package/chunks/{version-E56RU7PR.js → version-EK7VAGSI.js} +3 -1
- package/chunks/{web-fetch-AAUCD7RM.js → web-fetch-24KZO763.js} +2 -2
- package/chunks/{web-search-HFUQF44Q.js → web-search-CRNXKZ2X.js} +184 -7
- package/chunks/{web-shell-static-POZHGGXE.js → web-shell-static-BFDESDD4.js} +5 -4
- package/chunks/{workflow-3MABM53N.js → workflow-HD5NYMW5.js} +201 -65
- package/chunks/{workspace-providers-status-2FRLBZ5I.js → workspace-providers-status-MAM42IZS.js} +24 -23
- package/chunks/{workspace-registration-store-YL7HLYYI.js → workspace-registration-store-HKLJEDQX.js} +1 -2
- package/chunks/{workspace-registry-BNRP2ELW.js → workspace-registry-7RDDOBLN.js} +18 -17
- package/chunks/{workspace-runtime-coordinator-WKGF7VHS.js → workspace-runtime-coordinator-LEPDPXJO.js} +18 -17
- package/chunks/{workspace-service-4MYO72MM.js → workspace-service-5IFDCNN3.js} +23 -22
- package/chunks/{workspace-skills-status-SU66TJLZ.js → workspace-skills-status-FJ3HNH4H.js} +22 -21
- package/chunks/{workspace-trust-reconciler-D5QT7WQB.js → workspace-trust-reconciler-PQFHIWLR.js} +23 -22
- package/chunks/{write-file-NVPQE2AZ.js → write-file-ERG67ZFX.js} +11 -11
- package/chunks/{zoom-image-RJHC66WG.js → zoom-image-WQYEC3SR.js} +2 -2
- package/cli.js +12 -12
- package/export-transcript-document.js +82 -82
- package/package.json +4 -4
- package/web-shell/assets/{abnfDiagram-VCTEODGH-DHc6plZn.js → abnfDiagram-VCTEODGH-BRLgQbnT.js} +1 -1
- package/web-shell/assets/{arc-BQ9m8TDV.js → arc-qAF9_XsR.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-D5ap3oVB.js → architectureDiagram-5GKGNRK7-BorUttEz.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-BIbnyNph.js → blockDiagram-NRAW4CY4-Bj0qZVxu.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BRsdx_iG.js → c4Diagram-UCG6FXSJ-BTqJis32.js} +1 -1
- package/web-shell/assets/channel-COIuCrVH.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-3lf1fNlx.js → chunk-2Q5K7J3B-RrQ5X8m-.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-DP8VNRc4.js → chunk-5VM5RSS4-uUjDl8wO.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-DrohDmZ6.js → chunk-F27PBJKO-C3JhpyzI.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-UZ2QhSx6.js → chunk-G27WJ6UU-C8ZNFs7F.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-BIMHVcZK.js → chunk-JWPE2WC7-DNpXtEOs.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-izRxdSDd.js → chunk-LCL6LL3I-DagA2ZLw.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-CXADD4PP.js → chunk-POPQ4Y6H-R23uH7Xm.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-B96d8Y_1.js → chunk-SVP7TREG-Qz9RN_BR.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-CF2sVQpv.js → chunk-XXDRQBXY-jYb1_hni.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DoX6OYqu.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DoX6OYqu.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-CT6tXVAS.js → cose-bilkent-JH36ORCC-Cv2OunpE.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-X1NS4vtV.js → cynefin-OW5HDTMX-LH42KFJx.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DNsKNOT4.js → cynefinDiagram-5FMLGOSQ-Dha4_OoR.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-9-AHKqsb.js → dagre-3AP2YEHR-Br5lnUKD.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-Bjgms7j6.js → diagram-S7CK7UJ4-dpKq2bBX.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-h6bCprbE.js → diagram-UQ7AKVKN-BAgHWpXr.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-4SbQXVLt.js → diagram-VSXAHHWV-GRRzpyE2.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-B5gPCzzB.js → diagram-VX7I27RA-BNFiaYpG.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-DFJXIA3A.js → diagram-Z3DM3KII-BisZzB_h.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-FwyaU7VY.js → ebnfDiagram-PWID7BFC-B1xbwycf.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-8vJQh2te.js → erDiagram-SSCWMZ5O-CQMzbGE5.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-BzA_1gMN.js → flowDiagram-A5DVABFB-CZ_Zondl.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-Co-ABbVX.js → ganttDiagram-EL5Y4UJY-BTh2ShxS.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DW_FcyrX.js → gitGraphDiagram-WWUBYQGX-oHOB-Uxt.js} +1 -1
- package/web-shell/assets/{index-Bu-rZoJ-.js → index-CI1ysIEv.js} +478 -474
- package/web-shell/assets/index-CpxXGH-8.css +36 -0
- package/web-shell/assets/{index-BbMXfhNG.js → index-DWoFMu5x.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-BEgfhUFN.js → infoDiagram-RXCK75RN-C0QpudbG.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DCsMxQmc.js → ishikawaDiagram-5VMMS53U-a6B741uT.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-DyIEYoHz.js → journeyDiagram-EYS64GPL-Dbht9ICp.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-CkxjqCNr.js → kanban-definition-3QL26DDD-D4OFR8-h.js} +1 -1
- package/web-shell/assets/{layout-BEWc0Al9.js → layout-Dvdh5jRH.js} +1 -1
- package/web-shell/assets/{linear-CNuNxirL.js → linear-Dvc6KIW2.js} +1 -1
- package/web-shell/assets/{mermaid.core-DZBre674.js → mermaid.core-CB36RfIb.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-CpafFz_F.js → mindmap-definition-FBJOCRG2-Fmqo1CjP.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-DfZqk_dq.js → pegDiagram-XKGWAZYB-CCxYBoA4.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-S0UWXlgC.js → pieDiagram-E7YTZNPT-BVHKQFzt.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-dd37_Ohj.js → quadrantDiagram-AXDQQJYC-l95IznwR.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CH8NJZ7u.js → railroadDiagram-O6MQD6OU-BlLdRdXp.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CFdqWYih.js → requirementDiagram-EFPCY7ZU-BkDLBR5w.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CsddcEGD.js → sankeyDiagram-P5KCCOFB-jAIqRp65.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BZ270mGw.js → sequenceDiagram-WJ2MYXX4-f-soZYPr.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-CGaS4DBV.js → sizeCapture-X5ZJPWSS-BzOuAfB2.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-COpIzMu6.js → stateDiagram-HBIQ2CUA-BPLSs12r.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-IRul-LaT.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-CMF889m3.js → swimlanes-XN3QIQJK-D-9E_RIR.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-D6lgKepA.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-BelnxYz5.js → timeline-definition-24CTP7MA-CT56K-gV.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-CU-NRqIB.js → vennDiagram-4TSXK5OY-B-vi4IyO.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CDNKqWh-.js → wardleyDiagram-VM6X3IG4-C9O7Ju98.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-CLqguL5D.js → xychartDiagram-S5SC5T6Z-6d8w3jg2.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-X35VIWWJ.js +0 -276
- package/web-shell/assets/channel-uMMdTrYk.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DcY-26Ig.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DcY-26Ig.js +0 -1
- package/web-shell/assets/index-CsPwZ1ut.css +0 -36
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-mem5Jj4m.js +0 -8
|
@@ -8,8 +8,8 @@ import {
|
|
|
8
8
|
isOwnInterfaceAddress
|
|
9
9
|
} from "./chunk-24FVUD5P.js";
|
|
10
10
|
import {
|
|
11
|
-
|
|
12
|
-
} from "./chunk-
|
|
11
|
+
resolveRemoteServeToken
|
|
12
|
+
} from "./chunk-F23YN37B.js";
|
|
13
13
|
import {
|
|
14
14
|
RUNTIME_STARTUP_CANCELLED_MESSAGE
|
|
15
15
|
} from "./chunk-QUPXZXLV.js";
|
|
@@ -33,6 +33,7 @@ import {
|
|
|
33
33
|
getRateLimiter,
|
|
34
34
|
getServeProtocolVersions,
|
|
35
35
|
hostAllowlist,
|
|
36
|
+
installRemoteSelfOriginMiddleware,
|
|
36
37
|
installSelfOriginStripMiddleware,
|
|
37
38
|
isBrowserAutomationMcpAvailable,
|
|
38
39
|
isDeepHealthQuery,
|
|
@@ -40,7 +41,9 @@ import {
|
|
|
40
41
|
isLocalTerminalAvailable,
|
|
41
42
|
isManagedScratchChild,
|
|
42
43
|
isNativeDirectoryPickerAvailable,
|
|
44
|
+
isSoftwareNetwork,
|
|
43
45
|
isTrustedLoopbackMode,
|
|
46
|
+
listLanCandidates,
|
|
44
47
|
listenerMaxConnections,
|
|
45
48
|
parseAllowOriginPatterns,
|
|
46
49
|
parseDaemonStatusDetail,
|
|
@@ -48,7 +51,7 @@ import {
|
|
|
48
51
|
prepareManagedScratchRoot,
|
|
49
52
|
resolveAcpHttpEnabled,
|
|
50
53
|
toDaemonStatusMemoryLimits
|
|
51
|
-
} from "./chunk-
|
|
54
|
+
} from "./chunk-VJJXG73H.js";
|
|
52
55
|
import {
|
|
53
56
|
ConversationDirectoryIdentityError,
|
|
54
57
|
assertExactConversationRootIdentity,
|
|
@@ -71,11 +74,12 @@ import {
|
|
|
71
74
|
} from "./chunk-LAUEEBDL.js";
|
|
72
75
|
import {
|
|
73
76
|
require_express
|
|
74
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-SVWWF5TZ.js";
|
|
75
78
|
import {
|
|
76
79
|
resolveWebShellDir
|
|
77
80
|
} from "./chunk-FBX2SDQ4.js";
|
|
78
81
|
import {
|
|
82
|
+
formatHostForAuthority,
|
|
79
83
|
isLoopbackAddress,
|
|
80
84
|
isLoopbackBind
|
|
81
85
|
} from "./chunk-DMEUXLSS.js";
|
|
@@ -100,7 +104,7 @@ import {
|
|
|
100
104
|
} from "./chunk-WCCLLK7X.js";
|
|
101
105
|
import {
|
|
102
106
|
resolveChannelCwd
|
|
103
|
-
} from "./chunk-
|
|
107
|
+
} from "./chunk-AUTUFD5X.js";
|
|
104
108
|
import {
|
|
105
109
|
ConversationRuntimeOwnershipError,
|
|
106
110
|
LIVE_HOST_PROTOCOL_VERSION
|
|
@@ -117,8 +121,8 @@ import {
|
|
|
117
121
|
MAX_REGISTERED_WORKSPACES,
|
|
118
122
|
resolveWorkspaceInputs,
|
|
119
123
|
workspaceRegistrationId
|
|
120
|
-
} from "./chunk-
|
|
121
|
-
import "./chunk-
|
|
124
|
+
} from "./chunk-LWX4WDFF.js";
|
|
125
|
+
import "./chunk-TRQNRP2H.js";
|
|
122
126
|
import {
|
|
123
127
|
LOAD_REPLAY_META_KEY
|
|
124
128
|
} from "./chunk-PSPAM24S.js";
|
|
@@ -130,7 +134,7 @@ import {
|
|
|
130
134
|
import {
|
|
131
135
|
ExtraCaInspectionError,
|
|
132
136
|
loadableCertificates
|
|
133
|
-
} from "./chunk-
|
|
137
|
+
} from "./chunk-KEPC5BOL.js";
|
|
134
138
|
import "./chunk-FYJ7W2PI.js";
|
|
135
139
|
import "./chunk-Z7B6SRPM.js";
|
|
136
140
|
import {
|
|
@@ -139,7 +143,7 @@ import {
|
|
|
139
143
|
import {
|
|
140
144
|
normalizeWorkerDiagnostic,
|
|
141
145
|
sanitizeWorkerDiagnostic
|
|
142
|
-
} from "./chunk-
|
|
146
|
+
} from "./chunk-DARWOZY6.js";
|
|
143
147
|
import {
|
|
144
148
|
QWEN_SERVER_TOKEN_ENV
|
|
145
149
|
} from "./chunk-GYTKQYDB.js";
|
|
@@ -159,13 +163,11 @@ import {
|
|
|
159
163
|
PRIVATE_EXTERNAL_TOOL_GUARD_ENV,
|
|
160
164
|
PRIVATE_EXTERNAL_TOOL_GUARD_PROVIDER_ENV
|
|
161
165
|
} from "./chunk-3VUENPWF.js";
|
|
166
|
+
import "./chunk-TGNNLRC3.js";
|
|
162
167
|
import {
|
|
163
168
|
sanitizeLogText
|
|
164
|
-
} from "./chunk-
|
|
169
|
+
} from "./chunk-WDVV3LRM.js";
|
|
165
170
|
import "./chunk-IW6RQPQB.js";
|
|
166
|
-
import {
|
|
167
|
-
MAX_DAEMON_WORKSPACES
|
|
168
|
-
} from "./chunk-5HBA2Z7V.js";
|
|
169
171
|
import "./chunk-BW4333PP.js";
|
|
170
172
|
import {
|
|
171
173
|
getGlobalQwenDirLite,
|
|
@@ -179,7 +181,7 @@ import {
|
|
|
179
181
|
} from "./chunk-QTNCGZHQ.js";
|
|
180
182
|
import {
|
|
181
183
|
getCliVersion
|
|
182
|
-
} from "./chunk-
|
|
184
|
+
} from "./chunk-MV5DTLJV.js";
|
|
183
185
|
import "./chunk-W3N5XAZ6.js";
|
|
184
186
|
import "./chunk-NPQ5ZKRP.js";
|
|
185
187
|
import {
|
|
@@ -211,7 +213,8 @@ import {
|
|
|
211
213
|
import "./chunk-JVEGA3MM.js";
|
|
212
214
|
import {
|
|
213
215
|
writeStderrLine,
|
|
214
|
-
writeStdoutLine
|
|
216
|
+
writeStdoutLine,
|
|
217
|
+
writeStdoutLineSafe
|
|
215
218
|
} from "./chunk-7FA2II6K.js";
|
|
216
219
|
import "./chunk-DMTGGOSA.js";
|
|
217
220
|
import "./chunk-YQ3U5MUC.js";
|
|
@@ -251,10 +254,11 @@ init_esbuild_shims();
|
|
|
251
254
|
var MIN_CHILD_HEAP_MB = 512;
|
|
252
255
|
|
|
253
256
|
// packages/acp-bridge/dist/child-heap-policy.js
|
|
257
|
+
var MAX_MODELED_ACP_CHILDREN = 25;
|
|
254
258
|
function createChildHeapPolicy(options) {
|
|
255
259
|
const { budget, mode } = options;
|
|
256
260
|
let refusals = 0;
|
|
257
|
-
const admissible = Math.min(Math.floor(budget.childPoolMb / MIN_CHILD_HEAP_MB),
|
|
261
|
+
const admissible = Math.min(Math.floor(budget.childPoolMb / MIN_CHILD_HEAP_MB), MAX_MODELED_ACP_CHILDREN);
|
|
258
262
|
const rawCeilingMb = admissible > 0 ? Math.min(Math.floor(budget.childPoolMb / admissible), budget.legacyChildCeilingMb) : null;
|
|
259
263
|
const modelable = rawCeilingMb !== null && rawCeilingMb >= MIN_CHILD_HEAP_MB;
|
|
260
264
|
const maxConcurrentChildren = modelable ? admissible : 0;
|
|
@@ -283,6 +287,125 @@ function createChildHeapPolicy(options) {
|
|
|
283
287
|
}
|
|
284
288
|
__name(createChildHeapPolicy, "createChildHeapPolicy");
|
|
285
289
|
|
|
290
|
+
// packages/cli/src/serve/remote-quickstart.ts
|
|
291
|
+
init_esbuild_shims();
|
|
292
|
+
import { networkInterfaces } from "node:os";
|
|
293
|
+
function isUlaIpv6(address) {
|
|
294
|
+
return /^(?:fc|fd)/iu.test(address);
|
|
295
|
+
}
|
|
296
|
+
__name(isUlaIpv6, "isUlaIpv6");
|
|
297
|
+
function isLinkLocalIpv4(address) {
|
|
298
|
+
return address.startsWith("169.254.");
|
|
299
|
+
}
|
|
300
|
+
__name(isLinkLocalIpv4, "isLinkLocalIpv4");
|
|
301
|
+
function quickstartPrintMode(boundAddress, generated) {
|
|
302
|
+
if (!isLoopbackAddress(boundAddress)) return "full";
|
|
303
|
+
return generated ? "token-only" : "silent";
|
|
304
|
+
}
|
|
305
|
+
__name(quickstartPrintMode, "quickstartPrintMode");
|
|
306
|
+
function remoteQuickstartEntries(bind, boundAddress, port, tls, interfaces) {
|
|
307
|
+
const scheme = tls ? "https" : "http";
|
|
308
|
+
const url = /* @__PURE__ */ __name((host) => `${scheme}://${formatHostForAuthority(host)}:${port}`, "url");
|
|
309
|
+
const bound = boundAddress.trim().toLowerCase();
|
|
310
|
+
const ipv4Wildcard = bound === "0.0.0.0" || bound === "::ffff:0.0.0.0";
|
|
311
|
+
if (!ipv4Wildcard && bound !== "::") {
|
|
312
|
+
if (bind.trim().includes("%")) return [];
|
|
313
|
+
return [{ label: "Address", url: url(bind), address: bind }];
|
|
314
|
+
}
|
|
315
|
+
const localAddress = !ipv4Wildcard && hostAssignsIpv6Loopback(interfaces) ? "::1" : "127.0.0.1";
|
|
316
|
+
const addresses = [
|
|
317
|
+
{ label: "Local", url: url(localAddress), address: localAddress }
|
|
318
|
+
];
|
|
319
|
+
for (const candidate of listLanCandidates(interfaces)) {
|
|
320
|
+
addresses.push({
|
|
321
|
+
label: `Network (${candidate.interfaceName})`,
|
|
322
|
+
url: url(candidate.address),
|
|
323
|
+
address: candidate.address
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
if (!ipv4Wildcard) {
|
|
327
|
+
for (const [name, entries] of Object.entries(interfaces).sort()) {
|
|
328
|
+
if (isSoftwareNetwork(name)) continue;
|
|
329
|
+
for (const entry of entries ?? []) {
|
|
330
|
+
if (entry.internal || entry.family !== "IPv6") continue;
|
|
331
|
+
if (entry.address.includes("%") || !isUlaIpv6(entry.address)) continue;
|
|
332
|
+
addresses.push({
|
|
333
|
+
label: `Network (${name})`,
|
|
334
|
+
url: url(entry.address),
|
|
335
|
+
address: entry.address
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
return addresses;
|
|
341
|
+
}
|
|
342
|
+
__name(remoteQuickstartEntries, "remoteQuickstartEntries");
|
|
343
|
+
async function printRemoteQuickstart(input) {
|
|
344
|
+
try {
|
|
345
|
+
const mode = quickstartPrintMode(input.boundAddress, input.generated);
|
|
346
|
+
if (mode === "silent") return;
|
|
347
|
+
if (mode === "token-only") {
|
|
348
|
+
writeStdoutLineSafe(
|
|
349
|
+
`Generated bearer token (secret; changes on restart): ${input.token}`
|
|
350
|
+
);
|
|
351
|
+
writeStdoutLineSafe(
|
|
352
|
+
"The listener bound loopback, so no network address or QR is printed; local clients must present this bearer."
|
|
353
|
+
);
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
356
|
+
const addresses = remoteQuickstartEntries(
|
|
357
|
+
input.bind,
|
|
358
|
+
input.boundAddress,
|
|
359
|
+
input.port,
|
|
360
|
+
input.tls,
|
|
361
|
+
input.interfaces ?? networkInterfaces()
|
|
362
|
+
);
|
|
363
|
+
for (const address of addresses)
|
|
364
|
+
writeStdoutLineSafe(`${address.label}: ${address.url}`);
|
|
365
|
+
if (input.generated) {
|
|
366
|
+
writeStdoutLineSafe(
|
|
367
|
+
`Generated bearer token (secret; changes on restart): ${input.token}`
|
|
368
|
+
);
|
|
369
|
+
}
|
|
370
|
+
if (!input.tls)
|
|
371
|
+
writeStdoutLineSafe(
|
|
372
|
+
"HTTP is unencrypted. Use the existing TLS options for encrypted remote access."
|
|
373
|
+
);
|
|
374
|
+
if (!input.web) return;
|
|
375
|
+
const candidate = addresses.find(
|
|
376
|
+
(address) => address.label !== "Local" && !isLinkLocalIpv4(address.address)
|
|
377
|
+
) ?? addresses.find((address) => address.label !== "Local");
|
|
378
|
+
if (!candidate) {
|
|
379
|
+
writeStdoutLineSafe(
|
|
380
|
+
"QR unavailable; enter the bearer token at the daemon address."
|
|
381
|
+
);
|
|
382
|
+
return;
|
|
383
|
+
}
|
|
384
|
+
if (!input.generated && !process.stdout.isTTY) return;
|
|
385
|
+
try {
|
|
386
|
+
const { default: qrcode } = await import("./main-PXAUXNF2.js");
|
|
387
|
+
qrcode.setErrorLevel("Q");
|
|
388
|
+
qrcode.generate(
|
|
389
|
+
`${candidate.url}/#token=${encodeURIComponent(input.token)}`,
|
|
390
|
+
{ small: true },
|
|
391
|
+
(code) => {
|
|
392
|
+
writeStdoutLineSafe(
|
|
393
|
+
`Scan to open Web Shell: ${candidate.url} (${candidate.label})`
|
|
394
|
+
);
|
|
395
|
+
writeStdoutLineSafe("SECRET QR: grants daemon access. Do not share.");
|
|
396
|
+
writeStdoutLineSafe(code.trimEnd());
|
|
397
|
+
}
|
|
398
|
+
);
|
|
399
|
+
} catch {
|
|
400
|
+
writeStdoutLineSafe(
|
|
401
|
+
"QR unavailable; enter the bearer token at the daemon address."
|
|
402
|
+
);
|
|
403
|
+
}
|
|
404
|
+
} catch {
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
__name(printRemoteQuickstart, "printRemoteQuickstart");
|
|
408
|
+
|
|
286
409
|
// packages/cli/src/serve/permission-audit.ts
|
|
287
410
|
init_esbuild_shims();
|
|
288
411
|
var DEFAULT_PERMISSION_AUDIT_RING_SIZE = 512;
|
|
@@ -3260,14 +3383,11 @@ function canonicalIpLiteral(host) {
|
|
|
3260
3383
|
}
|
|
3261
3384
|
}
|
|
3262
3385
|
__name(canonicalIpLiteral, "canonicalIpLiteral");
|
|
3263
|
-
function formatChannelWorkerDaemonUrl(host, port, tls = false,
|
|
3386
|
+
function formatChannelWorkerDaemonUrl(host, port, tls = false, ipv6LoopbackAssigned = hostAssignsIpv6Loopback()) {
|
|
3264
3387
|
const scheme = tls ? "https" : "http";
|
|
3265
3388
|
const normalized = host.trim().toLowerCase();
|
|
3266
3389
|
const canonicalIp = canonicalIpLiteral(normalized);
|
|
3267
3390
|
const v6Loopback = ipv6LoopbackAssigned ? `${scheme}://[::1]:${port}` : `${scheme}://127.0.0.1:${port}`;
|
|
3268
|
-
if (normalized === "") {
|
|
3269
|
-
return boundFamily === "IPv4" ? `${scheme}://127.0.0.1:${port}` : v6Loopback;
|
|
3270
|
-
}
|
|
3271
3391
|
if (canonicalIp === "::") {
|
|
3272
3392
|
return v6Loopback;
|
|
3273
3393
|
}
|
|
@@ -3804,12 +3924,12 @@ __name(hasRetryableChannelWorkerShutdownError, "hasRetryableChannelWorkerShutdow
|
|
|
3804
3924
|
var channelWorkerRuntimePromise;
|
|
3805
3925
|
async function loadChannelWorkerRuntime() {
|
|
3806
3926
|
channelWorkerRuntimePromise ??= Promise.all([
|
|
3807
|
-
import("./channel-worker-supervisor-
|
|
3808
|
-
import("./pidfile-
|
|
3809
|
-
import("./runtime-
|
|
3927
|
+
import("./channel-worker-supervisor-EMITFMCP.js"),
|
|
3928
|
+
import("./pidfile-B7DZC4TP.js"),
|
|
3929
|
+
import("./runtime-VRVBX2E5.js"),
|
|
3810
3930
|
import("./cli-entry-path-4VJ3Y6T2.js"),
|
|
3811
|
-
import("./channel-worker-group-
|
|
3812
|
-
import("./channel-worker-manager-
|
|
3931
|
+
import("./channel-worker-group-SQ5FRWOH.js"),
|
|
3932
|
+
import("./channel-worker-manager-TU4ZNWOE.js")
|
|
3813
3933
|
]).then(
|
|
3814
3934
|
([
|
|
3815
3935
|
supervisor,
|
|
@@ -3915,7 +4035,7 @@ function shouldPreheatBridge(deps) {
|
|
|
3915
4035
|
__name(shouldPreheatBridge, "shouldPreheatBridge");
|
|
3916
4036
|
var coreRuntimePromise;
|
|
3917
4037
|
function loadCoreRuntime() {
|
|
3918
|
-
coreRuntimePromise ??= import("./core-runtime-
|
|
4038
|
+
coreRuntimePromise ??= import("./core-runtime-WKYKWVYU.js");
|
|
3919
4039
|
return coreRuntimePromise;
|
|
3920
4040
|
}
|
|
3921
4041
|
__name(loadCoreRuntime, "loadCoreRuntime");
|
|
@@ -3951,10 +4071,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
|
|
|
3951
4071
|
var settingsRuntimePromise;
|
|
3952
4072
|
function loadSettingsRuntimeModules() {
|
|
3953
4073
|
settingsRuntimePromise ??= Promise.all([
|
|
3954
|
-
import("./settings-
|
|
3955
|
-
import("./environment-
|
|
3956
|
-
import("./loadedSettingsAdapter-
|
|
3957
|
-
import("./trustedFolders-
|
|
4074
|
+
import("./settings-D44YMZFT.js"),
|
|
4075
|
+
import("./environment-HP3AXFTB.js"),
|
|
4076
|
+
import("./loadedSettingsAdapter-DVKROEJD.js"),
|
|
4077
|
+
import("./trustedFolders-OVAQKNV5.js")
|
|
3958
4078
|
]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
|
|
3959
4079
|
settings,
|
|
3960
4080
|
environment,
|
|
@@ -3967,8 +4087,8 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
|
|
|
3967
4087
|
var channelWebhookConfigRuntimePromise;
|
|
3968
4088
|
function loadChannelWebhookConfigRuntime() {
|
|
3969
4089
|
channelWebhookConfigRuntimePromise ??= Promise.all([
|
|
3970
|
-
import("./runtime-
|
|
3971
|
-
import("./config-utils-
|
|
4090
|
+
import("./runtime-VRVBX2E5.js"),
|
|
4091
|
+
import("./config-utils-GPLIABL2.js")
|
|
3972
4092
|
]).then(([channelRuntime, configUtils]) => ({
|
|
3973
4093
|
loadChannelsConfig: channelRuntime.loadChannelsConfig,
|
|
3974
4094
|
parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
|
|
@@ -3995,19 +4115,19 @@ async function loadServeRuntimeModules() {
|
|
|
3995
4115
|
workspaceRuntimeCoordinatorModule,
|
|
3996
4116
|
promptLedgerModule
|
|
3997
4117
|
] = await Promise.all([
|
|
3998
|
-
import("./server-
|
|
3999
|
-
import("./bridge-
|
|
4000
|
-
import("./spawnChannel-
|
|
4118
|
+
import("./server-FLY5JERG.js"),
|
|
4119
|
+
import("./bridge-AOX5IY44.js"),
|
|
4120
|
+
import("./spawnChannel-T6MX2ZDN.js"),
|
|
4001
4121
|
import("./process-registry-OAEG6WGC.js"),
|
|
4002
|
-
import("./workspace-service-
|
|
4122
|
+
import("./workspace-service-5IFDCNN3.js"),
|
|
4003
4123
|
import("./types-HKLPXZB3.js"),
|
|
4004
|
-
import("./daemon-status-provider-
|
|
4005
|
-
import("./workspace-providers-status-
|
|
4006
|
-
import("./workspace-skills-status-
|
|
4007
|
-
import("./total-session-admission-
|
|
4008
|
-
import("./workspace-registry-
|
|
4009
|
-
import("./workspace-runtime-coordinator-
|
|
4010
|
-
import("./prompt-terminal-ledger-
|
|
4124
|
+
import("./daemon-status-provider-OK7VONJG.js"),
|
|
4125
|
+
import("./workspace-providers-status-MAM42IZS.js"),
|
|
4126
|
+
import("./workspace-skills-status-FJ3HNH4H.js"),
|
|
4127
|
+
import("./total-session-admission-3SNSJJ32.js"),
|
|
4128
|
+
import("./workspace-registry-7RDDOBLN.js"),
|
|
4129
|
+
import("./workspace-runtime-coordinator-LEPDPXJO.js"),
|
|
4130
|
+
import("./prompt-terminal-ledger-FYYTAOXS.js")
|
|
4011
4131
|
]);
|
|
4012
4132
|
return {
|
|
4013
4133
|
createServeApp: serverModule.createServeApp,
|
|
@@ -4247,12 +4367,13 @@ function createBootstrapServeApp(input) {
|
|
|
4247
4367
|
const localPathOpenAvailable = isLocalPathOpenAvailable();
|
|
4248
4368
|
const localTerminalOpenAvailable = isLocalTerminalAvailable();
|
|
4249
4369
|
installSelfOriginStripMiddleware(app, getPort, opts.hostname);
|
|
4370
|
+
app.use(hostAllowlist(opts.hostname, getPort));
|
|
4371
|
+
installRemoteSelfOriginMiddleware(app, opts.hostname, opts.token);
|
|
4250
4372
|
if (opts.allowOrigins && opts.allowOrigins.length > 0) {
|
|
4251
4373
|
app.use(allowOriginCors(parseAllowOriginPatterns(opts.allowOrigins)));
|
|
4252
4374
|
} else {
|
|
4253
4375
|
app.use(denyBrowserOriginCors);
|
|
4254
4376
|
}
|
|
4255
|
-
app.use(hostAllowlist(opts.hostname, getPort));
|
|
4256
4377
|
const healthHandler = /* @__PURE__ */ __name((req, res) => {
|
|
4257
4378
|
const runtimeError = getRuntimeError();
|
|
4258
4379
|
if (runtimeError !== void 0) {
|
|
@@ -4723,7 +4844,19 @@ async function runQwenServe(optsIn, deps = {}) {
|
|
|
4723
4844
|
}
|
|
4724
4845
|
}
|
|
4725
4846
|
__name(runQwenServe, "runQwenServe");
|
|
4847
|
+
var brokenPipeGuardInstalled = false;
|
|
4848
|
+
function installServeBrokenPipeGuard() {
|
|
4849
|
+
if (brokenPipeGuardInstalled) return;
|
|
4850
|
+
brokenPipeGuardInstalled = true;
|
|
4851
|
+
const ignoreEpipe = /* @__PURE__ */ __name((err) => {
|
|
4852
|
+
if (err.code !== "EPIPE") throw err;
|
|
4853
|
+
}, "ignoreEpipe");
|
|
4854
|
+
process.stdout.on("error", ignoreEpipe);
|
|
4855
|
+
process.stderr.on("error", ignoreEpipe);
|
|
4856
|
+
}
|
|
4857
|
+
__name(installServeBrokenPipeGuard, "installServeBrokenPipeGuard");
|
|
4726
4858
|
async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
4859
|
+
installServeBrokenPipeGuard();
|
|
4727
4860
|
const runStartedAt = performance2.now();
|
|
4728
4861
|
delete process.env[EXTERNAL_TOOL_GUARD_TOKEN_ENV];
|
|
4729
4862
|
const channelDeliveryAuthorizations = new ChannelDeliveryAuthorizationStore();
|
|
@@ -4765,8 +4898,16 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4765
4898
|
loaderEnvScrub.release();
|
|
4766
4899
|
}, "restoreScrubbedLoaderEnv");
|
|
4767
4900
|
loggerLifecycle.scrubApplied(restoreScrubbedLoaderEnv);
|
|
4768
|
-
|
|
4901
|
+
if (!optsIn.hostname.trim()) {
|
|
4902
|
+
throw new Error(
|
|
4903
|
+
"Invalid --hostname: empty value binds every interface. Pass an explicit address (e.g. --hostname 0.0.0.0) or omit the flag."
|
|
4904
|
+
);
|
|
4905
|
+
}
|
|
4769
4906
|
const bindHostname = optsIn.hostname.toLowerCase() === "localhost" ? (await (deps.bindHostnameLookup ?? lookup)(optsIn.hostname)).address : optsIn.hostname;
|
|
4907
|
+
const { token, generated: generatedToken } = resolveRemoteServeToken(
|
|
4908
|
+
optsIn.token,
|
|
4909
|
+
isLoopbackBind(optsIn.hostname)
|
|
4910
|
+
);
|
|
4770
4911
|
const trustedLoopbackMode = isTrustedLoopbackMode({
|
|
4771
4912
|
loopbackBind: isLoopbackAddress(bindHostname),
|
|
4772
4913
|
tokenConfigured: token !== void 0,
|
|
@@ -4931,7 +5072,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4931
5072
|
}
|
|
4932
5073
|
if (!isLoopbackBind(opts.hostname) && !token) {
|
|
4933
5074
|
throw new Error(
|
|
4934
|
-
`Refusing to bind ${opts.hostname}:${opts.port} without a bearer token. Set ${QWEN_SERVER_TOKEN_ENV} or pass --token, or rebind to loopback (127.0.0.0/8, localhost, ::1, or [::1]).`
|
|
5075
|
+
`Refusing to bind ${opts.hostname}:${opts.port} without a bearer token (an explicitly empty --token or ${QWEN_SERVER_TOKEN_ENV} counts as none, since a blank source never generates one). Set ${QWEN_SERVER_TOKEN_ENV} or pass --token, or rebind to loopback (127.0.0.0/8, localhost, ::1, or [::1]).`
|
|
4935
5076
|
);
|
|
4936
5077
|
}
|
|
4937
5078
|
if (opts.requireAuth && !token) {
|
|
@@ -5065,7 +5206,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5065
5206
|
}
|
|
5066
5207
|
let workspaceRegistrationStore = deps.workspaceRegistrationStore;
|
|
5067
5208
|
if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
|
|
5068
|
-
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-
|
|
5209
|
+
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-HKLJEDQX.js");
|
|
5069
5210
|
workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
|
|
5070
5211
|
}
|
|
5071
5212
|
if (workspaceRegistrationStore) {
|
|
@@ -5356,7 +5497,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5356
5497
|
"qwen serve: required external tool guard handshake succeeded."
|
|
5357
5498
|
);
|
|
5358
5499
|
}
|
|
5359
|
-
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-
|
|
5500
|
+
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-73ZWOLKL.js");
|
|
5360
5501
|
const daemonToolGuardHandler = createDaemonToolGuard(
|
|
5361
5502
|
externalToolGuardHandler
|
|
5362
5503
|
);
|
|
@@ -5392,7 +5533,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5392
5533
|
);
|
|
5393
5534
|
if (!opts.allowOrigins || opts.allowOrigins.length === 0) {
|
|
5394
5535
|
writeStderrLine(
|
|
5395
|
-
"qwen serve: without --allow-origin
|
|
5536
|
+
"qwen serve: same-origin Web Shell HTTP requests work without --allow-origin, but WebSocket-backed features (terminal, voice) and browsers reaching the daemon through a TLS-terminating proxy still need --allow-origin <origin>. A plain-HTTP intermediary that rewrites the Host header (nginx default proxy_set_header, k8s Ingress) needs --allow-origin <origin> for the origin the browser sees, unless it forwards Host verbatim; port translation alone (ssh -L, docker -p) is fine."
|
|
5396
5537
|
);
|
|
5397
5538
|
}
|
|
5398
5539
|
}
|
|
@@ -5707,7 +5848,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5707
5848
|
loadCoreRuntime(),
|
|
5708
5849
|
loadSettingsRuntimeModules(),
|
|
5709
5850
|
cliVersionPromise,
|
|
5710
|
-
import("./daemon-trust-policy-
|
|
5851
|
+
import("./daemon-trust-policy-CAUCREG2.js")
|
|
5711
5852
|
]);
|
|
5712
5853
|
getWorkspaceRuntimeCoordinatorIfSupported = runtime.getWorkspaceRuntimeCoordinatorIfSupported;
|
|
5713
5854
|
cliVersion = resolvedCliVersion;
|
|
@@ -6115,7 +6256,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6115
6256
|
}), "persistDisabledToolsFn");
|
|
6116
6257
|
const persistDisabledSkillsFn = /* @__PURE__ */ __name((workspace, skillName, enabled, assertGenerationOpen) => withSettingsLock(workspace, async () => {
|
|
6117
6258
|
assertGenerationOpen?.();
|
|
6118
|
-
const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-
|
|
6259
|
+
const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-VHEJMBFL.js");
|
|
6119
6260
|
const fresh = loadSettingsForPersistence(workspace);
|
|
6120
6261
|
const workspaceDisabled = skillSettingStrings(
|
|
6121
6262
|
fresh,
|
|
@@ -6165,7 +6306,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6165
6306
|
}), "persistDisabledSkillsFn");
|
|
6166
6307
|
const persistDisabledSkillsBatchFn = /* @__PURE__ */ __name((workspace, skillNames, enabled, assertGenerationOpen) => withSettingsLock(workspace, async () => {
|
|
6167
6308
|
assertGenerationOpen?.();
|
|
6168
|
-
const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-
|
|
6309
|
+
const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-VHEJMBFL.js");
|
|
6169
6310
|
const fresh = loadSettingsForPersistence(workspace);
|
|
6170
6311
|
const initialDisabled = skillSettingStrings(
|
|
6171
6312
|
fresh,
|
|
@@ -6256,10 +6397,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6256
6397
|
}
|
|
6257
6398
|
}), "persistSettingsFn");
|
|
6258
6399
|
const [{ createSubSessionLauncher }, scheduledTaskRoutes] = await Promise.all([
|
|
6259
|
-
import("./create-sub-session-
|
|
6260
|
-
import("./scheduled-tasks-
|
|
6400
|
+
import("./create-sub-session-PPLXB3JJ.js"),
|
|
6401
|
+
import("./scheduled-tasks-D65KJDA3.js")
|
|
6261
6402
|
]);
|
|
6262
|
-
const { sessionAttachmentsRoots } = await import("./session-attachments-root-
|
|
6403
|
+
const { sessionAttachmentsRoots } = await import("./session-attachments-root-7ACGLHXA.js");
|
|
6263
6404
|
const createCurrentSessionScheduledTaskHandler = /* @__PURE__ */ __name((workspaceCwd, runtimeBaseDir, getBridge, assertGenerationOpen) => async ({
|
|
6264
6405
|
callerSessionId,
|
|
6265
6406
|
cron,
|
|
@@ -7100,7 +7241,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7100
7241
|
};
|
|
7101
7242
|
sessionPrRefreshTimer?.dispose();
|
|
7102
7243
|
const refreshGeneration = ++sessionPrRefreshGeneration;
|
|
7103
|
-
void import("./session-pr-refresh-
|
|
7244
|
+
void import("./session-pr-refresh-TQS57SDK.js").then((mod) => {
|
|
7104
7245
|
if (refreshGeneration !== sessionPrRefreshGeneration) return;
|
|
7105
7246
|
sessionPrRefreshTimer = mod.startSessionPrRefreshTimer({
|
|
7106
7247
|
workspaceRegistry,
|
|
@@ -7770,8 +7911,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7770
7911
|
{ createChannelManagementService },
|
|
7771
7912
|
{ WorkspaceChannelSettingsStore }
|
|
7772
7913
|
] = await Promise.all([
|
|
7773
|
-
import("./channel-management-service-
|
|
7774
|
-
import("./channel-settings-store-
|
|
7914
|
+
import("./channel-management-service-MWQGHPAS.js"),
|
|
7915
|
+
import("./channel-settings-store-XZCGDGHW.js")
|
|
7775
7916
|
]);
|
|
7776
7917
|
return createChannelManagementService({
|
|
7777
7918
|
workspaceCwd: targetRuntime.workspaceCwd,
|
|
@@ -7976,8 +8117,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7976
8117
|
{ createWorkspaceTrustReconciler },
|
|
7977
8118
|
{ createDaemonTrustPolicyMonitor }
|
|
7978
8119
|
] = await Promise.all([
|
|
7979
|
-
import("./workspace-trust-reconciler-
|
|
7980
|
-
import("./daemon-trust-policy-monitor-
|
|
8120
|
+
import("./workspace-trust-reconciler-PQFHIWLR.js"),
|
|
8121
|
+
import("./daemon-trust-policy-monitor-3Y36OOEQ.js")
|
|
7981
8122
|
]);
|
|
7982
8123
|
const materializationFor = /* @__PURE__ */ __name((entry, snapshot, decision) => {
|
|
7983
8124
|
const boundWorkspaces2 = entry.primary && decision.targetTrusted ? runtime.resolveBoundWorkspacesFromIdeEnv(
|
|
@@ -8174,7 +8315,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8174
8315
|
// through (and start the runtime) exactly like the warm app would.
|
|
8175
8316
|
// Dynamic import keeps web-shell-static out of the serve fast-path
|
|
8176
8317
|
// static closure (see the import-boundary guards in fast-path.test.ts).
|
|
8177
|
-
isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-
|
|
8318
|
+
isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-BFDESDD4.js").then(
|
|
8178
8319
|
(webShellStatic) => webShellStatic.isPreAuthWebShellRequest(req)
|
|
8179
8320
|
) : void 0
|
|
8180
8321
|
});
|
|
@@ -8194,7 +8335,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8194
8335
|
);
|
|
8195
8336
|
}
|
|
8196
8337
|
const channelValidationSettingsRuntime = opts.channelSelection ? await loadSettingsRuntimeModules() : void 0;
|
|
8197
|
-
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-
|
|
8338
|
+
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-CAUCREG2.js") : void 0;
|
|
8198
8339
|
const channelValidationTrustSnapshot = channelValidationTrustPolicy ? await channelValidationTrustPolicy.readDaemonTrustPolicySnapshot() : void 0;
|
|
8199
8340
|
const resolveChannelWorkspaceGroupsAtListen = /* @__PURE__ */ __name(() => {
|
|
8200
8341
|
if (!opts.channelSelection || !channelValidationSettingsRuntime || !channelRuntime) {
|
|
@@ -8749,8 +8890,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8749
8890
|
const workerDaemonUrl = formatChannelWorkerDaemonUrl(
|
|
8750
8891
|
workerHostname,
|
|
8751
8892
|
actualPort,
|
|
8752
|
-
tlsOptions !== void 0
|
|
8753
|
-
typeof addr === "object" && addr && (addr.family === "IPv4" || addr.family === "IPv6") ? addr.family : void 0
|
|
8893
|
+
tlsOptions !== void 0
|
|
8754
8894
|
);
|
|
8755
8895
|
(deps.channelWorkerUrlCertifier ?? assertChannelWorkerDaemonUrlIsLocal)(workerDaemonUrl, workerHostname);
|
|
8756
8896
|
if (tlsOptions && tlsCertPath && process.env["NODE_TLS_REJECT_UNAUTHORIZED"] === "0") {
|
|
@@ -9291,6 +9431,18 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
9291
9431
|
writeStdoutLine(
|
|
9292
9432
|
`qwen serve listening on ${url} (mode=${opts.mode}, workspace=${boundWorkspace})`
|
|
9293
9433
|
);
|
|
9434
|
+
const boundAddress = typeof addr === "object" && addr ? addr.address : opts.hostname;
|
|
9435
|
+
if (token) {
|
|
9436
|
+
void printRemoteQuickstart({
|
|
9437
|
+
bind: opts.hostname,
|
|
9438
|
+
boundAddress,
|
|
9439
|
+
port: actualPort,
|
|
9440
|
+
tls: Boolean(tlsOptions),
|
|
9441
|
+
token,
|
|
9442
|
+
generated: generatedToken,
|
|
9443
|
+
web: webShellMounted
|
|
9444
|
+
});
|
|
9445
|
+
}
|
|
9294
9446
|
writeStderrLine(
|
|
9295
9447
|
`qwen serve: bound to workspace ${JSON.stringify(boundWorkspace)}`
|
|
9296
9448
|
);
|