@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.
Files changed (194) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +6 -0
  2. package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
  3. package/bundled/qc-helper/docs/qwen-serve.md +7 -2
  4. package/bundled/review/SKILL.md +23 -11
  5. package/chunks/{MaxSizedBox-QAYHOC4F.js → MaxSizedBox-67ODZ4SZ.js} +5 -6
  6. package/chunks/{StandaloneSessionPicker-D3R6YYX3.js → StandaloneSessionPicker-SIPBQT5Z.js} +17 -18
  7. package/chunks/{acpAgent-ENHBW72A.js → acpAgent-VPZJXLFX.js} +141 -80
  8. package/chunks/{agent-57LX4KMG.js → agent-Z7NWL6XL.js} +2 -3
  9. package/chunks/{agent-headless-AC6EVNAP.js → agent-headless-73HZ6ROQ.js} +2 -3
  10. package/chunks/{bridge-4OZH44MK.js → bridge-XFKW6S7Q.js} +5 -6
  11. package/chunks/{chunk-DPSWJWZI.js → chunk-2W3OOD4W.js} +1 -0
  12. package/chunks/{chunk-FDL4PB5H.js → chunk-3XJFUTNM.js} +8 -8
  13. package/chunks/{chunk-AAS2Q2TV.js → chunk-422XAKCK.js} +2 -2
  14. package/chunks/{chunk-7U7UIO5W.js → chunk-4FMG7EDJ.js} +19 -4
  15. package/chunks/{chunk-X7EBAABW.js → chunk-4YWLED2A.js} +1 -1
  16. package/chunks/{chunk-WN4D7YCI.js → chunk-5EBKKSBX.js} +1 -1
  17. package/chunks/{chunk-G6QTKQN4.js → chunk-5LROA5W4.js} +3 -3
  18. package/chunks/{chunk-SUWGUGAD.js → chunk-65N2J6V2.js} +2 -2
  19. package/chunks/{chunk-T2L6SGQY.js → chunk-6GETGQWP.js} +26 -6
  20. package/chunks/{chunk-T5C2OUCI.js → chunk-6GKMJPOC.js} +3 -3
  21. package/chunks/{chunk-K3PPUB46.js → chunk-6W6DI34P.js} +1 -1
  22. package/chunks/{chunk-WM5HY72H.js → chunk-7L4XBYVW.js} +2 -2
  23. package/chunks/{chunk-CLTWL6HD.js → chunk-7MJAZMXK.js} +5 -5
  24. package/chunks/{chunk-6HHAADP2.js → chunk-AAR5SGMD.js} +4 -4
  25. package/chunks/{chunk-P3S67A5R.js → chunk-B5I2IIWY.js} +3 -3
  26. package/chunks/{chunk-4DYYRLIE.js → chunk-CEW4HDPK.js} +639 -317
  27. package/chunks/{chunk-JR63TOV4.js → chunk-CJFNEBYB.js} +1 -1
  28. package/chunks/{chunk-PMRH4YYW.js → chunk-CUUXANEQ.js} +2 -1
  29. package/chunks/{chunk-Z56JO4JZ.js → chunk-DK33QJ3V.js} +6 -6
  30. package/chunks/{chunk-N7FCSERB.js → chunk-DPFBNG72.js} +1 -1
  31. package/chunks/{chunk-HZYUNZDQ.js → chunk-EQY6POVO.js} +1 -1
  32. package/chunks/{chunk-MBJ3D6SF.js → chunk-F7NXQH4Y.js} +1 -1
  33. package/chunks/{chunk-C4CXFRKY.js → chunk-FXMC7SL2.js} +25 -4
  34. package/chunks/{chunk-CSACSGAW.js → chunk-GGJII3FM.js} +2 -2
  35. package/chunks/{chunk-EU3U7USF.js → chunk-H3FQOPPS.js} +2 -2
  36. package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
  37. package/chunks/{chunk-MBP3K324.js → chunk-HHEFI4RP.js} +32 -11
  38. package/chunks/{chunk-B6ABUBYY.js → chunk-JSJFKYWT.js} +67 -5
  39. package/chunks/{chunk-QABSSDQH.js → chunk-K4PZ5F5T.js} +1 -1
  40. package/chunks/{chunk-SSFDPGFN.js → chunk-K7CRWKOE.js} +7879 -5472
  41. package/chunks/{chunk-J2TDDOSM.js → chunk-L37RC7MQ.js} +1 -1
  42. package/chunks/{chunk-V75IOTWF.js → chunk-L62SEJWY.js} +4 -4
  43. package/chunks/{chunk-HE54PGVI.js → chunk-LNUXFLLJ.js} +2 -2
  44. package/chunks/{chunk-PHYCWSDG.js → chunk-LQU7EVFA.js} +1 -1
  45. package/chunks/{chunk-AUGSSJX3.js → chunk-LTNI523B.js} +2 -2
  46. package/chunks/{chunk-4LJNI7MU.js → chunk-MO7O5722.js} +262 -7
  47. package/chunks/{chunk-S2QXYLUB.js → chunk-N6FXRR6P.js} +1 -1
  48. package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
  49. package/chunks/{chunk-XHW5VUIQ.js → chunk-OFEVHGVU.js} +157 -55
  50. package/chunks/{chunk-T7FSRWQ5.js → chunk-P6LART6G.js} +107 -6
  51. package/chunks/{chunk-GYGGUR4Q.js → chunk-Q5GLXH5Q.js} +3 -3
  52. package/chunks/{chunk-SE74CIZD.js → chunk-RDRVMDWV.js} +1 -1
  53. package/chunks/{chunk-DKXW66XA.js → chunk-SPUYQB4T.js} +1 -1
  54. package/chunks/{chunk-AGBFWLA5.js → chunk-TISZXPAX.js} +1 -1
  55. package/chunks/{chunk-ZLM3KXBT.js → chunk-TTUO4DNG.js} +14 -13
  56. package/chunks/{chunk-4QOPEEL2.js → chunk-UFOKA4PR.js} +1 -1
  57. package/chunks/{chunk-2MF6ICOL.js → chunk-V7EQTZYR.js} +36 -8
  58. package/chunks/{chunk-WWQ3QIJS.js → chunk-VBRRNQB7.js} +10 -10
  59. package/chunks/{chunk-OCC3UTWA.js → chunk-W34A5MJH.js} +1 -1
  60. package/chunks/{chunk-LAM6CGP5.js → chunk-WDW64OW3.js} +3 -3
  61. package/chunks/{chunk-DMTQY5GY.js → chunk-WDWJ4OQJ.js} +3 -3
  62. package/chunks/{chunk-B6KHOCU7.js → chunk-WIASPMLX.js} +8 -8
  63. package/chunks/{chunk-4FPUAYTT.js → chunk-WLXYAKV7.js} +4 -4
  64. package/chunks/{chunk-YWUK7OS7.js → chunk-WTSXKLG5.js} +1 -1
  65. package/chunks/{chunk-7BIZARI2.js → chunk-X362TMXZ.js} +4 -4
  66. package/chunks/{chunk-ASVORVFT.js → chunk-XLIRF7IK.js} +1 -1
  67. package/chunks/{chunk-DNKX35GS.js → chunk-XXJKGHZV.js} +4 -4
  68. package/chunks/{chunk-UI3W56WF.js → chunk-YU56QGXX.js} +1 -1
  69. package/chunks/{chunk-RJL5T4WJ.js → chunk-YX4LLZ3D.js} +47 -35
  70. package/chunks/{chunk-YH4J5XI3.js → chunk-YYPXHMWO.js} +4 -4
  71. package/chunks/{chunk-AAWKZ5R7.js → chunk-ZKMGAFYV.js} +1 -1
  72. package/chunks/{chunk-EUNRLYJG.js → chunk-ZQTZXVHP.js} +4 -4
  73. package/chunks/{computer-use-DIP5BWXP.js → computer-use-IYTX45WA.js} +2 -3
  74. package/chunks/{contextCommand-QU4GJWWD.js → contextCommand-272V77WU.js} +4 -5
  75. package/chunks/{create-sub-session-TCLIYVGR.js → create-sub-session-CBJMQLYP.js} +2 -3
  76. package/chunks/{daemon-CEZ27OH4.js → daemon-RNGFPMAB.js} +315 -36
  77. package/chunks/{daemon-status-provider-SIBFMLBQ.js → daemon-status-provider-L4STG5VO.js} +9 -10
  78. package/chunks/{earlyInputCapture-L66BEG2C.js → earlyInputCapture-EN4BRREQ.js} +2 -3
  79. package/chunks/{edit-Y5LAJSST.js → edit-OMAF2QDR.js} +2 -3
  80. package/chunks/{enter-worktree-X5LML7T4.js → enter-worktree-BBZX52HG.js} +2 -3
  81. package/chunks/{enterPlanMode-XWF32QOW.js → enterPlanMode-5NNFMBUY.js} +2 -3
  82. package/chunks/{environment-YVMA5F4I.js → environment-7TEWMJYN.js} +4 -5
  83. package/chunks/{errors-4Y5SUAOC.js → errors-I4VKVX3F.js} +4 -5
  84. package/chunks/{exit-worktree-SFHU7XYC.js → exit-worktree-FUWRJI33.js} +2 -3
  85. package/chunks/{exitPlanMode-FP3NAN6E.js → exitPlanMode-IHCJ5EEI.js} +2 -3
  86. package/chunks/{fast-path-ZJNFFCBM.js → fast-path-ZA57TOH4.js} +2 -2
  87. package/chunks/{gemini-5CAB22BI.js → gemini-UOAKVXBG.js} +91 -33
  88. package/chunks/{geminiContentGenerator-GE3HPIFB.js → geminiContentGenerator-G6UCE6MW.js} +1 -1
  89. package/chunks/{glob-YPACZAEL.js → glob-4GJQ2UFF.js} +2 -3
  90. package/chunks/{grep-IPR4XW37.js → grep-5QSYXF2E.js} +2 -3
  91. package/chunks/{handleAutoUpdate-P2KEP56V.js → handleAutoUpdate-ULHNWL6R.js} +6 -7
  92. package/chunks/{i18n-BRCT66AA.js → i18n-CYDUTF6F.js} +3 -4
  93. package/chunks/{initializer-34HXSK3A.js → initializer-NRFKUGIO.js} +7 -8
  94. package/chunks/{installationInfo-WOTDQMSC.js → installationInfo-WELKRHHE.js} +3 -4
  95. package/chunks/{list-XOGP7UPP.js → list-JVDXEG2E.js} +10 -11
  96. package/chunks/{loadedSettingsAdapter-L4YKGU6F.js → loadedSettingsAdapter-WAM4VUTG.js} +7 -8
  97. package/chunks/{mcp-HH7DIP7Y.js → mcp-YHOZN3ZM.js} +7 -8
  98. package/chunks/{monitor-25DEBT6U.js → monitor-R7XZPJHQ.js} +2 -3
  99. package/chunks/{nonInteractiveCli-CT3VSSLK.js → nonInteractiveCli-NSOB6D74.js} +34 -35
  100. package/chunks/{notebook-edit-TAVXSWQ6.js → notebook-edit-6RNKE2L2.js} +2 -3
  101. package/chunks/{openaiContentGenerator-6I7DKUAN.js → openaiContentGenerator-XNS5S64I.js} +2 -2
  102. package/chunks/{pidfile-SIQGCFLZ.js → pidfile-XE4RRR2P.js} +2 -3
  103. package/chunks/{qwenContentGenerator-5DDIXI2N.js → qwenContentGenerator-APDPJ3VN.js} +3 -4
  104. package/chunks/{read-file-WDOAYRFU.js → read-file-XSUWXSR7.js} +1 -1
  105. package/chunks/{ripGrep-MI7PHN3Q.js → ripGrep-APB3CDMU.js} +2 -3
  106. package/chunks/{run-qwen-serve-PNTYF3RE.js → run-qwen-serve-NWTGPERT.js} +224 -75
  107. package/chunks/{runtime-V3FBMUTG.js → runtime-EIO3NQKR.js} +8 -9
  108. package/chunks/{scheduler-4TAUIJBM.js → scheduler-JJDZBDRN.js} +2 -3
  109. package/chunks/{serve-WB2TR7XM.js → serve-WTIPB3EI.js} +7 -8
  110. package/chunks/{server-AF6LNFPK.js → server-NJPHQHLH.js} +2458 -755
  111. package/chunks/{session-BIGK4NRW.js → session-O4AO7FTS.js} +35 -36
  112. package/chunks/{settings-IXF5FIQO.js → settings-HQNDK7TG.js} +6 -7
  113. package/chunks/{shell-5VWJ2PPG.js → shell-UIXM6PWG.js} +2 -3
  114. package/chunks/{skill-SI667Y3B.js → skill-3XMB4ULV.js} +1 -1
  115. package/chunks/{spawnChannel-IKX6DD7J.js → spawnChannel-3R632QRM.js} +4 -5
  116. package/chunks/{src-55DZWDAK.js → src-USZKPUOC.js} +33 -4
  117. package/chunks/{standalone-update-MHLSFHE6.js → standalone-update-L5XW3D7K.js} +4 -5
  118. package/chunks/{startInteractiveUI-V2EDWLAX.js → startInteractiveUI-CPZOL2WB.js} +174 -122
  119. package/chunks/{team-create-IZAMLBJS.js → team-create-XXPRF3IQ.js} +2 -3
  120. package/chunks/{team-plan-approval-3R4RCKCP.js → team-plan-approval-EOTTKHDW.js} +2 -3
  121. package/chunks/{theme-manager-LCOXZ5DO.js → theme-manager-P6UITO2L.js} +2 -3
  122. package/chunks/{tool-search-NYNCD5LF.js → tool-search-DDNGK2LR.js} +1 -1
  123. package/chunks/{total-session-admission-PJWGOMQE.js → total-session-admission-PL5N7DNY.js} +5 -6
  124. package/chunks/{trustedFolders-DOJDHNYP.js → trustedFolders-C5LMF3UR.js} +3 -4
  125. package/chunks/types-ML3TRJQ5.js +16 -0
  126. package/chunks/{updateCheck-ZXL66KIG.js → updateCheck-QTVVISH7.js} +4 -5
  127. package/chunks/{validateNonInterActiveAuth-JSNJZCYY.js → validateNonInterActiveAuth-RY4RKBQG.js} +30 -31
  128. package/chunks/{version-3NLBENG5.js → version-U45RYOSD.js} +1 -1
  129. package/chunks/{workflow-BQYLF7XP.js → workflow-TCIAQYOA.js} +3 -4
  130. package/chunks/{workspace-providers-status-FA2DGEZW.js → workspace-providers-status-I3G2HYLY.js} +10 -11
  131. package/chunks/{workspace-registration-store-TARTAGMI.js → workspace-registration-store-IH5GLZ6Y.js} +1 -1
  132. package/chunks/{workspace-registry-AGE7WAXX.js → workspace-registry-QEKBELIX.js} +5 -6
  133. package/chunks/{workspace-service-ERC5VR2B.js → workspace-service-ORKHGLP3.js} +17 -14
  134. package/chunks/{workspace-skills-status-FKYWGNCN.js → workspace-skills-status-D7QCNDYY.js} +9 -10
  135. package/chunks/{write-file-S47KSK7Z.js → write-file-JGRQR5VM.js} +2 -3
  136. package/cli.js +11 -11
  137. package/package.json +3 -3
  138. package/web-shell/assets/{arc-Zj4EkBUY.js → arc-CUeDlxvE.js} +1 -1
  139. package/web-shell/assets/{architectureDiagram-3BPJPVTR-DAk1Ua3Y.js → architectureDiagram-3BPJPVTR-PiUszkQA.js} +1 -1
  140. package/web-shell/assets/{blockDiagram-GPEHLZMM-DBNqUthM.js → blockDiagram-GPEHLZMM-s2wYSO7e.js} +1 -1
  141. package/web-shell/assets/{c4Diagram-AAUBKEIU-Dq5QGJ53.js → c4Diagram-AAUBKEIU-DyLxZoz9.js} +1 -1
  142. package/web-shell/assets/channel-DkuJJ0qd.js +1 -0
  143. package/web-shell/assets/{chunk-2J33WTMH-DY0AeGru.js → chunk-2J33WTMH-Dsdai7Tk.js} +1 -1
  144. package/web-shell/assets/{chunk-4BX2VUAB-COX3OyIi.js → chunk-4BX2VUAB-DEosOjV7.js} +1 -1
  145. package/web-shell/assets/{chunk-55IACEB6-Csoyddbh.js → chunk-55IACEB6-sNsRLTXf.js} +1 -1
  146. package/web-shell/assets/{chunk-727SXJPM-BJPONdxX.js → chunk-727SXJPM-DkRNZzmh.js} +1 -1
  147. package/web-shell/assets/{chunk-AQP2D5EJ-syLVH6fg.js → chunk-AQP2D5EJ-BrsRNpzd.js} +1 -1
  148. package/web-shell/assets/{chunk-FMBD7UC4-Cfm59Nhw.js → chunk-FMBD7UC4-CI039lpl.js} +1 -1
  149. package/web-shell/assets/{chunk-ND2GUHAM-DZf6tAqS.js → chunk-ND2GUHAM-M-pkeIfu.js} +1 -1
  150. package/web-shell/assets/{chunk-QZHKN3VN-DKBp_v5q.js → chunk-QZHKN3VN-C4ckGNbH.js} +1 -1
  151. package/web-shell/assets/classDiagram-4FO5ZUOK-CwqHc0TB.js +1 -0
  152. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CwqHc0TB.js +1 -0
  153. package/web-shell/assets/{cose-bilkent-S5V4N54A-DUU3mMQ5.js → cose-bilkent-S5V4N54A-BciKUAFq.js} +1 -1
  154. package/web-shell/assets/{dagre-BM42HDAG-BUgNfbh-.js → dagre-BM42HDAG-C1nTSgU6.js} +1 -1
  155. package/web-shell/assets/{diagram-2AECGRRQ-DT7MVfAg.js → diagram-2AECGRRQ-BDPNWr1m.js} +1 -1
  156. package/web-shell/assets/{diagram-5GNKFQAL-Cv4YG-ec.js → diagram-5GNKFQAL-CNFhTszL.js} +1 -1
  157. package/web-shell/assets/{diagram-KO2AKTUF-BAe9LLkn.js → diagram-KO2AKTUF-CjPa4p5a.js} +1 -1
  158. package/web-shell/assets/{diagram-LMA3HP47-DW8wqTIP.js → diagram-LMA3HP47-ZzPykSyG.js} +1 -1
  159. package/web-shell/assets/{diagram-OG6HWLK6-CmkuWbaK.js → diagram-OG6HWLK6-0UVtZ9A4.js} +1 -1
  160. package/web-shell/assets/{erDiagram-TEJ5UH35-DwvdHjZ9.js → erDiagram-TEJ5UH35-CajDZCat.js} +1 -1
  161. package/web-shell/assets/{flowDiagram-I6XJVG4X-CSsXrhW_.js → flowDiagram-I6XJVG4X-BRuFBIvL.js} +1 -1
  162. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BtuznCdi.js → ganttDiagram-6RSMTGT7-BevGmJqG.js} +1 -1
  163. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DGmAm06g.js → gitGraphDiagram-PVQCEYII-DvPMpBMb.js} +1 -1
  164. package/web-shell/assets/index-Cnvv4VcI.css +5 -0
  165. package/web-shell/assets/index-D1Uyklxa.js +1088 -0
  166. package/web-shell/assets/{index-BEtz1cvN.js → index-DzHwQkQq.js} +1 -1
  167. package/web-shell/assets/{infoDiagram-5YYISTIA-OAiZ1q0K.js → infoDiagram-5YYISTIA-Oixn7tA9.js} +1 -1
  168. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-DyK0KTIT.js → ishikawaDiagram-YF4QCWOH-BgKpeg-j.js} +1 -1
  169. package/web-shell/assets/{journeyDiagram-JHISSGLW-DzYJlwfO.js → journeyDiagram-JHISSGLW-74mwxIaA.js} +1 -1
  170. package/web-shell/assets/{kanban-definition-UN3LZRKU-CU_tcDwi.js → kanban-definition-UN3LZRKU-D4D6cEqA.js} +1 -1
  171. package/web-shell/assets/{linear-DvZXjF17.js → linear-atZRE_L2.js} +1 -1
  172. package/web-shell/assets/{mermaid.core-_ZFEQlOl.js → mermaid.core-KKudX-JC.js} +5 -5
  173. package/web-shell/assets/{mindmap-definition-RKZ34NQL-Or4p64HB.js → mindmap-definition-RKZ34NQL-CMCej9yG.js} +1 -1
  174. package/web-shell/assets/{pieDiagram-4H26LBE5-lXE-zZ6b.js → pieDiagram-4H26LBE5-nhx40X7q.js} +1 -1
  175. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DUXb9mUV.js → quadrantDiagram-W4KKPZXB-CUmVcN3M.js} +1 -1
  176. package/web-shell/assets/{requirementDiagram-4Y6WPE33-D_10uHfo.js → requirementDiagram-4Y6WPE33-C_vyEwyy.js} +1 -1
  177. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-E8c0fPqe.js → sankeyDiagram-5OEKKPKP-DU6G4VWR.js} +1 -1
  178. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CJMtFttK.js → sequenceDiagram-3UESZ5HK-DdeRR_KJ.js} +1 -1
  179. package/web-shell/assets/{stateDiagram-AJRCARHV-DhbviRbB.js → stateDiagram-AJRCARHV-C6iCI8ps.js} +1 -1
  180. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-C0_6nR6C.js +1 -0
  181. package/web-shell/assets/{timeline-definition-PNZ67QCA-CM5yMkFK.js → timeline-definition-PNZ67QCA-B_Ea8Cb7.js} +1 -1
  182. package/web-shell/assets/{vennDiagram-CIIHVFJN-BCi-zWNN.js → vennDiagram-CIIHVFJN-BPUVZEJA.js} +1 -1
  183. package/web-shell/assets/{wardley-L42UT6IY-BJ_yJNjJ.js → wardley-L42UT6IY-BWEj0lKY.js} +1 -1
  184. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-TjtLk-qN.js → wardleyDiagram-YWT4CUSO-BvDsdIQw.js} +1 -1
  185. package/web-shell/assets/{xychartDiagram-2RQKCTM6-D1TjyoQ3.js → xychartDiagram-2RQKCTM6-crz0QhF_.js} +1 -1
  186. package/web-shell/index.html +2 -2
  187. package/chunks/chunk-CU3L64TP.js +0 -93
  188. package/chunks/types-JNKGKUJT.js +0 -12
  189. package/web-shell/assets/channel-DWfYijFS.js +0 -1
  190. package/web-shell/assets/classDiagram-4FO5ZUOK-DDht-78J.js +0 -1
  191. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-DDht-78J.js +0 -1
  192. package/web-shell/assets/index-B9Xwf4OS.css +0 -5
  193. package/web-shell/assets/index-BUkM4ZXX.js +0 -1088
  194. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-CntljfwW.js +0 -1
