@qwen-code/qwen-code 0.19.9-nightly.20260714.9dd8389eb → 0.19.10
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 +6 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
- package/bundled/qc-helper/docs/qwen-serve.md +7 -2
- package/bundled/review/SKILL.md +23 -11
- package/chunks/{MaxSizedBox-QAYHOC4F.js → MaxSizedBox-67ODZ4SZ.js} +5 -6
- package/chunks/{StandaloneSessionPicker-D3R6YYX3.js → StandaloneSessionPicker-SIPBQT5Z.js} +17 -18
- package/chunks/{acpAgent-ENHBW72A.js → acpAgent-VPZJXLFX.js} +141 -80
- package/chunks/{agent-57LX4KMG.js → agent-Z7NWL6XL.js} +2 -3
- package/chunks/{agent-headless-AC6EVNAP.js → agent-headless-73HZ6ROQ.js} +2 -3
- package/chunks/{bridge-4OZH44MK.js → bridge-XFKW6S7Q.js} +5 -6
- package/chunks/{chunk-DPSWJWZI.js → chunk-2W3OOD4W.js} +1 -0
- package/chunks/{chunk-FDL4PB5H.js → chunk-3XJFUTNM.js} +8 -8
- package/chunks/{chunk-AAS2Q2TV.js → chunk-422XAKCK.js} +2 -2
- package/chunks/{chunk-7U7UIO5W.js → chunk-4FMG7EDJ.js} +19 -4
- package/chunks/{chunk-X7EBAABW.js → chunk-4YWLED2A.js} +1 -1
- package/chunks/{chunk-WN4D7YCI.js → chunk-5EBKKSBX.js} +1 -1
- package/chunks/{chunk-G6QTKQN4.js → chunk-5LROA5W4.js} +3 -3
- package/chunks/{chunk-SUWGUGAD.js → chunk-65N2J6V2.js} +2 -2
- package/chunks/{chunk-T2L6SGQY.js → chunk-6GETGQWP.js} +26 -6
- package/chunks/{chunk-T5C2OUCI.js → chunk-6GKMJPOC.js} +3 -3
- package/chunks/{chunk-K3PPUB46.js → chunk-6W6DI34P.js} +1 -1
- package/chunks/{chunk-WM5HY72H.js → chunk-7L4XBYVW.js} +2 -2
- package/chunks/{chunk-CLTWL6HD.js → chunk-7MJAZMXK.js} +5 -5
- package/chunks/{chunk-6HHAADP2.js → chunk-AAR5SGMD.js} +4 -4
- package/chunks/{chunk-P3S67A5R.js → chunk-B5I2IIWY.js} +3 -3
- package/chunks/{chunk-4DYYRLIE.js → chunk-CEW4HDPK.js} +639 -317
- package/chunks/{chunk-JR63TOV4.js → chunk-CJFNEBYB.js} +1 -1
- package/chunks/{chunk-PMRH4YYW.js → chunk-CUUXANEQ.js} +2 -1
- package/chunks/{chunk-Z56JO4JZ.js → chunk-DK33QJ3V.js} +6 -6
- package/chunks/{chunk-N7FCSERB.js → chunk-DPFBNG72.js} +1 -1
- package/chunks/{chunk-HZYUNZDQ.js → chunk-EQY6POVO.js} +1 -1
- package/chunks/{chunk-MBJ3D6SF.js → chunk-F7NXQH4Y.js} +1 -1
- package/chunks/{chunk-C4CXFRKY.js → chunk-FXMC7SL2.js} +25 -4
- package/chunks/{chunk-CSACSGAW.js → chunk-GGJII3FM.js} +2 -2
- package/chunks/{chunk-EU3U7USF.js → chunk-H3FQOPPS.js} +2 -2
- package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
- package/chunks/{chunk-MBP3K324.js → chunk-HHEFI4RP.js} +32 -11
- package/chunks/{chunk-B6ABUBYY.js → chunk-JSJFKYWT.js} +67 -5
- package/chunks/{chunk-QABSSDQH.js → chunk-K4PZ5F5T.js} +1 -1
- package/chunks/{chunk-SSFDPGFN.js → chunk-K7CRWKOE.js} +7879 -5472
- package/chunks/{chunk-J2TDDOSM.js → chunk-L37RC7MQ.js} +1 -1
- package/chunks/{chunk-V75IOTWF.js → chunk-L62SEJWY.js} +4 -4
- package/chunks/{chunk-HE54PGVI.js → chunk-LNUXFLLJ.js} +2 -2
- package/chunks/{chunk-PHYCWSDG.js → chunk-LQU7EVFA.js} +1 -1
- package/chunks/{chunk-AUGSSJX3.js → chunk-LTNI523B.js} +2 -2
- package/chunks/{chunk-4LJNI7MU.js → chunk-MO7O5722.js} +262 -7
- package/chunks/{chunk-S2QXYLUB.js → chunk-N6FXRR6P.js} +1 -1
- package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
- package/chunks/{chunk-XHW5VUIQ.js → chunk-OFEVHGVU.js} +157 -55
- package/chunks/{chunk-T7FSRWQ5.js → chunk-P6LART6G.js} +107 -6
- package/chunks/{chunk-GYGGUR4Q.js → chunk-Q5GLXH5Q.js} +3 -3
- package/chunks/{chunk-SE74CIZD.js → chunk-RDRVMDWV.js} +1 -1
- package/chunks/{chunk-DKXW66XA.js → chunk-SPUYQB4T.js} +1 -1
- package/chunks/{chunk-AGBFWLA5.js → chunk-TISZXPAX.js} +1 -1
- package/chunks/{chunk-ZLM3KXBT.js → chunk-TTUO4DNG.js} +14 -13
- package/chunks/{chunk-4QOPEEL2.js → chunk-UFOKA4PR.js} +1 -1
- package/chunks/{chunk-2MF6ICOL.js → chunk-V7EQTZYR.js} +36 -8
- package/chunks/{chunk-WWQ3QIJS.js → chunk-VBRRNQB7.js} +10 -10
- package/chunks/{chunk-OCC3UTWA.js → chunk-W34A5MJH.js} +1 -1
- package/chunks/{chunk-LAM6CGP5.js → chunk-WDW64OW3.js} +3 -3
- package/chunks/{chunk-DMTQY5GY.js → chunk-WDWJ4OQJ.js} +3 -3
- package/chunks/{chunk-B6KHOCU7.js → chunk-WIASPMLX.js} +8 -8
- package/chunks/{chunk-4FPUAYTT.js → chunk-WLXYAKV7.js} +4 -4
- package/chunks/{chunk-YWUK7OS7.js → chunk-WTSXKLG5.js} +1 -1
- package/chunks/{chunk-7BIZARI2.js → chunk-X362TMXZ.js} +4 -4
- package/chunks/{chunk-ASVORVFT.js → chunk-XLIRF7IK.js} +1 -1
- package/chunks/{chunk-DNKX35GS.js → chunk-XXJKGHZV.js} +4 -4
- package/chunks/{chunk-UI3W56WF.js → chunk-YU56QGXX.js} +1 -1
- package/chunks/{chunk-RJL5T4WJ.js → chunk-YX4LLZ3D.js} +47 -35
- package/chunks/{chunk-YH4J5XI3.js → chunk-YYPXHMWO.js} +4 -4
- package/chunks/{chunk-AAWKZ5R7.js → chunk-ZKMGAFYV.js} +1 -1
- package/chunks/{chunk-EUNRLYJG.js → chunk-ZQTZXVHP.js} +4 -4
- package/chunks/{computer-use-DIP5BWXP.js → computer-use-IYTX45WA.js} +2 -3
- package/chunks/{contextCommand-QU4GJWWD.js → contextCommand-272V77WU.js} +4 -5
- package/chunks/{create-sub-session-TCLIYVGR.js → create-sub-session-CBJMQLYP.js} +2 -3
- package/chunks/{daemon-CEZ27OH4.js → daemon-RNGFPMAB.js} +315 -36
- package/chunks/{daemon-status-provider-SIBFMLBQ.js → daemon-status-provider-L4STG5VO.js} +9 -10
- package/chunks/{earlyInputCapture-L66BEG2C.js → earlyInputCapture-EN4BRREQ.js} +2 -3
- package/chunks/{edit-Y5LAJSST.js → edit-OMAF2QDR.js} +2 -3
- package/chunks/{enter-worktree-X5LML7T4.js → enter-worktree-BBZX52HG.js} +2 -3
- package/chunks/{enterPlanMode-XWF32QOW.js → enterPlanMode-5NNFMBUY.js} +2 -3
- package/chunks/{environment-YVMA5F4I.js → environment-7TEWMJYN.js} +4 -5
- package/chunks/{errors-4Y5SUAOC.js → errors-I4VKVX3F.js} +4 -5
- package/chunks/{exit-worktree-SFHU7XYC.js → exit-worktree-FUWRJI33.js} +2 -3
- package/chunks/{exitPlanMode-FP3NAN6E.js → exitPlanMode-IHCJ5EEI.js} +2 -3
- package/chunks/{fast-path-ZJNFFCBM.js → fast-path-ZA57TOH4.js} +2 -2
- package/chunks/{gemini-5CAB22BI.js → gemini-UOAKVXBG.js} +91 -33
- package/chunks/{geminiContentGenerator-GE3HPIFB.js → geminiContentGenerator-G6UCE6MW.js} +1 -1
- package/chunks/{glob-YPACZAEL.js → glob-4GJQ2UFF.js} +2 -3
- package/chunks/{grep-IPR4XW37.js → grep-5QSYXF2E.js} +2 -3
- package/chunks/{handleAutoUpdate-P2KEP56V.js → handleAutoUpdate-ULHNWL6R.js} +6 -7
- package/chunks/{i18n-BRCT66AA.js → i18n-CYDUTF6F.js} +3 -4
- package/chunks/{initializer-34HXSK3A.js → initializer-NRFKUGIO.js} +7 -8
- package/chunks/{installationInfo-WOTDQMSC.js → installationInfo-WELKRHHE.js} +3 -4
- package/chunks/{list-XOGP7UPP.js → list-JVDXEG2E.js} +10 -11
- package/chunks/{loadedSettingsAdapter-L4YKGU6F.js → loadedSettingsAdapter-WAM4VUTG.js} +7 -8
- package/chunks/{mcp-HH7DIP7Y.js → mcp-YHOZN3ZM.js} +7 -8
- package/chunks/{monitor-25DEBT6U.js → monitor-R7XZPJHQ.js} +2 -3
- package/chunks/{nonInteractiveCli-CT3VSSLK.js → nonInteractiveCli-NSOB6D74.js} +34 -35
- package/chunks/{notebook-edit-TAVXSWQ6.js → notebook-edit-6RNKE2L2.js} +2 -3
- package/chunks/{openaiContentGenerator-6I7DKUAN.js → openaiContentGenerator-XNS5S64I.js} +2 -2
- package/chunks/{pidfile-SIQGCFLZ.js → pidfile-XE4RRR2P.js} +2 -3
- package/chunks/{qwenContentGenerator-5DDIXI2N.js → qwenContentGenerator-APDPJ3VN.js} +3 -4
- package/chunks/{read-file-WDOAYRFU.js → read-file-XSUWXSR7.js} +1 -1
- package/chunks/{ripGrep-MI7PHN3Q.js → ripGrep-APB3CDMU.js} +2 -3
- package/chunks/{run-qwen-serve-PNTYF3RE.js → run-qwen-serve-NWTGPERT.js} +224 -75
- package/chunks/{runtime-V3FBMUTG.js → runtime-EIO3NQKR.js} +8 -9
- package/chunks/{scheduler-4TAUIJBM.js → scheduler-JJDZBDRN.js} +2 -3
- package/chunks/{serve-WB2TR7XM.js → serve-WTIPB3EI.js} +7 -8
- package/chunks/{server-AF6LNFPK.js → server-NJPHQHLH.js} +2458 -755
- package/chunks/{session-BIGK4NRW.js → session-O4AO7FTS.js} +35 -36
- package/chunks/{settings-IXF5FIQO.js → settings-HQNDK7TG.js} +6 -7
- package/chunks/{shell-5VWJ2PPG.js → shell-UIXM6PWG.js} +2 -3
- package/chunks/{skill-SI667Y3B.js → skill-3XMB4ULV.js} +1 -1
- package/chunks/{spawnChannel-IKX6DD7J.js → spawnChannel-3R632QRM.js} +4 -5
- package/chunks/{src-55DZWDAK.js → src-USZKPUOC.js} +33 -4
- package/chunks/{standalone-update-MHLSFHE6.js → standalone-update-L5XW3D7K.js} +4 -5
- package/chunks/{startInteractiveUI-V2EDWLAX.js → startInteractiveUI-CPZOL2WB.js} +174 -122
- package/chunks/{team-create-IZAMLBJS.js → team-create-XXPRF3IQ.js} +2 -3
- package/chunks/{team-plan-approval-3R4RCKCP.js → team-plan-approval-EOTTKHDW.js} +2 -3
- package/chunks/{theme-manager-LCOXZ5DO.js → theme-manager-P6UITO2L.js} +2 -3
- package/chunks/{tool-search-NYNCD5LF.js → tool-search-DDNGK2LR.js} +1 -1
- package/chunks/{total-session-admission-PJWGOMQE.js → total-session-admission-PL5N7DNY.js} +5 -6
- package/chunks/{trustedFolders-DOJDHNYP.js → trustedFolders-C5LMF3UR.js} +3 -4
- package/chunks/types-ML3TRJQ5.js +16 -0
- package/chunks/{updateCheck-ZXL66KIG.js → updateCheck-QTVVISH7.js} +4 -5
- package/chunks/{validateNonInterActiveAuth-JSNJZCYY.js → validateNonInterActiveAuth-RY4RKBQG.js} +30 -31
- package/chunks/{version-3NLBENG5.js → version-U45RYOSD.js} +1 -1
- package/chunks/{workflow-BQYLF7XP.js → workflow-TCIAQYOA.js} +3 -4
- package/chunks/{workspace-providers-status-FA2DGEZW.js → workspace-providers-status-I3G2HYLY.js} +10 -11
- package/chunks/{workspace-registration-store-TARTAGMI.js → workspace-registration-store-IH5GLZ6Y.js} +1 -1
- package/chunks/{workspace-registry-AGE7WAXX.js → workspace-registry-QEKBELIX.js} +5 -6
- package/chunks/{workspace-service-ERC5VR2B.js → workspace-service-ORKHGLP3.js} +17 -14
- package/chunks/{workspace-skills-status-FKYWGNCN.js → workspace-skills-status-D7QCNDYY.js} +9 -10
- package/chunks/{write-file-S47KSK7Z.js → write-file-JGRQR5VM.js} +2 -3
- package/cli.js +11 -11
- package/package.json +3 -3
- package/web-shell/assets/{arc-Zj4EkBUY.js → arc-CUeDlxvE.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-DAk1Ua3Y.js → architectureDiagram-3BPJPVTR-PiUszkQA.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-DBNqUthM.js → blockDiagram-GPEHLZMM-s2wYSO7e.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-Dq5QGJ53.js → c4Diagram-AAUBKEIU-DyLxZoz9.js} +1 -1
- package/web-shell/assets/channel-DkuJJ0qd.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-DY0AeGru.js → chunk-2J33WTMH-Dsdai7Tk.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-COX3OyIi.js → chunk-4BX2VUAB-DEosOjV7.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-Csoyddbh.js → chunk-55IACEB6-sNsRLTXf.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-BJPONdxX.js → chunk-727SXJPM-DkRNZzmh.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-syLVH6fg.js → chunk-AQP2D5EJ-BrsRNpzd.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-Cfm59Nhw.js → chunk-FMBD7UC4-CI039lpl.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-DZf6tAqS.js → chunk-ND2GUHAM-M-pkeIfu.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-DKBp_v5q.js → chunk-QZHKN3VN-C4ckGNbH.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CwqHc0TB.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwqHc0TB.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-DUU3mMQ5.js → cose-bilkent-S5V4N54A-BciKUAFq.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-BUgNfbh-.js → dagre-BM42HDAG-C1nTSgU6.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-DT7MVfAg.js → diagram-2AECGRRQ-BDPNWr1m.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-Cv4YG-ec.js → diagram-5GNKFQAL-CNFhTszL.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-BAe9LLkn.js → diagram-KO2AKTUF-CjPa4p5a.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-DW8wqTIP.js → diagram-LMA3HP47-ZzPykSyG.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CmkuWbaK.js → diagram-OG6HWLK6-0UVtZ9A4.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DwvdHjZ9.js → erDiagram-TEJ5UH35-CajDZCat.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-CSsXrhW_.js → flowDiagram-I6XJVG4X-BRuFBIvL.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-BtuznCdi.js → ganttDiagram-6RSMTGT7-BevGmJqG.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DGmAm06g.js → gitGraphDiagram-PVQCEYII-DvPMpBMb.js} +1 -1
- package/web-shell/assets/index-Cnvv4VcI.css +5 -0
- package/web-shell/assets/index-D1Uyklxa.js +1088 -0
- package/web-shell/assets/{index-BEtz1cvN.js → index-DzHwQkQq.js} +1 -1
- package/web-shell/assets/{infoDiagram-5YYISTIA-OAiZ1q0K.js → infoDiagram-5YYISTIA-Oixn7tA9.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DyK0KTIT.js → ishikawaDiagram-YF4QCWOH-BgKpeg-j.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-DzYJlwfO.js → journeyDiagram-JHISSGLW-74mwxIaA.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-CU_tcDwi.js → kanban-definition-UN3LZRKU-D4D6cEqA.js} +1 -1
- package/web-shell/assets/{linear-DvZXjF17.js → linear-atZRE_L2.js} +1 -1
- package/web-shell/assets/{mermaid.core-_ZFEQlOl.js → mermaid.core-KKudX-JC.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-Or4p64HB.js → mindmap-definition-RKZ34NQL-CMCej9yG.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-lXE-zZ6b.js → pieDiagram-4H26LBE5-nhx40X7q.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DUXb9mUV.js → quadrantDiagram-W4KKPZXB-CUmVcN3M.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-D_10uHfo.js → requirementDiagram-4Y6WPE33-C_vyEwyy.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-E8c0fPqe.js → sankeyDiagram-5OEKKPKP-DU6G4VWR.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CJMtFttK.js → sequenceDiagram-3UESZ5HK-DdeRR_KJ.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-DhbviRbB.js → stateDiagram-AJRCARHV-C6iCI8ps.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C0_6nR6C.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-CM5yMkFK.js → timeline-definition-PNZ67QCA-B_Ea8Cb7.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BCi-zWNN.js → vennDiagram-CIIHVFJN-BPUVZEJA.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-BJ_yJNjJ.js → wardley-L42UT6IY-BWEj0lKY.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-TjtLk-qN.js → wardleyDiagram-YWT4CUSO-BvDsdIQw.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-D1TjyoQ3.js → xychartDiagram-2RQKCTM6-crz0QhF_.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-CU3L64TP.js +0 -93
- package/chunks/types-JNKGKUJT.js +0 -12
- package/web-shell/assets/channel-DWfYijFS.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-DDht-78J.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-DDht-78J.js +0 -1
- package/web-shell/assets/index-B9Xwf4OS.css +0 -5
- package/web-shell/assets/index-BUkM4ZXX.js +0 -1088
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CntljfwW.js +0 -1
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
SkillError
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-K7CRWKOE.js";
|
|
6
6
|
import {
|
|
7
7
|
init_esbuild_shims
|
|
8
8
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -100,6 +100,7 @@ var SERVE_CONTROL_EXT_METHODS = {
|
|
|
100
100
|
workspaceMcpRuntimeAdd: "qwen/control/workspace/mcp/runtime-add",
|
|
101
101
|
workspaceMcpRuntimeRemove: "qwen/control/workspace/mcp/runtime-remove",
|
|
102
102
|
workspaceReload: "qwen/control/workspace/reload",
|
|
103
|
+
workspaceSkillsRefresh: "qwen/control/workspace/skills/refresh",
|
|
103
104
|
workspaceExtensionsRefresh: "qwen/control/workspace/extensions/refresh",
|
|
104
105
|
/**
|
|
105
106
|
* Reverse tool channel (issue #5626, Phase 2). Unlike every other entry
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
use_is_screen_reader_enabled_default,
|
|
9
9
|
use_stdin_default,
|
|
10
10
|
use_stdout_default
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-K4PZ5F5T.js";
|
|
12
12
|
import {
|
|
13
13
|
require_react
|
|
14
14
|
} from "./chunk-HTHUX2T5.js";
|
|
@@ -18,26 +18,26 @@ import {
|
|
|
18
18
|
import {
|
|
19
19
|
formatHistoryGapNotice,
|
|
20
20
|
indexGapsByChild
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-SPUYQB4T.js";
|
|
22
22
|
import {
|
|
23
23
|
sanitizeFilenameForDisplay
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-WTSXKLG5.js";
|
|
25
25
|
import {
|
|
26
26
|
formatDuration
|
|
27
27
|
} from "./chunk-E5Z2AVNV.js";
|
|
28
28
|
import {
|
|
29
29
|
t
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-RDRVMDWV.js";
|
|
31
31
|
import {
|
|
32
32
|
fetchGitDiff,
|
|
33
33
|
findProviderByCredentials,
|
|
34
34
|
getToolResponseDisplayText,
|
|
35
35
|
resolveMetadataKey
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-K7CRWKOE.js";
|
|
37
37
|
import {
|
|
38
38
|
KittySequenceOverflowEvent,
|
|
39
39
|
logKittySequenceOverflow
|
|
40
|
-
} from "./chunk-
|
|
40
|
+
} from "./chunk-P6LART6G.js";
|
|
41
41
|
import {
|
|
42
42
|
ToolDisplayNames
|
|
43
43
|
} from "./chunk-2UUAIFQO.js";
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
isTranscribableVoiceModel,
|
|
6
6
|
readVoiceLanguage,
|
|
7
7
|
resolveVoiceTransport
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-DPFBNG72.js";
|
|
9
9
|
import {
|
|
10
10
|
resolvePath
|
|
11
11
|
} from "./chunk-FSA7ERJ2.js";
|
|
@@ -339,7 +339,7 @@ async function defaultLookupHost(hostname) {
|
|
|
339
339
|
return dnsLookup(hostname, { all: true });
|
|
340
340
|
}
|
|
341
341
|
__name(defaultLookupHost, "defaultLookupHost");
|
|
342
|
-
async function assertVoiceBaseUrlNetworkAllowed(voiceConfig, lookupHost) {
|
|
342
|
+
async function assertVoiceBaseUrlNetworkAllowed(voiceConfig, lookupHost, abortSignal) {
|
|
343
343
|
const hostname = normalizeHostname(new URL(voiceConfig.baseUrl).hostname);
|
|
344
344
|
if (isLoopbackHost(hostname)) {
|
|
345
345
|
return;
|
|
@@ -353,12 +353,29 @@ async function assertVoiceBaseUrlNetworkAllowed(voiceConfig, lookupHost) {
|
|
|
353
353
|
return;
|
|
354
354
|
}
|
|
355
355
|
let result;
|
|
356
|
+
let onAbort;
|
|
356
357
|
try {
|
|
357
|
-
|
|
358
|
+
if (abortSignal?.aborted) {
|
|
359
|
+
throw abortSignal.reason;
|
|
360
|
+
}
|
|
361
|
+
const lookup = (lookupHost ?? defaultLookupHost)(hostname);
|
|
362
|
+
result = abortSignal ? await Promise.race([
|
|
363
|
+
lookup,
|
|
364
|
+
new Promise((_resolve, reject) => {
|
|
365
|
+
onAbort = /* @__PURE__ */ __name(() => reject(abortSignal.reason), "onAbort");
|
|
366
|
+
if (abortSignal.aborted) onAbort();
|
|
367
|
+
else abortSignal.addEventListener("abort", onAbort, { once: true });
|
|
368
|
+
})
|
|
369
|
+
]) : await lookup;
|
|
358
370
|
} catch {
|
|
371
|
+
if (abortSignal?.aborted) {
|
|
372
|
+
throw abortSignal.reason instanceof Error ? abortSignal.reason : new Error("Voice request was aborted.");
|
|
373
|
+
}
|
|
359
374
|
throw new Error(
|
|
360
375
|
`Voice model '${voiceConfig.model}': DNS lookup failed for ${hostname}. Cannot verify network safety.`
|
|
361
376
|
);
|
|
377
|
+
} finally {
|
|
378
|
+
if (onAbort) abortSignal?.removeEventListener("abort", onAbort);
|
|
362
379
|
}
|
|
363
380
|
const records = Array.isArray(result) ? result : [result];
|
|
364
381
|
if (records.some((record) => isPrivateNetworkIp(record.address))) {
|
|
@@ -649,7 +666,11 @@ async function transcribeViaQwenAsr(audio, voiceConfig, options, fetchFn) {
|
|
|
649
666
|
__name(transcribeViaQwenAsr, "transcribeViaQwenAsr");
|
|
650
667
|
async function transcribeVoiceAudio(audio, args) {
|
|
651
668
|
const voiceConfig = resolveVoiceTranscriptionConfig(args);
|
|
652
|
-
await assertVoiceBaseUrlNetworkAllowed(
|
|
669
|
+
await assertVoiceBaseUrlNetworkAllowed(
|
|
670
|
+
voiceConfig,
|
|
671
|
+
args.lookupHost,
|
|
672
|
+
args.abortSignal
|
|
673
|
+
);
|
|
653
674
|
const fetchFn = args.fetchFn ?? fetch;
|
|
654
675
|
const language = resolveLanguageCode(readVoiceLanguage(args.settings));
|
|
655
676
|
const keytermsContext = buildKeytermsContext(args.settings);
|
|
@@ -4,14 +4,14 @@ import {
|
|
|
4
4
|
resolveModelConfig,
|
|
5
5
|
resolveProviderProtocol,
|
|
6
6
|
stripRuntimeSnapshotPrefix
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-K7CRWKOE.js";
|
|
8
8
|
import {
|
|
9
9
|
external_exports
|
|
10
10
|
} from "./chunk-H6XPXXMH.js";
|
|
11
11
|
import {
|
|
12
12
|
AuthType,
|
|
13
13
|
MODEL_GENERATION_CONFIG_FIELDS
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-P6LART6G.js";
|
|
15
15
|
import {
|
|
16
16
|
REASONING_EFFORT_TIERS,
|
|
17
17
|
normalizeReasoningEffort
|
|
@@ -5,14 +5,14 @@ import {
|
|
|
5
5
|
Text,
|
|
6
6
|
require_jsx_runtime,
|
|
7
7
|
theme
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-K4PZ5F5T.js";
|
|
9
9
|
import {
|
|
10
10
|
require_react
|
|
11
11
|
} from "./chunk-HTHUX2T5.js";
|
|
12
12
|
import {
|
|
13
13
|
stringWidth,
|
|
14
14
|
toCodePoints
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-WTSXKLG5.js";
|
|
16
16
|
import {
|
|
17
17
|
createDebugLogger
|
|
18
18
|
} from "./chunk-7NFB7LBQ.js";
|
|
@@ -23,6 +23,8 @@ var DaemonMetricsRing = class {
|
|
|
23
23
|
curQueueWaits = [];
|
|
24
24
|
curPromptDurations = [];
|
|
25
25
|
curLlmDurations = [];
|
|
26
|
+
curLlmApiErrors = 0;
|
|
27
|
+
curLlmApiRetries = 0;
|
|
26
28
|
curPipeInBytes = 0;
|
|
27
29
|
curPipeOutBytes = 0;
|
|
28
30
|
curTokensIn = 0;
|
|
@@ -49,6 +51,19 @@ var DaemonMetricsRing = class {
|
|
|
49
51
|
recordLlmDuration(durationMs) {
|
|
50
52
|
pushCapped(this.curLlmDurations, durationMs);
|
|
51
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Fold one model round's per-round model-API-error and automatic-retry
|
|
56
|
+
* increments (from the same token frame) into the open window. Both are
|
|
57
|
+
* plain counters — a burst in one window accrues exactly, past the sample
|
|
58
|
+
* cap that only bounds the percentile arrays. Non-finite / negative inputs
|
|
59
|
+
* are ignored so a malformed frame cannot poison the totals.
|
|
60
|
+
*/
|
|
61
|
+
recordApiActivity(errors, retries) {
|
|
62
|
+
if (Number.isFinite(errors) && errors > 0) this.curLlmApiErrors += errors;
|
|
63
|
+
if (Number.isFinite(retries) && retries > 0) {
|
|
64
|
+
this.curLlmApiRetries += retries;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
52
67
|
/** Fold one ACP-child pipe message's payload size into the open window. */
|
|
53
68
|
recordPipe(direction, bytes) {
|
|
54
69
|
if (!Number.isFinite(bytes) || bytes < 0) return;
|
|
@@ -84,6 +99,8 @@ var DaemonMetricsRing = class {
|
|
|
84
99
|
promptDurationP95Ms: percentile(this.curPromptDurations, 0.95),
|
|
85
100
|
llmApiP50Ms: percentile(this.curLlmDurations, 0.5),
|
|
86
101
|
llmApiP95Ms: percentile(this.curLlmDurations, 0.95),
|
|
102
|
+
llmApiErrors: this.curLlmApiErrors,
|
|
103
|
+
llmApiRetries: this.curLlmApiRetries,
|
|
87
104
|
cpuPercent: finiteGauge(gauges.cpuPercent),
|
|
88
105
|
rssBytes: finiteGauge(gauges.rssBytes),
|
|
89
106
|
heapUsedBytes: finiteGauge(gauges.heapUsedBytes),
|
|
@@ -109,6 +126,8 @@ var DaemonMetricsRing = class {
|
|
|
109
126
|
this.curQueueWaits.length = 0;
|
|
110
127
|
this.curPromptDurations.length = 0;
|
|
111
128
|
this.curLlmDurations.length = 0;
|
|
129
|
+
this.curLlmApiErrors = 0;
|
|
130
|
+
this.curLlmApiRetries = 0;
|
|
112
131
|
this.curPipeInBytes = 0;
|
|
113
132
|
this.curPipeOutBytes = 0;
|
|
114
133
|
this.curTokensIn = 0;
|
|
@@ -41,7 +41,7 @@ import {
|
|
|
41
41
|
} from "./chunk-KSO42X3Z.js";
|
|
42
42
|
import {
|
|
43
43
|
defaultSpawnChannelFactory
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-UFOKA4PR.js";
|
|
45
45
|
import {
|
|
46
46
|
BridgeChannelClosedError,
|
|
47
47
|
BridgeTimeoutError,
|
|
@@ -50,7 +50,7 @@ import {
|
|
|
50
50
|
STATUS_SCHEMA_VERSION,
|
|
51
51
|
createIdleWorkspaceExtensionsStatus,
|
|
52
52
|
createIdleWorkspaceHooksStatus
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-CUUXANEQ.js";
|
|
54
54
|
import {
|
|
55
55
|
canonicalizeWorkspace
|
|
56
56
|
} from "./chunk-W7FJ3N32.js";
|
|
@@ -70,11 +70,11 @@ import {
|
|
|
70
70
|
metadataBudgetBytes,
|
|
71
71
|
normalizeSnapshotPayload,
|
|
72
72
|
stableSessionArtifactId
|
|
73
|
-
} from "./chunk-
|
|
73
|
+
} from "./chunk-K7CRWKOE.js";
|
|
74
74
|
import {
|
|
75
75
|
DAEMON_TRACEPARENT_META_KEY,
|
|
76
76
|
DAEMON_TRACESTATE_META_KEY
|
|
77
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-P6LART6G.js";
|
|
78
78
|
import {
|
|
79
79
|
init_esbuild_shims
|
|
80
80
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -1588,10 +1588,14 @@ var BridgeClient = class {
|
|
|
1588
1588
|
return;
|
|
1589
1589
|
}
|
|
1590
1590
|
const durationMs = updateMeta?.["durationMs"];
|
|
1591
|
+
const apiErrors = updateMeta?.["apiErrors"];
|
|
1592
|
+
const apiRetries = updateMeta?.["apiRetries"];
|
|
1591
1593
|
this.onTokenUsage(
|
|
1592
1594
|
typeof inputTokens === "number" ? inputTokens : 0,
|
|
1593
1595
|
typeof outputTokens === "number" ? outputTokens : 0,
|
|
1594
|
-
typeof durationMs === "number" ? durationMs : void 0
|
|
1596
|
+
typeof durationMs === "number" ? durationMs : void 0,
|
|
1597
|
+
typeof apiErrors === "number" ? apiErrors : 0,
|
|
1598
|
+
typeof apiRetries === "number" ? apiRetries : 0
|
|
1595
1599
|
);
|
|
1596
1600
|
}
|
|
1597
1601
|
/**
|
|
@@ -5258,6 +5262,7 @@ function createAcpSessionBridge(opts) {
|
|
|
5258
5262
|
const aliveChannels = /* @__PURE__ */ new Set();
|
|
5259
5263
|
let inFlightChannelSpawn;
|
|
5260
5264
|
const byId = /* @__PURE__ */ new Map();
|
|
5265
|
+
const inFlightExtensionRefreshes = /* @__PURE__ */ new Map();
|
|
5261
5266
|
const toSessionSummary = /* @__PURE__ */ __name((entry) => {
|
|
5262
5267
|
let isWaitingForPermission = false;
|
|
5263
5268
|
let isWaitingForUserQuestion = false;
|
|
@@ -5435,10 +5440,12 @@ function createAcpSessionBridge(opts) {
|
|
|
5435
5440
|
// at the session/update fan-in to the daemon host's metrics ring via
|
|
5436
5441
|
// the telemetry seam. Optional-chained so non-daemon callers (tests,
|
|
5437
5442
|
// Mode A) that wire no `tokenUsage` metric are a silent no-op.
|
|
5438
|
-
(inputTokens, outputTokens, durationMs) => telemetry.metrics?.tokenUsage?.(
|
|
5443
|
+
(inputTokens, outputTokens, durationMs, apiErrors, apiRetries) => telemetry.metrics?.tokenUsage?.(
|
|
5439
5444
|
inputTokens,
|
|
5440
5445
|
outputTokens,
|
|
5441
|
-
durationMs
|
|
5446
|
+
durationMs,
|
|
5447
|
+
apiErrors,
|
|
5448
|
+
apiRetries
|
|
5442
5449
|
),
|
|
5443
5450
|
// `create_sub_session` tool: forward the request/response hook so a child
|
|
5444
5451
|
// tool can ask the daemon to spawn a sub-session and (for 'first-turn')
|
|
@@ -8030,12 +8037,26 @@ function createAcpSessionBridge(opts) {
|
|
|
8030
8037
|
return { refreshed: 0, failed: 0 };
|
|
8031
8038
|
}
|
|
8032
8039
|
try {
|
|
8033
|
-
|
|
8034
|
-
|
|
8035
|
-
|
|
8040
|
+
let inFlight = inFlightExtensionRefreshes.get(entry.sessionId);
|
|
8041
|
+
if (!inFlight || inFlight.connection !== entry.connection) {
|
|
8042
|
+
const promise = (async () => {
|
|
8043
|
+
await entry.connection.extMethod(
|
|
8036
8044
|
SERVE_CONTROL_EXT_METHODS.workspaceExtensionsRefresh,
|
|
8037
8045
|
{ sessionId: entry.sessionId }
|
|
8038
|
-
)
|
|
8046
|
+
);
|
|
8047
|
+
})();
|
|
8048
|
+
inFlight = { connection: entry.connection, promise };
|
|
8049
|
+
inFlightExtensionRefreshes.set(entry.sessionId, inFlight);
|
|
8050
|
+
const clear = /* @__PURE__ */ __name(() => {
|
|
8051
|
+
if (inFlightExtensionRefreshes.get(entry.sessionId) === inFlight) {
|
|
8052
|
+
inFlightExtensionRefreshes.delete(entry.sessionId);
|
|
8053
|
+
}
|
|
8054
|
+
}, "clear");
|
|
8055
|
+
void promise.then(clear, clear);
|
|
8056
|
+
}
|
|
8057
|
+
await Promise.race([
|
|
8058
|
+
withTimeout(
|
|
8059
|
+
inFlight.promise,
|
|
8039
8060
|
3e4,
|
|
8040
8061
|
SERVE_CONTROL_EXT_METHODS.workspaceExtensionsRefresh
|
|
8041
8062
|
),
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
escapeAnsiCtrlCodes
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-WTSXKLG5.js";
|
|
6
6
|
import {
|
|
7
7
|
wrapper_default
|
|
8
8
|
} from "./chunk-TYAMGABM.js";
|
|
@@ -50,6 +50,10 @@ function openVoiceStream(config, callbacks = {}, deps = {}) {
|
|
|
50
50
|
headers: options.headers
|
|
51
51
|
}));
|
|
52
52
|
return new Promise((resolve, reject) => {
|
|
53
|
+
if (deps.abortSignal?.aborted) {
|
|
54
|
+
reject(new Error("Voice stream opening was aborted."));
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
53
57
|
const streamUrl = deriveStreamUrl(config.baseUrl);
|
|
54
58
|
const ws = createWebSocket(streamUrl, {
|
|
55
59
|
headers: config.apiKey ? { Authorization: `Bearer ${config.apiKey}` } : {}
|
|
@@ -66,6 +70,12 @@ function openVoiceStream(config, callbacks = {}, deps = {}) {
|
|
|
66
70
|
let terminalError = null;
|
|
67
71
|
let finishedTranscript = null;
|
|
68
72
|
let backpressureWarned = false;
|
|
73
|
+
let onAbort;
|
|
74
|
+
const removeAbortListener = /* @__PURE__ */ __name(() => {
|
|
75
|
+
if (!onAbort) return;
|
|
76
|
+
deps.abortSignal?.removeEventListener("abort", onAbort);
|
|
77
|
+
onAbort = void 0;
|
|
78
|
+
}, "removeAbortListener");
|
|
69
79
|
const clearFinishTimer = /* @__PURE__ */ __name(() => {
|
|
70
80
|
if (finishTimer) {
|
|
71
81
|
clearTimeout(finishTimer);
|
|
@@ -81,6 +91,7 @@ function openVoiceStream(config, callbacks = {}, deps = {}) {
|
|
|
81
91
|
const fail = /* @__PURE__ */ __name((error) => {
|
|
82
92
|
if (settled) return;
|
|
83
93
|
settled = true;
|
|
94
|
+
removeAbortListener();
|
|
84
95
|
const normalized = error instanceof Error ? error : new Error(String(error));
|
|
85
96
|
clearConnectTimer();
|
|
86
97
|
clearFinishTimer();
|
|
@@ -101,6 +112,14 @@ function openVoiceStream(config, callbacks = {}, deps = {}) {
|
|
|
101
112
|
}
|
|
102
113
|
}
|
|
103
114
|
}, "fail");
|
|
115
|
+
if (deps.abortSignal) {
|
|
116
|
+
onAbort = /* @__PURE__ */ __name(() => fail(new Error("Voice stream opening was aborted.")), "onAbort");
|
|
117
|
+
if (deps.abortSignal.aborted) {
|
|
118
|
+
onAbort();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
deps.abortSignal.addEventListener("abort", onAbort, { once: true });
|
|
122
|
+
}
|
|
104
123
|
connectTimer = setTimeout(() => {
|
|
105
124
|
if (!started) fail(new Error("Voice stream connection timed out."));
|
|
106
125
|
}, CONNECT_TIMEOUT_MS);
|
|
@@ -208,6 +227,7 @@ function openVoiceStream(config, callbacks = {}, deps = {}) {
|
|
|
208
227
|
}
|
|
209
228
|
finishedTranscript = committed.trim();
|
|
210
229
|
settled = true;
|
|
230
|
+
removeAbortListener();
|
|
211
231
|
clearConnectTimer();
|
|
212
232
|
clearFinishTimer();
|
|
213
233
|
try {
|
|
@@ -234,6 +254,7 @@ function openVoiceStream(config, callbacks = {}, deps = {}) {
|
|
|
234
254
|
fail(error instanceof Error ? error : new Error(String(error)));
|
|
235
255
|
});
|
|
236
256
|
ws.on("close", () => {
|
|
257
|
+
removeAbortListener();
|
|
237
258
|
clearConnectTimer();
|
|
238
259
|
clearFinishTimer();
|
|
239
260
|
if (settled) return;
|
|
@@ -292,6 +313,10 @@ function openQwenAsrRealtimeStream(config, callbacks = {}, deps = {}) {
|
|
|
292
313
|
headers: options.headers
|
|
293
314
|
}));
|
|
294
315
|
return new Promise((resolve, reject) => {
|
|
316
|
+
if (deps.abortSignal?.aborted) {
|
|
317
|
+
reject(new Error("Voice stream opening was aborted."));
|
|
318
|
+
return;
|
|
319
|
+
}
|
|
295
320
|
const ws = createWebSocket(
|
|
296
321
|
deriveQwenRealtimeUrl(config.baseUrl, config.model),
|
|
297
322
|
{
|
|
@@ -310,6 +335,12 @@ function openQwenAsrRealtimeStream(config, callbacks = {}, deps = {}) {
|
|
|
310
335
|
let terminalError = null;
|
|
311
336
|
let failed = false;
|
|
312
337
|
let backpressureWarned = false;
|
|
338
|
+
let onAbort;
|
|
339
|
+
const removeAbortListener = /* @__PURE__ */ __name(() => {
|
|
340
|
+
if (!onAbort) return;
|
|
341
|
+
deps.abortSignal?.removeEventListener("abort", onAbort);
|
|
342
|
+
onAbort = void 0;
|
|
343
|
+
}, "removeAbortListener");
|
|
313
344
|
const sendJson = /* @__PURE__ */ __name((body) => {
|
|
314
345
|
ws.send(JSON.stringify({ event_id: randomUUID2(), ...body }));
|
|
315
346
|
}, "sendJson");
|
|
@@ -334,6 +365,7 @@ function openQwenAsrRealtimeStream(config, callbacks = {}, deps = {}) {
|
|
|
334
365
|
const fail = /* @__PURE__ */ __name((error) => {
|
|
335
366
|
if (failed) return;
|
|
336
367
|
failed = true;
|
|
368
|
+
removeAbortListener();
|
|
337
369
|
const normalized = toError(error);
|
|
338
370
|
clearConnectTimer();
|
|
339
371
|
clearFinishTimer();
|
|
@@ -352,6 +384,14 @@ function openQwenAsrRealtimeStream(config, callbacks = {}, deps = {}) {
|
|
|
352
384
|
terminalError = normalized;
|
|
353
385
|
callbacks.onError?.(normalized);
|
|
354
386
|
}, "fail");
|
|
387
|
+
if (deps.abortSignal) {
|
|
388
|
+
onAbort = /* @__PURE__ */ __name(() => fail(new Error("Voice stream opening was aborted.")), "onAbort");
|
|
389
|
+
if (deps.abortSignal.aborted) {
|
|
390
|
+
onAbort();
|
|
391
|
+
return;
|
|
392
|
+
}
|
|
393
|
+
deps.abortSignal.addEventListener("abort", onAbort, { once: true });
|
|
394
|
+
}
|
|
355
395
|
connectTimer = setTimeout(() => {
|
|
356
396
|
if (!opened) fail(new Error("Qwen ASR realtime connection timed out."));
|
|
357
397
|
}, CONNECT_TIMEOUT_MS2);
|
|
@@ -469,6 +509,7 @@ function openQwenAsrRealtimeStream(config, callbacks = {}, deps = {}) {
|
|
|
469
509
|
break;
|
|
470
510
|
}
|
|
471
511
|
failed = true;
|
|
512
|
+
removeAbortListener();
|
|
472
513
|
clearFinishTimer();
|
|
473
514
|
finishedTranscript = committed.trim();
|
|
474
515
|
finishResolve?.(finishedTranscript);
|
|
@@ -491,6 +532,7 @@ function openQwenAsrRealtimeStream(config, callbacks = {}, deps = {}) {
|
|
|
491
532
|
});
|
|
492
533
|
ws.on("error", fail);
|
|
493
534
|
ws.on("close", () => {
|
|
535
|
+
removeAbortListener();
|
|
494
536
|
clearConnectTimer();
|
|
495
537
|
clearFinishTimer();
|
|
496
538
|
if (failed) return;
|
|
@@ -523,8 +565,22 @@ __name(openQwenAsrRealtimeStream, "openQwenAsrRealtimeStream");
|
|
|
523
565
|
init_esbuild_shims();
|
|
524
566
|
var RETRY_DELAY_MS = 200;
|
|
525
567
|
var debugLogger3 = createDebugLogger("VOICE_STREAM");
|
|
526
|
-
function delay(ms) {
|
|
527
|
-
return new Promise((resolve) =>
|
|
568
|
+
function delay(ms, abortSignal) {
|
|
569
|
+
return new Promise((resolve, reject) => {
|
|
570
|
+
if (abortSignal?.aborted) {
|
|
571
|
+
reject(new Error("Voice stream opening was aborted."));
|
|
572
|
+
return;
|
|
573
|
+
}
|
|
574
|
+
const timer = setTimeout(() => {
|
|
575
|
+
abortSignal?.removeEventListener("abort", onAbort);
|
|
576
|
+
resolve();
|
|
577
|
+
}, ms);
|
|
578
|
+
const onAbort = /* @__PURE__ */ __name(() => {
|
|
579
|
+
clearTimeout(timer);
|
|
580
|
+
reject(new Error("Voice stream opening was aborted."));
|
|
581
|
+
}, "onAbort");
|
|
582
|
+
abortSignal?.addEventListener("abort", onAbort, { once: true });
|
|
583
|
+
});
|
|
528
584
|
}
|
|
529
585
|
__name(delay, "delay");
|
|
530
586
|
function isRetryable(error) {
|
|
@@ -537,7 +593,10 @@ function isRetryable(error) {
|
|
|
537
593
|
return true;
|
|
538
594
|
}
|
|
539
595
|
__name(isRetryable, "isRetryable");
|
|
540
|
-
async function openVoiceStreamWithRetry(open) {
|
|
596
|
+
async function openVoiceStreamWithRetry(open, opts = {}) {
|
|
597
|
+
if (opts.abortSignal?.aborted) {
|
|
598
|
+
throw new Error("Voice stream opening was aborted.");
|
|
599
|
+
}
|
|
541
600
|
try {
|
|
542
601
|
return await open();
|
|
543
602
|
} catch (error) {
|
|
@@ -545,7 +604,10 @@ async function openVoiceStreamWithRetry(open) {
|
|
|
545
604
|
throw error;
|
|
546
605
|
}
|
|
547
606
|
debugLogger3.debug("[voice] stream open failed, retrying:", error);
|
|
548
|
-
await delay(RETRY_DELAY_MS);
|
|
607
|
+
await delay(RETRY_DELAY_MS, opts.abortSignal);
|
|
608
|
+
if (opts.abortSignal?.aborted) {
|
|
609
|
+
throw new Error("Voice stream opening was aborted.");
|
|
610
|
+
}
|
|
549
611
|
return open();
|
|
550
612
|
}
|
|
551
613
|
}
|