@qwen-code/qwen-code 0.19.4 → 0.19.5-nightly.20260703.b16baf1ff
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/qc-helper/docs/configuration/settings.md +22 -6
- package/bundled/qc-helper/docs/features/commands.md +41 -34
- package/bundled/qc-helper/docs/features/headless.md +19 -18
- package/bundled/qc-helper/docs/qwen-serve.md +34 -0
- package/bundled/qc-helper/docs/support/troubleshooting.md +5 -0
- package/chunks/{MaxSizedBox-ERTNFI22.js → MaxSizedBox-42KZ5OFE.js} +12 -11
- package/chunks/{StandaloneSessionPicker-Y5NGRLRY.js → StandaloneSessionPicker-G4VTICMM.js} +23 -22
- package/chunks/{acpAgent-UMN6OYTR.js → acpAgent-6O25PA3M.js} +82 -78
- package/chunks/{agent-56DZU4ZU.js → agent-SNVTRNV7.js} +9 -8
- package/chunks/{agent-headless-SR7N2IJG.js → agent-headless-LNKVTSBX.js} +9 -8
- package/chunks/{anthropicContentGenerator-5OZFO6WQ.js → anthropicContentGenerator-WL3LJOUB.js} +99 -23
- package/chunks/{artifact-tool-JVZMHA4B.js → artifact-tool-W76WC2JX.js} +1 -1
- package/chunks/{askUserQuestion-CMJZ2F3D.js → askUserQuestion-J3P6TH3V.js} +1 -1
- package/chunks/{bridge-AUHNFOUS.js → bridge-AZZAYKI2.js} +15 -13
- package/chunks/{ca-RYOETBUW.js → ca-HCMB2I54.js} +1 -0
- package/chunks/channel-worker-supervisor-C2J3TIOV.js +665 -0
- package/chunks/{chunk-W2ZOAX7F.js → chunk-26UO4PLG.js} +3 -3
- package/chunks/chunk-2Z43HUXT.js +99 -0
- package/chunks/{chunk-VKGG724L.js → chunk-3GCPLNVF.js} +11 -10
- package/chunks/chunk-3RW4AZJV.js +5063 -0
- package/chunks/{chunk-6AQR7732.js → chunk-46IAL3RB.js} +1 -1
- package/chunks/{chunk-QAFQLTXG.js → chunk-4JWM2UGC.js} +1 -1
- package/chunks/{chunk-C2IHHGBZ.js → chunk-4PGQKUIV.js} +10 -10
- package/chunks/{chunk-PPFWEV7G.js → chunk-4RQIB5UZ.js} +62 -62
- package/chunks/{chunk-L7VH7HQA.js → chunk-4UEWG5AS.js} +29 -4
- package/chunks/{chunk-J3F7X3LW.js → chunk-5B2WNM6V.js} +1 -1
- package/chunks/{chunk-XCUFHOAD.js → chunk-6NHUWPNL.js} +1 -1
- package/chunks/{chunk-HI55Z6PR.js → chunk-7DMQRPC7.js} +401 -58
- package/chunks/{chunk-Q7VHIRDD.js → chunk-7K4G2H2H.js} +1 -1
- package/chunks/{chunk-W6X4FGWX.js → chunk-7XS7CMSU.js} +1 -1
- package/chunks/{chunk-SFN4TEHY.js → chunk-APTOAKV5.js} +4 -4
- package/chunks/{chunk-BNJLLAQ7.js → chunk-AYUVPH6L.js} +1 -1
- package/chunks/chunk-BPFJQGY7.js +193 -0
- package/chunks/{chunk-CUGEBAKG.js → chunk-C47IJLUT.js} +1 -1
- package/chunks/chunk-CXBG27SF.js +35 -0
- package/chunks/{chunk-UQFP2FEF.js → chunk-DG573EOO.js} +1 -1
- package/chunks/{chunk-ND25GXEU.js → chunk-DLJKEPXB.js} +14 -6
- package/chunks/{chunk-MNDTD5E5.js → chunk-DNJ2KHWN.js} +4 -4
- package/chunks/{chunk-KKQWC6WS.js → chunk-DNV4FSN5.js} +1 -1
- package/chunks/chunk-DOYHOG47.js +949 -0
- package/chunks/chunk-E2K45AJ7.js +5448 -0
- package/chunks/{chunk-75X2VLSH.js → chunk-F26BNXI2.js} +26 -5
- package/chunks/{chunk-6TLY5W3B.js → chunk-FB6LGUF4.js} +127 -23
- package/chunks/{chunk-UT5JU5DJ.js → chunk-FEPEMQR4.js} +42 -15
- package/chunks/{chunk-2X2JUE47.js → chunk-FKHE7ZNF.js} +2 -2
- package/chunks/{chunk-YBDZ63KI.js → chunk-FVRLDQ7T.js} +8 -4
- package/chunks/{chunk-DQ74W65K.js → chunk-HCLTQ3PV.js} +47 -20
- package/chunks/{chunk-BQNJBEUA.js → chunk-KFO6YNQT.js} +16 -2
- package/chunks/{chunk-UQYOMM6J.js → chunk-L4CYPEA7.js} +10 -10
- package/chunks/{chunk-MEQWZGK5.js → chunk-L7OJ3ZO3.js} +1 -1
- package/chunks/chunk-LOEYAC6N.js +86 -0
- package/chunks/{chunk-4VZH35PN.js → chunk-MTNTVOJR.js} +2 -0
- package/chunks/{chunk-6CIIP6OE.js → chunk-O2EZ4VRP.js} +3 -3
- package/chunks/{chunk-ZJP5T7IA.js → chunk-ODPWORQZ.js} +1 -1
- package/chunks/{chunk-TTFNVEO5.js → chunk-P5GH4DTN.js} +3 -3
- package/chunks/{chunk-7KPI4LAI.js → chunk-QURP4S5U.js} +3 -3
- package/chunks/{chunk-UANCYOOQ.js → chunk-R6RI2HIC.js} +1 -1
- package/chunks/{chunk-FYKX6XOT.js → chunk-RBLDOR7U.js} +1 -1
- package/chunks/{chunk-EDAGQADF.js → chunk-S6RLAIUR.js} +2 -0
- package/chunks/chunk-SIUQ3YYX.js +78 -0
- package/chunks/{chunk-GICCHL2Q.js → chunk-STP6AYKH.js} +1 -1
- package/chunks/{chunk-HJDF3ZVU.js → chunk-UEGNXWAX.js} +6 -6
- package/chunks/{chunk-PIYV6COW.js → chunk-UTWYG2WA.js} +1 -1
- package/chunks/{chunk-QMIND2AS.js → chunk-UY2TCIZS.js} +15 -1
- package/chunks/{chunk-CG7SVARK.js → chunk-VDIZBM46.js} +2 -2
- package/chunks/{chunk-73H73ASU.js → chunk-VJSWLYUL.js} +1 -1
- package/chunks/{chunk-FNLXLI4I.js → chunk-WMLQKZ64.js} +2 -2
- package/chunks/{chunk-KVPFPC4J.js → chunk-WSAAEPPQ.js} +14 -14
- package/chunks/{chunk-BFG6OZN7.js → chunk-WWOVV2PW.js} +3742 -2737
- package/chunks/{chunk-MKHC4BYZ.js → chunk-XAVV2JAM.js} +21 -5
- package/chunks/{chunk-ZXCVPMIK.js → chunk-XR7W5VRL.js} +167 -54
- package/chunks/{chunk-CS5XYDBO.js → chunk-XS7IHJ63.js} +5 -5
- package/chunks/{chunk-B7KGXIPZ.js → chunk-YCU7QV7Q.js} +11 -4
- package/chunks/{chunk-OJCECIJA.js → chunk-YHTNWGRR.js} +5 -4
- package/chunks/{chunk-7VPC7D7O.js → chunk-YLQSGKAN.js} +2 -2
- package/chunks/{chunk-OAFUMTWW.js → chunk-Z75MFQFL.js} +2 -2
- package/chunks/{chunk-HRZB5CSC.js → chunk-ZRHHQFV4.js} +1 -1
- package/chunks/{computer-use-VWN5HH6A.js → computer-use-UHZAYYGO.js} +9 -8
- package/chunks/{contextCommand-DFFG5KDJ.js → contextCommand-X4WOJ2L4.js} +11 -10
- package/chunks/{cron-create-CSSWJ67I.js → cron-create-6YTCOX6P.js} +1 -1
- package/chunks/{cron-delete-E56CFQ7A.js → cron-delete-E3NIFSUK.js} +1 -1
- package/chunks/{cron-list-BKSINY6Y.js → cron-list-Q64MNQNE.js} +1 -1
- package/chunks/{daemon-5T6IHWJV.js → daemon-EEB2RYOL.js} +23 -0
- package/chunks/{daemon-status-provider-V5UY7O7J.js → daemon-status-provider-YXWNGOAF.js} +18 -16
- package/chunks/{de-HB5NJXGB.js → de-PLLFDERI.js} +1 -0
- package/chunks/{dist-TAVAGZU6.js → dist-AP5V4WYU.js} +54 -14
- package/chunks/{dist-XBOVZ3R5.js → dist-IZP2VV4C.js} +156 -57
- package/chunks/{dist-B7SSDVWT.js → dist-SNXOUPYS.js} +201 -7
- package/chunks/{dist-2HDL5SHQ.js → dist-X4ZDE726.js} +43 -8
- package/chunks/{dist-BL3SL665.js → dist-Z57Q4YF5.js} +1 -1
- package/chunks/{earlyInputCapture-VVYU4FDO.js → earlyInputCapture-3HUGMAFL.js} +9 -8
- package/chunks/{edit-F35PTMBA.js → edit-QDKRNFZK.js} +14 -17
- package/chunks/{en-FZREZFPO.js → en-M4EBUBNU.js} +2 -0
- package/chunks/{enter-worktree-3DIW7EGJ.js → enter-worktree-ODWIPMOP.js} +9 -8
- package/chunks/{enterPlanMode-QNXT77KP.js → enterPlanMode-XROL6G5C.js} +11 -10
- package/chunks/{errors-M53YG76R.js → errors-RCPBWFTG.js} +11 -10
- package/chunks/{exit-worktree-BSDWNWHZ.js → exit-worktree-BIU7P4TR.js} +9 -8
- package/chunks/{exitPlanMode-EL7AY327.js → exitPlanMode-LWZHZ7CF.js} +107 -12
- package/chunks/{fast-path-DUCSMUFW.js → fast-path-7S4NR2WI.js} +6 -4
- package/chunks/{fast-path-settings-UQLRFDQP.js → fast-path-settings-RCRXH2JG.js} +2 -2
- package/chunks/{fr-XY3NQFCM.js → fr-MBMNQSQ6.js} +1 -0
- package/chunks/{gemini-F3IERB37.js → gemini-W7CZCFFV.js} +75 -67
- package/chunks/{geminiContentGenerator-6OULAKFQ.js → geminiContentGenerator-MWZWJAWR.js} +39 -3
- package/chunks/{glob-ZMLFTD4T.js → glob-GZ4LUOQT.js} +9 -8
- package/chunks/{grep-H5X66EI7.js → grep-BZ34WAQJ.js} +9 -8
- package/chunks/{initializer-LEOT2OLH.js → initializer-W4EUD3H7.js} +14 -13
- package/chunks/{ja-J7YAG7SA.js → ja-HFV5QCHR.js} +1 -0
- package/chunks/{list-M3DKXML6.js → list-S325XJ2Y.js} +16 -15
- package/chunks/{loadedSettingsAdapter-OKMQFGGG.js → loadedSettingsAdapter-QP3XBMQI.js} +14 -13
- package/chunks/{loop-wakeup-FPBAVVPR.js → loop-wakeup-G2EHBRGR.js} +2 -2
- package/chunks/{ls-UGWQXPTY.js → ls-IDHUVSAG.js} +1 -1
- package/chunks/{lsp-24WV7NXB.js → lsp-FSRYXGFT.js} +1 -1
- package/chunks/mcp-LRKXM6OS.js +66 -0
- package/chunks/{monitor-ARL5P45R.js → monitor-7C33CWA5.js} +11 -10
- package/chunks/{nonInteractiveCli-NUVLF3YR.js → nonInteractiveCli-FPZS7ROR.js} +46 -43
- package/chunks/{notebook-edit-ANTZ2DDY.js → notebook-edit-ZXQ25NWU.js} +14 -16
- package/chunks/{openaiContentGenerator-TFGMKGHN.js → openaiContentGenerator-FUQ7GNK6.js} +4 -4
- package/chunks/{pidfile-AWTL4C63.js → pidfile-NPZV5ZIA.js} +10 -9
- package/chunks/{pt-6RTAA6SS.js → pt-2THT3YHA.js} +1 -0
- package/chunks/{qwenContentGenerator-6QWAYTWS.js → qwenContentGenerator-LNEWYA52.js} +10 -9
- package/chunks/{read-file-EJY73XQ3.js → read-file-G6GBNSM3.js} +3 -3
- package/chunks/{read-mcp-resource-NCBTPP7X.js → read-mcp-resource-PIJF24RO.js} +1 -1
- package/chunks/{ripGrep-HC4SA6CQ.js → ripGrep-IGOC7PVL.js} +9 -8
- package/chunks/{ru-AUBGJ2C4.js → ru-Z67YJHBG.js} +1 -0
- package/chunks/{run-qwen-serve-AGLZ642J.js → run-qwen-serve-AAA53KS4.js} +131 -38
- package/chunks/{scheduler-TURO7NGY.js → scheduler-SPGJ7ILO.js} +9 -8
- package/chunks/{send-message-3S2NYS3O.js → send-message-33PYFMCT.js} +15 -1
- package/chunks/{serve-5DAMOIDW.js → serve-37UIHUYP.js} +15 -14
- package/chunks/{server-4AGEK2HC.js → server-MFMOYMEB.js} +187 -173
- package/chunks/{session-7ZOQUC4Y.js → session-XRY2CG4Z.js} +47 -44
- package/chunks/{settings-DR4V6L5Y.js → settings-X5GXXGKH.js} +13 -12
- package/chunks/{shell-H5WFKUXH.js → shell-E5HOWJMT.js} +9 -8
- package/chunks/{skill-ANHU5ZCR.js → skill-FELDZMWO.js} +3 -3
- package/chunks/{spawnChannel-VN5LJV7Z.js → spawnChannel-XLTVHAT6.js} +12 -10
- package/chunks/{src-OVZLTVVM.js → src-ZWPLTWTV.js} +21 -10
- package/chunks/{startInteractiveUI-OA22V32P.js → startInteractiveUI-GO6J3SJ7.js} +2609 -2458
- package/chunks/{syntheticOutput-SV7GBHZ5.js → syntheticOutput-YOSWIHDJ.js} +2 -2
- package/chunks/{task-create-W2H2UJCH.js → task-create-NHS2NGB3.js} +3 -2
- package/chunks/{task-list-THBOPV4G.js → task-list-5UIB564R.js} +1 -1
- package/chunks/{task-stop-33FVCNCJ.js → task-stop-HGXZ2VZ3.js} +1 -1
- package/chunks/{task-update-LVFQLXEI.js → task-update-IYYWUILG.js} +34 -2
- package/chunks/{team-create-OYL5CAQO.js → team-create-WWMKZ3UO.js} +9 -8
- package/chunks/{team-delete-NTUQ25UY.js → team-delete-FEKJCU4P.js} +1 -1
- package/chunks/team-plan-approval-CUNEZJOV.js +202 -0
- package/chunks/{theme-manager-XCMPF2SI.js → theme-manager-LRBEA5ID.js} +9 -8
- package/chunks/{todoWrite-SEPO2RI3.js → todoWrite-TKMVZ2HT.js} +1 -1
- package/chunks/{tool-search-YXW55X6Z.js → tool-search-L57ZRBJF.js} +8 -6
- package/chunks/{trustedFolders-TEPGM5YL.js → trustedFolders-DYAOFXN2.js} +10 -9
- package/chunks/{validateNonInterActiveAuth-OQIS7WUE.js → validateNonInterActiveAuth-AB4C2FLG.js} +43 -40
- package/chunks/version-2A66AIB2.js +10 -0
- package/chunks/{web-fetch-OE7LHURA.js → web-fetch-J4PIW36Q.js} +2 -2
- package/chunks/{workflow-RTUWORAP.js → workflow-H7YLGTBI.js} +12 -11
- package/chunks/{workspace-providers-status-DM2XANVB.js → workspace-providers-status-UUIBOTKI.js} +16 -15
- package/chunks/{workspace-service-VKBI2KZD.js → workspace-service-FATHYK5C.js} +21 -20
- package/chunks/workspace-skills-status-KIC3KYPR.js +62 -0
- package/chunks/{write-file-WGALQ53L.js → write-file-ETGUMYAK.js} +14 -18
- package/chunks/yargs-B64EYTCF.js +10 -0
- package/chunks/{zh-V3B4TFWL.js → zh-SLZNSSZB.js} +2 -0
- package/chunks/{zh-TW-6GIKXEAN.js → zh-TW-P53C2SL5.js} +2 -0
- package/cli-entry.js +81 -8
- package/cli.js +348 -55
- package/locales/ca.js +2 -0
- package/locales/de.js +2 -0
- package/locales/en.js +3 -0
- package/locales/fr.js +2 -0
- package/locales/ja.js +2 -0
- package/locales/pt.js +2 -0
- package/locales/ru.js +2 -0
- package/locales/zh-TW.js +3 -0
- package/locales/zh.js +3 -0
- 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 +6 -15
- package/web-shell/assets/{arc-Det5Ccum.js → arc-QjIJgYzv.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-DqNWVFpl.js → architectureDiagram-3BPJPVTR-DJkZ9KoB.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-CYl7tYBi.js → blockDiagram-GPEHLZMM-BlNeekUB.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-DaAEi0NQ.js → c4Diagram-AAUBKEIU-B6FDrE3D.js} +1 -1
- package/web-shell/assets/channel-M6R-XOoS.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-Df2CDEE2.js → chunk-2J33WTMH-CZO5-3og.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-DNBFcyL2.js → chunk-4BX2VUAB-CZ2VJPFe.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-BKjF-0HI.js → chunk-55IACEB6-3zVP6pGF.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DYwAwfIM.js → chunk-727SXJPM-omuP8Zhh.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-C6FswLqy.js → chunk-AQP2D5EJ-BK6Ivmyv.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-DRWAcZSY.js → chunk-FMBD7UC4-NLjjxV0s.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-AoL16mNR.js → chunk-ND2GUHAM-Dc0JTV8t.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-a8PtLMck.js → chunk-QZHKN3VN-ZYp-8jN-.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-B7rcL2Jc.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B7rcL2Jc.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-C4Aeu5qf.js → cose-bilkent-S5V4N54A-BNu1jqy7.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-BOulamjo.js → dagre-BM42HDAG-0AHvPm2v.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-D1wt2ykO.js → diagram-2AECGRRQ-BJsDQdp0.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BRseus-O.js → diagram-5GNKFQAL-C1gNnoxj.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-XSMkNzpZ.js → diagram-KO2AKTUF-FmgehSoq.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-21KNLqoi.js → diagram-LMA3HP47-i7_13R2F.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-DnUI8F5G.js → diagram-OG6HWLK6-DkUUR1x-.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-BVSOMuM2.js → erDiagram-TEJ5UH35-BcwJzw0n.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-fYtDPJsW.js → flowDiagram-I6XJVG4X-CCPgwkQS.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-CmRXosW_.js → ganttDiagram-6RSMTGT7-C3g0sliF.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DPrmySxO.js → gitGraphDiagram-PVQCEYII-DLt4J_oG.js} +1 -1
- package/web-shell/assets/index-9qfvU0_r.css +5 -0
- package/web-shell/assets/index-DasTT8n6.js +717 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-x3VbEuCV.js → infoDiagram-5YYISTIA-DMO0nW8F.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-SmitHRMC.js → ishikawaDiagram-YF4QCWOH-qSN9LjC5.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-BxvA551S.js → journeyDiagram-JHISSGLW-CQZH-jC2.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DNHC16jY.js → kanban-definition-UN3LZRKU-Cu6qk5En.js} +1 -1
- package/web-shell/assets/{linear-CQ6irBL9.js → linear-Dpp4BWJF.js} +1 -1
- package/web-shell/assets/{mermaid.core-DtB6NO1e.js → mermaid.core-DDAcmZsz.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-QKMAgV2v.js → mindmap-definition-RKZ34NQL-G3JXxnUU.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-bvb6dGn6.js → pieDiagram-4H26LBE5-ABQwHraX.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DLgdlG4D.js → quadrantDiagram-W4KKPZXB-BUWZV-ho.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-2M9YH4GF.js → requirementDiagram-4Y6WPE33-XHg5n00A.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-DzwfclTH.js → sankeyDiagram-5OEKKPKP-Bwzw0RtM.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-BvPmTuy2.js → sequenceDiagram-3UESZ5HK-CGYLtnFV.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-BjwUmrJF.js → stateDiagram-AJRCARHV-BG1UhKch.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CSG8MpoN.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-CXzS6qqz.js → timeline-definition-PNZ67QCA-B_tY-Dyz.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-yRSolF5B.js → vennDiagram-CIIHVFJN-Crp_Rw_L.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-ClLJjHPG.js → wardley-L42UT6IY-DR27pFXX.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-VIa6t2p2.js → wardleyDiagram-YWT4CUSO-BM_CRFgm.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-CtmrkezW.js → xychartDiagram-2RQKCTM6-DO2Z2lWl.js} +1 -1
- package/web-shell/index.html +28 -3
- package/chunks/channel-worker-supervisor-A74FV522.js +0 -308
- package/chunks/chunk-MVZXZWGT.js +0 -11323
- package/chunks/chunk-S5EQPDTM.js +0 -91
- package/patches/chrome-devtools-mcp+1.4.0.patch +0 -31
- package/postinstall.js +0 -50
- package/web-shell/assets/channel-Bm0bFauD.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK--NgUfb55.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2--NgUfb55.js +0 -1
- package/web-shell/assets/index-BpKnmyFV.js +0 -717
- package/web-shell/assets/index-fLrtxpOG.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C4L8zXeL.js +0 -1
|
@@ -9,13 +9,60 @@ import {
|
|
|
9
9
|
openQwenAsrRealtimeStream,
|
|
10
10
|
openVoiceStream,
|
|
11
11
|
openVoiceStreamWithRetry
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-C47IJLUT.js";
|
|
13
13
|
import {
|
|
14
14
|
SetupGithubError,
|
|
15
15
|
setupGithub
|
|
16
16
|
} from "./chunk-L7QPM2YD.js";
|
|
17
17
|
import "./chunk-54YZOP7P.js";
|
|
18
|
-
import "./chunk-
|
|
18
|
+
import "./chunk-ZRHHQFV4.js";
|
|
19
|
+
import {
|
|
20
|
+
createWorkspaceProvidersStatusProvider
|
|
21
|
+
} from "./chunk-4UEWG5AS.js";
|
|
22
|
+
import {
|
|
23
|
+
getAuthTypeFromEnv,
|
|
24
|
+
resolveCliGenerationConfig
|
|
25
|
+
} from "./chunk-KFO6YNQT.js";
|
|
26
|
+
import {
|
|
27
|
+
createWorkspaceSkillsStatusProvider
|
|
28
|
+
} from "./chunk-LOEYAC6N.js";
|
|
29
|
+
import "./chunk-CXBG27SF.js";
|
|
30
|
+
import {
|
|
31
|
+
EMPTY_WORKSPACE_VOICE_UPDATE_ERROR,
|
|
32
|
+
WorkspaceVoiceError,
|
|
33
|
+
buildWorkspaceVoiceSettingsWrites,
|
|
34
|
+
buildWorkspaceVoiceStatus,
|
|
35
|
+
createDaemonWorkspaceService,
|
|
36
|
+
hasConfiguredBatchVoiceTranscriptionModel,
|
|
37
|
+
transcribeWorkspaceVoiceAudio,
|
|
38
|
+
validateWorkspaceVoiceState,
|
|
39
|
+
voiceSettingsScopeToWire
|
|
40
|
+
} from "./chunk-FEPEMQR4.js";
|
|
41
|
+
import {
|
|
42
|
+
PermissionRulesValidationError,
|
|
43
|
+
buildPermissionSettings,
|
|
44
|
+
isPermissionRuleType,
|
|
45
|
+
normalizePermissionRules,
|
|
46
|
+
readPermissionRuleSet
|
|
47
|
+
} from "./chunk-4JWM2UGC.js";
|
|
48
|
+
import {
|
|
49
|
+
assertVoiceBaseUrlNetworkAllowed,
|
|
50
|
+
isStreamingVoiceModel,
|
|
51
|
+
resolveVoiceStreamConfig,
|
|
52
|
+
resolveVoiceTranscriptionConfig,
|
|
53
|
+
sanitizeVoiceErrorMessage,
|
|
54
|
+
transcribeVoiceAudio
|
|
55
|
+
} from "./chunk-AYUVPH6L.js";
|
|
56
|
+
import {
|
|
57
|
+
isVoiceEnabled,
|
|
58
|
+
isVoiceMode,
|
|
59
|
+
readVoiceModel
|
|
60
|
+
} from "./chunk-7K4G2H2H.js";
|
|
61
|
+
import "./chunk-NIOPRZNN.js";
|
|
62
|
+
import {
|
|
63
|
+
WorkspacePermissionRulesSessionRequiredError,
|
|
64
|
+
WorkspaceSettingsPartialPersistError
|
|
65
|
+
} from "./chunk-BMFMJINR.js";
|
|
19
66
|
import {
|
|
20
67
|
CAPABILITIES_SCHEMA_VERSION,
|
|
21
68
|
CLIENT_ID_HEADER,
|
|
@@ -60,7 +107,7 @@ import {
|
|
|
60
107
|
setRateLimiter,
|
|
61
108
|
unsafeRevealSecret,
|
|
62
109
|
validateMcpRuntimeServerName
|
|
63
|
-
} from "./chunk-
|
|
110
|
+
} from "./chunk-YCU7QV7Q.js";
|
|
64
111
|
import {
|
|
65
112
|
isLoopbackBind
|
|
66
113
|
} from "./chunk-RNBYOUGV.js";
|
|
@@ -68,58 +115,12 @@ import "./chunk-3HX5LZ6R.js";
|
|
|
68
115
|
import "./chunk-7RYW5LQV.js";
|
|
69
116
|
import {
|
|
70
117
|
createDaemonStatusProvider
|
|
71
|
-
} from "./chunk-
|
|
72
|
-
import "./chunk-
|
|
118
|
+
} from "./chunk-O2EZ4VRP.js";
|
|
119
|
+
import "./chunk-26UO4PLG.js";
|
|
73
120
|
import "./chunk-KHDZHZMH.js";
|
|
74
|
-
import "./chunk-W6X4FGWX.js";
|
|
75
121
|
import {
|
|
76
122
|
createAcpSessionBridge
|
|
77
|
-
} from "./chunk-
|
|
78
|
-
import "./chunk-EWALXUAD.js";
|
|
79
|
-
import {
|
|
80
|
-
EVENT_SCHEMA_VERSION,
|
|
81
|
-
SubscriberLimitExceededError
|
|
82
|
-
} from "./chunk-ALX6BUYW.js";
|
|
83
|
-
import "./chunk-YBDZ63KI.js";
|
|
84
|
-
import {
|
|
85
|
-
createWorkspaceProvidersStatusProvider
|
|
86
|
-
} from "./chunk-L7VH7HQA.js";
|
|
87
|
-
import {
|
|
88
|
-
getAuthTypeFromEnv,
|
|
89
|
-
resolveCliGenerationConfig
|
|
90
|
-
} from "./chunk-BQNJBEUA.js";
|
|
91
|
-
import {
|
|
92
|
-
EMPTY_WORKSPACE_VOICE_UPDATE_ERROR,
|
|
93
|
-
WorkspaceVoiceError,
|
|
94
|
-
buildWorkspaceVoiceSettingsWrites,
|
|
95
|
-
buildWorkspaceVoiceStatus,
|
|
96
|
-
createDaemonWorkspaceService,
|
|
97
|
-
hasConfiguredBatchVoiceTranscriptionModel,
|
|
98
|
-
transcribeWorkspaceVoiceAudio,
|
|
99
|
-
validateWorkspaceVoiceState,
|
|
100
|
-
voiceSettingsScopeToWire
|
|
101
|
-
} from "./chunk-UT5JU5DJ.js";
|
|
102
|
-
import {
|
|
103
|
-
PermissionRulesValidationError,
|
|
104
|
-
buildPermissionSettings,
|
|
105
|
-
isPermissionRuleType,
|
|
106
|
-
normalizePermissionRules,
|
|
107
|
-
readPermissionRuleSet
|
|
108
|
-
} from "./chunk-QAFQLTXG.js";
|
|
109
|
-
import {
|
|
110
|
-
assertVoiceBaseUrlNetworkAllowed,
|
|
111
|
-
isStreamingVoiceModel,
|
|
112
|
-
resolveVoiceStreamConfig,
|
|
113
|
-
resolveVoiceTranscriptionConfig,
|
|
114
|
-
sanitizeVoiceErrorMessage,
|
|
115
|
-
transcribeVoiceAudio
|
|
116
|
-
} from "./chunk-BNJLLAQ7.js";
|
|
117
|
-
import {
|
|
118
|
-
isVoiceEnabled,
|
|
119
|
-
isVoiceMode,
|
|
120
|
-
readVoiceModel
|
|
121
|
-
} from "./chunk-Q7VHIRDD.js";
|
|
122
|
-
import "./chunk-NIOPRZNN.js";
|
|
123
|
+
} from "./chunk-WSAAEPPQ.js";
|
|
123
124
|
import "./chunk-P7M4GA57.js";
|
|
124
125
|
import {
|
|
125
126
|
BranchWhilePromptActiveError,
|
|
@@ -150,42 +151,45 @@ import {
|
|
|
150
151
|
WorkspaceInitSymlinkError,
|
|
151
152
|
WorkspaceMismatchError
|
|
152
153
|
} from "./chunk-T22H4V4R.js";
|
|
154
|
+
import "./chunk-EWALXUAD.js";
|
|
153
155
|
import {
|
|
154
156
|
MAX_WORKSPACE_PATH_LENGTH,
|
|
155
157
|
canonicalizeWorkspace
|
|
156
158
|
} from "./chunk-SEZC2725.js";
|
|
159
|
+
import {
|
|
160
|
+
EVENT_SCHEMA_VERSION,
|
|
161
|
+
SubscriberLimitExceededError
|
|
162
|
+
} from "./chunk-ALX6BUYW.js";
|
|
163
|
+
import "./chunk-FVRLDQ7T.js";
|
|
157
164
|
import {
|
|
158
165
|
STATUS_SCHEMA_VERSION,
|
|
159
166
|
createIdleWorkspaceMemoryStatus,
|
|
160
167
|
mapDomainErrorToErrorKind
|
|
161
|
-
} from "./chunk-
|
|
162
|
-
import
|
|
163
|
-
|
|
164
|
-
WorkspaceSettingsPartialPersistError
|
|
165
|
-
} from "./chunk-BMFMJINR.js";
|
|
168
|
+
} from "./chunk-STP6AYKH.js";
|
|
169
|
+
import "./chunk-2Z43HUXT.js";
|
|
170
|
+
import "./chunk-UFC57OYT.js";
|
|
166
171
|
import {
|
|
167
172
|
getDialogSettingKeys,
|
|
168
173
|
getNestedProperty,
|
|
169
174
|
getSettingDefinition,
|
|
170
175
|
loadSettings,
|
|
171
176
|
validateSettingValue
|
|
172
|
-
} from "./chunk-
|
|
177
|
+
} from "./chunk-XAVV2JAM.js";
|
|
173
178
|
import {
|
|
174
179
|
SUPPORTED_LANGUAGES
|
|
175
|
-
} from "./chunk-
|
|
180
|
+
} from "./chunk-L4CYPEA7.js";
|
|
176
181
|
import "./chunk-TLRYABYP.js";
|
|
177
|
-
import "./chunk-
|
|
178
|
-
import "./chunk-
|
|
182
|
+
import "./chunk-4RQIB5UZ.js";
|
|
183
|
+
import "./chunk-7XS7CMSU.js";
|
|
179
184
|
import {
|
|
180
185
|
getWorkspaceTrustStatus
|
|
181
|
-
} from "./chunk-
|
|
186
|
+
} from "./chunk-ODPWORQZ.js";
|
|
182
187
|
import {
|
|
183
188
|
writeStderrLine
|
|
184
189
|
} from "./chunk-Y6Z2O3WR.js";
|
|
185
190
|
import "./chunk-QYUE6W3T.js";
|
|
186
191
|
import {
|
|
187
192
|
ALL_PROVIDERS,
|
|
188
|
-
APPROVAL_MODES,
|
|
189
193
|
BTW_MAX_INPUT_LENGTH,
|
|
190
194
|
BuiltinAgentRegistry,
|
|
191
195
|
Client,
|
|
@@ -212,22 +216,24 @@ import {
|
|
|
212
216
|
redactUrlCredentials,
|
|
213
217
|
shouldShowStep,
|
|
214
218
|
writeWorkspaceContextFile
|
|
215
|
-
} from "./chunk-
|
|
219
|
+
} from "./chunk-WWOVV2PW.js";
|
|
216
220
|
import "./chunk-5P5XGNYH.js";
|
|
217
|
-
import "./chunk-K5PGHDBN.js";
|
|
218
221
|
import "./chunk-SKAZWEV5.js";
|
|
222
|
+
import "./chunk-K5PGHDBN.js";
|
|
219
223
|
import "./chunk-QOMAHFYI.js";
|
|
220
224
|
import "./chunk-G7OQ3RFJ.js";
|
|
221
225
|
import "./chunk-LKWAVAB5.js";
|
|
222
|
-
import "./chunk-
|
|
223
|
-
import "./chunk-
|
|
226
|
+
import "./chunk-L7OJ3ZO3.js";
|
|
227
|
+
import "./chunk-R6RI2HIC.js";
|
|
224
228
|
import "./chunk-2MPVVENX.js";
|
|
225
229
|
import "./chunk-ZTQ26VBE.js";
|
|
226
230
|
import "./chunk-SJBIFVD2.js";
|
|
227
231
|
import "./chunk-MLZQVCF3.js";
|
|
228
|
-
import "./chunk-S5EQPDTM.js";
|
|
229
232
|
import "./chunk-LQ7TMOCE.js";
|
|
230
233
|
import "./chunk-E5A7LHNN.js";
|
|
234
|
+
import {
|
|
235
|
+
APPROVAL_MODES
|
|
236
|
+
} from "./chunk-BPFJQGY7.js";
|
|
231
237
|
import "./chunk-GO6LNQXT.js";
|
|
232
238
|
import "./chunk-B236XPGF.js";
|
|
233
239
|
import "./chunk-YXK4GPYO.js";
|
|
@@ -246,15 +252,15 @@ import {
|
|
|
246
252
|
recordDaemonHttpRequest,
|
|
247
253
|
recordDaemonHttpResponse,
|
|
248
254
|
withDaemonRequestSpan
|
|
249
|
-
} from "./chunk-
|
|
255
|
+
} from "./chunk-UEGNXWAX.js";
|
|
250
256
|
import "./chunk-E6US47KI.js";
|
|
251
257
|
import "./chunk-UWCTAVOD.js";
|
|
252
258
|
import "./chunk-OFEVLU4C.js";
|
|
253
259
|
import "./chunk-OMX7CUOE.js";
|
|
254
260
|
import "./chunk-MOUXUCXQ.js";
|
|
255
261
|
import "./chunk-BZHLWC6T.js";
|
|
256
|
-
import "./chunk-
|
|
257
|
-
import "./chunk-
|
|
262
|
+
import "./chunk-DG573EOO.js";
|
|
263
|
+
import "./chunk-MTNTVOJR.js";
|
|
258
264
|
import {
|
|
259
265
|
QwenOAuth2Client,
|
|
260
266
|
QwenOAuthPollError,
|
|
@@ -267,6 +273,7 @@ import {
|
|
|
267
273
|
import "./chunk-GLPV75ES.js";
|
|
268
274
|
import "./chunk-22IFUCVR.js";
|
|
269
275
|
import "./chunk-T42ACHFI.js";
|
|
276
|
+
import "./chunk-SIUQ3YYX.js";
|
|
270
277
|
import "./chunk-YTFBURQD.js";
|
|
271
278
|
import "./chunk-YPCPZSZB.js";
|
|
272
279
|
import "./chunk-IRJWHZWU.js";
|
|
@@ -302,8 +309,6 @@ var import_express4 = __toESM(require_express(), 1);
|
|
|
302
309
|
// packages/cli/src/serve/acp-http/index.ts
|
|
303
310
|
init_esbuild_shims();
|
|
304
311
|
import { createHash as createHash3, timingSafeEqual } from "node:crypto";
|
|
305
|
-
import { createRequire } from "node:module";
|
|
306
|
-
import * as path9 from "node:path";
|
|
307
312
|
|
|
308
313
|
// packages/cli/src/serve/acp-http/dispatch.ts
|
|
309
314
|
init_esbuild_shims();
|
|
@@ -1512,8 +1517,8 @@ var PathMutexRegistry = class {
|
|
|
1512
1517
|
async runExclusive(key, fn) {
|
|
1513
1518
|
const previous = this.tails.get(key) ?? Promise.resolve();
|
|
1514
1519
|
let release;
|
|
1515
|
-
const current = new Promise((
|
|
1516
|
-
release =
|
|
1520
|
+
const current = new Promise((resolve4) => {
|
|
1521
|
+
release = resolve4;
|
|
1517
1522
|
});
|
|
1518
1523
|
const tail = previous.catch(() => void 0).then(() => current);
|
|
1519
1524
|
this.tails.set(key, tail);
|
|
@@ -2000,7 +2005,7 @@ async function renameWithRetryLocal(src, dest, retries, delayMs) {
|
|
|
2000
2005
|
const retryable = code === "EPERM" || code === "EACCES";
|
|
2001
2006
|
if (!retryable || attempt === retries) throw err;
|
|
2002
2007
|
await new Promise(
|
|
2003
|
-
(
|
|
2008
|
+
(resolve4) => setTimeout(resolve4, delayMs * 2 ** attempt)
|
|
2004
2009
|
);
|
|
2005
2010
|
}
|
|
2006
2011
|
}
|
|
@@ -8266,9 +8271,9 @@ var SseStream = class {
|
|
|
8266
8271
|
return next;
|
|
8267
8272
|
}
|
|
8268
8273
|
doWrite(chunk) {
|
|
8269
|
-
return new Promise((
|
|
8274
|
+
return new Promise((resolve4, reject) => {
|
|
8270
8275
|
if (this.closed || this.res.writableEnded) {
|
|
8271
|
-
|
|
8276
|
+
resolve4();
|
|
8272
8277
|
return;
|
|
8273
8278
|
}
|
|
8274
8279
|
let ok;
|
|
@@ -8279,7 +8284,7 @@ var SseStream = class {
|
|
|
8279
8284
|
return;
|
|
8280
8285
|
}
|
|
8281
8286
|
if (ok) {
|
|
8282
|
-
|
|
8287
|
+
resolve4();
|
|
8283
8288
|
return;
|
|
8284
8289
|
}
|
|
8285
8290
|
const cleanup = /* @__PURE__ */ __name(() => {
|
|
@@ -8289,11 +8294,11 @@ var SseStream = class {
|
|
|
8289
8294
|
}, "cleanup");
|
|
8290
8295
|
const onDrain = /* @__PURE__ */ __name(() => {
|
|
8291
8296
|
cleanup();
|
|
8292
|
-
|
|
8297
|
+
resolve4();
|
|
8293
8298
|
}, "onDrain");
|
|
8294
8299
|
const onCloseEv = /* @__PURE__ */ __name(() => {
|
|
8295
8300
|
cleanup();
|
|
8296
|
-
|
|
8301
|
+
resolve4();
|
|
8297
8302
|
}, "onCloseEv");
|
|
8298
8303
|
const onErrorEv = /* @__PURE__ */ __name((err) => {
|
|
8299
8304
|
cleanup();
|
|
@@ -8355,14 +8360,14 @@ var WsStream = class {
|
|
|
8355
8360
|
send(message, _id) {
|
|
8356
8361
|
const data = JSON.stringify(message);
|
|
8357
8362
|
const next = this.writeChain.then(
|
|
8358
|
-
() => new Promise((
|
|
8363
|
+
() => new Promise((resolve4, reject) => {
|
|
8359
8364
|
if (this._closed) {
|
|
8360
|
-
|
|
8365
|
+
resolve4();
|
|
8361
8366
|
return;
|
|
8362
8367
|
}
|
|
8363
8368
|
this.ws.send(data, (err) => {
|
|
8364
8369
|
if (err) reject(err);
|
|
8365
|
-
else
|
|
8370
|
+
else resolve4();
|
|
8366
8371
|
});
|
|
8367
8372
|
})
|
|
8368
8373
|
);
|
|
@@ -8667,7 +8672,7 @@ var CdpReverseLink = class {
|
|
|
8667
8672
|
throw { code: -32e3, message: "CDP tunnel closed" };
|
|
8668
8673
|
}
|
|
8669
8674
|
await this.attach();
|
|
8670
|
-
return new Promise((
|
|
8675
|
+
return new Promise((resolve4, reject) => {
|
|
8671
8676
|
if (this.disposed) {
|
|
8672
8677
|
reject({ code: -32e3, message: "CDP tunnel closed" });
|
|
8673
8678
|
return;
|
|
@@ -8678,7 +8683,7 @@ var CdpReverseLink = class {
|
|
|
8678
8683
|
`CDP command id=${id} method=${method} timed out after ${this.commandTimeoutMs}ms`
|
|
8679
8684
|
);
|
|
8680
8685
|
const progressTimer = this.armProgressLog(id, method);
|
|
8681
|
-
this.pending.set(id, { resolve:
|
|
8686
|
+
this.pending.set(id, { resolve: resolve4, reject, timer, progressTimer });
|
|
8682
8687
|
try {
|
|
8683
8688
|
this.log?.(
|
|
8684
8689
|
`qwen serve: /cdp forwarded command id=${id} method=${method} to extension`
|
|
@@ -8705,7 +8710,7 @@ var CdpReverseLink = class {
|
|
|
8705
8710
|
if (this.attached) return Promise.resolve({});
|
|
8706
8711
|
if (this.attachPromise) return this.attachPromise;
|
|
8707
8712
|
this.attachPromise = new Promise(
|
|
8708
|
-
(
|
|
8713
|
+
(resolve4, reject) => {
|
|
8709
8714
|
if (this.disposed) {
|
|
8710
8715
|
reject({ code: -32e3, message: "CDP tunnel closed" });
|
|
8711
8716
|
return;
|
|
@@ -8715,7 +8720,7 @@ var CdpReverseLink = class {
|
|
|
8715
8720
|
this.pendingAttach = {
|
|
8716
8721
|
id,
|
|
8717
8722
|
pending: {
|
|
8718
|
-
resolve: /* @__PURE__ */ __name((result) =>
|
|
8723
|
+
resolve: /* @__PURE__ */ __name((result) => resolve4(result ?? {}), "resolve"),
|
|
8719
8724
|
reject,
|
|
8720
8725
|
timer
|
|
8721
8726
|
}
|
|
@@ -9223,9 +9228,9 @@ var ACP_SESSION_HEADER = "acp-session-id";
|
|
|
9223
9228
|
var CDP_PATH = "/cdp";
|
|
9224
9229
|
var CDP_BRIDGE_CLIENT_NAME = "qwen-cdp-bridge";
|
|
9225
9230
|
var CHROME_DEVTOOLS_MCP_SERVER_NAME = "chrome-devtools";
|
|
9231
|
+
var CDP_MCP_COMMAND_ENV = "QWEN_CDP_MCP_COMMAND";
|
|
9226
9232
|
var RUNTIME_MCP_RETRY_DELAY_MS = 250;
|
|
9227
9233
|
var RUNTIME_MCP_RETRY_ATTEMPTS = 20;
|
|
9228
|
-
var requireFromHere = createRequire(import.meta.url);
|
|
9229
9234
|
function formatCdpEndpointHost(hostname) {
|
|
9230
9235
|
const host = hostname?.trim() || "127.0.0.1";
|
|
9231
9236
|
if (host === "0.0.0.0" || host === "::" || host === "[::]") {
|
|
@@ -9240,25 +9245,23 @@ function isAcpChannelUnavailable(err) {
|
|
|
9240
9245
|
}
|
|
9241
9246
|
__name(isAcpChannelUnavailable, "isAcpChannelUnavailable");
|
|
9242
9247
|
function delay(ms) {
|
|
9243
|
-
return new Promise((
|
|
9248
|
+
return new Promise((resolve4) => setTimeout(resolve4, ms));
|
|
9244
9249
|
}
|
|
9245
9250
|
__name(delay, "delay");
|
|
9246
|
-
function
|
|
9251
|
+
function buildChromeDevToolsMcpRuntimeConfig(localPort, hostname) {
|
|
9247
9252
|
if (localPort === void 0 || !Number.isInteger(localPort) || localPort <= 0) {
|
|
9248
9253
|
return void 0;
|
|
9249
9254
|
}
|
|
9250
|
-
const
|
|
9251
|
-
if (!
|
|
9252
|
-
|
|
9253
|
-
|
|
9254
|
-
|
|
9255
|
-
if (binRelToPkg.startsWith("..") || path9.isAbsolute(binRelToPkg)) {
|
|
9255
|
+
const command = process.env[CDP_MCP_COMMAND_ENV]?.trim();
|
|
9256
|
+
if (!command) {
|
|
9257
|
+
writeStderrLine(
|
|
9258
|
+
`qwen serve: set ${CDP_MCP_COMMAND_ENV} to enable browser automation MCP (chrome-devtools-mcp is no longer bundled)`
|
|
9259
|
+
);
|
|
9256
9260
|
return void 0;
|
|
9257
9261
|
}
|
|
9258
9262
|
return {
|
|
9259
|
-
command
|
|
9263
|
+
command,
|
|
9260
9264
|
args: [
|
|
9261
|
-
binPath,
|
|
9262
9265
|
"--wsEndpoint",
|
|
9263
9266
|
`ws://${formatCdpEndpointHost(hostname)}:${localPort}/cdp`
|
|
9264
9267
|
],
|
|
@@ -9266,26 +9269,6 @@ function buildChromeDevToolsMcpRuntimeConfigFromPackage(localPort, pkgJsonPath,
|
|
|
9266
9269
|
[RUNTIME_MCP_IF_ABSENT_CONFIG_FLAG]: true
|
|
9267
9270
|
};
|
|
9268
9271
|
}
|
|
9269
|
-
__name(buildChromeDevToolsMcpRuntimeConfigFromPackage, "buildChromeDevToolsMcpRuntimeConfigFromPackage");
|
|
9270
|
-
function buildChromeDevToolsMcpRuntimeConfig(localPort, hostname) {
|
|
9271
|
-
try {
|
|
9272
|
-
const pkgJsonPath = requireFromHere.resolve(
|
|
9273
|
-
"chrome-devtools-mcp/package.json"
|
|
9274
|
-
);
|
|
9275
|
-
const pkg = requireFromHere("chrome-devtools-mcp/package.json");
|
|
9276
|
-
return buildChromeDevToolsMcpRuntimeConfigFromPackage(
|
|
9277
|
-
localPort,
|
|
9278
|
-
pkgJsonPath,
|
|
9279
|
-
pkg.bin,
|
|
9280
|
-
hostname
|
|
9281
|
-
);
|
|
9282
|
-
} catch (err) {
|
|
9283
|
-
writeStderrLine(
|
|
9284
|
-
`qwen serve: chrome-devtools-mcp package not resolvable: ${err instanceof Error ? err.message : String(err)}`
|
|
9285
|
-
);
|
|
9286
|
-
return void 0;
|
|
9287
|
-
}
|
|
9288
|
-
}
|
|
9289
9272
|
__name(buildChromeDevToolsMcpRuntimeConfig, "buildChromeDevToolsMcpRuntimeConfig");
|
|
9290
9273
|
var WS_BEARER_SUBPROTOCOL_PREFIX = "qwen-bearer.";
|
|
9291
9274
|
function extractUpgradeBearer(req) {
|
|
@@ -9352,8 +9335,17 @@ function isSameLoopbackOrigin(origin, localPort) {
|
|
|
9352
9335
|
const allowed = /* @__PURE__ */ new Set([
|
|
9353
9336
|
`http://localhost:${localPort}`,
|
|
9354
9337
|
`http://127.0.0.1:${localPort}`,
|
|
9355
|
-
`http://[::1]:${localPort}
|
|
9338
|
+
`http://[::1]:${localPort}`,
|
|
9339
|
+
`https://localhost:${localPort}`,
|
|
9340
|
+
`https://127.0.0.1:${localPort}`,
|
|
9341
|
+
`https://[::1]:${localPort}`
|
|
9356
9342
|
]);
|
|
9343
|
+
if (localPort === 80 || localPort === 443) {
|
|
9344
|
+
for (const host of ["localhost", "127.0.0.1", "[::1]"]) {
|
|
9345
|
+
allowed.add(`http://${host}`);
|
|
9346
|
+
allowed.add(`https://${host}`);
|
|
9347
|
+
}
|
|
9348
|
+
}
|
|
9357
9349
|
return allowed.has(parsed.origin.toLowerCase());
|
|
9358
9350
|
}
|
|
9359
9351
|
__name(isSameLoopbackOrigin, "isSameLoopbackOrigin");
|
|
@@ -9361,7 +9353,7 @@ var MAX_INFLIGHT_MCP_DISPATCH = 8;
|
|
|
9361
9353
|
function mountAcpHttp(app, bridge, opts) {
|
|
9362
9354
|
const enabled = opts.enabled ?? process.env["QWEN_SERVE_ACP_HTTP"] !== "0";
|
|
9363
9355
|
if (!enabled) return void 0;
|
|
9364
|
-
const
|
|
9356
|
+
const path12 = opts.path ?? "/acp";
|
|
9365
9357
|
const dispatcherRef = {};
|
|
9366
9358
|
const registry = new ConnectionRegistry(
|
|
9367
9359
|
(req, clientId) => {
|
|
@@ -9498,7 +9490,7 @@ function mountAcpHttp(app, bridge, opts) {
|
|
|
9498
9490
|
opts.archiveCoordinator ?? new SessionArchiveCoordinator()
|
|
9499
9491
|
);
|
|
9500
9492
|
dispatcherRef.current = dispatcher;
|
|
9501
|
-
app.post(
|
|
9493
|
+
app.post(path12, async (req, res) => {
|
|
9502
9494
|
const ct = req.headers["content-type"];
|
|
9503
9495
|
if (!ct || !ct.startsWith("application/json")) {
|
|
9504
9496
|
res.status(415).json({ error: "Content-Type must be application/json" });
|
|
@@ -9602,7 +9594,7 @@ function mountAcpHttp(app, bridge, opts) {
|
|
|
9602
9594
|
);
|
|
9603
9595
|
});
|
|
9604
9596
|
});
|
|
9605
|
-
app.get(
|
|
9597
|
+
app.get(path12, (req, res) => {
|
|
9606
9598
|
const accept = req.headers["accept"] ?? "";
|
|
9607
9599
|
if (!accept.includes("text/event-stream")) {
|
|
9608
9600
|
res.status(406).json({ error: "Accept header must include text/event-stream" });
|
|
@@ -9688,7 +9680,7 @@ function mountAcpHttp(app, bridge, opts) {
|
|
|
9688
9680
|
onPumpSettled();
|
|
9689
9681
|
});
|
|
9690
9682
|
});
|
|
9691
|
-
app.delete(
|
|
9683
|
+
app.delete(path12, (req, res) => {
|
|
9692
9684
|
const connectionId = headerOf(req, ACP_CONNECTION_HEADER);
|
|
9693
9685
|
if (!connectionId) {
|
|
9694
9686
|
res.status(400).json({ error: "Missing Acp-Connection-Id" });
|
|
@@ -9751,7 +9743,7 @@ function mountAcpHttp(app, bridge, opts) {
|
|
|
9751
9743
|
const extraRoute = opts.extraWsRoutes?.find(
|
|
9752
9744
|
(route) => route.path === url.pathname
|
|
9753
9745
|
);
|
|
9754
|
-
if (url.pathname !==
|
|
9746
|
+
if (url.pathname !== path12 && !isCdpPath && !extraRoute) {
|
|
9755
9747
|
logReject(`unknown-path ${url.pathname}`);
|
|
9756
9748
|
socket.destroy();
|
|
9757
9749
|
return;
|
|
@@ -9765,6 +9757,12 @@ function mountAcpHttp(app, bridge, opts) {
|
|
|
9765
9757
|
`[::1]:${localPort}`,
|
|
9766
9758
|
`host.docker.internal:${localPort}`
|
|
9767
9759
|
]);
|
|
9760
|
+
if (localPort === 80 || localPort === 443) {
|
|
9761
|
+
allowed.add("localhost");
|
|
9762
|
+
allowed.add("127.0.0.1");
|
|
9763
|
+
allowed.add("[::1]");
|
|
9764
|
+
allowed.add("host.docker.internal");
|
|
9765
|
+
}
|
|
9768
9766
|
if (!allowed.has(host)) {
|
|
9769
9767
|
logReject(`host-not-allowed ${host || "(missing)"}`);
|
|
9770
9768
|
socket.write("HTTP/1.1 403 Forbidden\r\n\r\n");
|
|
@@ -10142,7 +10140,7 @@ function mountAcpHttp(app, bridge, opts) {
|
|
|
10142
10140
|
});
|
|
10143
10141
|
}, "upgradeListener");
|
|
10144
10142
|
httpServer.on("upgrade", upgradeListener);
|
|
10145
|
-
writeStderrLine(`qwen serve: /acp WebSocket transport enabled on ${
|
|
10143
|
+
writeStderrLine(`qwen serve: /acp WebSocket transport enabled on ${path12}`);
|
|
10146
10144
|
}
|
|
10147
10145
|
__name(setupWebSocket, "setupWebSocket");
|
|
10148
10146
|
return {
|
|
@@ -10610,7 +10608,7 @@ var CdpTunnelRegistry = class {
|
|
|
10610
10608
|
// packages/cli/src/serve/web-shell-static.ts
|
|
10611
10609
|
init_esbuild_shims();
|
|
10612
10610
|
var import_express2 = __toESM(require_express(), 1);
|
|
10613
|
-
import * as
|
|
10611
|
+
import * as path9 from "node:path";
|
|
10614
10612
|
var WEB_SHELL_CSP_DIRECTIVES = [
|
|
10615
10613
|
"default-src 'self'",
|
|
10616
10614
|
"script-src 'self' 'unsafe-inline' 'unsafe-eval' 'wasm-unsafe-eval'",
|
|
@@ -10638,7 +10636,7 @@ function isDocumentNavigation(req) {
|
|
|
10638
10636
|
}
|
|
10639
10637
|
__name(isDocumentNavigation, "isDocumentNavigation");
|
|
10640
10638
|
function createSendIndex(webShellDir, frameAncestors = []) {
|
|
10641
|
-
const indexPath =
|
|
10639
|
+
const indexPath = path9.join(webShellDir, "index.html");
|
|
10642
10640
|
const csp = buildWebShellCsp(frameAncestors);
|
|
10643
10641
|
return (res) => {
|
|
10644
10642
|
res.status(200).set("Content-Security-Policy", csp).set("X-Content-Type-Options", "nosniff").set("Referrer-Policy", "no-referrer").set(
|
|
@@ -10674,7 +10672,7 @@ function mountWebShellAssets(app, webShellDir, frameAncestors = []) {
|
|
|
10674
10672
|
const sendIndex = createSendIndex(webShellDir, frameAncestors);
|
|
10675
10673
|
app.use(
|
|
10676
10674
|
"/assets",
|
|
10677
|
-
import_express2.default.static(
|
|
10675
|
+
import_express2.default.static(path9.join(webShellDir, "assets"), {
|
|
10678
10676
|
index: false,
|
|
10679
10677
|
immutable: true,
|
|
10680
10678
|
maxAge: "1y"
|
|
@@ -12233,14 +12231,14 @@ function registerWorkspaceExtensionRoutes(app, deps) {
|
|
|
12233
12231
|
code: "extension_queue_full"
|
|
12234
12232
|
});
|
|
12235
12233
|
}, "sendExtensionQueueFull");
|
|
12236
|
-
const withExtensionTimeout = /* @__PURE__ */ __name(async (promise, timeoutMs, operation) => await new Promise((
|
|
12234
|
+
const withExtensionTimeout = /* @__PURE__ */ __name(async (promise, timeoutMs, operation) => await new Promise((resolve4, reject) => {
|
|
12237
12235
|
const timeout = setTimeout(() => {
|
|
12238
12236
|
reject(new Error(`${operation} timed out after ${timeoutMs}ms`));
|
|
12239
12237
|
}, timeoutMs);
|
|
12240
12238
|
promise.then(
|
|
12241
12239
|
(value) => {
|
|
12242
12240
|
clearTimeout(timeout);
|
|
12243
|
-
|
|
12241
|
+
resolve4(value);
|
|
12244
12242
|
},
|
|
12245
12243
|
(err) => {
|
|
12246
12244
|
clearTimeout(timeout);
|
|
@@ -13356,7 +13354,7 @@ __name(registerPermissionRoutes, "registerPermissionRoutes");
|
|
|
13356
13354
|
// packages/cli/src/serve/routes/session.ts
|
|
13357
13355
|
init_esbuild_shims();
|
|
13358
13356
|
import * as crypto2 from "node:crypto";
|
|
13359
|
-
import * as
|
|
13357
|
+
import * as path10 from "node:path";
|
|
13360
13358
|
|
|
13361
13359
|
// packages/cli/src/serve/server/prompt-deadline.ts
|
|
13362
13360
|
init_esbuild_shims();
|
|
@@ -13696,7 +13694,7 @@ function registerSessionRoutes(app, deps) {
|
|
|
13696
13694
|
withMutableSession("POST /session/:id/cd", async (req, res, sessionId) => {
|
|
13697
13695
|
const body = safeBody(req);
|
|
13698
13696
|
const targetPath = body["path"];
|
|
13699
|
-
if (typeof targetPath !== "string" || targetPath.length === 0 || !
|
|
13697
|
+
if (typeof targetPath !== "string" || targetPath.length === 0 || !path10.isAbsolute(targetPath)) {
|
|
13700
13698
|
res.status(400).json({
|
|
13701
13699
|
error: "`path` is required and must be an absolute path",
|
|
13702
13700
|
code: "invalid_path"
|
|
@@ -14162,7 +14160,7 @@ function registerSessionRoutes(app, deps) {
|
|
|
14162
14160
|
);
|
|
14163
14161
|
app.get("/workspace/:id/sessions", async (req, res) => {
|
|
14164
14162
|
const workspaceCwd = req.params["id"] ?? "";
|
|
14165
|
-
if (!
|
|
14163
|
+
if (!path10.isAbsolute(workspaceCwd)) {
|
|
14166
14164
|
res.status(400).json({ error: "`:id` must decode to an absolute workspace path" });
|
|
14167
14165
|
return;
|
|
14168
14166
|
}
|
|
@@ -15572,9 +15570,9 @@ function registerSseEventsRoutes(app, deps) {
|
|
|
15572
15570
|
let writeChain = Promise.resolve();
|
|
15573
15571
|
const trackWriterIdle = writerIdleTimeoutMs !== void 0 && writerIdleTimeoutMs > 0;
|
|
15574
15572
|
let lastWriteAt = trackWriterIdle ? Date.now() : 0;
|
|
15575
|
-
const doWrite = /* @__PURE__ */ __name((chunk) => new Promise((
|
|
15573
|
+
const doWrite = /* @__PURE__ */ __name((chunk) => new Promise((resolve4, reject) => {
|
|
15576
15574
|
if (res.writableEnded) {
|
|
15577
|
-
|
|
15575
|
+
resolve4();
|
|
15578
15576
|
return;
|
|
15579
15577
|
}
|
|
15580
15578
|
let ok;
|
|
@@ -15586,19 +15584,19 @@ function registerSseEventsRoutes(app, deps) {
|
|
|
15586
15584
|
}
|
|
15587
15585
|
if (ok) {
|
|
15588
15586
|
if (trackWriterIdle) lastWriteAt = Date.now();
|
|
15589
|
-
|
|
15587
|
+
resolve4();
|
|
15590
15588
|
return;
|
|
15591
15589
|
}
|
|
15592
15590
|
const onDrain = /* @__PURE__ */ __name(() => {
|
|
15593
15591
|
res.off("close", onClose);
|
|
15594
15592
|
res.off("error", onError);
|
|
15595
15593
|
if (trackWriterIdle) lastWriteAt = Date.now();
|
|
15596
|
-
|
|
15594
|
+
resolve4();
|
|
15597
15595
|
}, "onDrain");
|
|
15598
15596
|
const onClose = /* @__PURE__ */ __name(() => {
|
|
15599
15597
|
res.off("drain", onDrain);
|
|
15600
15598
|
res.off("error", onError);
|
|
15601
|
-
|
|
15599
|
+
resolve4();
|
|
15602
15600
|
}, "onClose");
|
|
15603
15601
|
const onError = /* @__PURE__ */ __name((err) => {
|
|
15604
15602
|
res.off("drain", onDrain);
|
|
@@ -15720,7 +15718,7 @@ __name(registerSseEventsRoutes, "registerSseEventsRoutes");
|
|
|
15720
15718
|
// packages/cli/src/serve/routes/a2ui-action.ts
|
|
15721
15719
|
init_esbuild_shims();
|
|
15722
15720
|
import * as fsp4 from "node:fs/promises";
|
|
15723
|
-
import * as
|
|
15721
|
+
import * as path11 from "node:path";
|
|
15724
15722
|
var A2UI_MIME = "application/a2ui+json";
|
|
15725
15723
|
var ACTION_TOOL = "action";
|
|
15726
15724
|
var CALL_TIMEOUT_MS = 15e3;
|
|
@@ -15740,7 +15738,7 @@ __name(usableServerConfig, "usableServerConfig");
|
|
|
15740
15738
|
async function findFromSettingsFile(workspaceCwd) {
|
|
15741
15739
|
try {
|
|
15742
15740
|
const raw = await fsp4.readFile(
|
|
15743
|
-
|
|
15741
|
+
path11.join(workspaceCwd, ".qwen", "settings.json"),
|
|
15744
15742
|
"utf8"
|
|
15745
15743
|
);
|
|
15746
15744
|
const settings = JSON.parse(raw);
|
|
@@ -15898,17 +15896,17 @@ __name(resolveBridgeFsFactory, "resolveBridgeFsFactory");
|
|
|
15898
15896
|
// packages/cli/src/serve/server/telemetry.ts
|
|
15899
15897
|
init_esbuild_shims();
|
|
15900
15898
|
function resolveDaemonTelemetryRoute(req) {
|
|
15901
|
-
const
|
|
15902
|
-
if (req.method === "POST" &&
|
|
15899
|
+
const path12 = req.path.replace(/\/$/, "") || "/";
|
|
15900
|
+
if (req.method === "POST" && path12 === "/session") {
|
|
15903
15901
|
return { route: "POST /session" };
|
|
15904
15902
|
}
|
|
15905
|
-
if (req.method === "POST" &&
|
|
15903
|
+
if (req.method === "POST" && path12 === "/sessions/delete") {
|
|
15906
15904
|
return { route: "POST /sessions/delete" };
|
|
15907
15905
|
}
|
|
15908
|
-
if (req.method === "GET" &&
|
|
15906
|
+
if (req.method === "GET" && path12 === "/daemon/status") {
|
|
15909
15907
|
return { route: "GET /daemon/status" };
|
|
15910
15908
|
}
|
|
15911
|
-
const sessionAction =
|
|
15909
|
+
const sessionAction = path12.match(
|
|
15912
15910
|
/^\/session\/([^/]+)\/(load|resume|prompt|cancel|recap|btw|mid-turn-message|model|shell|detach|rewind|approval-mode|language|a2ui-action)$/
|
|
15913
15911
|
);
|
|
15914
15912
|
const sessionActionId = sessionAction?.[1];
|
|
@@ -15919,14 +15917,14 @@ function resolveDaemonTelemetryRoute(req) {
|
|
|
15919
15917
|
sessionId: sessionActionId
|
|
15920
15918
|
};
|
|
15921
15919
|
}
|
|
15922
|
-
const sessionMetadata =
|
|
15920
|
+
const sessionMetadata = path12.match(/^\/session\/([^/]+)\/metadata$/);
|
|
15923
15921
|
if (sessionMetadata?.[1] && req.method === "PATCH") {
|
|
15924
15922
|
return {
|
|
15925
15923
|
route: "PATCH /session/:id/metadata",
|
|
15926
15924
|
sessionId: sessionMetadata[1]
|
|
15927
15925
|
};
|
|
15928
15926
|
}
|
|
15929
|
-
const sessionPermission =
|
|
15927
|
+
const sessionPermission = path12.match(
|
|
15930
15928
|
/^\/session\/([^/]+)\/permission\/([^/]+)$/
|
|
15931
15929
|
);
|
|
15932
15930
|
if (sessionPermission?.[1] && sessionPermission?.[2] && req.method === "POST") {
|
|
@@ -15937,7 +15935,7 @@ function resolveDaemonTelemetryRoute(req) {
|
|
|
15937
15935
|
...rawRequestId.length <= MAX_CLIENT_ID_LENGTH && CLIENT_ID_RE.test(rawRequestId) ? { permissionRequestId: rawRequestId } : {}
|
|
15938
15936
|
};
|
|
15939
15937
|
}
|
|
15940
|
-
const globalPermission =
|
|
15938
|
+
const globalPermission = path12.match(/^\/permission\/([^/]+)$/);
|
|
15941
15939
|
if (globalPermission?.[1] && req.method === "POST") {
|
|
15942
15940
|
const rawRequestId = globalPermission[1];
|
|
15943
15941
|
return {
|
|
@@ -15945,66 +15943,66 @@ function resolveDaemonTelemetryRoute(req) {
|
|
|
15945
15943
|
...rawRequestId.length <= MAX_CLIENT_ID_LENGTH && CLIENT_ID_RE.test(rawRequestId) ? { permissionRequestId: rawRequestId } : {}
|
|
15946
15944
|
};
|
|
15947
15945
|
}
|
|
15948
|
-
const deleteSession =
|
|
15946
|
+
const deleteSession = path12.match(/^\/session\/([^/]+)$/);
|
|
15949
15947
|
const deleteSessionId = deleteSession?.[1];
|
|
15950
15948
|
if (deleteSessionId && req.method === "DELETE") {
|
|
15951
15949
|
return { route: "DELETE /session/:id", sessionId: deleteSessionId };
|
|
15952
15950
|
}
|
|
15953
|
-
if (req.method === "GET" && /^\/workspace\/[^/]+\/sessions$/.test(
|
|
15951
|
+
if (req.method === "GET" && /^\/workspace\/[^/]+\/sessions$/.test(path12)) {
|
|
15954
15952
|
return { route: "GET /workspace/:id/sessions" };
|
|
15955
15953
|
}
|
|
15956
|
-
if (req.method === "POST" &&
|
|
15954
|
+
if (req.method === "POST" && path12 === "/workspace/init") {
|
|
15957
15955
|
return { route: "POST /workspace/init" };
|
|
15958
15956
|
}
|
|
15959
|
-
if (req.method === "POST" &&
|
|
15957
|
+
if (req.method === "POST" && path12 === "/workspace/setup-github") {
|
|
15960
15958
|
return { route: "POST /workspace/setup-github" };
|
|
15961
15959
|
}
|
|
15962
|
-
if (req.method === "POST" &&
|
|
15960
|
+
if (req.method === "POST" && path12 === "/workspace/reload") {
|
|
15963
15961
|
return { route: "POST /workspace/reload" };
|
|
15964
15962
|
}
|
|
15965
|
-
const mcpRestart =
|
|
15963
|
+
const mcpRestart = path12.match(/^\/workspace\/mcp\/([^/]+)\/restart$/);
|
|
15966
15964
|
if (mcpRestart?.[1] && req.method === "POST") {
|
|
15967
15965
|
return { route: "POST /workspace/mcp/:server/restart" };
|
|
15968
15966
|
}
|
|
15969
|
-
if (req.method === "POST" &&
|
|
15967
|
+
if (req.method === "POST" && path12 === "/workspace/mcp/servers") {
|
|
15970
15968
|
return { route: "POST /workspace/mcp/servers" };
|
|
15971
15969
|
}
|
|
15972
|
-
const mcpDelete =
|
|
15970
|
+
const mcpDelete = path12.match(/^\/workspace\/mcp\/servers\/([^/]+)$/);
|
|
15973
15971
|
if (mcpDelete?.[1] && req.method === "DELETE") {
|
|
15974
15972
|
return { route: "DELETE /workspace/mcp/servers/:name" };
|
|
15975
15973
|
}
|
|
15976
|
-
if (req.method === "POST" &&
|
|
15974
|
+
if (req.method === "POST" && path12 === "/workspace/auth/device-flow") {
|
|
15977
15975
|
return { route: "POST /workspace/auth/device-flow" };
|
|
15978
15976
|
}
|
|
15979
|
-
const deviceFlowDelete =
|
|
15977
|
+
const deviceFlowDelete = path12.match(
|
|
15980
15978
|
/^\/workspace\/auth\/device-flow\/([^/]+)$/
|
|
15981
15979
|
);
|
|
15982
15980
|
if (deviceFlowDelete?.[1] && req.method === "DELETE") {
|
|
15983
15981
|
return { route: "DELETE /workspace/auth/device-flow/:id" };
|
|
15984
15982
|
}
|
|
15985
|
-
const toolEnable =
|
|
15983
|
+
const toolEnable = path12.match(/^\/workspace\/tools\/([^/]+)\/enable$/);
|
|
15986
15984
|
if (toolEnable?.[1] && req.method === "POST") {
|
|
15987
15985
|
return { route: "POST /workspace/tools/:name/enable" };
|
|
15988
15986
|
}
|
|
15989
|
-
if (
|
|
15987
|
+
if (path12 === "/workspace/settings") {
|
|
15990
15988
|
if (req.method === "GET") return { route: "GET /workspace/settings" };
|
|
15991
15989
|
if (req.method === "POST") return { route: "POST /workspace/settings" };
|
|
15992
15990
|
}
|
|
15993
|
-
if (
|
|
15991
|
+
if (path12 === "/workspace/permissions") {
|
|
15994
15992
|
if (req.method === "GET") return { route: "GET /workspace/permissions" };
|
|
15995
15993
|
if (req.method === "POST") return { route: "POST /workspace/permissions" };
|
|
15996
15994
|
}
|
|
15997
|
-
if (
|
|
15995
|
+
if (path12 === "/workspace/trust") {
|
|
15998
15996
|
if (req.method === "GET") return { route: "GET /workspace/trust" };
|
|
15999
15997
|
}
|
|
16000
|
-
if (req.method === "POST" &&
|
|
15998
|
+
if (req.method === "POST" && path12 === "/workspace/trust/request") {
|
|
16001
15999
|
return { route: "POST /workspace/trust/request" };
|
|
16002
16000
|
}
|
|
16003
|
-
if (
|
|
16001
|
+
if (path12 === "/workspace/voice") {
|
|
16004
16002
|
if (req.method === "GET") return { route: "GET /workspace/voice" };
|
|
16005
16003
|
if (req.method === "POST") return { route: "POST /workspace/voice" };
|
|
16006
16004
|
}
|
|
16007
|
-
if (req.method === "POST" &&
|
|
16005
|
+
if (req.method === "POST" && path12 === "/workspace/voice/transcribe") {
|
|
16008
16006
|
return { route: "POST /workspace/voice/transcribe" };
|
|
16009
16007
|
}
|
|
16010
16008
|
return void 0;
|
|
@@ -16030,7 +16028,7 @@ function daemonTelemetryMiddleware(boundWorkspace) {
|
|
|
16030
16028
|
...route.permissionRequestId ? { permissionRequestId: route.permissionRequestId } : {},
|
|
16031
16029
|
...clientId ? { clientId } : {}
|
|
16032
16030
|
},
|
|
16033
|
-
async (span) => await new Promise((
|
|
16031
|
+
async (span) => await new Promise((resolve4, reject) => {
|
|
16034
16032
|
let done = false;
|
|
16035
16033
|
const finish = /* @__PURE__ */ __name(() => {
|
|
16036
16034
|
if (done) return;
|
|
@@ -16041,7 +16039,7 @@ function daemonTelemetryMiddleware(boundWorkspace) {
|
|
|
16041
16039
|
route.route,
|
|
16042
16040
|
res.statusCode
|
|
16043
16041
|
);
|
|
16044
|
-
|
|
16042
|
+
resolve4();
|
|
16045
16043
|
}, "finish");
|
|
16046
16044
|
res.once("finish", finish);
|
|
16047
16045
|
res.once("close", finish);
|
|
@@ -16364,10 +16362,10 @@ function installRateLimiter(app, opts, daemonLog) {
|
|
|
16364
16362
|
{ tier, key: key.slice(0, 64) }
|
|
16365
16363
|
);
|
|
16366
16364
|
} : void 0,
|
|
16367
|
-
onError: daemonLog ? (err,
|
|
16365
|
+
onError: daemonLog ? (err, path12) => {
|
|
16368
16366
|
daemonLog.warn(
|
|
16369
16367
|
`rate limiter error (fail-open): ${err instanceof Error ? err.message : String(err)}`,
|
|
16370
|
-
{ path:
|
|
16368
|
+
{ path: path12 }
|
|
16371
16369
|
);
|
|
16372
16370
|
} : void 0
|
|
16373
16371
|
});
|
|
@@ -16391,8 +16389,23 @@ function installSelfOriginStripMiddleware(app, getPort) {
|
|
|
16391
16389
|
`http://127.0.0.1:${port}`,
|
|
16392
16390
|
`http://localhost:${port}`,
|
|
16393
16391
|
`http://[::1]:${port}`,
|
|
16394
|
-
`http://host.docker.internal:${port}
|
|
16392
|
+
`http://host.docker.internal:${port}`,
|
|
16393
|
+
`https://127.0.0.1:${port}`,
|
|
16394
|
+
`https://localhost:${port}`,
|
|
16395
|
+
`https://[::1]:${port}`,
|
|
16396
|
+
`https://host.docker.internal:${port}`
|
|
16395
16397
|
]);
|
|
16398
|
+
if (port === 80 || port === 443) {
|
|
16399
|
+
for (const host of [
|
|
16400
|
+
"127.0.0.1",
|
|
16401
|
+
"localhost",
|
|
16402
|
+
"[::1]",
|
|
16403
|
+
"host.docker.internal"
|
|
16404
|
+
]) {
|
|
16405
|
+
cachedSelfOrigins.add(`http://${host}`);
|
|
16406
|
+
cachedSelfOrigins.add(`https://${host}`);
|
|
16407
|
+
}
|
|
16408
|
+
}
|
|
16396
16409
|
}
|
|
16397
16410
|
if (cachedSelfOrigins.has(origin)) {
|
|
16398
16411
|
delete req.headers.origin;
|
|
@@ -16766,6 +16779,7 @@ function createServeApp(opts, getPort = () => opts.port, deps = {}) {
|
|
|
16766
16779
|
contextFilename: deps.contextFilename ?? "QWEN.md",
|
|
16767
16780
|
statusProvider,
|
|
16768
16781
|
workspaceProvidersStatusProvider: createWorkspaceProvidersStatusProvider(),
|
|
16782
|
+
workspaceSkillsStatusProvider: createWorkspaceSkillsStatusProvider(),
|
|
16769
16783
|
isChannelLive: /* @__PURE__ */ __name(() => bridge.isChannelLive(), "isChannelLive"),
|
|
16770
16784
|
persistDisabledTools: deps.persistDisabledTools ?? (async () => {
|
|
16771
16785
|
throw new Error(
|
|
@@ -17129,7 +17143,7 @@ export {
|
|
|
17129
17143
|
*
|
|
17130
17144
|
* CDP browser-level emulation layer for the Plan C "CDP tunnel" (issue #5626).
|
|
17131
17145
|
*
|
|
17132
|
-
* A
|
|
17146
|
+
* A CDP client connects to the daemon's `/cdp`
|
|
17133
17147
|
* WebSocket expecting a browser-level CDP endpoint, but behind the tunnel is a
|
|
17134
17148
|
* single real tab driven via `chrome.debugger` (page-level only). This class
|
|
17135
17149
|
* synthesizes the missing browser-level topology so puppeteer connects and gets
|
|
@@ -17153,7 +17167,7 @@ export {
|
|
|
17153
17167
|
*
|
|
17154
17168
|
* `/cdp` endpoint glue for the Plan C "CDP tunnel" (issue #5626).
|
|
17155
17169
|
*
|
|
17156
|
-
* Per
|
|
17170
|
+
* Per CDP client connection this wires:
|
|
17157
17171
|
*
|
|
17158
17172
|
* puppeteer --raw CDP--> CdpBrowserEmulator --forwardToTab--> CdpReverseLink
|
|
17159
17173
|
* |
|