@qwen-code/qwen-code 0.19.3 → 0.19.4-nightly.20260702.46814e4f1

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 (308) hide show
  1. package/bundled/loop/SKILL.md +22 -3
  2. package/bundled/loop/SKILL.test.ts +20 -0
  3. package/bundled/loop/autonomous-loop.test.ts +59 -0
  4. package/bundled/loop/autonomous-loop.ts +102 -0
  5. package/bundled/loop/loop-task-file.test.ts +1064 -0
  6. package/bundled/loop/loop-task-file.ts +404 -0
  7. package/bundled/loop/loop-tick-resolver.test.ts +906 -0
  8. package/bundled/loop/loop-tick-resolver.ts +416 -0
  9. package/bundled/qc-helper/SKILL.md +12 -5
  10. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  11. package/bundled/qc-helper/docs/configuration/settings.md +62 -32
  12. package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
  13. package/bundled/qc-helper/docs/features/auto-mode.md +40 -0
  14. package/bundled/qc-helper/docs/features/channels/overview.md +81 -18
  15. package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
  16. package/bundled/qc-helper/docs/features/code-review.md +17 -61
  17. package/bundled/qc-helper/docs/features/commands.md +42 -40
  18. package/bundled/qc-helper/docs/features/headless.md +19 -18
  19. package/bundled/qc-helper/docs/features/hooks.md +6 -1
  20. package/bundled/qc-helper/docs/features/mcp.md +3 -1
  21. package/bundled/qc-helper/docs/features/memory.md +1 -1
  22. package/bundled/qc-helper/docs/features/scheduled-tasks.md +10 -0
  23. package/bundled/qc-helper/docs/features/status-line.md +3 -3
  24. package/bundled/qc-helper/docs/ide-integration/ide-integration.md +4 -4
  25. package/bundled/qc-helper/docs/qwen-serve.md +53 -0
  26. package/bundled/qc-helper/docs/support/troubleshooting.md +11 -0
  27. package/bundled/review/DESIGN.md +21 -26
  28. package/bundled/review/SKILL.md +45 -129
  29. package/chunks/MaxSizedBox-GHGRQ2OS.js +69 -0
  30. package/chunks/{StandaloneSessionPicker-Z52JTYST.js → StandaloneSessionPicker-G7YTTM27.js} +49 -42
  31. package/chunks/{acpAgent-7RZUOWOM.js → acpAgent-SDOILBSU.js} +1325 -365
  32. package/chunks/{agent-4FG7WTHJ.js → agent-NTSXGV4L.js} +31 -25
  33. package/chunks/agent-headless-WYURMSAB.js +62 -0
  34. package/chunks/{anthropicContentGenerator-PFITVL7Y.js → anthropicContentGenerator-WL3LJOUB.js} +110 -31
  35. package/chunks/{artifact-tool-D2X7G3C3.js → artifact-tool-W76WC2JX.js} +3 -3
  36. package/chunks/{askUserQuestion-UGETICJQ.js → askUserQuestion-J3P6TH3V.js} +2 -2
  37. package/chunks/bridge-AMOL4W4P.js +73 -0
  38. package/chunks/{ca-IUFWESZL.js → ca-HCMB2I54.js} +10 -9
  39. package/chunks/channel-worker-supervisor-C3IB63V7.js +659 -0
  40. package/chunks/{chunk-STUWFKGD.js → chunk-26JIREA5.js} +466 -543
  41. package/chunks/{chunk-SLNKLLEO.js → chunk-2MRV62AU.js} +37 -8
  42. package/chunks/{chunk-ODLIHNOY.js → chunk-2U4HUMOL.js} +1 -1
  43. package/chunks/{chunk-CKQA6AWF.js → chunk-4D73HUOP.js} +1 -1
  44. package/chunks/{chunk-M2U5NM24.js → chunk-54YZOP7P.js} +309 -72
  45. package/chunks/{chunk-J7FA27RO.js → chunk-5LKL3PAU.js} +3 -3
  46. package/chunks/chunk-5P5XGNYH.js +93 -0
  47. package/chunks/{chunk-UFLGERMB.js → chunk-6JE32BRB.js} +178 -124
  48. package/chunks/{chunk-FKAVULLM.js → chunk-75AVTQJ2.js} +74 -10
  49. package/chunks/{chunk-I2LYBGNI.js → chunk-7IOMIYOE.js} +1 -1
  50. package/chunks/{chunk-4LUZAKMK.js → chunk-7KXAGQJ2.js} +1 -1
  51. package/chunks/{chunk-BXSHL2SF.js → chunk-7LUOQJ3D.js} +1 -1
  52. package/chunks/{chunk-YAINVQ3Q.js → chunk-A5OPLHFM.js} +18693 -17055
  53. package/chunks/chunk-AHNXYU4O.js +24 -0
  54. package/chunks/{chunk-UX4SGCGN.js → chunk-AVQDCKNF.js} +96 -22
  55. package/chunks/{chunk-HYCC3XM3.js → chunk-B236XPGF.js} +1 -1
  56. package/chunks/chunk-B6SZLQAZ.js +3523 -0
  57. package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
  58. package/chunks/chunk-BPFJQGY7.js +193 -0
  59. package/chunks/{chunk-SKQZZVAV.js → chunk-BZHLWC6T.js} +2 -2
  60. package/chunks/{chunk-U3KSMM7G.js → chunk-D5KISTLW.js} +339 -383
  61. package/chunks/{chunk-GT2FGICD.js → chunk-DE7YXUR7.js} +1 -1
  62. package/chunks/{chunk-BUUQ5HPX.js → chunk-DG573EOO.js} +1 -1
  63. package/chunks/{chunk-VVLOGDB6.js → chunk-DX3TKXNT.js} +2 -2
  64. package/chunks/chunk-E5A7LHNN.js +51 -0
  65. package/chunks/{chunk-3PJXIDKI.js → chunk-E6US47KI.js} +3 -27
  66. package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
  67. package/chunks/{chunk-PDE7CSDS.js → chunk-FXKI7OW6.js} +2 -2
  68. package/chunks/{chunk-F3ZYSEY6.js → chunk-FY4TT4L4.js} +3 -3
  69. package/chunks/{chunk-QLDPRILK.js → chunk-G7OQ3RFJ.js} +3 -3
  70. package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
  71. package/chunks/{chunk-KMGMKW5Q.js → chunk-GLPV75ES.js} +9 -3
  72. package/chunks/{chunk-LD2XBG6Z.js → chunk-GO6LNQXT.js} +1 -39
  73. package/chunks/{chunk-CNLEDYE3.js → chunk-H6TNLOLM.js} +5 -5
  74. package/chunks/{chunk-JVHEVCAU.js → chunk-HLW4EGKR.js} +31 -6
  75. package/chunks/{chunk-I4H7PRWQ.js → chunk-HTWHAN44.js} +1 -1
  76. package/chunks/{chunk-QE6KJYLT.js → chunk-IPYE5BIS.js} +123 -25
  77. package/chunks/{chunk-EJYJYJZ2.js → chunk-IRJWHZWU.js} +3 -70
  78. package/chunks/{chunk-EDMZZFDU.js → chunk-J3YPTTNL.js} +930 -798
  79. package/chunks/{chunk-GGBIN5K7.js → chunk-JGAJMIJZ.js} +1 -1
  80. package/chunks/{chunk-N4EJFBN5.js → chunk-JVLP5US5.js} +427 -263
  81. package/chunks/{chunk-R5OP2ATH.js → chunk-JZG7VB6C.js} +11 -11
  82. package/chunks/{chunk-QI7GOGJR.js → chunk-KKQWC6WS.js} +1 -1
  83. package/chunks/{chunk-ADCIHOQZ.js → chunk-KX5QZRW2.js} +142 -30
  84. package/chunks/{chunk-SBBN4BWR.js → chunk-L7OJ3ZO3.js} +1 -1
  85. package/chunks/{chunk-NDOC6M5S.js → chunk-L7QPM2YD.js} +2 -2
  86. package/chunks/{chunk-BVSVIN45.js → chunk-LKWAVAB5.js} +3 -3
  87. package/chunks/{chunk-T4T2FNV4.js → chunk-LOW52WYZ.js} +2 -2
  88. package/chunks/{chunk-4QK3O43S.js → chunk-LU7BIVWC.js} +4 -4
  89. package/chunks/{chunk-ZP6UKOPB.js → chunk-LWGLBVWA.js} +1 -1
  90. package/chunks/{chunk-L7OKCI7T.js → chunk-M7BLWURA.js} +15 -1
  91. package/chunks/{chunk-PR32FRT6.js → chunk-MIM62IXS.js} +3 -3
  92. package/chunks/{chunk-RD6YJJJ6.js → chunk-MOUXUCXQ.js} +1 -1
  93. package/chunks/{chunk-VBZ452JT.js → chunk-MSNGFH6L.js} +494 -114
  94. package/chunks/{chunk-BX5YO7UW.js → chunk-MTNTVOJR.js} +542 -370
  95. package/chunks/chunk-MX2YXRER.js +44 -0
  96. package/chunks/chunk-NIOPRZNN.js +27 -0
  97. package/chunks/{chunk-SMYQZVZ3.js → chunk-NOGSPTLJ.js} +1 -1
  98. package/chunks/{chunk-DDMOU62Q.js → chunk-NPQWQYU6.js} +1 -1
  99. package/chunks/{chunk-MNF6S5PR.js → chunk-P5THQV6A.js} +4 -4
  100. package/chunks/{chunk-6V4NZFUS.js → chunk-PCYOT4PK.js} +5 -5
  101. package/chunks/{chunk-CF6BB3LT.js → chunk-PPFWEV7G.js} +10 -1
  102. package/chunks/{chunk-FXKVLFFY.js → chunk-PSFDB5FZ.js} +3 -3
  103. package/chunks/{chunk-XJYUPHRC.js → chunk-QOMAHFYI.js} +3 -3
  104. package/chunks/{chunk-J37FGIOA.js → chunk-QXPI7FEC.js} +38 -4
  105. package/chunks/{chunk-RRFZXMYP.js → chunk-QZDBHNMV.js} +691 -164
  106. package/chunks/{chunk-S7AKE7HL.js → chunk-R6RI2HIC.js} +63 -9
  107. package/chunks/{chunk-HZT4UCFB.js → chunk-RB7S52NJ.js} +4 -4
  108. package/chunks/{chunk-J33ZR6OJ.js → chunk-RK22ACPP.js} +16 -16
  109. package/chunks/chunk-RM3PGSGL.js +66 -0
  110. package/chunks/chunk-RNBYOUGV.js +42 -0
  111. package/chunks/chunk-S6RLAIUR.js +23 -0
  112. package/chunks/{chunk-3TV3HUWZ.js → chunk-SCYK2YLI.js} +81 -30
  113. package/chunks/{chunk-HPZTOP4I.js → chunk-SEKRT4SD.js} +133 -23
  114. package/chunks/chunk-SEZC2725.js +36 -0
  115. package/chunks/chunk-SIUQ3YYX.js +78 -0
  116. package/chunks/{chunk-O2VBQ3Y2.js → chunk-SJBIFVD2.js} +2 -2
  117. package/chunks/chunk-SYCJMSIJ.js +82 -0
  118. package/chunks/{chunk-JE5FVRPC.js → chunk-T22H4V4R.js} +48 -23
  119. package/chunks/{chunk-3227DZO4.js → chunk-T42ACHFI.js} +1 -1
  120. package/chunks/{chunk-UO5GVXQE.js → chunk-TENOUWY2.js} +3 -3
  121. package/chunks/{chunk-JOLIREYR.js → chunk-TOAUDIS7.js} +1 -1
  122. package/chunks/{chunk-QNKBEJO2.js → chunk-UA6XBZT7.js} +2776 -1289
  123. package/chunks/{chunk-O75BHFQW.js → chunk-UQTYK5SS.js} +2 -2
  124. package/chunks/{chunk-Y6YMRS3U.js → chunk-UY2TCIZS.js} +17 -3
  125. package/chunks/{chunk-FNJ7BDPH.js → chunk-UY7ZAYTY.js} +10 -7
  126. package/chunks/{chunk-UYT3MWEB.js → chunk-UYHWM24C.js} +30 -2
  127. package/chunks/{chunk-SMXULRAN.js → chunk-VXGPYF7U.js} +1 -1
  128. package/chunks/{chunk-BTLJ2MF5.js → chunk-W7CG5HPC.js} +3 -3
  129. package/chunks/{chunk-JJXWTVSK.js → chunk-XHZKDN7M.js} +34 -1
  130. package/chunks/{chunk-K5XU6E4T.js → chunk-XKSCTXPK.js} +2 -2
  131. package/chunks/chunk-Y4LITCRB.js +367 -0
  132. package/chunks/chunk-YHTNWGRR.js +239 -0
  133. package/chunks/{chunk-BKXBARJZ.js → chunk-YPCPZSZB.js} +1 -1
  134. package/chunks/{chunk-QWFNTRH4.js → chunk-YSM24SCE.js} +1 -1
  135. package/chunks/chunk-YTFBURQD.js +313 -0
  136. package/chunks/{chunk-NL4C3H6C.js → chunk-YXK4GPYO.js} +1 -1
  137. package/chunks/{chunk-RYLJU2DY.js → chunk-ZN5T4BHI.js} +1 -1
  138. package/chunks/{computer-use-JGB36FDW.js → computer-use-MTSVPLPY.js} +34 -28
  139. package/chunks/contextCommand-VGJ3BPTK.js +67 -0
  140. package/chunks/{cron-create-SKEY55RG.js → cron-create-6YTCOX6P.js} +4 -4
  141. package/chunks/{cron-delete-I3NAT32Z.js → cron-delete-E3NIFSUK.js} +4 -4
  142. package/chunks/{cron-list-6XRRL6TH.js → cron-list-Q64MNQNE.js} +4 -4
  143. package/chunks/daemon-EEB2RYOL.js +8453 -0
  144. package/chunks/daemon-status-provider-H5SNMK42.js +71 -0
  145. package/chunks/{de-EOW5PVHF.js → de-PLLFDERI.js} +10 -9
  146. package/chunks/{dist-NHEYYB2B.js → dist-ADMIQGHI.js} +2 -2
  147. package/chunks/{dist-J37VXPLD.js → dist-BCQ7INM7.js} +40 -15
  148. package/chunks/{dist-663NZ6MI.js → dist-KNZFCY5F.js} +116 -11
  149. package/chunks/{dist-LB6OGPVM.js → dist-LHUWC3K6.js} +26 -5
  150. package/chunks/{dist-PQPZ5Q4N.js → dist-WBBZ76JZ.js} +20 -9
  151. package/chunks/{earlyInputCapture-44RISVVJ.js → earlyInputCapture-U4ZIQSQU.js} +32 -26
  152. package/chunks/{edit-NN6GM5DT.js → edit-SYIQ2KBI.js} +41 -38
  153. package/chunks/{en-HPWEJBTR.js → en-M4EBUBNU.js} +32 -10
  154. package/chunks/{enter-worktree-PB3O2C7D.js → enter-worktree-HPPOO244.js} +31 -25
  155. package/chunks/{enterPlanMode-YQFNNSUA.js → enterPlanMode-56YYO52U.js} +41 -25
  156. package/chunks/{errors-LS7XU5DZ.js → errors-EO4SXCFP.js} +33 -27
  157. package/chunks/{exit-worktree-E2FTNSBK.js → exit-worktree-UDM7E6XH.js} +31 -25
  158. package/chunks/{exitPlanMode-GLYK2BUB.js → exitPlanMode-M6P3AWLJ.js} +149 -33
  159. package/chunks/{fast-path-WQ6M7LI7.js → fast-path-42P4QYWI.js} +33 -14
  160. package/chunks/{fast-path-settings-OAGU3X5H.js → fast-path-settings-UQLRFDQP.js} +2 -2
  161. package/chunks/{fr-BN5NKSAC.js → fr-MBMNQSQ6.js} +10 -9
  162. package/chunks/{gemini-2YFLVA2M.js → gemini-NRLXS5J7.js} +84 -70
  163. package/chunks/{geminiContentGenerator-XV6SV6CD.js → geminiContentGenerator-DLJPYYPA.js} +41 -5
  164. package/chunks/{glob-2H6CDDMK.js → glob-JPY3F74Y.js} +31 -25
  165. package/chunks/{grep-VXIUXM3C.js → grep-HW23YES5.js} +31 -25
  166. package/chunks/initializer-HWOZTC4A.js +67 -0
  167. package/chunks/{ja-7DEUB2TS.js → ja-HFV5QCHR.js} +10 -9
  168. package/chunks/{keychain-token-storage-YLMDLKXT.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
  169. package/chunks/list-OZGAGRDG.js +71 -0
  170. package/chunks/loadedSettingsAdapter-RUTZVVIA.js +66 -0
  171. package/chunks/{loop-wakeup-CITGGQHA.js → loop-wakeup-G2EHBRGR.js} +5 -5
  172. package/chunks/{ls-R5WP4BGZ.js → ls-IDHUVSAG.js} +4 -4
  173. package/chunks/{lsp-GSICJMMW.js → lsp-FSRYXGFT.js} +2 -2
  174. package/chunks/{monitor-HKLRS2HQ.js → monitor-QVWEIXU3.js} +33 -26
  175. package/chunks/nonInteractiveCli-RV2WYPML.js +109 -0
  176. package/chunks/{notebook-edit-Y6SKSGTT.js → notebook-edit-B26W3FFH.js} +37 -34
  177. package/chunks/{openaiContentGenerator-J7G2FYJT.js → openaiContentGenerator-6TH7AZGQ.js} +15 -13
  178. package/chunks/pidfile-KW2QQJZI.js +73 -0
  179. package/chunks/{pt-TNZRNLQB.js → pt-2THT3YHA.js} +10 -9
  180. package/chunks/{qwenContentGenerator-5XIEM5GV.js → qwenContentGenerator-5IQAC7RN.js} +33 -27
  181. package/chunks/{qwenOAuth2-AG3PFFLZ.js → qwenOAuth2-LWLA6MQG.js} +5 -4
  182. package/chunks/{read-file-J7D552ZJ.js → read-file-CWFAHOI2.js} +11 -10
  183. package/chunks/{read-mcp-resource-DQQW7H7T.js → read-mcp-resource-PIJF24RO.js} +2 -2
  184. package/chunks/ripGrep-FTZGDKY4.js +60 -0
  185. package/chunks/{ru-NIAUBKCN.js → ru-Z67YJHBG.js} +10 -9
  186. package/chunks/{run-qwen-serve-SGEEVMXD.js → run-qwen-serve-FN2SW5ZI.js} +545 -97
  187. package/chunks/{scheduler-7CQI3S4Q.js → scheduler-BMS23O3I.js} +31 -25
  188. package/chunks/{send-message-EE4TWKVU.js → send-message-33PYFMCT.js} +20 -4
  189. package/chunks/serve-PXFYKL65.js +71 -0
  190. package/chunks/{server-4QMUWXPW.js → server-BRKALJ4F.js} +4132 -1175
  191. package/chunks/{session-NRO7UFOY.js → session-AQMISBP4.js} +205 -64
  192. package/chunks/{settings-SGWRDQSC.js → settings-JCPVUZMB.js} +35 -29
  193. package/chunks/{shell-62ANGIHL.js → shell-POHCRVN2.js} +31 -25
  194. package/chunks/{skill-VWAQAWW6.js → skill-QPEVHS6H.js} +13 -12
  195. package/chunks/spawnChannel-V3QT62TE.js +69 -0
  196. package/chunks/{src-KUV5J5Q2.js → src-IZSP7L6Y.js} +127 -32
  197. package/chunks/{startInteractiveUI-6EYJN3JV.js → startInteractiveUI-63KATISO.js} +16762 -16075
  198. package/chunks/{syntheticOutput-T5YHQ6S2.js → syntheticOutput-YOSWIHDJ.js} +3 -3
  199. package/chunks/{task-create-BLY7RHXX.js → task-create-NHS2NGB3.js} +9 -7
  200. package/chunks/{task-list-3QUYNVYR.js → task-list-5UIB564R.js} +7 -6
  201. package/chunks/{task-stop-U4RATK2V.js → task-stop-HGXZ2VZ3.js} +2 -2
  202. package/chunks/{task-update-U54O7KJX.js → task-update-IYYWUILG.js} +40 -7
  203. package/chunks/{team-create-LPOGCPM7.js → team-create-E5O2F3CA.js} +31 -25
  204. package/chunks/{team-delete-LKBYPASD.js → team-delete-FEKJCU4P.js} +7 -6
  205. package/chunks/team-plan-approval-2TU4YROB.js +202 -0
  206. package/chunks/theme-manager-37KOGPJL.js +64 -0
  207. package/chunks/{todoWrite-OYXKTVYN.js → todoWrite-TKMVZ2HT.js} +4 -4
  208. package/chunks/{tool-search-YPUFJ3ZQ.js → tool-search-4ZTGNSFI.js} +38 -11
  209. package/chunks/{trustedFolders-5B24TMEA.js → trustedFolders-RJ5WXJ6L.js} +32 -26
  210. package/chunks/{validateNonInterActiveAuth-BTDTYOVT.js → validateNonInterActiveAuth-ZWMHZAOK.js} +66 -55
  211. package/chunks/{web-fetch-EEB5LZYU.js → web-fetch-J4PIW36Q.js} +5 -4
  212. package/chunks/{workflow-LAWIW5LI.js → workflow-6PG2PC5M.js} +68 -39
  213. package/chunks/workspace-providers-status-4QIZN2W4.js +68 -0
  214. package/chunks/workspace-service-CYMCOEIO.js +78 -0
  215. package/chunks/{write-file-PCV226DJ.js → write-file-R354LGQF.js} +41 -40
  216. package/chunks/{zh-5EUYXASN.js → zh-SLZNSSZB.js} +32 -10
  217. package/chunks/{zh-TW-TR3XYGE5.js → zh-TW-P53C2SL5.js} +32 -10
  218. package/cli.js +6 -6
  219. package/locales/ca.js +15 -13
  220. package/locales/de.js +15 -13
  221. package/locales/en.js +52 -15
  222. package/locales/fr.js +15 -14
  223. package/locales/ja.js +15 -14
  224. package/locales/pt.js +15 -13
  225. package/locales/ru.js +15 -13
  226. package/locales/zh-TW.js +50 -14
  227. package/locales/zh.js +50 -14
  228. package/node_modules/@qwen-code/audio-capture/package.json +1 -1
  229. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
  230. package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
  231. package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
  232. package/package.json +15 -6
  233. package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
  234. package/postinstall.js +50 -0
  235. package/web-shell/assets/{arc-DA7r8Ueo.js → arc-Bd3048nX.js} +1 -1
  236. package/web-shell/assets/{architectureDiagram-3BPJPVTR-ZDUxPtZ2.js → architectureDiagram-3BPJPVTR-DyzbzABx.js} +1 -1
  237. package/web-shell/assets/{blockDiagram-GPEHLZMM-vrtOf1kJ.js → blockDiagram-GPEHLZMM-CTjxm9Sy.js} +1 -1
  238. package/web-shell/assets/{c4Diagram-AAUBKEIU-BHFjzIi4.js → c4Diagram-AAUBKEIU-DSOFWNU6.js} +1 -1
  239. package/web-shell/assets/channel-oVoup_Ci.js +1 -0
  240. package/web-shell/assets/{chunk-2J33WTMH-mdeQVz59.js → chunk-2J33WTMH-D_PFdjo2.js} +1 -1
  241. package/web-shell/assets/{chunk-4BX2VUAB-BkKMlwBX.js → chunk-4BX2VUAB-52eG6wOT.js} +1 -1
  242. package/web-shell/assets/{chunk-55IACEB6-B7bnXNfu.js → chunk-55IACEB6-CGTZfKkC.js} +1 -1
  243. package/web-shell/assets/{chunk-727SXJPM-DGz8Mm6i.js → chunk-727SXJPM-CZ-qfRUm.js} +1 -1
  244. package/web-shell/assets/{chunk-AQP2D5EJ-BQAydUNk.js → chunk-AQP2D5EJ-B2dSDcqM.js} +1 -1
  245. package/web-shell/assets/{chunk-FMBD7UC4-GHr2LN_p.js → chunk-FMBD7UC4-Cfy3tyA0.js} +1 -1
  246. package/web-shell/assets/{chunk-ND2GUHAM-7R91lnUx.js → chunk-ND2GUHAM-CApNUpUq.js} +1 -1
  247. package/web-shell/assets/{chunk-QZHKN3VN-aTJD3lSQ.js → chunk-QZHKN3VN-CVBG8kgg.js} +1 -1
  248. package/web-shell/assets/classDiagram-4FO5ZUOK-B8WsaT2G.js +1 -0
  249. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B8WsaT2G.js +1 -0
  250. package/web-shell/assets/{cose-bilkent-S5V4N54A-BTf8t1RL.js → cose-bilkent-S5V4N54A-URd77-_-.js} +1 -1
  251. package/web-shell/assets/{dagre-BM42HDAG-_sgp3WuA.js → dagre-BM42HDAG-C07H4G9-.js} +1 -1
  252. package/web-shell/assets/{diagram-2AECGRRQ-CROtRy1w.js → diagram-2AECGRRQ-CYbpXrSn.js} +1 -1
  253. package/web-shell/assets/{diagram-5GNKFQAL-BqGRzwSc.js → diagram-5GNKFQAL-SI8s6fjX.js} +1 -1
  254. package/web-shell/assets/{diagram-KO2AKTUF-CMrcEtA7.js → diagram-KO2AKTUF-mBkC4RTW.js} +1 -1
  255. package/web-shell/assets/{diagram-LMA3HP47-BRydGNW5.js → diagram-LMA3HP47-CyBPDzWJ.js} +1 -1
  256. package/web-shell/assets/{diagram-OG6HWLK6-D0ilgNjV.js → diagram-OG6HWLK6-DwK7kBCu.js} +1 -1
  257. package/web-shell/assets/{erDiagram-TEJ5UH35-2lnQeJUM.js → erDiagram-TEJ5UH35-Ds1StEUd.js} +1 -1
  258. package/web-shell/assets/{flowDiagram-I6XJVG4X-C_ZMdQiC.js → flowDiagram-I6XJVG4X-BDC4-jHO.js} +1 -1
  259. package/web-shell/assets/{ganttDiagram-6RSMTGT7-Dw9V_Ny0.js → ganttDiagram-6RSMTGT7-CV2aHQqf.js} +1 -1
  260. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-HDXI-F1B.js → gitGraphDiagram-PVQCEYII-B8RcuV_L.js} +1 -1
  261. package/web-shell/assets/index-B5WZ0qP1.js +717 -0
  262. package/web-shell/assets/index-CYE1IMd1.css +5 -0
  263. package/web-shell/assets/{infoDiagram-5YYISTIA-CuB8Ebua.js → infoDiagram-5YYISTIA-DUPoTf50.js} +1 -1
  264. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D_tyhVwh.js → ishikawaDiagram-YF4QCWOH-FDYOx9rf.js} +1 -1
  265. package/web-shell/assets/{journeyDiagram-JHISSGLW-CgCwJQNU.js → journeyDiagram-JHISSGLW-C5_ohMRp.js} +1 -1
  266. package/web-shell/assets/{kanban-definition-UN3LZRKU-PZUtcbPx.js → kanban-definition-UN3LZRKU-Bn4UnOMG.js} +1 -1
  267. package/web-shell/assets/{linear-CZqRdJIU.js → linear-Bl0pKQtY.js} +1 -1
  268. package/web-shell/assets/{mermaid.core-CPW_4UEF.js → mermaid.core-sevQFoji.js} +72 -72
  269. package/web-shell/assets/{mindmap-definition-RKZ34NQL-D_Y75ID7.js → mindmap-definition-RKZ34NQL-DSH4JZF9.js} +1 -1
  270. package/web-shell/assets/{pieDiagram-4H26LBE5-Q4dTyLeF.js → pieDiagram-4H26LBE5-acWvdQTD.js} +1 -1
  271. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-ckw329Ft.js → quadrantDiagram-W4KKPZXB-DlggX4Sm.js} +1 -1
  272. package/web-shell/assets/{requirementDiagram-4Y6WPE33-DbVDm4It.js → requirementDiagram-4Y6WPE33--mMqwmV8.js} +1 -1
  273. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CHuZ_ecH.js → sankeyDiagram-5OEKKPKP-BtV9tZ77.js} +1 -1
  274. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DU2YSpq-.js → sequenceDiagram-3UESZ5HK-iDQzPFlj.js} +1 -1
  275. package/web-shell/assets/{stateDiagram-AJRCARHV-CA9PEBUo.js → stateDiagram-AJRCARHV-CsCyQLZ3.js} +1 -1
  276. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CPapECG9.js +1 -0
  277. package/web-shell/assets/{timeline-definition-PNZ67QCA-Bhlo4WVc.js → timeline-definition-PNZ67QCA-Dl0rnKvr.js} +1 -1
  278. package/web-shell/assets/{vennDiagram-CIIHVFJN-6xtPLsyl.js → vennDiagram-CIIHVFJN-qF7nTZzA.js} +1 -1
  279. package/web-shell/assets/{wardley-L42UT6IY-3eozmXPf.js → wardley-L42UT6IY-fWoK9i7F.js} +1 -1
  280. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BOn6hKss.js → wardleyDiagram-YWT4CUSO-pHGfkMnc.js} +1 -1
  281. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BsP4-I_y.js → xychartDiagram-2RQKCTM6-3Doc4Trz.js} +1 -1
  282. package/web-shell/index.html +18 -2
  283. package/chunks/MaxSizedBox-QNF3EIGU.js +0 -63
  284. package/chunks/agent-headless-RQ5BTX3G.js +0 -56
  285. package/chunks/bridge-JL2PMCIW.js +0 -66
  286. package/chunks/chunk-5GOVVXEV.js +0 -73
  287. package/chunks/chunk-BC3C4F3Q.js +0 -40
  288. package/chunks/chunk-BW4KCQFD.js +0 -1103
  289. package/chunks/chunk-RKIZXJMB.js +0 -13
  290. package/chunks/contextCommand-WYU6OQ2F.js +0 -61
  291. package/chunks/daemon-status-provider-HH2EC5FI.js +0 -65
  292. package/chunks/headlessSafetyWarnings-TBE35GJ4.js +0 -55
  293. package/chunks/initializer-2Y7SLOKV.js +0 -61
  294. package/chunks/list-ZAFHZ7OS.js +0 -65
  295. package/chunks/loadedSettingsAdapter-6KJXD6M3.js +0 -60
  296. package/chunks/nonInteractiveCli-5W4GIZQM.js +0 -96
  297. package/chunks/ripGrep-IEIFIWP4.js +0 -54
  298. package/chunks/serve-V6GVZR6U.js +0 -65
  299. package/chunks/spawnChannel-3VHW5EPY.js +0 -63
  300. package/chunks/theme-manager-LYLGAERF.js +0 -58
  301. package/chunks/workspace-providers-status-PIAFVYHA.js +0 -62
  302. package/chunks/workspace-service-YAIOD4HG.js +0 -71
  303. package/web-shell/assets/channel-iRo68q4Q.js +0 -1
  304. package/web-shell/assets/classDiagram-4FO5ZUOK-iHF24a8X.js +0 -1
  305. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-iHF24a8X.js +0 -1
  306. package/web-shell/assets/index-CHmzAWys.css +0 -5
  307. package/web-shell/assets/index-w6GTOHh1.js +0 -713
  308. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-t1LRI0oY.js +0 -1