@@ -3,12 +3,13 @@
3
3
  import {
4
4
  DaemonMetricsRing,
5
5
  computeCpuPercent
6
- } from "./chunk-YVEDCAUE.js";
6
+ } from "./chunk-HGT6JR3U.js";
7
7
  import {
8
8
  CAPABILITIES_SCHEMA_VERSION,
9
9
  ClientMcpSenderRegistry,
10
10
  PathMutexRegistry,
11
11
  SERVE_CAPABILITY_REGISTRY,
12
+ WorkspaceVoiceCoordinator,
12
13
  allowOriginCors,
13
14
  allowOriginMode,
14
15
  bearerAuth,
@@ -26,7 +27,7 @@ import {
26
27
  positiveFiniteOrNull,
27
28
  require_express,
28
29
  resolveWebShellDir
29
- } from "./chunk-4LJNI7MU.js";
30
+ } from "./chunk-MO7O5722.js";
30
31
  import {
31
32
  isLoopbackBind
32
33
  } from "./chunk-RXFQM6FQ.js";
@@ -48,7 +49,7 @@ import {
48
49
  MAX_REGISTERED_WORKSPACES,
49
50
  resolveWorkspaceInputs,
50
51
  workspaceRegistrationId
51
- } from "./chunk-J2TDDOSM.js";
52
+ } from "./chunk-L37RC7MQ.js";
52
53
  import {
53
54
  canonicalizeWorkspace
54
55
  } from "./chunk-W7FJ3N32.js";
