@qwen-code/qwen-code 0.22.2 → 0.22.3-nightly.20260831.3a0c4c6108
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/computer-use/SKILL.md +3 -3
- package/bundled/qc-helper/docs/common-workflow.md +32 -0
- package/bundled/qc-helper/docs/configuration/auth.md +6 -6
- package/bundled/qc-helper/docs/configuration/model-providers.md +4 -2
- package/bundled/qc-helper/docs/configuration/settings.md +47 -44
- package/bundled/qc-helper/docs/extension/introduction.md +1 -1
- package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
- package/bundled/qc-helper/docs/features/auto-mode.md +34 -17
- package/bundled/qc-helper/docs/features/channels/dws.md +2 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +36 -3
- package/bundled/qc-helper/docs/features/code-review.md +5 -5
- package/bundled/qc-helper/docs/features/commands.md +41 -0
- package/bundled/qc-helper/docs/features/computer-use.md +2 -2
- package/bundled/qc-helper/docs/features/hooks.md +6 -2
- package/bundled/qc-helper/docs/features/memory.md +1 -0
- package/bundled/qc-helper/docs/features/tool-use-summaries.md +1 -1
- package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +17 -7
- package/bundled/qc-helper/docs/qwen-serve.md +59 -55
- package/bundled/review/SKILL.md +90 -31
- package/bundled/review/references/persistence.md +7 -3
- package/bundled/review/references/posting.md +11 -5
- package/chunks/MaxSizedBox-IHRTWGSY.js +115 -0
- package/chunks/{StandaloneSessionPicker-AVLI6VJP.js → StandaloneSessionPicker-TLVWVTJ7.js} +88 -85
- package/chunks/{acp-startup-profiler-GNYAL6LI.js → acp-startup-profiler-M4X5F3VK.js} +2 -2
- package/chunks/{acpAgent-MXEAN54C.js → acpAgent-7I5LLPP3.js} +1563 -407
- package/chunks/agent-4Z4NTJXD.js +99 -0
- package/chunks/agent-headless-TVUJXQWU.js +89 -0
- package/chunks/{anthropicContentGenerator-HGMBACVE.js → anthropicContentGenerator-VSSPG7XV.js} +84 -55
- package/chunks/{artifact-tool-5YT4QF7Y.js → artifact-tool-TEYW6I4A.js} +11 -3
- package/chunks/{askUserQuestion-4SWJY65V.js → askUserQuestion-PYNBWV63.js} +45 -7
- package/chunks/bridge-EVURP4NO.js +122 -0
- package/chunks/{ca-7HPYOYSZ.js → ca-BNU7YNDE.js} +3 -0
- package/chunks/{channel-management-service-X4AZ6IXX.js → channel-management-service-IDBNYSFW.js} +6 -6
- package/chunks/channel-settings-store-MZNXRKVI.js +125 -0
- package/chunks/{channel-worker-group-27HMGD5S.js → channel-worker-group-ZLP5SJHT.js} +7 -7
- package/chunks/{channel-worker-manager-QEGX646Z.js → channel-worker-manager-FG5377T2.js} +7 -7
- package/chunks/{channel-worker-supervisor-UEW2WWCC.js → channel-worker-supervisor-HDVE4ADS.js} +4 -4
- package/chunks/{chunk-PPKZ7JOE.js → chunk-22UH7VTP.js} +1 -1
- package/chunks/chunk-24FVUD5P.js +49 -0
- package/chunks/{chunk-CMHFCLBU.js → chunk-26SIKQIC.js} +1 -1
- package/chunks/{chunk-5PA6UEYA.js → chunk-3452WXOK.js} +4 -1
- package/chunks/{chunk-SFPGAQUL.js → chunk-373DQUVA.js} +72 -31
- package/chunks/{chunk-H2WDGQ6D.js → chunk-3AKCBZVW.js} +3 -3
- package/chunks/{chunk-LXIBMVRN.js → chunk-3CZGSTZX.js} +15 -9
- package/chunks/{chunk-JVPFTDBK.js → chunk-3EGEBDTW.js} +1 -1
- package/chunks/{chunk-K2NQPH5D.js → chunk-3NQCZMUB.js} +79 -5
- package/chunks/{chunk-E7REAOTN.js → chunk-47ECGEJC.js} +4 -0
- package/chunks/{chunk-WKK5BQNP.js → chunk-4P7PPAHN.js} +45 -421
- package/chunks/chunk-4VQBQLIZ.js +293 -0
- package/chunks/{chunk-4JWNNLPT.js → chunk-5FGWVPCM.js} +4 -4
- package/chunks/{chunk-ZFKOCECU.js → chunk-5ICKESC3.js} +2 -2
- package/chunks/{chunk-3I6UTTDX.js → chunk-67AY5D3M.js} +20 -20
- package/chunks/chunk-6HUXPLB5.js +110 -0
- package/chunks/{chunk-BRVWYMKV.js → chunk-6MBXY6WM.js} +1 -1
- package/chunks/{chunk-6LFTG244.js → chunk-6NWPR2EB.js} +19 -9
- package/chunks/chunk-6OO7QEWV.js +2581 -0
- package/chunks/{chunk-TWSKM647.js → chunk-6VHIWUJP.js} +1 -1
- package/chunks/{chunk-RJC5EIKY.js → chunk-6YXNJXQW.js} +7 -5
- package/chunks/{chunk-TPI7O7HR.js → chunk-7DDTI7Q3.js} +1 -1
- package/chunks/{chunk-KGJGEEVR.js → chunk-7FA2II6K.js} +10 -1
- package/chunks/chunk-7J6OTNGO.js +424 -0
- package/chunks/{chunk-NIFYWDYN.js → chunk-7TBU7PU2.js} +1 -1
- package/chunks/{chunk-3FDFA4MZ.js → chunk-7XICSE62.js} +3 -3
- package/chunks/{chunk-V2NDP3I4.js → chunk-7XL4WRXM.js} +2 -2
- package/chunks/{chunk-F7TNAPZ4.js → chunk-AAX236AR.js} +45 -11
- package/chunks/{chunk-T32W2JHI.js → chunk-ACZ4YRYK.js} +6 -6
- package/chunks/chunk-ADJD4LZF.js +210 -0
- package/chunks/{chunk-JWALNCLT.js → chunk-AF3QB6OL.js} +1 -1
- package/chunks/{chunk-P2SU6ZTI.js → chunk-AI35S34R.js} +3 -3
- package/chunks/{chunk-OIP7C4FE.js → chunk-AKNQMSL2.js} +5 -5
- package/chunks/{chunk-6CGL7E7G.js → chunk-AN3KFCNH.js} +2 -2
- package/chunks/{chunk-ABS25QER.js → chunk-ANVG3BVV.js} +1 -1
- package/chunks/chunk-AYYKUUKP.js +972 -0
- package/chunks/chunk-B2RIIK3K.js +346 -0
- package/chunks/{chunk-F5SZP77N.js → chunk-BBYTY46C.js} +153 -112
- package/chunks/{chunk-XRSOI3DL.js → chunk-BE5FGT5Z.js} +1 -1
- package/chunks/{chunk-BGXZBI5B.js → chunk-BHTYRHJF.js} +3 -2
- package/chunks/{chunk-CSMI4FP5.js → chunk-BSJOBW4U.js} +1 -1
- package/chunks/{chunk-Z7TGYN5F.js → chunk-BXNKREX7.js} +3 -3
- package/chunks/{chunk-4MQEPP3Y.js → chunk-BY24DZ4J.js} +5 -119
- package/chunks/{chunk-5XBFCMWD.js → chunk-CAZADEU7.js} +17 -9
- package/chunks/chunk-CHEIIBT3.js +40 -0
- package/chunks/{chunk-BBWV7ONL.js → chunk-CM4F4JBB.js} +6 -6
- package/chunks/{chunk-CAJTKR6W.js → chunk-D7D3HSYQ.js} +6 -5
- package/chunks/{chunk-3DXFGHAJ.js → chunk-DBTMP3P4.js} +213 -185
- package/chunks/chunk-DJBQCO2E.js +842 -0
- package/chunks/{chunk-RXFQM6FQ.js → chunk-DMEUXLSS.js} +16 -1
- package/chunks/{chunk-3AFMQUTI.js → chunk-E4JNFXNI.js} +3 -3
- package/chunks/{chunk-UHQFIS7N.js → chunk-EAHOJF6V.js} +28 -4
- package/chunks/{chunk-OIVXBW3W.js → chunk-ED7DD7MV.js} +3 -3
- package/chunks/{chunk-6DIGWMGT.js → chunk-EIJT2PQ6.js} +2 -2
- package/chunks/{chunk-XQFT3QUF.js → chunk-ENYUKMFK.js} +1 -1
- package/chunks/{chunk-CQH5KTKC.js → chunk-ERHAMGAA.js} +1 -1
- package/chunks/{chunk-IOPCFOTF.js → chunk-ERRJA23L.js} +3 -3
- package/chunks/{chunk-LDP5OD6N.js → chunk-EU2B4P3D.js} +12 -12
- package/chunks/{chunk-W5MJJ2V7.js → chunk-FHPYRXRH.js} +1 -1
- package/chunks/{chunk-IZIVM7LZ.js → chunk-FIWZOMBF.js} +3 -3
- package/chunks/{chunk-4HV6HH33.js → chunk-FPMQT2YY.js} +9 -9
- package/chunks/{chunk-Z7VOMGDC.js → chunk-FTJMWDND.js} +0 -24
- package/chunks/{chunk-L2M46FP5.js → chunk-FXUSWLBF.js} +225 -12
- package/chunks/{chunk-VVW4ZNFY.js → chunk-GB4UKWY5.js} +16 -8
- package/chunks/{chunk-PKAYJDB3.js → chunk-GCUR24KK.js} +22 -4
- package/chunks/{chunk-DIMEPKCW.js → chunk-GDXSXL3H.js} +11 -1
- package/chunks/{chunk-7JPW6IYH.js → chunk-GN422P4J.js} +1 -1
- package/chunks/{chunk-66KDY3LV.js → chunk-GS7XT345.js} +3 -3
- package/chunks/{chunk-PFCQ62V4.js → chunk-H2A2GJGL.js} +6 -6
- package/chunks/{chunk-Z7FLBQPR.js → chunk-H5GPPDGY.js} +8 -8
- package/chunks/{chunk-CPGJJJLU.js → chunk-HDMKCJHI.js} +1 -1
- package/chunks/{chunk-6PJOTWAN.js → chunk-HT5S5TRQ.js} +1 -1
- package/chunks/{chunk-Z4X5MTRT.js → chunk-HWVUSYSN.js} +5 -12
- package/chunks/{chunk-V4QXXQJ2.js → chunk-I75VKFCJ.js} +4 -4
- package/chunks/{chunk-NU7RKEZR.js → chunk-IBMUI5EV.js} +3 -3
- package/chunks/{chunk-4J657AJR.js → chunk-ID33ZRWH.js} +42 -42
- package/chunks/{chunk-R4PMVSR5.js → chunk-IIFL7QDN.js} +30 -192
- package/chunks/{chunk-MQM5PJML.js → chunk-IVUWTA2D.js} +1 -1
- package/chunks/{chunk-E55H6BZ7.js → chunk-IXEZHTDR.js} +1616 -151
- package/chunks/{chunk-XF63PKEN.js → chunk-IXHV5MIC.js} +1 -1
- package/chunks/{chunk-JHS74YAB.js → chunk-J4Y3QJHF.js} +3 -1
- package/chunks/{chunk-MIIVI25Q.js → chunk-JDIO45X7.js} +3 -3
- package/chunks/{chunk-QFCDF5PL.js → chunk-JHN7UIDW.js} +1 -1
- package/chunks/{chunk-FDY5RMGH.js → chunk-JLSZT354.js} +2 -2
- package/chunks/chunk-JMRE4WJQ.js +1849 -0
- package/chunks/{chunk-FY76G3G5.js → chunk-JOTYTYYW.js} +6 -6
- package/chunks/{chunk-TRZTNIQ6.js → chunk-JOWQD4LO.js} +3 -3
- package/chunks/{chunk-KEKZFOL6.js → chunk-JPKTAQS3.js} +1 -1
- package/chunks/chunk-JS73NNWF.js +30 -0
- package/chunks/chunk-JX6XHPTX.js +26 -0
- package/chunks/{chunk-5JTIYALA.js → chunk-JZWOCUZ3.js} +1 -1
- package/chunks/{chunk-3JGZSIDA.js → chunk-KFN2IZYR.js} +3 -3
- package/chunks/{chunk-23RFD54N.js → chunk-KHP66DFN.js} +1 -1
- package/chunks/{chunk-AGR5UROZ.js → chunk-KUDI54QQ.js} +23 -33
- package/chunks/{chunk-3SGB2UHX.js → chunk-L2OKAIUK.js} +28 -16
- package/chunks/{chunk-BXDAPVQU.js → chunk-L6CUJZDG.js} +28 -4
- package/chunks/chunk-LAUEEBDL.js +277 -0
- package/chunks/{chunk-BNMF3K5X.js → chunk-LFAR7CPW.js} +55 -39
- package/chunks/{chunk-Y3QL45LS.js → chunk-LKODFJRD.js} +9 -9
- package/chunks/{chunk-BWORX6FA.js → chunk-LMMHS3RS.js} +1 -1
- package/chunks/{chunk-UTLCH2FK.js → chunk-LYSZVCCD.js} +10 -7
- package/chunks/{chunk-F6FV3C5K.js → chunk-MBZ5ORJB.js} +264 -283
- package/chunks/{chunk-L6YT5H34.js → chunk-MJBHSZEJ.js} +5 -5
- package/chunks/{chunk-B7CDU2SL.js → chunk-MOF6VZN2.js} +18 -21
- package/chunks/{chunk-6LFJEACX.js → chunk-MZ5A5PQW.js} +7 -7
- package/chunks/chunk-MZYWNU66.js +149 -0
- package/chunks/{chunk-2TNL5KPM.js → chunk-N4QWUPDM.js} +7 -0
- package/chunks/{chunk-5O72BNDD.js → chunk-ND7TQQPE.js} +9 -9
- package/chunks/{chunk-QP4C6WCE.js → chunk-NGKLMNWN.js} +3 -3
- package/chunks/{chunk-JSC3H3TD.js → chunk-NT5XIL5H.js} +46 -18
- package/chunks/{chunk-KUX5D6DK.js → chunk-NT7LXVV5.js} +11010 -11138
- package/chunks/{chunk-PDQGMSZK.js → chunk-ODZF64DM.js} +1 -1
- package/chunks/{chunk-FBSSIAAQ.js → chunk-OE5AQVNB.js} +8 -8
- package/chunks/chunk-OHU2H5CS.js +130 -0
- package/chunks/{chunk-2K6ORIHJ.js → chunk-OKMDOATP.js} +13 -13
- package/chunks/{chunk-JB4JIVTJ.js → chunk-OKTNXDVO.js} +1 -1
- package/chunks/{chunk-XDLEZ5HX.js → chunk-OQYXJK2V.js} +1 -1
- package/chunks/{chunk-EFUM7RVY.js → chunk-OSTQZIOY.js} +944 -18
- package/chunks/{chunk-VQUGEVGR.js → chunk-OTTNXUT5.js} +1 -1
- package/chunks/{chunk-T3WXYEZ4.js → chunk-PB7JBAHF.js} +53 -54
- package/chunks/{chunk-WAOIHTJS.js → chunk-PDAKFU7M.js} +1 -1
- package/chunks/{chunk-43GGFFLY.js → chunk-PDXYZBBQ.js} +3 -3
- package/chunks/{chunk-4CMJKUND.js → chunk-PNIGAVY6.js} +67 -2
- package/chunks/{chunk-SAH4BD2J.js → chunk-PQEISIKS.js} +67 -0
- package/chunks/{chunk-4CDSK5AZ.js → chunk-PWR2NQBS.js} +6 -6
- package/chunks/{chunk-YTDVNSUQ.js → chunk-QAK5475D.js} +1 -1
- package/chunks/{chunk-IJKTMLBE.js → chunk-QE7DTCLX.js} +1 -1
- package/chunks/{chunk-SMPR7SPO.js → chunk-QJNDUTOL.js} +45 -239
- package/chunks/{chunk-C6K43ZDE.js → chunk-QTMPM6RC.js} +16 -10
- package/chunks/{chunk-P5GGM4KS.js → chunk-RAEEQEC5.js} +5 -5
- package/chunks/{chunk-XDFHY4R3.js → chunk-RGEV5AUD.js} +242 -14
- package/chunks/{chunk-M6FOJXW3.js → chunk-RKW36UWC.js} +1 -1
- package/chunks/{chunk-RIEFGNTP.js → chunk-RLSPPTWH.js} +5119 -683
- package/chunks/{chunk-PDMJ3KGS.js → chunk-RT4QNQ5P.js} +3 -3
- package/chunks/{chunk-SJ3ZUWFK.js → chunk-RVCGAHC7.js} +4 -26
- package/chunks/{chunk-77RG5SFQ.js → chunk-RY7DL5IF.js} +11 -6
- package/chunks/{chunk-4FTKQNWJ.js → chunk-S2T7H5MI.js} +182 -3
- package/chunks/{chunk-EOGELB3H.js → chunk-SDCHI64N.js} +4 -4
- package/chunks/{chunk-EKSCLBBF.js → chunk-SMJYTKTB.js} +23 -5
- package/chunks/{chunk-MZS7GEC7.js → chunk-SMRDCANI.js} +1 -1
- package/chunks/{chunk-43UYNAWX.js → chunk-T3TL6S3B.js} +4 -4
- package/chunks/{chunk-4K7NQDCG.js → chunk-T4EFG2P5.js} +18 -9
- package/chunks/{chunk-IK5BW3CS.js → chunk-T4RMUTTT.js} +16 -5
- package/chunks/{chunk-L6BZRIUL.js → chunk-TBJ3SNS3.js} +183 -5
- package/chunks/{chunk-CCBZDVUA.js → chunk-TNMOFNT4.js} +133 -122
- package/chunks/{chunk-Y6LSMB6J.js → chunk-TV7BJ7TX.js} +1 -1
- package/chunks/{chunk-G34IR3D6.js → chunk-U5RTYI7D.js} +102 -146
- package/chunks/{chunk-TTX2JUE6.js → chunk-U6D2PPMN.js} +1 -1
- package/chunks/{chunk-D5LUXLUH.js → chunk-UJ4DUYIH.js} +18 -4
- package/chunks/{chunk-A7YP63XN.js → chunk-UKB2TZAO.js} +5 -5
- package/chunks/{chunk-VTHREBQM.js → chunk-UKYXYWI2.js} +2 -2
- package/chunks/{chunk-2NYCN6F2.js → chunk-UVYKCRJZ.js} +46 -29
- package/chunks/{chunk-HVEYF6VT.js → chunk-UXEW7TQS.js} +2 -2
- package/chunks/{chunk-HVQ3B7FF.js → chunk-V4HN35IF.js} +44 -7
- package/chunks/chunk-VGHZT6JR.js +51 -0
- package/chunks/{chunk-V5J4J5TP.js → chunk-VYSZUQGU.js} +2 -20
- package/chunks/{chunk-6IUNAPLR.js → chunk-W4BDHLRT.js} +3 -3
- package/chunks/{chunk-Q26AYA62.js → chunk-W7KWB6AH.js} +7 -4
- package/chunks/chunk-WLEYH7CD.js +332 -0
- package/chunks/{chunk-RU7BK6B3.js → chunk-X7C7KFWA.js} +2 -2
- package/chunks/{chunk-YRLW2MSX.js → chunk-XBVNNDPK.js} +11 -4
- package/chunks/{chunk-BFPESSTR.js → chunk-XEAAO654.js} +1 -1
- package/chunks/{chunk-JU4EEXC7.js → chunk-XLENZQXH.js} +2 -2
- package/chunks/{chunk-JSHHYW6T.js → chunk-XPDKSOVW.js} +69 -64
- package/chunks/chunk-YDQ4OCDK.js +1222 -0
- package/chunks/{chunk-ZU4UDIWX.js → chunk-YKADANK6.js} +6 -7
- package/chunks/{chunk-JCQD3INC.js → chunk-YNG7XAJU.js} +3 -3
- package/chunks/{chunk-O2UN57NX.js → chunk-YOFULAHO.js} +19 -2
- package/chunks/{chunk-BAJKAAOY.js → chunk-YOMKOM7E.js} +4892 -1504
- package/chunks/{chunk-ERFDKH32.js → chunk-YPISTYEI.js} +8 -7
- package/chunks/{chunk-TGWAQ5RB.js → chunk-ZBDYI7VM.js} +6900 -6882
- package/chunks/{chunk-OZ6KS6KW.js → chunk-ZGCKTAL5.js} +6 -1
- package/chunks/chunk-ZHO2CW6D.js +205 -0
- package/chunks/{chunk-DZWPESIF.js → chunk-ZQ3FKEWA.js} +3 -3
- package/chunks/{chunk-7EQQR46F.js → chunk-ZVP4PWBU.js} +1 -1
- package/chunks/{chunk-7UYV53BC.js → chunk-ZYPJ7HVZ.js} +1 -1
- package/chunks/config-utils-NNUPVGEC.js +118 -0
- package/chunks/contextCommand-S3TPCDM5.js +111 -0
- package/chunks/{core-runtime-677KFX6Q.js → core-runtime-NASPCSQX.js} +66 -63
- package/chunks/{create-sub-session-23ITIELI.js → create-sub-session-36TNCHCP.js} +3 -3
- package/chunks/{create-sub-session-JKZAYZX7.js → create-sub-session-DS4BJLYZ.js} +97 -68
- package/chunks/{cron-create-KJ4IY6PP.js → cron-create-QXHTYUTO.js} +4 -4
- package/chunks/{cron-delete-MBLQCAYY.js → cron-delete-WV2BM42M.js} +4 -4
- package/chunks/{cron-list-DWH2PQ47.js → cron-list-7KVNBLZ7.js} +4 -4
- package/chunks/{daemon-MJQUO7RA.js → daemon-UCVUHPJD.js} +723 -90
- package/chunks/{daemon-git-worktree-guard-6MVAAZZZ.js → daemon-git-worktree-guard-ATXVQPS3.js} +63 -60
- package/chunks/daemon-status-provider-UI3GBTMO.js +121 -0
- package/chunks/daemon-trust-policy-SUCBJ2CA.js +117 -0
- package/chunks/{daemon-trust-policy-monitor-B5U6TQX5.js → daemon-trust-policy-monitor-3LM5RQNS.js} +71 -68
- package/chunks/{de-X6HLSIFE.js → de-T4BLOKEC.js} +3 -0
- package/chunks/deferred-core-runtime-SCOJLVYG.js +119 -0
- package/chunks/{display-image-BE7I6ZB6.js → display-image-Z4VBQDEJ.js} +5 -5
- package/chunks/{dist-TJUDJTCB.js → dist-5423MG3D.js} +411 -91
- package/chunks/{dist-ILDBUWDB.js → dist-7WDZYMWV.js} +43 -25
- package/chunks/{dist-ZBVOXSKF.js → dist-FLJLHASF.js} +219 -121
- package/chunks/{dist-QODVOVWI.js → dist-GPSRNVVP.js} +43 -35
- package/chunks/{dist-DJBNNPLN.js → dist-LY66XNUL.js} +10 -3
- package/chunks/{dist-7CKN54NL.js → dist-S3BKCTWF.js} +205 -89
- package/chunks/{dist-UQUFZDIY.js → dist-SDKHGH5O.js} +41 -20
- package/chunks/{dist-4Q7NTUNB.js → dist-WAUO5OMN.js} +46 -22
- package/chunks/{dist-SATKXKUR.js → dist-WIVVPE7M.js} +28 -14
- package/chunks/earlyInputCapture-INWJ2STR.js +112 -0
- package/chunks/{edit-BSV6YRVW.js → edit-B7ZRRGAE.js} +51 -49
- package/chunks/{en-YLXBXM4Z.js → en-E4AYTX6H.js} +3 -0
- package/chunks/{enter-worktree-MQXFFPKM.js → enter-worktree-SPZHEETQ.js} +7 -7
- package/chunks/{enterPlanMode-PKNF35FE.js → enterPlanMode-S554IKJ2.js} +55 -53
- package/chunks/environment-25ADH4Y6.js +134 -0
- package/chunks/errors-G2I6LFTW.js +118 -0
- package/chunks/{exit-worktree-L344UY7K.js → exit-worktree-AWUXAMAM.js} +7 -7
- package/chunks/exitPlanMode-ZFH4OYPM.js +87 -0
- package/chunks/{fast-path-773PV7PU.js → fast-path-WZHVZ2ER.js} +8 -7
- package/chunks/{fast-path-settings-XMFBYFUH.js → fast-path-settings-NILM6QZL.js} +3 -3
- package/chunks/{fr-FTZWF462.js → fr-BGHGYX6A.js} +3 -0
- package/chunks/{glob-CZHOWUEA.js → glob-UOVDMBUP.js} +50 -48
- package/chunks/{goal-tools-YZQJXTGH.js → goal-tools-7TNK5ZHC.js} +5 -4
- package/chunks/{grep-5GPICQBU.js → grep-LHYJ5V2N.js} +9 -7
- package/chunks/handleAutoUpdate-4MZ45DZY.js +114 -0
- package/chunks/i18n-KWUEI4DS.js +129 -0
- package/chunks/{image-gen-HAYOEQ4O.js → image-gen-YZDVO5YS.js} +8 -10
- package/chunks/initializer-2NBROGMG.js +118 -0
- package/chunks/installationInfo-YKUSY3ZB.js +112 -0
- package/chunks/{ja-2GL5FKYJ.js → ja-G3FTD5XE.js} +3 -0
- package/chunks/{keychain-token-storage-37XPR34V.js → keychain-token-storage-REZVMJA6.js} +2 -2
- package/chunks/list-W2WV3COM.js +121 -0
- package/chunks/list-agents-PMVMHNY7.js +128 -0
- package/chunks/{gemini-IP4FJAP5.js → llm-NPPHLIJI.js} +162 -133
- package/chunks/{geminiContentGenerator-PUNEBWJW.js → llm-content-generator-YK3WN6XW.js} +29 -29
- package/chunks/loadedSettingsAdapter-2P7DFWUR.js +115 -0
- package/chunks/{loggingContentGenerator-2GGZNGLG.js → loggingContentGenerator-QYYYGU6V.js} +318 -35
- package/chunks/{loop-wakeup-XJFONSQ7.js → loop-wakeup-EBM4F5MZ.js} +5 -5
- package/chunks/{ls-3VAT2J7A.js → ls-F6TRX3DD.js} +4 -4
- package/chunks/{lsp-5W7IRUBH.js → lsp-QYTOS2FI.js} +2 -2
- package/chunks/{managed-npm-update-5TEV2E3J.js → managed-npm-update-UMC4NBWW.js} +64 -61
- package/chunks/mcp-OFI6XDP2.js +115 -0
- package/chunks/{monitor-FI7PY36Z.js → monitor-QX3BM3JY.js} +50 -48
- package/chunks/nonInteractiveCli-NVRMD5MN.js +193 -0
- package/chunks/{notebook-edit-TPGMGBST.js → notebook-edit-AAILDPSV.js} +51 -49
- package/chunks/{open-with-auth-4UI3KHUR.js → open-with-auth-D6JD6LDS.js} +4 -4
- package/chunks/{openaiContentGenerator-SUCYANUZ.js → openaiContentGenerator-53PB3CMN.js} +27 -29
- package/chunks/pidfile-5ACKG2LI.js +116 -0
- package/chunks/process-registry-OAEG6WGC.js +662 -0
- package/chunks/{processUtils-IQZBYWSB.js → processUtils-2BCDO3DZ.js} +2 -2
- package/chunks/prompt-terminal-ledger-3RKW73A2.js +110 -0
- package/chunks/{pt-XN2YWJVM.js → pt-D73IFYT7.js} +3 -0
- package/chunks/{qwenContentGenerator-J4TXFGJT.js → qwenContentGenerator-N4LLWDPH.js} +56 -54
- package/chunks/{qwenOAuth2-RF33DNZW.js → qwenOAuth2-7AOCKSOQ.js} +7 -9
- package/chunks/{read-file-QE2B5FTX.js → read-file-DPAKXHYE.js} +13 -13
- package/chunks/{read-mcp-resource-XD257PGJ.js → read-mcp-resource-R4NO75DW.js} +2 -2
- package/chunks/{record-artifact-RZGZBENU.js → record-artifact-2EAYLAL5.js} +4 -4
- package/chunks/{report-findings-Q3SYKKW5.js → report-findings-Y4MSHDS3.js} +9 -5
- package/chunks/{request-shutdown-BCLA3JV2.js → request-shutdown-DWRMGTMB.js} +8 -7
- package/chunks/resumeHistoryUtils-3JQORXAK.js +123 -0
- package/chunks/ripGrep-AHF5QCI7.js +39 -0
- package/chunks/{ru-OLTMFJEW.js → ru-QMISLKRH.js} +3 -0
- package/chunks/{run-qwen-serve-TPHZMSXJ.js → run-qwen-serve-3LKV7KDC.js} +728 -256
- package/chunks/runtime-66F4W3IA.js +153 -0
- package/chunks/scheduled-tasks-2NVKS5Q2.js +132 -0
- package/chunks/scheduler-JNV7T3ZO.js +127 -0
- package/chunks/{sdk-exporters-http-KCJ4ZFG7.js → sdk-exporters-http-MFIWD23D.js} +2 -2
- package/chunks/{sdk-impl-HLSEDAEP.js → sdk-impl-2RXJ4Q6X.js} +11 -5
- package/chunks/send-message-WPZRCJOB.js +442 -0
- package/chunks/serve-GP2UNRP7.js +123 -0
- package/chunks/{server-DFUSSSHI.js → server-7W6C3SOW.js} +5233 -3623
- package/chunks/{session-3TEHNENZ.js → session-PZLBAQGG.js} +125 -118
- package/chunks/session-pr-refresh-OIVL3U3Z.js +367 -0
- package/chunks/{settings-VOZYKLTT.js → settings-ZOHIQWYK.js} +70 -67
- package/chunks/shell-FWZT6IUR.js +97 -0
- package/chunks/{skill-FEOKFX26.js → skill-RTQC2YGA.js} +121 -65
- package/chunks/skill-settings-AKMIXFSJ.js +123 -0
- package/chunks/spawnChannel-ZP23JL6O.js +116 -0
- package/chunks/standalone-update-P2Q5H4ZU.js +123 -0
- package/chunks/{startInteractiveUI-WHJPFOGH.js → startInteractiveUI-NSA6QPQZ.js} +2018 -1526
- package/chunks/{stdioHelpers-7A2EE64Z.js → stdioHelpers-AY6XCDY2.js} +3 -1
- package/chunks/{syntheticOutput-ML43GEFN.js → syntheticOutput-5URSQLIS.js} +3 -3
- package/chunks/{task-create-TMSV7RD5.js → task-create-3EXVDG3G.js} +12 -12
- package/chunks/{task-list-W55RBFRX.js → task-list-PIBYNSE7.js} +5 -6
- package/chunks/{task-stop-CXEH5L2D.js → task-stop-IV3BYWJC.js} +2 -2
- package/chunks/{task-update-N536I4GQ.js → task-update-H5BPDS5Y.js} +13 -14
- package/chunks/{team-create-QYSWCYCL.js → team-create-53T42W37.js} +56 -55
- package/chunks/{team-delete-FJRFX33M.js → team-delete-X3WPELS6.js} +25 -8
- package/chunks/{team-plan-approval-P7DAD644.js → team-plan-approval-D45ZC5OE.js} +50 -48
- package/chunks/terminal-image-renderer-FCRUWT6C.js +121 -0
- package/chunks/theme-manager-MHNPEDP7.js +107 -0
- package/chunks/{todoWrite-WDJNQEMW.js → todoWrite-A5IOZZ3P.js} +4 -4
- package/chunks/{tool-search-F2EMIAPV.js → tool-search-6RPBGGUX.js} +27 -23
- package/chunks/total-session-admission-MGV56XDK.js +117 -0
- package/chunks/trustedFolders-QJYEFMTU.js +127 -0
- package/chunks/{types-WYCFCEHR.js → types-HKLPXZB3.js} +1 -3
- package/chunks/{update-relaunch-4GF3OXMB.js → update-relaunch-ZDMQX63C.js} +6 -6
- package/chunks/updateCheck-4QZWCGP6.js +123 -0
- package/chunks/useAutoAcceptIndicator-DLIQN256.js +125 -0
- package/chunks/{validateNonInterActiveAuth-BPPA563H.js → validateNonInterActiveAuth-HGTG7AEK.js} +114 -107
- package/chunks/{version-ANP4TS6O.js → version-CPAZMC4B.js} +1 -1
- package/chunks/{web-fetch-QJADSAH3.js → web-fetch-N4K5M3M4.js} +16 -18
- package/chunks/{web-search-7TTQKEKM.js → web-search-4VZKM5SF.js} +9 -11
- package/chunks/{web-shell-static-A6QMUNNV.js → web-shell-static-PW7OEDQO.js} +3 -2
- package/chunks/{workflow-5XN6XSOT.js → workflow-2ALQKTHG.js} +229 -146
- package/chunks/workspace-providers-status-5JM4CB6R.js +119 -0
- package/chunks/{workspace-registration-store-XKVW2YVH.js → workspace-registration-store-RNMFVCH7.js} +2 -1
- package/chunks/workspace-registry-6EULAPZC.js +126 -0
- package/chunks/workspace-runtime-coordinator-IRI2DRCJ.js +127 -0
- package/chunks/workspace-service-SETHN4WE.js +131 -0
- package/chunks/workspace-skills-status-4D4EUEQU.js +118 -0
- package/chunks/{workspace-trust-reconciler-KLGOB53D.js → workspace-trust-reconciler-4LR3CDL4.js} +77 -76
- package/chunks/write-file-45GWPSOI.js +92 -0
- package/chunks/{zh-UNY63FR3.js → zh-2BQ7P6OD.js} +3 -0
- package/chunks/{zh-TW-RPTMRTHG.js → zh-TW-UFXRZTXX.js} +3 -0
- package/chunks/{zoom-image-6ASG6J4C.js → zoom-image-K6IQUKRC.js} +13 -13
- package/cli.js +129 -92
- package/locales/ca.js +6 -0
- package/locales/de.js +6 -0
- package/locales/en.js +6 -0
- package/locales/fr.js +6 -0
- package/locales/ja.js +6 -0
- package/locales/pt.js +6 -0
- package/locales/ru.js +6 -0
- package/locales/zh-TW.js +6 -0
- package/locales/zh.js +6 -0
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-uS-vtfs3.js → abnfDiagram-VCTEODGH-C80OZcPP.js} +1 -1
- package/web-shell/assets/{arc-BSTnk5pu.js → arc-AUqStYgf.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-DCMyiqzy.js → architectureDiagram-5GKGNRK7-CQYOdYla.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-C7_gt0r1.js → blockDiagram-NRAW4CY4-lYKlFysy.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BeQg2L8B.js → c4Diagram-UCG6FXSJ-BoS23iIp.js} +1 -1
- package/web-shell/assets/channel-B0ovOJeK.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-DnV9bKBe.js → chunk-2Q5K7J3B-DLLooL1E.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-rT1GAcT7.js → chunk-5VM5RSS4-kPfJxScY.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-BcgSxqGA.js → chunk-F27PBJKO-CVGFBqkD.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-Bw1ZhyZq.js → chunk-G27WJ6UU-CnM_kOVV.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-D4iDw-96.js → chunk-JWPE2WC7-Cj-ajOkT.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-D3MB3GTZ.js → chunk-LCL6LL3I-8L5c-wFo.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-Cep2ndrS.js → chunk-POPQ4Y6H-DsXTxpvL.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-BuahMHJc.js → chunk-SVP7TREG-DU5GE1_z.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-BdujIvJY.js → chunk-XXDRQBXY-D2IIWZKt.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DMll2-6_.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DMll2-6_.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-CGLLUbF8.js → cose-bilkent-JH36ORCC-CF_txUJr.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-D6kDsRSh.js → cynefin-OW5HDTMX-DEZ-My-Z.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-CCy78qZx.js → cynefinDiagram-5FMLGOSQ-BV7EKUS6.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-D5gJuJsf.js → dagre-3AP2YEHR-JGIX0G4H.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-ZwEZ5W__.js → diagram-S7CK7UJ4-DdUY7q6A.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-B036APjv.js → diagram-UQ7AKVKN-fhzRZ19v.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-BfDJ57Fq.js → diagram-VSXAHHWV-BOgOex6q.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-Wha0p5rT.js → diagram-VX7I27RA-C0NknIz6.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-L20bz2K1.js → diagram-Z3DM3KII-C__3mUBX.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-D1ZM0Cp7.js → ebnfDiagram-PWID7BFC-BvPhqycH.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-CMtA19v8.js → erDiagram-SSCWMZ5O-BqzoNoL9.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-D96m326S.js → flowDiagram-A5DVABFB-CJKOre47.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BuHiYG2o.js → ganttDiagram-EL5Y4UJY-C5xZjrp0.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-Ck3NmkSw.js → gitGraphDiagram-WWUBYQGX-C0EjwuPK.js} +1 -1
- package/web-shell/assets/index-B_IPzA0h.js +2020 -0
- package/web-shell/assets/{index-CBGz4Qjl.js → index-C5M93syE.js} +1 -1
- package/web-shell/assets/index-D1OKGQlM.css +36 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-B6DAOyXe.js → infoDiagram-RXCK75RN-BUwzsYOs.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-Bpg-joFo.js → ishikawaDiagram-5VMMS53U-EDJ_DH3V.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-BclrHzGa.js → journeyDiagram-EYS64GPL-BnfcOsS0.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-5gJzNTYG.js → kanban-definition-3QL26DDD-D_ofTVGu.js} +1 -1
- package/web-shell/assets/{layout-CEz_1L8z.js → layout-CBuQFdfZ.js} +1 -1
- package/web-shell/assets/{linear-CBjTq9Hc.js → linear-DRIHtmGv.js} +1 -1
- package/web-shell/assets/{mermaid.core-Dzhbxx_I.js → mermaid.core-CmR5wZH6.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-DQdVqlBF.js → mindmap-definition-FBJOCRG2-BV374olC.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-D1JZlYXL.js → pegDiagram-XKGWAZYB-Bpy1SplK.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-BmkpYL0w.js → pieDiagram-E7YTZNPT-CeZx4hR2.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-DRvD6co5.js → quadrantDiagram-AXDQQJYC-COYKs14h.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CEdjDuoo.js → railroadDiagram-O6MQD6OU-5g2pOeTs.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BCHG-ie8.js → requirementDiagram-EFPCY7ZU-Yn8uPGtF.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-C9cZMnye.js → sankeyDiagram-P5KCCOFB-CTayAGq6.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-DYHRV4zL.js → sequenceDiagram-WJ2MYXX4-BFWDKzUU.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-DlK21aye.js → sizeCapture-X5ZJPWSS-CtErUbj4.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-BrmZssvk.js → stateDiagram-HBIQ2CUA-Co3HFzOd.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-C3gdRjPm.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-D9xfcayR.js → swimlanes-XN3QIQJK-CDZuxzOj.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-C34TGCPZ.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-D4gdDL_d.js → timeline-definition-24CTP7MA-UcNHj8At.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-DdhIExjI.js → vennDiagram-4TSXK5OY-JKR9pVFG.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-C9RS_Zof.js → wardleyDiagram-VM6X3IG4-C4SU-yIW.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-orRgmxWk.js → xychartDiagram-S5SC5T6Z-D_yoWGZ4.js} +1 -1
- package/web-shell/index.html +197 -3
- package/chunks/MaxSizedBox-X5FZSNAJ.js +0 -112
- package/chunks/agent-PJIPDWHB.js +0 -97
- package/chunks/agent-headless-B4JVD7UK.js +0 -87
- package/chunks/bridge-FKZTVIS3.js +0 -121
- package/chunks/channel-settings-store-4UFCLBBG.js +0 -117
- package/chunks/chunk-7DJCPZE3.js +0 -945
- package/chunks/chunk-CPBF7KYF.js +0 -51
- package/chunks/chunk-H72BQNM3.js +0 -645
- package/chunks/chunk-J2OSJFP3.js +0 -202
- package/chunks/chunk-K2OJUPOE.js +0 -78
- package/chunks/chunk-P3QQPMQA.js +0 -19
- package/chunks/chunk-RUGNCYNO.js +0 -699
- package/chunks/chunk-T26EAKDL.js +0 -13
- package/chunks/chunk-ZGXYO7DY.js +0 -3416
- package/chunks/chunk-ZYNTSXWK.js +0 -32
- package/chunks/config-utils-BBOCOGZW.js +0 -113
- package/chunks/contextCommand-EET67MQ2.js +0 -108
- package/chunks/daemon-status-provider-RFKZOK3S.js +0 -119
- package/chunks/daemon-trust-policy-DRZPFB4Q.js +0 -114
- package/chunks/deferred-core-runtime-BBVIOP24.js +0 -116
- package/chunks/earlyInputCapture-2JOMMNQ4.js +0 -109
- package/chunks/environment-MOZMPUHR.js +0 -131
- package/chunks/errors-DMPQVYJL.js +0 -115
- package/chunks/exitPlanMode-UE4FGCY4.js +0 -85
- package/chunks/handleAutoUpdate-SGXKTQM6.js +0 -111
- package/chunks/i18n-B42HKHKH.js +0 -126
- package/chunks/initializer-FB66WYR3.js +0 -115
- package/chunks/installationInfo-Y7AULNMX.js +0 -109
- package/chunks/list-2HWGSVRA.js +0 -118
- package/chunks/list-agents-DI3YFTDT.js +0 -80
- package/chunks/loadedSettingsAdapter-7Y7IEI6T.js +0 -112
- package/chunks/mcp-QGG5NMJJ.js +0 -112
- package/chunks/nonInteractiveCli-4LO2TL72.js +0 -186
- package/chunks/pidfile-JMF2CLMY.js +0 -113
- package/chunks/process-registry-PMJOA5CO.js +0 -172
- package/chunks/prompt-terminal-ledger-DCZO6S7C.js +0 -107
- package/chunks/resumeHistoryUtils-CZ4JRDVW.js +0 -120
- package/chunks/ripGrep-R6B6HWPX.js +0 -39
- package/chunks/runtime-TTIGSBM4.js +0 -150
- package/chunks/scheduled-tasks-QB4ZVUQS.js +0 -129
- package/chunks/scheduler-YRUG22M7.js +0 -124
- package/chunks/send-message-Y5I6NYAM.js +0 -295
- package/chunks/serve-MXXCDAQN.js +0 -120
- package/chunks/shell-6RTKZVMI.js +0 -95
- package/chunks/skill-settings-VA4XVYVL.js +0 -120
- package/chunks/spawnChannel-F6WVP723.js +0 -114
- package/chunks/standalone-update-RGILUQVK.js +0 -120
- package/chunks/terminal-image-renderer-SMQE46UJ.js +0 -116
- package/chunks/theme-manager-RFO5WWFF.js +0 -104
- package/chunks/total-session-admission-HTVTP4BS.js +0 -116
- package/chunks/trustedFolders-7OCNMUQE.js +0 -124
- package/chunks/updateCheck-7QBDXZRT.js +0 -120
- package/chunks/useAutoAcceptIndicator-UI4SNL2O.js +0 -122
- package/chunks/workspace-providers-status-PDFZWL5Q.js +0 -116
- package/chunks/workspace-registry-23R7XRB5.js +0 -125
- package/chunks/workspace-service-MUYO2QIC.js +0 -131
- package/chunks/workspace-skills-status-IKECTOOQ.js +0 -115
- package/chunks/write-file-GGRBB5TZ.js +0 -90
- package/web-shell/assets/channel-CENAhErJ.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-CM6FArGH.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-CM6FArGH.js +0 -1
- package/web-shell/assets/index-8hXIpvo4.js +0 -1865
- package/web-shell/assets/index-DclEv91i.css +0 -5
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-B2Q7XDaE.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-DpZPOSbX.js +0 -8
|
@@ -4,11 +4,15 @@ import {
|
|
|
4
4
|
computeCpuPercent
|
|
5
5
|
} from "./chunk-LBOVL47Y.js";
|
|
6
6
|
import {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
hostAssignsIpv6Loopback,
|
|
8
|
+
isOwnInterfaceAddress
|
|
9
|
+
} from "./chunk-24FVUD5P.js";
|
|
9
10
|
import {
|
|
10
11
|
resolveServeToken
|
|
11
12
|
} from "./chunk-ZELCTN6Y.js";
|
|
13
|
+
import {
|
|
14
|
+
RUNTIME_STARTUP_CANCELLED_MESSAGE
|
|
15
|
+
} from "./chunk-QUPXZXLV.js";
|
|
12
16
|
import {
|
|
13
17
|
ACCESS_LOG_CONTROLLER_LOCAL,
|
|
14
18
|
CAPABILITIES_SCHEMA_VERSION,
|
|
@@ -24,39 +28,47 @@ import {
|
|
|
24
28
|
bearerAuth,
|
|
25
29
|
createBridgeFileSystemAdapter,
|
|
26
30
|
denyBrowserOriginCors,
|
|
31
|
+
findNonLoopbackHttpOrigin,
|
|
27
32
|
getAdvertisedServeFeatures,
|
|
28
33
|
getDeviceFlowRegistry,
|
|
29
34
|
getRateLimiter,
|
|
30
35
|
getServeProtocolVersions,
|
|
31
36
|
hostAllowlist,
|
|
37
|
+
installSelfOriginStripMiddleware,
|
|
32
38
|
isBrowserAutomationMcpAvailable,
|
|
33
39
|
isDeepHealthQuery,
|
|
34
40
|
isManagedScratchChild,
|
|
41
|
+
isNativeDirectoryPickerAvailable,
|
|
42
|
+
isTrustedLoopbackMode,
|
|
35
43
|
listenerMaxConnections,
|
|
36
44
|
parseAllowOriginPatterns,
|
|
37
45
|
parseDaemonStatusDetail,
|
|
38
46
|
positiveFiniteOrNull,
|
|
39
47
|
prepareManagedScratchRoot,
|
|
40
48
|
resolveAcpHttpEnabled,
|
|
41
|
-
setDeferredRuntimeRequestTiming,
|
|
42
49
|
toDaemonStatusMemoryLimits
|
|
43
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-MBZ5ORJB.js";
|
|
51
|
+
import "./chunk-VGHZT6JR.js";
|
|
44
52
|
import {
|
|
45
53
|
ConversationDirectoryIdentityError,
|
|
46
54
|
assertExactConversationRootIdentity,
|
|
47
55
|
createConversationRootIdentity,
|
|
56
|
+
getConversationDirectoryName,
|
|
57
|
+
getConversationStagedDirectoryName,
|
|
48
58
|
inspectConversationDirectoryIdentity,
|
|
59
|
+
inspectConversationStagedDirectoryIdentity,
|
|
60
|
+
isSameConversationDirectoryObject,
|
|
49
61
|
materializeConversationDirectoryIdentity,
|
|
50
62
|
revalidateConversationRootIdentity
|
|
51
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-PB7JBAHF.js";
|
|
52
64
|
import {
|
|
53
65
|
formatMemoryBudgetStderr,
|
|
54
66
|
resolveDaemonMemoryBudget,
|
|
55
67
|
serveJournalGrowthPoolMb
|
|
56
68
|
} from "./chunk-UXEO7E3V.js";
|
|
57
69
|
import {
|
|
58
|
-
|
|
59
|
-
} from "./chunk-
|
|
70
|
+
setDeferredRuntimeRequestTiming
|
|
71
|
+
} from "./chunk-LAUEEBDL.js";
|
|
60
72
|
import {
|
|
61
73
|
normalizeSessionIdForLookup
|
|
62
74
|
} from "./chunk-ZEZKIS2K.js";
|
|
@@ -64,6 +76,9 @@ import "./chunk-NYWWQ437.js";
|
|
|
64
76
|
import {
|
|
65
77
|
resolveSessionRestoreTimeoutMs
|
|
66
78
|
} from "./chunk-4JRM2BSM.js";
|
|
79
|
+
import {
|
|
80
|
+
DEFAULT_RING_SIZE
|
|
81
|
+
} from "./chunk-7U5G6JXI.js";
|
|
67
82
|
import {
|
|
68
83
|
DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
|
|
69
84
|
DEFAULT_MAX_JOURNAL_BYTES,
|
|
@@ -79,9 +94,13 @@ import {
|
|
|
79
94
|
import {
|
|
80
95
|
resolveWebShellDir
|
|
81
96
|
} from "./chunk-FBX2SDQ4.js";
|
|
97
|
+
import {
|
|
98
|
+
isLoopbackAddress,
|
|
99
|
+
isLoopbackBind
|
|
100
|
+
} from "./chunk-DMEUXLSS.js";
|
|
82
101
|
import {
|
|
83
102
|
resolveChannelCwd
|
|
84
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-GN422P4J.js";
|
|
85
104
|
import {
|
|
86
105
|
LIVE_HOST_PROTOCOL_VERSION
|
|
87
106
|
} from "./chunk-NKLP3DCK.js";
|
|
@@ -92,17 +111,17 @@ import {
|
|
|
92
111
|
consumeServeFastPathRejectedLoaderKeys,
|
|
93
112
|
loadServeFastPathSettings,
|
|
94
113
|
preResolveServeFastPathHomeEnvOverrides
|
|
95
|
-
} from "./chunk-
|
|
114
|
+
} from "./chunk-6VHIWUJP.js";
|
|
96
115
|
import {
|
|
97
116
|
MAX_REGISTERED_WORKSPACES,
|
|
98
117
|
resolveWorkspaceInputs,
|
|
99
118
|
workspaceRegistrationId
|
|
100
|
-
} from "./chunk-
|
|
101
|
-
import "./chunk-
|
|
119
|
+
} from "./chunk-RY7DL5IF.js";
|
|
120
|
+
import "./chunk-T3TL6S3B.js";
|
|
102
121
|
import {
|
|
103
122
|
LOAD_REPLAY_META_KEY
|
|
104
|
-
} from "./chunk-
|
|
105
|
-
import "./chunk-
|
|
123
|
+
} from "./chunk-ZGCKTAL5.js";
|
|
124
|
+
import "./chunk-YPISTYEI.js";
|
|
106
125
|
import {
|
|
107
126
|
canonicalizeWorkspace,
|
|
108
127
|
translateAndCheckAbsoluteWorkspacePath
|
|
@@ -110,22 +129,22 @@ import {
|
|
|
110
129
|
import {
|
|
111
130
|
ExtraCaInspectionError,
|
|
112
131
|
loadableCertificates
|
|
113
|
-
} from "./chunk-
|
|
132
|
+
} from "./chunk-FPMQT2YY.js";
|
|
114
133
|
import "./chunk-FYJ7W2PI.js";
|
|
115
134
|
import "./chunk-Z7B6SRPM.js";
|
|
116
135
|
import {
|
|
117
136
|
ChannelWebhookEnqueueError
|
|
118
137
|
} from "./chunk-STUJ7IMZ.js";
|
|
138
|
+
import {
|
|
139
|
+
QWEN_SERVER_TOKEN_ENV
|
|
140
|
+
} from "./chunk-GYTKQYDB.js";
|
|
119
141
|
import {
|
|
120
142
|
normalizeWorkerDiagnostic,
|
|
121
143
|
sanitizeWorkerDiagnostic
|
|
122
|
-
} from "./chunk-
|
|
144
|
+
} from "./chunk-3EGEBDTW.js";
|
|
123
145
|
import {
|
|
124
146
|
channelSelectionNames
|
|
125
147
|
} from "./chunk-ALMR3E6Q.js";
|
|
126
|
-
import {
|
|
127
|
-
QWEN_SERVER_TOKEN_ENV
|
|
128
|
-
} from "./chunk-GYTKQYDB.js";
|
|
129
148
|
import {
|
|
130
149
|
ChannelDeliveryError,
|
|
131
150
|
isChannelDeliveryError
|
|
@@ -144,7 +163,7 @@ import {
|
|
|
144
163
|
} from "./chunk-5HBA2Z7V.js";
|
|
145
164
|
import {
|
|
146
165
|
sanitizeLogText
|
|
147
|
-
} from "./chunk-
|
|
166
|
+
} from "./chunk-IXEZHTDR.js";
|
|
148
167
|
import "./chunk-IW6RQPQB.js";
|
|
149
168
|
import "./chunk-GOXKNSDZ.js";
|
|
150
169
|
import {
|
|
@@ -156,10 +175,10 @@ import {
|
|
|
156
175
|
clearLoaderKeyRejectionReporterIfCurrent,
|
|
157
176
|
scrubInheritedLoaderEnv,
|
|
158
177
|
setLoaderKeyRejectionReporter
|
|
159
|
-
} from "./chunk-
|
|
178
|
+
} from "./chunk-3452WXOK.js";
|
|
160
179
|
import {
|
|
161
180
|
getCliVersion
|
|
162
|
-
} from "./chunk-
|
|
181
|
+
} from "./chunk-ZYPJ7HVZ.js";
|
|
163
182
|
import "./chunk-W3N5XAZ6.js";
|
|
164
183
|
import "./chunk-NPQ5ZKRP.js";
|
|
165
184
|
import {
|
|
@@ -168,6 +187,7 @@ import {
|
|
|
168
187
|
import "./chunk-LJZSMWOH.js";
|
|
169
188
|
import "./chunk-GOFAQQZA.js";
|
|
170
189
|
import "./chunk-5M6IDOMF.js";
|
|
190
|
+
import "./chunk-6HUXPLB5.js";
|
|
171
191
|
import "./chunk-TWPJO254.js";
|
|
172
192
|
import "./chunk-CQ35AJ4Z.js";
|
|
173
193
|
import {
|
|
@@ -182,7 +202,7 @@ import "./chunk-JVEGA3MM.js";
|
|
|
182
202
|
import {
|
|
183
203
|
writeStderrLine,
|
|
184
204
|
writeStdoutLine
|
|
185
|
-
} from "./chunk-
|
|
205
|
+
} from "./chunk-7FA2II6K.js";
|
|
186
206
|
import "./chunk-DMTGGOSA.js";
|
|
187
207
|
import "./chunk-YQ3U5MUC.js";
|
|
188
208
|
import {
|
|
@@ -204,6 +224,7 @@ init_esbuild_shims();
|
|
|
204
224
|
var import_express = __toESM(require_express(), 1);
|
|
205
225
|
import { X509Certificate, createHash as createHash2, timingSafeEqual } from "node:crypto";
|
|
206
226
|
import { execFile } from "node:child_process";
|
|
227
|
+
import { lookup } from "node:dns/promises";
|
|
207
228
|
import * as fs from "node:fs";
|
|
208
229
|
import { createServer } from "node:http";
|
|
209
230
|
import * as https from "node:https";
|
|
@@ -620,11 +641,11 @@ async function ensureRealDirectory(fs2, dirPath, mutationAllowed = () => true) {
|
|
|
620
641
|
__name(ensureRealDirectory, "ensureRealDirectory");
|
|
621
642
|
async function activeFileSize(fs2, activePath) {
|
|
622
643
|
try {
|
|
623
|
-
const
|
|
624
|
-
if (!
|
|
644
|
+
const stat2 = await fs2.lstat(activePath);
|
|
645
|
+
if (!stat2.isFile() || stat2.isSymbolicLink()) {
|
|
625
646
|
throw new Error(`${activePath} is not a regular file`);
|
|
626
647
|
}
|
|
627
|
-
return
|
|
648
|
+
return stat2.size;
|
|
628
649
|
} catch (error) {
|
|
629
650
|
if (isErrno(error, "ENOENT")) return 0;
|
|
630
651
|
throw error;
|
|
@@ -1045,8 +1066,8 @@ __name(closeFallbackFamily, "closeFallbackFamily");
|
|
|
1045
1066
|
async function cleanupFallbacksBestEffort(input) {
|
|
1046
1067
|
const runsDir = nodePath.join(input.daemonDir, "runs");
|
|
1047
1068
|
try {
|
|
1048
|
-
const
|
|
1049
|
-
if (!
|
|
1069
|
+
const stat2 = await input.fs.lstat(runsDir);
|
|
1070
|
+
if (!stat2.isDirectory() || stat2.isSymbolicLink()) {
|
|
1050
1071
|
throw new Error(`${runsDir} is not a real directory`);
|
|
1051
1072
|
}
|
|
1052
1073
|
} catch (error) {
|
|
@@ -1768,9 +1789,10 @@ __name(initDaemonLogger, "initDaemonLogger");
|
|
|
1768
1789
|
|
|
1769
1790
|
// packages/cli/src/serve/conversations/conversation-workspace.ts
|
|
1770
1791
|
init_esbuild_shims();
|
|
1771
|
-
import {
|
|
1792
|
+
import { constants as fsConstants } from "node:fs";
|
|
1793
|
+
import { open, readdir, rename, rm, rmdir, stat } from "node:fs/promises";
|
|
1772
1794
|
import { homedir } from "node:os";
|
|
1773
|
-
import { resolve } from "node:path";
|
|
1795
|
+
import { join as join2, resolve } from "node:path";
|
|
1774
1796
|
function liveIdentityError(error, exactRoot = false, creatingRoot = false) {
|
|
1775
1797
|
if (!(error instanceof ConversationDirectoryIdentityError)) throw error;
|
|
1776
1798
|
if (error.reason === "io_error" && error.cause !== void 0) {
|
|
@@ -2012,6 +2034,171 @@ var ConversationWorkspace = class {
|
|
|
2012
2034
|
throw error;
|
|
2013
2035
|
}
|
|
2014
2036
|
}
|
|
2037
|
+
async inspectStandaloneDeletionPaths(storageSessionId, expected) {
|
|
2038
|
+
const root = await this.revalidateStandaloneRoot();
|
|
2039
|
+
try {
|
|
2040
|
+
const normal = await inspectConversationDirectoryIdentity(
|
|
2041
|
+
root,
|
|
2042
|
+
storageSessionId
|
|
2043
|
+
);
|
|
2044
|
+
const staged = await inspectConversationStagedDirectoryIdentity(
|
|
2045
|
+
root,
|
|
2046
|
+
storageSessionId
|
|
2047
|
+
);
|
|
2048
|
+
if (normal && staged) {
|
|
2049
|
+
throw new ConversationDirectoryIdentityError(
|
|
2050
|
+
"child",
|
|
2051
|
+
"unexpected_identity"
|
|
2052
|
+
);
|
|
2053
|
+
}
|
|
2054
|
+
const identity = normal ?? staged;
|
|
2055
|
+
if (identity && expected && !isSameConversationDirectoryObject(identity, expected)) {
|
|
2056
|
+
throw new ConversationDirectoryIdentityError(
|
|
2057
|
+
"child",
|
|
2058
|
+
"unexpected_identity"
|
|
2059
|
+
);
|
|
2060
|
+
}
|
|
2061
|
+
if (normal) return { status: "normal", identity: normal };
|
|
2062
|
+
if (staged) return { status: "staged", identity: staged };
|
|
2063
|
+
return { status: "absent" };
|
|
2064
|
+
} catch (error) {
|
|
2065
|
+
if (error instanceof ConversationDirectoryIdentityError && error.scope === "child") {
|
|
2066
|
+
return { status: "compromised", error };
|
|
2067
|
+
}
|
|
2068
|
+
throw error;
|
|
2069
|
+
}
|
|
2070
|
+
}
|
|
2071
|
+
async createStandaloneDeletionExpectation(storageSessionId, recorded) {
|
|
2072
|
+
if (recorded.inodeVerifiable !== (recorded.inode !== 0)) {
|
|
2073
|
+
throw new ConversationDirectoryIdentityError(
|
|
2074
|
+
"child",
|
|
2075
|
+
"unexpected_identity"
|
|
2076
|
+
);
|
|
2077
|
+
}
|
|
2078
|
+
const root = await this.revalidateStandaloneRoot();
|
|
2079
|
+
const name = getConversationDirectoryName(storageSessionId);
|
|
2080
|
+
return {
|
|
2081
|
+
root,
|
|
2082
|
+
storageSessionId,
|
|
2083
|
+
name,
|
|
2084
|
+
canonicalPath: join2(root.canonicalRoot, name),
|
|
2085
|
+
device: recorded.device,
|
|
2086
|
+
inode: recorded.inode
|
|
2087
|
+
};
|
|
2088
|
+
}
|
|
2089
|
+
async stageStandaloneDirectory(storageSessionId, expected) {
|
|
2090
|
+
const inspected = await this.inspectStandaloneDeletionPaths(
|
|
2091
|
+
storageSessionId,
|
|
2092
|
+
expected
|
|
2093
|
+
);
|
|
2094
|
+
if (inspected.status === "compromised") throw inspected.error;
|
|
2095
|
+
if (inspected.status !== "normal") {
|
|
2096
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
2097
|
+
}
|
|
2098
|
+
const root = await this.revalidateStandaloneRoot();
|
|
2099
|
+
await rename(
|
|
2100
|
+
inspected.identity.canonicalPath,
|
|
2101
|
+
join2(
|
|
2102
|
+
root.canonicalRoot,
|
|
2103
|
+
getConversationStagedDirectoryName(storageSessionId)
|
|
2104
|
+
)
|
|
2105
|
+
);
|
|
2106
|
+
await revalidateConversationRootIdentity(root);
|
|
2107
|
+
const staged = await inspectConversationStagedDirectoryIdentity(
|
|
2108
|
+
root,
|
|
2109
|
+
storageSessionId
|
|
2110
|
+
);
|
|
2111
|
+
if (!staged || !isSameConversationDirectoryObject(staged, inspected.identity)) {
|
|
2112
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
2113
|
+
}
|
|
2114
|
+
await this.syncStandaloneRoot(root);
|
|
2115
|
+
return staged;
|
|
2116
|
+
}
|
|
2117
|
+
async restoreStagedStandaloneDirectory(storageSessionId, expected) {
|
|
2118
|
+
const inspected = await this.inspectStandaloneDeletionPaths(
|
|
2119
|
+
storageSessionId,
|
|
2120
|
+
expected
|
|
2121
|
+
);
|
|
2122
|
+
if (inspected.status === "compromised") throw inspected.error;
|
|
2123
|
+
if (inspected.status !== "staged") {
|
|
2124
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
2125
|
+
}
|
|
2126
|
+
const root = await this.revalidateStandaloneRoot();
|
|
2127
|
+
await rename(
|
|
2128
|
+
inspected.identity.canonicalPath,
|
|
2129
|
+
join2(root.canonicalRoot, getConversationDirectoryName(storageSessionId))
|
|
2130
|
+
);
|
|
2131
|
+
await revalidateConversationRootIdentity(root);
|
|
2132
|
+
const restored = await inspectConversationDirectoryIdentity(
|
|
2133
|
+
root,
|
|
2134
|
+
storageSessionId
|
|
2135
|
+
);
|
|
2136
|
+
if (!restored || !isSameConversationDirectoryObject(restored, inspected.identity)) {
|
|
2137
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
2138
|
+
}
|
|
2139
|
+
await this.syncStandaloneRoot(root);
|
|
2140
|
+
return restored;
|
|
2141
|
+
}
|
|
2142
|
+
async removeStagedStandaloneDirectory(storageSessionId, expected) {
|
|
2143
|
+
const inspected = await this.inspectStandaloneDeletionPaths(
|
|
2144
|
+
storageSessionId,
|
|
2145
|
+
expected
|
|
2146
|
+
);
|
|
2147
|
+
if (inspected.status === "compromised") throw inspected.error;
|
|
2148
|
+
if (inspected.status !== "staged") {
|
|
2149
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
2150
|
+
}
|
|
2151
|
+
const confirmed = await inspectConversationStagedDirectoryIdentity(
|
|
2152
|
+
inspected.identity.root,
|
|
2153
|
+
storageSessionId
|
|
2154
|
+
);
|
|
2155
|
+
if (!confirmed || !isSameConversationDirectoryObject(confirmed, inspected.identity)) {
|
|
2156
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
2157
|
+
}
|
|
2158
|
+
await rm(confirmed.canonicalPath, { recursive: true });
|
|
2159
|
+
await this.syncStandaloneRoot(confirmed.root);
|
|
2160
|
+
}
|
|
2161
|
+
async confirmStandaloneRootDurability(root) {
|
|
2162
|
+
await this.syncStandaloneRoot(root);
|
|
2163
|
+
}
|
|
2164
|
+
async syncStandaloneRoot(root) {
|
|
2165
|
+
await revalidateConversationRootIdentity(root);
|
|
2166
|
+
let handle;
|
|
2167
|
+
try {
|
|
2168
|
+
handle = await open(
|
|
2169
|
+
root.canonicalRoot,
|
|
2170
|
+
fsConstants.O_RDONLY | (process.platform === "win32" ? 0 : fsConstants.O_NOFOLLOW ?? 0)
|
|
2171
|
+
);
|
|
2172
|
+
const stats = await handle.stat();
|
|
2173
|
+
const inodeVerifiable = Number.isSafeInteger(stats.ino) && stats.ino > 0;
|
|
2174
|
+
if (!stats.isDirectory() || stats.dev !== root.device || inodeVerifiable !== root.inodeVerifiable || root.inodeVerifiable && stats.ino !== root.inode) {
|
|
2175
|
+
throw new ConversationDirectoryIdentityError(
|
|
2176
|
+
"root",
|
|
2177
|
+
"identity_changed"
|
|
2178
|
+
);
|
|
2179
|
+
}
|
|
2180
|
+
try {
|
|
2181
|
+
await handle.sync();
|
|
2182
|
+
} catch (error) {
|
|
2183
|
+
if (process.platform !== "win32" || !["EACCES", "EINVAL", "EPERM"].includes(
|
|
2184
|
+
error.code ?? ""
|
|
2185
|
+
)) {
|
|
2186
|
+
throw error;
|
|
2187
|
+
}
|
|
2188
|
+
}
|
|
2189
|
+
const current = await stat(root.canonicalRoot);
|
|
2190
|
+
const currentInodeVerifiable = Number.isSafeInteger(current.ino) && current.ino > 0;
|
|
2191
|
+
if (!current.isDirectory() || current.dev !== root.device || currentInodeVerifiable !== root.inodeVerifiable || root.inodeVerifiable && current.ino !== root.inode) {
|
|
2192
|
+
throw new ConversationDirectoryIdentityError(
|
|
2193
|
+
"root",
|
|
2194
|
+
"identity_changed"
|
|
2195
|
+
);
|
|
2196
|
+
}
|
|
2197
|
+
} finally {
|
|
2198
|
+
await handle?.close().catch(() => void 0);
|
|
2199
|
+
}
|
|
2200
|
+
await revalidateConversationRootIdentity(root);
|
|
2201
|
+
}
|
|
2015
2202
|
};
|
|
2016
2203
|
|
|
2017
2204
|
// packages/cli/src/serve/daemon-metrics-ring.ts
|
|
@@ -2919,8 +3106,8 @@ var RUNTIME_STARTUP_TIMEOUT_ENV = "QWEN_SERVE_RUNTIME_STARTUP_TIMEOUT_MS";
|
|
|
2919
3106
|
var MAX_EVENT_RING_SIZE = 1e6;
|
|
2920
3107
|
var DEFAULT_MAX_SESSIONS = 32;
|
|
2921
3108
|
var DEFAULT_MAX_PENDING_PROMPTS_PER_SESSION = 5;
|
|
2922
|
-
var DEFAULT_EVENT_RING_SIZE = 8e3;
|
|
2923
3109
|
var DEFAULT_SESSION_IDLE_TIMEOUT_MS = 30 * 6e4;
|
|
3110
|
+
var DEFAULT_SESSION_PROMPT_SETTLED_CLOSE_GRACE_MS = 0;
|
|
2924
3111
|
var WORKSPACE_SETTING_SCOPE = "Workspace";
|
|
2925
3112
|
function isPositiveIntegerMs(value) {
|
|
2926
3113
|
return Number.isFinite(value) && Number.isInteger(value) && value > 0;
|
|
@@ -3054,15 +3241,52 @@ function workspaceRuntimeEffectiveEnv(runtime, daemonEnv) {
|
|
|
3054
3241
|
return runtime.env.effectiveEnv ?? daemonEnv;
|
|
3055
3242
|
}
|
|
3056
3243
|
__name(workspaceRuntimeEffectiveEnv, "workspaceRuntimeEffectiveEnv");
|
|
3057
|
-
function
|
|
3244
|
+
function canonicalIpLiteral(host) {
|
|
3245
|
+
const inner = host.startsWith("[") && host.endsWith("]") ? host.slice(1, -1) : host;
|
|
3246
|
+
try {
|
|
3247
|
+
const hostname = new URL(
|
|
3248
|
+
`http://${inner.includes(":") ? `[${inner}]` : inner}`
|
|
3249
|
+
).hostname;
|
|
3250
|
+
const canonical = hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
|
|
3251
|
+
return isIP(canonical) === 0 ? void 0 : canonical;
|
|
3252
|
+
} catch {
|
|
3253
|
+
return void 0;
|
|
3254
|
+
}
|
|
3255
|
+
}
|
|
3256
|
+
__name(canonicalIpLiteral, "canonicalIpLiteral");
|
|
3257
|
+
function formatChannelWorkerDaemonUrl(host, port, tls = false, boundFamily, ipv6LoopbackAssigned = hostAssignsIpv6Loopback()) {
|
|
3058
3258
|
const scheme = tls ? "https" : "http";
|
|
3059
3259
|
const normalized = host.trim().toLowerCase();
|
|
3060
|
-
|
|
3260
|
+
const canonicalIp = canonicalIpLiteral(normalized);
|
|
3261
|
+
const v6Loopback = ipv6LoopbackAssigned ? `${scheme}://[::1]:${port}` : `${scheme}://127.0.0.1:${port}`;
|
|
3262
|
+
if (normalized === "") {
|
|
3263
|
+
return boundFamily === "IPv4" ? `${scheme}://127.0.0.1:${port}` : v6Loopback;
|
|
3264
|
+
}
|
|
3265
|
+
if (canonicalIp === "::") {
|
|
3266
|
+
return v6Loopback;
|
|
3267
|
+
}
|
|
3268
|
+
if (canonicalIp === "0.0.0.0" || canonicalIp === "::ffff:0:0") {
|
|
3061
3269
|
return `${scheme}://127.0.0.1:${port}`;
|
|
3062
3270
|
}
|
|
3063
3271
|
return `${scheme}://${formatHostForUrl(host)}:${port}`;
|
|
3064
3272
|
}
|
|
3065
3273
|
__name(formatChannelWorkerDaemonUrl, "formatChannelWorkerDaemonUrl");
|
|
3274
|
+
function assertChannelWorkerDaemonUrlIsLocal(workerDaemonUrl, hostname) {
|
|
3275
|
+
let host;
|
|
3276
|
+
try {
|
|
3277
|
+
host = new URL(workerDaemonUrl).hostname;
|
|
3278
|
+
} catch {
|
|
3279
|
+
throw new Error(
|
|
3280
|
+
`Channels cannot start: --hostname "${hostname}" cannot be carried in a worker URL (a zone-scoped address has no spelling the URL parser accepts). Bind to loopback, to the wildcard (0.0.0.0 / ::), or to a zone-less literal address of one of this machine's interfaces.`
|
|
3281
|
+
);
|
|
3282
|
+
}
|
|
3283
|
+
if (isLoopbackBind(host)) return;
|
|
3284
|
+
if (isOwnInterfaceAddress(host)) return;
|
|
3285
|
+
throw new Error(
|
|
3286
|
+
`Channels cannot start: --hostname "${hostname}" is not a loopback bind and does not name an address on this host, so channel workers have no local URL to reach the daemon on. Bind to loopback, to the wildcard (0.0.0.0 / ::), or to a literal address of one of this machine's interfaces.`
|
|
3287
|
+
);
|
|
3288
|
+
}
|
|
3289
|
+
__name(assertChannelWorkerDaemonUrlIsLocal, "assertChannelWorkerDaemonUrlIsLocal");
|
|
3066
3290
|
var WORKER_TLS_TRUST_PROBE = `
|
|
3067
3291
|
import { isIP } from 'node:net';
|
|
3068
3292
|
import * as tls from 'node:tls';
|
|
@@ -3181,9 +3405,11 @@ function describeWorkerTlsTrustGaps(opts) {
|
|
|
3181
3405
|
);
|
|
3182
3406
|
const leafHeldByWorkers = servingBlocks !== void 0 && servingBlocks.some((block) => block.fingerprint256 === x509.fingerprint256);
|
|
3183
3407
|
const workerTrustStore = operatorChain && servingBlocks ? [...operatorChain, ...servingChain] : servingChain;
|
|
3408
|
+
const now = Date.now();
|
|
3184
3409
|
const anchorPath = walkWorkerAnchorPath(
|
|
3185
3410
|
x509,
|
|
3186
3411
|
workerTrustStore,
|
|
3412
|
+
now,
|
|
3187
3413
|
// The `servingBlocks === undefined` fallback prepends the leaf too, but
|
|
3188
3414
|
// that file already reports its own gap below and the workers receive it
|
|
3189
3415
|
// verbatim; only the partial-read case needs the distinction.
|
|
@@ -3239,7 +3465,6 @@ function describeWorkerTlsTrustGaps(opts) {
|
|
|
3239
3465
|
`--tls-cert "${opts.certPath}" is issued by another CA (${x509.issuer.replace(/\r?\n/g, ", ")}), not self-signed, and ${!opts.operatorCaCertPath ? `no NODE_EXTRA_CA_CERTS is set` : opts.operatorCaCertReadError !== void 0 ? `NODE_EXTRA_CA_CERTS "${opts.operatorCaCertPath}" could not be read, so whatever it carries reached nobody` : operatorDiscarded ? `NODE_EXTRA_CA_CERTS "${opts.operatorCaCertPath}" was discarded together with the unloadable serving file above, whatever it carries` : `NODE_EXTRA_CA_CERTS "${opts.operatorCaCertPath}" does not carry a certificate that anchors it`}, so nothing in the channel workers' bundle anchors their trust \u2014 every worker handshake to the daemon will fail UNABLE_TO_VERIFY_LEAF_SIGNATURE unless the issuing CA is already in the workers' default trust store. ` + (operatorDiscarded ? `Re-export --tls-cert as described above and restart; NODE_EXTRA_CA_CERTS is not the file to change.` : opts.operatorCaCertReadError !== void 0 ? `Make NODE_EXTRA_CA_CERTS readable by the daemon as described above and restart.` : `Point NODE_EXTRA_CA_CERTS at the issuing CA (for mkcert: "$(mkcert -CAROOT)/rootCA.pem") and restart.`)
|
|
3240
3466
|
);
|
|
3241
3467
|
}
|
|
3242
|
-
const now = Date.now();
|
|
3243
3468
|
for (const member of anchorPath.path) {
|
|
3244
3469
|
if (member.fingerprint256 === x509.fingerprint256) continue;
|
|
3245
3470
|
const subject = member.subject.replace(/\r?\n/g, ", ");
|
|
@@ -3249,14 +3474,16 @@ function describeWorkerTlsTrustGaps(opts) {
|
|
|
3249
3474
|
);
|
|
3250
3475
|
continue;
|
|
3251
3476
|
}
|
|
3252
|
-
if (
|
|
3253
|
-
|
|
3254
|
-
|
|
3255
|
-
|
|
3256
|
-
|
|
3257
|
-
|
|
3258
|
-
|
|
3259
|
-
|
|
3477
|
+
if (!certValidAt(member, now)) {
|
|
3478
|
+
if (new Date(member.validTo).getTime() < now) {
|
|
3479
|
+
gaps.push(
|
|
3480
|
+
`--tls-cert "${opts.certPath}" chains through "${subject}", which expired on ${member.validTo} \u2014 every worker handshake to the daemon will fail CERT_HAS_EXPIRED. Renew that chain member and restart.`
|
|
3481
|
+
);
|
|
3482
|
+
} else {
|
|
3483
|
+
gaps.push(
|
|
3484
|
+
`--tls-cert "${opts.certPath}" chains through "${subject}", which is not yet valid (validFrom: ${member.validFrom}) \u2014 every worker handshake to the daemon will fail CERT_NOT_YET_VALID. Check that chain member's notBefore date or the system clock.`
|
|
3485
|
+
);
|
|
3486
|
+
}
|
|
3260
3487
|
}
|
|
3261
3488
|
}
|
|
3262
3489
|
const host = workerDialHost(opts.daemonUrl);
|
|
@@ -3377,6 +3604,10 @@ function cannotIssueCertificates(cert) {
|
|
|
3377
3604
|
return !isV1Certificate(cert) && keyUsage === void 0;
|
|
3378
3605
|
}
|
|
3379
3606
|
__name(cannotIssueCertificates, "cannotIssueCertificates");
|
|
3607
|
+
function certValidAt(cert, now) {
|
|
3608
|
+
return new Date(cert.validFrom).getTime() <= now && new Date(cert.validTo).getTime() >= now;
|
|
3609
|
+
}
|
|
3610
|
+
__name(certValidAt, "certValidAt");
|
|
3380
3611
|
function isSelfSignedCert(x509) {
|
|
3381
3612
|
if (x509.subject !== x509.issuer) return false;
|
|
3382
3613
|
try {
|
|
@@ -3447,7 +3678,7 @@ function pathLengthConstraint(cert) {
|
|
|
3447
3678
|
return length;
|
|
3448
3679
|
}
|
|
3449
3680
|
__name(pathLengthConstraint, "pathLengthConstraint");
|
|
3450
|
-
function walkWorkerAnchorPath(leaf, chain, leafHeldByWorkers = true) {
|
|
3681
|
+
function walkWorkerAnchorPath(leaf, chain, now, leafHeldByWorkers = true) {
|
|
3451
3682
|
let next = leaf;
|
|
3452
3683
|
const walked = /* @__PURE__ */ new Set();
|
|
3453
3684
|
const path2 = [];
|
|
@@ -3472,9 +3703,10 @@ function walkWorkerAnchorPath(leaf, chain, leafHeldByWorkers = true) {
|
|
|
3472
3703
|
return pathLengthViolation ? { anchored: false, path: path2, pathLengthViolation } : { anchored: true, path: path2 };
|
|
3473
3704
|
}
|
|
3474
3705
|
walked.add(current.fingerprint256);
|
|
3475
|
-
const
|
|
3706
|
+
const issuers = chain.filter(
|
|
3476
3707
|
(candidate) => !walked.has(candidate.fingerprint256) && certIssuedBy(current, candidate)
|
|
3477
3708
|
);
|
|
3709
|
+
const issuer = issuers.find((candidate) => certValidAt(candidate, now)) ?? issuers[0];
|
|
3478
3710
|
if (issuer && !isSelfSignedCert(issuer) && !issuer.ca) {
|
|
3479
3711
|
return { anchored: false, path: path2, incapableIssuer: issuer };
|
|
3480
3712
|
}
|
|
@@ -3566,12 +3798,12 @@ __name(hasRetryableChannelWorkerShutdownError, "hasRetryableChannelWorkerShutdow
|
|
|
3566
3798
|
var channelWorkerRuntimePromise;
|
|
3567
3799
|
async function loadChannelWorkerRuntime() {
|
|
3568
3800
|
channelWorkerRuntimePromise ??= Promise.all([
|
|
3569
|
-
import("./channel-worker-supervisor-
|
|
3570
|
-
import("./pidfile-
|
|
3571
|
-
import("./runtime-
|
|
3801
|
+
import("./channel-worker-supervisor-HDVE4ADS.js"),
|
|
3802
|
+
import("./pidfile-5ACKG2LI.js"),
|
|
3803
|
+
import("./runtime-66F4W3IA.js"),
|
|
3572
3804
|
import("./cli-entry-path-4VJ3Y6T2.js"),
|
|
3573
|
-
import("./channel-worker-group-
|
|
3574
|
-
import("./channel-worker-manager-
|
|
3805
|
+
import("./channel-worker-group-ZLP5SJHT.js"),
|
|
3806
|
+
import("./channel-worker-manager-FG5377T2.js")
|
|
3575
3807
|
]).then(
|
|
3576
3808
|
([
|
|
3577
3809
|
supervisor,
|
|
@@ -3677,7 +3909,7 @@ function shouldPreheatBridge(deps) {
|
|
|
3677
3909
|
__name(shouldPreheatBridge, "shouldPreheatBridge");
|
|
3678
3910
|
var coreRuntimePromise;
|
|
3679
3911
|
function loadCoreRuntime() {
|
|
3680
|
-
coreRuntimePromise ??= import("./core-runtime-
|
|
3912
|
+
coreRuntimePromise ??= import("./core-runtime-NASPCSQX.js");
|
|
3681
3913
|
return coreRuntimePromise;
|
|
3682
3914
|
}
|
|
3683
3915
|
__name(loadCoreRuntime, "loadCoreRuntime");
|
|
@@ -3713,10 +3945,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
|
|
|
3713
3945
|
var settingsRuntimePromise;
|
|
3714
3946
|
function loadSettingsRuntimeModules() {
|
|
3715
3947
|
settingsRuntimePromise ??= Promise.all([
|
|
3716
|
-
import("./settings-
|
|
3717
|
-
import("./environment-
|
|
3718
|
-
import("./loadedSettingsAdapter-
|
|
3719
|
-
import("./trustedFolders-
|
|
3948
|
+
import("./settings-ZOHIQWYK.js"),
|
|
3949
|
+
import("./environment-25ADH4Y6.js"),
|
|
3950
|
+
import("./loadedSettingsAdapter-2P7DFWUR.js"),
|
|
3951
|
+
import("./trustedFolders-QJYEFMTU.js")
|
|
3720
3952
|
]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
|
|
3721
3953
|
settings,
|
|
3722
3954
|
environment,
|
|
@@ -3729,8 +3961,8 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
|
|
|
3729
3961
|
var channelWebhookConfigRuntimePromise;
|
|
3730
3962
|
function loadChannelWebhookConfigRuntime() {
|
|
3731
3963
|
channelWebhookConfigRuntimePromise ??= Promise.all([
|
|
3732
|
-
import("./runtime-
|
|
3733
|
-
import("./config-utils-
|
|
3964
|
+
import("./runtime-66F4W3IA.js"),
|
|
3965
|
+
import("./config-utils-NNUPVGEC.js")
|
|
3734
3966
|
]).then(([channelRuntime, configUtils]) => ({
|
|
3735
3967
|
loadChannelsConfig: channelRuntime.loadChannelsConfig,
|
|
3736
3968
|
parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
|
|
@@ -3754,20 +3986,22 @@ async function loadServeRuntimeModules() {
|
|
|
3754
3986
|
workspaceSkillsStatusModule,
|
|
3755
3987
|
totalSessionAdmissionModule,
|
|
3756
3988
|
workspaceRegistryModule,
|
|
3989
|
+
workspaceRuntimeCoordinatorModule,
|
|
3757
3990
|
promptLedgerModule
|
|
3758
3991
|
] = await Promise.all([
|
|
3759
|
-
import("./server-
|
|
3760
|
-
import("./bridge-
|
|
3761
|
-
import("./spawnChannel-
|
|
3762
|
-
import("./process-registry-
|
|
3763
|
-
import("./workspace-service-
|
|
3764
|
-
import("./types-
|
|
3765
|
-
import("./daemon-status-provider-
|
|
3766
|
-
import("./workspace-providers-status-
|
|
3767
|
-
import("./workspace-skills-status-
|
|
3768
|
-
import("./total-session-admission-
|
|
3769
|
-
import("./workspace-registry-
|
|
3770
|
-
import("./
|
|
3992
|
+
import("./server-7W6C3SOW.js"),
|
|
3993
|
+
import("./bridge-EVURP4NO.js"),
|
|
3994
|
+
import("./spawnChannel-ZP23JL6O.js"),
|
|
3995
|
+
import("./process-registry-OAEG6WGC.js"),
|
|
3996
|
+
import("./workspace-service-SETHN4WE.js"),
|
|
3997
|
+
import("./types-HKLPXZB3.js"),
|
|
3998
|
+
import("./daemon-status-provider-UI3GBTMO.js"),
|
|
3999
|
+
import("./workspace-providers-status-5JM4CB6R.js"),
|
|
4000
|
+
import("./workspace-skills-status-4D4EUEQU.js"),
|
|
4001
|
+
import("./total-session-admission-MGV56XDK.js"),
|
|
4002
|
+
import("./workspace-registry-6EULAPZC.js"),
|
|
4003
|
+
import("./workspace-runtime-coordinator-IRI2DRCJ.js"),
|
|
4004
|
+
import("./prompt-terminal-ledger-3RKW73A2.js")
|
|
3771
4005
|
]);
|
|
3772
4006
|
return {
|
|
3773
4007
|
createServeApp: serverModule.createServeApp,
|
|
@@ -3780,7 +4014,6 @@ async function loadServeRuntimeModules() {
|
|
|
3780
4014
|
ProcessRegistry: processRegistryModule.ProcessRegistry,
|
|
3781
4015
|
createDaemonWorkspaceService: workspaceModule.createDaemonWorkspaceService,
|
|
3782
4016
|
WorkspaceSettingsPartialPersistError: workspaceTypesModule.WorkspaceSettingsPartialPersistError,
|
|
3783
|
-
WorkspaceSkillNotToggleableError: workspaceTypesModule.WorkspaceSkillNotToggleableError,
|
|
3784
4017
|
createDaemonStatusProvider: daemonStatusProviderModule.createDaemonStatusProvider,
|
|
3785
4018
|
createWorkspaceProvidersStatusProvider: workspaceProvidersStatusModule.createWorkspaceProvidersStatusProvider,
|
|
3786
4019
|
createWorkspaceSkillsStatusProvider: workspaceSkillsStatusModule.createWorkspaceSkillsStatusProvider,
|
|
@@ -3788,6 +4021,7 @@ async function loadServeRuntimeModules() {
|
|
|
3788
4021
|
createWorkspaceRegistry: workspaceRegistryModule.createWorkspaceRegistry,
|
|
3789
4022
|
createWorkspaceSessionOwnerIndex: workspaceRegistryModule.createWorkspaceSessionOwnerIndex,
|
|
3790
4023
|
createWorkspaceGenerationGuard: workspaceRegistryModule.createWorkspaceGenerationGuard,
|
|
4024
|
+
getWorkspaceRuntimeCoordinatorIfSupported: workspaceRuntimeCoordinatorModule.getWorkspaceRuntimeCoordinatorIfSupported,
|
|
3791
4025
|
createPromptLedgerSink: promptLedgerModule.createPromptLedgerSink
|
|
3792
4026
|
};
|
|
3793
4027
|
}
|
|
@@ -3812,7 +4046,11 @@ function sessionIdleTimeoutMs(value) {
|
|
|
3812
4046
|
return value !== void 0 ? channelIdleTimeoutMs(value) : DEFAULT_SESSION_IDLE_TIMEOUT_MS;
|
|
3813
4047
|
}
|
|
3814
4048
|
__name(sessionIdleTimeoutMs, "sessionIdleTimeoutMs");
|
|
3815
|
-
function
|
|
4049
|
+
function sessionPromptSettledCloseGraceMs(value) {
|
|
4050
|
+
return value !== void 0 ? channelIdleTimeoutMs(value) : DEFAULT_SESSION_PROMPT_SETTLED_CLOSE_GRACE_MS;
|
|
4051
|
+
}
|
|
4052
|
+
__name(sessionPromptSettledCloseGraceMs, "sessionPromptSettledCloseGraceMs");
|
|
4053
|
+
function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled, sessionArtifactsPersistenceAvailable, workspaceRuntimeAvailable, currentSessionSchedulingAvailable, env, nativeDirectoryPickerAvailable) {
|
|
3816
4054
|
return getAdvertisedServeFeatures(void 0, {
|
|
3817
4055
|
requireAuth: opts.requireAuth === true,
|
|
3818
4056
|
mcpPoolActive: opts.mcpPoolActive !== false,
|
|
@@ -3833,8 +4071,11 @@ function currentServeFeaturesForRunQwenServe(opts, sessionShellCommandEnabled, s
|
|
|
3833
4071
|
channelManagementAvailable: true,
|
|
3834
4072
|
persistentWorkspaceRegistrationAvailable: true,
|
|
3835
4073
|
workspaceRuntimeRemovalAvailable: true,
|
|
3836
|
-
// Advertise the same WS feature flags as the runtime
|
|
3837
|
-
// so the bootstrap `/capabilities` window doesn't
|
|
4074
|
+
// Advertise the same host-conditional and WS feature flags as the runtime
|
|
4075
|
+
// path (serve-features.ts) so the bootstrap `/capabilities` window doesn't
|
|
4076
|
+
// briefly under-report them.
|
|
4077
|
+
nativeDirectoryPickerAvailable,
|
|
4078
|
+
workspaceRuntimeAvailable,
|
|
3838
4079
|
clientMcpOverWsEnabled: opts.clientMcpOverWs === true,
|
|
3839
4080
|
cdpTunnelOverWsEnabled: opts.cdpTunnelOverWs === true,
|
|
3840
4081
|
browserAutomationMcpAvailable: isBrowserAutomationMcpAvailable(opts, env)
|
|
@@ -3851,8 +4092,10 @@ function createBootstrapCapabilities(input) {
|
|
|
3851
4092
|
input.opts,
|
|
3852
4093
|
input.sessionShellCommandEnabled,
|
|
3853
4094
|
input.sessionArtifactsPersistenceAvailable,
|
|
4095
|
+
input.workspaceRuntimeAvailable,
|
|
3854
4096
|
input.currentSessionSchedulingAvailable,
|
|
3855
|
-
input.env
|
|
4097
|
+
input.env,
|
|
4098
|
+
input.nativeDirectoryPickerAvailable
|
|
3856
4099
|
),
|
|
3857
4100
|
modelServices: [],
|
|
3858
4101
|
workspaceCwd: input.boundWorkspace,
|
|
@@ -3887,45 +4130,6 @@ function validateRateLimitOptions(opts) {
|
|
|
3887
4130
|
}
|
|
3888
4131
|
}
|
|
3889
4132
|
__name(validateRateLimitOptions, "validateRateLimitOptions");
|
|
3890
|
-
function installSameOriginOriginStrip(app, getPort) {
|
|
3891
|
-
let cachedStripPort = -1;
|
|
3892
|
-
let cachedSelfOrigins = /* @__PURE__ */ new Set();
|
|
3893
|
-
app.use((req, _res, next) => {
|
|
3894
|
-
const origin = req.headers.origin;
|
|
3895
|
-
if (origin) {
|
|
3896
|
-
const port = getPort();
|
|
3897
|
-
if (port !== cachedStripPort) {
|
|
3898
|
-
cachedStripPort = port;
|
|
3899
|
-
cachedSelfOrigins = /* @__PURE__ */ new Set([
|
|
3900
|
-
`http://127.0.0.1:${port}`,
|
|
3901
|
-
`http://localhost:${port}`,
|
|
3902
|
-
`http://[::1]:${port}`,
|
|
3903
|
-
`http://host.docker.internal:${port}`,
|
|
3904
|
-
`https://127.0.0.1:${port}`,
|
|
3905
|
-
`https://localhost:${port}`,
|
|
3906
|
-
`https://[::1]:${port}`,
|
|
3907
|
-
`https://host.docker.internal:${port}`
|
|
3908
|
-
]);
|
|
3909
|
-
if (port === 80 || port === 443) {
|
|
3910
|
-
for (const host of [
|
|
3911
|
-
"127.0.0.1",
|
|
3912
|
-
"localhost",
|
|
3913
|
-
"[::1]",
|
|
3914
|
-
"host.docker.internal"
|
|
3915
|
-
]) {
|
|
3916
|
-
cachedSelfOrigins.add(`http://${host}`);
|
|
3917
|
-
cachedSelfOrigins.add(`https://${host}`);
|
|
3918
|
-
}
|
|
3919
|
-
}
|
|
3920
|
-
}
|
|
3921
|
-
if (cachedSelfOrigins.has(origin)) {
|
|
3922
|
-
delete req.headers.origin;
|
|
3923
|
-
}
|
|
3924
|
-
}
|
|
3925
|
-
next();
|
|
3926
|
-
});
|
|
3927
|
-
}
|
|
3928
|
-
__name(installSameOriginOriginStrip, "installSameOriginOriginStrip");
|
|
3929
4133
|
function createLazyBridgeProxy(getBridge, getStartupError = () => void 0) {
|
|
3930
4134
|
return new Proxy(
|
|
3931
4135
|
{},
|
|
@@ -4011,6 +4215,7 @@ function createBootstrapServeApp(input) {
|
|
|
4011
4215
|
qwenCodeVersion,
|
|
4012
4216
|
sessionShellCommandEnabled,
|
|
4013
4217
|
sessionArtifactsPersistenceAvailable,
|
|
4218
|
+
workspaceRuntimeAvailable,
|
|
4014
4219
|
currentSessionSchedulingAvailable,
|
|
4015
4220
|
permissionPolicy,
|
|
4016
4221
|
multiWorkspaceCapabilitiesRequireRuntime,
|
|
@@ -4020,7 +4225,8 @@ function createBootstrapServeApp(input) {
|
|
|
4020
4225
|
onHealthServed
|
|
4021
4226
|
} = input;
|
|
4022
4227
|
const app = (0, import_express.default)();
|
|
4023
|
-
|
|
4228
|
+
const nativeDirectoryPickerAvailable = isNativeDirectoryPickerAvailable();
|
|
4229
|
+
installSelfOriginStripMiddleware(app, getPort, opts.hostname);
|
|
4024
4230
|
if (opts.allowOrigins && opts.allowOrigins.length > 0) {
|
|
4025
4231
|
app.use(allowOriginCors(parseAllowOriginPatterns(opts.allowOrigins)));
|
|
4026
4232
|
} else {
|
|
@@ -4071,9 +4277,11 @@ function createBootstrapServeApp(input) {
|
|
|
4071
4277
|
qwenCodeVersion,
|
|
4072
4278
|
sessionShellCommandEnabled,
|
|
4073
4279
|
sessionArtifactsPersistenceAvailable,
|
|
4280
|
+
workspaceRuntimeAvailable,
|
|
4074
4281
|
currentSessionSchedulingAvailable,
|
|
4075
4282
|
permissionPolicy,
|
|
4076
|
-
env: process.env
|
|
4283
|
+
env: process.env,
|
|
4284
|
+
nativeDirectoryPickerAvailable
|
|
4077
4285
|
})
|
|
4078
4286
|
);
|
|
4079
4287
|
});
|
|
@@ -4155,7 +4363,7 @@ function createBootstrapServeApp(input) {
|
|
|
4155
4363
|
opts.maxPendingPromptsPerSession
|
|
4156
4364
|
),
|
|
4157
4365
|
listenerMaxConnections: listenerMaxConnections(opts.maxConnections),
|
|
4158
|
-
eventRingSize: opts.eventRingSize ??
|
|
4366
|
+
eventRingSize: opts.eventRingSize ?? DEFAULT_RING_SIZE,
|
|
4159
4367
|
compactedReplayMaxBytes: opts.compactedReplayMaxBytes ?? DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
|
|
4160
4368
|
maxJournalEvents: opts.maxJournalEvents ?? DEFAULT_MAX_JOURNAL_EVENTS,
|
|
4161
4369
|
maxJournalBytes: opts.maxJournalBytes ?? DEFAULT_MAX_JOURNAL_BYTES,
|
|
@@ -4163,6 +4371,9 @@ function createBootstrapServeApp(input) {
|
|
|
4163
4371
|
writerIdleTimeoutMs: positiveFiniteOrNull(opts.writerIdleTimeoutMs),
|
|
4164
4372
|
channelIdleTimeoutMs: channelIdleTimeoutMs(opts.channelIdleTimeoutMs),
|
|
4165
4373
|
sessionIdleTimeoutMs: sessionIdleTimeoutMs(opts.sessionIdleTimeoutMs),
|
|
4374
|
+
sessionPromptSettledCloseGraceMs: sessionPromptSettledCloseGraceMs(
|
|
4375
|
+
opts.sessionPromptSettledCloseGraceMs
|
|
4376
|
+
),
|
|
4166
4377
|
acpConnectionCap: null,
|
|
4167
4378
|
acpPreAttachMaxFramesPerStream: null,
|
|
4168
4379
|
acpPreAttachMaxFramesPerConnection: null,
|
|
@@ -4189,8 +4400,10 @@ function createBootstrapServeApp(input) {
|
|
|
4189
4400
|
opts,
|
|
4190
4401
|
sessionShellCommandEnabled,
|
|
4191
4402
|
sessionArtifactsPersistenceAvailable,
|
|
4403
|
+
workspaceRuntimeAvailable,
|
|
4192
4404
|
currentSessionSchedulingAvailable,
|
|
4193
|
-
process.env
|
|
4405
|
+
process.env,
|
|
4406
|
+
nativeDirectoryPickerAvailable
|
|
4194
4407
|
)
|
|
4195
4408
|
},
|
|
4196
4409
|
runtime: {
|
|
@@ -4490,7 +4703,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4490
4703
|
const runStartedAt = performance2.now();
|
|
4491
4704
|
delete process.env[EXTERNAL_TOOL_GUARD_TOKEN_ENV];
|
|
4492
4705
|
const channelDeliveryAuthorizations = new ChannelDeliveryAuthorizationStore();
|
|
4493
|
-
|
|
4706
|
+
let shouldPreheat = !deps.bridge && shouldPreheatBridge(deps);
|
|
4494
4707
|
const startup = {
|
|
4495
4708
|
processStartedAt: new Date(
|
|
4496
4709
|
Date.now() - Math.round(process.uptime() * 1e3)
|
|
@@ -4529,12 +4742,18 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4529
4742
|
}, "restoreScrubbedLoaderEnv");
|
|
4530
4743
|
loggerLifecycle.scrubApplied(restoreScrubbedLoaderEnv);
|
|
4531
4744
|
const token = resolveServeToken(optsIn.token);
|
|
4745
|
+
const bindHostname = optsIn.hostname.toLowerCase() === "localhost" ? (await (deps.bindHostnameLookup ?? lookup)(optsIn.hostname)).address : optsIn.hostname;
|
|
4746
|
+
const trustedLoopbackMode = isTrustedLoopbackMode({
|
|
4747
|
+
loopbackBind: isLoopbackAddress(bindHostname),
|
|
4748
|
+
tokenConfigured: token !== void 0,
|
|
4749
|
+
requireAuth: optsIn.requireAuth === true
|
|
4750
|
+
});
|
|
4532
4751
|
const channelDeliveryDiagnosticRedaction = {
|
|
4533
4752
|
workerEnv: daemonRuntimeBaseEnv,
|
|
4534
4753
|
...token ? { daemonToken: token } : {}
|
|
4535
4754
|
};
|
|
4536
|
-
const sessionShellCommandEnabled = optsIn.enableSessionShell === true && token !== void 0;
|
|
4537
|
-
if (optsIn.enableSessionShell === true && token === void 0) {
|
|
4755
|
+
const sessionShellCommandEnabled = optsIn.enableSessionShell === true && (token !== void 0 || trustedLoopbackMode);
|
|
4756
|
+
if (optsIn.enableSessionShell === true && token === void 0 && !trustedLoopbackMode) {
|
|
4538
4757
|
writeStderrLine(
|
|
4539
4758
|
`qwen serve: --enable-session-shell ignored because no bearer token is configured. Set ${QWEN_SERVER_TOKEN_ENV} or pass --token to enable direct session shell.`
|
|
4540
4759
|
);
|
|
@@ -4556,6 +4775,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4556
4775
|
const rawWorkspace = rawWorkspaces[0];
|
|
4557
4776
|
const opts = {
|
|
4558
4777
|
...optsIn,
|
|
4778
|
+
hostname: bindHostname,
|
|
4559
4779
|
token,
|
|
4560
4780
|
promptDeadlineMs,
|
|
4561
4781
|
writerIdleTimeoutMs,
|
|
@@ -4687,7 +4907,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4687
4907
|
}
|
|
4688
4908
|
if (!isLoopbackBind(opts.hostname) && !token) {
|
|
4689
4909
|
throw new Error(
|
|
4690
|
-
`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.
|
|
4910
|
+
`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]).`
|
|
4691
4911
|
);
|
|
4692
4912
|
}
|
|
4693
4913
|
if (opts.requireAuth && !token) {
|
|
@@ -4702,8 +4922,16 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4702
4922
|
`Refusing to start with --allow-origin '*' but no bearer token configured. '*' admits any cross-origin browser to the API; without a token, any local page can drive the daemon. Set ${QWEN_SERVER_TOKEN_ENV} or pass --token, or list specific origins instead of '*'.`
|
|
4703
4923
|
);
|
|
4704
4924
|
}
|
|
4925
|
+
const nonLoopbackHttpOrigin = findNonLoopbackHttpOrigin(parsed);
|
|
4926
|
+
if (nonLoopbackHttpOrigin && !token) {
|
|
4927
|
+
throw new Error(
|
|
4928
|
+
`Refusing to start with --allow-origin ${JSON.stringify(
|
|
4929
|
+
nonLoopbackHttpOrigin
|
|
4930
|
+
)} but no bearer token configured. Non-loopback HTTP(S) browser origins can drive the full operator API, including code execution as the daemon user. Set ${QWEN_SERVER_TOKEN_ENV} or pass --token, or use a loopback origin.`
|
|
4931
|
+
);
|
|
4932
|
+
}
|
|
4705
4933
|
writeStderrLine(
|
|
4706
|
-
`qwen serve: --allow-origin: ${opts.allowOrigins.join(", ")}` + (parsed.allowAny ? " (WARNING: `*` admits any cross-origin browser \u2014 bearer token gates API routes; the Web Shell static assets stay pre-auth in every mode unless --no-web, and /health stays pre-auth on loopback unless --require-auth is set)" : "")
|
|
4934
|
+
`qwen serve: --allow-origin: ${opts.allowOrigins.join(", ")}` + (parsed.allowAny ? " (WARNING: `*` admits any cross-origin browser \u2014 bearer token gates API routes; the Web Shell static assets stay pre-auth in every mode unless --no-web, and /health stays pre-auth on loopback unless --require-auth is set)" : trustedLoopbackMode ? " (WARNING: these browser origins receive full API authority without a bearer token in trusted loopback mode and can execute code as the daemon user)" : "")
|
|
4707
4935
|
);
|
|
4708
4936
|
}
|
|
4709
4937
|
if (opts.allowPrivateAuthBaseUrl) {
|
|
@@ -4813,7 +5041,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4813
5041
|
}
|
|
4814
5042
|
let workspaceRegistrationStore = deps.workspaceRegistrationStore;
|
|
4815
5043
|
if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
|
|
4816
|
-
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-
|
|
5044
|
+
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-RNMFVCH7.js");
|
|
4817
5045
|
workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
|
|
4818
5046
|
}
|
|
4819
5047
|
if (workspaceRegistrationStore) {
|
|
@@ -5047,6 +5275,13 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5047
5275
|
);
|
|
5048
5276
|
}
|
|
5049
5277
|
}
|
|
5278
|
+
if (opts.sessionPromptSettledCloseGraceMs !== void 0) {
|
|
5279
|
+
if (!isNonNegativeIntegerMs(opts.sessionPromptSettledCloseGraceMs)) {
|
|
5280
|
+
throw new TypeError(
|
|
5281
|
+
`Invalid sessionPromptSettledCloseGraceMs: ${opts.sessionPromptSettledCloseGraceMs}. Must be a non-negative integer (milliseconds, 0 = disabled).`
|
|
5282
|
+
);
|
|
5283
|
+
}
|
|
5284
|
+
}
|
|
5050
5285
|
if (opts.initializeTimeoutMs !== void 0) {
|
|
5051
5286
|
if (!isPositiveIntegerMs(opts.initializeTimeoutMs)) {
|
|
5052
5287
|
throw new TypeError(
|
|
@@ -5097,7 +5332,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5097
5332
|
"qwen serve: required external tool guard handshake succeeded."
|
|
5098
5333
|
);
|
|
5099
5334
|
}
|
|
5100
|
-
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-
|
|
5335
|
+
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-ATXVQPS3.js");
|
|
5101
5336
|
const daemonToolGuardHandler = createDaemonToolGuard(
|
|
5102
5337
|
externalToolGuardHandler
|
|
5103
5338
|
);
|
|
@@ -5160,12 +5395,15 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5160
5395
|
}, "markServeAppStartupFailed");
|
|
5161
5396
|
let runtimeApp;
|
|
5162
5397
|
let runtimeAppForCleanup;
|
|
5398
|
+
let getWorkspaceRuntimeCoordinatorIfSupported;
|
|
5163
5399
|
let bridgeRef = deps.bridge;
|
|
5164
5400
|
let managedProcessRegistry;
|
|
5165
5401
|
let managedChildHeapPolicy;
|
|
5166
5402
|
const internalRuntimeBridgesForCleanup = [];
|
|
5167
5403
|
let daemonEventLoopMonitor;
|
|
5168
5404
|
let daemonMetricsSampler;
|
|
5405
|
+
let sessionPrRefreshTimer;
|
|
5406
|
+
let sessionPrRefreshGeneration = 0;
|
|
5169
5407
|
let runtimeStartupError;
|
|
5170
5408
|
let runtimeStarting;
|
|
5171
5409
|
let markRuntimeReady;
|
|
@@ -5185,6 +5423,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5185
5423
|
daemonEventLoopMonitor = void 0;
|
|
5186
5424
|
const metricsSampler = daemonMetricsSampler;
|
|
5187
5425
|
daemonMetricsSampler = void 0;
|
|
5426
|
+
const prRefreshTimer = sessionPrRefreshTimer;
|
|
5427
|
+
sessionPrRefreshTimer = void 0;
|
|
5428
|
+
sessionPrRefreshGeneration += 1;
|
|
5429
|
+
prRefreshTimer?.dispose();
|
|
5188
5430
|
try {
|
|
5189
5431
|
eventLoopMonitor?.dispose();
|
|
5190
5432
|
} catch (err) {
|
|
@@ -5369,6 +5611,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5369
5611
|
stopSafely("scheduled-task keepalive", locals.stopScheduledTaskKeepalive);
|
|
5370
5612
|
stopSafely("workspace git state", locals.stopWorkspaceGitState);
|
|
5371
5613
|
stopSafely("Live Host coordinator", locals.stopLiveCoordinator);
|
|
5614
|
+
stopSafely("web terminal registry", locals.stopWebTerminalRegistry);
|
|
5372
5615
|
stopTrustPolicyMonitor(app2);
|
|
5373
5616
|
for (const stop of locals.subSessionStoppers ?? []) {
|
|
5374
5617
|
stopSafely("sub-session launcher", stop);
|
|
@@ -5436,8 +5679,9 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5436
5679
|
loadCoreRuntime(),
|
|
5437
5680
|
loadSettingsRuntimeModules(),
|
|
5438
5681
|
cliVersionPromise,
|
|
5439
|
-
import("./daemon-trust-policy-
|
|
5682
|
+
import("./daemon-trust-policy-SUCBJ2CA.js")
|
|
5440
5683
|
]);
|
|
5684
|
+
getWorkspaceRuntimeCoordinatorIfSupported = runtime.getWorkspaceRuntimeCoordinatorIfSupported;
|
|
5441
5685
|
cliVersion = resolvedCliVersion;
|
|
5442
5686
|
settingsRuntime.environment.preResolveHomeEnvOverrides();
|
|
5443
5687
|
const bootTrustSnapshot = await trustPolicy.readDaemonTrustPolicySnapshot();
|
|
@@ -5447,6 +5691,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5447
5691
|
boundWorkspace
|
|
5448
5692
|
);
|
|
5449
5693
|
const trustedWorkspace = deps.trustedWorkspace ?? bootPrimaryTrustDecision.targetTrusted;
|
|
5694
|
+
if (shouldPreheat && !trustedWorkspace) {
|
|
5695
|
+
shouldPreheat = false;
|
|
5696
|
+
startup.preheat.status = "not_scheduled";
|
|
5697
|
+
}
|
|
5450
5698
|
const workspaceTrustHotReloadAvailable = deps.trustedWorkspace === void 0 && deps.bridge === void 0 && deps.fsFactory === void 0;
|
|
5451
5699
|
let managedScratchRoot;
|
|
5452
5700
|
try {
|
|
@@ -5548,6 +5796,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5548
5796
|
mode: "runtime-overlay",
|
|
5549
5797
|
overlayKeys: [...runtimeEnvSnapshot.overlayKeys],
|
|
5550
5798
|
effectiveEnv: runtimeEffectiveEnv,
|
|
5799
|
+
workflowsEnabledBySettings: runtimeBootSettings?.merged.tools?.workflowsEnabled === true,
|
|
5551
5800
|
envFilePaths: [...runtimeEnvSnapshot.envFilePaths],
|
|
5552
5801
|
envFileReadFailed: runtimeEnvSnapshot.envFileReadFailed,
|
|
5553
5802
|
envFileReadFailures: [...runtimeEnvSnapshot.envFileReadFailures]
|
|
@@ -5772,6 +6021,19 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5772
6021
|
});
|
|
5773
6022
|
const clientMcpSenderRegistry = new ClientMcpSenderRegistry();
|
|
5774
6023
|
const runtimeBridges = [];
|
|
6024
|
+
const runtimeEpochSources = /* @__PURE__ */ new Map();
|
|
6025
|
+
const runtimeEpochSourceFor = /* @__PURE__ */ __name((workspaceCwd) => {
|
|
6026
|
+
let source = runtimeEpochSources.get(workspaceCwd);
|
|
6027
|
+
if (!source) {
|
|
6028
|
+
let epoch = 0;
|
|
6029
|
+
source = {
|
|
6030
|
+
current: /* @__PURE__ */ __name(() => epoch, "current"),
|
|
6031
|
+
allocate: /* @__PURE__ */ __name(() => ++epoch, "allocate")
|
|
6032
|
+
};
|
|
6033
|
+
runtimeEpochSources.set(workspaceCwd, source);
|
|
6034
|
+
}
|
|
6035
|
+
return source;
|
|
6036
|
+
}, "runtimeEpochSourceFor");
|
|
5775
6037
|
const totalSessionAdmission = runtime.createTotalSessionAdmissionController(
|
|
5776
6038
|
{
|
|
5777
6039
|
maxTotalSessions: opts.maxTotalSessions,
|
|
@@ -5808,22 +6070,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5808
6070
|
}), "persistDisabledToolsFn");
|
|
5809
6071
|
const persistDisabledSkillsFn = /* @__PURE__ */ __name((workspace, skillName, enabled, assertGenerationOpen) => withSettingsLock(workspace, async () => {
|
|
5810
6072
|
assertGenerationOpen?.();
|
|
5811
|
-
const {
|
|
5812
|
-
resolveSkillSettings,
|
|
5813
|
-
skillSettingStrings,
|
|
5814
|
-
updateWorkspaceSkillSettingLists
|
|
5815
|
-
} = await import("./skill-settings-VA4XVYVL.js");
|
|
6073
|
+
const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-AKMIXFSJ.js");
|
|
5816
6074
|
const fresh = loadSettingsForPersistence(workspace);
|
|
5817
|
-
const normalizedName = skillName.trim().toLowerCase();
|
|
5818
|
-
const resolved = resolveSkillSettings(fresh);
|
|
5819
|
-
const disablement = resolved.disablements.get(normalizedName);
|
|
5820
|
-
if (disablement?.reason === "hard" && disablement.lockedScope) {
|
|
5821
|
-
throw new runtime.WorkspaceSkillNotToggleableError(
|
|
5822
|
-
skillName,
|
|
5823
|
-
"locked",
|
|
5824
|
-
disablement.lockedScope
|
|
5825
|
-
);
|
|
5826
|
-
}
|
|
5827
6075
|
const workspaceDisabled = skillSettingStrings(
|
|
5828
6076
|
fresh,
|
|
5829
6077
|
WORKSPACE_SETTING_SCOPE,
|
|
@@ -5837,8 +6085,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5837
6085
|
const next = updateWorkspaceSkillSettingLists(
|
|
5838
6086
|
{ disabled: workspaceDisabled, enabled: workspaceEnabled },
|
|
5839
6087
|
skillName,
|
|
5840
|
-
enabled
|
|
5841
|
-
resolved.defaultDisabledNames.has(normalizedName) && !resolved.enabledNames.has(normalizedName)
|
|
6088
|
+
enabled
|
|
5842
6089
|
);
|
|
5843
6090
|
const settingsChanges = [];
|
|
5844
6091
|
if (JSON.stringify(next.disabled) !== JSON.stringify(workspaceDisabled)) {
|
|
@@ -5873,13 +6120,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5873
6120
|
}), "persistDisabledSkillsFn");
|
|
5874
6121
|
const persistDisabledSkillsBatchFn = /* @__PURE__ */ __name((workspace, skillNames, enabled, assertGenerationOpen) => withSettingsLock(workspace, async () => {
|
|
5875
6122
|
assertGenerationOpen?.();
|
|
5876
|
-
const {
|
|
5877
|
-
resolveSkillSettings,
|
|
5878
|
-
skillSettingStrings,
|
|
5879
|
-
updateWorkspaceSkillSettingLists
|
|
5880
|
-
} = await import("./skill-settings-VA4XVYVL.js");
|
|
6123
|
+
const { skillSettingStrings, updateWorkspaceSkillSettingLists } = await import("./skill-settings-AKMIXFSJ.js");
|
|
5881
6124
|
const fresh = loadSettingsForPersistence(workspace);
|
|
5882
|
-
const resolved = resolveSkillSettings(fresh);
|
|
5883
6125
|
const initialDisabled = skillSettingStrings(
|
|
5884
6126
|
fresh,
|
|
5885
6127
|
WORKSPACE_SETTING_SCOPE,
|
|
@@ -5893,24 +6135,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5893
6135
|
let next = { disabled: initialDisabled, enabled: initialEnabled };
|
|
5894
6136
|
const outcomes = [];
|
|
5895
6137
|
for (const skillName of skillNames) {
|
|
5896
|
-
const normalizedName = skillName.trim().toLowerCase();
|
|
5897
|
-
const disablement = resolved.disablements.get(normalizedName);
|
|
5898
|
-
if (disablement?.reason === "hard" && disablement.lockedScope) {
|
|
5899
|
-
outcomes.push({
|
|
5900
|
-
skillName,
|
|
5901
|
-
error: new runtime.WorkspaceSkillNotToggleableError(
|
|
5902
|
-
skillName,
|
|
5903
|
-
"locked",
|
|
5904
|
-
disablement.lockedScope
|
|
5905
|
-
)
|
|
5906
|
-
});
|
|
5907
|
-
continue;
|
|
5908
|
-
}
|
|
5909
6138
|
const updated = updateWorkspaceSkillSettingLists(
|
|
5910
6139
|
next,
|
|
5911
6140
|
skillName,
|
|
5912
|
-
enabled
|
|
5913
|
-
resolved.defaultDisabledNames.has(normalizedName) && !resolved.enabledNames.has(normalizedName)
|
|
6141
|
+
enabled
|
|
5914
6142
|
);
|
|
5915
6143
|
const changed = JSON.stringify(updated.disabled) !== JSON.stringify(next.disabled) || JSON.stringify(updated.enabled) !== JSON.stringify(next.enabled);
|
|
5916
6144
|
next = updated;
|
|
@@ -5983,8 +6211,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5983
6211
|
}
|
|
5984
6212
|
}), "persistSettingsFn");
|
|
5985
6213
|
const [{ createSubSessionLauncher }, scheduledTaskRoutes] = await Promise.all([
|
|
5986
|
-
import("./create-sub-session-
|
|
5987
|
-
import("./scheduled-tasks-
|
|
6214
|
+
import("./create-sub-session-DS4BJLYZ.js"),
|
|
6215
|
+
import("./scheduled-tasks-2NVKS5Q2.js")
|
|
5988
6216
|
]);
|
|
5989
6217
|
const createCurrentSessionScheduledTaskHandler = /* @__PURE__ */ __name((workspaceCwd, runtimeBaseDir, getBridge, assertGenerationOpen) => async ({
|
|
5990
6218
|
callerSessionId,
|
|
@@ -6072,8 +6300,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6072
6300
|
sessionRestoreTimeoutMs,
|
|
6073
6301
|
...opts.sessionReapIntervalMs !== void 0 ? { sessionReapIntervalMs: opts.sessionReapIntervalMs } : {},
|
|
6074
6302
|
...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
|
|
6303
|
+
...opts.sessionPromptSettledCloseGraceMs !== void 0 ? {
|
|
6304
|
+
sessionPromptSettledCloseGraceMs: opts.sessionPromptSettledCloseGraceMs
|
|
6305
|
+
} : {},
|
|
6075
6306
|
...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
|
|
6076
6307
|
boundWorkspace,
|
|
6308
|
+
runtimeEpochSource: runtimeEpochSourceFor(boundWorkspace),
|
|
6077
6309
|
// Prompt terminal ledger: persisted beside the transcript so a
|
|
6078
6310
|
// restarted daemon can reconcile dangling prompts on cold load.
|
|
6079
6311
|
promptLedger: runtime.createPromptLedgerSink(
|
|
@@ -6121,6 +6353,82 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6121
6353
|
runtimeBridges.push(bridge);
|
|
6122
6354
|
let invalidatePrimaryServeFeaturesCache = /* @__PURE__ */ __name(() => {
|
|
6123
6355
|
}, "invalidatePrimaryServeFeaturesCache");
|
|
6356
|
+
const reloadPrimaryDaemonEnv = /* @__PURE__ */ __name((workspace, assertGenerationOpen) => withSettingsLock(workspace, async () => {
|
|
6357
|
+
assertGenerationOpen?.();
|
|
6358
|
+
const fresh = settingsRuntime.settings.loadSettings(workspace, {
|
|
6359
|
+
skipLoadEnvironment: true,
|
|
6360
|
+
skipWorkspaceSettings: !trustedWorkspace,
|
|
6361
|
+
workspaceTrusted: trustedWorkspace
|
|
6362
|
+
});
|
|
6363
|
+
assertGenerationOpen?.();
|
|
6364
|
+
let refreshedRuntimeEnv;
|
|
6365
|
+
try {
|
|
6366
|
+
refreshedRuntimeEnv = settingsRuntime.environment.buildRuntimeEnvironment(
|
|
6367
|
+
fresh.merged,
|
|
6368
|
+
workspace,
|
|
6369
|
+
daemonRuntimeBaseEnv,
|
|
6370
|
+
trustedWorkspace
|
|
6371
|
+
);
|
|
6372
|
+
} catch (err) {
|
|
6373
|
+
const fallbackReason = err instanceof Error ? err.message : String(err);
|
|
6374
|
+
primaryRuntimeEnv.fallbackReason = fallbackReason;
|
|
6375
|
+
daemonLog.warn(
|
|
6376
|
+
"failed to rebuild runtime env snapshot before daemon env reload; preserving previous runtime env",
|
|
6377
|
+
{
|
|
6378
|
+
error: fallbackReason
|
|
6379
|
+
}
|
|
6380
|
+
);
|
|
6381
|
+
return {
|
|
6382
|
+
updatedKeys: [],
|
|
6383
|
+
removedKeys: [],
|
|
6384
|
+
runtimeEnvironmentApplied: false
|
|
6385
|
+
};
|
|
6386
|
+
}
|
|
6387
|
+
logRuntimeEnvFileReadFailures(workspace, refreshedRuntimeEnv);
|
|
6388
|
+
if (refreshedRuntimeEnv.envFileReadFailed) {
|
|
6389
|
+
return {
|
|
6390
|
+
updatedKeys: [],
|
|
6391
|
+
removedKeys: [],
|
|
6392
|
+
runtimeEnvironmentApplied: false
|
|
6393
|
+
};
|
|
6394
|
+
}
|
|
6395
|
+
const result = settingsRuntime.settings.reloadEnvironment(
|
|
6396
|
+
fresh.merged,
|
|
6397
|
+
workspace,
|
|
6398
|
+
trustedWorkspace,
|
|
6399
|
+
{ failClosedOnEnvFileReadError: true }
|
|
6400
|
+
);
|
|
6401
|
+
if (result.envFileReadFailed) {
|
|
6402
|
+
return {
|
|
6403
|
+
updatedKeys: [],
|
|
6404
|
+
removedKeys: [],
|
|
6405
|
+
runtimeEnvironmentApplied: false
|
|
6406
|
+
};
|
|
6407
|
+
}
|
|
6408
|
+
replaceRuntimeEffectiveEnv(refreshedRuntimeEnv.effectiveEnv);
|
|
6409
|
+
primaryRuntimeEnv.workflowsEnabledBySettings = fresh.merged.tools?.workflowsEnabled === true;
|
|
6410
|
+
delete primaryRuntimeEnv.fallbackReason;
|
|
6411
|
+
primaryRuntimeEnv.envFileReadFailed = refreshedRuntimeEnv.envFileReadFailed;
|
|
6412
|
+
primaryRuntimeEnv.envFileReadFailures.splice(
|
|
6413
|
+
0,
|
|
6414
|
+
primaryRuntimeEnv.envFileReadFailures.length,
|
|
6415
|
+
...refreshedRuntimeEnv.envFileReadFailures
|
|
6416
|
+
);
|
|
6417
|
+
primaryRuntimeEnv.overlayKeys.splice(
|
|
6418
|
+
0,
|
|
6419
|
+
primaryRuntimeEnv.overlayKeys.length,
|
|
6420
|
+
...refreshedRuntimeEnv.overlayKeys
|
|
6421
|
+
);
|
|
6422
|
+
primaryRuntimeEnv.envFilePaths.splice(
|
|
6423
|
+
0,
|
|
6424
|
+
primaryRuntimeEnv.envFilePaths.length,
|
|
6425
|
+
...refreshedRuntimeEnv.envFilePaths
|
|
6426
|
+
);
|
|
6427
|
+
return {
|
|
6428
|
+
...result,
|
|
6429
|
+
runtimeEnvironmentApplied: true
|
|
6430
|
+
};
|
|
6431
|
+
}), "reloadPrimaryDaemonEnv");
|
|
6124
6432
|
const workspaceService = runtime.createDaemonWorkspaceService({
|
|
6125
6433
|
boundWorkspace,
|
|
6126
6434
|
isWorkspaceTrusted: /* @__PURE__ */ __name(() => trustedWorkspace, "isWorkspaceTrusted"),
|
|
@@ -6138,71 +6446,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6138
6446
|
persistSetting: persistSettingFn,
|
|
6139
6447
|
persistSettings: persistSettingsFn,
|
|
6140
6448
|
preheatAcpChild: /* @__PURE__ */ __name(() => bridge.preheat(), "preheatAcpChild"),
|
|
6141
|
-
reloadDaemonEnv:
|
|
6142
|
-
assertGenerationOpen?.();
|
|
6143
|
-
const fresh = settingsRuntime.settings.loadSettings(workspace, {
|
|
6144
|
-
skipLoadEnvironment: true,
|
|
6145
|
-
skipWorkspaceSettings: !trustedWorkspace,
|
|
6146
|
-
workspaceTrusted: trustedWorkspace
|
|
6147
|
-
});
|
|
6148
|
-
assertGenerationOpen?.();
|
|
6149
|
-
const result = settingsRuntime.settings.reloadEnvironment(
|
|
6150
|
-
fresh.merged,
|
|
6151
|
-
workspace,
|
|
6152
|
-
trustedWorkspace
|
|
6153
|
-
);
|
|
6154
|
-
let refreshedRuntimeEnv;
|
|
6155
|
-
let fallbackReason;
|
|
6156
|
-
try {
|
|
6157
|
-
refreshedRuntimeEnv = settingsRuntime.environment.buildRuntimeEnvironment(
|
|
6158
|
-
fresh.merged,
|
|
6159
|
-
workspace,
|
|
6160
|
-
daemonRuntimeBaseEnv,
|
|
6161
|
-
trustedWorkspace
|
|
6162
|
-
);
|
|
6163
|
-
} catch (err) {
|
|
6164
|
-
fallbackReason = err instanceof Error ? err.message : String(err);
|
|
6165
|
-
daemonLog.warn(
|
|
6166
|
-
"failed to rebuild runtime env snapshot after daemon env reload; preserving previous runtime env",
|
|
6167
|
-
{
|
|
6168
|
-
error: fallbackReason
|
|
6169
|
-
}
|
|
6170
|
-
);
|
|
6171
|
-
refreshedRuntimeEnv = {
|
|
6172
|
-
effectiveEnv: { ...runtimeEffectiveEnv },
|
|
6173
|
-
overlayKeys: [...primaryRuntimeEnv.overlayKeys],
|
|
6174
|
-
envFilePaths: [...primaryRuntimeEnv.envFilePaths],
|
|
6175
|
-
envFileReadFailed: primaryRuntimeEnv.envFileReadFailed ?? false,
|
|
6176
|
-
envFileReadFailures: [
|
|
6177
|
-
...primaryRuntimeEnv.envFileReadFailures ?? []
|
|
6178
|
-
]
|
|
6179
|
-
};
|
|
6180
|
-
}
|
|
6181
|
-
logRuntimeEnvFileReadFailures(workspace, refreshedRuntimeEnv);
|
|
6182
|
-
replaceRuntimeEffectiveEnv(refreshedRuntimeEnv.effectiveEnv);
|
|
6183
|
-
if (fallbackReason) {
|
|
6184
|
-
primaryRuntimeEnv.fallbackReason = fallbackReason;
|
|
6185
|
-
} else {
|
|
6186
|
-
delete primaryRuntimeEnv.fallbackReason;
|
|
6187
|
-
}
|
|
6188
|
-
primaryRuntimeEnv.envFileReadFailed = refreshedRuntimeEnv.envFileReadFailed;
|
|
6189
|
-
primaryRuntimeEnv.envFileReadFailures.splice(
|
|
6190
|
-
0,
|
|
6191
|
-
primaryRuntimeEnv.envFileReadFailures.length,
|
|
6192
|
-
...refreshedRuntimeEnv.envFileReadFailures
|
|
6193
|
-
);
|
|
6194
|
-
primaryRuntimeEnv.overlayKeys.splice(
|
|
6195
|
-
0,
|
|
6196
|
-
primaryRuntimeEnv.overlayKeys.length,
|
|
6197
|
-
...refreshedRuntimeEnv.overlayKeys
|
|
6198
|
-
);
|
|
6199
|
-
primaryRuntimeEnv.envFilePaths.splice(
|
|
6200
|
-
0,
|
|
6201
|
-
primaryRuntimeEnv.envFilePaths.length,
|
|
6202
|
-
...refreshedRuntimeEnv.envFilePaths
|
|
6203
|
-
);
|
|
6204
|
-
return result;
|
|
6205
|
-
}), "reloadDaemonEnv"),
|
|
6449
|
+
reloadDaemonEnv: reloadPrimaryDaemonEnv,
|
|
6206
6450
|
queryWorkspaceStatus: /* @__PURE__ */ __name((method, idle) => bridge.queryWorkspaceStatus(method, idle), "queryWorkspaceStatus"),
|
|
6207
6451
|
invokeWorkspaceCommand: /* @__PURE__ */ __name((method, params, invokeOpts) => bridge.invokeWorkspaceCommand(method, params, invokeOpts), "invokeWorkspaceCommand"),
|
|
6208
6452
|
refreshExtensionsForAllSessions: /* @__PURE__ */ __name(() => bridge.refreshExtensionsForAllSessions(), "refreshExtensionsForAllSessions"),
|
|
@@ -6259,6 +6503,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6259
6503
|
mode: "runtime-overlay",
|
|
6260
6504
|
overlayKeys: [...snapshot.overlayKeys],
|
|
6261
6505
|
effectiveEnv,
|
|
6506
|
+
workflowsEnabledBySettings: settings?.merged.tools?.workflowsEnabled === true,
|
|
6262
6507
|
envFilePaths: [...snapshot.envFilePaths],
|
|
6263
6508
|
envFileReadFailed: snapshot.envFileReadFailed,
|
|
6264
6509
|
envFileReadFailures: [...snapshot.envFileReadFailures]
|
|
@@ -6276,6 +6521,80 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6276
6521
|
}
|
|
6277
6522
|
};
|
|
6278
6523
|
}, "createRuntimeEnvMetadata");
|
|
6524
|
+
const reloadRuntimeOverlaySnapshotForModelProviders = /* @__PURE__ */ __name((workspace, trusted, env, assertGenerationOpen) => withSettingsLock(workspace, async () => {
|
|
6525
|
+
assertGenerationOpen?.();
|
|
6526
|
+
const fresh = settingsRuntime.settings.loadSettings(workspace, {
|
|
6527
|
+
skipLoadEnvironment: true,
|
|
6528
|
+
skipWorkspaceSettings: !trusted,
|
|
6529
|
+
workspaceTrusted: trusted
|
|
6530
|
+
});
|
|
6531
|
+
assertGenerationOpen?.();
|
|
6532
|
+
let refreshedRuntimeEnv;
|
|
6533
|
+
try {
|
|
6534
|
+
refreshedRuntimeEnv = settingsRuntime.environment.buildRuntimeEnvironment(
|
|
6535
|
+
fresh.merged,
|
|
6536
|
+
workspace,
|
|
6537
|
+
daemonRuntimeBaseEnv,
|
|
6538
|
+
trusted
|
|
6539
|
+
);
|
|
6540
|
+
} catch (err) {
|
|
6541
|
+
env.metadata.fallbackReason = err instanceof Error ? err.message : String(err);
|
|
6542
|
+
daemonLog.warn(
|
|
6543
|
+
"failed to rebuild runtime overlay for model-provider reload; preserving previous runtime env",
|
|
6544
|
+
{ workspace, error: env.metadata.fallbackReason }
|
|
6545
|
+
);
|
|
6546
|
+
return {
|
|
6547
|
+
updatedKeys: [],
|
|
6548
|
+
removedKeys: [],
|
|
6549
|
+
runtimeEnvironmentApplied: false
|
|
6550
|
+
};
|
|
6551
|
+
}
|
|
6552
|
+
logRuntimeEnvFileReadFailures(workspace, refreshedRuntimeEnv);
|
|
6553
|
+
if (refreshedRuntimeEnv.envFileReadFailed) {
|
|
6554
|
+
return {
|
|
6555
|
+
updatedKeys: [],
|
|
6556
|
+
removedKeys: [],
|
|
6557
|
+
runtimeEnvironmentApplied: false
|
|
6558
|
+
};
|
|
6559
|
+
}
|
|
6560
|
+
assertGenerationOpen?.();
|
|
6561
|
+
try {
|
|
6562
|
+
env.replace(refreshedRuntimeEnv.effectiveEnv);
|
|
6563
|
+
env.metadata.envFileReadFailed = refreshedRuntimeEnv.envFileReadFailed;
|
|
6564
|
+
env.metadata.envFileReadFailures.splice(
|
|
6565
|
+
0,
|
|
6566
|
+
env.metadata.envFileReadFailures.length,
|
|
6567
|
+
...refreshedRuntimeEnv.envFileReadFailures
|
|
6568
|
+
);
|
|
6569
|
+
env.metadata.overlayKeys.splice(
|
|
6570
|
+
0,
|
|
6571
|
+
env.metadata.overlayKeys.length,
|
|
6572
|
+
...refreshedRuntimeEnv.overlayKeys
|
|
6573
|
+
);
|
|
6574
|
+
env.metadata.envFilePaths.splice(
|
|
6575
|
+
0,
|
|
6576
|
+
env.metadata.envFilePaths.length,
|
|
6577
|
+
...refreshedRuntimeEnv.envFilePaths
|
|
6578
|
+
);
|
|
6579
|
+
delete env.metadata.fallbackReason;
|
|
6580
|
+
return {
|
|
6581
|
+
updatedKeys: [],
|
|
6582
|
+
removedKeys: [],
|
|
6583
|
+
runtimeEnvironmentApplied: true
|
|
6584
|
+
};
|
|
6585
|
+
} catch (err) {
|
|
6586
|
+
env.metadata.fallbackReason = err instanceof Error ? err.message : String(err);
|
|
6587
|
+
daemonLog.warn(
|
|
6588
|
+
"failed to apply runtime overlay for model-provider reload; preserving previous runtime env",
|
|
6589
|
+
{ workspace, error: env.metadata.fallbackReason }
|
|
6590
|
+
);
|
|
6591
|
+
return {
|
|
6592
|
+
updatedKeys: [],
|
|
6593
|
+
removedKeys: [],
|
|
6594
|
+
runtimeEnvironmentApplied: false
|
|
6595
|
+
};
|
|
6596
|
+
}
|
|
6597
|
+
}), "reloadRuntimeOverlaySnapshotForModelProviders");
|
|
6279
6598
|
const readLiveConversationScheduledTasks = /* @__PURE__ */ __name(async () => {
|
|
6280
6599
|
if (!fs.existsSync(liveConversationWorkspace.rootPath)) return [];
|
|
6281
6600
|
const { canonicalRoot } = await liveConversationWorkspace.revalidate();
|
|
@@ -6423,8 +6742,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6423
6742
|
sessionRestoreTimeoutMs,
|
|
6424
6743
|
...opts.sessionReapIntervalMs !== void 0 ? { sessionReapIntervalMs: opts.sessionReapIntervalMs } : {},
|
|
6425
6744
|
...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
|
|
6745
|
+
...opts.sessionPromptSettledCloseGraceMs !== void 0 ? {
|
|
6746
|
+
sessionPromptSettledCloseGraceMs: opts.sessionPromptSettledCloseGraceMs
|
|
6747
|
+
} : {},
|
|
6426
6748
|
...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
|
|
6427
6749
|
boundWorkspace: workspaceInput.cwd,
|
|
6750
|
+
runtimeEpochSource: runtimeEpochSourceFor(workspaceInput.cwd),
|
|
6428
6751
|
promptLedger: runtime.createPromptLedgerSink(
|
|
6429
6752
|
workspaceInput.cwd,
|
|
6430
6753
|
secondaryEnv.sessionRuntimeBaseDir
|
|
@@ -6500,20 +6823,54 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6500
6823
|
workspaceTrusted: secondaryTrusted
|
|
6501
6824
|
});
|
|
6502
6825
|
assertGenerationOpen?.();
|
|
6503
|
-
|
|
6504
|
-
|
|
6505
|
-
workspace,
|
|
6506
|
-
secondaryTrusted
|
|
6507
|
-
);
|
|
6826
|
+
let runtimeEnvironmentApplied = false;
|
|
6827
|
+
let refreshedRuntimeEnv;
|
|
6508
6828
|
try {
|
|
6509
|
-
|
|
6829
|
+
refreshedRuntimeEnv = settingsRuntime.environment.buildRuntimeEnvironment(
|
|
6510
6830
|
fresh.merged,
|
|
6511
6831
|
workspace,
|
|
6512
6832
|
daemonRuntimeBaseEnv,
|
|
6513
6833
|
secondaryTrusted
|
|
6514
6834
|
);
|
|
6515
|
-
|
|
6835
|
+
} catch (err) {
|
|
6836
|
+
secondaryEnv.metadata.fallbackReason = err instanceof Error ? err.message : String(err);
|
|
6837
|
+
daemonLog.warn(
|
|
6838
|
+
"failed to rebuild secondary runtime env snapshot before daemon env reload; preserving previous runtime env",
|
|
6839
|
+
{
|
|
6840
|
+
workspace,
|
|
6841
|
+
error: secondaryEnv.metadata.fallbackReason
|
|
6842
|
+
}
|
|
6843
|
+
);
|
|
6844
|
+
return {
|
|
6845
|
+
updatedKeys: [],
|
|
6846
|
+
removedKeys: [],
|
|
6847
|
+
runtimeEnvironmentApplied
|
|
6848
|
+
};
|
|
6849
|
+
}
|
|
6850
|
+
logRuntimeEnvFileReadFailures(workspace, refreshedRuntimeEnv);
|
|
6851
|
+
if (refreshedRuntimeEnv.envFileReadFailed) {
|
|
6852
|
+
return {
|
|
6853
|
+
updatedKeys: [],
|
|
6854
|
+
removedKeys: [],
|
|
6855
|
+
runtimeEnvironmentApplied: false
|
|
6856
|
+
};
|
|
6857
|
+
}
|
|
6858
|
+
const result = settingsRuntime.settings.reloadEnvironment(
|
|
6859
|
+
fresh.merged,
|
|
6860
|
+
workspace,
|
|
6861
|
+
secondaryTrusted,
|
|
6862
|
+
{ failClosedOnEnvFileReadError: true }
|
|
6863
|
+
);
|
|
6864
|
+
if (result.envFileReadFailed) {
|
|
6865
|
+
return {
|
|
6866
|
+
updatedKeys: [],
|
|
6867
|
+
removedKeys: [],
|
|
6868
|
+
runtimeEnvironmentApplied: false
|
|
6869
|
+
};
|
|
6870
|
+
}
|
|
6871
|
+
try {
|
|
6516
6872
|
secondaryEnv.replace(refreshedRuntimeEnv.effectiveEnv);
|
|
6873
|
+
secondaryEnv.metadata.workflowsEnabledBySettings = fresh.merged.tools?.workflowsEnabled === true;
|
|
6517
6874
|
secondaryEnv.metadata.envFileReadFailed = refreshedRuntimeEnv.envFileReadFailed;
|
|
6518
6875
|
secondaryEnv.metadata.envFileReadFailures.splice(
|
|
6519
6876
|
0,
|
|
@@ -6531,18 +6888,26 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6531
6888
|
...refreshedRuntimeEnv.envFilePaths
|
|
6532
6889
|
);
|
|
6533
6890
|
delete secondaryEnv.metadata.fallbackReason;
|
|
6891
|
+
runtimeEnvironmentApplied = true;
|
|
6892
|
+
return { ...result, runtimeEnvironmentApplied };
|
|
6534
6893
|
} catch (err) {
|
|
6535
6894
|
secondaryEnv.metadata.fallbackReason = err instanceof Error ? err.message : String(err);
|
|
6536
6895
|
daemonLog.warn(
|
|
6537
|
-
"failed to
|
|
6896
|
+
"failed to apply secondary runtime env snapshot after daemon env reload; preserving previous runtime env",
|
|
6538
6897
|
{
|
|
6539
6898
|
workspace,
|
|
6540
6899
|
error: secondaryEnv.metadata.fallbackReason
|
|
6541
6900
|
}
|
|
6542
6901
|
);
|
|
6902
|
+
return { ...result, runtimeEnvironmentApplied };
|
|
6543
6903
|
}
|
|
6544
|
-
return result;
|
|
6545
6904
|
}), "reloadDaemonEnv"),
|
|
6905
|
+
reloadModelProvidersDaemonEnv: /* @__PURE__ */ __name((workspace, assertGenerationOpen) => reloadRuntimeOverlaySnapshotForModelProviders(
|
|
6906
|
+
workspace,
|
|
6907
|
+
secondaryTrusted,
|
|
6908
|
+
secondaryEnv,
|
|
6909
|
+
assertGenerationOpen
|
|
6910
|
+
), "reloadModelProvidersDaemonEnv"),
|
|
6546
6911
|
queryWorkspaceStatus: /* @__PURE__ */ __name((method, idle) => secondaryBridge.queryWorkspaceStatus(method, idle), "queryWorkspaceStatus"),
|
|
6547
6912
|
invokeWorkspaceCommand: /* @__PURE__ */ __name((method, params, invokeOpts) => secondaryBridge.invokeWorkspaceCommand(method, params, invokeOpts), "invokeWorkspaceCommand"),
|
|
6548
6913
|
refreshExtensionsForAllSessions: /* @__PURE__ */ __name(() => secondaryBridge.refreshExtensionsForAllSessions(), "refreshExtensionsForAllSessions"),
|
|
@@ -6680,6 +7045,22 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6680
7045
|
metricsLoopDelay.disable();
|
|
6681
7046
|
}
|
|
6682
7047
|
};
|
|
7048
|
+
sessionPrRefreshTimer?.dispose();
|
|
7049
|
+
const refreshGeneration = ++sessionPrRefreshGeneration;
|
|
7050
|
+
void import("./session-pr-refresh-OIVL3U3Z.js").then((mod) => {
|
|
7051
|
+
if (refreshGeneration !== sessionPrRefreshGeneration) return;
|
|
7052
|
+
sessionPrRefreshTimer = mod.startSessionPrRefreshTimer({
|
|
7053
|
+
workspaceRegistry,
|
|
7054
|
+
// The coordinator lives on the serve app (createServeApp below),
|
|
7055
|
+
// which is built after this timer starts; read it per tick like
|
|
7056
|
+
// the metrics sampler reads `acpHandle`.
|
|
7057
|
+
getArchiveCoordinator: /* @__PURE__ */ __name(() => app2.locals.sessionArchiveCoordinator, "getArchiveCoordinator")
|
|
7058
|
+
});
|
|
7059
|
+
}).catch((error) => {
|
|
7060
|
+
daemonLog.warn(
|
|
7061
|
+
`session-pr-refresh load failed: ${error instanceof Error ? error.message : String(error)}`
|
|
7062
|
+
);
|
|
7063
|
+
});
|
|
6683
7064
|
const createDynamicWorkspaceRuntime = /* @__PURE__ */ __name(async (cwd, buildOptions) => {
|
|
6684
7065
|
const provenance = buildOptions?.provenance ?? "existing";
|
|
6685
7066
|
if (provenance === "managed-scratch" && (!managedScratchRoot || !isManagedScratchChild(cwd, managedScratchRoot.canonicalRoot))) {
|
|
@@ -6809,8 +7190,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6809
7190
|
sessionRestoreTimeoutMs,
|
|
6810
7191
|
...opts.sessionReapIntervalMs !== void 0 ? { sessionReapIntervalMs: opts.sessionReapIntervalMs } : {},
|
|
6811
7192
|
...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
|
|
7193
|
+
...opts.sessionPromptSettledCloseGraceMs !== void 0 ? {
|
|
7194
|
+
sessionPromptSettledCloseGraceMs: opts.sessionPromptSettledCloseGraceMs
|
|
7195
|
+
} : {},
|
|
6812
7196
|
...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
|
|
6813
7197
|
boundWorkspace: cwd,
|
|
7198
|
+
runtimeEpochSource: runtimeEpochSourceFor(cwd),
|
|
6814
7199
|
// Live-conversation workspaces keep transcripts outside the
|
|
6815
7200
|
// runtime storage layout, so no ledger sink is wired there.
|
|
6816
7201
|
...provenance === "live-conversation" ? {} : {
|
|
@@ -6897,20 +7282,54 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6897
7282
|
workspaceTrusted: trusted
|
|
6898
7283
|
});
|
|
6899
7284
|
assertGenerationOpen?.();
|
|
6900
|
-
|
|
6901
|
-
|
|
6902
|
-
workspace,
|
|
6903
|
-
trusted
|
|
6904
|
-
);
|
|
7285
|
+
let runtimeEnvironmentApplied = false;
|
|
7286
|
+
let refreshedRuntimeEnv;
|
|
6905
7287
|
try {
|
|
6906
|
-
|
|
7288
|
+
refreshedRuntimeEnv = settingsRuntime.environment.buildRuntimeEnvironment(
|
|
6907
7289
|
fresh.merged,
|
|
6908
7290
|
workspace,
|
|
6909
7291
|
daemonRuntimeBaseEnv,
|
|
6910
7292
|
trusted
|
|
6911
7293
|
);
|
|
6912
|
-
|
|
7294
|
+
} catch (err) {
|
|
7295
|
+
wsEnv.metadata.fallbackReason = err instanceof Error ? err.message : String(err);
|
|
7296
|
+
daemonLog.warn(
|
|
7297
|
+
"failed to rebuild dynamic runtime env snapshot before daemon env reload; preserving previous runtime env",
|
|
7298
|
+
{
|
|
7299
|
+
workspace,
|
|
7300
|
+
error: wsEnv.metadata.fallbackReason
|
|
7301
|
+
}
|
|
7302
|
+
);
|
|
7303
|
+
return {
|
|
7304
|
+
updatedKeys: [],
|
|
7305
|
+
removedKeys: [],
|
|
7306
|
+
runtimeEnvironmentApplied
|
|
7307
|
+
};
|
|
7308
|
+
}
|
|
7309
|
+
logRuntimeEnvFileReadFailures(workspace, refreshedRuntimeEnv);
|
|
7310
|
+
if (refreshedRuntimeEnv.envFileReadFailed) {
|
|
7311
|
+
return {
|
|
7312
|
+
updatedKeys: [],
|
|
7313
|
+
removedKeys: [],
|
|
7314
|
+
runtimeEnvironmentApplied: false
|
|
7315
|
+
};
|
|
7316
|
+
}
|
|
7317
|
+
const result = settingsRuntime.settings.reloadEnvironment(
|
|
7318
|
+
fresh.merged,
|
|
7319
|
+
workspace,
|
|
7320
|
+
trusted,
|
|
7321
|
+
{ failClosedOnEnvFileReadError: true }
|
|
7322
|
+
);
|
|
7323
|
+
if (result.envFileReadFailed) {
|
|
7324
|
+
return {
|
|
7325
|
+
updatedKeys: [],
|
|
7326
|
+
removedKeys: [],
|
|
7327
|
+
runtimeEnvironmentApplied: false
|
|
7328
|
+
};
|
|
7329
|
+
}
|
|
7330
|
+
try {
|
|
6913
7331
|
wsEnv.replace(refreshedRuntimeEnv.effectiveEnv);
|
|
7332
|
+
wsEnv.metadata.workflowsEnabledBySettings = fresh.merged.tools?.workflowsEnabled === true;
|
|
6914
7333
|
wsEnv.metadata.envFileReadFailed = refreshedRuntimeEnv.envFileReadFailed;
|
|
6915
7334
|
wsEnv.metadata.envFileReadFailures.splice(
|
|
6916
7335
|
0,
|
|
@@ -6928,18 +7347,28 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6928
7347
|
...refreshedRuntimeEnv.envFilePaths
|
|
6929
7348
|
);
|
|
6930
7349
|
delete wsEnv.metadata.fallbackReason;
|
|
7350
|
+
runtimeEnvironmentApplied = true;
|
|
7351
|
+
return { ...result, runtimeEnvironmentApplied };
|
|
6931
7352
|
} catch (err) {
|
|
6932
7353
|
wsEnv.metadata.fallbackReason = err instanceof Error ? err.message : String(err);
|
|
6933
7354
|
daemonLog.warn(
|
|
6934
|
-
"failed to
|
|
7355
|
+
"failed to apply dynamic runtime env snapshot after daemon env reload; preserving previous runtime env",
|
|
6935
7356
|
{
|
|
6936
7357
|
workspace,
|
|
6937
7358
|
error: wsEnv.metadata.fallbackReason
|
|
6938
7359
|
}
|
|
6939
7360
|
);
|
|
7361
|
+
return { ...result, runtimeEnvironmentApplied };
|
|
6940
7362
|
}
|
|
6941
|
-
return result;
|
|
6942
7363
|
}), "reloadDaemonEnv"),
|
|
7364
|
+
...buildOptions?.primary === true ? {} : {
|
|
7365
|
+
reloadModelProvidersDaemonEnv: /* @__PURE__ */ __name((workspace, assertGenerationOpen) => reloadRuntimeOverlaySnapshotForModelProviders(
|
|
7366
|
+
workspace,
|
|
7367
|
+
trusted,
|
|
7368
|
+
wsEnv,
|
|
7369
|
+
assertGenerationOpen
|
|
7370
|
+
), "reloadModelProvidersDaemonEnv")
|
|
7371
|
+
},
|
|
6943
7372
|
queryWorkspaceStatus: /* @__PURE__ */ __name((method, idle) => wsBridge.queryWorkspaceStatus(method, idle), "queryWorkspaceStatus"),
|
|
6944
7373
|
invokeWorkspaceCommand: /* @__PURE__ */ __name((method, params, invokeOpts) => wsBridge.invokeWorkspaceCommand(method, params, invokeOpts), "invokeWorkspaceCommand"),
|
|
6945
7374
|
refreshExtensionsForAllSessions: /* @__PURE__ */ __name(() => wsBridge.refreshExtensionsForAllSessions(), "refreshExtensionsForAllSessions"),
|
|
@@ -7122,6 +7551,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7122
7551
|
const existing = runtimeCleanupPromises.get(runtimeToDrain);
|
|
7123
7552
|
if (existing) return existing;
|
|
7124
7553
|
const cleanup = (async () => {
|
|
7554
|
+
runtime.getWorkspaceRuntimeCoordinatorIfSupported(runtimeToDrain)?.dispose();
|
|
7125
7555
|
const containmentErrors = [];
|
|
7126
7556
|
try {
|
|
7127
7557
|
await workspaceVoiceCoordinator.disposeRuntime(
|
|
@@ -7177,6 +7607,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7177
7607
|
const app3 = serveAppForRuntimeLifecycle.current ?? runtimeApp ?? runtimeAppForCleanup;
|
|
7178
7608
|
const stopWorkspaceGitStateForWorkspace = app3?.locals?.["stopWorkspaceGitStateForWorkspace"];
|
|
7179
7609
|
const stopScheduledTaskKeepaliveForWorkspace = app3?.locals?.["stopScheduledTaskKeepaliveForWorkspace"];
|
|
7610
|
+
const releaseWebTerminalsForWorkspace = app3?.locals?.["releaseWebTerminalsForWorkspace"];
|
|
7180
7611
|
try {
|
|
7181
7612
|
stopWorkspaceGitStateForWorkspace?.(runtimeToDrain.workspaceCwd);
|
|
7182
7613
|
} catch (err) {
|
|
@@ -7195,6 +7626,14 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7195
7626
|
err instanceof Error ? err : null
|
|
7196
7627
|
);
|
|
7197
7628
|
}
|
|
7629
|
+
try {
|
|
7630
|
+
releaseWebTerminalsForWorkspace?.(runtimeToDrain.workspaceCwd);
|
|
7631
|
+
} catch (err) {
|
|
7632
|
+
daemonLog.error(
|
|
7633
|
+
"workspace web-terminal cleanup error",
|
|
7634
|
+
err instanceof Error ? err : null
|
|
7635
|
+
);
|
|
7636
|
+
}
|
|
7198
7637
|
}
|
|
7199
7638
|
let bridgeStopped = false;
|
|
7200
7639
|
try {
|
|
@@ -7266,8 +7705,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7266
7705
|
{ createChannelManagementService },
|
|
7267
7706
|
{ WorkspaceChannelSettingsStore }
|
|
7268
7707
|
] = await Promise.all([
|
|
7269
|
-
import("./channel-management-service-
|
|
7270
|
-
import("./channel-settings-store-
|
|
7708
|
+
import("./channel-management-service-IDBNYSFW.js"),
|
|
7709
|
+
import("./channel-settings-store-MZNXRKVI.js")
|
|
7271
7710
|
]);
|
|
7272
7711
|
return createChannelManagementService({
|
|
7273
7712
|
workspaceCwd: targetRuntime.workspaceCwd,
|
|
@@ -7472,8 +7911,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7472
7911
|
{ createWorkspaceTrustReconciler },
|
|
7473
7912
|
{ createDaemonTrustPolicyMonitor }
|
|
7474
7913
|
] = await Promise.all([
|
|
7475
|
-
import("./workspace-trust-reconciler-
|
|
7476
|
-
import("./daemon-trust-policy-monitor-
|
|
7914
|
+
import("./workspace-trust-reconciler-4LR3CDL4.js"),
|
|
7915
|
+
import("./daemon-trust-policy-monitor-3LM5RQNS.js")
|
|
7477
7916
|
]);
|
|
7478
7917
|
const materializationFor = /* @__PURE__ */ __name((entry, snapshot, decision) => {
|
|
7479
7918
|
const boundWorkspaces2 = entry.primary && decision.targetTrusted ? runtime.resolveBoundWorkspacesFromIdeEnv(
|
|
@@ -7645,6 +8084,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7645
8084
|
qwenCodeVersion: cliVersion,
|
|
7646
8085
|
sessionShellCommandEnabled,
|
|
7647
8086
|
sessionArtifactsPersistenceAvailable,
|
|
8087
|
+
workspaceRuntimeAvailable: deps.bridge === void 0 || typeof deps.bridge.getWorkspaceRuntimeLifecycleSnapshot === "function",
|
|
7648
8088
|
currentSessionSchedulingAvailable: false,
|
|
7649
8089
|
permissionPolicy,
|
|
7650
8090
|
multiWorkspaceCapabilitiesRequireRuntime: workspaceInputs.length > 1,
|
|
@@ -7669,7 +8109,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7669
8109
|
// through (and start the runtime) exactly like the warm app would.
|
|
7670
8110
|
// Dynamic import keeps web-shell-static out of the serve fast-path
|
|
7671
8111
|
// static closure (see the import-boundary guards in fast-path.test.ts).
|
|
7672
|
-
isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-
|
|
8112
|
+
isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-PW7OEDQO.js").then(
|
|
7673
8113
|
(webShellStatic) => webShellStatic.isPreAuthWebShellRequest(req)
|
|
7674
8114
|
) : void 0
|
|
7675
8115
|
});
|
|
@@ -7689,7 +8129,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7689
8129
|
);
|
|
7690
8130
|
}
|
|
7691
8131
|
const channelValidationSettingsRuntime = opts.channelSelection ? await loadSettingsRuntimeModules() : void 0;
|
|
7692
|
-
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-
|
|
8132
|
+
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-SUCBJ2CA.js") : void 0;
|
|
7693
8133
|
const channelValidationTrustSnapshot = channelValidationTrustPolicy ? await channelValidationTrustPolicy.readDaemonTrustPolicySnapshot() : void 0;
|
|
7694
8134
|
const resolveChannelWorkspaceGroupsAtListen = /* @__PURE__ */ __name(() => {
|
|
7695
8135
|
if (!opts.channelSelection || !channelValidationSettingsRuntime || !channelRuntime) {
|
|
@@ -7813,7 +8253,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7813
8253
|
const addr = server.address();
|
|
7814
8254
|
actualPort = typeof addr === "object" && addr ? addr.port : opts.port;
|
|
7815
8255
|
const scheme = tlsOptions ? "https" : "http";
|
|
7816
|
-
const url = `${scheme}://${formatHostForUrl(
|
|
8256
|
+
const url = `${scheme}://${formatHostForUrl(optsIn.hostname)}:${actualPort}`;
|
|
7817
8257
|
const liveRuntimeBaseDir = path.dirname(daemonLogBaseDir);
|
|
7818
8258
|
const liveDiscoveryOwners = [];
|
|
7819
8259
|
const rememberLiveDiscoveryOwner = /* @__PURE__ */ __name((owner) => {
|
|
@@ -8242,11 +8682,14 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8242
8682
|
);
|
|
8243
8683
|
}
|
|
8244
8684
|
const workerRuntime = await ensureChannelRuntime();
|
|
8685
|
+
const workerHostname = tlsOptions ? optsIn.hostname : opts.hostname;
|
|
8245
8686
|
const workerDaemonUrl = formatChannelWorkerDaemonUrl(
|
|
8246
|
-
|
|
8687
|
+
workerHostname,
|
|
8247
8688
|
actualPort,
|
|
8248
|
-
tlsOptions !== void 0
|
|
8689
|
+
tlsOptions !== void 0,
|
|
8690
|
+
typeof addr === "object" && addr && (addr.family === "IPv4" || addr.family === "IPv6") ? addr.family : void 0
|
|
8249
8691
|
);
|
|
8692
|
+
(deps.channelWorkerUrlCertifier ?? assertChannelWorkerDaemonUrlIsLocal)(workerDaemonUrl, workerHostname);
|
|
8250
8693
|
if (tlsOptions && tlsCertPath && process.env["NODE_TLS_REJECT_UNAUTHORIZED"] === "0") {
|
|
8251
8694
|
daemonLog.warn(
|
|
8252
8695
|
`NODE_TLS_REJECT_UNAUTHORIZED=0 disables certificate verification for channel workers; skipping the worker TLS trust check.`
|
|
@@ -8546,6 +8989,15 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8546
8989
|
cancelLiveDiscoveryRetry();
|
|
8547
8990
|
channelControlDraining = true;
|
|
8548
8991
|
const initiallyMountedApp = runtimeApp ?? runtimeAppForCleanup;
|
|
8992
|
+
const beginRuntimeCoordinatorDrains = /* @__PURE__ */ __name((app2) => {
|
|
8993
|
+
const registry = app2?.locals?.["workspaceRegistry"];
|
|
8994
|
+
for (const workspaceRuntime of registry?.list() ?? []) {
|
|
8995
|
+
getWorkspaceRuntimeCoordinatorIfSupported?.(
|
|
8996
|
+
workspaceRuntime
|
|
8997
|
+
)?.beginDrain();
|
|
8998
|
+
}
|
|
8999
|
+
}, "beginRuntimeCoordinatorDrains");
|
|
9000
|
+
beginRuntimeCoordinatorDrains(initiallyMountedApp);
|
|
8549
9001
|
const initiallyMountedManagement = initiallyMountedApp?.locals?.["workspaceManagementHandle"];
|
|
8550
9002
|
const initiallyMountedSessionMaintenance = initiallyMountedApp?.locals?.["sessionArchiveCoordinator"];
|
|
8551
9003
|
const initiallyMountedConversationActivity = initiallyMountedApp?.locals?.["conversationRuntimeActivity"];
|
|
@@ -8577,6 +9029,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8577
9029
|
if (!preserveSignalHandlers) {
|
|
8578
9030
|
process.removeListener("SIGINT", onSignal);
|
|
8579
9031
|
process.removeListener("SIGTERM", onSignal);
|
|
9032
|
+
process.removeListener("SIGHUP", onSignal);
|
|
8580
9033
|
}
|
|
8581
9034
|
process.removeListener(
|
|
8582
9035
|
"uncaughtExceptionMonitor",
|
|
@@ -8673,6 +9126,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8673
9126
|
err instanceof Error ? err : null
|
|
8674
9127
|
);
|
|
8675
9128
|
});
|
|
9129
|
+
beginRuntimeCoordinatorDrains(appForCleanup);
|
|
8676
9130
|
startProcessRegistryShutdown();
|
|
8677
9131
|
disposeRuntimeAppResources(appForCleanup);
|
|
8678
9132
|
disposeDaemonEventLoopMonitor();
|
|
@@ -8782,7 +9236,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8782
9236
|
);
|
|
8783
9237
|
if (!token) {
|
|
8784
9238
|
writeStderrLine(
|
|
8785
|
-
`qwen serve: bearer
|
|
9239
|
+
`qwen serve: trusted loopback mode; local callers have full API access without bearer authentication, including code execution as the daemon user. Use --require-auth with ${QWEN_SERVER_TOKEN_ENV} on shared or untrusted hosts.`
|
|
8786
9240
|
);
|
|
8787
9241
|
if (opts.clientMcpOverWs === true) {
|
|
8788
9242
|
writeStderrLine(
|
|
@@ -8796,6 +9250,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8796
9250
|
}
|
|
8797
9251
|
process.on("SIGINT", onSignal);
|
|
8798
9252
|
process.on("SIGTERM", onSignal);
|
|
9253
|
+
process.on("SIGHUP", onSignal);
|
|
8799
9254
|
process.on("uncaughtExceptionMonitor", onUncaughtExceptionMonitor);
|
|
8800
9255
|
server.on("error", (err) => {
|
|
8801
9256
|
daemonLog.error("server error", err instanceof Error ? err : null);
|
|
@@ -8894,6 +9349,22 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8894
9349
|
const tryListen = /* @__PURE__ */ __name((attemptPort, attempt) => {
|
|
8895
9350
|
const handleListening = /* @__PURE__ */ __name(() => {
|
|
8896
9351
|
server.removeListener("error", handleError);
|
|
9352
|
+
const address = server.address();
|
|
9353
|
+
if (trustedLoopbackMode && (typeof address !== "object" || address === null || !isLoopbackAddress(address.address))) {
|
|
9354
|
+
const resolvedAddress = typeof address === "object" && address !== null ? address.address : String(address);
|
|
9355
|
+
const error = new Error(
|
|
9356
|
+
`Refusing trusted-loopback mode because ${opts.hostname} bound to non-loopback address ${resolvedAddress}. Set ${QWEN_SERVER_TOKEN_ENV} or pass --token, or bind to an explicit loopback address.`
|
|
9357
|
+
);
|
|
9358
|
+
removeCurrentServePidfile();
|
|
9359
|
+
markServeAppStartupFailed(error);
|
|
9360
|
+
void serveAppLifecycle.close().then(
|
|
9361
|
+
() => reject(error),
|
|
9362
|
+
(closeError) => reject(
|
|
9363
|
+
closeError instanceof Error ? new AggregateError([error, closeError], error.message) : error
|
|
9364
|
+
)
|
|
9365
|
+
);
|
|
9366
|
+
return;
|
|
9367
|
+
}
|
|
8897
9368
|
onListening();
|
|
8898
9369
|
}, "handleListening");
|
|
8899
9370
|
const handleError = /* @__PURE__ */ __name((err) => {
|
|
@@ -8945,6 +9416,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8945
9416
|
__name(runQwenServeImpl, "runQwenServeImpl");
|
|
8946
9417
|
export {
|
|
8947
9418
|
InvalidPolicyConfigError,
|
|
9419
|
+
assertChannelWorkerDaemonUrlIsLocal,
|
|
8948
9420
|
createBoundChannelDeliveryHandler,
|
|
8949
9421
|
createDisabledChannelWorkerSupervisor,
|
|
8950
9422
|
createLazyBridgeProxy,
|