@@ -1,23 +1,29 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
+ import {
4
+ isLoopbackBind
5
+ } from "./chunk-RNBYOUGV.js";
3
6
  import {
4
7
  require_lib
5
8
  } from "./chunk-3HX5LZ6R.js";
6
9
  import {
7
10
  require_mime_db
8
11
  } from "./chunk-7RYW5LQV.js";
12
+ import {
13
+ CLIENT_MCP_OVER_WS_CONFIG_FLAG
14
+ } from "./chunk-EWALXUAD.js";
9
15
  import {
10
16
  MAX_WORKSPACE_PATH_LENGTH
11
- } from "./chunk-JE5FVRPC.js";
17
+ } from "./chunk-SEZC2725.js";
12
18
  import {
13
19
  writeStderrLine
14
20
  } from "./chunk-Y6Z2O3WR.js";
15
21
  import {
16
22
  require_once
17
- } from "./chunk-YAINVQ3Q.js";
23
+ } from "./chunk-5P5XGNYH.js";
18
24
  import {
19
25
  require_safer
20
- } from "./chunk-EJYJYJZ2.js";
26
+ } from "./chunk-SYCJMSIJ.js";
21
27
  import {
22
28
  require_src
23
29
  } from "./chunk-QN5NZ3UQ.js";
