@qwen-code/qwen-code 0.22.0 → 0.22.1
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 +229 -0
- package/bundled/computer-use/agents/openai.yaml +4 -0
- package/bundled/coordinate/SKILL.md +5 -5
- package/bundled/qc-helper/docs/configuration/auth.md +7 -7
- package/bundled/qc-helper/docs/configuration/model-providers.md +70 -9
- package/bundled/qc-helper/docs/configuration/settings.md +40 -40
- package/bundled/qc-helper/docs/extension/introduction.md +3 -1
- package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/channels/dingtalk.md +12 -0
- package/bundled/qc-helper/docs/features/channels/dws.md +120 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +3 -3
- package/bundled/qc-helper/docs/features/code-review.md +25 -21
- package/bundled/qc-helper/docs/features/commands.md +2 -2
- package/bundled/qc-helper/docs/features/computer-use.md +57 -51
- package/bundled/qc-helper/docs/features/mcp.md +35 -12
- package/bundled/qc-helper/docs/features/sub-agents.md +1 -1
- package/bundled/qc-helper/docs/features/worktree.md +1 -1
- package/bundled/qc-helper/docs/overview.md +1 -1
- package/bundled/qc-helper/docs/quickstart.md +1 -1
- package/bundled/qc-helper/docs/qwen-serve.md +29 -6
- package/bundled/review/SKILL.md +119 -417
- package/bundled/review/references/aone.md +18 -0
- package/bundled/review/references/persistence.md +105 -0
- package/bundled/review/references/posting.md +270 -0
- package/chunks/MaxSizedBox-UUTUE42J.js +112 -0
- package/chunks/{StandaloneSessionPicker-KTHPCSR6.js → StandaloneSessionPicker-XF2TVJFK.js} +87 -86
- package/chunks/{acp-startup-profiler-T4GEAPLX.js → acp-startup-profiler-GNYAL6LI.js} +2 -2
- package/chunks/{acpAgent-CRY3JZ5O.js → acpAgent-GY53MJIW.js} +2216 -1931
- package/chunks/agent-7U6CC5KF.js +97 -0
- package/chunks/agent-headless-32O4L2CT.js +87 -0
- package/chunks/{anthropicContentGenerator-Y2OX6LS4.js → anthropicContentGenerator-U76GTVB6.js} +128 -58
- package/chunks/{artifact-tool-SBXMTVCB.js → artifact-tool-XDJCZZCF.js} +2 -2
- package/chunks/{askUserQuestion-KEQJRFD6.js → askUserQuestion-ZXXERLEV.js} +2 -2
- package/chunks/bridge-DFX2FFH4.js +119 -0
- package/chunks/{ca-D3F4S6NG.js → ca-7HPYOYSZ.js} +3 -0
- package/chunks/{channel-management-service-IRTT7RNE.js → channel-management-service-HXXS3HOZ.js} +4 -4
- package/chunks/channel-settings-store-ELLH2M4M.js +117 -0
- package/chunks/{channel-worker-group-BJNMR2MP.js → channel-worker-group-EVDC2P4K.js} +8 -7
- package/chunks/{channel-worker-manager-EMA7CQDJ.js → channel-worker-manager-IJJZHGEI.js} +8 -7
- package/chunks/{channel-worker-supervisor-F6I6WSWW.js → channel-worker-supervisor-YSKB5GVB.js} +12 -7
- package/chunks/{chunk-2TRNCJK4.js → chunk-27ONXAFY.js} +1 -1
- package/chunks/{chunk-OVH5Y7KS.js → chunk-2CRNTW2B.js} +19 -3
- package/chunks/{read-package-up-UXSW3YPB.js → chunk-2EAZ43JQ.js} +1 -0
- package/chunks/{chunk-DB2OKNTU.js → chunk-2FN2HNTI.js} +2 -2
- package/chunks/{chunk-KM73TBQ4.js → chunk-2LD5U7Q3.js} +31 -0
- package/chunks/{chunk-QJHPWLZC.js → chunk-2MHGD7EE.js} +1 -1
- package/chunks/{chunk-BMCSKS37.js → chunk-2NCVUT3C.js} +6 -6
- package/chunks/{chunk-A5F2YNO6.js → chunk-2NNTE2ED.js} +245 -10
- package/chunks/{chunk-Z3JMO2CH.js → chunk-2SERYG4T.js} +1 -1
- package/chunks/{chunk-4J7OPYNS.js → chunk-2YDYDDE2.js} +6 -6
- package/chunks/{chunk-PXOJLJ5W.js → chunk-2YEZNBSD.js} +333 -184
- package/chunks/{chunk-UU4WC7DK.js → chunk-2ZV3CZKI.js} +82 -12
- package/chunks/{chunk-SE55HQGF.js → chunk-3B5DCAQU.js} +74 -52
- package/chunks/{chunk-UIRLQ3N7.js → chunk-3BV7TZNQ.js} +3 -3
- package/chunks/{chunk-2Z6LSQMF.js → chunk-3FSBMAYD.js} +1 -1
- package/chunks/{chunk-DJEHYM4H.js → chunk-3UZCLCXR.js} +3 -3
- package/chunks/{chunk-WWUSHZ7M.js → chunk-43C2II2G.js} +5 -5
- package/chunks/{chunk-2GXYDNXP.js → chunk-47SIHHPL.js} +8 -8
- package/chunks/{chunk-PHJJ3RVO.js → chunk-4DCP3362.js} +7 -15
- package/chunks/chunk-4K7NQDCG.js +104 -0
- package/chunks/{chunk-UZPYR3EV.js → chunk-4TPAG3O7.js} +1 -1
- package/chunks/{chunk-BEGIBJAZ.js → chunk-5CI4AXDD.js} +4 -4
- package/chunks/{chunk-7KOFLDEP.js → chunk-5JTIYALA.js} +1 -1
- package/chunks/{chunk-7HFULI45.js → chunk-5MK32KJV.js} +3 -3
- package/chunks/{chunk-CXJHQVEK.js → chunk-5PA6UEYA.js} +4 -0
- package/chunks/{chunk-IBJ5S45N.js → chunk-5T4LWWNX.js} +2 -2
- package/chunks/{chunk-VUMLT7E5.js → chunk-5Y2JCJAH.js} +2 -2
- package/chunks/{chunk-YZBDKFRQ.js → chunk-5ZYZPDDF.js} +993 -895
- package/chunks/{chunk-2A4C2MEG.js → chunk-62PXFOK4.js} +35 -12
- package/chunks/{chunk-IIWGSX4L.js → chunk-6E4WHQJV.js} +1 -1
- package/chunks/{chunk-6PCOVQO2.js → chunk-6HTMIKXZ.js} +8 -8
- package/chunks/{chunk-RDG44S5I.js → chunk-6KS24S3X.js} +2 -2
- package/chunks/{chunk-GAHYKJPV.js → chunk-6US7BF3G.js} +7 -59
- package/chunks/{chunk-MHG6NDS6.js → chunk-6YAR6ZU3.js} +2 -2
- package/chunks/{chunk-3CLIDIVQ.js → chunk-73WFGVIZ.js} +3 -3
- package/chunks/{chunk-ZZUVC6RI.js → chunk-76WGY6LW.js} +3 -3
- package/chunks/{chunk-XLDFW44M.js → chunk-77TOMRBG.js} +3 -3
- package/chunks/{chunk-PDL6LKB5.js → chunk-7AS7QX72.js} +1 -1
- package/chunks/{chunk-ND7NOI4P.js → chunk-7CWEZQ6T.js} +0 -15
- package/chunks/{chunk-DWCKACFL.js → chunk-7DPKPBOQ.js} +2 -2
- package/chunks/{chunk-45NQKMYB.js → chunk-7JPW6IYH.js} +1 -1
- package/chunks/{chunk-HDKCKCYO.js → chunk-7QGEJI7M.js} +1 -1
- package/chunks/{chunk-S4C4JJKE.js → chunk-A7X32SCT.js} +5 -5
- package/chunks/{chunk-O5Z7EB6Y.js → chunk-AYHQZBJ4.js} +170 -207
- package/chunks/{chunk-7DYNJFES.js → chunk-AYVIGUUK.js} +6 -1
- package/chunks/{chunk-7DMTAQJ6.js → chunk-BDHLBR46.js} +132 -49
- package/chunks/{chunk-43T5WDQ7.js → chunk-BFSFJR3D.js} +1 -1
- package/chunks/{chunk-AP3B7LKD.js → chunk-BKDAF7ES.js} +2 -2
- package/chunks/{chunk-B6UBOIFE.js → chunk-BQBUZDDH.js} +14 -11
- package/chunks/{chunk-VLRBJ24J.js → chunk-BVE5EMIG.js} +2 -2
- package/chunks/{chunk-P47E4SJC.js → chunk-BX2BZPFJ.js} +3 -3
- package/chunks/{chunk-OARZJFZX.js → chunk-C4WBKZJT.js} +4 -4
- package/chunks/{chunk-QKBYFU2Q.js → chunk-CFKIH3D3.js} +21 -1
- package/chunks/{chunk-URN2JIAQ.js → chunk-CITGRGCM.js} +2 -1
- package/chunks/{chunk-WU5E4HMO.js → chunk-CPPYZHBN.js} +1 -1
- package/chunks/chunk-DCSAVGDJ.js +20 -0
- package/chunks/{chunk-Q54XG7IX.js → chunk-DEYPMJPD.js} +1 -1
- package/chunks/{chunk-KSPRQSB4.js → chunk-DIMEPKCW.js} +52 -12
- package/chunks/{chunk-I432KXWD.js → chunk-DP7LABIB.js} +1 -1
- package/chunks/{chunk-36OF5PRW.js → chunk-E4I5MVBR.js} +7 -3
- package/chunks/{chunk-AW27A43Y.js → chunk-E55H6BZ7.js} +93 -1
- package/chunks/{chunk-K623ENWT.js → chunk-E6FGMDFQ.js} +4 -0
- package/chunks/{chunk-5XUTPXQU.js → chunk-EAV3TENS.js} +6 -9
- package/chunks/{chunk-LI4YHTQK.js → chunk-EB4VDXNI.js} +1 -1
- package/chunks/{chunk-JOLJTKIG.js → chunk-EC5BONC3.js} +1 -1
- package/chunks/{chunk-25NESM4G.js → chunk-EEQYTWGU.js} +29 -5
- package/chunks/{chunk-4CWDWDL6.js → chunk-EKP3M4RF.js} +1 -1
- package/chunks/{chunk-W4CRPSC5.js → chunk-ELY4QVIB.js} +1 -1
- package/chunks/{chunk-BB5IMQCV.js → chunk-EMGAVCBZ.js} +2 -2
- package/chunks/chunk-FBX2SDQ4.js +48 -0
- package/chunks/{chunk-C72BXMJ5.js → chunk-FJWICLG7.js} +1 -1
- package/chunks/{chunk-6FRJEE2S.js → chunk-FK4H3V6S.js} +5 -5
- package/chunks/{chunk-LDGWX737.js → chunk-FN5C6C7G.js} +160 -59
- package/chunks/{chunk-3ZFJUBTP.js → chunk-FPH6TXD3.js} +1 -1
- package/chunks/{chunk-WRT324N6.js → chunk-FVDQ5E67.js} +3 -3
- package/chunks/{chunk-VFACN2CE.js → chunk-GNMJNDZE.js} +1 -1
- package/chunks/{chunk-FVBVJEBG.js → chunk-GNRVKN76.js} +10 -8
- package/chunks/{chunk-PZRUV52H.js → chunk-GTUKW3I6.js} +20 -2
- package/chunks/chunk-GYTKQYDB.js +23 -0
- package/chunks/{chunk-VMJL7RH6.js → chunk-GZJUCMH4.js} +4 -4
- package/chunks/{chunk-MQP3MHWN.js → chunk-HJOWQUE2.js} +21 -15
- package/chunks/{chunk-ZS5BHEPD.js → chunk-I32QCIK7.js} +1 -1
- package/chunks/{chunk-7IV52LTO.js → chunk-I6VVOZDK.js} +2 -2
- package/chunks/{chunk-X7V3N6YH.js → chunk-I6YW3T3W.js} +218 -37
- package/chunks/{chunk-2E3V7G6Y.js → chunk-ICWGPK23.js} +55 -50
- package/chunks/{chunk-SQS55KR4.js → chunk-IJVDHPKD.js} +2 -2
- package/chunks/{chunk-QS4ENGVF.js → chunk-IKN3IUJP.js} +9 -8
- package/chunks/{chunk-2UZJWSVD.js → chunk-ILPXSKGQ.js} +2 -2
- package/chunks/{chunk-ZRYQMWEP.js → chunk-IPQA4SR5.js} +2 -2
- package/chunks/{chunk-XYQHT3AW.js → chunk-IRIX323G.js} +2 -2
- package/chunks/{chunk-5HJUPACR.js → chunk-J7MLXFC5.js} +2 -2
- package/chunks/{chunk-AZF6SME3.js → chunk-JECO75XD.js} +3 -3
- package/chunks/chunk-JLGFGPZJ.js +346 -0
- package/chunks/{chunk-WZDM44SB.js → chunk-JUIJ3FXC.js} +7 -7
- package/chunks/{chunk-A6NRNRKE.js → chunk-JVPFTDBK.js} +1 -1
- package/chunks/{chunk-2J3OJGTL.js → chunk-K2OJUPOE.js} +1 -21
- package/chunks/{chunk-GHY5OIYP.js → chunk-K63NK3KL.js} +13 -13
- package/chunks/{chunk-7JBHIQS2.js → chunk-KCOXDRQL.js} +7 -13
- package/chunks/{chunk-6NFAEG54.js → chunk-KOJ6MHD5.js} +24 -13
- package/chunks/{chunk-WS7PAXXR.js → chunk-KWFP3WV6.js} +18 -13
- package/chunks/{chunk-A5F63FEW.js → chunk-L436XFLJ.js} +1 -1
- package/chunks/{chunk-KIVGVFMM.js → chunk-LI2HEMKO.js} +16 -4
- package/chunks/{chunk-GIWB5QLV.js → chunk-LJP2BBMK.js} +4 -4
- package/chunks/{create-sub-session-XBCVGNFU.js → chunk-LRKMQPMD.js} +4 -6
- package/chunks/{chunk-6UQSU7CQ.js → chunk-MDZO5V2O.js} +58 -107
- package/chunks/{chunk-AO4M6NMD.js → chunk-MW5AHWOZ.js} +60 -20
- package/chunks/{chunk-FYZMB6DB.js → chunk-MYLXL7F6.js} +11 -11
- package/chunks/{chunk-ZLCT4C5A.js → chunk-MZS7GEC7.js} +1 -1
- package/chunks/{chunk-VEND4KA4.js → chunk-NER3H7PI.js} +1 -1
- package/chunks/{chunk-AVCCKIZ6.js → chunk-NVK4HJYQ.js} +1 -1
- package/chunks/{chunk-MPHLIJYL.js → chunk-NY3IJYAV.js} +14 -8
- package/chunks/{chunk-XZJKSETB.js → chunk-O3BUXIPM.js} +3 -3
- package/chunks/{chunk-4XPSVIED.js → chunk-O5YGAEQS.js} +6 -6
- package/chunks/{chunk-NW35NVFN.js → chunk-ODXCSIH5.js} +4 -4
- package/chunks/{chunk-5XHAOUWD.js → chunk-OI2DR6QB.js} +3 -3
- package/chunks/{chunk-BUGYW6FB.js → chunk-OQ6LTSX3.js} +1 -1
- package/chunks/{chunk-J5ZDDUKM.js → chunk-OT26ITEY.js} +4 -4
- package/chunks/{chunk-EFB657PR.js → chunk-OX44MOAN.js} +3 -3
- package/chunks/{chunk-LURJYO2T.js → chunk-OZ6KS6KW.js} +4 -0
- package/chunks/{chunk-4F5WV4RF.js → chunk-PAJGKZAA.js} +281 -10
- package/chunks/{chunk-HIK2OF33.js → chunk-PVBT5QPD.js} +1 -1
- package/chunks/chunk-QHMLYMMS.js +32 -0
- package/chunks/{chunk-U2UYQMM6.js → chunk-R2ZJH3FV.js} +3 -3
- package/chunks/{chunk-K52PZNU4.js → chunk-RRKNX553.js} +2 -2
- package/chunks/chunk-RXFQM6FQ.js +42 -0
- package/chunks/{chunk-SJ4HB27T.js → chunk-SDVF6A42.js} +3 -3
- package/chunks/{chunk-TBVSALA3.js → chunk-SKNVVYIJ.js} +3 -3
- package/chunks/{chunk-JGUBDRBC.js → chunk-SLEWBQWM.js} +3 -3
- package/chunks/{chunk-ZRFUT5VV.js → chunk-SM7ZVKTF.js} +7 -7
- package/chunks/{chunk-UUQFJILB.js → chunk-SQPOJ4ZI.js} +15 -3
- package/chunks/{chunk-RPJQ3O4M.js → chunk-SRGENTPF.js} +31 -41
- package/chunks/{chunk-ISJMN3ML.js → chunk-T2CRBIDJ.js} +1 -1
- package/chunks/{chunk-MZKWFWVG.js → chunk-T2HMXHYA.js} +6 -6
- package/chunks/{chunk-FEMQ6Y7W.js → chunk-T6OODF2U.js} +47 -126
- package/chunks/{chunk-VYC7XFYV.js → chunk-TKO4TLT6.js} +5 -5
- package/chunks/{chunk-KVGR4MCF.js → chunk-TOF4UZHH.js} +3 -3
- package/chunks/{chunk-LD5VIJ7S.js → chunk-TWSKM647.js} +1 -1
- package/chunks/{chunk-7NBVNAJJ.js → chunk-UCSV2IZW.js} +3 -3
- package/chunks/{chunk-FDD2IUEL.js → chunk-UX3IFLJM.js} +229 -21
- package/chunks/{chunk-YDJRMQU4.js → chunk-V3GINY6K.js} +3 -3
- package/chunks/{chunk-XL5K4SVK.js → chunk-VL4YX3FH.js} +1 -1
- package/chunks/{chunk-62JOGZL5.js → chunk-VMDURMFY.js} +199 -87
- package/chunks/{chunk-OE52YHCZ.js → chunk-W2WRNJKX.js} +11 -11
- package/chunks/{chunk-YLFLHKDL.js → chunk-W3N5XAZ6.js} +1 -1
- package/chunks/{chunk-IWOWEENB.js → chunk-WBT3STGU.js} +385 -25
- package/chunks/{chunk-S3G6YFQC.js → chunk-WEGXPP5E.js} +1 -1
- package/chunks/{chunk-RDQ7QB4Y.js → chunk-XJS54K4A.js} +2 -2
- package/chunks/{chunk-L4HVF7LM.js → chunk-XNXWEGKB.js} +3 -3
- package/chunks/{chunk-T6XLJRQY.js → chunk-XYX474JQ.js} +36509 -5182
- package/chunks/{chunk-F6WFNA7U.js → chunk-XZA32HII.js} +3 -6
- package/chunks/{chunk-NUGZAFR2.js → chunk-ZEADBZLO.js} +147 -6
- package/chunks/chunk-ZELCTN6Y.js +29 -0
- package/chunks/{chunk-TQOF5KBL.js → chunk-ZEZKIS2K.js} +0 -31
- package/chunks/{chunk-IOSEW6KP.js → chunk-ZJG323IA.js} +5 -4
- package/chunks/{chunk-VSNPOSDN.js → chunk-ZKAZP2ZG.js} +107 -12
- package/chunks/{chunk-YMVFIYHV.js → chunk-ZLTEQYNC.js} +2 -2
- package/chunks/{chunk-O5BDEWBC.js → chunk-ZWKGZB2K.js} +3 -3
- package/chunks/{chunk-6QSA4JHL.js → chunk-ZXDM7DYV.js} +2772 -814
- package/chunks/chunk-ZYNTSXWK.js +32 -0
- package/chunks/config-utils-7M6PCTLT.js +113 -0
- package/chunks/contextCommand-G4QG3TW6.js +108 -0
- package/chunks/{core-runtime-CES6JSVV.js → core-runtime-PKNQ63VL.js} +63 -58
- package/chunks/{create-sub-session-UJTPMVOG.js → create-sub-session-PLGPY6TV.js} +60 -58
- package/chunks/create-sub-session-RVHSWVAP.js +17 -0
- package/chunks/{cron-create-IKA56DAF.js → cron-create-IJGVR5R2.js} +4 -4
- package/chunks/{cron-delete-K5Q62EGH.js → cron-delete-4N5BI6GL.js} +4 -4
- package/chunks/{cron-list-QBFGAMP7.js → cron-list-2CATIPUX.js} +4 -4
- package/chunks/{daemon-RZZUPGOJ.js → daemon-NAYK4XXU.js} +51 -24
- package/chunks/{daemon-git-worktree-guard-3QY2BQYB.js → daemon-git-worktree-guard-LDBJXH2U.js} +338 -92
- package/chunks/daemon-status-provider-F5FEHVVG.js +118 -0
- package/chunks/daemon-trust-policy-C6YTU5CQ.js +114 -0
- package/chunks/{daemon-trust-policy-monitor-TK4K7M63.js → daemon-trust-policy-monitor-IGEJPHQ4.js} +68 -66
- package/chunks/{de-RYUHH2C6.js → de-X6HLSIFE.js} +1 -0
- package/chunks/deferred-core-runtime-GHT3GDOR.js +116 -0
- package/chunks/{display-image-OEJMJV3S.js → display-image-DR55LL6M.js} +5 -5
- package/chunks/dist-4Q7NTUNB.js +2512 -0
- package/chunks/{dist-ESS34DHC.js → dist-6H6RZ5H6.js} +2 -2
- package/chunks/{dist-LZO24N3E.js → dist-7CKN54NL.js} +1 -1
- package/chunks/{dist-5EV2G6MC.js → dist-DJBNNPLN.js} +1 -1
- package/chunks/{dist-J6P3C52Z.js → dist-FVJZSIO4.js} +28 -7
- package/chunks/{dist-K7IQB53U.js → dist-SATKXKUR.js} +1 -1
- package/chunks/{dist-ES6HNUW2.js → dist-TJUDJTCB.js} +246 -17
- package/chunks/{dist-VVQBOKDH.js → dist-UQUFZDIY.js} +1 -1
- package/chunks/{dist-2OG3PGKO.js → dist-ZBVOXSKF.js} +3 -3
- package/chunks/earlyInputCapture-HOSJTLWP.js +109 -0
- package/chunks/{edit-A2633SLR.js → edit-KSPVUEAS.js} +48 -48
- package/chunks/{en-3RHLPITS.js → en-6MDBWMTG.js} +3 -0
- package/chunks/{enter-worktree-OIAHE2TB.js → enter-worktree-UOZ6ZTP7.js} +7 -8
- package/chunks/{enterPlanMode-SUGIKLR7.js → enterPlanMode-DZTABSKN.js} +47 -47
- package/chunks/environment-JXOSW25V.js +131 -0
- package/chunks/errors-IOXFDE4J.js +115 -0
- package/chunks/{exit-worktree-3UT3SSWT.js → exit-worktree-G2QATUCV.js} +7 -8
- package/chunks/exitPlanMode-PZG4FXRB.js +85 -0
- package/chunks/{fast-path-3AVP3G35.js → fast-path-EBS7NAVL.js} +28 -7
- package/chunks/{fast-path-settings-WHX3J3ZI.js → fast-path-settings-XMFBYFUH.js} +2 -2
- package/chunks/{fr-4PL5GHG4.js → fr-FTZWF462.js} +1 -0
- package/chunks/{gemini-7PVQWHTH.js → gemini-JELEKOVS.js} +129 -123
- package/chunks/{geminiContentGenerator-B2FOJJDJ.js → geminiContentGenerator-I2CKP7XI.js} +16 -13
- package/chunks/{glob-7YGXE6OV.js → glob-TDVEVPQZ.js} +47 -47
- package/chunks/{goal-tools-TLJCE7YZ.js → goal-tools-CNVXMSZD.js} +72 -28
- package/chunks/{grep-6DV6LTON.js → grep-3NLSS32D.js} +6 -6
- package/chunks/handleAutoUpdate-AWAGHKOX.js +111 -0
- package/chunks/i18n-CYA25C5F.js +126 -0
- package/chunks/{image-gen-7CSCJ73T.js → image-gen-63NN2H5N.js} +9 -11
- package/chunks/initializer-JD2FLNLO.js +115 -0
- package/chunks/installationInfo-N3DCWVWR.js +109 -0
- package/chunks/{ja-HZ7X7PQO.js → ja-2GL5FKYJ.js} +1 -0
- package/chunks/{keychain-token-storage-MTFTAESK.js → keychain-token-storage-3MGFRYGM.js} +2 -2
- package/chunks/list-XDQAUET5.js +118 -0
- package/chunks/{list-agents-43XUEXJV.js → list-agents-EXRSHIDJ.js} +2 -2
- package/chunks/loadedSettingsAdapter-IK7H5JRK.js +112 -0
- package/chunks/{loggingContentGenerator-RNE66CKK.js → loggingContentGenerator-CZWUAHAI.js} +27 -30
- package/chunks/{loop-wakeup-E54KDUXC.js → loop-wakeup-XBPB2BRO.js} +5 -5
- package/chunks/{ls-CGL2UC3H.js → ls-WFONAND2.js} +4 -4
- package/chunks/{lsp-5IKUO5DX.js → lsp-DUKPDUXN.js} +2 -2
- package/chunks/{managed-npm-update-Y3SC3GLJ.js → managed-npm-update-54W23SP5.js} +61 -59
- package/chunks/mcp-2E7ZLMEE.js +112 -0
- package/chunks/{monitor-PXYSGSUN.js → monitor-A4J5QRGJ.js} +47 -47
- package/chunks/nonInteractiveCli-ZNDXB62Y.js +185 -0
- package/chunks/{notebook-edit-ISIBJVBR.js → notebook-edit-4ANFZON5.js} +48 -48
- package/chunks/open-with-auth-4UI3KHUR.js +55 -0
- package/chunks/{openaiContentGenerator-6TBOPEGT.js → openaiContentGenerator-JCCJJQZC.js} +29 -30
- package/chunks/pidfile-DHV2Y7UD.js +113 -0
- package/chunks/{processUtils-YK2TDTTU.js → processUtils-JJAR56SO.js} +2 -2
- package/chunks/prompt-terminal-ledger-LDZ6QVYA.js +107 -0
- package/chunks/{pt-QT5N2Q6Q.js → pt-XN2YWJVM.js} +1 -0
- package/chunks/{qwenContentGenerator-CLDMA2Y4.js → qwenContentGenerator-5JM44ZSA.js} +53 -59
- package/chunks/{qwenOAuth2-DLDR6UC5.js → qwenOAuth2-JIYAWXTW.js} +8 -10
- package/chunks/{read-file-2HOD2ATO.js → read-file-N3E5DY7N.js} +13 -14
- package/chunks/{read-mcp-resource-XYES2B42.js → read-mcp-resource-7A7NFSFL.js} +2 -2
- package/chunks/read-package-up-6T6ICKR7.js +13 -0
- package/chunks/{record-artifact-W3IBTGL7.js → record-artifact-CPJ4IJSD.js} +4 -5
- package/chunks/report-findings-VFM5DENC.js +33 -0
- package/chunks/request-shutdown-AXVOFN5C.js +133 -0
- package/chunks/resumeHistoryUtils-YQRITQAG.js +120 -0
- package/chunks/ripGrep-NEIHKBKB.js +39 -0
- package/chunks/{ru-STMG5BPD.js → ru-OLTMFJEW.js} +1 -0
- package/chunks/{run-qwen-serve-XJHOW2NY.js → run-qwen-serve-IWGPZADI.js} +622 -79
- package/chunks/{runtime-J4SPTJRQ.js → runtime-I76HPFUE.js} +73 -71
- package/chunks/{scheduler-VRAEZZ4E.js → scheduler-M6YL4K4I.js} +62 -60
- package/chunks/{sdk-exporters-http-RSIOP3G2.js → sdk-exporters-http-XXSKBD2C.js} +5 -5
- package/chunks/{sdk-impl-CB3KARSK.js → sdk-impl-VPNBLV7I.js} +7 -7
- package/chunks/{send-message-J4VT46OI.js → send-message-A2GXDX3B.js} +10 -31
- package/chunks/serve-XY5S63GN.js +120 -0
- package/chunks/{server-74ONDK62.js → server-TWXRRREO.js} +965 -405
- package/chunks/{session-BO6VBWJP.js → session-IT5ZXU7A.js} +151 -140
- package/chunks/{settings-35QZNFDG.js → settings-IX5HOOCG.js} +71 -69
- package/chunks/shell-LZ55AAJB.js +95 -0
- package/chunks/{skill-DKEMQSNJ.js → skill-WSZ53D2R.js} +108 -25
- package/chunks/skill-settings-5U7FTJIK.js +120 -0
- package/chunks/spawnChannel-TMC6VXGN.js +113 -0
- package/chunks/standalone-update-CUYGWTR4.js +120 -0
- package/chunks/{startInteractiveUI-J2QSGWPU.js → startInteractiveUI-O6BI2OSA.js} +381 -293
- package/chunks/{syntheticOutput-JAXMIMZP.js → syntheticOutput-5AJ444QT.js} +3 -3
- package/chunks/{task-create-I2H322E4.js → task-create-CDJSOEQD.js} +11 -11
- package/chunks/{task-list-3OLIWFTQ.js → task-list-BELMPA75.js} +5 -5
- package/chunks/{task-stop-JAUY6MSY.js → task-stop-U3S3KZG2.js} +2 -2
- package/chunks/{task-update-B3XO4CPI.js → task-update-77VCFDDZ.js} +11 -11
- package/chunks/{team-create-W534PMGX.js → team-create-UF4TMQEH.js} +48 -48
- package/chunks/{team-delete-Q7GE7RRI.js → team-delete-YWFXX77L.js} +5 -5
- package/chunks/{team-plan-approval-WNV6P6NG.js → team-plan-approval-U57NSR6C.js} +47 -47
- package/chunks/terminal-image-renderer-DRL3BROJ.js +116 -0
- package/chunks/theme-manager-HHJPUDRN.js +104 -0
- package/chunks/{todoWrite-FJJTY2TI.js → todoWrite-435EO2CS.js} +4 -4
- package/chunks/{tool-search-Y4KL3LRE.js → tool-search-SV35UV72.js} +18 -19
- package/chunks/total-session-admission-TQI7TCTL.js +114 -0
- package/chunks/trustedFolders-YKK67IP3.js +124 -0
- package/chunks/{update-relaunch-OHVFN6KF.js → update-relaunch-DX7LVA4P.js} +6 -6
- package/chunks/updateCheck-6JRTKTUF.js +120 -0
- package/chunks/useAutoAcceptIndicator-MYXYSKSL.js +122 -0
- package/chunks/{validateNonInterActiveAuth-WJXH426F.js → validateNonInterActiveAuth-B26O4YJP.js} +113 -106
- package/chunks/{version-QMDRADXM.js → version-K5D7VJ4B.js} +2 -2
- package/chunks/{web-fetch-ROS6P4LP.js → web-fetch-VFHZLLNZ.js} +25 -242
- package/chunks/{web-search-JS3E76O6.js → web-search-AQE5A4J5.js} +11 -11
- package/chunks/{web-shell-static-3NUTRHAH.js → web-shell-static-A6QMUNNV.js} +11 -4
- package/chunks/webapi-Z5OM224P.js +4118 -0
- package/chunks/{workflow-2FCMBTBZ.js → workflow-XL6AEUZ7.js} +635 -94
- package/chunks/workspace-providers-status-H6TG34YV.js +116 -0
- package/chunks/{workspace-registration-store-SU4EJKSD.js → workspace-registration-store-I4U3V5LL.js} +1 -1
- package/chunks/workspace-registry-2PWNIYNI.js +123 -0
- package/chunks/workspace-service-4FGTUJLA.js +131 -0
- package/chunks/workspace-skills-status-7VOLUDT6.js +115 -0
- package/chunks/{workspace-trust-reconciler-4Y4F7XIX.js → workspace-trust-reconciler-GJ466KCE.js} +74 -73
- package/chunks/write-file-PWOYCT2K.js +90 -0
- package/chunks/{zh-TW-NX43Z2S2.js → zh-TW-MV4FWFB6.js} +3 -0
- package/chunks/{zh-3JQ75KFU.js → zh-X3WGU6SI.js} +3 -0
- package/chunks/{zoom-image-DNBKCGGF.js → zoom-image-NYJPC3NI.js} +13 -14
- package/cli.js +15 -15
- package/locales/ca.js +3 -0
- package/locales/de.js +1 -0
- package/locales/en.js +3 -0
- package/locales/fr.js +1 -0
- package/locales/ja.js +1 -0
- package/locales/pt.js +1 -0
- package/locales/ru.js +1 -0
- package/locales/zh-TW.js +3 -0
- package/locales/zh.js +3 -0
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-DWHXEVlf.js → abnfDiagram-VCTEODGH-yq7z7Anb.js} +1 -1
- package/web-shell/assets/{arc-CXKjm86V.js → arc-CbJO0xnT.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-B_ynI0cX.js → architectureDiagram-5GKGNRK7-CRh89421.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-DMebd9X0.js → blockDiagram-NRAW4CY4-C75KAhKv.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BZ5BlxS-.js → c4Diagram-UCG6FXSJ-BzlMveFB.js} +1 -1
- package/web-shell/assets/channel-B3sGR79J.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-CluJKopE.js → chunk-2Q5K7J3B-DA8QDX3a.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-hzDAPFOo.js → chunk-5VM5RSS4-Bgu7gQ7Y.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-6vHioKJe.js → chunk-F27PBJKO-BOew7pIK.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-B_5hKTGo.js → chunk-G27WJ6UU-DHx1I-hO.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-CO9VoFCH.js → chunk-JWPE2WC7-SarFW0WU.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-7L5JpxYu.js → chunk-LCL6LL3I-BLzP083Z.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-DHLJMAqj.js → chunk-POPQ4Y6H-Bmkv_iKm.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-Dt-4Cqdl.js → chunk-SVP7TREG-MPx9r1N2.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-QlSQ3ssG.js → chunk-XXDRQBXY-Ck-09rKG.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-sTGo0K3v.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-sTGo0K3v.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-DMw3EOxl.js → cose-bilkent-JH36ORCC-DWm6lfOG.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-s6vEA7RQ.js → cynefin-OW5HDTMX-DcBUyr5R.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-AOKsvYLt.js → cynefinDiagram-5FMLGOSQ-Df8qmd_p.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-9QAZn3m7.js → dagre-3AP2YEHR-DDmGspD7.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-CWpnu4FN.js → diagram-S7CK7UJ4-BK_qFvbi.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-9l0jXD8q.js → diagram-UQ7AKVKN-Uw3AP_bi.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-BMUHroj4.js → diagram-VSXAHHWV-CJOQKxY7.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-Co9x27vm.js → diagram-VX7I27RA-DhdvZna5.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-BKnTeOER.js → diagram-Z3DM3KII-edQU0nlP.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-QBZD9CKG.js → ebnfDiagram-PWID7BFC-4kugBEsO.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-dKWAEGun.js → erDiagram-SSCWMZ5O-BMkFivWO.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CR_UgVqj.js → flowDiagram-A5DVABFB-BM1ea8g-.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DQUnjWO6.js → ganttDiagram-EL5Y4UJY-CXj_cKRf.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-C4j59wPL.js → gitGraphDiagram-WWUBYQGX-D0nEqwqu.js} +1 -1
- package/web-shell/assets/{index-tYXRIPz4.js → index-B6JN54Pd.js} +1 -1
- package/web-shell/assets/{index-BN_m_uHJ.css → index-C-XlQn24.css} +1 -1
- package/web-shell/assets/index-DLjXM0dn.js +1860 -0
- package/web-shell/assets/{infoDiagram-RXCK75RN-mzqbt50w.js → infoDiagram-RXCK75RN-DF7aGGbQ.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-ChLOqhGl.js → ishikawaDiagram-5VMMS53U-CZYNX1lL.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-SifZE-R8.js → journeyDiagram-EYS64GPL-CvrqMUz1.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-Sft2qlbc.js → kanban-definition-3QL26DDD-BZNJQZBj.js} +1 -1
- package/web-shell/assets/{layout-O2uHVkPd.js → layout-Bf83x7D6.js} +1 -1
- package/web-shell/assets/{linear-BVqYgjSc.js → linear-Bkc3ES2f.js} +1 -1
- package/web-shell/assets/{mermaid.core-CZ9MQaJ6.js → mermaid.core-C6xuovwz.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-BNQYjBqM.js → mindmap-definition-FBJOCRG2-DzH6gVRg.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-rh1J8uv6.js → pegDiagram-XKGWAZYB-DCvLh2fa.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-BQHR5mn9.js → pieDiagram-E7YTZNPT-BtjVlx_6.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-CLCbP7mK.js → quadrantDiagram-AXDQQJYC-IbroqxFe.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-CDQhrkbm.js → railroadDiagram-O6MQD6OU-BvMykiWW.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BdP9uswg.js → requirementDiagram-EFPCY7ZU-D-HHMyrh.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CFZDFBXF.js → sankeyDiagram-P5KCCOFB-C0XXhB6d.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BW9WOJXI.js → sequenceDiagram-WJ2MYXX4-DseAXj5d.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-CPMia32z.js → sizeCapture-X5ZJPWSS-Cek2EweK.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-BANp9p7F.js → stateDiagram-HBIQ2CUA-yLv8wafW.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DeThXnol.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-JroXksK-.js → swimlanes-XN3QIQJK-Cwz-opvE.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-GW0R1ZSv.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-DfuVIfYY.js → timeline-definition-24CTP7MA-BJuFD7OG.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-BZXoSjRB.js → vennDiagram-4TSXK5OY-CNAavdoV.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-BdiY8avC.js → wardleyDiagram-VM6X3IG4-DaIjAidq.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-DcXh_U4H.js → xychartDiagram-S5SC5T6Z-DkcQXjTy.js} +1 -1
- package/web-shell/index.html +19 -4
- package/chunks/MaxSizedBox-3OZJCC3J.js +0 -110
- package/chunks/agent-BFE3DQM3.js +0 -93
- package/chunks/agent-headless-LLVKZZ4P.js +0 -87
- package/chunks/bridge-EBYO4SYM.js +0 -118
- package/chunks/channel-settings-store-5VP2Y2YM.js +0 -115
- package/chunks/chunk-AXMWHKXA.js +0 -42
- package/chunks/chunk-IO257NUD.js +0 -623
- package/chunks/chunk-YHC2EYYG.js +0 -125
- package/chunks/computer-use-EGPWFEX6.js +0 -2142
- package/chunks/config-utils-WZ43VOBS.js +0 -25
- package/chunks/contextCommand-5DSEQI6S.js +0 -106
- package/chunks/daemon-status-provider-EYMLPYJU.js +0 -116
- package/chunks/daemon-trust-policy-CQYKZ7VO.js +0 -112
- package/chunks/deferred-core-runtime-WFEPUXZR.js +0 -114
- package/chunks/earlyInputCapture-PN4PP7V5.js +0 -107
- package/chunks/environment-WUPHLPKZ.js +0 -127
- package/chunks/errors-WPMPVIAT.js +0 -113
- package/chunks/exitPlanMode-MLFHYZNB.js +0 -85
- package/chunks/handleAutoUpdate-F5OTWUT5.js +0 -109
- package/chunks/i18n-C562S6KN.js +0 -124
- package/chunks/initializer-7YPGOFP4.js +0 -113
- package/chunks/installationInfo-ARU5Q2H7.js +0 -107
- package/chunks/list-KTSK275C.js +0 -116
- package/chunks/loadedSettingsAdapter-F3T2EQ5J.js +0 -110
- package/chunks/mcp-6ONTVPAY.js +0 -110
- package/chunks/nonInteractiveCli-KZDWFAN6.js +0 -178
- package/chunks/pidfile-IO7ALSZF.js +0 -111
- package/chunks/prompt-terminal-ledger-TCE7PMCE.js +0 -105
- package/chunks/resumeHistoryUtils-DDSBAQJS.js +0 -118
- package/chunks/ripGrep-E7P6K4QR.js +0 -40
- package/chunks/serve-KEAWV4TI.js +0 -118
- package/chunks/shell-H6K63WG3.js +0 -95
- package/chunks/skill-settings-TCKLXIXM.js +0 -118
- package/chunks/spawnChannel-2K6NKWM5.js +0 -111
- package/chunks/standalone-update-LSCGOEFP.js +0 -118
- package/chunks/terminal-image-renderer-UHX3UD66.js +0 -114
- package/chunks/theme-manager-6B47ZPIF.js +0 -102
- package/chunks/total-session-admission-NSCFWGJH.js +0 -113
- package/chunks/trustedFolders-7XMJWGQ3.js +0 -122
- package/chunks/updateCheck-EOVLHD4T.js +0 -118
- package/chunks/useAutoAcceptIndicator-ZNMIGBTN.js +0 -120
- package/chunks/workspace-providers-status-GPGU5YMT.js +0 -113
- package/chunks/workspace-registry-BQISXT6Y.js +0 -122
- package/chunks/workspace-service-LLY6HCUC.js +0 -129
- package/chunks/workspace-skills-status-L5N2Y3ZP.js +0 -113
- package/chunks/write-file-EJHU2Z3E.js +0 -90
- package/web-shell/assets/channel-Zg3WHgq_.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-C16l9jQz.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-C16l9jQz.js +0 -1
- package/web-shell/assets/index-DrlJu79f.js +0 -1792
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-NZYAoQLU.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-3YdVX3vj.js +0 -8
|
@@ -6,6 +6,9 @@ import {
|
|
|
6
6
|
import {
|
|
7
7
|
RUNTIME_STARTUP_CANCELLED_MESSAGE
|
|
8
8
|
} from "./chunk-QUPXZXLV.js";
|
|
9
|
+
import {
|
|
10
|
+
resolveServeToken
|
|
11
|
+
} from "./chunk-ZELCTN6Y.js";
|
|
9
12
|
import {
|
|
10
13
|
ACCESS_LOG_CONTROLLER_LOCAL,
|
|
11
14
|
CAPABILITIES_SCHEMA_VERSION,
|
|
@@ -37,28 +40,23 @@ import {
|
|
|
37
40
|
resolveAcpHttpEnabled,
|
|
38
41
|
setDeferredRuntimeRequestTiming,
|
|
39
42
|
toDaemonStatusMemoryLimits
|
|
40
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-SQPOJ4ZI.js";
|
|
41
44
|
import "./chunk-VGHZT6JR.js";
|
|
42
45
|
import {
|
|
43
|
-
isLoopbackBind,
|
|
44
46
|
normalizeSessionIdForLookup
|
|
45
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-ZEZKIS2K.js";
|
|
48
|
+
import {
|
|
49
|
+
isLoopbackBind
|
|
50
|
+
} from "./chunk-RXFQM6FQ.js";
|
|
46
51
|
import {
|
|
47
52
|
formatMemoryBudgetStderr,
|
|
48
53
|
resolveDaemonMemoryBudget,
|
|
49
54
|
serveJournalGrowthPoolMb
|
|
50
55
|
} from "./chunk-UXEO7E3V.js";
|
|
51
56
|
import "./chunk-NYWWQ437.js";
|
|
52
|
-
import {
|
|
53
|
-
require_express,
|
|
54
|
-
resolveWebShellDir
|
|
55
|
-
} from "./chunk-O5Z7EB6Y.js";
|
|
56
57
|
import {
|
|
57
58
|
resolveSessionRestoreTimeoutMs
|
|
58
59
|
} from "./chunk-4JRM2BSM.js";
|
|
59
|
-
import {
|
|
60
|
-
LIVE_HOST_PROTOCOL_VERSION
|
|
61
|
-
} from "./chunk-NKLP3DCK.js";
|
|
62
60
|
import {
|
|
63
61
|
DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
|
|
64
62
|
DEFAULT_MAX_JOURNAL_BYTES,
|
|
@@ -68,41 +66,63 @@ import {
|
|
|
68
66
|
normalizeMaxJournalBytes,
|
|
69
67
|
normalizeMaxJournalEvents
|
|
70
68
|
} from "./chunk-WCCLLK7X.js";
|
|
71
|
-
import
|
|
69
|
+
import {
|
|
70
|
+
require_express
|
|
71
|
+
} from "./chunk-AYHQZBJ4.js";
|
|
72
|
+
import {
|
|
73
|
+
resolveWebShellDir
|
|
74
|
+
} from "./chunk-FBX2SDQ4.js";
|
|
72
75
|
import {
|
|
73
76
|
resolveChannelCwd
|
|
74
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-7JPW6IYH.js";
|
|
78
|
+
import {
|
|
79
|
+
LIVE_HOST_PROTOCOL_VERSION
|
|
80
|
+
} from "./chunk-NKLP3DCK.js";
|
|
81
|
+
import "./chunk-K6KS3LTN.js";
|
|
82
|
+
import "./chunk-HMJ2P3SV.js";
|
|
83
|
+
import "./chunk-7E7UCJHS.js";
|
|
84
|
+
import {
|
|
85
|
+
consumeServeFastPathRejectedLoaderKeys,
|
|
86
|
+
loadServeFastPathSettings,
|
|
87
|
+
preResolveServeFastPathHomeEnvOverrides
|
|
88
|
+
} from "./chunk-TWSKM647.js";
|
|
75
89
|
import {
|
|
76
90
|
MAX_REGISTERED_WORKSPACES,
|
|
77
91
|
resolveWorkspaceInputs,
|
|
78
92
|
workspaceRegistrationId
|
|
79
|
-
} from "./chunk-
|
|
80
|
-
import "./chunk-
|
|
93
|
+
} from "./chunk-OQ6LTSX3.js";
|
|
94
|
+
import "./chunk-ZJG323IA.js";
|
|
81
95
|
import {
|
|
82
96
|
LOAD_REPLAY_META_KEY
|
|
83
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-OZ6KS6KW.js";
|
|
84
98
|
import "./chunk-624NHDGB.js";
|
|
85
99
|
import {
|
|
86
100
|
canonicalizeWorkspace,
|
|
87
101
|
translateAndCheckAbsoluteWorkspacePath
|
|
88
102
|
} from "./chunk-6PLDPT2C.js";
|
|
89
|
-
import
|
|
103
|
+
import {
|
|
104
|
+
ExtraCaInspectionError,
|
|
105
|
+
loadableCertificates
|
|
106
|
+
} from "./chunk-PAJGKZAA.js";
|
|
90
107
|
import "./chunk-FYJ7W2PI.js";
|
|
91
108
|
import "./chunk-Z7B6SRPM.js";
|
|
92
109
|
import {
|
|
93
110
|
ChannelDeliveryError,
|
|
94
111
|
ChannelWebhookEnqueueError,
|
|
95
|
-
QWEN_SERVER_TOKEN_ENV,
|
|
96
112
|
isChannelDeliveryError
|
|
97
|
-
} from "./chunk-
|
|
113
|
+
} from "./chunk-7CWEZQ6T.js";
|
|
98
114
|
import {
|
|
99
115
|
normalizeWorkerDiagnostic,
|
|
100
116
|
sanitizeWorkerDiagnostic
|
|
101
|
-
} from "./chunk-
|
|
117
|
+
} from "./chunk-JVPFTDBK.js";
|
|
118
|
+
import {
|
|
119
|
+
QWEN_SERVER_TOKEN_ENV
|
|
120
|
+
} from "./chunk-GYTKQYDB.js";
|
|
102
121
|
import {
|
|
103
122
|
channelSelectionNames
|
|
104
123
|
} from "./chunk-ALMR3E6Q.js";
|
|
105
124
|
import "./chunk-UDG5EZJI.js";
|
|
125
|
+
import "./chunk-M5GB774H.js";
|
|
106
126
|
import {
|
|
107
127
|
EXTERNAL_TOOL_GUARD_PROVIDER_ATTACHED_VALUE,
|
|
108
128
|
EXTERNAL_TOOL_GUARD_REQUIRED_VALUE,
|
|
@@ -110,21 +130,13 @@ import {
|
|
|
110
130
|
PRIVATE_EXTERNAL_TOOL_GUARD_ENV,
|
|
111
131
|
PRIVATE_EXTERNAL_TOOL_GUARD_PROVIDER_ENV
|
|
112
132
|
} from "./chunk-3VUENPWF.js";
|
|
113
|
-
import "./chunk-M5GB774H.js";
|
|
114
133
|
import {
|
|
115
134
|
MAX_DAEMON_WORKSPACES
|
|
116
135
|
} from "./chunk-5HBA2Z7V.js";
|
|
117
|
-
import "./chunk-K6KS3LTN.js";
|
|
118
|
-
import "./chunk-7E7UCJHS.js";
|
|
119
136
|
import {
|
|
120
137
|
sanitizeLogText
|
|
121
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-E55H6BZ7.js";
|
|
122
139
|
import "./chunk-IW6RQPQB.js";
|
|
123
|
-
import {
|
|
124
|
-
consumeServeFastPathRejectedLoaderKeys,
|
|
125
|
-
loadServeFastPathSettings,
|
|
126
|
-
preResolveServeFastPathHomeEnvOverrides
|
|
127
|
-
} from "./chunk-LD5VIJ7S.js";
|
|
128
140
|
import "./chunk-GOXKNSDZ.js";
|
|
129
141
|
import {
|
|
130
142
|
getGlobalQwenDirLite,
|
|
@@ -135,20 +147,20 @@ import {
|
|
|
135
147
|
clearLoaderKeyRejectionReporterIfCurrent,
|
|
136
148
|
scrubInheritedLoaderEnv,
|
|
137
149
|
setLoaderKeyRejectionReporter
|
|
138
|
-
} from "./chunk-
|
|
150
|
+
} from "./chunk-5PA6UEYA.js";
|
|
139
151
|
import {
|
|
140
152
|
getCliVersion
|
|
141
|
-
} from "./chunk-
|
|
142
|
-
import "./chunk-
|
|
153
|
+
} from "./chunk-6KS24S3X.js";
|
|
154
|
+
import "./chunk-W3N5XAZ6.js";
|
|
143
155
|
import "./chunk-NPQ5ZKRP.js";
|
|
144
156
|
import {
|
|
145
157
|
isWithinRoot
|
|
146
158
|
} from "./chunk-MR3PXB6E.js";
|
|
147
159
|
import "./chunk-LJZSMWOH.js";
|
|
148
160
|
import "./chunk-GOFAQQZA.js";
|
|
161
|
+
import "./chunk-5M6IDOMF.js";
|
|
149
162
|
import "./chunk-TWPJO254.js";
|
|
150
163
|
import "./chunk-CQ35AJ4Z.js";
|
|
151
|
-
import "./chunk-5M6IDOMF.js";
|
|
152
164
|
import {
|
|
153
165
|
require_proper_lockfile
|
|
154
166
|
} from "./chunk-MLXTMF7H.js";
|
|
@@ -182,9 +194,11 @@ import {
|
|
|
182
194
|
init_esbuild_shims();
|
|
183
195
|
var import_express = __toESM(require_express(), 1);
|
|
184
196
|
import { X509Certificate, createHash as createHash3, timingSafeEqual } from "node:crypto";
|
|
197
|
+
import { execFile } from "node:child_process";
|
|
185
198
|
import * as fs from "node:fs";
|
|
186
199
|
import { createServer } from "node:http";
|
|
187
200
|
import * as https from "node:https";
|
|
201
|
+
import { isIP } from "node:net";
|
|
188
202
|
import * as path from "node:path";
|
|
189
203
|
import * as os from "node:os";
|
|
190
204
|
import { monitorEventLoopDelay, performance as performance2 } from "node:perf_hooks";
|
|
@@ -3273,14 +3287,453 @@ function workspaceRuntimeEffectiveEnv(runtime, daemonEnv) {
|
|
|
3273
3287
|
return runtime.env.effectiveEnv ?? daemonEnv;
|
|
3274
3288
|
}
|
|
3275
3289
|
__name(workspaceRuntimeEffectiveEnv, "workspaceRuntimeEffectiveEnv");
|
|
3276
|
-
function formatChannelWorkerDaemonUrl(host, port) {
|
|
3290
|
+
function formatChannelWorkerDaemonUrl(host, port, tls = false) {
|
|
3291
|
+
const scheme = tls ? "https" : "http";
|
|
3277
3292
|
const normalized = host.trim().toLowerCase();
|
|
3278
3293
|
if (normalized === "" || normalized === "0.0.0.0" || normalized === "::" || normalized === "[::]") {
|
|
3279
|
-
return
|
|
3294
|
+
return `${scheme}://127.0.0.1:${port}`;
|
|
3280
3295
|
}
|
|
3281
|
-
return
|
|
3296
|
+
return `${scheme}://${formatHostForUrl(host)}:${port}`;
|
|
3282
3297
|
}
|
|
3283
3298
|
__name(formatChannelWorkerDaemonUrl, "formatChannelWorkerDaemonUrl");
|
|
3299
|
+
var WORKER_TLS_TRUST_PROBE = `
|
|
3300
|
+
import { isIP } from 'node:net';
|
|
3301
|
+
import * as tls from 'node:tls';
|
|
3302
|
+
const url = new URL(process.argv[1]);
|
|
3303
|
+
const timeoutMs = Number(process.argv[2]);
|
|
3304
|
+
const hostname = url.hostname.replace(/^\\[|\\]$/g, '');
|
|
3305
|
+
let socket;
|
|
3306
|
+
let settled = false;
|
|
3307
|
+
const finish = (result) => {
|
|
3308
|
+
if (settled) return;
|
|
3309
|
+
settled = true;
|
|
3310
|
+
process.stdout.write(JSON.stringify(result));
|
|
3311
|
+
socket?.destroy();
|
|
3312
|
+
};
|
|
3313
|
+
try {
|
|
3314
|
+
socket = tls.connect({
|
|
3315
|
+
host: hostname,
|
|
3316
|
+
port: Number(url.port || '443'),
|
|
3317
|
+
rejectUnauthorized: true,
|
|
3318
|
+
...(isIP(hostname) === 0 ? { servername: hostname } : {}),
|
|
3319
|
+
}, () => finish({ ok: true }));
|
|
3320
|
+
socket.once('error', (error) => finish({
|
|
3321
|
+
ok: false,
|
|
3322
|
+
code: error.code ?? 'WORKER_TLS_VERIFY_FAILED',
|
|
3323
|
+
message: error.message,
|
|
3324
|
+
}));
|
|
3325
|
+
socket.setTimeout(timeoutMs, () => finish({
|
|
3326
|
+
ok: false,
|
|
3327
|
+
code: 'WORKER_TLS_VERIFY_TIMEOUT',
|
|
3328
|
+
message: 'TLS verification probe timed out.',
|
|
3329
|
+
}));
|
|
3330
|
+
} catch (error) {
|
|
3331
|
+
finish({
|
|
3332
|
+
ok: false,
|
|
3333
|
+
code: error.code ?? 'WORKER_TLS_VERIFY_FAILED',
|
|
3334
|
+
message: error.message,
|
|
3335
|
+
});
|
|
3336
|
+
}
|
|
3337
|
+
`;
|
|
3338
|
+
async function verifyWorkerTlsTrust(opts) {
|
|
3339
|
+
const timeoutMs = opts.timeoutMs ?? 5e3;
|
|
3340
|
+
return new Promise((resolve4) => {
|
|
3341
|
+
execFile(
|
|
3342
|
+
process.execPath,
|
|
3343
|
+
[
|
|
3344
|
+
"--input-type=module",
|
|
3345
|
+
"--eval",
|
|
3346
|
+
WORKER_TLS_TRUST_PROBE,
|
|
3347
|
+
opts.daemonUrl,
|
|
3348
|
+
String(timeoutMs)
|
|
3349
|
+
],
|
|
3350
|
+
{
|
|
3351
|
+
env: {
|
|
3352
|
+
...process.env,
|
|
3353
|
+
NODE_EXTRA_CA_CERTS: opts.caCertPath
|
|
3354
|
+
},
|
|
3355
|
+
encoding: "utf8",
|
|
3356
|
+
timeout: timeoutMs + 1e3
|
|
3357
|
+
},
|
|
3358
|
+
(error, stdout) => {
|
|
3359
|
+
try {
|
|
3360
|
+
const result = JSON.parse(stdout);
|
|
3361
|
+
resolve4(result.ok ? void 0 : result);
|
|
3362
|
+
} catch {
|
|
3363
|
+
const failure = error;
|
|
3364
|
+
resolve4({
|
|
3365
|
+
code: failure?.code != null ? String(failure.code) : "WORKER_TLS_VERIFY_FAILED",
|
|
3366
|
+
message: failure?.message ?? "TLS verification probe failed."
|
|
3367
|
+
});
|
|
3368
|
+
}
|
|
3369
|
+
}
|
|
3370
|
+
);
|
|
3371
|
+
});
|
|
3372
|
+
}
|
|
3373
|
+
__name(verifyWorkerTlsTrust, "verifyWorkerTlsTrust");
|
|
3374
|
+
function describeWorkerTlsTrustGaps(opts) {
|
|
3375
|
+
const chain = parseCertChain(opts.cert);
|
|
3376
|
+
const x509 = bootParsedLeaf(opts.cert);
|
|
3377
|
+
if (!x509) {
|
|
3378
|
+
return [];
|
|
3379
|
+
}
|
|
3380
|
+
const gaps = [];
|
|
3381
|
+
const operatorChain = opts.operatorCaCert ? loadableCertificates(
|
|
3382
|
+
opts.operatorCaCert.toString("utf8"),
|
|
3383
|
+
opts.operatorCaCertSourcePath
|
|
3384
|
+
) : void 0;
|
|
3385
|
+
const servingBlocks = loadableCertificates(
|
|
3386
|
+
opts.cert.toString("utf8"),
|
|
3387
|
+
opts.certSourcePath
|
|
3388
|
+
);
|
|
3389
|
+
const operatorDiscarded = !servingBlocks && operatorChain !== void 0;
|
|
3390
|
+
const servingChain = servingBlocks === void 0 ? [
|
|
3391
|
+
x509,
|
|
3392
|
+
...chain.filter(
|
|
3393
|
+
(member) => member.fingerprint256 !== x509.fingerprint256
|
|
3394
|
+
)
|
|
3395
|
+
] : (
|
|
3396
|
+
// The loader can read blocks out of the file and still not read the
|
|
3397
|
+
// block the daemon SERVES — a leaf exported by `openssl x509
|
|
3398
|
+
// -trustout` carries the `TRUSTED CERTIFICATE` label, which is not one
|
|
3399
|
+
// the loader takes a certificate from, so a `trusted leaf + plain root`
|
|
3400
|
+
// serving file yields `servingBlocks = [root]`. Starting the walk at
|
|
3401
|
+
// that root put it at depth 0, where the leaf-depth exemption below
|
|
3402
|
+
// waives the CA-capability check, and the walk returned anchored with
|
|
3403
|
+
// zero gaps: measured `gaps: []` at boot for a CA:FALSE root
|
|
3404
|
+
// (handshake INVALID_PURPOSE) and for a CA:TRUE root without
|
|
3405
|
+
// keyCertSign (handshake UNSPECIFIED), while `createSecureContext`
|
|
3406
|
+
// accepts the file and the daemon boots green and silent.
|
|
3407
|
+
//
|
|
3408
|
+
// So anchor the walk at the certificate boot parsed, the way the
|
|
3409
|
+
// `servingBlocks === undefined` fallback above already does; the
|
|
3410
|
+
// remaining blocks supply the rest of the chain.
|
|
3411
|
+
servingBlocks.some(
|
|
3412
|
+
(block) => block.fingerprint256 === x509.fingerprint256
|
|
3413
|
+
) ? servingBlocks : [x509, ...servingBlocks]
|
|
3414
|
+
);
|
|
3415
|
+
const leafHeldByWorkers = servingBlocks !== void 0 && servingBlocks.some((block) => block.fingerprint256 === x509.fingerprint256);
|
|
3416
|
+
const workerTrustStore = operatorChain && servingBlocks ? [...operatorChain, ...servingChain] : servingChain;
|
|
3417
|
+
const anchorPath = walkWorkerAnchorPath(
|
|
3418
|
+
x509,
|
|
3419
|
+
workerTrustStore,
|
|
3420
|
+
// The `servingBlocks === undefined` fallback prepends the leaf too, but
|
|
3421
|
+
// that file already reports its own gap below and the workers receive it
|
|
3422
|
+
// verbatim; only the partial-read case needs the distinction.
|
|
3423
|
+
servingBlocks === void 0 || leafHeldByWorkers
|
|
3424
|
+
);
|
|
3425
|
+
if (opts.operatorCaCertReadError !== void 0) {
|
|
3426
|
+
const servingFallbackAnchors = anchorPath.anchored && servingBlocks !== void 0;
|
|
3427
|
+
gaps.push(
|
|
3428
|
+
`NODE_EXTRA_CA_CERTS "${opts.operatorCaCertPath}" could not be read by the daemon (${opts.operatorCaCertReadError}), so channel workers receive no CA from it \u2014 a root-owned or mode-600 file is the usual cause, and its contents are not the problem. ` + (servingFallbackAnchors ? `--tls-cert "${opts.certPath}" carries an anchor of its own, and that file is what the workers fall back to, so their trust does not rest on this one today \u2014 whatever it was meant to add reaches nobody. Fix that file's permissions or path and restart.` : servingBlocks === void 0 ? `--tls-cert "${opts.certPath}" itself holds no block the workers' loader can read, so their fallback bundle is that file alone and it anchors nothing \u2014 fixing this CA file's permissions changes nothing; re-export the serving file as the gap below describes and restart.` : `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. Fix that file's permissions or path and restart.`)
|
|
3429
|
+
);
|
|
3430
|
+
} else if (opts.operatorCaCert && !operatorChain) {
|
|
3431
|
+
gaps.push(
|
|
3432
|
+
`NODE_EXTRA_CA_CERTS "${opts.operatorCaCertPath}" holds no PEM certificate block Node's loader can read \u2014 every -----BEGIN/END CERTIFICATE----- marker must sit alone on its own line and every block must decode, and a DER file is never read at all. Channel workers therefore receive the daemon cert alone and anchor nothing through this file. Re-export it as PEM and restart.`
|
|
3433
|
+
);
|
|
3434
|
+
}
|
|
3435
|
+
if (!servingBlocks) {
|
|
3436
|
+
gaps.push(
|
|
3437
|
+
`--tls-cert "${opts.certPath}" holds no PEM certificate block Node's loader can read, so ` + (operatorDiscarded ? `the channel workers' bundle cannot be merged: they receive that file alone and NODE_EXTRA_CA_CERTS "${opts.operatorCaCertPath}" is discarded. ` : `the channel workers receive a bundle their loader takes nothing from. `) + `Every worker handshake to the daemon will fail UNABLE_TO_VERIFY_LEAF_SIGNATURE. Re-export --tls-cert as PEM with every -----BEGIN/END CERTIFICATE----- marker alone on its own line and restart.`
|
|
3438
|
+
);
|
|
3439
|
+
}
|
|
3440
|
+
const leafPurposeDefect = tlsServerPurposeDefect(x509);
|
|
3441
|
+
if (leafPurposeDefect) {
|
|
3442
|
+
gaps.push(
|
|
3443
|
+
`--tls-cert "${opts.certPath}" cannot be used as a TLS server certificate because ${leafPurposeDefect}. Every worker handshake to the daemon will fail INVALID_PURPOSE. Reissue the leaf with a TLS-server keyUsage and serverAuth extendedKeyUsage, then restart.`
|
|
3444
|
+
);
|
|
3445
|
+
}
|
|
3446
|
+
if (anchorPath.nonCaTerminator) {
|
|
3447
|
+
const terminatorSubject = anchorPath.nonCaTerminator.subject.replace(
|
|
3448
|
+
/\r?\n/g,
|
|
3449
|
+
", "
|
|
3450
|
+
);
|
|
3451
|
+
gaps.push(
|
|
3452
|
+
issuerRefusedForKeyUsage(anchorPath.nonCaTerminator) ? `--tls-cert "${opts.certPath}" chains up to "${terminatorSubject}", which is self-signed but whose keyUsage does not include keyCertSign, so OpenSSL refuses to let it issue the certificates below it however its basicConstraints reads. Every worker handshake to the daemon will fail "key usage does not include certificate signing" even though the chain terminates on a self-signed certificate. Reissue that certificate with keyCertSign in its keyUsage and restart \u2014 CA:TRUE alone does not fix it, and no NODE_EXTRA_CA_CERTS can anchor a self-signed certificate through anything but itself.` : `--tls-cert "${opts.certPath}" chains up to "${terminatorSubject}", which is self-signed but is not a CA \u2014 it carries basicConstraints CA:FALSE or, as an X.509 v3 certificate, no basicConstraints at all, and OpenSSL refuses to let it issue the certificates below it, so every worker handshake to the daemon will fail INVALID_PURPOSE ("unsuitable certificate purpose"). Reissue that certificate with CA:TRUE, or point NODE_EXTRA_CA_CERTS at a real CA that anchors the chain, and restart.`
|
|
3453
|
+
);
|
|
3454
|
+
} else if (anchorPath.incapableIssuer) {
|
|
3455
|
+
const keyUsageIsTheCause = issuerRefusedForKeyUsage(
|
|
3456
|
+
anchorPath.incapableIssuer
|
|
3457
|
+
);
|
|
3458
|
+
gaps.push(
|
|
3459
|
+
`--tls-cert "${opts.certPath}" chains through "${anchorPath.incapableIssuer.subject.replace(/\r?\n/g, ", ")}", ` + (keyUsageIsTheCause ? `whose keyUsage does not include keyCertSign, so OpenSSL refuses to let it issue the certificate below it however its basicConstraints reads. Every worker handshake to the daemon will fail with an invalid-CA error even though the chain looks complete, and the issuing CA IS in their bundle. Reissue that intermediate with keyCertSign in its keyUsage and restart \u2014 pointing NODE_EXTRA_CA_CERTS elsewhere cannot fix it.` : `which is not a CA \u2014 it carries basicConstraints CA:FALSE or, as an X.509 v3 certificate, no basicConstraints at all, and OpenSSL refuses to let it issue the certificate below it. Every worker handshake to the daemon will fail INVALID_PURPOSE or INVALID_CA even though the chain looks complete. Reissue that intermediate with CA:TRUE, or point NODE_EXTRA_CA_CERTS at a chain whose intermediates are real CAs, and restart.`)
|
|
3460
|
+
);
|
|
3461
|
+
} else if (anchorPath.pathLengthViolation) {
|
|
3462
|
+
const { cert, constraint } = anchorPath.pathLengthViolation;
|
|
3463
|
+
gaps.push(
|
|
3464
|
+
`--tls-cert "${opts.certPath}" chains through "${cert.subject.replace(/\r?\n/g, ", ")}", whose basicConstraints carries pathlen:${constraint} \u2014 it permits at most ${constraint} intermediate CA${constraint === 1 ? "" : "s"} below it, and this chain has more. Every worker handshake to the daemon will fail PATH_LENGTH_EXCEEDED even though every certificate in the bundle verifies. Reissue that CA with a pathlen that covers the chain, or shorten the chain, and restart.`
|
|
3465
|
+
);
|
|
3466
|
+
} else if (anchorPath.unheldSelfSignedLeaf) {
|
|
3467
|
+
gaps.push(
|
|
3468
|
+
`--tls-cert "${opts.certPath}" serves a self-signed certificate whose own PEM block is not one Node's NODE_EXTRA_CA_CERTS loader takes (a -----BEGIN TRUSTED CERTIFICATE----- block, as \`openssl x509 -trustout\` writes, is the usual cause), so the channel workers never receive that certificate \u2014 and a self-signed certificate verifies only when it is itself in the trust store. The daemon serves it fine, but every worker handshake will fail DEPTH_ZERO_SELF_SIGNED_CERT with nothing logged. Re-export --tls-cert with a plain -----BEGIN CERTIFICATE----- block and restart.`
|
|
3469
|
+
);
|
|
3470
|
+
} else if (!anchorPath.anchored) {
|
|
3471
|
+
gaps.push(
|
|
3472
|
+
`--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.`)
|
|
3473
|
+
);
|
|
3474
|
+
}
|
|
3475
|
+
const now = Date.now();
|
|
3476
|
+
for (const member of anchorPath.path) {
|
|
3477
|
+
if (member.fingerprint256 === x509.fingerprint256) continue;
|
|
3478
|
+
const subject = member.subject.replace(/\r?\n/g, ", ");
|
|
3479
|
+
if (member.keyUsage && !member.keyUsage.includes(TLS_SERVER_AUTH_OID)) {
|
|
3480
|
+
gaps.push(
|
|
3481
|
+
`--tls-cert "${opts.certPath}" chains through "${subject}", whose extendedKeyUsage does not include serverAuth \u2014 every worker handshake to the daemon will fail INVALID_PURPOSE. Reissue that chain member with serverAuth in its extendedKeyUsage and restart.`
|
|
3482
|
+
);
|
|
3483
|
+
continue;
|
|
3484
|
+
}
|
|
3485
|
+
if (new Date(member.validTo).getTime() < now) {
|
|
3486
|
+
gaps.push(
|
|
3487
|
+
`--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.`
|
|
3488
|
+
);
|
|
3489
|
+
} else if (new Date(member.validFrom).getTime() > now) {
|
|
3490
|
+
gaps.push(
|
|
3491
|
+
`--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.`
|
|
3492
|
+
);
|
|
3493
|
+
}
|
|
3494
|
+
}
|
|
3495
|
+
const host = workerDialHost(opts.daemonUrl);
|
|
3496
|
+
if (host && !certCoversHost(x509, host)) {
|
|
3497
|
+
gaps.push(
|
|
3498
|
+
`--tls-cert "${opts.certPath}" has no subjectAltName covering "${host}", the host channel workers dial \u2014 every worker handshake will fail ERR_TLS_CERT_ALTNAME_INVALID. Reissue the certificate with that host in its SANs and restart.`
|
|
3499
|
+
);
|
|
3500
|
+
}
|
|
3501
|
+
return gaps;
|
|
3502
|
+
}
|
|
3503
|
+
__name(describeWorkerTlsTrustGaps, "describeWorkerTlsTrustGaps");
|
|
3504
|
+
var BASIC_CONSTRAINTS_OID = Buffer.from([85, 29, 19]);
|
|
3505
|
+
var KEY_USAGE_OID = Buffer.from([85, 29, 15]);
|
|
3506
|
+
var KEY_CERT_SIGN_MASK = 4;
|
|
3507
|
+
var TLS_SERVER_KEY_USAGE_MASK = 168;
|
|
3508
|
+
var TLS_SERVER_AUTH_OID = "1.3.6.1.5.5.7.3.1";
|
|
3509
|
+
var VERSION_TAG = 160;
|
|
3510
|
+
var EXTENSIONS_TAG = 163;
|
|
3511
|
+
var SEQUENCE_TAG = 48;
|
|
3512
|
+
var BOOLEAN_TAG = 1;
|
|
3513
|
+
var INTEGER_TAG = 2;
|
|
3514
|
+
function derElementAt(der, at) {
|
|
3515
|
+
const tag = der[at];
|
|
3516
|
+
const header = der[at + 1];
|
|
3517
|
+
if (tag === void 0 || header === void 0) return void 0;
|
|
3518
|
+
let start = at + 2;
|
|
3519
|
+
let length = header & 127;
|
|
3520
|
+
if ((header & 128) !== 0) {
|
|
3521
|
+
if (length === 0 || length > 4) return void 0;
|
|
3522
|
+
let value = 0;
|
|
3523
|
+
for (let index = 0; index < length; index += 1) {
|
|
3524
|
+
const byte = der[start + index];
|
|
3525
|
+
if (byte === void 0) return void 0;
|
|
3526
|
+
value = value * 256 + byte;
|
|
3527
|
+
}
|
|
3528
|
+
start += length;
|
|
3529
|
+
length = value;
|
|
3530
|
+
}
|
|
3531
|
+
const end = start + length;
|
|
3532
|
+
return end <= der.length ? { tag, start, end } : void 0;
|
|
3533
|
+
}
|
|
3534
|
+
__name(derElementAt, "derElementAt");
|
|
3535
|
+
function tbsCertificateOf(cert) {
|
|
3536
|
+
const certificate = derElementAt(cert.raw, 0);
|
|
3537
|
+
if (certificate?.tag !== SEQUENCE_TAG) return void 0;
|
|
3538
|
+
const tbs = derElementAt(cert.raw, certificate.start);
|
|
3539
|
+
return tbs?.tag === SEQUENCE_TAG ? tbs : void 0;
|
|
3540
|
+
}
|
|
3541
|
+
__name(tbsCertificateOf, "tbsCertificateOf");
|
|
3542
|
+
function certificateExtension(cert, oid) {
|
|
3543
|
+
const der = cert.raw;
|
|
3544
|
+
const tbs = tbsCertificateOf(cert);
|
|
3545
|
+
if (!tbs) return void 0;
|
|
3546
|
+
let at = tbs.start;
|
|
3547
|
+
while (at < tbs.end) {
|
|
3548
|
+
const member = derElementAt(der, at);
|
|
3549
|
+
if (!member) return void 0;
|
|
3550
|
+
if (member.tag !== EXTENSIONS_TAG) {
|
|
3551
|
+
at = member.end;
|
|
3552
|
+
continue;
|
|
3553
|
+
}
|
|
3554
|
+
const list = derElementAt(der, member.start);
|
|
3555
|
+
if (list?.tag !== SEQUENCE_TAG) return void 0;
|
|
3556
|
+
let entry = list.start;
|
|
3557
|
+
while (entry < list.end) {
|
|
3558
|
+
const extension = derElementAt(der, entry);
|
|
3559
|
+
if (extension?.tag !== SEQUENCE_TAG) return void 0;
|
|
3560
|
+
const id = derElementAt(der, extension.start);
|
|
3561
|
+
if (!id) return void 0;
|
|
3562
|
+
let valueAt = id.end;
|
|
3563
|
+
const critical = derElementAt(der, valueAt);
|
|
3564
|
+
if (critical?.tag === BOOLEAN_TAG) valueAt = critical.end;
|
|
3565
|
+
const value = derElementAt(der, valueAt);
|
|
3566
|
+
if (!value) return void 0;
|
|
3567
|
+
if (der.subarray(id.start, id.end).equals(oid)) {
|
|
3568
|
+
return der.subarray(value.start, value.end);
|
|
3569
|
+
}
|
|
3570
|
+
entry = extension.end;
|
|
3571
|
+
}
|
|
3572
|
+
return void 0;
|
|
3573
|
+
}
|
|
3574
|
+
return void 0;
|
|
3575
|
+
}
|
|
3576
|
+
__name(certificateExtension, "certificateExtension");
|
|
3577
|
+
function keyUsageAllowsCertSign(der) {
|
|
3578
|
+
const bits = derElementAt(der, 0);
|
|
3579
|
+
if (!bits) return false;
|
|
3580
|
+
const first = der[bits.start + 1];
|
|
3581
|
+
return first !== void 0 && (first & KEY_CERT_SIGN_MASK) !== 0;
|
|
3582
|
+
}
|
|
3583
|
+
__name(keyUsageAllowsCertSign, "keyUsageAllowsCertSign");
|
|
3584
|
+
function tlsServerPurposeDefect(cert) {
|
|
3585
|
+
const keyUsage = certificateExtension(cert, KEY_USAGE_OID);
|
|
3586
|
+
if (keyUsage !== void 0) {
|
|
3587
|
+
const bits = derElementAt(keyUsage, 0);
|
|
3588
|
+
const first = bits ? keyUsage[bits.start + 1] : void 0;
|
|
3589
|
+
if (first === void 0 || (first & TLS_SERVER_KEY_USAGE_MASK) === 0) {
|
|
3590
|
+
return "its keyUsage permits none of digitalSignature, keyEncipherment, or keyAgreement";
|
|
3591
|
+
}
|
|
3592
|
+
}
|
|
3593
|
+
if (cert.keyUsage && !cert.keyUsage.includes(TLS_SERVER_AUTH_OID)) {
|
|
3594
|
+
return "its extendedKeyUsage does not include serverAuth";
|
|
3595
|
+
}
|
|
3596
|
+
return void 0;
|
|
3597
|
+
}
|
|
3598
|
+
__name(tlsServerPurposeDefect, "tlsServerPurposeDefect");
|
|
3599
|
+
function isV1Certificate(cert) {
|
|
3600
|
+
const tbs = tbsCertificateOf(cert);
|
|
3601
|
+
return tbs !== void 0 && cert.raw[tbs.start] !== VERSION_TAG;
|
|
3602
|
+
}
|
|
3603
|
+
__name(isV1Certificate, "isV1Certificate");
|
|
3604
|
+
function cannotIssueCertificates(cert) {
|
|
3605
|
+
const keyUsage = certificateExtension(cert, KEY_USAGE_OID);
|
|
3606
|
+
if (keyUsage !== void 0 && !keyUsageAllowsCertSign(keyUsage)) return true;
|
|
3607
|
+
if (certificateExtension(cert, BASIC_CONSTRAINTS_OID) !== void 0) {
|
|
3608
|
+
return !cert.ca;
|
|
3609
|
+
}
|
|
3610
|
+
return !isV1Certificate(cert) && keyUsage === void 0;
|
|
3611
|
+
}
|
|
3612
|
+
__name(cannotIssueCertificates, "cannotIssueCertificates");
|
|
3613
|
+
function isSelfSignedCert(x509) {
|
|
3614
|
+
if (x509.subject !== x509.issuer) return false;
|
|
3615
|
+
try {
|
|
3616
|
+
return x509.verify(x509.publicKey);
|
|
3617
|
+
} catch {
|
|
3618
|
+
return true;
|
|
3619
|
+
}
|
|
3620
|
+
}
|
|
3621
|
+
__name(isSelfSignedCert, "isSelfSignedCert");
|
|
3622
|
+
var PEM_CERTIFICATE_BLOCK = /-----BEGIN CERTIFICATE-----[^-]*-----END CERTIFICATE-----/g;
|
|
3623
|
+
function parseCertChain(cert) {
|
|
3624
|
+
const blocks = cert.toString("utf8").match(PEM_CERTIFICATE_BLOCK);
|
|
3625
|
+
if (!blocks) {
|
|
3626
|
+
try {
|
|
3627
|
+
return [new X509Certificate(cert)];
|
|
3628
|
+
} catch {
|
|
3629
|
+
return [];
|
|
3630
|
+
}
|
|
3631
|
+
}
|
|
3632
|
+
const chain = [];
|
|
3633
|
+
for (const block of blocks) {
|
|
3634
|
+
try {
|
|
3635
|
+
chain.push(new X509Certificate(block));
|
|
3636
|
+
} catch {
|
|
3637
|
+
}
|
|
3638
|
+
}
|
|
3639
|
+
return chain;
|
|
3640
|
+
}
|
|
3641
|
+
__name(parseCertChain, "parseCertChain");
|
|
3642
|
+
function bootParsedLeaf(cert) {
|
|
3643
|
+
try {
|
|
3644
|
+
return new X509Certificate(cert);
|
|
3645
|
+
} catch {
|
|
3646
|
+
return void 0;
|
|
3647
|
+
}
|
|
3648
|
+
}
|
|
3649
|
+
__name(bootParsedLeaf, "bootParsedLeaf");
|
|
3650
|
+
function certIssuedBy(cert, issuer) {
|
|
3651
|
+
try {
|
|
3652
|
+
return cert.issuer === issuer.subject && cert.verify(issuer.publicKey);
|
|
3653
|
+
} catch {
|
|
3654
|
+
return false;
|
|
3655
|
+
}
|
|
3656
|
+
}
|
|
3657
|
+
__name(certIssuedBy, "certIssuedBy");
|
|
3658
|
+
function issuerRefusedForKeyUsage(cert) {
|
|
3659
|
+
const keyUsage = certificateExtension(cert, KEY_USAGE_OID);
|
|
3660
|
+
return keyUsage !== void 0 && !keyUsageAllowsCertSign(keyUsage);
|
|
3661
|
+
}
|
|
3662
|
+
__name(issuerRefusedForKeyUsage, "issuerRefusedForKeyUsage");
|
|
3663
|
+
function pathLengthConstraint(cert) {
|
|
3664
|
+
const value = certificateExtension(cert, BASIC_CONSTRAINTS_OID);
|
|
3665
|
+
if (!value) return void 0;
|
|
3666
|
+
const sequence = derElementAt(value, 0);
|
|
3667
|
+
if (sequence?.tag !== SEQUENCE_TAG) return void 0;
|
|
3668
|
+
let at = sequence.start;
|
|
3669
|
+
const first = derElementAt(value, at);
|
|
3670
|
+
if (!first) return void 0;
|
|
3671
|
+
if (first.tag === BOOLEAN_TAG) at = first.end;
|
|
3672
|
+
const integer = derElementAt(value, at);
|
|
3673
|
+
if (integer?.tag !== INTEGER_TAG) return void 0;
|
|
3674
|
+
let length = 0;
|
|
3675
|
+
for (let index = integer.start; index < integer.end; index += 1) {
|
|
3676
|
+
const byte = value[index];
|
|
3677
|
+
if (byte === void 0) return void 0;
|
|
3678
|
+
length = length * 256 + byte;
|
|
3679
|
+
}
|
|
3680
|
+
return length;
|
|
3681
|
+
}
|
|
3682
|
+
__name(pathLengthConstraint, "pathLengthConstraint");
|
|
3683
|
+
function walkWorkerAnchorPath(leaf, chain, leafHeldByWorkers = true) {
|
|
3684
|
+
let next = leaf;
|
|
3685
|
+
const walked = /* @__PURE__ */ new Set();
|
|
3686
|
+
const path2 = [];
|
|
3687
|
+
let pathLengthViolation;
|
|
3688
|
+
while (next) {
|
|
3689
|
+
const current = next;
|
|
3690
|
+
path2.push(current);
|
|
3691
|
+
if (path2.length > 1 && pathLengthViolation === void 0) {
|
|
3692
|
+
const constraint = pathLengthConstraint(current);
|
|
3693
|
+
const intermediatesBelow = path2.length - 2;
|
|
3694
|
+
if (constraint !== void 0 && intermediatesBelow > constraint) {
|
|
3695
|
+
pathLengthViolation = { cert: current, constraint };
|
|
3696
|
+
}
|
|
3697
|
+
}
|
|
3698
|
+
if (isSelfSignedCert(current)) {
|
|
3699
|
+
if (path2.length > 1 && cannotIssueCertificates(current)) {
|
|
3700
|
+
return { anchored: false, path: path2, nonCaTerminator: current };
|
|
3701
|
+
}
|
|
3702
|
+
if (path2.length === 1 && !leafHeldByWorkers) {
|
|
3703
|
+
return { anchored: false, path: path2, unheldSelfSignedLeaf: current };
|
|
3704
|
+
}
|
|
3705
|
+
return pathLengthViolation ? { anchored: false, path: path2, pathLengthViolation } : { anchored: true, path: path2 };
|
|
3706
|
+
}
|
|
3707
|
+
walked.add(current.fingerprint256);
|
|
3708
|
+
const issuer = chain.find(
|
|
3709
|
+
(candidate) => !walked.has(candidate.fingerprint256) && certIssuedBy(current, candidate)
|
|
3710
|
+
);
|
|
3711
|
+
if (issuer && !isSelfSignedCert(issuer) && !issuer.ca) {
|
|
3712
|
+
return { anchored: false, path: path2, incapableIssuer: issuer };
|
|
3713
|
+
}
|
|
3714
|
+
next = issuer;
|
|
3715
|
+
}
|
|
3716
|
+
return pathLengthViolation ? { anchored: false, path: path2, pathLengthViolation } : { anchored: false, path: path2 };
|
|
3717
|
+
}
|
|
3718
|
+
__name(walkWorkerAnchorPath, "walkWorkerAnchorPath");
|
|
3719
|
+
function workerDialHost(daemonUrl) {
|
|
3720
|
+
try {
|
|
3721
|
+
const hostname = new URL(daemonUrl).hostname;
|
|
3722
|
+
if (!hostname) return void 0;
|
|
3723
|
+
return hostname.startsWith("[") && hostname.endsWith("]") ? hostname.slice(1, -1) : hostname;
|
|
3724
|
+
} catch {
|
|
3725
|
+
return void 0;
|
|
3726
|
+
}
|
|
3727
|
+
}
|
|
3728
|
+
__name(workerDialHost, "workerDialHost");
|
|
3729
|
+
function certCoversHost(x509, host) {
|
|
3730
|
+
try {
|
|
3731
|
+
return isIP(host) ? Boolean(x509.checkIP(host)) : Boolean(x509.checkHost(host));
|
|
3732
|
+
} catch {
|
|
3733
|
+
return true;
|
|
3734
|
+
}
|
|
3735
|
+
}
|
|
3736
|
+
__name(certCoversHost, "certCoversHost");
|
|
3284
3737
|
function extractContextFilename(value) {
|
|
3285
3738
|
if (typeof value === "string") {
|
|
3286
3739
|
const trimmed = value.trim();
|
|
@@ -3346,12 +3799,12 @@ __name(hasRetryableChannelWorkerShutdownError, "hasRetryableChannelWorkerShutdow
|
|
|
3346
3799
|
var channelWorkerRuntimePromise;
|
|
3347
3800
|
async function loadChannelWorkerRuntime() {
|
|
3348
3801
|
channelWorkerRuntimePromise ??= Promise.all([
|
|
3349
|
-
import("./channel-worker-supervisor-
|
|
3350
|
-
import("./pidfile-
|
|
3351
|
-
import("./runtime-
|
|
3802
|
+
import("./channel-worker-supervisor-YSKB5GVB.js"),
|
|
3803
|
+
import("./pidfile-DHV2Y7UD.js"),
|
|
3804
|
+
import("./runtime-I76HPFUE.js"),
|
|
3352
3805
|
import("./cli-entry-path-4VJ3Y6T2.js"),
|
|
3353
|
-
import("./channel-worker-group-
|
|
3354
|
-
import("./channel-worker-manager-
|
|
3806
|
+
import("./channel-worker-group-EVDC2P4K.js"),
|
|
3807
|
+
import("./channel-worker-manager-IJJZHGEI.js")
|
|
3355
3808
|
]).then(
|
|
3356
3809
|
([
|
|
3357
3810
|
supervisor,
|
|
@@ -3362,6 +3815,7 @@ async function loadChannelWorkerRuntime() {
|
|
|
3362
3815
|
workerManager
|
|
3363
3816
|
]) => ({
|
|
3364
3817
|
createChannelWorkerSupervisor: supervisor.createChannelWorkerSupervisor,
|
|
3818
|
+
resolveWorkerCaCertPath: supervisor.resolveWorkerCaCertPath,
|
|
3365
3819
|
channelServicePidfile: pidfile,
|
|
3366
3820
|
loadChannelsConfig: channelRuntime.loadChannelsConfig,
|
|
3367
3821
|
createChannelWorkerGroup: workerGroup.createChannelWorkerGroup,
|
|
@@ -3456,7 +3910,7 @@ function shouldPreheatBridge(deps) {
|
|
|
3456
3910
|
__name(shouldPreheatBridge, "shouldPreheatBridge");
|
|
3457
3911
|
var coreRuntimePromise;
|
|
3458
3912
|
function loadCoreRuntime() {
|
|
3459
|
-
coreRuntimePromise ??= import("./core-runtime-
|
|
3913
|
+
coreRuntimePromise ??= import("./core-runtime-PKNQ63VL.js");
|
|
3460
3914
|
return coreRuntimePromise;
|
|
3461
3915
|
}
|
|
3462
3916
|
__name(loadCoreRuntime, "loadCoreRuntime");
|
|
@@ -3492,10 +3946,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
|
|
|
3492
3946
|
var settingsRuntimePromise;
|
|
3493
3947
|
function loadSettingsRuntimeModules() {
|
|
3494
3948
|
settingsRuntimePromise ??= Promise.all([
|
|
3495
|
-
import("./settings-
|
|
3496
|
-
import("./environment-
|
|
3497
|
-
import("./loadedSettingsAdapter-
|
|
3498
|
-
import("./trustedFolders-
|
|
3949
|
+
import("./settings-IX5HOOCG.js"),
|
|
3950
|
+
import("./environment-JXOSW25V.js"),
|
|
3951
|
+
import("./loadedSettingsAdapter-IK7H5JRK.js"),
|
|
3952
|
+
import("./trustedFolders-YKK67IP3.js")
|
|
3499
3953
|
]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
|
|
3500
3954
|
settings,
|
|
3501
3955
|
environment,
|
|
@@ -3508,8 +3962,8 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
|
|
|
3508
3962
|
var channelWebhookConfigRuntimePromise;
|
|
3509
3963
|
function loadChannelWebhookConfigRuntime() {
|
|
3510
3964
|
channelWebhookConfigRuntimePromise ??= Promise.all([
|
|
3511
|
-
import("./runtime-
|
|
3512
|
-
import("./config-utils-
|
|
3965
|
+
import("./runtime-I76HPFUE.js"),
|
|
3966
|
+
import("./config-utils-7M6PCTLT.js")
|
|
3513
3967
|
]).then(([channelRuntime, configUtils]) => ({
|
|
3514
3968
|
loadChannelsConfig: channelRuntime.loadChannelsConfig,
|
|
3515
3969
|
parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
|
|
@@ -3535,18 +3989,18 @@ async function loadServeRuntimeModules() {
|
|
|
3535
3989
|
workspaceRegistryModule,
|
|
3536
3990
|
promptLedgerModule
|
|
3537
3991
|
] = await Promise.all([
|
|
3538
|
-
import("./server-
|
|
3539
|
-
import("./bridge-
|
|
3540
|
-
import("./spawnChannel-
|
|
3992
|
+
import("./server-TWXRRREO.js"),
|
|
3993
|
+
import("./bridge-DFX2FFH4.js"),
|
|
3994
|
+
import("./spawnChannel-TMC6VXGN.js"),
|
|
3541
3995
|
import("./process-registry-PMJOA5CO.js"),
|
|
3542
|
-
import("./workspace-service-
|
|
3996
|
+
import("./workspace-service-4FGTUJLA.js"),
|
|
3543
3997
|
import("./types-WYCFCEHR.js"),
|
|
3544
|
-
import("./daemon-status-provider-
|
|
3545
|
-
import("./workspace-providers-status-
|
|
3546
|
-
import("./workspace-skills-status-
|
|
3547
|
-
import("./total-session-admission-
|
|
3548
|
-
import("./workspace-registry-
|
|
3549
|
-
import("./prompt-terminal-ledger-
|
|
3998
|
+
import("./daemon-status-provider-F5FEHVVG.js"),
|
|
3999
|
+
import("./workspace-providers-status-H6TG34YV.js"),
|
|
4000
|
+
import("./workspace-skills-status-7VOLUDT6.js"),
|
|
4001
|
+
import("./total-session-admission-TQI7TCTL.js"),
|
|
4002
|
+
import("./workspace-registry-2PWNIYNI.js"),
|
|
4003
|
+
import("./prompt-terminal-ledger-LDZ6QVYA.js")
|
|
3550
4004
|
]);
|
|
3551
4005
|
return {
|
|
3552
4006
|
createServeApp: serverModule.createServeApp,
|
|
@@ -4302,8 +4756,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4302
4756
|
loaderEnvScrub.release();
|
|
4303
4757
|
}, "restoreScrubbedLoaderEnv");
|
|
4304
4758
|
loggerLifecycle.scrubApplied(restoreScrubbedLoaderEnv);
|
|
4305
|
-
const
|
|
4306
|
-
const token = typeof rawToken === "string" && rawToken.trim().length > 0 ? rawToken.trim() : void 0;
|
|
4759
|
+
const token = resolveServeToken(optsIn.token);
|
|
4307
4760
|
const channelDeliveryDiagnosticRedaction = {
|
|
4308
4761
|
workerEnv: daemonRuntimeBaseEnv,
|
|
4309
4762
|
...token ? { daemonToken: token } : {}
|
|
@@ -4415,6 +4868,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4415
4868
|
);
|
|
4416
4869
|
}
|
|
4417
4870
|
let tlsOptions;
|
|
4871
|
+
let tlsCertPath;
|
|
4418
4872
|
if (opts.tlsCert && !opts.tlsKey || !opts.tlsCert && opts.tlsKey) {
|
|
4419
4873
|
throw new Error(
|
|
4420
4874
|
`--tls-cert and --tls-key must be provided together (got only --tls-${opts.tlsCert ? "cert" : "key"}).`
|
|
@@ -4457,6 +4911,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4457
4911
|
);
|
|
4458
4912
|
}
|
|
4459
4913
|
tlsOptions = { cert, key };
|
|
4914
|
+
tlsCertPath = path.resolve(opts.tlsCert);
|
|
4460
4915
|
}
|
|
4461
4916
|
if (!isLoopbackBind(opts.hostname) && !token) {
|
|
4462
4917
|
throw new Error(
|
|
@@ -4586,7 +5041,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4586
5041
|
}
|
|
4587
5042
|
let workspaceRegistrationStore = deps.workspaceRegistrationStore;
|
|
4588
5043
|
if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
|
|
4589
|
-
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-
|
|
5044
|
+
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-I4U3V5LL.js");
|
|
4590
5045
|
workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
|
|
4591
5046
|
}
|
|
4592
5047
|
if (workspaceRegistrationStore) {
|
|
@@ -4870,7 +5325,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4870
5325
|
"qwen serve: required external tool guard handshake succeeded."
|
|
4871
5326
|
);
|
|
4872
5327
|
}
|
|
4873
|
-
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-
|
|
5328
|
+
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-LDBJXH2U.js");
|
|
4874
5329
|
const daemonToolGuardHandler = createDaemonToolGuard(
|
|
4875
5330
|
externalToolGuardHandler
|
|
4876
5331
|
);
|
|
@@ -4886,6 +5341,9 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4886
5341
|
const diagnosticSink = /* @__PURE__ */ __name((line, level) => daemonLog.raw(line, level), "diagnosticSink");
|
|
4887
5342
|
let actualPort = opts.port;
|
|
4888
5343
|
const webShellDir = opts.serveWebShell === false ? void 0 : resolveWebShellDir();
|
|
5344
|
+
if (optsIn.requireWebShell && !webShellDir) {
|
|
5345
|
+
throw new Error("--open-with-auth requires built Web Shell assets.");
|
|
5346
|
+
}
|
|
4889
5347
|
if (opts.serveWebShell !== false) {
|
|
4890
5348
|
if (!webShellDir) {
|
|
4891
5349
|
writeStderrLine(
|
|
@@ -5206,7 +5664,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5206
5664
|
loadCoreRuntime(),
|
|
5207
5665
|
loadSettingsRuntimeModules(),
|
|
5208
5666
|
cliVersionPromise,
|
|
5209
|
-
import("./daemon-trust-policy-
|
|
5667
|
+
import("./daemon-trust-policy-C6YTU5CQ.js")
|
|
5210
5668
|
]);
|
|
5211
5669
|
cliVersion = resolvedCliVersion;
|
|
5212
5670
|
settingsRuntime.environment.preResolveHomeEnvOverrides();
|
|
@@ -5582,7 +6040,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5582
6040
|
resolveSkillSettings,
|
|
5583
6041
|
skillSettingStrings,
|
|
5584
6042
|
updateWorkspaceSkillSettingLists
|
|
5585
|
-
} = await import("./skill-settings-
|
|
6043
|
+
} = await import("./skill-settings-5U7FTJIK.js");
|
|
5586
6044
|
const fresh = loadSettingsForPersistence(workspace);
|
|
5587
6045
|
const normalizedName = skillName.trim().toLowerCase();
|
|
5588
6046
|
const resolved = resolveSkillSettings(fresh);
|
|
@@ -5647,7 +6105,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5647
6105
|
resolveSkillSettings,
|
|
5648
6106
|
skillSettingStrings,
|
|
5649
6107
|
updateWorkspaceSkillSettingLists
|
|
5650
|
-
} = await import("./skill-settings-
|
|
6108
|
+
} = await import("./skill-settings-5U7FTJIK.js");
|
|
5651
6109
|
const fresh = loadSettingsForPersistence(workspace);
|
|
5652
6110
|
const resolved = resolveSkillSettings(fresh);
|
|
5653
6111
|
const initialDisabled = skillSettingStrings(
|
|
@@ -5752,7 +6210,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5752
6210
|
);
|
|
5753
6211
|
}
|
|
5754
6212
|
}), "persistSettingsFn");
|
|
5755
|
-
const { createSubSessionLauncher } = await import("./create-sub-session-
|
|
6213
|
+
const { createSubSessionLauncher } = await import("./create-sub-session-PLGPY6TV.js");
|
|
5756
6214
|
const subSessionLauncher = createSubSessionLauncher({
|
|
5757
6215
|
getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
|
|
5758
6216
|
boundWorkspace,
|
|
@@ -6004,6 +6462,27 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6004
6462
|
}
|
|
6005
6463
|
};
|
|
6006
6464
|
}, "createRuntimeEnvMetadata");
|
|
6465
|
+
const readLiveConversationScheduledTasks = /* @__PURE__ */ __name(async () => {
|
|
6466
|
+
if (!fs.existsSync(liveConversationWorkspace.rootPath)) return [];
|
|
6467
|
+
const { canonicalRoot } = await liveConversationWorkspace.revalidate();
|
|
6468
|
+
let settings;
|
|
6469
|
+
try {
|
|
6470
|
+
settings = settingsRuntime.settings.loadSettings(canonicalRoot, {
|
|
6471
|
+
skipLoadEnvironment: true,
|
|
6472
|
+
skipWorkspaceSettings: false,
|
|
6473
|
+
workspaceTrusted: true
|
|
6474
|
+
});
|
|
6475
|
+
} catch (err) {
|
|
6476
|
+
writeStderrLine(
|
|
6477
|
+
`qwen serve: could not read full settings for Conversations (${err instanceof Error ? err.message : String(err)}); falling back to defaults.`
|
|
6478
|
+
);
|
|
6479
|
+
}
|
|
6480
|
+
const env = createRuntimeEnvMetadata(canonicalRoot, settings, true);
|
|
6481
|
+
return core.Storage.runWithResolvedRuntimeBaseDir(
|
|
6482
|
+
env.sessionRuntimeBaseDir,
|
|
6483
|
+
() => core.readCronTasks(canonicalRoot)
|
|
6484
|
+
);
|
|
6485
|
+
}, "readLiveConversationScheduledTasks");
|
|
6007
6486
|
const subSessionStoppers = [];
|
|
6008
6487
|
const subSessionStoppersByRuntime = /* @__PURE__ */ new WeakMap();
|
|
6009
6488
|
const runtimeCleanupPromises = /* @__PURE__ */ new WeakMap();
|
|
@@ -6711,6 +7190,9 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6711
7190
|
const serveAppForRuntimeLifecycle = { current: void 0 };
|
|
6712
7191
|
const workspaceRuntimeRemoval = {
|
|
6713
7192
|
async runtimeAdded(runtimeAdded) {
|
|
7193
|
+
const app3 = serveAppForRuntimeLifecycle.current ?? runtimeApp ?? runtimeAppForCleanup;
|
|
7194
|
+
const startScheduledTaskKeepaliveForWorkspace = app3?.locals?.["startScheduledTaskKeepaliveForWorkspace"];
|
|
7195
|
+
startScheduledTaskKeepaliveForWorkspace?.(runtimeAdded);
|
|
6714
7196
|
if (runtimeAdded.provenance === "live-conversation") return;
|
|
6715
7197
|
channelWebhookEnvByWorkspace.set(
|
|
6716
7198
|
runtimeAdded.workspaceCwd,
|
|
@@ -6718,9 +7200,6 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6718
7200
|
);
|
|
6719
7201
|
channelWebhookConfigVersion += 1;
|
|
6720
7202
|
refreshChannelWebhookConfigs?.();
|
|
6721
|
-
const app3 = serveAppForRuntimeLifecycle.current ?? runtimeApp ?? runtimeAppForCleanup;
|
|
6722
|
-
const startScheduledTaskKeepaliveForWorkspace = app3?.locals?.["startScheduledTaskKeepaliveForWorkspace"];
|
|
6723
|
-
startScheduledTaskKeepaliveForWorkspace?.(runtimeAdded);
|
|
6724
7203
|
if (!channelWorkerManager) return;
|
|
6725
7204
|
try {
|
|
6726
7205
|
if (runtimeAdded.trusted) {
|
|
@@ -6960,8 +7439,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6960
7439
|
{ createChannelManagementService },
|
|
6961
7440
|
{ WorkspaceChannelSettingsStore }
|
|
6962
7441
|
] = await Promise.all([
|
|
6963
|
-
import("./channel-management-service-
|
|
6964
|
-
import("./channel-settings-store-
|
|
7442
|
+
import("./channel-management-service-HXXS3HOZ.js"),
|
|
7443
|
+
import("./channel-settings-store-ELLH2M4M.js")
|
|
6965
7444
|
]);
|
|
6966
7445
|
return createChannelManagementService({
|
|
6967
7446
|
workspaceCwd: targetRuntime.workspaceCwd,
|
|
@@ -7027,6 +7506,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7027
7506
|
} : {},
|
|
7028
7507
|
managedScratchRoot,
|
|
7029
7508
|
liveConversationWorkspace,
|
|
7509
|
+
readLiveConversationScheduledTasks,
|
|
7030
7510
|
workspaceRegistrationStore,
|
|
7031
7511
|
workspaceRuntimeRemoval,
|
|
7032
7512
|
workspaceTrustHotReloadAvailable,
|
|
@@ -7164,8 +7644,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7164
7644
|
{ createWorkspaceTrustReconciler },
|
|
7165
7645
|
{ createDaemonTrustPolicyMonitor }
|
|
7166
7646
|
] = await Promise.all([
|
|
7167
|
-
import("./workspace-trust-reconciler-
|
|
7168
|
-
import("./daemon-trust-policy-monitor-
|
|
7647
|
+
import("./workspace-trust-reconciler-GJ466KCE.js"),
|
|
7648
|
+
import("./daemon-trust-policy-monitor-IGEJPHQ4.js")
|
|
7169
7649
|
]);
|
|
7170
7650
|
const materializationFor = /* @__PURE__ */ __name((entry, snapshot, decision) => {
|
|
7171
7651
|
const boundWorkspaces2 = entry.primary && decision.targetTrusted ? runtime.resolveBoundWorkspacesFromIdeEnv(
|
|
@@ -7360,7 +7840,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7360
7840
|
// through (and start the runtime) exactly like the warm app would.
|
|
7361
7841
|
// Dynamic import keeps web-shell-static out of the serve fast-path
|
|
7362
7842
|
// static closure (see the import-boundary guards in fast-path.test.ts).
|
|
7363
|
-
isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-
|
|
7843
|
+
isPreAuthRequest: webShellMounted ? (req) => import("./web-shell-static-A6QMUNNV.js").then(
|
|
7364
7844
|
(webShellStatic) => webShellStatic.isPreAuthWebShellRequest(req)
|
|
7365
7845
|
) : void 0
|
|
7366
7846
|
});
|
|
@@ -7380,7 +7860,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7380
7860
|
);
|
|
7381
7861
|
}
|
|
7382
7862
|
const channelValidationSettingsRuntime = opts.channelSelection ? await loadSettingsRuntimeModules() : void 0;
|
|
7383
|
-
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-
|
|
7863
|
+
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-C6YTU5CQ.js") : void 0;
|
|
7384
7864
|
const channelValidationTrustSnapshot = channelValidationTrustPolicy ? await channelValidationTrustPolicy.readDaemonTrustPolicySnapshot() : void 0;
|
|
7385
7865
|
const resolveChannelWorkspaceGroupsAtListen = /* @__PURE__ */ __name(() => {
|
|
7386
7866
|
if (!opts.channelSelection || !channelValidationSettingsRuntime || !channelRuntime) {
|
|
@@ -7933,6 +8413,69 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7933
8413
|
);
|
|
7934
8414
|
}
|
|
7935
8415
|
const workerRuntime = await ensureChannelRuntime();
|
|
8416
|
+
const workerDaemonUrl = formatChannelWorkerDaemonUrl(
|
|
8417
|
+
opts.hostname,
|
|
8418
|
+
actualPort,
|
|
8419
|
+
tlsOptions !== void 0
|
|
8420
|
+
);
|
|
8421
|
+
if (tlsOptions && tlsCertPath && process.env["NODE_TLS_REJECT_UNAUTHORIZED"] === "0") {
|
|
8422
|
+
daemonLog.warn(
|
|
8423
|
+
`NODE_TLS_REJECT_UNAUTHORIZED=0 disables certificate verification for channel workers; skipping the worker TLS trust check.`
|
|
8424
|
+
);
|
|
8425
|
+
} else if (tlsOptions && tlsCertPath) {
|
|
8426
|
+
const operatorCaCertPath = process.env["NODE_EXTRA_CA_CERTS"];
|
|
8427
|
+
let operatorCaCert;
|
|
8428
|
+
let operatorCaCertReadError;
|
|
8429
|
+
if (operatorCaCertPath) {
|
|
8430
|
+
try {
|
|
8431
|
+
operatorCaCert = fs.readFileSync(operatorCaCertPath);
|
|
8432
|
+
} catch (error2) {
|
|
8433
|
+
operatorCaCertReadError = error2?.code ?? "read failed";
|
|
8434
|
+
}
|
|
8435
|
+
}
|
|
8436
|
+
let predictedGaps = [];
|
|
8437
|
+
try {
|
|
8438
|
+
predictedGaps = describeWorkerTlsTrustGaps({
|
|
8439
|
+
cert: tlsOptions.cert,
|
|
8440
|
+
certPath: tlsCertPath,
|
|
8441
|
+
certSourcePath: tlsCertPath,
|
|
8442
|
+
daemonUrl: workerDaemonUrl,
|
|
8443
|
+
...operatorCaCertPath ? { operatorCaCertPath } : {},
|
|
8444
|
+
...operatorCaCert ? {
|
|
8445
|
+
operatorCaCert,
|
|
8446
|
+
operatorCaCertSourcePath: operatorCaCertPath
|
|
8447
|
+
} : {},
|
|
8448
|
+
...operatorCaCertReadError ? { operatorCaCertReadError } : {}
|
|
8449
|
+
});
|
|
8450
|
+
} catch (error2) {
|
|
8451
|
+
if (!(error2 instanceof ExtraCaInspectionError)) throw error2;
|
|
8452
|
+
daemonLog.warn(
|
|
8453
|
+
`Channel worker TLS trust-gap inspection could not run: ${error2.message} Continuing with the live handshake probe only.`
|
|
8454
|
+
);
|
|
8455
|
+
}
|
|
8456
|
+
const workerCaCertPath = workerRuntime.resolveWorkerCaCertPath(
|
|
8457
|
+
tlsCertPath,
|
|
8458
|
+
operatorCaCertPath
|
|
8459
|
+
);
|
|
8460
|
+
const trustFailure = await (deps.workerTlsTrustVerifier ?? verifyWorkerTlsTrust)({
|
|
8461
|
+
daemonUrl: workerDaemonUrl,
|
|
8462
|
+
caCertPath: workerCaCertPath
|
|
8463
|
+
});
|
|
8464
|
+
if (shuttingDown || runtimeStartupError !== void 0) {
|
|
8465
|
+
throw new Error(
|
|
8466
|
+
"Daemon stopped while the channel worker TLS trust check was running."
|
|
8467
|
+
);
|
|
8468
|
+
}
|
|
8469
|
+
if (trustFailure) {
|
|
8470
|
+
if (predictedGaps.length > 0) {
|
|
8471
|
+
for (const gap of predictedGaps) daemonLog.warn(gap);
|
|
8472
|
+
} else {
|
|
8473
|
+
daemonLog.warn(
|
|
8474
|
+
`Channel worker TLS verification failed against the exact CA bundle workers receive (${sanitizeLogText(normalizeWorkerDiagnostic(trustFailure.code), 80)}): ${sanitizeLogText(normalizeWorkerDiagnostic(trustFailure.message), 300)}`
|
|
8475
|
+
);
|
|
8476
|
+
}
|
|
8477
|
+
}
|
|
8478
|
+
}
|
|
7936
8479
|
const createSupervisor = deps.channelWorkerSupervisorFactory ?? workerRuntime.createChannelWorkerSupervisor;
|
|
7937
8480
|
const createGroup = /* @__PURE__ */ __name((groups) => workerRuntime.createChannelWorkerGroup({
|
|
7938
8481
|
groups,
|
|
@@ -7940,11 +8483,9 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7940
8483
|
createSupervisor,
|
|
7941
8484
|
shared: {
|
|
7942
8485
|
cliEntryPath: workerRuntime.findCliEntryPath(),
|
|
7943
|
-
daemonUrl:
|
|
7944
|
-
|
|
7945
|
-
|
|
7946
|
-
),
|
|
7947
|
-
...token ? { daemonToken: token } : {}
|
|
8486
|
+
daemonUrl: workerDaemonUrl,
|
|
8487
|
+
...token ? { daemonToken: token } : {},
|
|
8488
|
+
...tlsCertPath ? { workerTlsCaCertPath: tlsCertPath } : {}
|
|
7948
8489
|
},
|
|
7949
8490
|
onReady: /* @__PURE__ */ __name((snapshot) => {
|
|
7950
8491
|
if (runtimeStartupError !== void 0) return;
|
|
@@ -8578,6 +9119,7 @@ export {
|
|
|
8578
9119
|
createBoundChannelDeliveryHandler,
|
|
8579
9120
|
createDisabledChannelWorkerSupervisor,
|
|
8580
9121
|
createLazyBridgeProxy,
|
|
9122
|
+
describeWorkerTlsTrustGaps,
|
|
8581
9123
|
extractContextFilename,
|
|
8582
9124
|
formatChannelWorkerDaemonUrl,
|
|
8583
9125
|
resolveRuntimeStartupTimeoutMs,
|
|
@@ -8585,6 +9127,7 @@ export {
|
|
|
8585
9127
|
subSessionConcurrencyCapsFromSettings,
|
|
8586
9128
|
validateAndCanonicalizeWorkspaceInput,
|
|
8587
9129
|
validatePolicyConfig,
|
|
9130
|
+
verifyWorkerTlsTrust,
|
|
8588
9131
|
waitForRuntimeStartingForShutdown
|
|
8589
9132
|
};
|
|
8590
9133
|
/**
|