@qwen-code/qwen-code 0.19.2 → 0.19.3-nightly.20260701.a974594d7
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/extension-creator/SKILL.md +357 -0
- package/bundled/loop/SKILL.md +34 -10
- package/bundled/loop/SKILL.test.ts +52 -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 +864 -0
- package/bundled/loop/loop-tick-resolver.ts +416 -0
- package/bundled/qc-helper/SKILL.md +26 -19
- package/bundled/qc-helper/docs/configuration/auth.md +11 -11
- package/bundled/qc-helper/docs/configuration/model-providers.md +13 -13
- package/bundled/qc-helper/docs/configuration/settings.md +77 -75
- package/bundled/qc-helper/docs/features/channels/plugins.md +1 -1
- package/bundled/qc-helper/docs/features/commands.md +108 -77
- package/bundled/qc-helper/docs/features/hooks.md +6 -1
- package/bundled/qc-helper/docs/features/memory.md +53 -1
- 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 +24 -2
- package/bundled/qc-helper/docs/support/tos-privacy.md +16 -3
- package/bundled/qc-helper/docs/support/troubleshooting.md +6 -0
- package/chunks/{MaxSizedBox-7RERNLFK.js → MaxSizedBox-UZHJ73JB.js} +29 -27
- package/chunks/{StandaloneSessionPicker-S22XBSN6.js → StandaloneSessionPicker-GGUIZWCE.js} +42 -37
- package/chunks/{acpAgent-4MCETHF2.js → acpAgent-QYZFICEZ.js} +1292 -332
- package/chunks/{agent-K3ENVYSB.js → agent-2EN7YNSW.js} +24 -23
- package/chunks/{agent-headless-HO3V3A3A.js → agent-headless-SLTEZ5LV.js} +24 -23
- package/chunks/{anthropicContentGenerator-E3TQ5XJJ.js → anthropicContentGenerator-CA3JTAMO.js} +33 -12
- package/chunks/{artifact-tool-QA4KRO3B.js → artifact-tool-RM7WINJO.js} +3 -3
- package/chunks/{askUserQuestion-HMWXW6VN.js → askUserQuestion-J3P6QAJ7.js} +2 -2
- package/chunks/{bridge-4LV2HBH2.js → bridge-HZVAUTMX.js} +29 -28
- package/chunks/{ca-7WC7ELX6.js → ca-RYOETBUW.js} +10 -9
- package/chunks/{chunk-JXQ23SNT.js → chunk-2JKEQWDZ.js} +623 -78
- package/chunks/chunk-32MCHZQC.js +73 -0
- package/chunks/{chunk-PXFFKNCO.js → chunk-35FH347N.js} +5308 -2500
- package/chunks/{chunk-5JZLXFPD.js → chunk-3O2BJMFW.js} +11 -11
- package/chunks/{chunk-2JD55C6G.js → chunk-3TK7FSCP.js} +2 -2
- package/chunks/{chunk-USGMPVOY.js → chunk-4722VFFU.js} +19 -10
- package/chunks/chunk-6FIWYVN4.js +4932 -0
- package/chunks/{chunk-I2RFAW6Q.js → chunk-7SP275SH.js} +7 -5
- package/chunks/{chunk-5R4SBCX6.js → chunk-AIBPG5MB.js} +3 -3
- package/chunks/{chunk-C4K3FEQ2.js → chunk-AVQDCKNF.js} +124 -21
- package/chunks/{chunk-OTBK43JR.js → chunk-B236XPGF.js} +1 -1
- package/chunks/{chunk-WA5OJGFL.js → chunk-B5MPZI4K.js} +458 -125
- package/chunks/{chunk-5DWXLGOM.js → chunk-BJBWRCSK.js} +1 -1
- package/chunks/{chunk-4W4T77MO.js → chunk-BLAE2TCO.js} +109 -6
- package/chunks/chunk-BMFMJINR.js +45 -0
- package/chunks/{chunk-T2VDEFUU.js → chunk-BZHLWC6T.js} +2 -2
- package/chunks/{chunk-XU5P23GN.js → chunk-CA4ML3VH.js} +3 -3
- package/chunks/{chunk-WGAEWQTF.js → chunk-DBR7PF4B.js} +1 -2
- package/chunks/{chunk-S566HKUS.js → chunk-DHXWNSJA.js} +15 -1
- package/chunks/{chunk-LLFFKXZZ.js → chunk-DJ25MIU2.js} +167 -43
- package/chunks/{chunk-KBXLIVWQ.js → chunk-DX3TKXNT.js} +2 -2
- package/chunks/{chunk-OIC6S73E.js → chunk-E5I6YSNO.js} +1 -1
- package/chunks/{chunk-TXVGVZYR.js → chunk-ESVSWG6Z.js} +3 -3
- package/chunks/{chunk-EX4W6ZYG.js → chunk-EUURTJY7.js} +1 -1
- package/chunks/{chunk-QBZ22PQX.js → chunk-EWALXUAD.js} +3 -1
- package/chunks/{chunk-F6XNTYNE.js → chunk-FQDMX5IL.js} +30 -307
- package/chunks/{chunk-3QFE4OTE.js → chunk-FR3II765.js} +4 -4
- package/chunks/{chunk-VYFMN7C6.js → chunk-FV4SQ54H.js} +382 -55
- package/chunks/{chunk-ZD3NW5KL.js → chunk-FZY7NH37.js} +63 -9
- package/chunks/{chunk-CI5O6SQL.js → chunk-G525INVW.js} +4 -4
- package/chunks/{chunk-CGOMICBE.js → chunk-GDIG7TMG.js} +34 -1
- package/chunks/{chunk-R2BXK7SX.js → chunk-GHOTR7HL.js} +6 -1
- package/chunks/{chunk-TZM5JIAX.js → chunk-GZKQ36JS.js} +10 -7
- package/chunks/{chunk-BS64PXY3.js → chunk-HIYUAXBG.js} +1 -1
- package/chunks/{chunk-TMBPDHXD.js → chunk-HTWHAN44.js} +1 -1
- package/chunks/{chunk-EL5IHQON.js → chunk-HUGAEYZR.js} +6 -27
- package/chunks/{chunk-2BIF2NVV.js → chunk-HWG4XLD7.js} +2 -2
- package/chunks/{chunk-I5T6PIBQ.js → chunk-I4MXURND.js} +1076 -954
- package/chunks/{chunk-JTYRZODB.js → chunk-IBEM64M4.js} +39 -11
- package/chunks/{chunk-XKBP7M7A.js → chunk-IKO44NAT.js} +149 -31
- package/chunks/{chunk-2BAQ3ACS.js → chunk-JERW36RG.js} +404 -4
- package/chunks/{chunk-TOEGRAVX.js → chunk-JV7A66DR.js} +28 -16
- package/chunks/{chunk-3RJ3ZPPR.js → chunk-KKQWC6WS.js} +7 -7
- package/chunks/{chunk-EXMX5YHG.js → chunk-KXVVXAAC.js} +1 -1
- package/chunks/{chunk-Z7XXFPGP.js → chunk-LDWTYE33.js} +1 -1
- package/chunks/{chunk-X6EDWN44.js → chunk-LWGLBVWA.js} +1 -1
- package/chunks/{chunk-NYOHZYHM.js → chunk-LXEW6BHF.js} +45 -3
- package/chunks/{chunk-BGUDAULQ.js → chunk-LXGWLOCM.js} +5 -5
- package/chunks/{chunk-ZUAXI2OA.js → chunk-M2U5NM24.js} +188 -11366
- package/chunks/{chunk-BNXANYLH.js → chunk-MOUXUCXQ.js} +81 -1
- package/chunks/{chunk-FPACXT7T.js → chunk-MTJVHQDP.js} +534 -164
- package/chunks/{chunk-UAARJR2G.js → chunk-N4V4VBP6.js} +2 -2
- package/chunks/chunk-NIOPRZNN.js +27 -0
- package/chunks/{chunk-2TJ3YN6Q.js → chunk-NOYV2NXI.js} +517 -490
- package/chunks/{chunk-PRYMDRBV.js → chunk-NPQWQYU6.js} +1 -1
- package/chunks/{chunk-J6AW7O5D.js → chunk-NVTRORSK.js} +2 -2
- package/chunks/{chunk-PF523XJX.js → chunk-OE5J6UA7.js} +1 -1
- package/chunks/{chunk-RS4HRC75.js → chunk-OEY3YAL2.js} +99 -8
- package/chunks/{chunk-R36VMVEP.js → chunk-PLQTLKMR.js} +5 -5
- package/chunks/{chunk-UN3C6GOR.js → chunk-PPFWEV7G.js} +10 -108
- package/chunks/chunk-Q3JOGB4U.js +481 -0
- package/chunks/{chunk-HG6YKEBI.js → chunk-Q7TDHJ2G.js} +192 -30
- package/chunks/{chunk-EW6C27XX.js → chunk-QHHNFG22.js} +9 -3
- package/chunks/chunk-QYUE6W3T.js +123 -0
- package/chunks/{chunk-GZCJS5WH.js → chunk-SJBIFVD2.js} +2 -2
- package/chunks/{chunk-3UALQ56H.js → chunk-T42ACHFI.js} +1 -1
- package/chunks/chunk-T44AF4I6.js +690 -0
- package/chunks/{chunk-DBZUXSSV.js → chunk-TMILTLP3.js} +6 -6
- package/chunks/{chunk-EEEZIVFJ.js → chunk-TOAUDIS7.js} +1 -1
- package/chunks/chunk-UAKXW3DN.js +30 -0
- package/chunks/{chunk-VQRYPFCV.js → chunk-V5YJAUHW.js} +10 -460
- package/chunks/{chunk-D5E5TMYH.js → chunk-VHRREANT.js} +16 -2
- package/chunks/{chunk-5RVSM6NW.js → chunk-VN4CKYUW.js} +1 -1
- package/chunks/chunk-VXGPYF7U.js +37 -0
- package/chunks/{chunk-UAARVVBI.js → chunk-WGY3GIPP.js} +1 -1
- package/chunks/{chunk-GYZQA2FO.js → chunk-WJAY4WXR.js} +1 -1
- package/chunks/chunk-XKSCTXPK.js +167 -0
- package/chunks/chunk-YCEHOJZJ.js +840 -0
- package/chunks/{chunk-BG4BIP7F.js → chunk-YCRTJYSQ.js} +4 -2
- package/chunks/{chunk-CGEGHF2C.js → chunk-YPCPZSZB.js} +1 -1
- package/chunks/chunk-YTFBURQD.js +313 -0
- package/chunks/{chunk-HGNSRCRB.js → chunk-YXK4GPYO.js} +1 -1
- package/chunks/{chunk-OQHQHJRK.js → chunk-Z34RYLRO.js} +151 -4775
- package/chunks/chunk-ZGSV5ORL.js +11273 -0
- package/chunks/{computer-use-6BBRNT6S.js → computer-use-FCNWHVPW.js} +103 -49
- package/chunks/{contextCommand-UJAJ6N57.js → contextCommand-FVFMZZEU.js} +26 -25
- package/chunks/{cron-create-4KQE6YLH.js → cron-create-IY5NMIHQ.js} +4 -4
- package/chunks/{cron-delete-THME66UP.js → cron-delete-OLNEQWKO.js} +6 -6
- package/chunks/{cron-list-7A54SJ5N.js → cron-list-YAUAUV24.js} +5 -5
- package/chunks/{daemon-status-provider-CSL3BUOY.js → daemon-status-provider-42JEXENZ.js} +32 -32
- package/chunks/{de-ACHALDED.js → de-HB5NJXGB.js} +10 -9
- package/chunks/{dist-BD27IA3L.js → dist-4FCNM6KJ.js} +2 -2
- package/chunks/{dist-OD2FY543.js → dist-K4XZILIO.js} +1 -1
- package/chunks/{dist-BOOH5JWN.js → dist-SU6L7ZNJ.js} +114 -9
- package/chunks/{dist-QHJRBCMP.js → dist-UKPWQJCL.js} +44 -2
- package/chunks/{dist-QFFZWACU.js → dist-VD7HXTML.js} +20 -9
- package/chunks/{earlyInputCapture-X6KMCSHD.js → earlyInputCapture-FFFEC6P4.js} +25 -24
- package/chunks/{edit-7J6WXARF.js → edit-32ILSGZY.js} +72 -30
- package/chunks/{en-NCUBOJOY.js → en-U3LWGSFX.js} +19 -9
- package/chunks/{enter-worktree-KULCKJPJ.js → enter-worktree-XWZKIN6A.js} +24 -23
- package/chunks/{enterPlanMode-H2CIOLMH.js → enterPlanMode-LPFFY7BJ.js} +24 -23
- package/chunks/{errors-6G2JYR54.js → errors-UXBPYPI2.js} +26 -25
- package/chunks/{exit-worktree-ECBWBVC5.js → exit-worktree-IBS4UIU7.js} +24 -23
- package/chunks/{exitPlanMode-DQV56GTW.js → exitPlanMode-JA72YHII.js} +24 -23
- package/chunks/{fast-path-35JJFS3C.js → fast-path-7UU67Y2W.js} +30 -13
- package/chunks/{fast-path-settings-TSVI53EB.js → fast-path-settings-UQLRFDQP.js} +3 -2
- package/chunks/{fr-GVKZ27MF.js → fr-XY3NQFCM.js} +10 -9
- package/chunks/{gemini-NDTG7WAX.js → gemini-GMVKJNMX.js} +211 -105
- package/chunks/{geminiContentGenerator-XTG6SFLA.js → geminiContentGenerator-7NIFF2L4.js} +4 -4
- package/chunks/{glob-SJ2JBZK4.js → glob-4NJCW5HI.js} +24 -23
- package/chunks/{grep-BRMWFEWR.js → grep-PAIMLQEL.js} +24 -23
- package/chunks/{initializer-P5AXF7PV.js → initializer-R6KU4VYM.js} +31 -28
- package/chunks/{ja-FKZ2WZ4D.js → ja-J7YAG7SA.js} +10 -9
- package/chunks/{keychain-token-storage-CSYMNRPP.js → keychain-token-storage-GPAKRDKQ.js} +2 -2
- package/chunks/{list-6COK34BP.js → list-H7LXAO64.js} +32 -29
- package/chunks/{loadedSettingsAdapter-XIUTN245.js → loadedSettingsAdapter-H27JMTLU.js} +30 -27
- package/chunks/{loop-wakeup-33GPXJLA.js → loop-wakeup-Y3OIRQFM.js} +7 -7
- package/chunks/{ls-BYQY7RVV.js → ls-TVJEYS7O.js} +4 -4
- package/chunks/{lsp-X54RO4IV.js → lsp-JZSDVR3F.js} +2 -2
- package/chunks/{monitor-DH7KFSJV.js → monitor-JSIHDPXP.js} +24 -23
- package/chunks/nonInteractiveCli-Y4CHOETG.js +100 -0
- package/chunks/{notebook-edit-D4R4ZLMA.js → notebook-edit-SHRNL2UM.js} +52 -23
- package/chunks/{openaiContentGenerator-F74IPQ6E.js → openaiContentGenerator-ORZZ7VFO.js} +13 -12
- package/chunks/{pt-SY5NCFGR.js → pt-6RTAA6SS.js} +10 -9
- package/chunks/{qwenContentGenerator-ATTK5P4D.js → qwenContentGenerator-H643PL2G.js} +26 -25
- package/chunks/{qwenOAuth2-K4AASPCV.js → qwenOAuth2-OI2B7PES.js} +5 -4
- package/chunks/{read-file-767G23OY.js → read-file-5PRNPTTY.js} +8 -8
- package/chunks/{read-mcp-resource-I5HCZJ6X.js → read-mcp-resource-QTXGKTEV.js} +2 -2
- package/chunks/{ripGrep-4OMMGSWX.js → ripGrep-JIKZMABJ.js} +24 -23
- package/chunks/{ru-FWNXJG4F.js → ru-AUBGJ2C4.js} +10 -9
- package/chunks/{run-qwen-serve-REKSTYRA.js → run-qwen-serve-PQV7QOHZ.js} +284 -52
- package/chunks/{scheduler-UNTFDQLG.js → scheduler-OS3R5MGU.js} +24 -23
- package/chunks/{send-message-2DAFXEYP.js → send-message-DKGHWSTF.js} +2 -2
- package/chunks/{serve-KZ56QB5S.js → serve-LVYZDKCZ.js} +31 -29
- package/chunks/{server-BV5TZUMU.js → server-P4YIH35I.js} +11458 -8447
- package/chunks/{session-OIBXFSGD.js → session-DE4TZBKH.js} +195 -58
- package/chunks/{settings-WJTCBIRA.js → settings-DFTYMJYF.js} +30 -27
- package/chunks/{shell-WC52IBHW.js → shell-3GNQLNV7.js} +24 -23
- package/chunks/{skill-U7F7JR4M.js → skill-NCNG4KKZ.js} +38 -11
- package/chunks/{spawnChannel-EI2E5BCW.js → spawnChannel-DHRIMDVL.js} +26 -25
- package/chunks/{src-4F6FBZFI.js → src-PNZYGM3R.js} +104 -28
- package/chunks/{startInteractiveUI-SFRVB3CE.js → startInteractiveUI-P6GZBFQW.js} +2817 -2500
- package/chunks/{syntheticOutput-PPS3HDVA.js → syntheticOutput-X7L5HWLN.js} +3 -3
- package/chunks/{task-create-OUYCA553.js → task-create-AWEUI4GI.js} +6 -6
- package/chunks/{task-list-WAX7I2IA.js → task-list-KZ3VJLDU.js} +5 -5
- package/chunks/{task-stop-CAIL6FNH.js → task-stop-GUNOZKJ5.js} +2 -2
- package/chunks/{task-update-AHEO5OUT.js → task-update-Y56GP6DU.js} +6 -6
- package/chunks/{team-create-3WC7CIIW.js → team-create-6JMW3KQK.js} +24 -23
- package/chunks/{team-delete-HGHFG23B.js → team-delete-6AFRGDJY.js} +5 -5
- package/chunks/{theme-manager-DICFCT3P.js → theme-manager-FEHQO22G.js} +25 -24
- package/chunks/{todoWrite-IFBMN3FH.js → todoWrite-JRS6NOEU.js} +4 -4
- package/chunks/{tool-search-L5K7HLER.js → tool-search-IXAEKS7J.js} +101 -16
- package/chunks/trustedFolders-SJRXNHZE.js +76 -0
- package/chunks/types-QX5C3CHJ.js +12 -0
- package/chunks/{validateNonInterActiveAuth-GCH4Z6KI.js → validateNonInterActiveAuth-HCH7OBDH.js} +56 -51
- package/chunks/{web-fetch-B5IIQ5TT.js → web-fetch-RELNL37A.js} +29 -15
- package/chunks/{workflow-OB3AND7I.js → workflow-M2COBI7R.js} +38 -32
- package/chunks/{workspace-providers-status-ZIR5EPOO.js → workspace-providers-status-GOCWYDMK.js} +32 -29
- package/chunks/workspace-service-34C7SUBU.js +75 -0
- package/chunks/{write-file-SEXBNDZM.js → write-file-E52WRXZL.js} +67 -31
- package/chunks/{zh-RBEGQVQT.js → zh-F5T4WWZO.js} +19 -9
- package/chunks/{zh-TW-QGAVRXT3.js → zh-TW-LKLBTZHE.js} +19 -9
- package/cli-entry.js +20 -9
- package/cli.js +6 -6
- package/locales/ca.js +15 -13
- package/locales/de.js +15 -13
- package/locales/en.js +31 -13
- package/locales/fr.js +16 -14
- package/locales/ja.js +15 -14
- package/locales/pt.js +15 -13
- package/locales/ru.js +15 -13
- package/locales/zh-TW.js +28 -12
- package/locales/zh.js +28 -12
- package/node_modules/@qwen-code/audio-capture/dist/index.d.ts +35 -0
- package/node_modules/@qwen-code/audio-capture/dist/index.js +48 -0
- package/node_modules/@qwen-code/audio-capture/dist/index.js.map +1 -0
- package/node_modules/@qwen-code/audio-capture/dist/platform.d.ts +7 -0
- package/node_modules/@qwen-code/audio-capture/dist/platform.js +18 -0
- package/node_modules/@qwen-code/audio-capture/dist/platform.js.map +1 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/LICENSE +21 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/README.md +58 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/SECURITY.md +5 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/bin.js +84 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/build-test.js +19 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/index.js +6 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/node-gyp-build.js +207 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/optional.js +7 -0
- package/node_modules/@qwen-code/audio-capture/node_modules/node-gyp-build/package.json +43 -0
- package/node_modules/@qwen-code/audio-capture/package.json +30 -0
- 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/linux-arm64/@qwen-code+audio-capture.node +0 -0
- package/node_modules/@qwen-code/audio-capture/prebuilds/linux-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 +18 -6
- package/patches/chrome-devtools-mcp+1.4.0.patch +31 -0
- package/postinstall.js +50 -0
- package/web-shell/assets/{arc-D_ae_Y9k.js → arc-C2DILvUl.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-BMLRjppa.js → architectureDiagram-3BPJPVTR-b8gZ2cNw.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-qVDQC8KL.js → blockDiagram-GPEHLZMM-BuRpghMj.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CxWS6MBd.js → c4Diagram-AAUBKEIU-2ItdhFmE.js} +1 -1
- package/web-shell/assets/channel-eRvn2UA3.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-BtNuY5Yp.js → chunk-2J33WTMH-B1QXa0q3.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BU-x368d.js → chunk-4BX2VUAB-DXfhKlNq.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DRgTLvBu.js → chunk-55IACEB6-ClSNjxLo.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-D2aElv7q.js → chunk-727SXJPM-Dsh2wisB.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BwHCMRQ0.js → chunk-AQP2D5EJ-C1TkY5AR.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-BMyPH-ku.js → chunk-FMBD7UC4-CGtN9XR6.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BNKTstUf.js → chunk-ND2GUHAM-BHiPi1SS.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-gD3vsFId.js → chunk-QZHKN3VN-CzG3I5o1.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-YZNwy1rx.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-YZNwy1rx.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BG9FAsXE.js → cose-bilkent-S5V4N54A-EgrIoH_K.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-Cy1sR7om.js → dagre-BM42HDAG-BUnpdX8S.js} +1 -1
- package/web-shell/assets/default-aEtf0G7-.svg +1 -0
- package/web-shell/assets/{diagram-2AECGRRQ-Bxi1I_Vu.js → diagram-2AECGRRQ-BlLUCVYu.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BGCJjO6y.js → diagram-5GNKFQAL-FG-enmjQ.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-CMTeLXp7.js → diagram-KO2AKTUF-BlzmTONk.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BN1wyAGh.js → diagram-LMA3HP47-CoBQ8mIx.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-UYSG_zcp.js → diagram-OG6HWLK6-DvxV6sX8.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DqXL08lw.js → erDiagram-TEJ5UH35-Jq1tpAoj.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BPJ9SFji.js → flowDiagram-I6XJVG4X-CbtYOry5.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-BEd9Pnms.js → ganttDiagram-6RSMTGT7-ZEn2VEKR.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DrNRH3oi.js → gitGraphDiagram-PVQCEYII-BZh-LkhJ.js} +1 -1
- package/web-shell/assets/index-5FhE0ORO.css +5 -0
- package/web-shell/assets/index-CDTGmqVm.js +720 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-CFYBrkVI.js → infoDiagram-5YYISTIA-B9HuZygK.js} +1 -1
- package/web-shell/assets/insert-DmRbh9Rv.svg +1 -0
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Dxsddth7.js → ishikawaDiagram-YF4QCWOH-D76cNpYG.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-DxaDK80t.js → journeyDiagram-JHISSGLW-6bGo7P1t.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-Q0jQCOct.js → kanban-definition-UN3LZRKU-DuYyRBvB.js} +1 -1
- package/web-shell/assets/{linear-DGGM2kcP.js → linear-CpdSW1BC.js} +1 -1
- package/web-shell/assets/{mermaid.core-ByoxnWut.js → mermaid.core-s5xbZMMj.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-C0ZseHsi.js → mindmap-definition-RKZ34NQL-go01fZ2y.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-MQXNhl5A.js → pieDiagram-4H26LBE5-BfuZiEHO.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DIR4ee2A.js → quadrantDiagram-W4KKPZXB-DsoINqV6.js} +1 -1
- package/web-shell/assets/queue-DWpnpFgW.svg +1 -0
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BTR0UdYQ.js → requirementDiagram-4Y6WPE33-B7FU4LiU.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-sfnhMELN.js → sankeyDiagram-5OEKKPKP-BEDjFnGB.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DXczHOHH.js → sequenceDiagram-3UESZ5HK-gzmmL5tK.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-DdE_KQFH.js → stateDiagram-AJRCARHV-BtHD4IN_.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DFy6gLDd.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-DIc61uE8.js → timeline-definition-PNZ67QCA-T_8gmMCf.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BF7ODmxB.js → vennDiagram-CIIHVFJN-DdjuqnjO.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-3pc1MEaw.js → wardley-L42UT6IY-Cgtrvb37.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-9jnPcZuP.js → wardleyDiagram-YWT4CUSO-BW3f3-yW.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-DcthaZK6.js → xychartDiagram-2RQKCTM6-BUS9IKkc.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-B6HQGTYR.js +0 -410
- package/chunks/chunk-RKIZXJMB.js +0 -13
- package/chunks/headlessSafetyWarnings-LJ6FJX77.js +0 -57
- package/chunks/nonInteractiveCli-7575LBXP.js +0 -91
- package/chunks/workspace-service-OM5D4OI2.js +0 -60
- package/web-shell/assets/channel-DYPNiTww.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-p_g25Tni.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-p_g25Tni.js +0 -1
- package/web-shell/assets/index-CpOXWDPh.js +0 -714
- package/web-shell/assets/index-oVK7qhre.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BHUSEndU.js +0 -1
|
@@ -1,14 +1,12 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import {
|
|
4
|
-
MID_TURN_QUEUE_DRAIN_METHOD
|
|
5
|
-
} from "./chunk-QBZ22PQX.js";
|
|
6
3
|
import {
|
|
7
4
|
MCP_RESTART_SERVER_DEADLINE_MS
|
|
8
5
|
} from "./chunk-P7M4GA57.js";
|
|
9
6
|
import {
|
|
10
7
|
BranchWhilePromptActiveError,
|
|
11
8
|
CancelSentinelCollisionError,
|
|
9
|
+
CdWhilePromptActiveError,
|
|
12
10
|
InvalidClientIdError,
|
|
13
11
|
InvalidPermissionOptionError,
|
|
14
12
|
InvalidRewindTargetError,
|
|
@@ -24,7 +22,10 @@ import {
|
|
|
24
22
|
SessionShellDisabledError,
|
|
25
23
|
WorkspaceMismatchError,
|
|
26
24
|
isNotCurrentlyGeneratingCancelError
|
|
27
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-DHXWNSJA.js";
|
|
26
|
+
import {
|
|
27
|
+
MID_TURN_QUEUE_DRAIN_METHOD
|
|
28
|
+
} from "./chunk-EWALXUAD.js";
|
|
28
29
|
import {
|
|
29
30
|
canonicalizeWorkspace
|
|
30
31
|
} from "./chunk-SEZC2725.js";
|
|
@@ -35,7 +36,7 @@ import {
|
|
|
35
36
|
} from "./chunk-ALX6BUYW.js";
|
|
36
37
|
import {
|
|
37
38
|
defaultSpawnChannelFactory
|
|
38
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-KXVVXAAC.js";
|
|
39
40
|
import {
|
|
40
41
|
ClientSideConnection,
|
|
41
42
|
PROTOCOL_VERSION,
|
|
@@ -49,15 +50,15 @@ import {
|
|
|
49
50
|
STATUS_SCHEMA_VERSION,
|
|
50
51
|
createIdleWorkspaceExtensionsStatus,
|
|
51
52
|
createIdleWorkspaceHooksStatus
|
|
52
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-VHRREANT.js";
|
|
53
54
|
import {
|
|
54
55
|
ShellExecutionService,
|
|
55
56
|
TrustGateError
|
|
56
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-35FH347N.js";
|
|
57
58
|
import {
|
|
58
59
|
DAEMON_TRACEPARENT_META_KEY,
|
|
59
60
|
DAEMON_TRACESTATE_META_KEY
|
|
60
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-B5MPZI4K.js";
|
|
61
62
|
import {
|
|
62
63
|
init_esbuild_shims
|
|
63
64
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -1099,7 +1100,7 @@ function sliceLineRange(content, startLine, endLine) {
|
|
|
1099
1100
|
}
|
|
1100
1101
|
__name(sliceLineRange, "sliceLineRange");
|
|
1101
1102
|
var BridgeClient = class {
|
|
1102
|
-
constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted) {
|
|
1103
|
+
constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted, clientMcpSender) {
|
|
1103
1104
|
this.resolveEntry = resolveEntry;
|
|
1104
1105
|
this.resolvePendingRestoreEvents = resolvePendingRestoreEvents;
|
|
1105
1106
|
this.mediator = mediator;
|
|
@@ -1108,6 +1109,7 @@ var BridgeClient = class {
|
|
|
1108
1109
|
this.fileSystem = fileSystem;
|
|
1109
1110
|
this.onModelPromoted = onModelPromoted;
|
|
1110
1111
|
this.onModePromoted = onModePromoted;
|
|
1112
|
+
this.clientMcpSender = clientMcpSender;
|
|
1111
1113
|
}
|
|
1112
1114
|
static {
|
|
1113
1115
|
__name(this, "BridgeClient");
|
|
@@ -1254,6 +1256,9 @@ var BridgeClient = class {
|
|
|
1254
1256
|
* treats that as "drain unsupported" and stops asking.
|
|
1255
1257
|
*/
|
|
1256
1258
|
async extMethod(method, params) {
|
|
1259
|
+
if (method === SERVE_CONTROL_EXT_METHODS.clientMcpMessage) {
|
|
1260
|
+
return this.handleClientMcpMessage(params);
|
|
1261
|
+
}
|
|
1257
1262
|
if (method !== MID_TURN_QUEUE_DRAIN_METHOD) {
|
|
1258
1263
|
throw RequestError.methodNotFound(method);
|
|
1259
1264
|
}
|
|
@@ -1283,6 +1288,52 @@ var BridgeClient = class {
|
|
|
1283
1288
|
}
|
|
1284
1289
|
return { messages };
|
|
1285
1290
|
}
|
|
1291
|
+
/**
|
|
1292
|
+
* Reverse tool channel (issue #5626, Phase 2) — answer the child's
|
|
1293
|
+
* `qwen/control/client_mcp/message` ext-method. The child's session
|
|
1294
|
+
* `McpClientManager` calls this when its agent drives a client-hosted
|
|
1295
|
+
* (extension) MCP server: `params` carries the advertised `server` name and
|
|
1296
|
+
* the JSON-RPC `payload` (initialize / tools/list / tools/call / a
|
|
1297
|
+
* notification). We resolve the per-WS-connection sender via the injected
|
|
1298
|
+
* `clientMcpSender` lookup, deliver the payload over the daemon WS, and
|
|
1299
|
+
* return the correlated response as `{ payload }`.
|
|
1300
|
+
*
|
|
1301
|
+
* Rejects with ACP `methodNotFound` when no `clientMcpSender` is wired (Mode
|
|
1302
|
+
* A / tests can't host a client MCP server), and `invalidParams` when the
|
|
1303
|
+
* frame is malformed or the named server is no longer hosted (e.g. the
|
|
1304
|
+
* extension disconnected mid-turn) — the agent's `SdkControlClientTransport`
|
|
1305
|
+
* surfaces that as a transport error rather than hanging.
|
|
1306
|
+
*/
|
|
1307
|
+
async handleClientMcpMessage(params) {
|
|
1308
|
+
if (!this.clientMcpSender) {
|
|
1309
|
+
throw RequestError.methodNotFound(
|
|
1310
|
+
SERVE_CONTROL_EXT_METHODS.clientMcpMessage
|
|
1311
|
+
);
|
|
1312
|
+
}
|
|
1313
|
+
const server = params["server"];
|
|
1314
|
+
if (typeof server !== "string" || server.length === 0) {
|
|
1315
|
+
throw RequestError.invalidParams(
|
|
1316
|
+
void 0,
|
|
1317
|
+
"`server` must be a non-empty string"
|
|
1318
|
+
);
|
|
1319
|
+
}
|
|
1320
|
+
const payload = params["payload"];
|
|
1321
|
+
if (payload === null || typeof payload !== "object") {
|
|
1322
|
+
throw RequestError.invalidParams(
|
|
1323
|
+
void 0,
|
|
1324
|
+
"`payload` must be a JSON-RPC message object"
|
|
1325
|
+
);
|
|
1326
|
+
}
|
|
1327
|
+
const send = this.clientMcpSender(server);
|
|
1328
|
+
if (!send) {
|
|
1329
|
+
throw RequestError.invalidParams(
|
|
1330
|
+
void 0,
|
|
1331
|
+
`client-hosted MCP server '${server}' is not currently connected`
|
|
1332
|
+
);
|
|
1333
|
+
}
|
|
1334
|
+
const response = await send(payload);
|
|
1335
|
+
return { payload: response };
|
|
1336
|
+
}
|
|
1286
1337
|
/**
|
|
1287
1338
|
* Handle child->bridge ACP `extNotification` calls. Six methods are
|
|
1288
1339
|
* recognized — `qwen/notify/session/model-update`,
|
|
@@ -1912,15 +1963,18 @@ function broadcastPromptCancelledOnce(entry, sessionId, originatorClientId, reas
|
|
|
1912
1963
|
}
|
|
1913
1964
|
__name(broadcastPromptCancelledOnce, "broadcastPromptCancelledOnce");
|
|
1914
1965
|
function broadcastTurnComplete(entry, sessionId, promptResult, promptId, originatorClientId) {
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1966
|
+
try {
|
|
1967
|
+
entry.events.publish({
|
|
1968
|
+
type: "turn_complete",
|
|
1969
|
+
data: {
|
|
1970
|
+
sessionId,
|
|
1971
|
+
stopReason: promptResult.stopReason ?? "end_turn",
|
|
1972
|
+
...promptId ? { promptId } : {}
|
|
1973
|
+
},
|
|
1974
|
+
...originatorClientId ? { originatorClientId } : {}
|
|
1975
|
+
});
|
|
1976
|
+
} catch {
|
|
1977
|
+
}
|
|
1924
1978
|
}
|
|
1925
1979
|
__name(broadcastTurnComplete, "broadcastTurnComplete");
|
|
1926
1980
|
function extractErrorMessage(err) {
|
|
@@ -1963,16 +2017,19 @@ function broadcastTurnError(entry, sessionId, err, promptId, originatorClientId)
|
|
|
1963
2017
|
const message = extractErrorMessage(err);
|
|
1964
2018
|
const code = extractErrorCode(err);
|
|
1965
2019
|
entry.retryAllowed = true;
|
|
1966
|
-
|
|
1967
|
-
|
|
1968
|
-
|
|
1969
|
-
|
|
1970
|
-
|
|
1971
|
-
|
|
1972
|
-
|
|
1973
|
-
|
|
1974
|
-
|
|
1975
|
-
|
|
2020
|
+
try {
|
|
2021
|
+
entry.events.publish({
|
|
2022
|
+
type: "turn_error",
|
|
2023
|
+
data: {
|
|
2024
|
+
sessionId,
|
|
2025
|
+
message,
|
|
2026
|
+
...code ? { code } : {},
|
|
2027
|
+
...promptId ? { promptId } : {}
|
|
2028
|
+
},
|
|
2029
|
+
...originatorClientId ? { originatorClientId } : {}
|
|
2030
|
+
});
|
|
2031
|
+
} catch {
|
|
2032
|
+
}
|
|
1976
2033
|
}
|
|
1977
2034
|
__name(broadcastTurnError, "broadcastTurnError");
|
|
1978
2035
|
function hasControlCharacter(value) {
|
|
@@ -1985,11 +2042,26 @@ function hasControlCharacter(value) {
|
|
|
1985
2042
|
return false;
|
|
1986
2043
|
}
|
|
1987
2044
|
__name(hasControlCharacter, "hasControlCharacter");
|
|
2045
|
+
function extractPromptText(prompt) {
|
|
2046
|
+
if (!Array.isArray(prompt)) return "";
|
|
2047
|
+
let hasImage = false;
|
|
2048
|
+
for (const block of prompt) {
|
|
2049
|
+
if (block["type"] === "image") {
|
|
2050
|
+
hasImage = true;
|
|
2051
|
+
}
|
|
2052
|
+
if (block["type"] === "text" && typeof block["text"] === "string" && block["text"].length > 0) {
|
|
2053
|
+
return block["text"];
|
|
2054
|
+
}
|
|
2055
|
+
}
|
|
2056
|
+
return hasImage ? "[image]" : "";
|
|
2057
|
+
}
|
|
2058
|
+
__name(extractPromptText, "extractPromptText");
|
|
1988
2059
|
var DEFAULT_INIT_TIMEOUT_MS = 1e4;
|
|
1989
2060
|
var PERSIST_TIMEOUT_MS = 5e3;
|
|
1990
2061
|
var MCP_RESTART_TIMEOUT_MS = 3e5;
|
|
1991
2062
|
var MCP_OAUTH_TIMEOUT_MS = 6e5;
|
|
1992
2063
|
var DAEMON_RETRY_META_KEY = "qwen.daemon.retry";
|
|
2064
|
+
var DAEMON_CONTINUE_META_KEY = "qwen.daemon.continueLastTurn";
|
|
1993
2065
|
var SESSION_RECAP_TIMEOUT_MS = 6e4;
|
|
1994
2066
|
var SESSION_BTW_TIMEOUT_MS = 6e4;
|
|
1995
2067
|
var SHELL_COMMAND_TIMEOUT_MS = 12e4;
|
|
@@ -2174,6 +2246,14 @@ function createAcpSessionBridge(opts) {
|
|
|
2174
2246
|
const aliveChannels = /* @__PURE__ */ new Set();
|
|
2175
2247
|
let inFlightChannelSpawn;
|
|
2176
2248
|
const byId = /* @__PURE__ */ new Map();
|
|
2249
|
+
const toSessionSummary = /* @__PURE__ */ __name((entry) => ({
|
|
2250
|
+
sessionId: entry.sessionId,
|
|
2251
|
+
workspaceCwd: entry.workspaceCwd,
|
|
2252
|
+
createdAt: entry.createdAt,
|
|
2253
|
+
displayName: entry.displayName,
|
|
2254
|
+
clientCount: entry.clientIds.size,
|
|
2255
|
+
hasActivePrompt: entry.promptActive
|
|
2256
|
+
}), "toSessionSummary");
|
|
2177
2257
|
const permissionConsensusQuorum = opts.permissionConsensusQuorum;
|
|
2178
2258
|
if (permissionConsensusQuorum !== void 0 && (!Number.isInteger(permissionConsensusQuorum) || permissionConsensusQuorum < 1)) {
|
|
2179
2259
|
throw new Error(
|
|
@@ -2294,7 +2374,14 @@ function createAcpSessionBridge(opts) {
|
|
|
2294
2374
|
},
|
|
2295
2375
|
originator
|
|
2296
2376
|
);
|
|
2297
|
-
}
|
|
2377
|
+
},
|
|
2378
|
+
// Reverse tool channel (issue #5626, Phase 2): forward the optional
|
|
2379
|
+
// client-hosted-MCP sender lookup so `BridgeClient.extMethod` can
|
|
2380
|
+
// answer `qwen/control/client_mcp/message` from the child by reaching
|
|
2381
|
+
// the per-WS-connection `ClientMcpRegistrar`. Omitted callers (tests,
|
|
2382
|
+
// Mode A) never host a client MCP server, so the method stays
|
|
2383
|
+
// unreachable.
|
|
2384
|
+
opts.clientMcpSender
|
|
2298
2385
|
);
|
|
2299
2386
|
const connection = new ClientSideConnection(() => client, channel.stream);
|
|
2300
2387
|
const info = {
|
|
@@ -2750,6 +2837,7 @@ function createAcpSessionBridge(opts) {
|
|
|
2750
2837
|
events,
|
|
2751
2838
|
promptQueue: Promise.resolve(),
|
|
2752
2839
|
pendingPromptCount: 0,
|
|
2840
|
+
pendingPromptList: [],
|
|
2753
2841
|
midTurnMessageQueue: [],
|
|
2754
2842
|
modelChangeQueue: Promise.resolve(),
|
|
2755
2843
|
approvalModeQueue: Promise.resolve(),
|
|
@@ -2828,6 +2916,7 @@ function createAcpSessionBridge(opts) {
|
|
|
2828
2916
|
// Late attachers get the same ACP state the original restore
|
|
2829
2917
|
// caller saw; spawn-only sessions don't carry a state payload.
|
|
2830
2918
|
state: existing.restoreState ?? {},
|
|
2919
|
+
hasActivePrompt: existing.promptActive,
|
|
2831
2920
|
...replayFieldsFor(existing, action)
|
|
2832
2921
|
};
|
|
2833
2922
|
}
|
|
@@ -2860,7 +2949,8 @@ function createAcpSessionBridge(opts) {
|
|
|
2860
2949
|
...restored,
|
|
2861
2950
|
attached: true,
|
|
2862
2951
|
clientId: registerClient(entry, req.clientId),
|
|
2863
|
-
createdAt: entry.createdAt
|
|
2952
|
+
createdAt: entry.createdAt,
|
|
2953
|
+
hasActivePrompt: entry.promptActive
|
|
2864
2954
|
};
|
|
2865
2955
|
}
|
|
2866
2956
|
if (byId.size + inFlightSpawns.size + inFlightRestores.size >= maxSessions) {
|
|
@@ -2948,6 +3038,7 @@ function createAcpSessionBridge(opts) {
|
|
|
2948
3038
|
clientId: clientId2,
|
|
2949
3039
|
createdAt: racedEntry.createdAt,
|
|
2950
3040
|
state: racedEntry.restoreState ?? {},
|
|
3041
|
+
hasActivePrompt: racedEntry.promptActive,
|
|
2951
3042
|
...replayFieldsFor(racedEntry, action)
|
|
2952
3043
|
};
|
|
2953
3044
|
}
|
|
@@ -2969,6 +3060,7 @@ function createAcpSessionBridge(opts) {
|
|
|
2969
3060
|
clientId,
|
|
2970
3061
|
createdAt: entry.createdAt,
|
|
2971
3062
|
state,
|
|
3063
|
+
hasActivePrompt: entry.promptActive,
|
|
2972
3064
|
...replayFieldsFor(entry, action)
|
|
2973
3065
|
};
|
|
2974
3066
|
})().finally(() => {
|
|
@@ -3059,7 +3151,7 @@ function createAcpSessionBridge(opts) {
|
|
|
3059
3151
|
}
|
|
3060
3152
|
__name(closeSessionImpl, "closeSessionImpl");
|
|
3061
3153
|
startSessionReaper();
|
|
3062
|
-
|
|
3154
|
+
const bridgeApi = {
|
|
3063
3155
|
getDaemonStatusSnapshot() {
|
|
3064
3156
|
return {
|
|
3065
3157
|
limits: {
|
|
@@ -3146,7 +3238,8 @@ function createAcpSessionBridge(opts) {
|
|
|
3146
3238
|
workspaceCwd: existing.workspaceCwd,
|
|
3147
3239
|
attached: true,
|
|
3148
3240
|
clientId,
|
|
3149
|
-
createdAt: existing.createdAt
|
|
3241
|
+
createdAt: existing.createdAt,
|
|
3242
|
+
hasActivePrompt: existing.promptActive
|
|
3150
3243
|
};
|
|
3151
3244
|
}
|
|
3152
3245
|
const inFlight = inFlightSpawns.get(workspaceKey);
|
|
@@ -3170,7 +3263,12 @@ function createAcpSessionBridge(opts) {
|
|
|
3170
3263
|
).catch(() => {
|
|
3171
3264
|
});
|
|
3172
3265
|
}
|
|
3173
|
-
return {
|
|
3266
|
+
return {
|
|
3267
|
+
...session,
|
|
3268
|
+
attached: true,
|
|
3269
|
+
clientId,
|
|
3270
|
+
hasActivePrompt: attachedEntry.promptActive
|
|
3271
|
+
};
|
|
3174
3272
|
}
|
|
3175
3273
|
}
|
|
3176
3274
|
if (byId.size + inFlightSpawns.size + inFlightRestores.size >= maxSessions) {
|
|
@@ -3217,10 +3315,60 @@ function createAcpSessionBridge(opts) {
|
|
|
3217
3315
|
promptSlotReleased = true;
|
|
3218
3316
|
entry.pendingPromptCount = Math.max(0, entry.pendingPromptCount - 1);
|
|
3219
3317
|
}, "releasePromptSlot");
|
|
3318
|
+
const promptId = context?.promptId ?? randomUUID2();
|
|
3319
|
+
const isQueued = entry.pendingPromptCount > 1;
|
|
3320
|
+
const pendingAbort = new AbortController();
|
|
3321
|
+
if (signal) {
|
|
3322
|
+
if (signal.aborted) {
|
|
3323
|
+
pendingAbort.abort(signal.reason);
|
|
3324
|
+
} else {
|
|
3325
|
+
signal.addEventListener(
|
|
3326
|
+
"abort",
|
|
3327
|
+
() => pendingAbort.abort(signal.reason),
|
|
3328
|
+
{ once: true }
|
|
3329
|
+
);
|
|
3330
|
+
}
|
|
3331
|
+
}
|
|
3332
|
+
const pendingEntry = {
|
|
3333
|
+
promptId,
|
|
3334
|
+
queuedAt,
|
|
3335
|
+
...originatorClientId !== void 0 ? { originatorClientId } : {},
|
|
3336
|
+
text: extractPromptText(req.prompt),
|
|
3337
|
+
abortController: pendingAbort,
|
|
3338
|
+
state: isQueued ? "queued" : "running"
|
|
3339
|
+
};
|
|
3340
|
+
entry.pendingPromptList.push(pendingEntry);
|
|
3341
|
+
if (isQueued) {
|
|
3342
|
+
entry.events.publish({
|
|
3343
|
+
type: "pending_prompt_added",
|
|
3344
|
+
data: {
|
|
3345
|
+
sessionId,
|
|
3346
|
+
promptId: pendingEntry.promptId,
|
|
3347
|
+
text: pendingEntry.text,
|
|
3348
|
+
queuedAt: pendingEntry.queuedAt
|
|
3349
|
+
},
|
|
3350
|
+
...originatorClientId ? { originatorClientId } : {}
|
|
3351
|
+
});
|
|
3352
|
+
}
|
|
3220
3353
|
const result = entry.promptQueue.then(
|
|
3221
3354
|
() => telemetry.runWithContext(capturedContext, async () => {
|
|
3222
3355
|
const queueWaitMs = Date.now() - queuedAt;
|
|
3223
3356
|
telemetry.metrics?.promptQueueWait(queueWaitMs);
|
|
3357
|
+
if (pendingAbort.signal.aborted) {
|
|
3358
|
+
throw new DOMException("Prompt aborted", "AbortError");
|
|
3359
|
+
}
|
|
3360
|
+
if (pendingEntry.state === "queued") {
|
|
3361
|
+
pendingEntry.state = "running";
|
|
3362
|
+
entry.events.publish({
|
|
3363
|
+
type: "pending_prompt_started",
|
|
3364
|
+
data: {
|
|
3365
|
+
sessionId,
|
|
3366
|
+
promptId: pendingEntry.promptId,
|
|
3367
|
+
text: pendingEntry.text
|
|
3368
|
+
},
|
|
3369
|
+
...originatorClientId ? { originatorClientId } : {}
|
|
3370
|
+
});
|
|
3371
|
+
}
|
|
3224
3372
|
const dispatchStartMs = Date.now();
|
|
3225
3373
|
try {
|
|
3226
3374
|
return await telemetry.withSpan(
|
|
@@ -3238,13 +3386,11 @@ function createAcpSessionBridge(opts) {
|
|
|
3238
3386
|
sessionId
|
|
3239
3387
|
}
|
|
3240
3388
|
);
|
|
3241
|
-
if (signal?.aborted) {
|
|
3242
|
-
throw new DOMException("Prompt aborted", "AbortError");
|
|
3243
|
-
}
|
|
3244
3389
|
assertLivePromptEntry(sessionId, entry);
|
|
3245
3390
|
const requestedRetry = req.retry === true;
|
|
3246
3391
|
const isRetry = requestedRetry && entry.retryAllowed;
|
|
3247
3392
|
entry.retryAllowed = false;
|
|
3393
|
+
const isContinue = context?.continue === true;
|
|
3248
3394
|
const promptRequest = (() => {
|
|
3249
3395
|
const copy = {
|
|
3250
3396
|
...normalized
|
|
@@ -3252,9 +3398,13 @@ function createAcpSessionBridge(opts) {
|
|
|
3252
3398
|
delete copy.retry;
|
|
3253
3399
|
const meta = copy._meta && typeof copy._meta === "object" ? { ...copy._meta } : {};
|
|
3254
3400
|
delete meta[DAEMON_RETRY_META_KEY];
|
|
3401
|
+
delete meta[DAEMON_CONTINUE_META_KEY];
|
|
3255
3402
|
if (isRetry) {
|
|
3256
3403
|
meta[DAEMON_RETRY_META_KEY] = true;
|
|
3257
3404
|
}
|
|
3405
|
+
if (isContinue) {
|
|
3406
|
+
meta[DAEMON_CONTINUE_META_KEY] = true;
|
|
3407
|
+
}
|
|
3258
3408
|
if (Object.keys(meta).length > 0) {
|
|
3259
3409
|
copy._meta = meta;
|
|
3260
3410
|
} else {
|
|
@@ -3273,7 +3423,7 @@ function createAcpSessionBridge(opts) {
|
|
|
3273
3423
|
}
|
|
3274
3424
|
try {
|
|
3275
3425
|
entry.cancelBroadcast = false;
|
|
3276
|
-
if (!isRetry) {
|
|
3426
|
+
if (!isRetry && !isContinue) {
|
|
3277
3427
|
echoPromptToSessionBus(
|
|
3278
3428
|
entry,
|
|
3279
3429
|
promptRequest,
|
|
@@ -3315,6 +3465,12 @@ function createAcpSessionBridge(opts) {
|
|
|
3315
3465
|
() => {
|
|
3316
3466
|
},
|
|
3317
3467
|
(err) => {
|
|
3468
|
+
if (err instanceof DOMException && err.name === "AbortError" && pendingEntry.state === "queued") {
|
|
3469
|
+
writeStderrLine(
|
|
3470
|
+
`sendPrompt: queued prompt removed before agent forward for session ${sessionId}`
|
|
3471
|
+
);
|
|
3472
|
+
return;
|
|
3473
|
+
}
|
|
3318
3474
|
writeStderrLine(
|
|
3319
3475
|
`sendPrompt: forward failed for session ${sessionId}: ${extractErrorMessage(err)}`
|
|
3320
3476
|
);
|
|
@@ -3325,12 +3481,15 @@ function createAcpSessionBridge(opts) {
|
|
|
3325
3481
|
"forward_failed"
|
|
3326
3482
|
);
|
|
3327
3483
|
cancelPendingForSession(sessionId);
|
|
3328
|
-
entry.connection.cancel({ sessionId }).catch(() => {
|
|
3484
|
+
entry.connection.cancel({ sessionId }).catch((err2) => {
|
|
3485
|
+
writeStderrLine(
|
|
3486
|
+
`[pending-prompt] cancel forward failed after prompt abort session=${sessionId}: ${extractErrorMessage(err2)}`
|
|
3487
|
+
);
|
|
3329
3488
|
});
|
|
3330
3489
|
}
|
|
3331
3490
|
).catch(() => {
|
|
3332
3491
|
});
|
|
3333
|
-
|
|
3492
|
+
const abortSignal = pendingAbort.signal;
|
|
3334
3493
|
const onAbort = /* @__PURE__ */ __name(() => {
|
|
3335
3494
|
broadcastPromptCancelledOnce(
|
|
3336
3495
|
entry,
|
|
@@ -3338,15 +3497,22 @@ function createAcpSessionBridge(opts) {
|
|
|
3338
3497
|
originatorClientId
|
|
3339
3498
|
);
|
|
3340
3499
|
cancelPendingForSession(sessionId);
|
|
3341
|
-
entry.connection.cancel({ sessionId }).catch(() => {
|
|
3500
|
+
entry.connection.cancel({ sessionId }).catch((err) => {
|
|
3501
|
+
writeStderrLine(
|
|
3502
|
+
`[pending-prompt] cancel forward failed after removePendingPrompt session=${sessionId}: ${extractErrorMessage(err)}`
|
|
3503
|
+
);
|
|
3342
3504
|
});
|
|
3343
3505
|
}, "onAbort");
|
|
3344
|
-
if (
|
|
3506
|
+
if (abortSignal.aborted) {
|
|
3345
3507
|
onAbort();
|
|
3346
3508
|
} else {
|
|
3347
|
-
|
|
3348
|
-
|
|
3349
|
-
|
|
3509
|
+
abortSignal.addEventListener("abort", onAbort, {
|
|
3510
|
+
once: true
|
|
3511
|
+
});
|
|
3512
|
+
if (abortSignal.aborted) onAbort();
|
|
3513
|
+
racedPromise.finally(
|
|
3514
|
+
() => abortSignal.removeEventListener("abort", onAbort)
|
|
3515
|
+
).catch(() => {
|
|
3350
3516
|
});
|
|
3351
3517
|
}
|
|
3352
3518
|
return racedPromise;
|
|
@@ -3357,14 +3523,13 @@ function createAcpSessionBridge(opts) {
|
|
|
3357
3523
|
}
|
|
3358
3524
|
})
|
|
3359
3525
|
);
|
|
3360
|
-
const promptId = context?.promptId;
|
|
3361
3526
|
result.then(
|
|
3362
3527
|
(promptResult) => {
|
|
3363
3528
|
broadcastTurnComplete(
|
|
3364
3529
|
entry,
|
|
3365
3530
|
sessionId,
|
|
3366
3531
|
promptResult,
|
|
3367
|
-
promptId,
|
|
3532
|
+
pendingEntry.promptId,
|
|
3368
3533
|
originatorClientId
|
|
3369
3534
|
);
|
|
3370
3535
|
},
|
|
@@ -3374,7 +3539,7 @@ function createAcpSessionBridge(opts) {
|
|
|
3374
3539
|
entry,
|
|
3375
3540
|
sessionId,
|
|
3376
3541
|
err,
|
|
3377
|
-
promptId,
|
|
3542
|
+
pendingEntry.promptId,
|
|
3378
3543
|
originatorClientId
|
|
3379
3544
|
);
|
|
3380
3545
|
}
|
|
@@ -3384,6 +3549,24 @@ function createAcpSessionBridge(opts) {
|
|
|
3384
3549
|
() => void 0
|
|
3385
3550
|
);
|
|
3386
3551
|
result.finally(() => {
|
|
3552
|
+
const listIdx = entry.pendingPromptList.indexOf(pendingEntry);
|
|
3553
|
+
if (listIdx !== -1) {
|
|
3554
|
+
entry.pendingPromptList.splice(listIdx, 1);
|
|
3555
|
+
if (isQueued) {
|
|
3556
|
+
try {
|
|
3557
|
+
entry.events.publish({
|
|
3558
|
+
type: "pending_prompt_completed",
|
|
3559
|
+
data: {
|
|
3560
|
+
sessionId,
|
|
3561
|
+
promptId: pendingEntry.promptId,
|
|
3562
|
+
state: "completed"
|
|
3563
|
+
},
|
|
3564
|
+
...originatorClientId ? { originatorClientId } : {}
|
|
3565
|
+
});
|
|
3566
|
+
} catch {
|
|
3567
|
+
}
|
|
3568
|
+
}
|
|
3569
|
+
}
|
|
3387
3570
|
releasePromptSlot();
|
|
3388
3571
|
if (entry.pendingPromptCount === 0 && entry.midTurnMessageQueue.length > 0) {
|
|
3389
3572
|
writeStderrLine(
|
|
@@ -3616,6 +3799,59 @@ function createAcpSessionBridge(opts) {
|
|
|
3616
3799
|
);
|
|
3617
3800
|
return branchResult;
|
|
3618
3801
|
},
|
|
3802
|
+
async changeSessionCwd(sessionId, req, context) {
|
|
3803
|
+
if (shuttingDown) throw new Error("AcpSessionBridge is shutting down");
|
|
3804
|
+
const entry = byId.get(sessionId);
|
|
3805
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
3806
|
+
const originatorClientId = resolveTrustedClientId(
|
|
3807
|
+
entry,
|
|
3808
|
+
context?.clientId
|
|
3809
|
+
);
|
|
3810
|
+
const cdPromise = entry.promptQueue.then(async () => {
|
|
3811
|
+
if (entry.promptActive) {
|
|
3812
|
+
throw new CdWhilePromptActiveError(sessionId);
|
|
3813
|
+
}
|
|
3814
|
+
const ci = await ensureChannel();
|
|
3815
|
+
const raw = await ci.connection.extMethod(
|
|
3816
|
+
SERVE_CONTROL_EXT_METHODS.sessionCd,
|
|
3817
|
+
{
|
|
3818
|
+
sessionId,
|
|
3819
|
+
path: req.path
|
|
3820
|
+
}
|
|
3821
|
+
);
|
|
3822
|
+
const extResult = raw;
|
|
3823
|
+
if (typeof extResult?.previousCwd !== "string" || typeof extResult?.newCwd !== "string" || !Array.isArray(extResult?.warnings)) {
|
|
3824
|
+
throw new Error(
|
|
3825
|
+
`changeSessionCwd: unexpected response shape from agent: ${JSON.stringify(raw)}`
|
|
3826
|
+
);
|
|
3827
|
+
}
|
|
3828
|
+
if (extResult.previousCwd !== extResult.newCwd) {
|
|
3829
|
+
entry.events.publish({
|
|
3830
|
+
type: "session_cwd_changed",
|
|
3831
|
+
data: {
|
|
3832
|
+
sessionId,
|
|
3833
|
+
previousCwd: extResult.previousCwd,
|
|
3834
|
+
newCwd: extResult.newCwd
|
|
3835
|
+
},
|
|
3836
|
+
...originatorClientId ? { originatorClientId } : {}
|
|
3837
|
+
});
|
|
3838
|
+
}
|
|
3839
|
+
return extResult;
|
|
3840
|
+
});
|
|
3841
|
+
entry.promptQueue = cdPromise.then(
|
|
3842
|
+
() => void 0,
|
|
3843
|
+
() => void 0
|
|
3844
|
+
);
|
|
3845
|
+
const result = await withTimeout(
|
|
3846
|
+
cdPromise,
|
|
3847
|
+
Math.max(initTimeoutMs, 3e4),
|
|
3848
|
+
"changeSessionCwd"
|
|
3849
|
+
);
|
|
3850
|
+
writeStderrLine(
|
|
3851
|
+
`qwen serve: session ${sessionId} cwd changed: ${result.previousCwd} -> ${result.newCwd}` + (result.warnings.length > 0 ? ` (warnings: ${result.warnings.join("; ")})` : "")
|
|
3852
|
+
);
|
|
3853
|
+
return { sessionId, ...result };
|
|
3854
|
+
},
|
|
3619
3855
|
async closeSession(sessionId, context, closeOpts) {
|
|
3620
3856
|
return closeSessionImpl(sessionId, context, closeOpts);
|
|
3621
3857
|
},
|
|
@@ -3679,18 +3915,16 @@ function createAcpSessionBridge(opts) {
|
|
|
3679
3915
|
const out = [];
|
|
3680
3916
|
for (const entry of byId.values()) {
|
|
3681
3917
|
if (entry.workspaceCwd === key) {
|
|
3682
|
-
out.push(
|
|
3683
|
-
sessionId: entry.sessionId,
|
|
3684
|
-
workspaceCwd: entry.workspaceCwd,
|
|
3685
|
-
createdAt: entry.createdAt,
|
|
3686
|
-
displayName: entry.displayName,
|
|
3687
|
-
clientCount: entry.clientIds.size,
|
|
3688
|
-
hasActivePrompt: entry.promptActive
|
|
3689
|
-
});
|
|
3918
|
+
out.push(toSessionSummary(entry));
|
|
3690
3919
|
}
|
|
3691
3920
|
}
|
|
3692
3921
|
return out;
|
|
3693
3922
|
},
|
|
3923
|
+
getSessionSummary(sessionId) {
|
|
3924
|
+
const entry = byId.get(sessionId);
|
|
3925
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
3926
|
+
return toSessionSummary(entry);
|
|
3927
|
+
},
|
|
3694
3928
|
recordHeartbeat(sessionId, context) {
|
|
3695
3929
|
const entry = byId.get(sessionId);
|
|
3696
3930
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
@@ -3790,6 +4024,27 @@ function createAcpSessionBridge(opts) {
|
|
|
3790
4024
|
{ serverName }
|
|
3791
4025
|
);
|
|
3792
4026
|
},
|
|
4027
|
+
async getWorkspaceMcpResourcesStatus(serverName) {
|
|
4028
|
+
return requestWorkspaceStatus(
|
|
4029
|
+
SERVE_STATUS_EXT_METHODS.workspaceMcpResources,
|
|
4030
|
+
() => ({
|
|
4031
|
+
v: STATUS_SCHEMA_VERSION,
|
|
4032
|
+
workspaceCwd: boundWorkspace,
|
|
4033
|
+
serverName,
|
|
4034
|
+
initialized: false,
|
|
4035
|
+
acpChannelLive: false,
|
|
4036
|
+
resources: [],
|
|
4037
|
+
errors: [
|
|
4038
|
+
{
|
|
4039
|
+
kind: "mcp_resources",
|
|
4040
|
+
status: "not_started",
|
|
4041
|
+
hint: "spawn a session to populate"
|
|
4042
|
+
}
|
|
4043
|
+
]
|
|
4044
|
+
}),
|
|
4045
|
+
{ serverName }
|
|
4046
|
+
);
|
|
4047
|
+
},
|
|
3793
4048
|
async getWorkspaceToolsStatus() {
|
|
3794
4049
|
return requestWorkspaceStatus(
|
|
3795
4050
|
SERVE_STATUS_EXT_METHODS.workspaceTools,
|
|
@@ -3853,6 +4108,39 @@ function createAcpSessionBridge(opts) {
|
|
|
3853
4108
|
SERVE_CONTROL_EXT_METHODS.sessionGoalClear
|
|
3854
4109
|
);
|
|
3855
4110
|
},
|
|
4111
|
+
async continueSession(sessionId, context) {
|
|
4112
|
+
const entry = byId.get(sessionId);
|
|
4113
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
4114
|
+
resolveTrustedClientId(entry, context?.clientId);
|
|
4115
|
+
const decision = await requestSessionStatus(sessionId, SERVE_CONTROL_EXT_METHODS.sessionContinue);
|
|
4116
|
+
if (!decision.accepted) {
|
|
4117
|
+
return decision;
|
|
4118
|
+
}
|
|
4119
|
+
const liveEntry = byId.get(sessionId);
|
|
4120
|
+
if (!liveEntry) throw new SessionNotFoundError(sessionId);
|
|
4121
|
+
const lastEventId = liveEntry.events.lastEventId;
|
|
4122
|
+
const promptId = context?.promptId;
|
|
4123
|
+
const promptPromise = bridgeApi.sendPrompt(
|
|
4124
|
+
sessionId,
|
|
4125
|
+
{ sessionId, prompt: [] },
|
|
4126
|
+
void 0,
|
|
4127
|
+
{
|
|
4128
|
+
...context?.clientId !== void 0 ? { clientId: context.clientId } : {},
|
|
4129
|
+
...promptId !== void 0 ? { promptId } : {},
|
|
4130
|
+
continue: true
|
|
4131
|
+
}
|
|
4132
|
+
);
|
|
4133
|
+
promptPromise.catch((err) => {
|
|
4134
|
+
teeServeDebugLine(
|
|
4135
|
+
`continueSession: continuation turn failed for ${sessionId}: ${err instanceof Error ? err.message : String(err)}`
|
|
4136
|
+
);
|
|
4137
|
+
});
|
|
4138
|
+
return {
|
|
4139
|
+
...decision,
|
|
4140
|
+
...promptId !== void 0 ? { promptId } : {},
|
|
4141
|
+
lastEventId
|
|
4142
|
+
};
|
|
4143
|
+
},
|
|
3856
4144
|
async getSessionStatsStatus(sessionId) {
|
|
3857
4145
|
return requestSessionStatus(
|
|
3858
4146
|
sessionId,
|
|
@@ -4177,6 +4465,44 @@ function createAcpSessionBridge(opts) {
|
|
|
4177
4465
|
recap: response.recap ?? null
|
|
4178
4466
|
};
|
|
4179
4467
|
},
|
|
4468
|
+
getPendingPrompts(sessionId, context) {
|
|
4469
|
+
const entry = byId.get(sessionId);
|
|
4470
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
4471
|
+
resolveTrustedClientId(entry, context?.clientId);
|
|
4472
|
+
return entry.pendingPromptList.map((p) => ({
|
|
4473
|
+
promptId: p.promptId,
|
|
4474
|
+
text: p.text,
|
|
4475
|
+
queuedAt: p.queuedAt,
|
|
4476
|
+
state: p.state,
|
|
4477
|
+
...p.originatorClientId !== void 0 ? { originatorClientId: p.originatorClientId } : {}
|
|
4478
|
+
}));
|
|
4479
|
+
},
|
|
4480
|
+
removePendingPrompt(sessionId, promptId, context) {
|
|
4481
|
+
const entry = byId.get(sessionId);
|
|
4482
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
4483
|
+
resolveTrustedClientId(entry, context?.clientId);
|
|
4484
|
+
const idx = entry.pendingPromptList.findIndex(
|
|
4485
|
+
(p) => p.promptId === promptId
|
|
4486
|
+
);
|
|
4487
|
+
if (idx === -1) return { removed: false };
|
|
4488
|
+
const target = entry.pendingPromptList[idx];
|
|
4489
|
+
writeStderrLine(
|
|
4490
|
+
`[pending-prompt] session=${sessionId} removing promptId=${promptId} state=${target.state}`
|
|
4491
|
+
);
|
|
4492
|
+
target.abortController.abort(
|
|
4493
|
+
new DOMException("Prompt removed by user", "AbortError")
|
|
4494
|
+
);
|
|
4495
|
+
entry.pendingPromptList.splice(idx, 1);
|
|
4496
|
+
try {
|
|
4497
|
+
entry.events.publish({
|
|
4498
|
+
type: "pending_prompt_completed",
|
|
4499
|
+
data: { sessionId, promptId, state: "removed" },
|
|
4500
|
+
...target.originatorClientId ? { originatorClientId: target.originatorClientId } : {}
|
|
4501
|
+
});
|
|
4502
|
+
} catch {
|
|
4503
|
+
}
|
|
4504
|
+
return { removed: true };
|
|
4505
|
+
},
|
|
4180
4506
|
enqueueMidTurnMessage(sessionId, message, context) {
|
|
4181
4507
|
const entry = byId.get(sessionId);
|
|
4182
4508
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
@@ -4728,6 +5054,7 @@ function createAcpSessionBridge(opts) {
|
|
|
4728
5054
|
}
|
|
4729
5055
|
}
|
|
4730
5056
|
};
|
|
5057
|
+
return bridgeApi;
|
|
4731
5058
|
}
|
|
4732
5059
|
__name(createAcpSessionBridge, "createAcpSessionBridge");
|
|
4733
5060
|
async function withTimeout(p, ms, label) {
|