@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.
Files changed (379) hide show
  1. package/bundled/coordinate/SKILL.md +3 -3
  2. package/bundled/qc-helper/docs/configuration/model-providers.md +2 -0
  3. package/bundled/qc-helper/docs/configuration/settings.md +6 -6
  4. package/bundled/qc-helper/docs/features/channels/_meta.ts +1 -0
  5. package/bundled/qc-helper/docs/features/channels/dws.md +120 -0
  6. package/bundled/qc-helper/docs/features/channels/overview.md +3 -3
  7. package/bundled/qc-helper/docs/features/code-review.md +1 -1
  8. package/bundled/qc-helper/docs/qwen-serve.md +2 -0
  9. package/bundled/review/SKILL.md +47 -12
  10. package/bundled/review/references/persistence.md +6 -6
  11. package/bundled/review/references/posting.md +2 -2
  12. package/chunks/MaxSizedBox-UUTUE42J.js +112 -0
  13. package/chunks/{StandaloneSessionPicker-NEWUAPCT.js → StandaloneSessionPicker-XF2TVJFK.js} +78 -77
  14. package/chunks/{acp-startup-profiler-T4GEAPLX.js → acp-startup-profiler-GNYAL6LI.js} +2 -2
  15. package/chunks/{acpAgent-A5CIQGW6.js → acpAgent-GY53MJIW.js} +254 -158
  16. package/chunks/{agent-TQ6CYOIL.js → agent-7U6CC5KF.js} +41 -41
  17. package/chunks/agent-headless-32O4L2CT.js +87 -0
  18. package/chunks/{anthropicContentGenerator-FSBGS426.js → anthropicContentGenerator-U76GTVB6.js} +7 -7
  19. package/chunks/{artifact-tool-UQTNZDUF.js → artifact-tool-XDJCZZCF.js} +2 -2
  20. package/chunks/{askUserQuestion-BSZALR7M.js → askUserQuestion-ZXXERLEV.js} +2 -2
  21. package/chunks/{bridge-MBOVCHXN.js → bridge-DFX2FFH4.js} +57 -56
  22. package/chunks/{ca-DZBZOMLU.js → ca-7HPYOYSZ.js} +1 -0
  23. package/chunks/{channel-management-service-XGGL6PLF.js → channel-management-service-HXXS3HOZ.js} +4 -4
  24. package/chunks/channel-settings-store-ELLH2M4M.js +117 -0
  25. package/chunks/{channel-worker-group-GIXIF4VT.js → channel-worker-group-EVDC2P4K.js} +5 -5
  26. package/chunks/{channel-worker-manager-ZBSYXJEB.js → channel-worker-manager-IJJZHGEI.js} +5 -5
  27. package/chunks/{channel-worker-supervisor-NI6JEY4Q.js → channel-worker-supervisor-YSKB5GVB.js} +9 -5
  28. package/chunks/{chunk-CPZQJP6J.js → chunk-27ONXAFY.js} +1 -1
  29. package/chunks/{chunk-FXNLH7E6.js → chunk-2CRNTW2B.js} +18 -2
  30. package/chunks/{read-package-up-UXSW3YPB.js → chunk-2EAZ43JQ.js} +1 -0
  31. package/chunks/{chunk-YX4II73B.js → chunk-2FN2HNTI.js} +2 -2
  32. package/chunks/{chunk-7KGJGYGA.js → chunk-2MHGD7EE.js} +1 -1
  33. package/chunks/{chunk-H5K5MRU7.js → chunk-2NCVUT3C.js} +4 -4
  34. package/chunks/{chunk-VLEGGCEA.js → chunk-2NNTE2ED.js} +171 -1
  35. package/chunks/{chunk-LNKZTLTH.js → chunk-2SERYG4T.js} +1 -1
  36. package/chunks/{chunk-UEHH33VE.js → chunk-2YDYDDE2.js} +6 -6
  37. package/chunks/{chunk-U7GJPTEY.js → chunk-2YEZNBSD.js} +66 -60
  38. package/chunks/{chunk-L6PFEZUM.js → chunk-2ZV3CZKI.js} +82 -12
  39. package/chunks/{chunk-36XTQW3N.js → chunk-3B5DCAQU.js} +28 -11
  40. package/chunks/{chunk-DE24WTEJ.js → chunk-3BV7TZNQ.js} +3 -3
  41. package/chunks/{chunk-IKPQM6I5.js → chunk-3FSBMAYD.js} +1 -1
  42. package/chunks/{chunk-J54EA46E.js → chunk-3UZCLCXR.js} +3 -3
  43. package/chunks/{chunk-ZROP2DTX.js → chunk-43C2II2G.js} +5 -5
  44. package/chunks/{chunk-2ZH5XAOO.js → chunk-47SIHHPL.js} +8 -8
  45. package/chunks/{chunk-EEBIINBT.js → chunk-4DCP3362.js} +6 -14
  46. package/chunks/{chunk-DF6DJZIX.js → chunk-4TPAG3O7.js} +1 -1
  47. package/chunks/{chunk-6L5EXDDN.js → chunk-5CI4AXDD.js} +4 -4
  48. package/chunks/{chunk-7KOFLDEP.js → chunk-5JTIYALA.js} +1 -1
  49. package/chunks/{chunk-YPJVAQ7V.js → chunk-5MK32KJV.js} +3 -3
  50. package/chunks/{chunk-XXA72PGJ.js → chunk-5T4LWWNX.js} +2 -2
  51. package/chunks/{chunk-NA6AZRDQ.js → chunk-5Y2JCJAH.js} +2 -2
  52. package/chunks/{chunk-3ROKI6MD.js → chunk-5ZYZPDDF.js} +978 -886
  53. package/chunks/{chunk-U4SJGOBF.js → chunk-62PXFOK4.js} +4 -4
  54. package/chunks/{chunk-SKXXO64C.js → chunk-6E4WHQJV.js} +1 -1
  55. package/chunks/{chunk-6Y7XMJFF.js → chunk-6HTMIKXZ.js} +6 -6
  56. package/chunks/{chunk-MGEXTDBI.js → chunk-6KS24S3X.js} +2 -2
  57. package/chunks/{chunk-ZJWFRMCY.js → chunk-6US7BF3G.js} +2 -2
  58. package/chunks/{chunk-RSOG6JND.js → chunk-6YAR6ZU3.js} +2 -2
  59. package/chunks/{chunk-Z3GFRVAY.js → chunk-73WFGVIZ.js} +3 -3
  60. package/chunks/{chunk-IX3CWNG7.js → chunk-76WGY6LW.js} +3 -3
  61. package/chunks/{chunk-CGWPQ6IM.js → chunk-77TOMRBG.js} +3 -3
  62. package/chunks/{chunk-JVTU5JYO.js → chunk-7AS7QX72.js} +1 -1
  63. package/chunks/{chunk-RLIS2VLZ.js → chunk-7DPKPBOQ.js} +2 -2
  64. package/chunks/{chunk-XQNWTA4Y.js → chunk-7JPW6IYH.js} +1 -1
  65. package/chunks/{chunk-UEY5WCRB.js → chunk-7QGEJI7M.js} +1 -1
  66. package/chunks/{chunk-GWUZOBCQ.js → chunk-A7X32SCT.js} +5 -5
  67. package/chunks/{chunk-R7Q5V3A5.js → chunk-AYVIGUUK.js} +1 -1
  68. package/chunks/{chunk-AIT6BMBI.js → chunk-BDHLBR46.js} +17 -3
  69. package/chunks/{chunk-3G6MRLTM.js → chunk-BKDAF7ES.js} +2 -2
  70. package/chunks/{chunk-5AHCPETA.js → chunk-BQBUZDDH.js} +3 -3
  71. package/chunks/{chunk-3KV5KXKU.js → chunk-BVE5EMIG.js} +2 -2
  72. package/chunks/{chunk-NDVTSFWZ.js → chunk-BX2BZPFJ.js} +3 -3
  73. package/chunks/{chunk-7UVAWPYG.js → chunk-C4WBKZJT.js} +4 -4
  74. package/chunks/{chunk-HYBEI2LH.js → chunk-CITGRGCM.js} +2 -1
  75. package/chunks/{chunk-TEQKBONY.js → chunk-CPPYZHBN.js} +1 -1
  76. package/chunks/chunk-DCSAVGDJ.js +20 -0
  77. package/chunks/{chunk-RSWDOHXS.js → chunk-DEYPMJPD.js} +1 -1
  78. package/chunks/{chunk-OWE7TE3F.js → chunk-DP7LABIB.js} +1 -1
  79. package/chunks/{chunk-LQF4PWEU.js → chunk-E4I5MVBR.js} +1 -1
  80. package/chunks/{chunk-NFDTDV37.js → chunk-E55H6BZ7.js} +4 -0
  81. package/chunks/{chunk-K623ENWT.js → chunk-E6FGMDFQ.js} +4 -0
  82. package/chunks/{chunk-QWTNAHCM.js → chunk-EAV3TENS.js} +3 -3
  83. package/chunks/{chunk-27HAGBZG.js → chunk-EB4VDXNI.js} +1 -1
  84. package/chunks/{chunk-RDPKOVXL.js → chunk-EC5BONC3.js} +1 -1
  85. package/chunks/{chunk-JHZIPJWY.js → chunk-EEQYTWGU.js} +5 -5
  86. package/chunks/{chunk-MFSV57XN.js → chunk-EKP3M4RF.js} +1 -1
  87. package/chunks/{chunk-R544UY5E.js → chunk-ELY4QVIB.js} +1 -1
  88. package/chunks/{chunk-PFCVB5ZI.js → chunk-EMGAVCBZ.js} +2 -2
  89. package/chunks/{chunk-JGDTCEBH.js → chunk-FJWICLG7.js} +1 -1
  90. package/chunks/{chunk-OXMS5HCS.js → chunk-FK4H3V6S.js} +5 -5
  91. package/chunks/{chunk-WANR3VVK.js → chunk-FN5C6C7G.js} +125 -60
  92. package/chunks/{chunk-5PVLDRGJ.js → chunk-FPH6TXD3.js} +1 -1
  93. package/chunks/{chunk-OY3ZSNQC.js → chunk-FVDQ5E67.js} +3 -3
  94. package/chunks/{chunk-J752LLEJ.js → chunk-GNMJNDZE.js} +1 -1
  95. package/chunks/{chunk-MSCVPOZR.js → chunk-GNRVKN76.js} +4 -4
  96. package/chunks/{chunk-FNZ42WN7.js → chunk-GTUKW3I6.js} +1 -1
  97. package/chunks/{chunk-NSPS67BG.js → chunk-GZJUCMH4.js} +1 -1
  98. package/chunks/{chunk-SNWAXNJ4.js → chunk-HJOWQUE2.js} +14 -11
  99. package/chunks/{chunk-3K5ORUVO.js → chunk-I32QCIK7.js} +1 -1
  100. package/chunks/{chunk-BOQRZ443.js → chunk-I6VVOZDK.js} +2 -2
  101. package/chunks/{chunk-KUPVZ4EO.js → chunk-I6YW3T3W.js} +207 -26
  102. package/chunks/{chunk-O6CS7VRT.js → chunk-ICWGPK23.js} +7 -7
  103. package/chunks/{chunk-EFT2T2LA.js → chunk-IJVDHPKD.js} +2 -2
  104. package/chunks/{chunk-SEMN7BNM.js → chunk-IKN3IUJP.js} +9 -8
  105. package/chunks/{chunk-O5ONGZGZ.js → chunk-ILPXSKGQ.js} +2 -2
  106. package/chunks/{chunk-QQQSUCC4.js → chunk-IPQA4SR5.js} +1 -1
  107. package/chunks/{chunk-SXBRB7ZP.js → chunk-IRIX323G.js} +2 -2
  108. package/chunks/{chunk-EJ5XRNOK.js → chunk-J7MLXFC5.js} +2 -2
  109. package/chunks/{chunk-KDGY3ST4.js → chunk-JECO75XD.js} +2 -2
  110. package/chunks/chunk-JLGFGPZJ.js +346 -0
  111. package/chunks/{chunk-COT2IXPM.js → chunk-JUIJ3FXC.js} +5 -5
  112. package/chunks/{chunk-IFWUT4GY.js → chunk-JVPFTDBK.js} +1 -1
  113. package/chunks/{chunk-455ZIBFX.js → chunk-K63NK3KL.js} +13 -13
  114. package/chunks/{chunk-MBLNXX3G.js → chunk-KCOXDRQL.js} +5 -5
  115. package/chunks/{chunk-3LUGIYS3.js → chunk-KOJ6MHD5.js} +3 -1
  116. package/chunks/{chunk-W4JA6Z44.js → chunk-KWFP3WV6.js} +9 -7
  117. package/chunks/{chunk-QKSMM4HF.js → chunk-L436XFLJ.js} +1 -1
  118. package/chunks/{chunk-M4TV7AJX.js → chunk-LI2HEMKO.js} +4 -4
  119. package/chunks/{chunk-FLTGTSLG.js → chunk-LJP2BBMK.js} +4 -4
  120. package/chunks/{chunk-HTIG2U5C.js → chunk-LRKMQPMD.js} +1 -1
  121. package/chunks/{chunk-YS4H3OFV.js → chunk-MDZO5V2O.js} +6 -6
  122. package/chunks/{chunk-2HYQZYPT.js → chunk-MW5AHWOZ.js} +7 -7
  123. package/chunks/{chunk-SJDR2S55.js → chunk-MYLXL7F6.js} +11 -11
  124. package/chunks/{chunk-PIZZIIEA.js → chunk-MZS7GEC7.js} +1 -1
  125. package/chunks/{chunk-H3JIT2M6.js → chunk-NER3H7PI.js} +1 -1
  126. package/chunks/{chunk-XYUJPDPB.js → chunk-NVK4HJYQ.js} +1 -1
  127. package/chunks/{chunk-GQQHY6TL.js → chunk-NY3IJYAV.js} +7 -7
  128. package/chunks/{chunk-3E53DKST.js → chunk-O3BUXIPM.js} +3 -3
  129. package/chunks/{chunk-QOUFO7TV.js → chunk-O5YGAEQS.js} +6 -6
  130. package/chunks/{chunk-OINGLDAX.js → chunk-ODXCSIH5.js} +4 -4
  131. package/chunks/{chunk-FMDWTE5I.js → chunk-OI2DR6QB.js} +2 -2
  132. package/chunks/{chunk-ENZMDVCM.js → chunk-OQ6LTSX3.js} +1 -1
  133. package/chunks/{chunk-KUDADN3R.js → chunk-OT26ITEY.js} +3 -3
  134. package/chunks/{chunk-FZUVUBYH.js → chunk-OX44MOAN.js} +3 -3
  135. package/chunks/{chunk-LURJYO2T.js → chunk-OZ6KS6KW.js} +4 -0
  136. package/chunks/{chunk-D2IGZJA7.js → chunk-PAJGKZAA.js} +272 -3
  137. package/chunks/{chunk-MTKBZIXU.js → chunk-PVBT5QPD.js} +1 -1
  138. package/chunks/{chunk-HDH5IDJH.js → chunk-R2ZJH3FV.js} +3 -3
  139. package/chunks/{chunk-SJLW5XGQ.js → chunk-RRKNX553.js} +1 -1
  140. package/chunks/{chunk-JS55F2GJ.js → chunk-SDVF6A42.js} +3 -3
  141. package/chunks/{chunk-DZPWZPGJ.js → chunk-SKNVVYIJ.js} +3 -3
  142. package/chunks/{chunk-SIC4S3RX.js → chunk-SLEWBQWM.js} +2 -2
  143. package/chunks/{chunk-P7DVAZKV.js → chunk-SM7ZVKTF.js} +7 -7
  144. package/chunks/{chunk-3N7EFOOM.js → chunk-SQPOJ4ZI.js} +11 -1
  145. package/chunks/{chunk-YOM3CJOP.js → chunk-SRGENTPF.js} +19 -19
  146. package/chunks/{chunk-ZB7VDPZB.js → chunk-T2CRBIDJ.js} +1 -1
  147. package/chunks/{chunk-F37T2S4O.js → chunk-T2HMXHYA.js} +6 -6
  148. package/chunks/{chunk-5X33EPHJ.js → chunk-T6OODF2U.js} +1 -1
  149. package/chunks/{chunk-7GECZMES.js → chunk-TKO4TLT6.js} +3 -3
  150. package/chunks/{chunk-PQ4RTSTH.js → chunk-TOF4UZHH.js} +3 -3
  151. package/chunks/{chunk-LD76HNCC.js → chunk-UCSV2IZW.js} +3 -3
  152. package/chunks/{chunk-EUZE3GSL.js → chunk-UX3IFLJM.js} +93 -9
  153. package/chunks/{chunk-AHQBSQYT.js → chunk-V3GINY6K.js} +3 -3
  154. package/chunks/{chunk-DD5XZICM.js → chunk-VL4YX3FH.js} +1 -1
  155. package/chunks/{chunk-DLYJ3RN7.js → chunk-VMDURMFY.js} +58 -32
  156. package/chunks/{chunk-E6BJFSLJ.js → chunk-W2WRNJKX.js} +6 -6
  157. package/chunks/{chunk-YLFLHKDL.js → chunk-W3N5XAZ6.js} +1 -1
  158. package/chunks/{chunk-QKGJIP2H.js → chunk-WBT3STGU.js} +1 -1
  159. package/chunks/{chunk-X3PRXXUH.js → chunk-WEGXPP5E.js} +1 -1
  160. package/chunks/{chunk-V6R3IEHF.js → chunk-XJS54K4A.js} +2 -2
  161. package/chunks/{chunk-NDJ3436G.js → chunk-XNXWEGKB.js} +3 -3
  162. package/chunks/{chunk-UFWRXRQ5.js → chunk-XYX474JQ.js} +1312 -290
  163. package/chunks/{chunk-UY2JOZK7.js → chunk-ZEADBZLO.js} +3 -3
  164. package/chunks/{chunk-SNJOBGQV.js → chunk-ZJG323IA.js} +4 -3
  165. package/chunks/{chunk-CZIF7I53.js → chunk-ZKAZP2ZG.js} +2 -2
  166. package/chunks/{chunk-DV3KOUUU.js → chunk-ZLTEQYNC.js} +2 -2
  167. package/chunks/{chunk-RLR7K4JJ.js → chunk-ZWKGZB2K.js} +3 -3
  168. package/chunks/{chunk-EJ2GPZDU.js → chunk-ZXDM7DYV.js} +1049 -383
  169. package/chunks/config-utils-7M6PCTLT.js +113 -0
  170. package/chunks/contextCommand-G4QG3TW6.js +108 -0
  171. package/chunks/{core-runtime-SZFD2YQA.js → core-runtime-PKNQ63VL.js} +53 -52
  172. package/chunks/{create-sub-session-OXESCUS7.js → create-sub-session-PLGPY6TV.js} +53 -52
  173. package/chunks/{create-sub-session-5ZLCAS2P.js → create-sub-session-RVHSWVAP.js} +3 -3
  174. package/chunks/{cron-create-P4CPPO25.js → cron-create-IJGVR5R2.js} +4 -4
  175. package/chunks/{cron-delete-FPD75GL4.js → cron-delete-4N5BI6GL.js} +4 -4
  176. package/chunks/{cron-list-QPML4MWL.js → cron-list-2CATIPUX.js} +4 -4
  177. package/chunks/{daemon-HY4AVTUM.js → daemon-NAYK4XXU.js} +34 -12
  178. package/chunks/{daemon-git-worktree-guard-EAVTZ6CE.js → daemon-git-worktree-guard-LDBJXH2U.js} +331 -86
  179. package/chunks/daemon-status-provider-F5FEHVVG.js +118 -0
  180. package/chunks/daemon-trust-policy-C6YTU5CQ.js +114 -0
  181. package/chunks/{daemon-trust-policy-monitor-ITF54474.js → daemon-trust-policy-monitor-IGEJPHQ4.js} +59 -58
  182. package/chunks/{deferred-core-runtime-WQ4NQA3N.js → deferred-core-runtime-GHT3GDOR.js} +53 -52
  183. package/chunks/{display-image-HOBBUJS5.js → display-image-DR55LL6M.js} +5 -5
  184. package/chunks/dist-4Q7NTUNB.js +2512 -0
  185. package/chunks/{dist-RW4QZD3K.js → dist-6H6RZ5H6.js} +2 -2
  186. package/chunks/{dist-ZUWCGMJ4.js → dist-7CKN54NL.js} +1 -1
  187. package/chunks/{dist-ZQJEKFZH.js → dist-DJBNNPLN.js} +1 -1
  188. package/chunks/{dist-5BX3J3AL.js → dist-FVJZSIO4.js} +28 -7
  189. package/chunks/{dist-OB6D7E7T.js → dist-SATKXKUR.js} +1 -1
  190. package/chunks/{dist-MEANA2OS.js → dist-TJUDJTCB.js} +1 -1
  191. package/chunks/{dist-4LRFQF7R.js → dist-UQUFZDIY.js} +1 -1
  192. package/chunks/{dist-7HGG7XLA.js → dist-ZBVOXSKF.js} +1 -1
  193. package/chunks/earlyInputCapture-HOSJTLWP.js +109 -0
  194. package/chunks/{edit-4MZYBPF5.js → edit-KSPVUEAS.js} +42 -42
  195. package/chunks/{en-X66KZS7T.js → en-6MDBWMTG.js} +1 -0
  196. package/chunks/{enter-worktree-WNR4JUPU.js → enter-worktree-UOZ6ZTP7.js} +7 -7
  197. package/chunks/{enterPlanMode-2EL6YAM5.js → enterPlanMode-DZTABSKN.js} +41 -41
  198. package/chunks/{environment-4QYNT2L3.js → environment-JXOSW25V.js} +57 -54
  199. package/chunks/{errors-N66MMOYD.js → errors-IOXFDE4J.js} +55 -54
  200. package/chunks/{exit-worktree-BUHUM6YC.js → exit-worktree-G2QATUCV.js} +7 -7
  201. package/chunks/{exitPlanMode-F73VQJBO.js → exitPlanMode-PZG4FXRB.js} +41 -41
  202. package/chunks/{fast-path-3L4YK6SO.js → fast-path-EBS7NAVL.js} +2 -2
  203. package/chunks/{gemini-4PINQJWX.js → gemini-JELEKOVS.js} +107 -103
  204. package/chunks/{geminiContentGenerator-7T7IU2V5.js → geminiContentGenerator-I2CKP7XI.js} +8 -8
  205. package/chunks/{glob-TWUYSRRG.js → glob-TDVEVPQZ.js} +41 -41
  206. package/chunks/{goal-tools-FTDQHRRX.js → goal-tools-CNVXMSZD.js} +70 -27
  207. package/chunks/{grep-QUQ3J6SR.js → grep-3NLSS32D.js} +6 -6
  208. package/chunks/handleAutoUpdate-AWAGHKOX.js +111 -0
  209. package/chunks/{i18n-Q6K7AX7Y.js → i18n-CYA25C5F.js} +54 -53
  210. package/chunks/{image-gen-RYOBEDNB.js → image-gen-63NN2H5N.js} +9 -9
  211. package/chunks/initializer-JD2FLNLO.js +115 -0
  212. package/chunks/installationInfo-N3DCWVWR.js +109 -0
  213. package/chunks/{keychain-token-storage-LQTBIXSX.js → keychain-token-storage-3MGFRYGM.js} +2 -2
  214. package/chunks/list-XDQAUET5.js +118 -0
  215. package/chunks/{list-agents-522ILPAR.js → list-agents-EXRSHIDJ.js} +2 -2
  216. package/chunks/loadedSettingsAdapter-IK7H5JRK.js +112 -0
  217. package/chunks/{loggingContentGenerator-RTDUJF6Y.js → loggingContentGenerator-CZWUAHAI.js} +20 -20
  218. package/chunks/{loop-wakeup-VSA4TBIC.js → loop-wakeup-XBPB2BRO.js} +5 -5
  219. package/chunks/{ls-FUCLEBTL.js → ls-WFONAND2.js} +4 -4
  220. package/chunks/{lsp-FYP6TW4R.js → lsp-DUKPDUXN.js} +2 -2
  221. package/chunks/{managed-npm-update-NUDVKV7F.js → managed-npm-update-54W23SP5.js} +54 -53
  222. package/chunks/mcp-2E7ZLMEE.js +112 -0
  223. package/chunks/{monitor-AU2SG5OL.js → monitor-A4J5QRGJ.js} +41 -41
  224. package/chunks/nonInteractiveCli-ZNDXB62Y.js +185 -0
  225. package/chunks/{notebook-edit-TGU7XHIO.js → notebook-edit-4ANFZON5.js} +42 -42
  226. package/chunks/{openaiContentGenerator-QPFWSUPT.js → openaiContentGenerator-JCCJJQZC.js} +24 -24
  227. package/chunks/pidfile-DHV2Y7UD.js +113 -0
  228. package/chunks/{processUtils-ZSHN6VGJ.js → processUtils-JJAR56SO.js} +2 -2
  229. package/chunks/prompt-terminal-ledger-LDZ6QVYA.js +107 -0
  230. package/chunks/{qwenContentGenerator-MEXKZX5O.js → qwenContentGenerator-5JM44ZSA.js} +46 -46
  231. package/chunks/{qwenOAuth2-QHHUP4KQ.js → qwenOAuth2-JIYAWXTW.js} +8 -8
  232. package/chunks/{read-file-T7ESVJAQ.js → read-file-N3E5DY7N.js} +12 -12
  233. package/chunks/{read-mcp-resource-5QGBDZ43.js → read-mcp-resource-7A7NFSFL.js} +2 -2
  234. package/chunks/read-package-up-6T6ICKR7.js +13 -0
  235. package/chunks/{record-artifact-K6BYYWXY.js → record-artifact-CPJ4IJSD.js} +4 -4
  236. package/chunks/report-findings-VFM5DENC.js +33 -0
  237. package/chunks/{request-shutdown-EUXDG4IH.js → request-shutdown-AXVOFN5C.js} +7 -7
  238. package/chunks/{resumeHistoryUtils-JFEAZEWW.js → resumeHistoryUtils-YQRITQAG.js} +60 -59
  239. package/chunks/{ripGrep-KOP6AHIX.js → ripGrep-NEIHKBKB.js} +17 -17
  240. package/chunks/{run-qwen-serve-IAVPTDB7.js → run-qwen-serve-IWGPZADI.js} +577 -67
  241. package/chunks/{runtime-ZICTJKT5.js → runtime-I76HPFUE.js} +64 -63
  242. package/chunks/{scheduler-YNVAANNX.js → scheduler-M6YL4K4I.js} +55 -54
  243. package/chunks/{sdk-exporters-http-GCVM7E4X.js → sdk-exporters-http-XXSKBD2C.js} +2 -2
  244. package/chunks/{sdk-impl-E3KA6NMY.js → sdk-impl-VPNBLV7I.js} +4 -4
  245. package/chunks/{send-message-EJUCEIKN.js → send-message-A2GXDX3B.js} +7 -7
  246. package/chunks/{serve-NF25WYMU.js → serve-XY5S63GN.js} +59 -58
  247. package/chunks/{server-7LKYWHCE.js → server-TWXRRREO.js} +605 -334
  248. package/chunks/{session-5FBBDYPI.js → session-IT5ZXU7A.js} +104 -99
  249. package/chunks/{settings-F7IXLQQW.js → settings-IX5HOOCG.js} +58 -57
  250. package/chunks/{shell-IJYC4BVX.js → shell-LZ55AAJB.js} +41 -41
  251. package/chunks/{skill-RTZU743G.js → skill-WSZ53D2R.js} +107 -23
  252. package/chunks/{skill-settings-ZOHS4J2E.js → skill-settings-5U7FTJIK.js} +58 -57
  253. package/chunks/{spawnChannel-JLKWUMTV.js → spawnChannel-TMC6VXGN.js} +55 -54
  254. package/chunks/{standalone-update-W44DUURE.js → standalone-update-CUYGWTR4.js} +55 -54
  255. package/chunks/{startInteractiveUI-7HPDSR7W.js → startInteractiveUI-O6BI2OSA.js} +219 -170
  256. package/chunks/{syntheticOutput-3ITPRJOB.js → syntheticOutput-5AJ444QT.js} +3 -3
  257. package/chunks/{task-create-USIZE733.js → task-create-CDJSOEQD.js} +11 -11
  258. package/chunks/{task-list-AWAJUPIP.js → task-list-BELMPA75.js} +5 -5
  259. package/chunks/{task-stop-I2CQSMDX.js → task-stop-U3S3KZG2.js} +2 -2
  260. package/chunks/{task-update-TFF2KJGL.js → task-update-77VCFDDZ.js} +11 -11
  261. package/chunks/{team-create-IU2A6HD3.js → team-create-UF4TMQEH.js} +41 -41
  262. package/chunks/{team-delete-E4C4AMPF.js → team-delete-YWFXX77L.js} +5 -5
  263. package/chunks/{team-plan-approval-BWI43D37.js → team-plan-approval-U57NSR6C.js} +41 -41
  264. package/chunks/{terminal-image-renderer-GQAMHJF2.js → terminal-image-renderer-DRL3BROJ.js} +55 -54
  265. package/chunks/theme-manager-HHJPUDRN.js +104 -0
  266. package/chunks/{todoWrite-ZUS3HGEF.js → todoWrite-435EO2CS.js} +4 -4
  267. package/chunks/{tool-search-TQNHT22X.js → tool-search-SV35UV72.js} +17 -17
  268. package/chunks/{total-session-admission-JMM73HNK.js → total-session-admission-TQI7TCTL.js} +57 -56
  269. package/chunks/{trustedFolders-BKQ2UXIB.js → trustedFolders-YKK67IP3.js} +54 -53
  270. package/chunks/{update-relaunch-WI7IWWCM.js → update-relaunch-DX7LVA4P.js} +5 -5
  271. package/chunks/{updateCheck-K6WUHPPT.js → updateCheck-6JRTKTUF.js} +58 -57
  272. package/chunks/useAutoAcceptIndicator-MYXYSKSL.js +122 -0
  273. package/chunks/{validateNonInterActiveAuth-RXCZM7MM.js → validateNonInterActiveAuth-B26O4YJP.js} +100 -95
  274. package/chunks/{version-IRAYALVC.js → version-K5D7VJ4B.js} +2 -2
  275. package/chunks/{web-fetch-FUG5KGKQ.js → web-fetch-VFHZLLNZ.js} +16 -16
  276. package/chunks/{web-search-SO3LHSHP.js → web-search-AQE5A4J5.js} +9 -9
  277. package/chunks/{workflow-XJRA3GRI.js → workflow-XL6AEUZ7.js} +150 -52
  278. package/chunks/workspace-providers-status-H6TG34YV.js +116 -0
  279. package/chunks/{workspace-registration-store-LCB4GHNP.js → workspace-registration-store-I4U3V5LL.js} +1 -1
  280. package/chunks/{workspace-registry-QWPFWGEF.js → workspace-registry-2PWNIYNI.js} +57 -56
  281. package/chunks/{workspace-service-MPGLZJF6.js → workspace-service-4FGTUJLA.js} +65 -64
  282. package/chunks/workspace-skills-status-7VOLUDT6.js +115 -0
  283. package/chunks/{workspace-trust-reconciler-4QDDGBQZ.js → workspace-trust-reconciler-GJ466KCE.js} +65 -64
  284. package/chunks/write-file-PWOYCT2K.js +90 -0
  285. package/chunks/{zh-TW-FZ3ETVR2.js → zh-TW-MV4FWFB6.js} +1 -0
  286. package/chunks/{zh-K3OJZ5LI.js → zh-X3WGU6SI.js} +1 -0
  287. package/chunks/{zoom-image-TCBO2YL5.js → zoom-image-NYJPC3NI.js} +12 -12
  288. package/cli.js +13 -13
  289. package/locales/ca.js +1 -0
  290. package/locales/en.js +1 -0
  291. package/locales/zh-TW.js +1 -0
  292. package/locales/zh.js +1 -0
  293. package/package.json +3 -3
  294. package/web-shell/assets/{abnfDiagram-VCTEODGH-hQsSuKY7.js → abnfDiagram-VCTEODGH-yq7z7Anb.js} +1 -1
  295. package/web-shell/assets/{arc-CpKLq3XD.js → arc-CbJO0xnT.js} +1 -1
  296. package/web-shell/assets/{architectureDiagram-5GKGNRK7-Bplk1J-m.js → architectureDiagram-5GKGNRK7-CRh89421.js} +1 -1
  297. package/web-shell/assets/{blockDiagram-NRAW4CY4-B-cca4ej.js → blockDiagram-NRAW4CY4-C75KAhKv.js} +1 -1
  298. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BZ8cn00E.js → c4Diagram-UCG6FXSJ-BzlMveFB.js} +1 -1
  299. package/web-shell/assets/channel-B3sGR79J.js +1 -0
  300. package/web-shell/assets/{chunk-2Q5K7J3B-DEQ2uYU0.js → chunk-2Q5K7J3B-DA8QDX3a.js} +1 -1
  301. package/web-shell/assets/{chunk-5VM5RSS4-DqH8Lz-4.js → chunk-5VM5RSS4-Bgu7gQ7Y.js} +1 -1
  302. package/web-shell/assets/{chunk-F27PBJKO-Dru7qMTB.js → chunk-F27PBJKO-BOew7pIK.js} +1 -1
  303. package/web-shell/assets/{chunk-G27WJ6UU-DN8KcdzT.js → chunk-G27WJ6UU-DHx1I-hO.js} +1 -1
  304. package/web-shell/assets/{chunk-JWPE2WC7-DMS-EquZ.js → chunk-JWPE2WC7-SarFW0WU.js} +1 -1
  305. package/web-shell/assets/{chunk-LCL6LL3I-ubbLaEwq.js → chunk-LCL6LL3I-BLzP083Z.js} +1 -1
  306. package/web-shell/assets/{chunk-POPQ4Y6H-DdIZqnYy.js → chunk-POPQ4Y6H-Bmkv_iKm.js} +1 -1
  307. package/web-shell/assets/{chunk-SVP7TREG-DkgYFSnb.js → chunk-SVP7TREG-MPx9r1N2.js} +1 -1
  308. package/web-shell/assets/{chunk-XXDRQBXY-CaesHiYG.js → chunk-XXDRQBXY-Ck-09rKG.js} +1 -1
  309. package/web-shell/assets/classDiagram-DTDB5LWJ-sTGo0K3v.js +1 -0
  310. package/web-shell/assets/classDiagram-v2-JRS7N3AN-sTGo0K3v.js +1 -0
  311. package/web-shell/assets/{cose-bilkent-JH36ORCC-bqnC4Oq-.js → cose-bilkent-JH36ORCC-DWm6lfOG.js} +1 -1
  312. package/web-shell/assets/{cynefin-OW5HDTMX-mDRBhRzB.js → cynefin-OW5HDTMX-DcBUyr5R.js} +1 -1
  313. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-B4Tod_Ik.js → cynefinDiagram-5FMLGOSQ-Df8qmd_p.js} +1 -1
  314. package/web-shell/assets/{dagre-3AP2YEHR-DU9f-iCw.js → dagre-3AP2YEHR-DDmGspD7.js} +1 -1
  315. package/web-shell/assets/{diagram-S7CK7UJ4-BsYVeB7c.js → diagram-S7CK7UJ4-BK_qFvbi.js} +1 -1
  316. package/web-shell/assets/{diagram-UQ7AKVKN-frM5Sn9C.js → diagram-UQ7AKVKN-Uw3AP_bi.js} +1 -1
  317. package/web-shell/assets/{diagram-VSXAHHWV-C1Z7uZdv.js → diagram-VSXAHHWV-CJOQKxY7.js} +1 -1
  318. package/web-shell/assets/{diagram-VX7I27RA-CIY4x0M9.js → diagram-VX7I27RA-DhdvZna5.js} +1 -1
  319. package/web-shell/assets/{diagram-Z3DM3KII-hTl4GIbg.js → diagram-Z3DM3KII-edQU0nlP.js} +1 -1
  320. package/web-shell/assets/{ebnfDiagram-PWID7BFC-4loIGTHZ.js → ebnfDiagram-PWID7BFC-4kugBEsO.js} +1 -1
  321. package/web-shell/assets/{erDiagram-SSCWMZ5O-B9Up14ul.js → erDiagram-SSCWMZ5O-BMkFivWO.js} +1 -1
  322. package/web-shell/assets/{flowDiagram-A5DVABFB-CIPfQBl9.js → flowDiagram-A5DVABFB-BM1ea8g-.js} +1 -1
  323. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-DaZk3lrl.js → ganttDiagram-EL5Y4UJY-CXj_cKRf.js} +1 -1
  324. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-D-knAHoQ.js → gitGraphDiagram-WWUBYQGX-D0nEqwqu.js} +1 -1
  325. package/web-shell/assets/{index-Di8dYJlQ.js → index-B6JN54Pd.js} +1 -1
  326. package/web-shell/assets/{index-RNKRtdDf.css → index-C-XlQn24.css} +1 -1
  327. package/web-shell/assets/{index-pkWucfFU.js → index-DLjXM0dn.js} +367 -367
  328. package/web-shell/assets/{infoDiagram-RXCK75RN-7AJndIyq.js → infoDiagram-RXCK75RN-DF7aGGbQ.js} +1 -1
  329. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DjIU3IKv.js → ishikawaDiagram-5VMMS53U-CZYNX1lL.js} +1 -1
  330. package/web-shell/assets/{journeyDiagram-EYS64GPL-D3cf3462.js → journeyDiagram-EYS64GPL-CvrqMUz1.js} +1 -1
  331. package/web-shell/assets/{kanban-definition-3QL26DDD-CmuPjlRe.js → kanban-definition-3QL26DDD-BZNJQZBj.js} +1 -1
  332. package/web-shell/assets/{layout-C2Ci1XAx.js → layout-Bf83x7D6.js} +1 -1
  333. package/web-shell/assets/{linear-CqOKGHue.js → linear-Bkc3ES2f.js} +1 -1
  334. package/web-shell/assets/{mermaid.core-Bnt57s5_.js → mermaid.core-C6xuovwz.js} +6 -6
  335. package/web-shell/assets/{mindmap-definition-FBJOCRG2-BSSJVfj3.js → mindmap-definition-FBJOCRG2-DzH6gVRg.js} +1 -1
  336. package/web-shell/assets/{pegDiagram-XKGWAZYB-DNLHwge4.js → pegDiagram-XKGWAZYB-DCvLh2fa.js} +1 -1
  337. package/web-shell/assets/{pieDiagram-E7YTZNPT-CYRSio_9.js → pieDiagram-E7YTZNPT-BtjVlx_6.js} +1 -1
  338. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-CzSwKETq.js → quadrantDiagram-AXDQQJYC-IbroqxFe.js} +1 -1
  339. package/web-shell/assets/{railroadDiagram-O6MQD6OU-Dzbg_Jis.js → railroadDiagram-O6MQD6OU-BvMykiWW.js} +1 -1
  340. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CY3Apuzl.js → requirementDiagram-EFPCY7ZU-D-HHMyrh.js} +1 -1
  341. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-432Hiv50.js → sankeyDiagram-P5KCCOFB-C0XXhB6d.js} +1 -1
  342. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-CucAf-fk.js → sequenceDiagram-WJ2MYXX4-DseAXj5d.js} +1 -1
  343. package/web-shell/assets/{sizeCapture-X5ZJPWSS-RBc9fiXv.js → sizeCapture-X5ZJPWSS-Cek2EweK.js} +1 -1
  344. package/web-shell/assets/{stateDiagram-HBIQ2CUA-BwsgjK6k.js → stateDiagram-HBIQ2CUA-yLv8wafW.js} +1 -1
  345. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DeThXnol.js +1 -0
  346. package/web-shell/assets/{swimlanes-XN3QIQJK-DMMYIqPz.js → swimlanes-XN3QIQJK-Cwz-opvE.js} +1 -1
  347. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-GW0R1ZSv.js +8 -0
  348. package/web-shell/assets/{timeline-definition-24CTP7MA-BbmmEMJb.js → timeline-definition-24CTP7MA-BJuFD7OG.js} +1 -1
  349. package/web-shell/assets/{vennDiagram-4TSXK5OY-DlfQjNzM.js → vennDiagram-4TSXK5OY-CNAavdoV.js} +1 -1
  350. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-86EXFbP6.js → wardleyDiagram-VM6X3IG4-DaIjAidq.js} +1 -1
  351. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-794nZBSV.js → xychartDiagram-S5SC5T6Z-DkcQXjTy.js} +1 -1
  352. package/web-shell/index.html +2 -2
  353. package/chunks/MaxSizedBox-RQWAKXYC.js +0 -111
  354. package/chunks/agent-headless-YBSOXERA.js +0 -87
  355. package/chunks/channel-settings-store-DD6W3EJQ.js +0 -116
  356. package/chunks/config-utils-WXWWMH2D.js +0 -112
  357. package/chunks/contextCommand-UKPGPBW5.js +0 -107
  358. package/chunks/daemon-status-provider-D2HNWRDK.js +0 -116
  359. package/chunks/daemon-trust-policy-F4JM5CKX.js +0 -113
  360. package/chunks/earlyInputCapture-54M7AWAF.js +0 -108
  361. package/chunks/handleAutoUpdate-T36AMYVP.js +0 -110
  362. package/chunks/initializer-6USYPDX7.js +0 -114
  363. package/chunks/installationInfo-46TRIE5M.js +0 -108
  364. package/chunks/list-BCX6JAYS.js +0 -117
  365. package/chunks/loadedSettingsAdapter-7OBB7B6J.js +0 -111
  366. package/chunks/mcp-FCS6V74Y.js +0 -111
  367. package/chunks/nonInteractiveCli-CQUUSJ3N.js +0 -180
  368. package/chunks/pidfile-SIEQM3X5.js +0 -112
  369. package/chunks/prompt-terminal-ledger-YIAGDBHG.js +0 -106
  370. package/chunks/theme-manager-73W4SEDX.js +0 -103
  371. package/chunks/useAutoAcceptIndicator-SMCU7IYQ.js +0 -121
  372. package/chunks/workspace-providers-status-ZYXLTCJ5.js +0 -115
  373. package/chunks/workspace-skills-status-ZVFYCT5C.js +0 -114
  374. package/chunks/write-file-2KVXXVWB.js +0 -90
  375. package/web-shell/assets/channel-DggMZLoL.js +0 -1
  376. package/web-shell/assets/classDiagram-DTDB5LWJ-DPMQMV0q.js +0 -1
  377. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DPMQMV0q.js +0 -1
  378. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-C_HLER48.js +0 -1
  379. 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-3N7EFOOM.js";
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-ENZMDVCM.js";
94
- import "./chunk-SNJOBGQV.js";
93
+ } from "./chunk-OQ6LTSX3.js";
94
+ import "./chunk-ZJG323IA.js";
95
95
  import {
96
96
  LOAD_REPLAY_META_KEY
97
- } from "./chunk-LURJYO2T.js";
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 "./chunk-D2IGZJA7.js";
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-IFWUT4GY.js";
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-NFDTDV37.js";
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 `http://127.0.0.1:${port}`;
3294
+ return `${scheme}://127.0.0.1:${port}`;
3289
3295
  }