@@ -88,9 +89,8 @@ import {
88
89
  } from "./chunk-YUZI3WAC.js";
89
90
  import {
90
91
  getCliVersion
91
- } from "./chunk-UI3W56WF.js";
92
+ } from "./chunk-YU56QGXX.js";
92
93
  import "./chunk-VJNBRRZG.js";
93
- import "./chunk-CU3L64TP.js";
94
94
  import "./chunk-H6XPXXMH.js";
95
95
  import "./chunk-5M6IDOMF.js";
96
96
  import "./chunk-E2UVIFI2.js";
@@ -1137,8 +1137,8 @@ var channelWorkerRuntimePromise;
1137
1137
  async function loadChannelWorkerRuntime() {
1138
1138
  channelWorkerRuntimePromise ??= Promise.all([
1139
1139
  import("./channel-worker-supervisor-PCDAZN4D.js"),
1140
- import("./pidfile-SIQGCFLZ.js"),
1141
- import("./runtime-V3FBMUTG.js"),
1140
+ import("./pidfile-XE4RRR2P.js"),
1141
+ import("./runtime-EIO3NQKR.js"),
1142
1142
  import("./cli-entry-path-4VJ3Y6T2.js"),
1143
1143
  import("./channel-worker-group-K7QKH6IG.js"),
1144
1144
  import("./channel-worker-manager-5RWKSGEU.js")
@@ -1246,7 +1246,7 @@ function shouldPreheatBridge(deps) {
1246
1246
  __name(shouldPreheatBridge, "shouldPreheatBridge");
1247
1247
  var coreRuntimePromise;
1248
1248
  function loadCoreRuntime() {
1249
- coreRuntimePromise ??= import("./src-55DZWDAK.js");
1249
+ coreRuntimePromise ??= import("./src-USZKPUOC.js");
1250
1250
  return coreRuntimePromise;
1251
1251
  }
1252
1252
  __name(loadCoreRuntime, "loadCoreRuntime");
@@ -1276,10 +1276,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
1276
1276
  var settingsRuntimePromise;
1277
1277
  function loadSettingsRuntimeModules() {
1278
1278
  settingsRuntimePromise ??= Promise.all([
1279
- import("./settings-IXF5FIQO.js"),
1280
- import("./environment-YVMA5F4I.js"),
1281
- import("./loadedSettingsAdapter-L4YKGU6F.js"),
1282
- import("./trustedFolders-DOJDHNYP.js")
1279
+ import("./settings-HQNDK7TG.js"),
1280
+ import("./environment-7TEWMJYN.js"),
1281
+ import("./loadedSettingsAdapter-WAM4VUTG.js"),
1282
+ import("./trustedFolders-C5LMF3UR.js")
1283
1283
  ]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
1284
1284
  settings,
1285
1285
  environment,
@@ -1292,7 +1292,7 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
1292
1292
  var channelWebhookConfigRuntimePromise;
1293
1293
  function loadChannelWebhookConfigRuntime() {
1294
1294
  channelWebhookConfigRuntimePromise ??= Promise.all([
1295
- import("./runtime-V3FBMUTG.js"),
1295
+ import("./runtime-EIO3NQKR.js"),
1296
1296
  import("./config-utils-CFT33LTP.js")
1297
1297
  ]).then(([channelRuntime, configUtils]) => ({
1298
1298
  loadChannelsConfig: channelRuntime.loadChannelsConfig,
@@ -1317,16 +1317,16 @@ async function loadServeRuntimeModules() {
1317
1317
  totalSessionAdmissionModule,
1318
1318
  workspaceRegistryModule
1319
1319
  ] = await Promise.all([
1320
- import("./server-AF6LNFPK.js"),
1321
- import("./bridge-4OZH44MK.js"),
1322
- import("./spawnChannel-IKX6DD7J.js"),
1323
- import("./workspace-service-ERC5VR2B.js"),
1324
- import("./types-JNKGKUJT.js"),
1325
- import("./daemon-status-provider-SIBFMLBQ.js"),
1326
- import("./workspace-providers-status-FA2DGEZW.js"),
1327
- import("./workspace-skills-status-FKYWGNCN.js"),
1328
- import("./total-session-admission-PJWGOMQE.js"),
1329
- import("./workspace-registry-AGE7WAXX.js")
1320
+ import("./server-NJPHQHLH.js"),
1321
+ import("./bridge-XFKW6S7Q.js"),
1322
+ import("./spawnChannel-3R632QRM.js"),
1323
+ import("./workspace-service-ORKHGLP3.js"),
1324
+ import("./types-ML3TRJQ5.js"),
1325
+ import("./daemon-status-provider-L4STG5VO.js"),
1326
+ import("./workspace-providers-status-I3G2HYLY.js"),
1327
+ import("./workspace-skills-status-D7QCNDYY.js"),
1328
+ import("./total-session-admission-PL5N7DNY.js"),
1329
+ import("./workspace-registry-QEKBELIX.js")
1330
1330
  ]);
1331
1331
  return {
1332
1332
  createServeApp: serverModule.createServeApp,
@@ -1337,6 +1337,7 @@ async function loadServeRuntimeModules() {
1337
1337
  createSpawnChannelFactory: spawnChannelModule.createSpawnChannelFactory,
1338
1338
  createDaemonWorkspaceService: workspaceModule.createDaemonWorkspaceService,
1339
1339
  WorkspaceSettingsPartialPersistError: workspaceTypesModule.WorkspaceSettingsPartialPersistError,
1340
+ WorkspaceSkillNotToggleableError: workspaceTypesModule.WorkspaceSkillNotToggleableError,
1340
1341
  createDaemonStatusProvider: daemonStatusProviderModule.createDaemonStatusProvider,
1341
1342
  createWorkspaceProvidersStatusProvider: workspaceProvidersStatusModule.createWorkspaceProvidersStatusProvider,
1342
1343
  createWorkspaceSkillsStatusProvider: workspaceSkillsStatusModule.createWorkspaceSkillsStatusProvider,
@@ -2140,7 +2141,7 @@ async function runQwenServe(optsIn, deps = {}) {
2140
2141
  }
2141
2142
  let workspaceRegistrationStore = deps.workspaceRegistrationStore;
2142
2143
  if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
2143
- const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-TARTAGMI.js");
2144
+ const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-IH5GLZ6Y.js");
2144
2145
  workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
2145
2146
  }
2146
2147
  if (workspaceRegistrationStore) {
@@ -2383,10 +2384,24 @@ async function runQwenServe(optsIn, deps = {}) {
2383
2384
  void runtimeReady.catch(() => {
2384
2385
  });
2385
2386
  const disposeDaemonEventLoopMonitor = /* @__PURE__ */ __name(() => {
2386
- daemonEventLoopMonitor?.dispose();
2387
+ const eventLoopMonitor = daemonEventLoopMonitor;
2387
2388
  daemonEventLoopMonitor = void 0;
2388
- daemonMetricsSampler?.dispose();
2389
+ const metricsSampler = daemonMetricsSampler;
2389
2390
  daemonMetricsSampler = void 0;
2391
+ try {
2392
+ eventLoopMonitor?.dispose();
2393
+ } catch (err) {
2394
+ daemonLog.warn(
2395
+ `event loop monitor dispose error: ${err instanceof Error ? err.message : String(err)}`
2396
+ );
2397
+ }
2398
+ try {
2399
+ metricsSampler?.dispose();
2400
+ } catch (err) {
2401
+ daemonLog.warn(
2402
+ `metrics sampler dispose error: ${err instanceof Error ? err.message : String(err)}`
2403
+ );
2404
+ }
2390
2405
  }, "disposeDaemonEventLoopMonitor");
2391
2406
  let channelWorkerManager;
2392
2407
  let channelWorkerManagerStarting;
@@ -2514,6 +2529,78 @@ async function runQwenServe(optsIn, deps = {}) {
2514
2529
  () => runtimeStartupError
2515
2530
  );
2516
2531
  const shutdownBridges = /* @__PURE__ */ new WeakSet();
2532
+ const disposedRuntimeApps = /* @__PURE__ */ new WeakSet();
2533
+ const stoppedRuntimeAppProducers = /* @__PURE__ */ new WeakSet();
2534
+ const stoppedExtensionReconcilers = /* @__PURE__ */ new WeakSet();
2535
+ const stopExtensionReconciler = /* @__PURE__ */ __name((app2) => {
2536
+ if (!app2 || stoppedExtensionReconcilers.has(app2)) return;
2537
+ stoppedExtensionReconcilers.add(app2);
2538
+ const stopExtensionGenerationReconciler = app2.locals?.["stopExtensionGenerationReconciler"];
2539
+ try {
2540
+ stopExtensionGenerationReconciler?.();
2541
+ } catch (err) {
2542
+ daemonLog.warn(
2543
+ `extension generation reconciler dispose error: ${err instanceof Error ? err.message : String(err)}`
2544
+ );
2545
+ }
2546
+ }, "stopExtensionReconciler");
2547
+ const stopRuntimeAppProducers = /* @__PURE__ */ __name((app2) => {
2548
+ if (!app2 || stoppedRuntimeAppProducers.has(app2)) return;
2549
+ stoppedRuntimeAppProducers.add(app2);
2550
+ const locals = app2.locals;
2551
+ const stopSafely = /* @__PURE__ */ __name((name, stop) => {
2552
+ try {
2553
+ stop?.();
2554
+ } catch (err) {
2555
+ daemonLog.warn(
2556
+ `${name} dispose error: ${err instanceof Error ? err.message : String(err)}`
2557
+ );
2558
+ }
2559
+ }, "stopSafely");
2560
+ stopSafely("scheduled-task keepalive", locals.stopScheduledTaskKeepalive);
2561
+ stopSafely("workspace git state", locals.stopWorkspaceGitState);
2562
+ for (const stop of locals.subSessionStoppers ?? []) {
2563
+ stopSafely("sub-session launcher", stop);
2564
+ }
2565
+ stopExtensionReconciler(app2);
2566
+ }, "stopRuntimeAppProducers");
2567
+ const disposeRuntimeAppResources = /* @__PURE__ */ __name((app2) => {
2568
+ if (!app2 || disposedRuntimeApps.has(app2)) return;
2569
+ disposedRuntimeApps.add(app2);
2570
+ stopRuntimeAppProducers(app2);
2571
+ const deviceFlowRegistry = getDeviceFlowRegistry(app2);
2572
+ if (deviceFlowRegistry) {
2573
+ try {
2574
+ deviceFlowRegistry.dispose();
2575
+ } catch (err) {
2576
+ daemonLog.warn(
2577
+ `device-flow registry dispose error: ${err instanceof Error ? err.message : String(err)}`
2578
+ );
2579
+ }
2580
+ }
2581
+ const acpHandle = app2.locals?.["acpHandle"];
2582
+ if (acpHandle?.dispose) {
2583
+ try {
2584
+ acpHandle.dispose();
2585
+ } catch (err) {
2586
+ daemonLog.warn(
2587
+ `ACP handle dispose error: ${err instanceof Error ? err.message : String(err)}`
2588
+ );
2589
+ }
2590
+ }
2591
+ const rateLimiter = getRateLimiter(app2);
2592
+ if (rateLimiter) {
2593
+ try {
2594
+ rateLimiter.setDraining(true);
2595
+ rateLimiter.dispose();
2596
+ } catch (err) {
2597
+ daemonLog.warn(
2598
+ `rate limiter dispose error: ${err instanceof Error ? err.message : String(err)}`
2599
+ );
2600
+ }
2601
+ }
2602
+ disposeDaemonEventLoopMonitor();
2603
+ }, "disposeRuntimeAppResources");
2517
2604
  const getRuntimeBridgesForCleanup = /* @__PURE__ */ __name(() => {
2518
2605
  const appForCleanup = runtimeApp ?? runtimeAppForCleanup;
2519
2606
  const registry = appForCleanup?.locals?.["workspaceRegistry"];
@@ -2700,12 +2787,15 @@ async function runQwenServe(optsIn, deps = {}) {
2700
2787
  // `agent_message_chunk._meta` (`usage` + `durationMs`) at the bridge's
2701
2788
  // single session/update fan-in. Increments (not cumulative), so the ring
2702
2789
  // sums tokens per window (token-burn chart) and pools the round-trip times
2703
- // for the LLM-latency percentiles.
2704
- tokenUsage(inputTokens, outputTokens, durationMs) {
2790
+ // for the LLM-latency percentiles. `apiErrors` / `apiRetries` ride the
2791
+ // same frame (per-round increments, 0 when none) and window into the
2792
+ // model-API-health chart.
2793
+ tokenUsage(inputTokens, outputTokens, durationMs, apiErrors, apiRetries) {
2705
2794
  metricsRing.recordTokens(inputTokens, outputTokens);
2706
2795
  if (typeof durationMs === "number") {
2707
2796
  metricsRing.recordLlmDuration(durationMs);
2708
2797
  }
2798
+ metricsRing.recordApiActivity(apiErrors ?? 0, apiRetries ?? 0);
2709
2799
  }
2710
2800
  };
2711
2801
  return telemetry;
@@ -2810,6 +2900,63 @@ async function runQwenServe(optsIn, deps = {}) {
2810
2900
  [...next].sort()
2811
2901
  );
2812
2902
  }), "persistDisabledToolsFn");
2903
+ const persistDisabledSkillsFn = /* @__PURE__ */ __name((workspace, skillName, enabled) => withSettingsLock(workspace, async () => {
2904
+ const fresh = settingsRuntime.settings.loadSettings(workspace);
2905
+ const normalizedName = skillName.trim().toLowerCase();
2906
+ const disabledNames = /* @__PURE__ */ __name((value) => Array.isArray(value) ? value.filter(
2907
+ (entry) => typeof entry === "string"
2908
+ ) : [], "disabledNames");
2909
+ const lockedScopes = [
2910
+ ["system", fresh.system.settings.skills?.disabled],
2911
+ ["user", fresh.user.settings.skills?.disabled],
2912
+ ["systemDefaults", fresh.systemDefaults.settings.skills?.disabled]
2913
+ ];
2914
+ for (const [scope, names] of lockedScopes) {
2915
+ if (disabledNames(names).some(
2916
+ (name) => name.trim().toLowerCase() === normalizedName
2917
+ )) {
2918
+ throw new runtime.WorkspaceSkillNotToggleableError(
2919
+ skillName,
2920
+ "locked",
2921
+ scope
2922
+ );
2923
+ }
2924
+ }
2925
+ const workspaceDisabled = disabledNames(
2926
+ fresh.workspace.settings.skills?.disabled
2927
+ );
2928
+ const next = [];
2929
+ let found = false;
2930
+ let changed = false;
2931
+ for (const name of workspaceDisabled) {
2932
+ if (name.trim().toLowerCase() !== normalizedName) {
2933
+ next.push(name);
2934
+ continue;
2935
+ }
2936
+ if (enabled) {
2937
+ changed = true;
2938
+ continue;
2939
+ }
2940
+ if (!found) {
2941
+ next.push(skillName);
2942
+ found = true;
2943
+ if (name !== skillName) changed = true;
2944
+ } else {
2945
+ changed = true;
2946
+ }
2947
+ }
2948
+ if (!enabled && !found) {
2949
+ next.push(skillName);
2950
+ changed = true;
2951
+ }
2952
+ if (!changed) return { changed: false, disabled: workspaceDisabled };
2953
+ fresh.setValue(
2954
+ WORKSPACE_SETTING_SCOPE,
2955
+ "skills.disabled",
2956
+ next.length > 0 ? next : void 0
2957
+ );
2958
+ return { changed: true, disabled: next };
2959
+ }), "persistDisabledSkillsFn");
2813
2960
  const persistSettingFn = /* @__PURE__ */ __name((workspace, scope, key, value) => withSettingsLock(workspace, async () => {
2814
2961
  const fresh = settingsRuntime.settings.loadSettings(workspace);
2815
2962
  fresh.setValue(scope, key, value);
@@ -2842,7 +2989,7 @@ async function runQwenServe(optsIn, deps = {}) {
2842
2989
  );
2843
2990
  }
2844
2991
  }), "persistSettingsFn");
2845
- const { createSubSessionLauncher } = await import("./create-sub-session-TCLIYVGR.js");
2992
+ const { createSubSessionLauncher } = await import("./create-sub-session-CBJMQLYP.js");
2846
2993
  const subSessionLauncher = createSubSessionLauncher({
2847
2994
  getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
2848
2995
  boundWorkspace
@@ -2883,14 +3030,18 @@ async function runQwenServe(optsIn, deps = {}) {
2883
3030
  internalRuntimeBridgesForCleanup.push(bridge);
2884
3031
  }
2885
3032
  runtimeBridges.push(bridge);
3033
+ let invalidatePrimaryServeFeaturesCache = /* @__PURE__ */ __name(() => {
3034
+ }, "invalidatePrimaryServeFeaturesCache");
2886
3035
  const workspaceService = runtime.createDaemonWorkspaceService({
2887
3036
  boundWorkspace,
2888
3037
  contextFilename: contextFilenameForInit ?? "QWEN.md",
2889
3038
  statusProvider,
2890
3039
  workspaceProvidersStatusProvider,
2891
3040
  workspaceSkillsStatusProvider,
3041
+ voiceEnv: runtimeEffectiveEnv,
2892
3042
  isChannelLive: /* @__PURE__ */ __name(() => bridge.isChannelLive(), "isChannelLive"),
2893
3043
  persistDisabledTools: persistDisabledToolsFn,
3044
+ persistDisabledSkills: persistDisabledSkillsFn,
2894
3045
  persistSetting: persistSettingFn,
2895
3046
  persistSettings: persistSettingsFn,
2896
3047
  preheatAcpChild: /* @__PURE__ */ __name(() => bridge.preheat(), "preheatAcpChild"),
@@ -2956,7 +3107,12 @@ async function runQwenServe(optsIn, deps = {}) {
2956
3107
  queryWorkspaceStatus: /* @__PURE__ */ __name((method, idle) => bridge.queryWorkspaceStatus(method, idle), "queryWorkspaceStatus"),
2957
3108
  invokeWorkspaceCommand: /* @__PURE__ */ __name((method, params, invokeOpts) => bridge.invokeWorkspaceCommand(method, params, invokeOpts), "invokeWorkspaceCommand"),
2958
3109
  refreshExtensionsForAllSessions: /* @__PURE__ */ __name(() => bridge.refreshExtensionsForAllSessions(), "refreshExtensionsForAllSessions"),
2959
- publishWorkspaceEvent: /* @__PURE__ */ __name((event) => bridge.publishWorkspaceEvent(event), "publishWorkspaceEvent")
3110
+ publishWorkspaceEvent: /* @__PURE__ */ __name((event) => {
3111
+ if (event.type === "settings_changed" || event.type === "settings_reloaded") {
3112
+ invalidatePrimaryServeFeaturesCache();
3113
+ }
3114
+ bridge.publishWorkspaceEvent(event);
3115
+ }, "publishWorkspaceEvent")
2960
3116
  });
2961
3117
  const workspaceRuntimes = [
2962
3118
  {
@@ -3118,9 +3274,12 @@ async function runQwenServe(optsIn, deps = {}) {
3118
3274
  env: secondaryEnv.effectiveEnv
3119
3275
  }),
3120
3276
  workspaceSkillsStatusProvider: runtime.createWorkspaceSkillsStatusProvider(),
3277
+ voiceEnv: secondaryEnv.effectiveEnv,
3278
+ voiceSettingsScope: WORKSPACE_SETTING_SCOPE,
3121
3279
  isChannelLive: /* @__PURE__ */ __name(() => secondaryBridge.isChannelLive(), "isChannelLive"),
3122
3280
  preheatAcpChild: /* @__PURE__ */ __name(() => secondaryBridge.preheat(), "preheatAcpChild"),
3123
3281
  persistDisabledTools: persistDisabledToolsFn,
3282
+ persistDisabledSkills: persistDisabledSkillsFn,
3124
3283
  persistSetting: persistSettingFn,
3125
3284
  persistSettings: persistSettingsFn,
3126
3285
  reloadDaemonEnv: /* @__PURE__ */ __name((workspace) => withSettingsLock(workspace, async () => {
@@ -3190,6 +3349,7 @@ async function runQwenServe(optsIn, deps = {}) {
3190
3349
  const workspaceRegistry = runtime.createWorkspaceRegistry(workspaceRuntimes, {
3191
3350
  sessionOwnerIndex
3192
3351
  });
3352
+ const workspaceVoiceCoordinator = new WorkspaceVoiceCoordinator();
3193
3353
  core.registerDaemonGaugeCallbacks({
3194
3354
  sessionCount: /* @__PURE__ */ __name(() => workspaceRegistry.list().reduce((sum, item) => sum + item.bridge.sessionCount, 0), "sessionCount"),
3195
3355
  sseCount: /* @__PURE__ */ __name(() => runtime.getActiveSseCount(), "sseCount"),
@@ -3377,9 +3537,12 @@ async function runQwenServe(optsIn, deps = {}) {
3377
3537
  env: wsEnv.effectiveEnv
3378
3538
  }),
3379
3539
  workspaceSkillsStatusProvider: runtime.createWorkspaceSkillsStatusProvider(),
3540
+ voiceEnv: wsEnv.effectiveEnv,
3541
+ voiceSettingsScope: WORKSPACE_SETTING_SCOPE,
3380
3542
  isChannelLive: /* @__PURE__ */ __name(() => wsBridge.isChannelLive(), "isChannelLive"),
3381
3543
  preheatAcpChild: /* @__PURE__ */ __name(() => wsBridge.preheat(), "preheatAcpChild"),
3382
3544
  persistDisabledTools: persistDisabledToolsFn,
3545
+ persistDisabledSkills: persistDisabledSkillsFn,
3383
3546
  persistSetting: persistSettingFn,
3384
3547
  persistSettings: persistSettingsFn,
3385
3548
  reloadDaemonEnv: /* @__PURE__ */ __name((workspace) => withSettingsLock(workspace, async () => {
@@ -3483,15 +3646,18 @@ async function runQwenServe(optsIn, deps = {}) {
3483
3646
  beginDrain(runtimeToDrain) {
3484
3647
  totalSessionAdmission.beginWorkspaceDrain(runtimeToDrain.workspaceCwd);
3485
3648
  channelWorkerManager?.beginWorkspaceDrain(runtimeToDrain.workspaceCwd);
3649
+ workspaceVoiceCoordinator.beginWorkspaceDrain(runtimeToDrain);
3486
3650
  },
3487
3651
  cancelDrain(runtimeToDrain) {
3488
3652
  channelWorkerManager?.cancelWorkspaceDrain(runtimeToDrain.workspaceCwd);
3489
3653
  totalSessionAdmission.cancelWorkspaceDrain(runtimeToDrain.workspaceCwd);
3654
+ workspaceVoiceCoordinator.cancelWorkspaceDrain(runtimeToDrain);
3490
3655
  },
3491
3656
  completeDrain(runtimeToDrain) {
3492
3657
  totalSessionAdmission.completeWorkspaceDrain(
3493
3658
  runtimeToDrain.workspaceCwd
3494
3659
  );
3660
+ workspaceVoiceCoordinator.completeWorkspaceDrain(runtimeToDrain);
3495
3661
  },
3496
3662
  getActivity(runtimeToDrain) {
3497
3663
  return {
@@ -3500,13 +3666,18 @@ async function runQwenServe(optsIn, deps = {}) {
3500
3666
  ).inFlight,
3501
3667
  channelWorkers: channelWorkerManager?.workspaceActivity(
3502
3668
  runtimeToDrain.workspaceCwd
3503
- ) ?? 0
3669
+ ) ?? 0,
3670
+ voiceSessions: workspaceVoiceCoordinator.getWorkspaceActivity(runtimeToDrain)
3504
3671
  };
3505
3672
  },
3506
3673
  disposeRuntime(runtimeToDrain, reason = "workspace_removed") {
3507
3674
  const existing = runtimeCleanupPromises.get(runtimeToDrain);
3508
3675
  if (existing) return existing;
3509
3676
  const cleanup = (async () => {
3677
+ await workspaceVoiceCoordinator.disposeRuntime(
3678
+ runtimeToDrain,
3679
+ reason
3680
+ );
3510
3681
  const stopSubSessions = subSessionStoppersByWorkspace.get(
3511
3682
  runtimeToDrain.workspaceCwd
3512
3683
  );
@@ -3580,6 +3751,7 @@ async function runQwenServe(optsIn, deps = {}) {
3580
3751
  createWorkspaceRuntime: createDynamicWorkspaceRuntime,
3581
3752
  workspaceRegistrationStore,
3582
3753
  workspaceRuntimeRemoval,
3754
+ voiceCoordinator: workspaceVoiceCoordinator,
3583
3755
  bridge,
3584
3756
  webShellDir,
3585
3757
  boundWorkspace,
@@ -3636,6 +3808,7 @@ async function runQwenServe(optsIn, deps = {}) {
3636
3808
  // so the WS provider and the child-answering bridge share one sender map.
3637
3809
  clientMcpSenderRegistry,
3638
3810
  persistDisabledTools: persistDisabledToolsFn,
3811
+ persistDisabledSkills: persistDisabledSkillsFn,
3639
3812
  persistSetting: persistSettingFn,
3640
3813
  persistSettings: persistSettingsFn,
3641
3814
  sessionArtifactsPersistenceAvailable: sessionArtifactsPersistenceAvailableFromSettings(
@@ -3679,6 +3852,7 @@ async function runQwenServe(optsIn, deps = {}) {
3679
3852
  }
3680
3853
  ), "installAuthProvider")
3681
3854
  });
3855
+ invalidatePrimaryServeFeaturesCache = app2.locals.invalidateServeFeaturesCache ?? invalidatePrimaryServeFeaturesCache;
3682
3856
  app2.locals.subSessionStoppers = subSessionStoppers;
3683
3857
  subSessionStoppers.push(subSessionLauncher.stop);
3684
3858
  subSessionStoppersByWorkspace.set(boundWorkspace, subSessionLauncher.stop);
@@ -3938,10 +4112,12 @@ async function runQwenServe(optsIn, deps = {}) {
3938
4112
  const failRuntimeStartup = /* @__PURE__ */ __name(async (err, bridgeForCleanup) => {
3939
4113
  const error = err instanceof Error ? err : new Error(String(err));
3940
4114
  if (runtimeStartupSettled) {
4115
+ disposeRuntimeAppResources(runtimeApp ?? runtimeAppForCleanup);
3941
4116
  await shutdownBridgeAfterFailedStartup(bridgeForCleanup);
3942
4117
  return;
3943
4118
  }
3944
4119
  runtimeStartupSettled = true;
4120
+ disposeRuntimeAppResources(runtimeApp ?? runtimeAppForCleanup);
3945
4121
  runtimeApp = void 0;
3946
4122
  clearRuntimeStartupTimer();
3947
4123
  const message = error.message;
@@ -4166,6 +4342,7 @@ async function runQwenServe(optsIn, deps = {}) {
4166
4342
  clearRuntimeStartFallbackTimer();
4167
4343
  runtimeStarting = buildRuntime().then(async (runtime) => {
4168
4344
  if (runtimeStartupSettled) {
4345
+ disposeRuntimeAppResources(runtime.app);
4169
4346
  await shutdownBridgeAfterFailedStartup(runtime.bridge);
4170
4347
  return;
4171
4348
  }
@@ -4327,39 +4504,7 @@ async function runQwenServe(optsIn, deps = {}) {
4327
4504
  if (workspaceManagementHandle !== initiallyMountedManagement) {
4328
4505
  await workspaceManagementHandle?.sealAndWait?.();
4329
4506
  }
4330
- const stopScheduledTaskKeepalive = appForCleanup?.locals?.["stopScheduledTaskKeepalive"];
4331
- stopScheduledTaskKeepalive?.();
4332
- const stopWorkspaceGitState = appForCleanup?.locals?.["stopWorkspaceGitState"];
4333
- stopWorkspaceGitState?.();
4334
- const stoppers = appForCleanup?.locals?.["subSessionStoppers"];
4335
- if (stoppers) {
4336
- for (const stop of stoppers) stop();
4337
- }
4338
- const deviceFlowRegistry = appForCleanup ? getDeviceFlowRegistry(appForCleanup) : void 0;
4339
- if (deviceFlowRegistry) {
4340
- try {
4341
- deviceFlowRegistry.dispose();
4342
- } catch (err) {
4343
- daemonLog.warn(
4344
- `device-flow registry dispose error: ${err instanceof Error ? err.message : String(err)}`
4345
- );
4346
- }
4347
- }
4348
- const acpHandle = appForCleanup?.locals?.["acpHandle"];
4349
- if (acpHandle?.dispose) {
4350
- try {
4351
- acpHandle.dispose();
4352
- } catch (err) {
4353
- daemonLog.warn(
4354
- `ACP handle dispose error: ${err instanceof Error ? err.message : String(err)}`
4355
- );
4356
- }
4357
- }
4358
- const rl = appForCleanup ? getRateLimiter(appForCleanup) : void 0;
4359
- if (rl) {
4360
- rl.setDraining(true);
4361
- rl.dispose();
4362
- }
4507
+ disposeRuntimeAppResources(appForCleanup);
4363
4508
  disposeDaemonEventLoopMonitor();
4364
4509
  if (channelWorkerManager) {
4365
4510
  await channelWorkerManager.shutdown().catch((err) => {
@@ -4379,18 +4524,22 @@ async function runQwenServe(optsIn, deps = {}) {
4379
4524
  const managedRuntimes = workspaceRegistry.listManaged();
4380
4525
  for (const workspaceRuntime of managedRuntimes) {
4381
4526
  managedRuntimeBridges.add(workspaceRuntime.bridge);
4382
- await runtimeRemoval.disposeRuntime(workspaceRuntime, "daemon_shutdown").catch((err) => {
4383
- daemonLog.error(
4384
- "workspace runtime shutdown error",
4385
- err instanceof Error ? err : null
4386
- );
4387
- bridgeShutdownError = err instanceof Error ? err : new Error(String(err));
4388
- try {
4389
- workspaceRuntime.bridge.killAllSync();
4390
- } catch {
4391
- }
4392
- });
4393
4527
  }
4528
+ await Promise.all(
4529
+ managedRuntimes.map(
4530
+ (workspaceRuntime) => runtimeRemoval.disposeRuntime(workspaceRuntime, "daemon_shutdown").catch((err) => {
4531
+ daemonLog.error(
4532
+ "workspace runtime shutdown error",
4533
+ err instanceof Error ? err : null
4534
+ );
4535
+ bridgeShutdownError = err instanceof Error ? err : new Error(String(err));
4536
+ try {
4537
+ workspaceRuntime.bridge.killAllSync();
4538
+ } catch {
4539
+ }
4540
+ })
4541
+ )
4542
+ );
4394
4543
  }
4395
4544
  for (const bridgeForShutdown of getRuntimeBridgesForCleanup()) {
4396
4545
  if (managedRuntimeBridges.has(bridgeForShutdown)) continue;
@@ -13,27 +13,26 @@ import {
13
13
  resolveExtensionChannelEntrySpecifier,
14
14
  selectFirstModel,
15
15
  sessionsPath
16
- } from "./chunk-GYGGUR4Q.js";
17
- import "./chunk-6HHAADP2.js";
16
+ } from "./chunk-Q5GLXH5Q.js";
17
+ import "./chunk-AAR5SGMD.js";
18
18
  import "./chunk-57OAHC2Y.js";
19
19
  import "./chunk-OATTJGPJ.js";
20
20
  import "./chunk-ZRKBI3DP.js";
21
21
  import "./chunk-V6WHFGST.js";
22
22
  import "./chunk-SXU3KKNI.js";
23
23
  import "./chunk-UDXSXLER.js";
24
- import "./chunk-T2L6SGQY.js";
24
+ import "./chunk-6GETGQWP.js";
25
25
  import "./chunk-RKUWKYED.js";
26
- import "./chunk-SE74CIZD.js";
27
- import "./chunk-WN4D7YCI.js";
26
+ import "./chunk-RDRVMDWV.js";
27
+ import "./chunk-5EBKKSBX.js";
28
28
  import "./chunk-GOXKNSDZ.js";
29
29
  import "./chunk-IDS7MSUP.js";
30
30
  import "./chunk-QRUIS3DN.js";
31
- import "./chunk-X7EBAABW.js";
31
+ import "./chunk-4YWLED2A.js";
32
32
  import "./chunk-ALGGS7UH.js";
33
33
  import "./chunk-MR3PXB6E.js";
34
34
  import "./chunk-YUZI3WAC.js";
35
- import "./chunk-SSFDPGFN.js";
36
- import "./chunk-CU3L64TP.js";
35
+ import "./chunk-K7CRWKOE.js";
37
36
  import "./chunk-H6XPXXMH.js";
38
37
  import "./chunk-5M6IDOMF.js";
39
38
  import "./chunk-E67NFMF4.js";
@@ -54,7 +53,7 @@ import "./chunk-2Z5UX4KI.js";
54
53
  import "./chunk-ARKANCNX.js";
55
54
  import "./chunk-L5U3ELZX.js";
56
55
  import "./chunk-TYLOFD2U.js";
57
- import "./chunk-T7FSRWQ5.js";
56
+ import "./chunk-P6LART6G.js";
58
57
  import "./chunk-4WKAA4KS.js";
59
58
  import "./chunk-CR3C7WXL.js";
60
59
  import "./chunk-CARU2RR2.js";
@@ -6,8 +6,7 @@ import {
6
6
  import {
7
7
  FILE_HISTORY_DIR,
8
8
  getSubagentsRootDir
9
- } from "./chunk-SSFDPGFN.js";
10
- import "./chunk-CU3L64TP.js";
9
+ } from "./chunk-K7CRWKOE.js";
11
10
  import "./chunk-H6XPXXMH.js";
12
11
  import "./chunk-5M6IDOMF.js";
13
12
  import "./chunk-E67NFMF4.js";
@@ -28,7 +27,7 @@ import "./chunk-2Z5UX4KI.js";
28
27
  import "./chunk-ARKANCNX.js";
29
28
  import "./chunk-L5U3ELZX.js";
30
29
  import "./chunk-TYLOFD2U.js";
31
- import "./chunk-T7FSRWQ5.js";
30
+ import "./chunk-P6LART6G.js";
32
31
  import "./chunk-4WKAA4KS.js";
33
32
  import "./chunk-CR3C7WXL.js";
34
33
  import "./chunk-CARU2RR2.js";
@@ -3,24 +3,23 @@
3
3
  import {
4
4
  maybeOpenWebShellBrowser,
5
5
  serveCommand
6
- } from "./chunk-LAM6CGP5.js";
6
+ } from "./chunk-WDW64OW3.js";
7
7
  import "./chunk-6H67XLET.js";
8
8
  import "./chunk-6RLROE6G.js";
9
9
  import "./chunk-COH43MRJ.js";
10
10
  import "./chunk-TJTKSVIV.js";
11
- import "./chunk-T2L6SGQY.js";
11
+ import "./chunk-6GETGQWP.js";
12
12
  import "./chunk-RKUWKYED.js";
13
- import "./chunk-SE74CIZD.js";
14
- import "./chunk-WN4D7YCI.js";
13
+ import "./chunk-RDRVMDWV.js";
14
+ import "./chunk-5EBKKSBX.js";
15
15
  import "./chunk-GOXKNSDZ.js";
16
16
  import "./chunk-IDS7MSUP.js";
17
17
  import "./chunk-QRUIS3DN.js";
18
- import "./chunk-X7EBAABW.js";
18
+ import "./chunk-4YWLED2A.js";
19
19
  import "./chunk-ALGGS7UH.js";
20
20
  import "./chunk-MR3PXB6E.js";
21
21
  import "./chunk-YUZI3WAC.js";
22
- import "./chunk-SSFDPGFN.js";
23
- import "./chunk-CU3L64TP.js";
22
+ import "./chunk-K7CRWKOE.js";
24
23
  import "./chunk-H6XPXXMH.js";
25
24
  import "./chunk-5M6IDOMF.js";
26
25
  import "./chunk-E67NFMF4.js";
@@ -41,7 +40,7 @@ import "./chunk-2Z5UX4KI.js";
41
40
  import "./chunk-ARKANCNX.js";
42
41
  import "./chunk-L5U3ELZX.js";
43
42
  import "./chunk-TYLOFD2U.js";
44
- import "./chunk-T7FSRWQ5.js";
43
+ import "./chunk-P6LART6G.js";
45
44
  import "./chunk-4WKAA4KS.js";
46
45
  import "./chunk-CR3C7WXL.js";
47
46
  import "./chunk-CARU2RR2.js";