@@ -11329,13 +11335,13 @@ var require_is_promise = __commonJS({
11329
11335
  }
11330
11336
  });
11331
11337
 
11332
- // node_modules/router/node_modules/path-to-regexp/dist/index.js
11338
+ // node_modules/path-to-regexp/dist/index.js
11333
11339
  var require_dist2 = __commonJS({
11334
- "node_modules/router/node_modules/path-to-regexp/dist/index.js"(exports) {
11340
+ "node_modules/path-to-regexp/dist/index.js"(exports) {
11335
11341
  "use strict";
11336
11342
  init_esbuild_shims();
11337
11343
  Object.defineProperty(exports, "__esModule", { value: true });
11338
- exports.TokenData = void 0;
11344
+ exports.PathError = exports.TokenData = void 0;
11339
11345
  exports.parse = parse;
11340
11346
  exports.compile = compile;
11341
11347
  exports.match = match;
@@ -11345,176 +11351,129 @@ var require_dist2 = __commonJS({
11345
11351
  var NOOP_VALUE = /* @__PURE__ */ __name((value) => value, "NOOP_VALUE");
11346
11352
  var ID_START = /^[$_\p{ID_Start}]$/u;
11347
11353
  var ID_CONTINUE = /^[$\u200c\u200d\p{ID_Continue}]$/u;
11348
- var DEBUG_URL = "https://git.new/pathToRegexpError";
11349
- var SIMPLE_TOKENS = {
11350
- // Groups.
11351
- "{": "{",
11352
- "}": "}",
11353
- // Reserved.
11354
- "(": "(",
11355
- ")": ")",
11356
- "[": "[",
11357
- "]": "]",
11358
- "+": "+",
11359
- "?": "?",
11360
- "!": "!"
11361
- };
11354
+ var ID = /^[$_\p{ID_Start}][$\u200c\u200d\p{ID_Continue}]*$/u;
11362
11355
  function escapeText(str) {
11363
- return str.replace(/[{}()\[\]+?!:*]/g, "\\$&");
11356
+ return str.replace(/[{}()\[\]+?!:*\\]/g, "\\$&");
11364
11357
  }
11365
11358
  __name(escapeText, "escapeText");
11366
11359
  function escape(str) {
11367
11360
  return str.replace(/[.+*?^${}()[\]|/\\]/g, "\\$&");
11368
11361
  }
11369
11362
  __name(escape, "escape");
11370
- function* lexer(str) {
11371
- const chars = [...str];
11372
- let i = 0;
11373
- function name() {
11374
- let value = "";
11375
- if (ID_START.test(chars[++i])) {
11376
- value += chars[i];
11377
- while (ID_CONTINUE.test(chars[++i])) {
11378
- value += chars[i];
11379
- }
11380
- } else if (chars[i] === '"') {
11381
- let pos = i;
11382
- while (i < chars.length) {
11383
- if (chars[++i] === '"') {
11384
- i++;
11385
- pos = 0;
11386
- break;
11387
- }
11388
- if (chars[i] === "\\") {
11389
- value += chars[++i];
11390
- } else {
11391
- value += chars[i];
11392
- }
11393
- }
11394
- if (pos) {
11395
- throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`);
11396
- }
11397
- }
11398
- if (!value) {
11399
- throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`);
11400
- }
11401
- return value;
11402
- }
11403
- __name(name, "name");
11404
- while (i < chars.length) {
11405
- const value = chars[i];
11406
- const type = SIMPLE_TOKENS[value];
11407
- if (type) {
11408
- yield { type, index: i++, value };
11409
- } else if (value === "\\") {
11410
- yield { type: "ESCAPED", index: i++, value: chars[i++] };
11411
- } else if (value === ":") {
11412
- const value2 = name();
11413
- yield { type: "PARAM", index: i, value: value2 };
11414
- } else if (value === "*") {
11415
- const value2 = name();
11416
- yield { type: "WILDCARD", index: i, value: value2 };
11417
- } else {
11418
- yield { type: "CHAR", index: i, value: chars[i++] };
11419
- }
11420
- }
11421
- return { type: "END", index: i, value: "" };
11422
- }
11423
- __name(lexer, "lexer");
11424
- var Iter = class {
11363
+ var TokenData = class {
11425
11364
  static {
11426
- __name(this, "Iter");
11365
+ __name(this, "TokenData");
11427
11366
  }
11428
- constructor(tokens) {
11367
+ constructor(tokens, originalPath) {
11429
11368
  this.tokens = tokens;
11430
- }
11431
- peek() {
11432
- if (!this._peek) {
11433
- const next = this.tokens.next();
11434
- this._peek = next.value;
11435
- }
11436
- return this._peek;
11437
- }
11438
- tryConsume(type) {
11439
- const token = this.peek();
11440
- if (token.type !== type)
11441
- return;
11442
- this._peek = void 0;
11443
- return token.value;
11444
- }
11445
- consume(type) {
11446
- const value = this.tryConsume(type);
11447
- if (value !== void 0)
11448
- return value;
11449
- const { type: nextType, index } = this.peek();
11450
- throw new TypeError(`Unexpected ${nextType} at ${index}, expected ${type}: ${DEBUG_URL}`);
11451
- }
11452
- text() {
11453
- let result = "";
11454
- let value;
11455
- while (value = this.tryConsume("CHAR") || this.tryConsume("ESCAPED")) {
11456
- result += value;
11457
- }
11458
- return result;
11369
+ this.originalPath = originalPath;
11459
11370
  }
11460
11371
  };
11461
- var TokenData = class {
11372
+ exports.TokenData = TokenData;
11373
+ var PathError = class extends TypeError {
11462
11374
  static {
11463
- __name(this, "TokenData");
11375
+ __name(this, "PathError");
11464
11376
  }
11465
- constructor(tokens) {
11466
- this.tokens = tokens;
11377
+ constructor(message, originalPath) {
11378
+ let text = message;
11379
+ if (originalPath)
11380
+ text += `: ${originalPath}`;
11381
+ text += `; visit https://git.new/pathToRegexpError for info`;
11382
+ super(text);
11383
+ this.originalPath = originalPath;
11467
11384
  }
11468
11385
  };
11469
- exports.TokenData = TokenData;
11386
+ exports.PathError = PathError;
11470
11387
  function parse(str, options = {}) {
11471
11388
  const { encodePath = NOOP_VALUE } = options;
11472
- const it = new Iter(lexer(str));
11473
- function consume(endType) {
11474
- const tokens2 = [];
11475
- while (true) {
11476
- const path3 = it.text();
11477
- if (path3)
11478
- tokens2.push({ type: "text", value: encodePath(path3) });
11479
- const param = it.tryConsume("PARAM");
11480
- if (param) {
11481
- tokens2.push({
11482
- type: "param",
11483
- name: param
11484
- });
11389
+ const chars = [...str];
11390
+ let index = 0;
11391
+ function consumeUntil(end) {
11392
+ const output = [];
11393
+ let path3 = "";
11394
+ function writePath() {
11395
+ if (!path3)
11396
+ return;
11397
+ output.push({
11398
+ type: "text",
11399
+ value: encodePath(path3)
11400
+ });
11401
+ path3 = "";
11402
+ }
11403
+ __name(writePath, "writePath");
11404
+ while (index < chars.length) {
11405
+ const value = chars[index++];
11406
+ if (value === end) {
11407
+ writePath();
11408
+ return output;
11409
+ }
11410
+ if (value === "\\") {
11411
+ if (index === chars.length) {
11412
+ throw new PathError(`Unexpected end after \\ at index ${index}`, str);
11413
+ }
11414
+ path3 += chars[index++];
11485
11415
  continue;
11486
11416
  }
11487
- const wildcard = it.tryConsume("WILDCARD");
11488
- if (wildcard) {
11489
- tokens2.push({
11490
- type: "wildcard",
11491
- name: wildcard
11492
- });
11417
+ if (value === ":" || value === "*") {
11418
+ const type = value === ":" ? "param" : "wildcard";
11419
+ let name = "";
11420
+ if (ID_START.test(chars[index])) {
11421
+ do {
11422
+ name += chars[index++];
11423
+ } while (ID_CONTINUE.test(chars[index]));
11424
+ } else if (chars[index] === '"') {
11425
+ let quoteStart = index;
11426
+ while (index < chars.length) {
11427
+ if (chars[++index] === '"') {
11428
+ index++;
11429
+ quoteStart = 0;
11430
+ break;
11431
+ }
11432
+ if (chars[index] === "\\")
11433
+ index++;
11434
+ name += chars[index];
11435
+ }
11436
+ if (quoteStart) {
11437
+ throw new PathError(`Unterminated quote at index ${quoteStart}`, str);
11438
+ }
11439
+ }
11440
+ if (!name) {
11441
+ throw new PathError(`Missing parameter name at index ${index}`, str);
11442
+ }
11443
+ writePath();
11444
+ output.push({ type, name });
11493
11445
  continue;
11494
11446
  }
11495
- const open = it.tryConsume("{");
11496
- if (open) {
11497
- tokens2.push({
11447
+ if (value === "{") {
11448
+ writePath();
11449
+ output.push({
11498
11450
  type: "group",
11499
- tokens: consume("}")
11451
+ tokens: consumeUntil("}")
11500
11452
  });
11501
11453
  continue;
11502
11454
  }
11503
- it.consume(endType);
11504
- return tokens2;
11455
+ if (value === "}" || value === "(" || value === ")" || value === "[" || value === "]" || value === "+" || value === "?" || value === "!") {
11456
+ throw new PathError(`Unexpected ${value} at index ${index - 1}`, str);
11457
+ }
11458
+ path3 += value;
11459
+ }
11460
+ if (end) {
11461
+ throw new PathError(`Unexpected end at index ${index}, expected ${end}`, str);
11505
11462
  }
11463
+ writePath();
11464
+ return output;
11506
11465
  }
11507
- __name(consume, "consume");
11508
- const tokens = consume("END");
11509
- return new TokenData(tokens);
11466
+ __name(consumeUntil, "consumeUntil");
11467
+ return new TokenData(consumeUntil(""), str);
11510
11468
  }
11511
11469
  __name(parse, "parse");
11512
11470
  function compile(path3, options = {}) {
11513
11471
  const { encode = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;
11514
- const data = path3 instanceof TokenData ? path3 : parse(path3, options);
11472
+ const data = typeof path3 === "object" ? path3 : parse(path3, options);
11515
11473
  const fn = tokensToFunction(data.tokens, delimiter, encode);
11516
- return /* @__PURE__ */ __name(function path4(data2 = {}) {
11517
- const [path5, ...missing] = fn(data2);
11474
+ return /* @__PURE__ */ __name(function path4(params = {}) {
11475
+ const missing = [];
11476
+ const path5 = fn(params, missing);
11518
11477
  if (missing.length) {
11519
11478
  throw new TypeError(`Missing parameters: ${missing.join(", ")}`);
11520
11479
  }
@@ -11524,12 +11483,10 @@ var require_dist2 = __commonJS({
11524
11483
  __name(compile, "compile");
11525
11484
  function tokensToFunction(tokens, delimiter, encode) {
11526
11485
  const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode));
11527
- return (data) => {
11528
- const result = [""];
11486
+ return (data, missing) => {
11487
+ let result = "";
11529
11488
  for (const encoder of encoders) {
11530
- const [value, ...extras] = encoder(data);
11531
- result[0] += value;
11532
- result.push(...extras);
11489
+ result += encoder(data, missing);
11533
11490
  }
11534
11491
  return result;
11535
11492
  };
@@ -11537,43 +11494,51 @@ var require_dist2 = __commonJS({
11537
11494
  __name(tokensToFunction, "tokensToFunction");
11538
11495
  function tokenToFunction(token, delimiter, encode) {
11539
11496
  if (token.type === "text")
11540
- return () => [token.value];
11497
+ return () => token.value;
11541
11498
  if (token.type === "group") {
11542
11499
  const fn = tokensToFunction(token.tokens, delimiter, encode);
11543
- return (data) => {
11544
- const [value, ...missing] = fn(data);
11545
- if (!missing.length)
11546
- return [value];
11547
- return [""];
11500
+ return (data, missing) => {
11501
+ const len = missing.length;
11502
+ const value = fn(data, missing);
11503
+ if (missing.length === len)
11504
+ return value;
11505
+ missing.length = len;
11506
+ return "";
11548
11507
  };
11549
11508
  }
11550
11509
  const encodeValue = encode || NOOP_VALUE;
11551
11510
  if (token.type === "wildcard" && encode !== false) {
11552
- return (data) => {
11511
+ return (data, missing) => {
11553
11512
  const value = data[token.name];
11554
- if (value == null)
11555
- return ["", token.name];
11513
+ if (value == null) {
11514
+ missing.push(token.name);
11515
+ return "";
11516
+ }
11556
11517
  if (!Array.isArray(value) || value.length === 0) {
11557
11518
  throw new TypeError(`Expected "${token.name}" to be a non-empty array`);
11558
11519
  }
11559
- return [
11560
- value.map((value2, index) => {
11561
- if (typeof value2 !== "string") {
11562
- throw new TypeError(`Expected "${token.name}/${index}" to be a string`);
11563
- }
11564
- return encodeValue(value2);
11565
- }).join(delimiter)
11566
- ];
11520
+ let result = "";
11521
+ for (let i = 0; i < value.length; i++) {
11522
+ if (typeof value[i] !== "string") {
11523
+ throw new TypeError(`Expected "${token.name}/${i}" to be a string`);
11524
+ }
11525
+ if (i > 0)
11526
+ result += delimiter;
11527
+ result += encodeValue(value[i]);
11528
+ }
11529
+ return result;
11567
11530
  };
11568
11531
  }
11569
- return (data) => {
11532
+ return (data, missing) => {
11570
11533
  const value = data[token.name];
11571
- if (value == null)
11572
- return ["", token.name];
11534
+ if (value == null) {
11535
+ missing.push(token.name);
11536
+ return "";
11537
+ }
11573
11538
  if (typeof value !== "string") {
11574
11539
  throw new TypeError(`Expected "${token.name}" to be a string`);
11575
11540
  }
11576
- return [encodeValue(value)];
11541
+ return encodeValue(value);
11577
11542
  };
11578
11543
  }
11579
11544
  __name(tokenToFunction, "tokenToFunction");
@@ -11607,112 +11572,161 @@ var require_dist2 = __commonJS({
11607
11572
  function pathToRegexp(path3, options = {}) {
11608
11573
  const { delimiter = DEFAULT_DELIMITER, end = true, sensitive = false, trailing = true } = options;
11609
11574
  const keys = [];
11610
- const sources = [];
11611
- const flags = sensitive ? "" : "i";
11612
- const paths = Array.isArray(path3) ? path3 : [path3];
11613
- const items = paths.map((path4) => path4 instanceof TokenData ? path4 : parse(path4, options));
11614
- for (const { tokens } of items) {
11615
- for (const seq of flatten(tokens, 0, [])) {
11616
- const regexp2 = sequenceToRegExp(seq, delimiter, keys);
11617
- sources.push(regexp2);
11575
+ let source = "";
11576
+ let combinations = 0;
11577
+ function process2(path4) {
11578
+ if (Array.isArray(path4)) {
11579
+ for (const p of path4)
11580
+ process2(p);
11581
+ return;
11618
11582
  }
11583
+ const data = typeof path4 === "object" ? path4 : parse(path4, options);
11584
+ flatten(data.tokens, 0, [], (tokens) => {
11585
+ if (combinations >= 256) {
11586
+ throw new PathError("Too many path combinations", data.originalPath);
11587
+ }
11588
+ if (combinations > 0)
11589
+ source += "|";
11590
+ source += toRegExpSource(tokens, delimiter, keys, data.originalPath);
11591
+ combinations++;
11592
+ });
11619
11593
  }
11620
- let pattern = `^(?:${sources.join("|")})`;
11594
+ __name(process2, "process");
11595
+ process2(path3);
11596
+ let pattern = `^(?:${source})`;
11621
11597
  if (trailing)
11622
- pattern += `(?:${escape(delimiter)}$)?`;
11623
- pattern += end ? "$" : `(?=${escape(delimiter)}|$)`;
11624
- const regexp = new RegExp(pattern, flags);
11625
- return { regexp, keys };
11598
+ pattern += "(?:" + escape(delimiter) + "$)?";
11599
+ pattern += end ? "$" : "(?=" + escape(delimiter) + "|$)";
11600
+ return { regexp: new RegExp(pattern, sensitive ? "" : "i"), keys };
11626
11601
  }
11627
11602
  __name(pathToRegexp, "pathToRegexp");
11628
- function* flatten(tokens, index, init) {
11629
- if (index === tokens.length) {
11630
- return yield init;
11631
- }
11632
- const token = tokens[index];
11633
- if (token.type === "group") {
11634
- const fork = init.slice();
11635
- for (const seq of flatten(token.tokens, 0, fork)) {
11636
- yield* flatten(tokens, index + 1, seq);
11603
+ function flatten(tokens, index, result, callback) {
11604
+ while (index < tokens.length) {
11605
+ const token = tokens[index++];
11606
+ if (token.type === "group") {
11607
+ const len = result.length;
11608
+ flatten(token.tokens, 0, result, (seq) => flatten(tokens, index, seq, callback));
11609
+ result.length = len;
11610
+ continue;
11637
11611
  }
11638
- } else {
11639
- init.push(token);
11612
+ result.push(token);
11640
11613
  }
11641
- yield* flatten(tokens, index + 1, init);
11614
+ callback(result);
11642
11615
  }
11643
11616
  __name(flatten, "flatten");
11644
- function sequenceToRegExp(tokens, delimiter, keys) {
11617
+ function toRegExpSource(tokens, delimiter, keys, originalPath) {
11645
11618
  let result = "";
11646
11619
  let backtrack = "";
11647
- let isSafeSegmentParam = true;
11648
- for (let i = 0; i < tokens.length; i++) {
11649
- const token = tokens[i];
11620
+ let wildcardBacktrack = "";
11621
+ let prevCaptureType = 0;
11622
+ let hasSegmentCapture = 0;
11623
+ let index = 0;
11624
+ function hasInSegment(index2, type) {
11625
+ while (index2 < tokens.length) {
11626
+ const token = tokens[index2++];
11627
+ if (token.type === type)
11628
+ return true;
11629
+ if (token.type === "text") {
11630
+ if (token.value.includes(delimiter))
11631
+ break;
11632
+ }
11633
+ }
11634
+ return false;
11635
+ }
11636
+ __name(hasInSegment, "hasInSegment");
11637
+ function peekText(index2) {
11638
+ let result2 = "";
11639
+ while (index2 < tokens.length) {
11640
+ const token = tokens[index2++];
11641
+ if (token.type !== "text")
11642
+ break;
11643
+ result2 += token.value;
11644
+ }
11645
+ return result2;
11646
+ }
11647
+ __name(peekText, "peekText");
11648
+ while (index < tokens.length) {
11649
+ const token = tokens[index++];
11650
11650
  if (token.type === "text") {
11651
11651
  result += escape(token.value);
11652
11652
  backtrack += token.value;
11653
- isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter));
11653
+ if (prevCaptureType === 2)
11654
+ wildcardBacktrack += token.value;
11655
+ if (token.value.includes(delimiter))
11656
+ hasSegmentCapture = 0;
11654
11657
  continue;
11655
11658
  }
11656
11659
  if (token.type === "param" || token.type === "wildcard") {
11657
- if (!isSafeSegmentParam && !backtrack) {
11658
- throw new TypeError(`Missing text after "${token.name}": ${DEBUG_URL}`);
11660
+ if (prevCaptureType && !backtrack) {
11661
+ throw new PathError(`Missing text before "${token.name}" ${token.type}`, originalPath);
11659
11662
  }
11660
11663
  if (token.type === "param") {
11661
- result += `(${negate(delimiter, isSafeSegmentParam ? "" : backtrack)}+)`;
11664
+ result += hasSegmentCapture & 2 ? `(${negate(delimiter, backtrack)}+)` : hasInSegment(index, "wildcard") ? `(${negate(delimiter, peekText(index))}+)` : hasSegmentCapture & 1 ? `(${negate(delimiter, backtrack)}+|${escape(backtrack)})` : `(${negate(delimiter, "")}+)`;
11665
+ hasSegmentCapture |= prevCaptureType = 1;
11662
11666
  } else {
11663
- result += `([\\s\\S]+)`;
11667
+ result += hasSegmentCapture & 2 ? `(${negate(backtrack, "")}+)` : wildcardBacktrack ? `(${negate(wildcardBacktrack, "")}+|${negate(delimiter, "")}+)` : `([^]+)`;
11668
+ wildcardBacktrack = "";
11669
+ hasSegmentCapture |= prevCaptureType = 2;
11664
11670
  }
11665
11671
  keys.push(token);
11666
11672
  backtrack = "";
11667
- isSafeSegmentParam = false;
11668
11673
  continue;
11669
11674
  }
11675
+ throw new TypeError(`Unknown token type: ${token.type}`);
11670
11676
  }
11671
11677
  return result;
11672
11678
  }
11673
- __name(sequenceToRegExp, "sequenceToRegExp");
11674
- function negate(delimiter, backtrack) {
11675
- if (backtrack.length < 2) {
11676
- if (delimiter.length < 2)
11677
- return `[^${escape(delimiter + backtrack)}]`;
11678
- return `(?:(?!${escape(delimiter)})[^${escape(backtrack)}])`;
11679
- }
11680
- if (delimiter.length < 2) {
11681
- return `(?:(?!${escape(backtrack)})[^${escape(delimiter)}])`;
11682
- }
11683
- return `(?:(?!${escape(backtrack)}|${escape(delimiter)})[\\s\\S])`;
11679
+ __name(toRegExpSource, "toRegExpSource");
11680
+ function negate(a, b) {
11681
+ if (b.length > a.length)
11682
+ return negate(b, a);
11683
+ if (a === b)
11684
+ b = "";
11685
+ if (b.length > 1)
11686
+ return `(?:(?!${escape(a)}|${escape(b)})[^])`;
11687
+ if (a.length > 1)
11688
+ return `(?:(?!${escape(a)})[^${escape(b)}])`;
11689
+ return `[^${escape(a + b)}]`;
11684
11690
  }
11685
11691
  __name(negate, "negate");
11686
- function stringify(data) {
11687
- return data.tokens.map(/* @__PURE__ */ __name(function stringifyToken(token, index, tokens) {
11688
- if (token.type === "text")
11689
- return escapeText(token.value);
11692
+ function stringifyTokens(tokens, index) {
11693
+ let value = "";
11694
+ while (index < tokens.length) {
11695
+ const token = tokens[index++];
11696
+ if (token.type === "text") {
11697
+ value += escapeText(token.value);
11698
+ continue;
11699
+ }
11690
11700
  if (token.type === "group") {
11691
- return `{${token.tokens.map(stringifyToken).join("")}}`;
11701
+ value += "{" + stringifyTokens(token.tokens, 0) + "}";
11702
+ continue;
11692
11703
  }
11693
- const isSafe = isNameSafe(token.name) && isNextNameSafe(tokens[index + 1]);
11694
- const key = isSafe ? token.name : JSON.stringify(token.name);
11695
- if (token.type === "param")
11696
- return `:${key}`;
11697
- if (token.type === "wildcard")
11698
- return `*${key}`;
11699
- throw new TypeError(`Unexpected token: ${token}`);
11700
- }, "stringifyToken")).join("");
11704
+ if (token.type === "param") {
11705
+ value += ":" + stringifyName(token.name, tokens[index]);
11706
+ continue;
11707
+ }
11708
+ if (token.type === "wildcard") {
11709
+ value += "*" + stringifyName(token.name, tokens[index]);
11710
+ continue;
11711
+ }
11712
+ throw new TypeError(`Unknown token type: ${token.type}`);
11713
+ }
11714
+ return value;
11701
11715
  }
11702
- __name(stringify, "stringify");
11703
- function isNameSafe(name) {
11704
- const [first, ...rest] = name;
11705
- if (!ID_START.test(first))
11706
- return false;
11707
- return rest.every((char) => ID_CONTINUE.test(char));
11716
+ __name(stringifyTokens, "stringifyTokens");
11717
+ function stringify(data) {
11718
+ return stringifyTokens(data.tokens, 0);
11708
11719
  }
11709
- __name(isNameSafe, "isNameSafe");
11710
- function isNextNameSafe(token) {
11711
- if ((token === null || token === void 0 ? void 0 : token.type) !== "text")
11712
- return true;
11713
- return !ID_CONTINUE.test(token.value[0]);
11720
+ __name(stringify, "stringify");
11721
+ function stringifyName(name, next) {
11722
+ if (!ID.test(name))
11723
+ return JSON.stringify(name);
11724
+ if ((next === null || next === void 0 ? void 0 : next.type) === "text" && ID_CONTINUE.test(next.value[0])) {
11725
+ return JSON.stringify(name);
11726
+ }
11727
+ return name;
11714
11728
  }
11715
- __name(isNextNameSafe, "isNextNameSafe");
11729
+ __name(stringifyName, "stringifyName");
11716
11730
  }
11717
11731
  });
11718
11732
 
@@ -16097,19 +16111,6 @@ function createBridgeFileSystemAdapter(factory) {
16097
16111
  }
16098
16112
  __name(createBridgeFileSystemAdapter, "createBridgeFileSystemAdapter");
16099
16113
 
16100
- // packages/cli/src/serve/loopback-binds.ts
16101
- init_esbuild_shims();
16102
- var LOOPBACK_BINDS = /* @__PURE__ */ new Set([
16103
- "127.0.0.1",
16104
- "localhost",
16105
- "::1",
16106
- "[::1]"
16107
- ]);
16108
- function isLoopbackBind(hostname) {
16109
- return LOOPBACK_BINDS.has(hostname.toLowerCase());
16110
- }
16111
- __name(isLoopbackBind, "isLoopbackBind");
16112
-
16113
16114
  // packages/cli/src/serve/web-shell-resolver.ts
16114
16115
  init_esbuild_shims();
16115
16116
  import { existsSync } from "node:fs";
@@ -16179,13 +16180,14 @@ function parseAllowOriginPatterns(raw) {
16179
16180
  } catch {
16180
16181
  throw new InvalidAllowOriginPatternError(entry, "not a parseable URL");
16181
16182
  }
16182
- if (parsed.origin !== entry) {
16183
+ const canonical = parsed.origin === "null" ? `${parsed.protocol}//${parsed.host}` : parsed.origin;
16184
+ if (canonical !== entry) {
16183
16185
  throw new InvalidAllowOriginPatternError(
16184
16186
  entry,
16185
- `expected the canonical origin ${JSON.stringify(parsed.origin)} without trailing slash, path, userinfo, or query`
16187
+ `expected the canonical origin ${JSON.stringify(canonical)} without trailing slash, path, userinfo, or query`
16186
16188
  );
16187
16189
  }
16188
- origins.add(parsed.origin.toLowerCase());
16190
+ origins.add(canonical.toLowerCase());
16189
16191
  }
16190
16192
  return { allowAny, origins };
16191
16193
  }
@@ -16241,7 +16243,7 @@ function hostAllowlist(bind, getPort) {
16241
16243
  `[::1]:${port}`,
16242
16244
  `host.docker.internal:${port}`
16243
16245
  ]);
16244
- if (port === 80) {
16246
+ if (port === 80 || port === 443) {
16245
16247
  cachedAllowed.add("localhost");
16246
16248
  cachedAllowed.add("127.0.0.1");
16247
16249
  cachedAllowed.add("[::1]");
@@ -16314,6 +16316,98 @@ function createMutationGate(deps) {
16314
16316
  }
16315
16317
  __name(createMutationGate, "createMutationGate");
16316
16318
 
16319
+ // packages/cli/src/serve/acp-http/client-mcp-sender-registry.ts
16320
+ init_esbuild_shims();
16321
+ var ClientMcpSenderRegistry = class {
16322
+ static {
16323
+ __name(this, "ClientMcpSenderRegistry");
16324
+ }
16325
+ senders = /* @__PURE__ */ new Map();
16326
+ /**
16327
+ * Record a server's WS sender, owned by `owner` (the registering
16328
+ * connection's stable client id). Idempotent; last writer wins and takes
16329
+ * ownership, so the new owner's `delete` is the one that takes effect.
16330
+ */
16331
+ set(serverName, sender, owner) {
16332
+ this.senders.set(serverName, { sender, owner });
16333
+ }
16334
+ /**
16335
+ * Forget a server's WS sender — but only when `owner` still owns the entry.
16336
+ * Idempotent. The ownership guard stops a disconnecting connection from
16337
+ * clobbering an entry a later connection re-registered under the same name.
16338
+ */
16339
+ delete(serverName, owner) {
16340
+ if (this.senders.get(serverName)?.owner === owner) {
16341
+ this.senders.delete(serverName);
16342
+ }
16343
+ }
16344
+ /** Whether `owner` currently owns the entry for `serverName`. */
16345
+ owns(serverName, owner) {
16346
+ return this.senders.get(serverName)?.owner === owner;
16347
+ }
16348
+ /** Currently-registered server names (tests / accounting). */
16349
+ serverNames() {
16350
+ return [...this.senders.keys()];
16351
+ }
16352
+ /**
16353
+ * The {@link ClientMcpMessageSender} the bridge consumes. Returns a
16354
+ * `(payload) => Promise<payload>` bound to the named server, or `undefined`
16355
+ * when no client currently hosts it. The bridge passes a `JSONRPCMessage` as
16356
+ * `payload`; we keep the public type `unknown` to match the bridge's
16357
+ * SDK-free contract.
16358
+ */
16359
+ lookup = /* @__PURE__ */ __name((serverName) => {
16360
+ const entry = this.senders.get(serverName);
16361
+ if (!entry) return void 0;
16362
+ return (payload) => entry.sender(serverName, payload);
16363
+ }, "lookup");
16364
+ };
16365
+ function createClientMcpServerProvider(registry, bridge, originatorClientId) {
16366
+ return {
16367
+ async registerClientMcpServer(serverName, sendSdkMcpMessage) {
16368
+ registry.set(serverName, sendSdkMcpMessage, originatorClientId);
16369
+ try {
16370
+ const runtimeConfig = {
16371
+ // SDK-type so the child binds `SdkControlClientTransport`
16372
+ // (`isSdkMcpServerConfig`); the flag tells the child to KEEP the
16373
+ // type and bind `sendSdkMcpMessage` to the reverse ext-method.
16374
+ type: "sdk",
16375
+ [CLIENT_MCP_OVER_WS_CONFIG_FLAG]: true
16376
+ };
16377
+ const result = await bridge.addRuntimeMcpServer(
16378
+ serverName,
16379
+ runtimeConfig,
16380
+ originatorClientId
16381
+ );
16382
+ if (result.skipped) {
16383
+ registry.delete(serverName, originatorClientId);
16384
+ throw new Error(
16385
+ `runtime MCP add skipped: ${result.reason ?? "unknown"}`
16386
+ );
16387
+ }
16388
+ if (result.shadowedSettings) {
16389
+ await bridge.removeRuntimeMcpServer(serverName, originatorClientId).catch(() => {
16390
+ });
16391
+ throw new Error(
16392
+ `client MCP server '${serverName}' conflicts with a configured MCP server`
16393
+ );
16394
+ }
16395
+ return { toolCount: result.toolCount };
16396
+ } catch (err) {
16397
+ registry.delete(serverName, originatorClientId);
16398
+ throw err;
16399
+ }
16400
+ },
16401
+ async unregisterClientMcpServer(serverName) {
16402
+ if (!registry.owns(serverName, originatorClientId)) return;
16403
+ registry.delete(serverName, originatorClientId);
16404
+ await bridge.removeRuntimeMcpServer(serverName, originatorClientId).catch(() => {
16405
+ });
16406
+ }
16407
+ };
16408
+ }
16409
+ __name(createClientMcpServerProvider, "createClientMcpServerProvider");
16410
+
16317
16411
  // packages/cli/src/serve/capabilities.ts
16318
16412
  init_esbuild_shims();
16319
16413
  var SERVE_PROTOCOL_VERSION = "v1";
@@ -16358,6 +16452,10 @@ var SERVE_CAPABILITY_REGISTRY = {
16358
16452
  // hierarchical QWEN.md state and accepts append/replace writes scoped
16359
16453
  // to either the bound workspace or the global ~/.qwen directory.
16360
16454
  workspace_memory: { since: "v1" },
16455
+ workspace_memory_remember: {
16456
+ since: "v1",
16457
+ modes: ["workspace", "clean"]
16458
+ },
16361
16459
  // Workspace agents CRUD (`GET/POST /workspace/agents` +
16362
16460
  // `GET/POST/DELETE /workspace/agents/:agentType`). Wraps
16363
16461
  // `SubagentManager` over HTTP so remote clients can list / read /
@@ -16375,6 +16473,7 @@ var SERVE_CAPABILITY_REGISTRY = {
16375
16473
  session_lsp: { since: "v1" },
16376
16474
  session_status: { since: "v1" },
16377
16475
  session_close: { since: "v1" },
16476
+ session_archive: { since: "v1" },
16378
16477
  session_metadata: { since: "v1" },
16379
16478
  // Daemon supports the MCP client guardrail surface: an in-process
16380
16479
  // counter exposed on `GET /workspace/mcp`, a `--mcp-client-budget=N`
@@ -16539,6 +16638,22 @@ var SERVE_CAPABILITY_REGISTRY = {
16539
16638
  session_branch: { since: "v1" },
16540
16639
  rate_limit: { since: "v1" },
16541
16640
  workspace_reload: { since: "v1" },
16641
+ // Phase 2 "reverse tool channel" (issue #5626). A connected WS client (e.g.
16642
+ // the Chrome extension) can host an MCP server that the daemon's agent
16643
+ // calls by carrying `mcp_message` JSON-RPC frames over the daemon WS,
16644
+ // reusing the SDK-MCP-server control-plane pattern. Inbound WS frame types:
16645
+ // `mcp_register` { server }, `mcp_message` { id, server, payload }
16646
+ // (bidirectional, request/response correlated by `id`), `mcp_unregister`
16647
+ // { server }. Advertised CONDITIONALLY so clients pre-flight this tag before
16648
+ // attempting to register a client-hosted server. `runQwenServe` enables it
16649
+ // only when explicitly requested by option or env.
16650
+ client_mcp_over_ws: { since: "v1" },
16651
+ // Plan C "CDP tunnel" (issue #5626): the daemon exposes a `/cdp` WebSocket
16652
+ // where a loopback puppeteer client (chrome-devtools-mcp) drives ONE real tab
16653
+ // via the extension's `chrome.debugger`, tunneled over `/acp` as `cdp_*`
16654
+ // frames. Advertised when explicitly enabled or when the daemon is serving a
16655
+ // Chrome extension origin.
16656
+ cdp_tunnel_over_ws: { since: "v1" },
16542
16657
  // Daemon hosts the `/voice/stream` WebSocket: the browser captures audio and
16543
16658
  // streams raw PCM, the daemon transcribes server-side via the configured
16544
16659
  // `voiceModel` (credentials never reach the client). Advertised
@@ -16575,6 +16690,8 @@ var CONDITIONAL_SERVE_FEATURES = /* @__PURE__ */ new Map([
16575
16690
  ],
16576
16691
  ["rate_limit", (toggles) => toggles.rateLimit === true],
16577
16692
  ["workspace_reload", (toggles) => toggles.reloadAvailable === true],
16693
+ ["client_mcp_over_ws", (toggles) => toggles.clientMcpOverWsEnabled === true],
16694
+ ["cdp_tunnel_over_ws", (toggles) => toggles.cdpTunnelOverWsEnabled === true],
16578
16695
  [
16579
16696
  // Advertised whenever the `/voice/stream` WS endpoint exists. A configured
16580
16697
  // token (or `--require-auth`) no longer suppresses it: browsers can't set
@@ -16617,9 +16734,6 @@ __name(getServeProtocolVersions, "getServeProtocolVersions");
16617
16734
  init_esbuild_shims();
16618
16735
  var CAPABILITIES_SCHEMA_VERSION = 1;
16619
16736
 
16620
- // packages/cli/src/serve/acp-session-bridge.ts
16621
- init_esbuild_shims();
16622
-
16623
16737
  // packages/cli/src/serve/server/request-helpers.ts
16624
16738
  init_esbuild_shims();
16625
16739
  import * as path2 from "node:path";
@@ -17088,9 +17202,21 @@ async function buildDaemonStatusResponse(detail, input) {
17088
17202
  const bridgeSnapshot = input.bridge.getDaemonStatusSnapshot();
17089
17203
  const acpSnapshot = input.acpHandle?.registry.getSnapshot();
17090
17204
  const rateLimitHits = input.rateLimiter?.getHitCounts() ?? zeroRateHits();
17205
+ const channelWorker = input.getChannelWorkerSnapshot?.() ?? {
17206
+ enabled: false,
17207
+ state: "disabled",
17208
+ channels: []
17209
+ };
17091
17210
  const issues = [];
17092
17211
  let full;
17093
- pushRuntimeIssues(issues, bridgeSnapshot, acpSnapshot, rateLimitHits, input);
17212
+ pushRuntimeIssues(
17213
+ issues,
17214
+ bridgeSnapshot,
17215
+ acpSnapshot,
17216
+ rateLimitHits,
17217
+ input,
17218
+ channelWorker
17219
+ );
17094
17220
  if (detail === "full") {
17095
17221
  full = await buildFullStatus(input, bridgeSnapshot, acpSnapshot);
17096
17222
  pushFullIssues(issues, full);
@@ -17141,6 +17267,7 @@ async function buildDaemonStatusResponse(detail, input) {
17141
17267
  policy: bridgeSnapshot.permissionPolicy
17142
17268
  },
17143
17269
  channel: { live: bridgeSnapshot.channelLive },
17270
+ channelWorker,
17144
17271
  transport: {
17145
17272
  restSseActive: input.getRestSseActive(),
17146
17273
  acp: {
@@ -17275,7 +17402,7 @@ async function withTimeout(promise, section, timeoutMs) {
17275
17402
  }
17276
17403
  }
17277
17404
  __name(withTimeout, "withTimeout");
17278
- function pushRuntimeIssues(issues, bridgeSnapshot, acpSnapshot, rateLimitHits, input) {
17405
+ function pushRuntimeIssues(issues, bridgeSnapshot, acpSnapshot, rateLimitHits, input, channelWorker) {
17279
17406
  if (bridgeSnapshot.limits.maxSessions !== null && bridgeSnapshot.limits.maxSessions > 0 && bridgeSnapshot.sessionCount / bridgeSnapshot.limits.maxSessions >= CAPACITY_WARNING_RATIO) {
17280
17407
  issues.push({
17281
17408
  code: "session_capacity_high",
@@ -17311,6 +17438,42 @@ function pushRuntimeIssues(issues, bridgeSnapshot, acpSnapshot, rateLimitHits, i
17311
17438
  message: `${sumRateHits(rateLimitHits)} request(s) have been rejected by rate limiting since start.`
17312
17439
  });
17313
17440
  }
17441
+ if (channelWorker.enabled && (channelWorker.state === "exited" || channelWorker.state === "failed")) {
17442
+ const detailParts = [
17443
+ channelWorker.pid !== void 0 ? `pid=${channelWorker.pid}` : void 0,
17444
+ channelWorker.exitCode !== void 0 ? `code=${channelWorker.exitCode ?? "null"}` : void 0,
17445
+ channelWorker.signal ? `signal=${channelWorker.signal}` : void 0,
17446
+ channelWorker.restartCount !== void 0 ? `restarts=${channelWorker.restartCount}` : void 0,
17447
+ channelWorker.lastExitAt ? `lastExitAt=${channelWorker.lastExitAt}` : void 0,
17448
+ channelWorker.lastRestartAt ? `lastRestartAt=${channelWorker.lastRestartAt}` : void 0,
17449
+ channelWorker.nextRestartAt ? `nextRestartAt=${channelWorker.nextRestartAt}` : void 0,
17450
+ channelWorker.lastHeartbeatAt ? `lastHeartbeatAt=${channelWorker.lastHeartbeatAt}` : void 0,
17451
+ channelWorker.staleHeartbeatAt ? `staleHeartbeatAt=${channelWorker.staleHeartbeatAt}` : void 0
17452
+ ].filter(Boolean);
17453
+ const details = detailParts.length > 0 ? ` (${detailParts.join(", ")})` : "";
17454
+ const error = channelWorker.error ? `: ${channelWorker.error}` : "";
17455
+ const isPermanentFailure = channelWorker.state === "failed" && !channelWorker.nextRestartAt;
17456
+ issues.push({
17457
+ code: "channel_worker_exited",
17458
+ severity: isPermanentFailure ? "error" : "warning",
17459
+ message: `Channel worker is ${channelWorker.state}${details}${error}.`,
17460
+ section: "runtime.channelWorker"
17461
+ });
17462
+ }
17463
+ if (channelWorker.enabled && channelWorker.state === "running" && channelWorker.requestedChannels !== void 0) {
17464
+ const connected = new Set(channelWorker.channels);
17465
+ const failed = channelWorker.requestedChannels.filter(
17466
+ (channel) => !connected.has(channel)
17467
+ );
17468
+ if (failed.length > 0) {
17469
+ issues.push({
17470
+ code: "channel_worker_partial_connect",
17471
+ severity: "warning",
17472
+ message: `Channel worker connected ${channelWorker.channels.length}/${channelWorker.requestedChannels.length} channel(s). Failed: ${failed.join(", ")}.`,
17473
+ section: "runtime.channelWorker"
17474
+ });
17475
+ }
17476
+ }
17314
17477
  }
17315
17478
  __name(pushRuntimeIssues, "pushRuntimeIssues");
17316
17479
  function pushFullIssues(issues, full) {
@@ -17520,7 +17683,6 @@ export {
17520
17683
  getDeviceFlowRegistry,
17521
17684
  DeviceFlowRegistry,
17522
17685
  createBridgeFileSystemAdapter,
17523
- isLoopbackBind,
17524
17686
  resolveWebShellDir,
17525
17687
  denyBrowserOriginCors,
17526
17688
  parseAllowOriginPatterns,
@@ -17528,6 +17690,8 @@ export {
17528
17690
  hostAllowlist,
17529
17691
  bearerAuth,
17530
17692
  createMutationGate,
17693
+ ClientMcpSenderRegistry,
17694
+ createClientMcpServerProvider,
17531
17695
  SERVE_CAPABILITY_REGISTRY,
17532
17696
  getAdvertisedServeFeatures,
17533
17697
  getServeProtocolVersions,