3290
- return `http://${formatHostForUrl(host)}:${port}`;
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-NI6JEY4Q.js"),
3359
- import("./pidfile-SIEQM3X5.js"),
3360
- import("./runtime-ZICTJKT5.js"),
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-GIXIF4VT.js"),
3363
- import("./channel-worker-manager-ZBSYXJEB.js")
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-SZFD2YQA.js");
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-F7IXLQQW.js"),
3505
- import("./environment-4QYNT2L3.js"),
3506
- import("./loadedSettingsAdapter-7OBB7B6J.js"),
3507
- import("./trustedFolders-BKQ2UXIB.js")
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-ZICTJKT5.js"),
3521
- import("./config-utils-WXWWMH2D.js")
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-7LKYWHCE.js"),
3548
- import("./bridge-MBOVCHXN.js"),
3549
- import("./spawnChannel-JLKWUMTV.js"),
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-MPGLZJF6.js"),
3996
+ import("./workspace-service-4FGTUJLA.js"),
3552
3997
  import("./types-WYCFCEHR.js"),
3553
- import("./daemon-status-provider-D2HNWRDK.js"),
3554
- import("./workspace-providers-status-ZYXLTCJ5.js"),
3555
- import("./workspace-skills-status-ZVFYCT5C.js"),
3556
- import("./total-session-admission-JMM73HNK.js"),
3557
- import("./workspace-registry-QWPFWGEF.js"),
3558
- import("./prompt-terminal-ledger-YIAGDBHG.js")
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-LCB4GHNP.js");
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-EAVTZ6CE.js");
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-F4JM5CKX.js")
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-ZOHS4J2E.js");
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-ZOHS4J2E.js");
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-OXESCUS7.js");
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-XGGL6PLF.js"),
6996
- import("./channel-settings-store-DD6W3EJQ.js")
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-4QDDGBQZ.js"),
7201
- import("./daemon-trust-policy-monitor-ITF54474.js")
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-F4JM5CKX.js") : void 0;
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: formatChannelWorkerDaemonUrl(
7977
- opts.hostname,
7978
- actualPort
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
  /**