@qwen-code/qwen-code 0.22.0-nightly.20260825.22bb5e8b9f → 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/coordinate/SKILL.md +3 -3
- package/bundled/qc-helper/docs/configuration/model-providers.md +2 -0
- package/bundled/qc-helper/docs/configuration/settings.md +6 -6
- package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -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 +1 -1
- package/bundled/qc-helper/docs/qwen-serve.md +2 -0
- package/bundled/review/SKILL.md +47 -12
- package/bundled/review/references/persistence.md +6 -6
- package/bundled/review/references/posting.md +2 -2
- package/chunks/MaxSizedBox-UUTUE42J.js +112 -0
- package/chunks/{StandaloneSessionPicker-NEWUAPCT.js → StandaloneSessionPicker-XF2TVJFK.js} +78 -77
- package/chunks/{acp-startup-profiler-T4GEAPLX.js → acp-startup-profiler-GNYAL6LI.js} +2 -2
- package/chunks/{acpAgent-A5CIQGW6.js → acpAgent-GY53MJIW.js} +254 -158
- package/chunks/{agent-TQ6CYOIL.js → agent-7U6CC5KF.js} +41 -41
- package/chunks/agent-headless-32O4L2CT.js +87 -0
- package/chunks/{anthropicContentGenerator-FSBGS426.js → anthropicContentGenerator-U76GTVB6.js} +7 -7
- package/chunks/{artifact-tool-UQTNZDUF.js → artifact-tool-XDJCZZCF.js} +2 -2
- package/chunks/{askUserQuestion-BSZALR7M.js → askUserQuestion-ZXXERLEV.js} +2 -2
- package/chunks/{bridge-MBOVCHXN.js → bridge-DFX2FFH4.js} +57 -56
- package/chunks/{ca-DZBZOMLU.js → ca-7HPYOYSZ.js} +1 -0
- package/chunks/{channel-management-service-XGGL6PLF.js → channel-management-service-HXXS3HOZ.js} +4 -4
- package/chunks/channel-settings-store-ELLH2M4M.js +117 -0
- package/chunks/{channel-worker-group-GIXIF4VT.js → channel-worker-group-EVDC2P4K.js} +5 -5
- package/chunks/{channel-worker-manager-ZBSYXJEB.js → channel-worker-manager-IJJZHGEI.js} +5 -5
- package/chunks/{channel-worker-supervisor-NI6JEY4Q.js → channel-worker-supervisor-YSKB5GVB.js} +9 -5
- package/chunks/{chunk-CPZQJP6J.js → chunk-27ONXAFY.js} +1 -1
- package/chunks/{chunk-FXNLH7E6.js → chunk-2CRNTW2B.js} +18 -2
- package/chunks/{read-package-up-UXSW3YPB.js → chunk-2EAZ43JQ.js} +1 -0
- package/chunks/{chunk-YX4II73B.js → chunk-2FN2HNTI.js} +2 -2
- package/chunks/{chunk-7KGJGYGA.js → chunk-2MHGD7EE.js} +1 -1
- package/chunks/{chunk-H5K5MRU7.js → chunk-2NCVUT3C.js} +4 -4
- package/chunks/{chunk-VLEGGCEA.js → chunk-2NNTE2ED.js} +171 -1
- package/chunks/{chunk-LNKZTLTH.js → chunk-2SERYG4T.js} +1 -1
- package/chunks/{chunk-UEHH33VE.js → chunk-2YDYDDE2.js} +6 -6
- package/chunks/{chunk-U7GJPTEY.js → chunk-2YEZNBSD.js} +66 -60
- package/chunks/{chunk-L6PFEZUM.js → chunk-2ZV3CZKI.js} +82 -12
- package/chunks/{chunk-36XTQW3N.js → chunk-3B5DCAQU.js} +28 -11
- package/chunks/{chunk-DE24WTEJ.js → chunk-3BV7TZNQ.js} +3 -3
- package/chunks/{chunk-IKPQM6I5.js → chunk-3FSBMAYD.js} +1 -1
- package/chunks/{chunk-J54EA46E.js → chunk-3UZCLCXR.js} +3 -3
- package/chunks/{chunk-ZROP2DTX.js → chunk-43C2II2G.js} +5 -5
- package/chunks/{chunk-2ZH5XAOO.js → chunk-47SIHHPL.js} +8 -8
- package/chunks/{chunk-EEBIINBT.js → chunk-4DCP3362.js} +6 -14
- package/chunks/{chunk-DF6DJZIX.js → chunk-4TPAG3O7.js} +1 -1
- package/chunks/{chunk-6L5EXDDN.js → chunk-5CI4AXDD.js} +4 -4
- package/chunks/{chunk-7KOFLDEP.js → chunk-5JTIYALA.js} +1 -1
- package/chunks/{chunk-YPJVAQ7V.js → chunk-5MK32KJV.js} +3 -3
- package/chunks/{chunk-XXA72PGJ.js → chunk-5T4LWWNX.js} +2 -2
- package/chunks/{chunk-NA6AZRDQ.js → chunk-5Y2JCJAH.js} +2 -2
- package/chunks/{chunk-3ROKI6MD.js → chunk-5ZYZPDDF.js} +978 -886
- package/chunks/{chunk-U4SJGOBF.js → chunk-62PXFOK4.js} +4 -4
- package/chunks/{chunk-SKXXO64C.js → chunk-6E4WHQJV.js} +1 -1
- package/chunks/{chunk-6Y7XMJFF.js → chunk-6HTMIKXZ.js} +6 -6
- package/chunks/{chunk-MGEXTDBI.js → chunk-6KS24S3X.js} +2 -2
- package/chunks/{chunk-ZJWFRMCY.js → chunk-6US7BF3G.js} +2 -2
- package/chunks/{chunk-RSOG6JND.js → chunk-6YAR6ZU3.js} +2 -2
- package/chunks/{chunk-Z3GFRVAY.js → chunk-73WFGVIZ.js} +3 -3
- package/chunks/{chunk-IX3CWNG7.js → chunk-76WGY6LW.js} +3 -3
- package/chunks/{chunk-CGWPQ6IM.js → chunk-77TOMRBG.js} +3 -3
- package/chunks/{chunk-JVTU5JYO.js → chunk-7AS7QX72.js} +1 -1
- package/chunks/{chunk-RLIS2VLZ.js → chunk-7DPKPBOQ.js} +2 -2
- package/chunks/{chunk-XQNWTA4Y.js → chunk-7JPW6IYH.js} +1 -1
- package/chunks/{chunk-UEY5WCRB.js → chunk-7QGEJI7M.js} +1 -1
- package/chunks/{chunk-GWUZOBCQ.js → chunk-A7X32SCT.js} +5 -5
- package/chunks/{chunk-R7Q5V3A5.js → chunk-AYVIGUUK.js} +1 -1
- package/chunks/{chunk-AIT6BMBI.js → chunk-BDHLBR46.js} +17 -3
- package/chunks/{chunk-3G6MRLTM.js → chunk-BKDAF7ES.js} +2 -2
- package/chunks/{chunk-5AHCPETA.js → chunk-BQBUZDDH.js} +3 -3
- package/chunks/{chunk-3KV5KXKU.js → chunk-BVE5EMIG.js} +2 -2
- package/chunks/{chunk-NDVTSFWZ.js → chunk-BX2BZPFJ.js} +3 -3
- package/chunks/{chunk-7UVAWPYG.js → chunk-C4WBKZJT.js} +4 -4
- package/chunks/{chunk-HYBEI2LH.js → chunk-CITGRGCM.js} +2 -1
- package/chunks/{chunk-TEQKBONY.js → chunk-CPPYZHBN.js} +1 -1
- package/chunks/chunk-DCSAVGDJ.js +20 -0
- package/chunks/{chunk-RSWDOHXS.js → chunk-DEYPMJPD.js} +1 -1
- package/chunks/{chunk-OWE7TE3F.js → chunk-DP7LABIB.js} +1 -1
- package/chunks/{chunk-LQF4PWEU.js → chunk-E4I5MVBR.js} +1 -1
- package/chunks/{chunk-NFDTDV37.js → chunk-E55H6BZ7.js} +4 -0
- package/chunks/{chunk-K623ENWT.js → chunk-E6FGMDFQ.js} +4 -0
- package/chunks/{chunk-QWTNAHCM.js → chunk-EAV3TENS.js} +3 -3
- package/chunks/{chunk-27HAGBZG.js → chunk-EB4VDXNI.js} +1 -1
- package/chunks/{chunk-RDPKOVXL.js → chunk-EC5BONC3.js} +1 -1
- package/chunks/{chunk-JHZIPJWY.js → chunk-EEQYTWGU.js} +5 -5
- package/chunks/{chunk-MFSV57XN.js → chunk-EKP3M4RF.js} +1 -1
- package/chunks/{chunk-R544UY5E.js → chunk-ELY4QVIB.js} +1 -1
- package/chunks/{chunk-PFCVB5ZI.js → chunk-EMGAVCBZ.js} +2 -2
- package/chunks/{chunk-JGDTCEBH.js → chunk-FJWICLG7.js} +1 -1
- package/chunks/{chunk-OXMS5HCS.js → chunk-FK4H3V6S.js} +5 -5
- package/chunks/{chunk-WANR3VVK.js → chunk-FN5C6C7G.js} +125 -60
- package/chunks/{chunk-5PVLDRGJ.js → chunk-FPH6TXD3.js} +1 -1
- package/chunks/{chunk-OY3ZSNQC.js → chunk-FVDQ5E67.js} +3 -3
- package/chunks/{chunk-J752LLEJ.js → chunk-GNMJNDZE.js} +1 -1
- package/chunks/{chunk-MSCVPOZR.js → chunk-GNRVKN76.js} +4 -4
- package/chunks/{chunk-FNZ42WN7.js → chunk-GTUKW3I6.js} +1 -1
- package/chunks/{chunk-NSPS67BG.js → chunk-GZJUCMH4.js} +1 -1
- package/chunks/{chunk-SNWAXNJ4.js → chunk-HJOWQUE2.js} +14 -11
- package/chunks/{chunk-3K5ORUVO.js → chunk-I32QCIK7.js} +1 -1
- package/chunks/{chunk-BOQRZ443.js → chunk-I6VVOZDK.js} +2 -2
- package/chunks/{chunk-KUPVZ4EO.js → chunk-I6YW3T3W.js} +207 -26
- package/chunks/{chunk-O6CS7VRT.js → chunk-ICWGPK23.js} +7 -7
- package/chunks/{chunk-EFT2T2LA.js → chunk-IJVDHPKD.js} +2 -2
- package/chunks/{chunk-SEMN7BNM.js → chunk-IKN3IUJP.js} +9 -8
- package/chunks/{chunk-O5ONGZGZ.js → chunk-ILPXSKGQ.js} +2 -2
- package/chunks/{chunk-QQQSUCC4.js → chunk-IPQA4SR5.js} +1 -1
- package/chunks/{chunk-SXBRB7ZP.js → chunk-IRIX323G.js} +2 -2
- package/chunks/{chunk-EJ5XRNOK.js → chunk-J7MLXFC5.js} +2 -2
- package/chunks/{chunk-KDGY3ST4.js → chunk-JECO75XD.js} +2 -2
- package/chunks/chunk-JLGFGPZJ.js +346 -0
- package/chunks/{chunk-COT2IXPM.js → chunk-JUIJ3FXC.js} +5 -5
- package/chunks/{chunk-IFWUT4GY.js → chunk-JVPFTDBK.js} +1 -1
- package/chunks/{chunk-455ZIBFX.js → chunk-K63NK3KL.js} +13 -13
- package/chunks/{chunk-MBLNXX3G.js → chunk-KCOXDRQL.js} +5 -5
- package/chunks/{chunk-3LUGIYS3.js → chunk-KOJ6MHD5.js} +3 -1
- package/chunks/{chunk-W4JA6Z44.js → chunk-KWFP3WV6.js} +9 -7
- package/chunks/{chunk-QKSMM4HF.js → chunk-L436XFLJ.js} +1 -1
- package/chunks/{chunk-M4TV7AJX.js → chunk-LI2HEMKO.js} +4 -4
- package/chunks/{chunk-FLTGTSLG.js → chunk-LJP2BBMK.js} +4 -4
- package/chunks/{chunk-HTIG2U5C.js → chunk-LRKMQPMD.js} +1 -1
- package/chunks/{chunk-YS4H3OFV.js → chunk-MDZO5V2O.js} +6 -6
- package/chunks/{chunk-2HYQZYPT.js → chunk-MW5AHWOZ.js} +7 -7
- package/chunks/{chunk-SJDR2S55.js → chunk-MYLXL7F6.js} +11 -11
- package/chunks/{chunk-PIZZIIEA.js → chunk-MZS7GEC7.js} +1 -1
- package/chunks/{chunk-H3JIT2M6.js → chunk-NER3H7PI.js} +1 -1
- package/chunks/{chunk-XYUJPDPB.js → chunk-NVK4HJYQ.js} +1 -1
- package/chunks/{chunk-GQQHY6TL.js → chunk-NY3IJYAV.js} +7 -7
- package/chunks/{chunk-3E53DKST.js → chunk-O3BUXIPM.js} +3 -3
- package/chunks/{chunk-QOUFO7TV.js → chunk-O5YGAEQS.js} +6 -6
- package/chunks/{chunk-OINGLDAX.js → chunk-ODXCSIH5.js} +4 -4
- package/chunks/{chunk-FMDWTE5I.js → chunk-OI2DR6QB.js} +2 -2
- package/chunks/{chunk-ENZMDVCM.js → chunk-OQ6LTSX3.js} +1 -1
- package/chunks/{chunk-KUDADN3R.js → chunk-OT26ITEY.js} +3 -3
- package/chunks/{chunk-FZUVUBYH.js → chunk-OX44MOAN.js} +3 -3
- package/chunks/{chunk-LURJYO2T.js → chunk-OZ6KS6KW.js} +4 -0
- package/chunks/{chunk-D2IGZJA7.js → chunk-PAJGKZAA.js} +272 -3
- package/chunks/{chunk-MTKBZIXU.js → chunk-PVBT5QPD.js} +1 -1
- package/chunks/{chunk-HDH5IDJH.js → chunk-R2ZJH3FV.js} +3 -3
- package/chunks/{chunk-SJLW5XGQ.js → chunk-RRKNX553.js} +1 -1
- package/chunks/{chunk-JS55F2GJ.js → chunk-SDVF6A42.js} +3 -3
- package/chunks/{chunk-DZPWZPGJ.js → chunk-SKNVVYIJ.js} +3 -3
- package/chunks/{chunk-SIC4S3RX.js → chunk-SLEWBQWM.js} +2 -2
- package/chunks/{chunk-P7DVAZKV.js → chunk-SM7ZVKTF.js} +7 -7
- package/chunks/{chunk-3N7EFOOM.js → chunk-SQPOJ4ZI.js} +11 -1
- package/chunks/{chunk-YOM3CJOP.js → chunk-SRGENTPF.js} +19 -19
- package/chunks/{chunk-ZB7VDPZB.js → chunk-T2CRBIDJ.js} +1 -1
- package/chunks/{chunk-F37T2S4O.js → chunk-T2HMXHYA.js} +6 -6
- package/chunks/{chunk-5X33EPHJ.js → chunk-T6OODF2U.js} +1 -1
- package/chunks/{chunk-7GECZMES.js → chunk-TKO4TLT6.js} +3 -3
- package/chunks/{chunk-PQ4RTSTH.js → chunk-TOF4UZHH.js} +3 -3
- package/chunks/{chunk-LD76HNCC.js → chunk-UCSV2IZW.js} +3 -3
- package/chunks/{chunk-EUZE3GSL.js → chunk-UX3IFLJM.js} +93 -9
- package/chunks/{chunk-AHQBSQYT.js → chunk-V3GINY6K.js} +3 -3
- package/chunks/{chunk-DD5XZICM.js → chunk-VL4YX3FH.js} +1 -1
- package/chunks/{chunk-DLYJ3RN7.js → chunk-VMDURMFY.js} +58 -32
- package/chunks/{chunk-E6BJFSLJ.js → chunk-W2WRNJKX.js} +6 -6
- package/chunks/{chunk-YLFLHKDL.js → chunk-W3N5XAZ6.js} +1 -1
- package/chunks/{chunk-QKGJIP2H.js → chunk-WBT3STGU.js} +1 -1
- package/chunks/{chunk-X3PRXXUH.js → chunk-WEGXPP5E.js} +1 -1
- package/chunks/{chunk-V6R3IEHF.js → chunk-XJS54K4A.js} +2 -2
- package/chunks/{chunk-NDJ3436G.js → chunk-XNXWEGKB.js} +3 -3
- package/chunks/{chunk-UFWRXRQ5.js → chunk-XYX474JQ.js} +1312 -290
- package/chunks/{chunk-UY2JOZK7.js → chunk-ZEADBZLO.js} +3 -3
- package/chunks/{chunk-SNJOBGQV.js → chunk-ZJG323IA.js} +4 -3
- package/chunks/{chunk-CZIF7I53.js → chunk-ZKAZP2ZG.js} +2 -2
- package/chunks/{chunk-DV3KOUUU.js → chunk-ZLTEQYNC.js} +2 -2
- package/chunks/{chunk-RLR7K4JJ.js → chunk-ZWKGZB2K.js} +3 -3
- package/chunks/{chunk-EJ2GPZDU.js → chunk-ZXDM7DYV.js} +1049 -383
- package/chunks/config-utils-7M6PCTLT.js +113 -0
- package/chunks/contextCommand-G4QG3TW6.js +108 -0
- package/chunks/{core-runtime-SZFD2YQA.js → core-runtime-PKNQ63VL.js} +53 -52
- package/chunks/{create-sub-session-OXESCUS7.js → create-sub-session-PLGPY6TV.js} +53 -52
- package/chunks/{create-sub-session-5ZLCAS2P.js → create-sub-session-RVHSWVAP.js} +3 -3
- package/chunks/{cron-create-P4CPPO25.js → cron-create-IJGVR5R2.js} +4 -4
- package/chunks/{cron-delete-FPD75GL4.js → cron-delete-4N5BI6GL.js} +4 -4
- package/chunks/{cron-list-QPML4MWL.js → cron-list-2CATIPUX.js} +4 -4
- package/chunks/{daemon-HY4AVTUM.js → daemon-NAYK4XXU.js} +34 -12
- package/chunks/{daemon-git-worktree-guard-EAVTZ6CE.js → daemon-git-worktree-guard-LDBJXH2U.js} +331 -86
- package/chunks/daemon-status-provider-F5FEHVVG.js +118 -0
- package/chunks/daemon-trust-policy-C6YTU5CQ.js +114 -0
- package/chunks/{daemon-trust-policy-monitor-ITF54474.js → daemon-trust-policy-monitor-IGEJPHQ4.js} +59 -58
- package/chunks/{deferred-core-runtime-WQ4NQA3N.js → deferred-core-runtime-GHT3GDOR.js} +53 -52
- package/chunks/{display-image-HOBBUJS5.js → display-image-DR55LL6M.js} +5 -5
- package/chunks/dist-4Q7NTUNB.js +2512 -0
- package/chunks/{dist-RW4QZD3K.js → dist-6H6RZ5H6.js} +2 -2
- package/chunks/{dist-ZUWCGMJ4.js → dist-7CKN54NL.js} +1 -1
- package/chunks/{dist-ZQJEKFZH.js → dist-DJBNNPLN.js} +1 -1
- package/chunks/{dist-5BX3J3AL.js → dist-FVJZSIO4.js} +28 -7
- package/chunks/{dist-OB6D7E7T.js → dist-SATKXKUR.js} +1 -1
- package/chunks/{dist-MEANA2OS.js → dist-TJUDJTCB.js} +1 -1
- package/chunks/{dist-4LRFQF7R.js → dist-UQUFZDIY.js} +1 -1
- package/chunks/{dist-7HGG7XLA.js → dist-ZBVOXSKF.js} +1 -1
- package/chunks/earlyInputCapture-HOSJTLWP.js +109 -0
- package/chunks/{edit-4MZYBPF5.js → edit-KSPVUEAS.js} +42 -42
- package/chunks/{en-X66KZS7T.js → en-6MDBWMTG.js} +1 -0
- package/chunks/{enter-worktree-WNR4JUPU.js → enter-worktree-UOZ6ZTP7.js} +7 -7
- package/chunks/{enterPlanMode-2EL6YAM5.js → enterPlanMode-DZTABSKN.js} +41 -41
- package/chunks/{environment-4QYNT2L3.js → environment-JXOSW25V.js} +57 -54
- package/chunks/{errors-N66MMOYD.js → errors-IOXFDE4J.js} +55 -54
- package/chunks/{exit-worktree-BUHUM6YC.js → exit-worktree-G2QATUCV.js} +7 -7
- package/chunks/{exitPlanMode-F73VQJBO.js → exitPlanMode-PZG4FXRB.js} +41 -41
- package/chunks/{fast-path-3L4YK6SO.js → fast-path-EBS7NAVL.js} +2 -2
- package/chunks/{gemini-4PINQJWX.js → gemini-JELEKOVS.js} +107 -103
- package/chunks/{geminiContentGenerator-7T7IU2V5.js → geminiContentGenerator-I2CKP7XI.js} +8 -8
- package/chunks/{glob-TWUYSRRG.js → glob-TDVEVPQZ.js} +41 -41
- package/chunks/{goal-tools-FTDQHRRX.js → goal-tools-CNVXMSZD.js} +70 -27
- package/chunks/{grep-QUQ3J6SR.js → grep-3NLSS32D.js} +6 -6
- package/chunks/handleAutoUpdate-AWAGHKOX.js +111 -0
- package/chunks/{i18n-Q6K7AX7Y.js → i18n-CYA25C5F.js} +54 -53
- package/chunks/{image-gen-RYOBEDNB.js → image-gen-63NN2H5N.js} +9 -9
- package/chunks/initializer-JD2FLNLO.js +115 -0
- package/chunks/installationInfo-N3DCWVWR.js +109 -0
- package/chunks/{keychain-token-storage-LQTBIXSX.js → keychain-token-storage-3MGFRYGM.js} +2 -2
- package/chunks/list-XDQAUET5.js +118 -0
- package/chunks/{list-agents-522ILPAR.js → list-agents-EXRSHIDJ.js} +2 -2
- package/chunks/loadedSettingsAdapter-IK7H5JRK.js +112 -0
- package/chunks/{loggingContentGenerator-RTDUJF6Y.js → loggingContentGenerator-CZWUAHAI.js} +20 -20
- package/chunks/{loop-wakeup-VSA4TBIC.js → loop-wakeup-XBPB2BRO.js} +5 -5
- package/chunks/{ls-FUCLEBTL.js → ls-WFONAND2.js} +4 -4
- package/chunks/{lsp-FYP6TW4R.js → lsp-DUKPDUXN.js} +2 -2
- package/chunks/{managed-npm-update-NUDVKV7F.js → managed-npm-update-54W23SP5.js} +54 -53
- package/chunks/mcp-2E7ZLMEE.js +112 -0
- package/chunks/{monitor-AU2SG5OL.js → monitor-A4J5QRGJ.js} +41 -41
- package/chunks/nonInteractiveCli-ZNDXB62Y.js +185 -0
- package/chunks/{notebook-edit-TGU7XHIO.js → notebook-edit-4ANFZON5.js} +42 -42
- package/chunks/{openaiContentGenerator-QPFWSUPT.js → openaiContentGenerator-JCCJJQZC.js} +24 -24
- package/chunks/pidfile-DHV2Y7UD.js +113 -0
- package/chunks/{processUtils-ZSHN6VGJ.js → processUtils-JJAR56SO.js} +2 -2
- package/chunks/prompt-terminal-ledger-LDZ6QVYA.js +107 -0
- package/chunks/{qwenContentGenerator-MEXKZX5O.js → qwenContentGenerator-5JM44ZSA.js} +46 -46
- package/chunks/{qwenOAuth2-QHHUP4KQ.js → qwenOAuth2-JIYAWXTW.js} +8 -8
- package/chunks/{read-file-T7ESVJAQ.js → read-file-N3E5DY7N.js} +12 -12
- package/chunks/{read-mcp-resource-5QGBDZ43.js → read-mcp-resource-7A7NFSFL.js} +2 -2
- package/chunks/read-package-up-6T6ICKR7.js +13 -0
- package/chunks/{record-artifact-K6BYYWXY.js → record-artifact-CPJ4IJSD.js} +4 -4
- package/chunks/report-findings-VFM5DENC.js +33 -0
- package/chunks/{request-shutdown-EUXDG4IH.js → request-shutdown-AXVOFN5C.js} +7 -7
- package/chunks/{resumeHistoryUtils-JFEAZEWW.js → resumeHistoryUtils-YQRITQAG.js} +60 -59
- package/chunks/{ripGrep-KOP6AHIX.js → ripGrep-NEIHKBKB.js} +17 -17
- package/chunks/{run-qwen-serve-IAVPTDB7.js → run-qwen-serve-IWGPZADI.js} +577 -67
- package/chunks/{runtime-ZICTJKT5.js → runtime-I76HPFUE.js} +64 -63
- package/chunks/{scheduler-YNVAANNX.js → scheduler-M6YL4K4I.js} +55 -54
- package/chunks/{sdk-exporters-http-GCVM7E4X.js → sdk-exporters-http-XXSKBD2C.js} +2 -2
- package/chunks/{sdk-impl-E3KA6NMY.js → sdk-impl-VPNBLV7I.js} +4 -4
- package/chunks/{send-message-EJUCEIKN.js → send-message-A2GXDX3B.js} +7 -7
- package/chunks/{serve-NF25WYMU.js → serve-XY5S63GN.js} +59 -58
- package/chunks/{server-7LKYWHCE.js → server-TWXRRREO.js} +605 -334
- package/chunks/{session-5FBBDYPI.js → session-IT5ZXU7A.js} +104 -99
- package/chunks/{settings-F7IXLQQW.js → settings-IX5HOOCG.js} +58 -57
- package/chunks/{shell-IJYC4BVX.js → shell-LZ55AAJB.js} +41 -41
- package/chunks/{skill-RTZU743G.js → skill-WSZ53D2R.js} +107 -23
- package/chunks/{skill-settings-ZOHS4J2E.js → skill-settings-5U7FTJIK.js} +58 -57
- package/chunks/{spawnChannel-JLKWUMTV.js → spawnChannel-TMC6VXGN.js} +55 -54
- package/chunks/{standalone-update-W44DUURE.js → standalone-update-CUYGWTR4.js} +55 -54
- package/chunks/{startInteractiveUI-7HPDSR7W.js → startInteractiveUI-O6BI2OSA.js} +219 -170
- package/chunks/{syntheticOutput-3ITPRJOB.js → syntheticOutput-5AJ444QT.js} +3 -3
- package/chunks/{task-create-USIZE733.js → task-create-CDJSOEQD.js} +11 -11
- package/chunks/{task-list-AWAJUPIP.js → task-list-BELMPA75.js} +5 -5
- package/chunks/{task-stop-I2CQSMDX.js → task-stop-U3S3KZG2.js} +2 -2
- package/chunks/{task-update-TFF2KJGL.js → task-update-77VCFDDZ.js} +11 -11
- package/chunks/{team-create-IU2A6HD3.js → team-create-UF4TMQEH.js} +41 -41
- package/chunks/{team-delete-E4C4AMPF.js → team-delete-YWFXX77L.js} +5 -5
- package/chunks/{team-plan-approval-BWI43D37.js → team-plan-approval-U57NSR6C.js} +41 -41
- package/chunks/{terminal-image-renderer-GQAMHJF2.js → terminal-image-renderer-DRL3BROJ.js} +55 -54
- package/chunks/theme-manager-HHJPUDRN.js +104 -0
- package/chunks/{todoWrite-ZUS3HGEF.js → todoWrite-435EO2CS.js} +4 -4
- package/chunks/{tool-search-TQNHT22X.js → tool-search-SV35UV72.js} +17 -17
- package/chunks/{total-session-admission-JMM73HNK.js → total-session-admission-TQI7TCTL.js} +57 -56
- package/chunks/{trustedFolders-BKQ2UXIB.js → trustedFolders-YKK67IP3.js} +54 -53
- package/chunks/{update-relaunch-WI7IWWCM.js → update-relaunch-DX7LVA4P.js} +5 -5
- package/chunks/{updateCheck-K6WUHPPT.js → updateCheck-6JRTKTUF.js} +58 -57
- package/chunks/useAutoAcceptIndicator-MYXYSKSL.js +122 -0
- package/chunks/{validateNonInterActiveAuth-RXCZM7MM.js → validateNonInterActiveAuth-B26O4YJP.js} +100 -95
- package/chunks/{version-IRAYALVC.js → version-K5D7VJ4B.js} +2 -2
- package/chunks/{web-fetch-FUG5KGKQ.js → web-fetch-VFHZLLNZ.js} +16 -16
- package/chunks/{web-search-SO3LHSHP.js → web-search-AQE5A4J5.js} +9 -9
- package/chunks/{workflow-XJRA3GRI.js → workflow-XL6AEUZ7.js} +150 -52
- package/chunks/workspace-providers-status-H6TG34YV.js +116 -0
- package/chunks/{workspace-registration-store-LCB4GHNP.js → workspace-registration-store-I4U3V5LL.js} +1 -1
- package/chunks/{workspace-registry-QWPFWGEF.js → workspace-registry-2PWNIYNI.js} +57 -56
- package/chunks/{workspace-service-MPGLZJF6.js → workspace-service-4FGTUJLA.js} +65 -64
- package/chunks/workspace-skills-status-7VOLUDT6.js +115 -0
- package/chunks/{workspace-trust-reconciler-4QDDGBQZ.js → workspace-trust-reconciler-GJ466KCE.js} +65 -64
- package/chunks/write-file-PWOYCT2K.js +90 -0
- package/chunks/{zh-TW-FZ3ETVR2.js → zh-TW-MV4FWFB6.js} +1 -0
- package/chunks/{zh-K3OJZ5LI.js → zh-X3WGU6SI.js} +1 -0
- package/chunks/{zoom-image-TCBO2YL5.js → zoom-image-NYJPC3NI.js} +12 -12
- package/cli.js +13 -13
- package/locales/ca.js +1 -0
- package/locales/en.js +1 -0
- package/locales/zh-TW.js +1 -0
- package/locales/zh.js +1 -0
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-hQsSuKY7.js → abnfDiagram-VCTEODGH-yq7z7Anb.js} +1 -1
- package/web-shell/assets/{arc-CpKLq3XD.js → arc-CbJO0xnT.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-Bplk1J-m.js → architectureDiagram-5GKGNRK7-CRh89421.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-B-cca4ej.js → blockDiagram-NRAW4CY4-C75KAhKv.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BZ8cn00E.js → c4Diagram-UCG6FXSJ-BzlMveFB.js} +1 -1
- package/web-shell/assets/channel-B3sGR79J.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-DEQ2uYU0.js → chunk-2Q5K7J3B-DA8QDX3a.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-DqH8Lz-4.js → chunk-5VM5RSS4-Bgu7gQ7Y.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-Dru7qMTB.js → chunk-F27PBJKO-BOew7pIK.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-DN8KcdzT.js → chunk-G27WJ6UU-DHx1I-hO.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-DMS-EquZ.js → chunk-JWPE2WC7-SarFW0WU.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-ubbLaEwq.js → chunk-LCL6LL3I-BLzP083Z.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-DdIZqnYy.js → chunk-POPQ4Y6H-Bmkv_iKm.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-DkgYFSnb.js → chunk-SVP7TREG-MPx9r1N2.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-CaesHiYG.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-bqnC4Oq-.js → cose-bilkent-JH36ORCC-DWm6lfOG.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-mDRBhRzB.js → cynefin-OW5HDTMX-DcBUyr5R.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-B4Tod_Ik.js → cynefinDiagram-5FMLGOSQ-Df8qmd_p.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-DU9f-iCw.js → dagre-3AP2YEHR-DDmGspD7.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-BsYVeB7c.js → diagram-S7CK7UJ4-BK_qFvbi.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-frM5Sn9C.js → diagram-UQ7AKVKN-Uw3AP_bi.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-C1Z7uZdv.js → diagram-VSXAHHWV-CJOQKxY7.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-CIY4x0M9.js → diagram-VX7I27RA-DhdvZna5.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-hTl4GIbg.js → diagram-Z3DM3KII-edQU0nlP.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-4loIGTHZ.js → ebnfDiagram-PWID7BFC-4kugBEsO.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-B9Up14ul.js → erDiagram-SSCWMZ5O-BMkFivWO.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CIPfQBl9.js → flowDiagram-A5DVABFB-BM1ea8g-.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DaZk3lrl.js → ganttDiagram-EL5Y4UJY-CXj_cKRf.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-D-knAHoQ.js → gitGraphDiagram-WWUBYQGX-D0nEqwqu.js} +1 -1
- package/web-shell/assets/{index-Di8dYJlQ.js → index-B6JN54Pd.js} +1 -1
- package/web-shell/assets/{index-RNKRtdDf.css → index-C-XlQn24.css} +1 -1
- package/web-shell/assets/{index-pkWucfFU.js → index-DLjXM0dn.js} +367 -367
- package/web-shell/assets/{infoDiagram-RXCK75RN-7AJndIyq.js → infoDiagram-RXCK75RN-DF7aGGbQ.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DjIU3IKv.js → ishikawaDiagram-5VMMS53U-CZYNX1lL.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-D3cf3462.js → journeyDiagram-EYS64GPL-CvrqMUz1.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-CmuPjlRe.js → kanban-definition-3QL26DDD-BZNJQZBj.js} +1 -1
- package/web-shell/assets/{layout-C2Ci1XAx.js → layout-Bf83x7D6.js} +1 -1
- package/web-shell/assets/{linear-CqOKGHue.js → linear-Bkc3ES2f.js} +1 -1
- package/web-shell/assets/{mermaid.core-Bnt57s5_.js → mermaid.core-C6xuovwz.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-BSSJVfj3.js → mindmap-definition-FBJOCRG2-DzH6gVRg.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-DNLHwge4.js → pegDiagram-XKGWAZYB-DCvLh2fa.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-CYRSio_9.js → pieDiagram-E7YTZNPT-BtjVlx_6.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-CzSwKETq.js → quadrantDiagram-AXDQQJYC-IbroqxFe.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-Dzbg_Jis.js → railroadDiagram-O6MQD6OU-BvMykiWW.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CY3Apuzl.js → requirementDiagram-EFPCY7ZU-D-HHMyrh.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-432Hiv50.js → sankeyDiagram-P5KCCOFB-C0XXhB6d.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-CucAf-fk.js → sequenceDiagram-WJ2MYXX4-DseAXj5d.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-RBc9fiXv.js → sizeCapture-X5ZJPWSS-Cek2EweK.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-BwsgjK6k.js → stateDiagram-HBIQ2CUA-yLv8wafW.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DeThXnol.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-DMMYIqPz.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-BbmmEMJb.js → timeline-definition-24CTP7MA-BJuFD7OG.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-DlfQjNzM.js → vennDiagram-4TSXK5OY-CNAavdoV.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-86EXFbP6.js → wardleyDiagram-VM6X3IG4-DaIjAidq.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-794nZBSV.js → xychartDiagram-S5SC5T6Z-DkcQXjTy.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/MaxSizedBox-RQWAKXYC.js +0 -111
- package/chunks/agent-headless-YBSOXERA.js +0 -87
- package/chunks/channel-settings-store-DD6W3EJQ.js +0 -116
- package/chunks/config-utils-WXWWMH2D.js +0 -112
- package/chunks/contextCommand-UKPGPBW5.js +0 -107
- package/chunks/daemon-status-provider-D2HNWRDK.js +0 -116
- package/chunks/daemon-trust-policy-F4JM5CKX.js +0 -113
- package/chunks/earlyInputCapture-54M7AWAF.js +0 -108
- package/chunks/handleAutoUpdate-T36AMYVP.js +0 -110
- package/chunks/initializer-6USYPDX7.js +0 -114
- package/chunks/installationInfo-46TRIE5M.js +0 -108
- package/chunks/list-BCX6JAYS.js +0 -117
- package/chunks/loadedSettingsAdapter-7OBB7B6J.js +0 -111
- package/chunks/mcp-FCS6V74Y.js +0 -111
- package/chunks/nonInteractiveCli-CQUUSJ3N.js +0 -180
- package/chunks/pidfile-SIEQM3X5.js +0 -112
- package/chunks/prompt-terminal-ledger-YIAGDBHG.js +0 -106
- package/chunks/theme-manager-73W4SEDX.js +0 -103
- package/chunks/useAutoAcceptIndicator-SMCU7IYQ.js +0 -121
- package/chunks/workspace-providers-status-ZYXLTCJ5.js +0 -115
- package/chunks/workspace-skills-status-ZVFYCT5C.js +0 -114
- package/chunks/write-file-2KVXXVWB.js +0 -90
- package/web-shell/assets/channel-DggMZLoL.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DPMQMV0q.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DPMQMV0q.js +0 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-C_HLER48.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-KP0j5nd5.js +0 -8
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
import {
|
|
4
4
|
computeCpuPercent
|
|
5
5
|
} from "./chunk-LBOVL47Y.js";
|
|
6
|
-
import {
|
|
7
|
-
resolveServeToken
|
|
8
|
-
} from "./chunk-ZELCTN6Y.js";
|
|
9
6
|
import {
|
|
10
7
|
RUNTIME_STARTUP_CANCELLED_MESSAGE
|
|
11
8
|
} from "./chunk-QUPXZXLV.js";
|
|
9
|
+
import {
|
|
10
|
+
resolveServeToken
|
|
11
|
+
} from "./chunk-ZELCTN6Y.js";
|
|
12
12
|
import {
|
|
13
13
|
ACCESS_LOG_CONTROLLER_LOCAL,
|
|
14
14
|
CAPABILITIES_SCHEMA_VERSION,
|
|
@@ -40,7 +40,7 @@ import {
|
|
|
40
40
|
resolveAcpHttpEnabled,
|
|
41
41
|
setDeferredRuntimeRequestTiming,
|
|
42
42
|
toDaemonStatusMemoryLimits
|
|
43
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-SQPOJ4ZI.js";
|
|
44
44
|
import "./chunk-VGHZT6JR.js";
|
|
45
45
|
import {
|
|
46
46
|
normalizeSessionIdForLookup
|
|
@@ -57,15 +57,6 @@ import "./chunk-NYWWQ437.js";
|
|
|
57
57
|
import {
|
|
58
58
|
resolveSessionRestoreTimeoutMs
|
|
59
59
|
} from "./chunk-4JRM2BSM.js";
|
|
60
|
-
import {
|
|
61
|
-
require_express
|
|
62
|
-
} from "./chunk-AYHQZBJ4.js";
|
|
63
|
-
import {
|
|
64
|
-
resolveWebShellDir
|
|
65
|
-
} from "./chunk-FBX2SDQ4.js";
|
|
66
|
-
import {
|
|
67
|
-
LIVE_HOST_PROTOCOL_VERSION
|
|
68
|
-
} from "./chunk-NKLP3DCK.js";
|
|
69
60
|
import {
|
|
70
61
|
DEFAULT_COMPACTED_REPLAY_MAX_BYTES,
|
|
71
62
|
DEFAULT_MAX_JOURNAL_BYTES,
|
|
@@ -75,12 +66,21 @@ import {
|
|
|
75
66
|
normalizeMaxJournalBytes,
|
|
76
67
|
normalizeMaxJournalEvents
|
|
77
68
|
} from "./chunk-WCCLLK7X.js";
|
|
69
|
+
import {
|
|
70
|
+
require_express
|
|
71
|
+
} from "./chunk-AYHQZBJ4.js";
|
|
72
|
+
import {
|
|
73
|
+
resolveWebShellDir
|
|
74
|
+
} from "./chunk-FBX2SDQ4.js";
|
|
75
|
+
import {
|
|
76
|
+
resolveChannelCwd
|
|
77
|
+
} from "./chunk-7JPW6IYH.js";
|
|
78
|
+
import {
|
|
79
|
+
LIVE_HOST_PROTOCOL_VERSION
|
|
80
|
+
} from "./chunk-NKLP3DCK.js";
|
|
78
81
|
import "./chunk-K6KS3LTN.js";
|
|
79
82
|
import "./chunk-HMJ2P3SV.js";
|
|
80
83
|
import "./chunk-7E7UCJHS.js";
|
|
81
|
-
import {
|
|
82
|
-
resolveChannelCwd
|
|
83
|
-
} from "./chunk-XQNWTA4Y.js";
|
|
84
84
|
import {
|
|
85
85
|
consumeServeFastPathRejectedLoaderKeys,
|
|
86
86
|
loadServeFastPathSettings,
|
|
@@ -90,17 +90,20 @@ import {
|
|
|
90
90
|
MAX_REGISTERED_WORKSPACES,
|
|
91
91
|
resolveWorkspaceInputs,
|
|
92
92
|
workspaceRegistrationId
|
|
93
|
-
} from "./chunk-
|
|
94
|
-
import "./chunk-
|
|
93
|
+
} from "./chunk-OQ6LTSX3.js";
|
|
94
|
+
import "./chunk-ZJG323IA.js";
|
|
95
95
|
import {
|
|
96
96
|
LOAD_REPLAY_META_KEY
|
|
97
|
-
} from "./chunk-
|
|
97
|
+
} from "./chunk-OZ6KS6KW.js";
|
|
98
98
|
import "./chunk-624NHDGB.js";
|
|
99
99
|
import {
|
|
100
100
|
canonicalizeWorkspace,
|
|
101
101
|
translateAndCheckAbsoluteWorkspacePath
|
|
102
102
|
} from "./chunk-6PLDPT2C.js";
|
|
103
|
-
import
|
|
103
|
+
import {
|
|
104
|
+
ExtraCaInspectionError,
|
|
105
|
+
loadableCertificates
|
|
106
|
+
} from "./chunk-PAJGKZAA.js";
|
|
104
107
|
import "./chunk-FYJ7W2PI.js";
|
|
105
108
|
import "./chunk-Z7B6SRPM.js";
|
|
106
109
|
import {
|
|
@@ -111,7 +114,7 @@ import {
|
|
|
111
114
|
import {
|
|
112
115
|
normalizeWorkerDiagnostic,
|
|
113
116
|
sanitizeWorkerDiagnostic
|
|
114
|
-
} from "./chunk-
|
|
117
|
+
} from "./chunk-JVPFTDBK.js";
|
|
115
118
|
import {
|
|
116
119
|
QWEN_SERVER_TOKEN_ENV
|
|
117
120
|
} from "./chunk-GYTKQYDB.js";
|
|
@@ -132,7 +135,7 @@ import {
|
|
|
132
135
|
} from "./chunk-5HBA2Z7V.js";
|
|
133
136
|
import {
|
|
134
137
|
sanitizeLogText
|
|
135
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-E55H6BZ7.js";
|
|
136
139
|
import "./chunk-IW6RQPQB.js";
|
|
137
140
|
import "./chunk-GOXKNSDZ.js";
|
|
138
141
|
import {
|
|
@@ -145,14 +148,14 @@ import {
|
|
|
145
148
|
scrubInheritedLoaderEnv,
|
|
146
149
|
setLoaderKeyRejectionReporter
|
|
147
150
|
} from "./chunk-5PA6UEYA.js";
|
|
151
|
+
import {
|
|
152
|
+
getCliVersion
|
|
153
|
+
} from "./chunk-6KS24S3X.js";
|
|
154
|
+
import "./chunk-W3N5XAZ6.js";
|
|
148
155
|
import "./chunk-NPQ5ZKRP.js";
|
|
149
156
|
import {
|
|
150
157
|
isWithinRoot
|
|
151
158
|
} from "./chunk-MR3PXB6E.js";
|
|
152
|
-
import {
|
|
153
|
-
getCliVersion
|
|
154
|
-
} from "./chunk-MGEXTDBI.js";
|
|
155
|
-
import "./chunk-YLFLHKDL.js";
|
|
156
159
|
import "./chunk-LJZSMWOH.js";
|
|
157
160
|
import "./chunk-GOFAQQZA.js";
|
|
158
161
|
import "./chunk-5M6IDOMF.js";
|
|
@@ -191,9 +194,11 @@ import {
|
|
|
191
194
|
init_esbuild_shims();
|
|
192
195
|
var import_express = __toESM(require_express(), 1);
|
|
193
196
|
import { X509Certificate, createHash as createHash3, timingSafeEqual } from "node:crypto";
|
|
197
|
+
import { execFile } from "node:child_process";
|
|
194
198
|
import * as fs from "node:fs";
|
|
195
199
|
import { createServer } from "node:http";
|
|
196
200
|
import * as https from "node:https";
|
|
201
|
+
import { isIP } from "node:net";
|
|
197
202
|
import * as path from "node:path";
|
|
198
203
|
import * as os from "node:os";
|
|
199
204
|
import { monitorEventLoopDelay, performance as performance2 } from "node:perf_hooks";
|
|
@@ -3282,14 +3287,453 @@ function workspaceRuntimeEffectiveEnv(runtime, daemonEnv) {
|
|
|
3282
3287
|
return runtime.env.effectiveEnv ?? daemonEnv;
|
|
3283
3288
|
}
|
|
3284
3289
|
__name(workspaceRuntimeEffectiveEnv, "workspaceRuntimeEffectiveEnv");
|
|
3285
|
-
function formatChannelWorkerDaemonUrl(host, port) {
|
|
3290
|
+
function formatChannelWorkerDaemonUrl(host, port, tls = false) {
|
|
3291
|
+
const scheme = tls ? "https" : "http";
|
|
3286
3292
|
const normalized = host.trim().toLowerCase();
|
|
3287
3293
|
if (normalized === "" || normalized === "0.0.0.0" || normalized === "::" || normalized === "[::]") {
|
|
3288
|
-
return
|
|
3294
|
+
return `${scheme}://127.0.0.1:${port}`;
|
|
3289
3295
|
}
|
|
3290
|
-
return
|
|
3296
|
+
return `${scheme}://${formatHostForUrl(host)}:${port}`;
|
|
3291
3297
|
}
|
|
3292
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");
|
|
3293
3737
|
function extractContextFilename(value) {
|
|
3294
3738
|
if (typeof value === "string") {
|
|
3295
3739
|
const trimmed = value.trim();
|
|
@@ -3355,12 +3799,12 @@ __name(hasRetryableChannelWorkerShutdownError, "hasRetryableChannelWorkerShutdow
|
|
|
3355
3799
|
var channelWorkerRuntimePromise;
|
|
3356
3800
|
async function loadChannelWorkerRuntime() {
|
|
3357
3801
|
channelWorkerRuntimePromise ??= Promise.all([
|
|
3358
|
-
import("./channel-worker-supervisor-
|
|
3359
|
-
import("./pidfile-
|
|
3360
|
-
import("./runtime-
|
|
3802
|
+
import("./channel-worker-supervisor-YSKB5GVB.js"),
|
|
3803
|
+
import("./pidfile-DHV2Y7UD.js"),
|
|
3804
|
+
import("./runtime-I76HPFUE.js"),
|
|
3361
3805
|
import("./cli-entry-path-4VJ3Y6T2.js"),
|
|
3362
|
-
import("./channel-worker-group-
|
|
3363
|
-
import("./channel-worker-manager-
|
|
3806
|
+
import("./channel-worker-group-EVDC2P4K.js"),
|
|
3807
|
+
import("./channel-worker-manager-IJJZHGEI.js")
|
|
3364
3808
|
]).then(
|
|
3365
3809
|
([
|
|
3366
3810
|
supervisor,
|
|
@@ -3371,6 +3815,7 @@ async function loadChannelWorkerRuntime() {
|
|
|
3371
3815
|
workerManager
|
|
3372
3816
|
]) => ({
|
|
3373
3817
|
createChannelWorkerSupervisor: supervisor.createChannelWorkerSupervisor,
|
|
3818
|
+
resolveWorkerCaCertPath: supervisor.resolveWorkerCaCertPath,
|
|
3374
3819
|
channelServicePidfile: pidfile,
|
|
3375
3820
|
loadChannelsConfig: channelRuntime.loadChannelsConfig,
|
|
3376
3821
|
createChannelWorkerGroup: workerGroup.createChannelWorkerGroup,
|
|
@@ -3465,7 +3910,7 @@ function shouldPreheatBridge(deps) {
|
|
|
3465
3910
|
__name(shouldPreheatBridge, "shouldPreheatBridge");
|
|
3466
3911
|
var coreRuntimePromise;
|
|
3467
3912
|
function loadCoreRuntime() {
|
|
3468
|
-
coreRuntimePromise ??= import("./core-runtime-
|
|
3913
|
+
coreRuntimePromise ??= import("./core-runtime-PKNQ63VL.js");
|
|
3469
3914
|
return coreRuntimePromise;
|
|
3470
3915
|
}
|
|
3471
3916
|
__name(loadCoreRuntime, "loadCoreRuntime");
|
|
@@ -3501,10 +3946,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
|
|
|
3501
3946
|
var settingsRuntimePromise;
|
|
3502
3947
|
function loadSettingsRuntimeModules() {
|
|
3503
3948
|
settingsRuntimePromise ??= Promise.all([
|
|
3504
|
-
import("./settings-
|
|
3505
|
-
import("./environment-
|
|
3506
|
-
import("./loadedSettingsAdapter-
|
|
3507
|
-
import("./trustedFolders-
|
|
3949
|
+
import("./settings-IX5HOOCG.js"),
|
|
3950
|
+
import("./environment-JXOSW25V.js"),
|
|
3951
|
+
import("./loadedSettingsAdapter-IK7H5JRK.js"),
|
|
3952
|
+
import("./trustedFolders-YKK67IP3.js")
|
|
3508
3953
|
]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
|
|
3509
3954
|
settings,
|
|
3510
3955
|
environment,
|
|
@@ -3517,8 +3962,8 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
|
|
|
3517
3962
|
var channelWebhookConfigRuntimePromise;
|
|
3518
3963
|
function loadChannelWebhookConfigRuntime() {
|
|
3519
3964
|
channelWebhookConfigRuntimePromise ??= Promise.all([
|
|
3520
|
-
import("./runtime-
|
|
3521
|
-
import("./config-utils-
|
|
3965
|
+
import("./runtime-I76HPFUE.js"),
|
|
3966
|
+
import("./config-utils-7M6PCTLT.js")
|
|
3522
3967
|
]).then(([channelRuntime, configUtils]) => ({
|
|
3523
3968
|
loadChannelsConfig: channelRuntime.loadChannelsConfig,
|
|
3524
3969
|
parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
|
|
@@ -3544,18 +3989,18 @@ async function loadServeRuntimeModules() {
|
|
|
3544
3989
|
workspaceRegistryModule,
|
|
3545
3990
|
promptLedgerModule
|
|
3546
3991
|
] = await Promise.all([
|
|
3547
|
-
import("./server-
|
|
3548
|
-
import("./bridge-
|
|
3549
|
-
import("./spawnChannel-
|
|
3992
|
+
import("./server-TWXRRREO.js"),
|
|
3993
|
+
import("./bridge-DFX2FFH4.js"),
|
|
3994
|
+
import("./spawnChannel-TMC6VXGN.js"),
|
|
3550
3995
|
import("./process-registry-PMJOA5CO.js"),
|
|
3551
|
-
import("./workspace-service-
|
|
3996
|
+
import("./workspace-service-4FGTUJLA.js"),
|
|
3552
3997
|
import("./types-WYCFCEHR.js"),
|
|
3553
|
-
import("./daemon-status-provider-
|
|
3554
|
-
import("./workspace-providers-status-
|
|
3555
|
-
import("./workspace-skills-status-
|
|
3556
|
-
import("./total-session-admission-
|
|
3557
|
-
import("./workspace-registry-
|
|
3558
|
-
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")
|
|
3559
4004
|
]);
|
|
3560
4005
|
return {
|
|
3561
4006
|
createServeApp: serverModule.createServeApp,
|
|
@@ -4423,6 +4868,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4423
4868
|
);
|
|
4424
4869
|
}
|
|
4425
4870
|
let tlsOptions;
|
|
4871
|
+
let tlsCertPath;
|
|
4426
4872
|
if (opts.tlsCert && !opts.tlsKey || !opts.tlsCert && opts.tlsKey) {
|
|
4427
4873
|
throw new Error(
|
|
4428
4874
|
`--tls-cert and --tls-key must be provided together (got only --tls-${opts.tlsCert ? "cert" : "key"}).`
|
|
@@ -4465,6 +4911,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4465
4911
|
);
|
|
4466
4912
|
}
|
|
4467
4913
|
tlsOptions = { cert, key };
|
|
4914
|
+
tlsCertPath = path.resolve(opts.tlsCert);
|
|
4468
4915
|
}
|
|
4469
4916
|
if (!isLoopbackBind(opts.hostname) && !token) {
|
|
4470
4917
|
throw new Error(
|
|
@@ -4594,7 +5041,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4594
5041
|
}
|
|
4595
5042
|
let workspaceRegistrationStore = deps.workspaceRegistrationStore;
|
|
4596
5043
|
if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
|
|
4597
|
-
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-
|
|
5044
|
+
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-I4U3V5LL.js");
|
|
4598
5045
|
workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
|
|
4599
5046
|
}
|
|
4600
5047
|
if (workspaceRegistrationStore) {
|
|
@@ -4878,7 +5325,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4878
5325
|
"qwen serve: required external tool guard handshake succeeded."
|
|
4879
5326
|
);
|
|
4880
5327
|
}
|
|
4881
|
-
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-
|
|
5328
|
+
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-LDBJXH2U.js");
|
|
4882
5329
|
const daemonToolGuardHandler = createDaemonToolGuard(
|
|
4883
5330
|
externalToolGuardHandler
|
|
4884
5331
|
);
|
|
@@ -5217,7 +5664,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5217
5664
|
loadCoreRuntime(),
|
|
5218
5665
|
loadSettingsRuntimeModules(),
|
|
5219
5666
|
cliVersionPromise,
|
|
5220
|
-
import("./daemon-trust-policy-
|
|
5667
|
+
import("./daemon-trust-policy-C6YTU5CQ.js")
|
|
5221
5668
|
]);
|
|
5222
5669
|
cliVersion = resolvedCliVersion;
|
|
5223
5670
|
settingsRuntime.environment.preResolveHomeEnvOverrides();
|
|
@@ -5593,7 +6040,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5593
6040
|
resolveSkillSettings,
|
|
5594
6041
|
skillSettingStrings,
|
|
5595
6042
|
updateWorkspaceSkillSettingLists
|
|
5596
|
-
} = await import("./skill-settings-
|
|
6043
|
+
} = await import("./skill-settings-5U7FTJIK.js");
|
|
5597
6044
|
const fresh = loadSettingsForPersistence(workspace);
|
|
5598
6045
|
const normalizedName = skillName.trim().toLowerCase();
|
|
5599
6046
|
const resolved = resolveSkillSettings(fresh);
|
|
@@ -5658,7 +6105,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5658
6105
|
resolveSkillSettings,
|
|
5659
6106
|
skillSettingStrings,
|
|
5660
6107
|
updateWorkspaceSkillSettingLists
|
|
5661
|
-
} = await import("./skill-settings-
|
|
6108
|
+
} = await import("./skill-settings-5U7FTJIK.js");
|
|
5662
6109
|
const fresh = loadSettingsForPersistence(workspace);
|
|
5663
6110
|
const resolved = resolveSkillSettings(fresh);
|
|
5664
6111
|
const initialDisabled = skillSettingStrings(
|
|
@@ -5763,7 +6210,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5763
6210
|
);
|
|
5764
6211
|
}
|
|
5765
6212
|
}), "persistSettingsFn");
|
|
5766
|
-
const { createSubSessionLauncher } = await import("./create-sub-session-
|
|
6213
|
+
const { createSubSessionLauncher } = await import("./create-sub-session-PLGPY6TV.js");
|
|
5767
6214
|
const subSessionLauncher = createSubSessionLauncher({
|
|
5768
6215
|
getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
|
|
5769
6216
|
boundWorkspace,
|
|
@@ -6992,8 +7439,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6992
7439
|
{ createChannelManagementService },
|
|
6993
7440
|
{ WorkspaceChannelSettingsStore }
|
|
6994
7441
|
] = await Promise.all([
|
|
6995
|
-
import("./channel-management-service-
|
|
6996
|
-
import("./channel-settings-store-
|
|
7442
|
+
import("./channel-management-service-HXXS3HOZ.js"),
|
|
7443
|
+
import("./channel-settings-store-ELLH2M4M.js")
|
|
6997
7444
|
]);
|
|
6998
7445
|
return createChannelManagementService({
|
|
6999
7446
|
workspaceCwd: targetRuntime.workspaceCwd,
|
|
@@ -7197,8 +7644,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7197
7644
|
{ createWorkspaceTrustReconciler },
|
|
7198
7645
|
{ createDaemonTrustPolicyMonitor }
|
|
7199
7646
|
] = await Promise.all([
|
|
7200
|
-
import("./workspace-trust-reconciler-
|
|
7201
|
-
import("./daemon-trust-policy-monitor-
|
|
7647
|
+
import("./workspace-trust-reconciler-GJ466KCE.js"),
|
|
7648
|
+
import("./daemon-trust-policy-monitor-IGEJPHQ4.js")
|
|
7202
7649
|
]);
|
|
7203
7650
|
const materializationFor = /* @__PURE__ */ __name((entry, snapshot, decision) => {
|
|
7204
7651
|
const boundWorkspaces2 = entry.primary && decision.targetTrusted ? runtime.resolveBoundWorkspacesFromIdeEnv(
|
|
@@ -7413,7 +7860,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7413
7860
|
);
|
|
7414
7861
|
}
|
|
7415
7862
|
const channelValidationSettingsRuntime = opts.channelSelection ? await loadSettingsRuntimeModules() : void 0;
|
|
7416
|
-
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-
|
|
7863
|
+
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-C6YTU5CQ.js") : void 0;
|
|
7417
7864
|
const channelValidationTrustSnapshot = channelValidationTrustPolicy ? await channelValidationTrustPolicy.readDaemonTrustPolicySnapshot() : void 0;
|
|
7418
7865
|
const resolveChannelWorkspaceGroupsAtListen = /* @__PURE__ */ __name(() => {
|
|
7419
7866
|
if (!opts.channelSelection || !channelValidationSettingsRuntime || !channelRuntime) {
|
|
@@ -7966,6 +8413,69 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7966
8413
|
);
|
|
7967
8414
|
}
|
|
7968
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
|
+
}
|
|
7969
8479
|
const createSupervisor = deps.channelWorkerSupervisorFactory ?? workerRuntime.createChannelWorkerSupervisor;
|
|
7970
8480
|
const createGroup = /* @__PURE__ */ __name((groups) => workerRuntime.createChannelWorkerGroup({
|
|
7971
8481
|
groups,
|
|
@@ -7973,11 +8483,9 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7973
8483
|
createSupervisor,
|
|
7974
8484
|
shared: {
|
|
7975
8485
|
cliEntryPath: workerRuntime.findCliEntryPath(),
|
|
7976
|
-
daemonUrl:
|
|
7977
|
-
|
|
7978
|
-
|
|
7979
|
-
),
|
|
7980
|
-
...token ? { daemonToken: token } : {}
|
|
8486
|
+
daemonUrl: workerDaemonUrl,
|
|
8487
|
+
...token ? { daemonToken: token } : {},
|
|
8488
|
+
...tlsCertPath ? { workerTlsCaCertPath: tlsCertPath } : {}
|
|
7981
8489
|
},
|
|
7982
8490
|
onReady: /* @__PURE__ */ __name((snapshot) => {
|
|
7983
8491
|
if (runtimeStartupError !== void 0) return;
|
|
@@ -8611,6 +9119,7 @@ export {
|
|
|
8611
9119
|
createBoundChannelDeliveryHandler,
|
|
8612
9120
|
createDisabledChannelWorkerSupervisor,
|
|
8613
9121
|
createLazyBridgeProxy,
|
|
9122
|
+
describeWorkerTlsTrustGaps,
|
|
8614
9123
|
extractContextFilename,
|
|
8615
9124
|
formatChannelWorkerDaemonUrl,
|
|
8616
9125
|
resolveRuntimeStartupTimeoutMs,
|
|
@@ -8618,6 +9127,7 @@ export {
|
|
|
8618
9127
|
subSessionConcurrencyCapsFromSettings,
|
|
8619
9128
|
validateAndCanonicalizeWorkspaceInput,
|
|
8620
9129
|
validatePolicyConfig,
|
|
9130
|
+
verifyWorkerTlsTrust,
|
|
8621
9131
|
waitForRuntimeStartingForShutdown
|
|
8622
9132
|
};
|
|
8623
9133
|
/**
|