@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.
- package/bundled/loop/SKILL.md +22 -3
- package/bundled/loop/SKILL.test.ts +20 -0
- package/bundled/loop/autonomous-loop.test.ts +59 -0
- package/bundled/loop/autonomous-loop.ts +102 -0
- package/bundled/loop/loop-task-file.test.ts +1064 -0
- package/bundled/loop/loop-task-file.ts +404 -0
- package/bundled/loop/loop-tick-resolver.test.ts +906 -0
- package/bundled/loop/loop-tick-resolver.ts +416 -0
- package/bundled/qc-helper/SKILL.md +12 -5
- package/bundled/qc-helper/docs/configuration/auth.md +1 -1
- package/bundled/qc-helper/docs/configuration/settings.md +62 -32
- package/bundled/qc-helper/docs/features/approval-mode.md +3 -0
- package/bundled/qc-helper/docs/features/auto-mode.md +40 -0
- package/bundled/qc-helper/docs/features/channels/overview.md +81 -18
- package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
- package/bundled/qc-helper/docs/features/code-review.md +17 -61
- package/bundled/qc-helper/docs/features/commands.md +42 -40
- package/bundled/qc-helper/docs/features/headless.md +19 -18
- package/bundled/qc-helper/docs/features/hooks.md +6 -1
- package/bundled/qc-helper/docs/features/mcp.md +3 -1
- package/bundled/qc-helper/docs/features/memory.md +1 -1
- package/bundled/qc-helper/docs/features/scheduled-tasks.md +10 -0
- package/bundled/qc-helper/docs/features/status-line.md +3 -3
- package/bundled/qc-helper/docs/ide-integration/ide-integration.md +4 -4
- package/bundled/qc-helper/docs/qwen-serve.md +53 -0
- package/bundled/qc-helper/docs/support/troubleshooting.md +11 -0
- package/bundled/review/DESIGN.md +21 -26
- package/bundled/review/SKILL.md +45 -129
- package/chunks/MaxSizedBox-GHGRQ2OS.js +69 -0
- package/chunks/{StandaloneSessionPicker-Z52JTYST.js → StandaloneSessionPicker-G7YTTM27.js} +49 -42
- package/chunks/{acpAgent-7RZUOWOM.js → acpAgent-SDOILBSU.js} +1325 -365
- package/chunks/{agent-4FG7WTHJ.js → agent-NTSXGV4L.js} +31 -25
- package/chunks/agent-headless-WYURMSAB.js +62 -0
- package/chunks/{anthropicContentGenerator-PFITVL7Y.js → anthropicContentGenerator-WL3LJOUB.js} +110 -31
- package/chunks/{artifact-tool-D2X7G3C3.js → artifact-tool-W76WC2JX.js} +3 -3
- package/chunks/{askUserQuestion-UGETICJQ.js → askUserQuestion-J3P6TH3V.js} +2 -2
- package/chunks/bridge-AMOL4W4P.js +73 -0
- package/chunks/{ca-IUFWESZL.js → ca-HCMB2I54.js} +10 -9
- package/chunks/channel-worker-supervisor-C3IB63V7.js +659 -0
- package/chunks/{chunk-STUWFKGD.js → chunk-26JIREA5.js} +466 -543
- package/chunks/{chunk-SLNKLLEO.js → chunk-2MRV62AU.js} +37 -8
- package/chunks/{chunk-ODLIHNOY.js → chunk-2U4HUMOL.js} +1 -1
- package/chunks/{chunk-CKQA6AWF.js → chunk-4D73HUOP.js} +1 -1
- package/chunks/{chunk-M2U5NM24.js → chunk-54YZOP7P.js} +309 -72
- package/chunks/{chunk-J7FA27RO.js → chunk-5LKL3PAU.js} +3 -3
- package/chunks/chunk-5P5XGNYH.js +93 -0
- package/chunks/{chunk-UFLGERMB.js → chunk-6JE32BRB.js} +178 -124
- package/chunks/{chunk-FKAVULLM.js → chunk-75AVTQJ2.js} +74 -10
- package/chunks/{chunk-I2LYBGNI.js → chunk-7IOMIYOE.js} +1 -1
- package/chunks/{chunk-4LUZAKMK.js → chunk-7KXAGQJ2.js} +1 -1
- package/chunks/{chunk-BXSHL2SF.js → chunk-7LUOQJ3D.js} +1 -1
- package/chunks/{chunk-YAINVQ3Q.js → chunk-A5OPLHFM.js} +18693 -17055
- package/chunks/chunk-AHNXYU4O.js +24 -0
- package/chunks/{chunk-UX4SGCGN.js → chunk-AVQDCKNF.js} +96 -22
- package/chunks/{chunk-HYCC3XM3.js → chunk-B236XPGF.js} +1 -1
- package/chunks/chunk-B6SZLQAZ.js +3523 -0
- package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
- package/chunks/chunk-BPFJQGY7.js +193 -0
- package/chunks/{chunk-SKQZZVAV.js → chunk-BZHLWC6T.js} +2 -2
- package/chunks/{chunk-U3KSMM7G.js → chunk-D5KISTLW.js} +339 -383
- package/chunks/{chunk-GT2FGICD.js → chunk-DE7YXUR7.js} +1 -1
- package/chunks/{chunk-BUUQ5HPX.js → chunk-DG573EOO.js} +1 -1
- package/chunks/{chunk-VVLOGDB6.js → chunk-DX3TKXNT.js} +2 -2
- package/chunks/chunk-E5A7LHNN.js +51 -0
- package/chunks/{chunk-3PJXIDKI.js → chunk-E6US47KI.js} +3 -27
- package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
- package/chunks/{chunk-PDE7CSDS.js → chunk-FXKI7OW6.js} +2 -2
- package/chunks/{chunk-F3ZYSEY6.js → chunk-FY4TT4L4.js} +3 -3
- package/chunks/{chunk-QLDPRILK.js → chunk-G7OQ3RFJ.js} +3 -3
- package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
- package/chunks/{chunk-KMGMKW5Q.js → chunk-GLPV75ES.js} +9 -3
- package/chunks/{chunk-LD2XBG6Z.js → chunk-GO6LNQXT.js} +1 -39
- package/chunks/{chunk-CNLEDYE3.js → chunk-H6TNLOLM.js} +5 -5
- package/chunks/{chunk-JVHEVCAU.js → chunk-HLW4EGKR.js} +31 -6
- package/chunks/{chunk-I4H7PRWQ.js → chunk-HTWHAN44.js} +1 -1
- package/chunks/{chunk-QE6KJYLT.js → chunk-IPYE5BIS.js} +123 -25
- package/chunks/{chunk-EJYJYJZ2.js → chunk-IRJWHZWU.js} +3 -70
- package/chunks/{chunk-EDMZZFDU.js → chunk-J3YPTTNL.js} +930 -798
- package/chunks/{chunk-GGBIN5K7.js → chunk-JGAJMIJZ.js} +1 -1
- package/chunks/{chunk-N4EJFBN5.js → chunk-JVLP5US5.js} +427 -263
- package/chunks/{chunk-R5OP2ATH.js → chunk-JZG7VB6C.js} +11 -11
- package/chunks/{chunk-QI7GOGJR.js → chunk-KKQWC6WS.js} +1 -1
- package/chunks/{chunk-ADCIHOQZ.js → chunk-KX5QZRW2.js} +142 -30
- package/chunks/{chunk-SBBN4BWR.js → chunk-L7OJ3ZO3.js} +1 -1
- package/chunks/{chunk-NDOC6M5S.js → chunk-L7QPM2YD.js} +2 -2
- package/chunks/{chunk-BVSVIN45.js → chunk-LKWAVAB5.js} +3 -3
- package/chunks/{chunk-T4T2FNV4.js → chunk-LOW52WYZ.js} +2 -2
- package/chunks/{chunk-4QK3O43S.js → chunk-LU7BIVWC.js} +4 -4
- package/chunks/{chunk-ZP6UKOPB.js → chunk-LWGLBVWA.js} +1 -1
- package/chunks/{chunk-L7OKCI7T.js → chunk-M7BLWURA.js} +15 -1
- package/chunks/{chunk-PR32FRT6.js → chunk-MIM62IXS.js} +3 -3
- package/chunks/{chunk-RD6YJJJ6.js → chunk-MOUXUCXQ.js} +1 -1
- package/chunks/{chunk-VBZ452JT.js → chunk-MSNGFH6L.js} +494 -114
- package/chunks/{chunk-BX5YO7UW.js → chunk-MTNTVOJR.js} +542 -370
- package/chunks/chunk-MX2YXRER.js +44 -0
- package/chunks/chunk-NIOPRZNN.js +27 -0
- package/chunks/{chunk-SMYQZVZ3.js → chunk-NOGSPTLJ.js} +1 -1
- package/chunks/{chunk-DDMOU62Q.js → chunk-NPQWQYU6.js} +1 -1
- package/chunks/{chunk-MNF6S5PR.js → chunk-P5THQV6A.js} +4 -4
- package/chunks/{chunk-6V4NZFUS.js → chunk-PCYOT4PK.js} +5 -5
- package/chunks/{chunk-CF6BB3LT.js → chunk-PPFWEV7G.js} +10 -1
- package/chunks/{chunk-FXKVLFFY.js → chunk-PSFDB5FZ.js} +3 -3
- package/chunks/{chunk-XJYUPHRC.js → chunk-QOMAHFYI.js} +3 -3
- package/chunks/{chunk-J37FGIOA.js → chunk-QXPI7FEC.js} +38 -4
- package/chunks/{chunk-RRFZXMYP.js → chunk-QZDBHNMV.js} +691 -164
- package/chunks/{chunk-S7AKE7HL.js → chunk-R6RI2HIC.js} +63 -9
- package/chunks/{chunk-HZT4UCFB.js → chunk-RB7S52NJ.js} +4 -4
- package/chunks/{chunk-J33ZR6OJ.js → chunk-RK22ACPP.js} +16 -16
- package/chunks/chunk-RM3PGSGL.js +66 -0
- package/chunks/chunk-RNBYOUGV.js +42 -0
- package/chunks/chunk-S6RLAIUR.js +23 -0
- package/chunks/{chunk-3TV3HUWZ.js → chunk-SCYK2YLI.js} +81 -30
- package/chunks/{chunk-HPZTOP4I.js → chunk-SEKRT4SD.js} +133 -23
- package/chunks/chunk-SEZC2725.js +36 -0
- package/chunks/chunk-SIUQ3YYX.js +78 -0
- package/chunks/{chunk-O2VBQ3Y2.js → chunk-SJBIFVD2.js} +2 -2
- package/chunks/chunk-SYCJMSIJ.js +82 -0
- package/chunks/{chunk-JE5FVRPC.js → chunk-T22H4V4R.js} +48 -23
- package/chunks/{chunk-3227DZO4.js → chunk-T42ACHFI.js} +1 -1
- package/chunks/{chunk-UO5GVXQE.js → chunk-TENOUWY2.js} +3 -3
- package/chunks/{chunk-JOLIREYR.js → chunk-TOAUDIS7.js} +1 -1
- package/chunks/{chunk-QNKBEJO2.js → chunk-UA6XBZT7.js} +2776 -1289
- package/chunks/{chunk-O75BHFQW.js → chunk-UQTYK5SS.js} +2 -2
- package/chunks/{chunk-Y6YMRS3U.js → chunk-UY2TCIZS.js} +17 -3
- package/chunks/{chunk-FNJ7BDPH.js → chunk-UY7ZAYTY.js} +10 -7
- package/chunks/{chunk-UYT3MWEB.js → chunk-UYHWM24C.js} +30 -2
- package/chunks/{chunk-SMXULRAN.js → chunk-VXGPYF7U.js} +1 -1
- package/chunks/{chunk-BTLJ2MF5.js → chunk-W7CG5HPC.js} +3 -3
- package/chunks/{chunk-JJXWTVSK.js → chunk-XHZKDN7M.js} +34 -1
- package/chunks/{chunk-K5XU6E4T.js → chunk-XKSCTXPK.js} +2 -2
- package/chunks/chunk-Y4LITCRB.js +367 -0
- package/chunks/chunk-YHTNWGRR.js +239 -0
- package/chunks/{chunk-BKXBARJZ.js → chunk-YPCPZSZB.js} +1 -1
- package/chunks/{chunk-QWFNTRH4.js → chunk-YSM24SCE.js} +1 -1
- package/chunks/chunk-YTFBURQD.js +313 -0
- package/chunks/{chunk-NL4C3H6C.js → chunk-YXK4GPYO.js} +1 -1
- package/chunks/{chunk-RYLJU2DY.js → chunk-ZN5T4BHI.js} +1 -1
- package/chunks/{computer-use-JGB36FDW.js → computer-use-MTSVPLPY.js} +34 -28
- package/chunks/contextCommand-VGJ3BPTK.js +67 -0
- package/chunks/{cron-create-SKEY55RG.js → cron-create-6YTCOX6P.js} +4 -4
- package/chunks/{cron-delete-I3NAT32Z.js → cron-delete-E3NIFSUK.js} +4 -4
- package/chunks/{cron-list-6XRRL6TH.js → cron-list-Q64MNQNE.js} +4 -4
- package/chunks/daemon-EEB2RYOL.js +8453 -0
- package/chunks/daemon-status-provider-H5SNMK42.js +71 -0
- package/chunks/{de-EOW5PVHF.js → de-PLLFDERI.js} +10 -9
- package/chunks/{dist-NHEYYB2B.js → dist-ADMIQGHI.js} +2 -2
- package/chunks/{dist-J37VXPLD.js → dist-BCQ7INM7.js} +40 -15
- package/chunks/{dist-663NZ6MI.js → dist-KNZFCY5F.js} +116 -11
- package/chunks/{dist-LB6OGPVM.js → dist-LHUWC3K6.js} +26 -5
- package/chunks/{dist-PQPZ5Q4N.js → dist-WBBZ76JZ.js} +20 -9
- package/chunks/{earlyInputCapture-44RISVVJ.js → earlyInputCapture-U4ZIQSQU.js} +32 -26
- package/chunks/{edit-NN6GM5DT.js → edit-SYIQ2KBI.js} +41 -38
- package/chunks/{en-HPWEJBTR.js → en-M4EBUBNU.js} +32 -10
- package/chunks/{enter-worktree-PB3O2C7D.js → enter-worktree-HPPOO244.js} +31 -25
- package/chunks/{enterPlanMode-YQFNNSUA.js → enterPlanMode-56YYO52U.js} +41 -25
- package/chunks/{errors-LS7XU5DZ.js → errors-EO4SXCFP.js} +33 -27
- package/chunks/{exit-worktree-E2FTNSBK.js → exit-worktree-UDM7E6XH.js} +31 -25
- package/chunks/{exitPlanMode-GLYK2BUB.js → exitPlanMode-M6P3AWLJ.js} +149 -33
- package/chunks/{fast-path-WQ6M7LI7.js → fast-path-42P4QYWI.js} +33 -14
- package/chunks/{fast-path-settings-OAGU3X5H.js → fast-path-settings-UQLRFDQP.js} +2 -2
- package/chunks/{fr-BN5NKSAC.js → fr-MBMNQSQ6.js} +10 -9
- package/chunks/{gemini-2YFLVA2M.js → gemini-NRLXS5J7.js} +84 -70
- package/chunks/{geminiContentGenerator-XV6SV6CD.js → geminiContentGenerator-DLJPYYPA.js} +41 -5
- package/chunks/{glob-2H6CDDMK.js → glob-JPY3F74Y.js} +31 -25
- package/chunks/{grep-VXIUXM3C.js → grep-HW23YES5.js} +31 -25
- package/chunks/initializer-HWOZTC4A.js +67 -0
- package/chunks/{ja-7DEUB2TS.js → ja-HFV5QCHR.js} +10 -9
- package/chunks/{keychain-token-storage-YLMDLKXT.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
- package/chunks/list-OZGAGRDG.js +71 -0
- package/chunks/loadedSettingsAdapter-RUTZVVIA.js +66 -0
- package/chunks/{loop-wakeup-CITGGQHA.js → loop-wakeup-G2EHBRGR.js} +5 -5
- package/chunks/{ls-R5WP4BGZ.js → ls-IDHUVSAG.js} +4 -4
- package/chunks/{lsp-GSICJMMW.js → lsp-FSRYXGFT.js} +2 -2
- package/chunks/{monitor-HKLRS2HQ.js → monitor-QVWEIXU3.js} +33 -26
- package/chunks/nonInteractiveCli-RV2WYPML.js +109 -0
- package/chunks/{notebook-edit-Y6SKSGTT.js → notebook-edit-B26W3FFH.js} +37 -34
- package/chunks/{openaiContentGenerator-J7G2FYJT.js → openaiContentGenerator-6TH7AZGQ.js} +15 -13
- package/chunks/pidfile-KW2QQJZI.js +73 -0
- package/chunks/{pt-TNZRNLQB.js → pt-2THT3YHA.js} +10 -9
- package/chunks/{qwenContentGenerator-5XIEM5GV.js → qwenContentGenerator-5IQAC7RN.js} +33 -27
- package/chunks/{qwenOAuth2-AG3PFFLZ.js → qwenOAuth2-LWLA6MQG.js} +5 -4
- package/chunks/{read-file-J7D552ZJ.js → read-file-CWFAHOI2.js} +11 -10
- package/chunks/{read-mcp-resource-DQQW7H7T.js → read-mcp-resource-PIJF24RO.js} +2 -2
- package/chunks/ripGrep-FTZGDKY4.js +60 -0
- package/chunks/{ru-NIAUBKCN.js → ru-Z67YJHBG.js} +10 -9
- package/chunks/{run-qwen-serve-SGEEVMXD.js → run-qwen-serve-FN2SW5ZI.js} +545 -97
- package/chunks/{scheduler-7CQI3S4Q.js → scheduler-BMS23O3I.js} +31 -25
- package/chunks/{send-message-EE4TWKVU.js → send-message-33PYFMCT.js} +20 -4
- package/chunks/serve-PXFYKL65.js +71 -0
- package/chunks/{server-4QMUWXPW.js → server-BRKALJ4F.js} +4132 -1175
- package/chunks/{session-NRO7UFOY.js → session-AQMISBP4.js} +205 -64
- package/chunks/{settings-SGWRDQSC.js → settings-JCPVUZMB.js} +35 -29
- package/chunks/{shell-62ANGIHL.js → shell-POHCRVN2.js} +31 -25
- package/chunks/{skill-VWAQAWW6.js → skill-QPEVHS6H.js} +13 -12
- package/chunks/spawnChannel-V3QT62TE.js +69 -0
- package/chunks/{src-KUV5J5Q2.js → src-IZSP7L6Y.js} +127 -32
- package/chunks/{startInteractiveUI-6EYJN3JV.js → startInteractiveUI-63KATISO.js} +16762 -16075
- package/chunks/{syntheticOutput-T5YHQ6S2.js → syntheticOutput-YOSWIHDJ.js} +3 -3
- package/chunks/{task-create-BLY7RHXX.js → task-create-NHS2NGB3.js} +9 -7
- package/chunks/{task-list-3QUYNVYR.js → task-list-5UIB564R.js} +7 -6
- package/chunks/{task-stop-U4RATK2V.js → task-stop-HGXZ2VZ3.js} +2 -2
- package/chunks/{task-update-U54O7KJX.js → task-update-IYYWUILG.js} +40 -7
- package/chunks/{team-create-LPOGCPM7.js → team-create-E5O2F3CA.js} +31 -25
- package/chunks/{team-delete-LKBYPASD.js → team-delete-FEKJCU4P.js} +7 -6
- package/chunks/team-plan-approval-2TU4YROB.js +202 -0
- package/chunks/theme-manager-37KOGPJL.js +64 -0
- package/chunks/{todoWrite-OYXKTVYN.js → todoWrite-TKMVZ2HT.js} +4 -4
- package/chunks/{tool-search-YPUFJ3ZQ.js → tool-search-4ZTGNSFI.js} +38 -11
- package/chunks/{trustedFolders-5B24TMEA.js → trustedFolders-RJ5WXJ6L.js} +32 -26
- package/chunks/{validateNonInterActiveAuth-BTDTYOVT.js → validateNonInterActiveAuth-ZWMHZAOK.js} +66 -55
- package/chunks/{web-fetch-EEB5LZYU.js → web-fetch-J4PIW36Q.js} +5 -4
- package/chunks/{workflow-LAWIW5LI.js → workflow-6PG2PC5M.js} +68 -39
- package/chunks/workspace-providers-status-4QIZN2W4.js +68 -0
- package/chunks/workspace-service-CYMCOEIO.js +78 -0
- package/chunks/{write-file-PCV226DJ.js → write-file-R354LGQF.js} +41 -40
- package/chunks/{zh-5EUYXASN.js → zh-SLZNSSZB.js} +32 -10
- package/chunks/{zh-TW-TR3XYGE5.js → zh-TW-P53C2SL5.js} +32 -10
- package/cli.js +6 -6
- package/locales/ca.js +15 -13
- package/locales/de.js +15 -13
- package/locales/en.js +52 -15
- package/locales/fr.js +15 -14
- package/locales/ja.js +15 -14
- package/locales/pt.js +15 -13
- package/locales/ru.js +15 -13
- package/locales/zh-TW.js +50 -14
- package/locales/zh.js +50 -14
- package/node_modules/@qwen-code/audio-capture/package.json +1 -1
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/darwin-x64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/win32-x64/@qwen-code+audio-capture.node +0 -0
- package/package.json +15 -6
- package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
- package/postinstall.js +50 -0
- package/web-shell/assets/{arc-DA7r8Ueo.js → arc-Bd3048nX.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-ZDUxPtZ2.js → architectureDiagram-3BPJPVTR-DyzbzABx.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-vrtOf1kJ.js → blockDiagram-GPEHLZMM-CTjxm9Sy.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-BHFjzIi4.js → c4Diagram-AAUBKEIU-DSOFWNU6.js} +1 -1
- package/web-shell/assets/channel-oVoup_Ci.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-mdeQVz59.js → chunk-2J33WTMH-D_PFdjo2.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BkKMlwBX.js → chunk-4BX2VUAB-52eG6wOT.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-B7bnXNfu.js → chunk-55IACEB6-CGTZfKkC.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DGz8Mm6i.js → chunk-727SXJPM-CZ-qfRUm.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BQAydUNk.js → chunk-AQP2D5EJ-B2dSDcqM.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-GHr2LN_p.js → chunk-FMBD7UC4-Cfy3tyA0.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-7R91lnUx.js → chunk-ND2GUHAM-CApNUpUq.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-aTJD3lSQ.js → chunk-QZHKN3VN-CVBG8kgg.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-B8WsaT2G.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B8WsaT2G.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BTf8t1RL.js → cose-bilkent-S5V4N54A-URd77-_-.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-_sgp3WuA.js → dagre-BM42HDAG-C07H4G9-.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-CROtRy1w.js → diagram-2AECGRRQ-CYbpXrSn.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BqGRzwSc.js → diagram-5GNKFQAL-SI8s6fjX.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CMrcEtA7.js → diagram-KO2AKTUF-mBkC4RTW.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BRydGNW5.js → diagram-LMA3HP47-CyBPDzWJ.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-D0ilgNjV.js → diagram-OG6HWLK6-DwK7kBCu.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-2lnQeJUM.js → erDiagram-TEJ5UH35-Ds1StEUd.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-C_ZMdQiC.js → flowDiagram-I6XJVG4X-BDC4-jHO.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-Dw9V_Ny0.js → ganttDiagram-6RSMTGT7-CV2aHQqf.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-HDXI-F1B.js → gitGraphDiagram-PVQCEYII-B8RcuV_L.js} +1 -1
- package/web-shell/assets/index-B5WZ0qP1.js +717 -0
- package/web-shell/assets/index-CYE1IMd1.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CuB8Ebua.js → infoDiagram-5YYISTIA-DUPoTf50.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-D_tyhVwh.js → ishikawaDiagram-YF4QCWOH-FDYOx9rf.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CgCwJQNU.js → journeyDiagram-JHISSGLW-C5_ohMRp.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-PZUtcbPx.js → kanban-definition-UN3LZRKU-Bn4UnOMG.js} +1 -1
- package/web-shell/assets/{linear-CZqRdJIU.js → linear-Bl0pKQtY.js} +1 -1
- package/web-shell/assets/{mermaid.core-CPW_4UEF.js → mermaid.core-sevQFoji.js} +72 -72
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-D_Y75ID7.js → mindmap-definition-RKZ34NQL-DSH4JZF9.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-Q4dTyLeF.js → pieDiagram-4H26LBE5-acWvdQTD.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-ckw329Ft.js → quadrantDiagram-W4KKPZXB-DlggX4Sm.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-DbVDm4It.js → requirementDiagram-4Y6WPE33--mMqwmV8.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-CHuZ_ecH.js → sankeyDiagram-5OEKKPKP-BtV9tZ77.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DU2YSpq-.js → sequenceDiagram-3UESZ5HK-iDQzPFlj.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CA9PEBUo.js → stateDiagram-AJRCARHV-CsCyQLZ3.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CPapECG9.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-Bhlo4WVc.js → timeline-definition-PNZ67QCA-Dl0rnKvr.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-6xtPLsyl.js → vennDiagram-CIIHVFJN-qF7nTZzA.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-3eozmXPf.js → wardley-L42UT6IY-fWoK9i7F.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BOn6hKss.js → wardleyDiagram-YWT4CUSO-pHGfkMnc.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-BsP4-I_y.js → xychartDiagram-2RQKCTM6-3Doc4Trz.js} +1 -1
- package/web-shell/index.html +18 -2
- package/chunks/MaxSizedBox-QNF3EIGU.js +0 -63
- package/chunks/agent-headless-RQ5BTX3G.js +0 -56
- package/chunks/bridge-JL2PMCIW.js +0 -66
- package/chunks/chunk-5GOVVXEV.js +0 -73
- package/chunks/chunk-BC3C4F3Q.js +0 -40
- package/chunks/chunk-BW4KCQFD.js +0 -1103
- package/chunks/chunk-RKIZXJMB.js +0 -13
- package/chunks/contextCommand-WYU6OQ2F.js +0 -61
- package/chunks/daemon-status-provider-HH2EC5FI.js +0 -65
- package/chunks/headlessSafetyWarnings-TBE35GJ4.js +0 -55
- package/chunks/initializer-2Y7SLOKV.js +0 -61
- package/chunks/list-ZAFHZ7OS.js +0 -65
- package/chunks/loadedSettingsAdapter-6KJXD6M3.js +0 -60
- package/chunks/nonInteractiveCli-5W4GIZQM.js +0 -96
- package/chunks/ripGrep-IEIFIWP4.js +0 -54
- package/chunks/serve-V6GVZR6U.js +0 -65
- package/chunks/spawnChannel-3VHW5EPY.js +0 -63
- package/chunks/theme-manager-LYLGAERF.js +0 -58
- package/chunks/workspace-providers-status-PIAFVYHA.js +0 -62
- package/chunks/workspace-service-YAIOD4HG.js +0 -71
- package/web-shell/assets/channel-iRo68q4Q.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-iHF24a8X.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-iHF24a8X.js +0 -1
- package/web-shell/assets/index-CHmzAWys.css +0 -5
- package/web-shell/assets/index-w6GTOHh1.js +0 -713
- 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-
|
|
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-
|
|
23
|
+
} from "./chunk-5P5XGNYH.js";
|
|
18
24
|
import {
|
|
19
25
|
require_safer
|
|
20
|
-
} from "./chunk-
|
|
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/
|
|
11338
|
+
// node_modules/path-to-regexp/dist/index.js
|
|
11333
11339
|
var require_dist2 = __commonJS({
|
|
11334
|
-
"node_modules/
|
|
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
|
|
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(/[{}()\[\]
|
|
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
|
-
|
|
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, "
|
|
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
|
-
|
|
11372
|
+
exports.TokenData = TokenData;
|
|
11373
|
+
var PathError = class extends TypeError {
|
|
11462
11374
|
static {
|
|
11463
|
-
__name(this, "
|
|
11375
|
+
__name(this, "PathError");
|
|
11464
11376
|
}
|
|
11465
|
-
constructor(
|
|
11466
|
-
|
|
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.
|
|
11386
|
+
exports.PathError = PathError;
|
|
11470
11387
|
function parse(str, options = {}) {
|
|
11471
11388
|
const { encodePath = NOOP_VALUE } = options;
|
|
11472
|
-
const
|
|
11473
|
-
|
|
11474
|
-
|
|
11475
|
-
|
|
11476
|
-
|
|
11477
|
-
|
|
11478
|
-
|
|
11479
|
-
|
|
11480
|
-
|
|
11481
|
-
|
|
11482
|
-
|
|
11483
|
-
|
|
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
|
-
|
|
11488
|
-
|
|
11489
|
-
|
|
11490
|
-
|
|
11491
|
-
|
|
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
|
-
|
|
11496
|
-
|
|
11497
|
-
|
|
11447
|
+
if (value === "{") {
|
|
11448
|
+
writePath();
|
|
11449
|
+
output.push({
|
|
11498
11450
|
type: "group",
|
|
11499
|
-
tokens:
|
|
11451
|
+
tokens: consumeUntil("}")
|
|
11500
11452
|
});
|
|
11501
11453
|
continue;
|
|
11502
11454
|
}
|
|
11503
|
-
|
|
11504
|
-
|
|
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(
|
|
11508
|
-
|
|
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
|
|
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(
|
|
11517
|
-
const
|
|
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
|
-
|
|
11486
|
+
return (data, missing) => {
|
|
11487
|
+
let result = "";
|
|
11529
11488
|
for (const encoder of encoders) {
|
|
11530
|
-
|
|
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 () =>
|
|
11497
|
+
return () => token.value;
|
|
11541
11498
|
if (token.type === "group") {
|
|
11542
11499
|
const fn = tokensToFunction(token.tokens, delimiter, encode);
|
|
11543
|
-
return (data) => {
|
|
11544
|
-
const
|
|
11545
|
-
|
|
11546
|
-
|
|
11547
|
-
|
|
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
|
-
|
|
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
|
-
|
|
11560
|
-
|
|
11561
|
-
|
|
11562
|
-
|
|
11563
|
-
|
|
11564
|
-
|
|
11565
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
11611
|
-
|
|
11612
|
-
|
|
11613
|
-
|
|
11614
|
-
|
|
11615
|
-
|
|
11616
|
-
|
|
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
|
-
|
|
11594
|
+
__name(process2, "process");
|
|
11595
|
+
process2(path3);
|
|
11596
|
+
let pattern = `^(?:${source})`;
|
|
11621
11597
|
if (trailing)
|
|
11622
|
-
pattern +=
|
|
11623
|
-
pattern += end ? "$" :
|
|
11624
|
-
|
|
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
|
|
11629
|
-
|
|
11630
|
-
|
|
11631
|
-
|
|
11632
|
-
|
|
11633
|
-
|
|
11634
|
-
|
|
11635
|
-
|
|
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
|
-
|
|
11639
|
-
init.push(token);
|
|
11612
|
+
result.push(token);
|
|
11640
11613
|
}
|
|
11641
|
-
|
|
11614
|
+
callback(result);
|
|
11642
11615
|
}
|
|
11643
11616
|
__name(flatten, "flatten");
|
|
11644
|
-
function
|
|
11617
|
+
function toRegExpSource(tokens, delimiter, keys, originalPath) {
|
|
11645
11618
|
let result = "";
|
|
11646
11619
|
let backtrack = "";
|
|
11647
|
-
let
|
|
11648
|
-
|
|
11649
|
-
|
|
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
|
-
|
|
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 (
|
|
11658
|
-
throw new
|
|
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,
|
|
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 += `([
|
|
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(
|
|
11674
|
-
function negate(
|
|
11675
|
-
if (
|
|
11676
|
-
|
|
11677
|
-
|
|
11678
|
-
|
|
11679
|
-
|
|
11680
|
-
|
|
11681
|
-
|
|
11682
|
-
|
|
11683
|
-
return `
|
|
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
|
|
11687
|
-
|
|
11688
|
-
|
|
11689
|
-
|
|
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
|
-
|
|
11701
|
+
value += "{" + stringifyTokens(token.tokens, 0) + "}";
|
|
11702
|
+
continue;
|
|
11692
11703
|
}
|
|
11693
|
-
|
|
11694
|
-
|
|
11695
|
-
|
|
11696
|
-
|
|
11697
|
-
if (token.type === "wildcard")
|
|
11698
|
-
|
|
11699
|
-
|
|
11700
|
-
|
|
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(
|
|
11703
|
-
function
|
|
11704
|
-
|
|
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(
|
|
11710
|
-
function
|
|
11711
|
-
if ((
|
|
11712
|
-
return
|
|
11713
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
16187
|
+
`expected the canonical origin ${JSON.stringify(canonical)} without trailing slash, path, userinfo, or query`
|
|
16186
16188
|
);
|
|
16187
16189
|
}
|
|
16188
|
-
origins.add(
|
|
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(
|
|
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,
|