@qwen-code/qwen-code 0.19.9 → 0.19.10-nightly.20260715.c538bd70d

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 (310) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +8 -0
  2. package/bundled/qc-helper/docs/features/channels/dingtalk.md +3 -0
  3. package/bundled/qc-helper/docs/features/channels/overview.md +11 -3
  4. package/bundled/qc-helper/docs/features/code-review.md +88 -44
  5. package/bundled/qc-helper/docs/features/commands.md +6 -6
  6. package/bundled/qc-helper/docs/features/hooks.md +29 -0
  7. package/bundled/qc-helper/docs/features/sub-agents.md +21 -0
  8. package/bundled/qc-helper/docs/qwen-serve.md +46 -20
  9. package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +1 -1
  10. package/bundled/review/DESIGN.md +219 -33
  11. package/bundled/review/SKILL.md +449 -153
  12. package/chunks/{MaxSizedBox-6HYJ3ZPJ.js → MaxSizedBox-LOOBDOTZ.js} +31 -31
  13. package/chunks/{StandaloneSessionPicker-WS4GXYOG.js → StandaloneSessionPicker-76CLZSH2.js} +51 -49
  14. package/chunks/{acpAgent-5FWSOZL5.js → acpAgent-DFJOK7EB.js} +567 -482
  15. package/chunks/{agent-HOLHB3RT.js → agent-OJQWXNHP.js} +26 -26
  16. package/chunks/{agent-headless-SXL6H56A.js → agent-headless-ND7GOORY.js} +26 -26
  17. package/chunks/{anthropicContentGenerator-L73TO3DB.js → anthropicContentGenerator-56U3YCP2.js} +5 -5
  18. package/chunks/{artifact-tool-U7IRTLIV.js → artifact-tool-MIZLXBLF.js} +2 -2
  19. package/chunks/{askUserQuestion-2DLUUZZG.js → askUserQuestion-XMJVPNWM.js} +2 -2
  20. package/chunks/{bridge-BCJQ7BBB.js → bridge-SNJK2JLK.js} +32 -32
  21. package/chunks/{ca-UJ6HC4H2.js → ca-C2JTT2N5.js} +4 -1
  22. package/chunks/channel-worker-group-K7QKH6IG.js +13 -0
  23. package/chunks/channel-worker-manager-YSFB4HUU.js +418 -0
  24. package/chunks/channel-worker-supervisor-QCKIOYZD.js +20 -0
  25. package/chunks/{chunk-CCDMCZPP.js → chunk-26UABK2C.js} +1 -1
  26. package/chunks/{chunk-LXNEJD34.js → chunk-2FO5GFKZ.js} +1 -1
  27. package/chunks/{chunk-L36P3NBD.js → chunk-2W3OOD4W.js} +2 -0
  28. package/chunks/{chunk-7R3CZA3Q.js → chunk-2Z5UX4KI.js} +1 -1
  29. package/chunks/chunk-3MX7D6QN.js +516 -0
  30. package/chunks/{chunk-CLFKOZEK.js → chunk-3XULHBC7.js} +1 -1
  31. package/chunks/chunk-4QZADKJS.js +34 -0
  32. package/chunks/{chunk-E2IY465S.js → chunk-4UDHAJFV.js} +10 -10
  33. package/chunks/{chunk-5U27BZ72.js → chunk-55SAYASQ.js} +190 -77
  34. package/chunks/chunk-5HBA2Z7V.js +28 -0
  35. package/chunks/{chunk-ZJE7NSL3.js → chunk-5M6IDOMF.js} +34 -97
  36. package/chunks/{chunk-HVY356M2.js → chunk-5SQ55XJZ.js} +3 -3
  37. package/chunks/{chunk-EAXLGSFP.js → chunk-6GRAQNTY.js} +8 -8
  38. package/chunks/{chunk-K434OPES.js → chunk-6WPJRYLZ.js} +3 -3
  39. package/chunks/{chunk-VWPVHAMO.js → chunk-7DXHIMXL.js} +5 -1
  40. package/chunks/{chunk-J4TSQ5EQ.js → chunk-7NFB7LBQ.js} +8 -1
  41. package/chunks/{chunk-5SFOMFG4.js → chunk-7R4DPSRA.js} +36 -2
  42. package/chunks/{chunk-W2UIXQDL.js → chunk-7STBROEV.js} +1 -1
  43. package/chunks/{chunk-BMGVRZN4.js → chunk-AETEZU4U.js} +1 -1
  44. package/chunks/{chunk-HPDUL5MF.js → chunk-AGZWN4WV.js} +1 -1
  45. package/chunks/{chunk-RDJSGHZE.js → chunk-ALGGS7UH.js} +1 -38
  46. package/chunks/{chunk-GWHYEOV2.js → chunk-ARKANCNX.js} +2 -1
  47. package/chunks/{chunk-34Z3U5RQ.js → chunk-AU4R7ACM.js} +518 -114
  48. package/chunks/{channel-worker-supervisor-WSOAAYUO.js → chunk-B7MFJBKE.js} +67 -35
  49. package/chunks/{chunk-524RQP4Q.js → chunk-B7NUUEXC.js} +10 -4
  50. package/chunks/{chunk-MC23XKFE.js → chunk-BLPMRN4B.js} +3 -3
  51. package/chunks/{chunk-A3XKDTSH.js → chunk-BRRKAUGR.js} +4 -4
  52. package/chunks/{chunk-W3JHSWRP.js → chunk-BUPLOPUA.js} +4 -4
  53. package/chunks/{chunk-3VAGG5T5.js → chunk-BYOOK22F.js} +121 -16
  54. package/chunks/{chunk-EMDMPBJ4.js → chunk-C47ENMZJ.js} +3 -3
  55. package/chunks/{chunk-3AHXV67U.js → chunk-C5TVXLJZ.js} +1 -1
  56. package/chunks/{chunk-X6TJ3YZV.js → chunk-CGT5TQIZ.js} +159 -57
  57. package/chunks/{chunk-4C5BQ2D2.js → chunk-CQQD7MDG.js} +82 -12
  58. package/chunks/{chunk-KKNMOEZH.js → chunk-E2UVIFI2.js} +185 -398
  59. package/chunks/{chunk-P67PFTUT.js → chunk-EPY4ZEU6.js} +4 -4
  60. package/chunks/{chunk-6PESIEKJ.js → chunk-EZSRHWGS.js} +68 -6
  61. package/chunks/{chunk-4GORAUCN.js → chunk-F333XEAU.js} +1 -1
  62. package/chunks/{chunk-YLV3XXFB.js → chunk-FBU7WRZI.js} +17 -1
  63. package/chunks/{chunk-Q6I5QHMH.js → chunk-FGTCZJOD.js} +1 -1
  64. package/chunks/{chunk-LK7KUE55.js → chunk-FSA7ERJ2.js} +1 -1
  65. package/chunks/{chunk-B4G2WOFA.js → chunk-FTU55ZZ7.js} +3 -3
  66. package/chunks/{chunk-EGYZ275M.js → chunk-GCD7PEDZ.js} +4 -4
  67. package/chunks/{chunk-SJHDYNHF.js → chunk-GDQQRV43.js} +3 -3
  68. package/chunks/{chunk-3BTRNWWD.js → chunk-GOXKNSDZ.js} +1 -64
  69. package/chunks/{chunk-GZRTYZ2R.js → chunk-GQKWT45X.js} +154 -1
  70. package/chunks/chunk-GYTKQYDB.js +23 -0
  71. package/chunks/{chunk-YVEDCAUE.js → chunk-HGT6JR3U.js} +19 -0
  72. package/chunks/{chunk-N3EMS75V.js → chunk-HKM2TEF7.js} +1268 -1233
  73. package/chunks/chunk-IDS7MSUP.js +74 -0
  74. package/chunks/{chunk-PVZM22CK.js → chunk-INKAZNYC.js} +5 -5
  75. package/chunks/{chunk-3G7CIHVV.js → chunk-IOQ75R4R.js} +4 -4
  76. package/chunks/{chunk-AURZZYMD.js → chunk-IQOOJSPR.js} +4 -4
  77. package/chunks/{chunk-AKIVHSJR.js → chunk-J4UQXGVL.js} +111 -93
  78. package/chunks/{chunk-VTU57BWZ.js → chunk-JEKOCLRN.js} +1 -1
  79. package/chunks/{chunk-B5ORX3FG.js → chunk-JGUT3LWZ.js} +6 -1
  80. package/chunks/{chunk-PDZ7MBDG.js → chunk-JIQHT2O6.js} +27 -6
  81. package/chunks/{chunk-XUOOWUZS.js → chunk-JPAH76WA.js} +1 -1
  82. package/chunks/{chunk-BAPGSC7U.js → chunk-K4LG6TVJ.js} +23 -9
  83. package/chunks/chunk-KET3M4K4.js +493 -0
  84. package/chunks/{chunk-ORBGV7NJ.js → chunk-KKRTYONM.js} +6 -4
  85. package/chunks/{chunk-SCGXUJBT.js → chunk-KPA5QGN2.js} +3 -3
  86. package/chunks/{chunk-IAVB3HM3.js → chunk-KSO42X3Z.js} +13 -0
  87. package/chunks/{chunk-4QLQE5WJ.js → chunk-L5U3ELZX.js} +1 -1
  88. package/chunks/{chunk-77XJ3SWN.js → chunk-LIUEXYPL.js} +5 -5
  89. package/chunks/{chunk-4ZVWQHEQ.js → chunk-LQIDP6K5.js} +1 -1
  90. package/chunks/{chunk-34MW4KTI.js → chunk-LT5CRUA5.js} +2 -2
  91. package/chunks/{chunk-DC5Z3DU6.js → chunk-LXLTBIDP.js} +43 -6
  92. package/chunks/{chunk-VA4KQY6V.js → chunk-MEK7CQJR.js} +3 -3
  93. package/chunks/{chunk-KHUQZZJ6.js → chunk-MO7O5722.js} +370 -36
  94. package/chunks/chunk-MR3PXB6E.js +48 -0
  95. package/chunks/{chunk-PODM4SZ4.js → chunk-MV52C5MA.js} +5 -5
  96. package/chunks/{chunk-WL4L7EZH.js → chunk-OA4JVLSA.js} +27 -1
  97. package/chunks/{chunk-X4NKFGFJ.js → chunk-OJAMDVF5.js} +0 -15
  98. package/chunks/{chunk-BZIFY5TF.js → chunk-OKAIGAYW.js} +3 -3
  99. package/chunks/{chunk-ECNYL4AA.js → chunk-OPNPGO6D.js} +1 -1
  100. package/chunks/{chunk-3SJSQXNS.js → chunk-PEJWA3QQ.js} +12 -8
  101. package/chunks/{chunk-MXL5UP4X.js → chunk-Q6TUALBE.js} +1 -1
  102. package/chunks/{chunk-QYMQSECS.js → chunk-QAW7PIHT.js} +2 -2
  103. package/chunks/{chunk-5HOMWMCL.js → chunk-QEDYXCLG.js} +4167 -1338
  104. package/chunks/chunk-QNNTA7IX.js +91 -0
  105. package/chunks/{chunk-D2GFWEXB.js → chunk-QNT5T4Q2.js} +6 -6
  106. package/chunks/{chunk-CUMMSHH6.js → chunk-R5XLNDE2.js} +1 -1
  107. package/chunks/{chunk-LUODI7WD.js → chunk-RCEEXIOO.js} +6 -4
  108. package/chunks/{chunk-WQUQVGTF.js → chunk-RQWDLG6Z.js} +183 -96
  109. package/chunks/{chunk-XYQSMABS.js → chunk-SLCVZX6F.js} +4 -4
  110. package/chunks/{chunk-CEA3E3JB.js → chunk-SPJQO2CE.js} +2 -2
  111. package/chunks/{chunk-JSG7ZSBC.js → chunk-TQBODCFD.js} +1 -1
  112. package/chunks/chunk-TV6K2FB4.js +224 -0
  113. package/chunks/{chunk-5XUCZNSY.js → chunk-TYLOFD2U.js} +1 -1
  114. package/chunks/{chunk-CNEIYWSA.js → chunk-UKWAQ7AV.js} +5 -5
  115. package/chunks/{chunk-7PU4FYLG.js → chunk-US4YQT62.js} +4 -4
  116. package/chunks/{chunk-Q4YQW46J.js → chunk-UYPPCIJQ.js} +36 -18
  117. package/chunks/{chunk-YAUFFXDS.js → chunk-UZKG7HFG.js} +12 -11
  118. package/chunks/{chunk-GWLSNBG4.js → chunk-VQLRHJKL.js} +30 -26
  119. package/chunks/{chunk-L6P4KPHR.js → chunk-VRUHAVZS.js} +59 -39
  120. package/chunks/{chunk-HKMAENAO.js → chunk-W2U4RJJU.js} +8 -6
  121. package/chunks/{chunk-ATAKVRIF.js → chunk-WDSCTLAB.js} +7 -7
  122. package/chunks/{chunk-ZLXQN2QS.js → chunk-WIEO4CWB.js} +1 -1
  123. package/chunks/{chunk-OQ4DRIOA.js → chunk-WJOC24IW.js} +2 -2
  124. package/chunks/{chunk-J3JA76CF.js → chunk-WTNZ6DXB.js} +1 -1
  125. package/chunks/{chunk-NVYTCB5Z.js → chunk-XCR44EEA.js} +14589 -13980
  126. package/chunks/{chunk-TDEXZKMT.js → chunk-Y66VOBRP.js} +2 -2
  127. package/chunks/{chunk-CC2ITGCF.js → chunk-YHN5SUIJ.js} +49 -6
  128. package/chunks/{chunk-D5SKC4YG.js → chunk-ZBAROUR6.js} +41 -13
  129. package/chunks/{chunk-U2NNEY4R.js → chunk-ZEEVKDO7.js} +1 -1
  130. package/chunks/{chunk-5VXNZWGF.js → chunk-ZLOHB76C.js} +1 -1
  131. package/chunks/{chunk-JZETEN3Z.js → chunk-ZNCLTRNU.js} +3 -3
  132. package/chunks/{chunk-TO6QE22P.js → chunk-ZP4ZZJJG.js} +26 -22
  133. package/chunks/{chunk-UOZWKTQG.js → chunk-ZPAHLFZU.js} +2 -2
  134. package/chunks/{chunk-XLA62MYB.js → chunk-ZTXZ7FM4.js} +2 -2
  135. package/chunks/{computer-use-HM37RX6A.js → computer-use-DRETHEQF.js} +26 -26
  136. package/chunks/{config-utils-NV2SVGPB.js → config-utils-XSHOMMK4.js} +3 -2
  137. package/chunks/{contextCommand-OF5SFGH2.js → contextCommand-7YJUW23J.js} +28 -28
  138. package/chunks/{create-sub-session-INX7TXJI.js → create-sub-session-EAB2U5XW.js} +2 -2
  139. package/chunks/{create-sub-session-KPRT7ECJ.js → create-sub-session-L5HOZAEL.js} +26 -26
  140. package/chunks/{cron-create-AMBKGZX6.js → cron-create-GMVKSXZT.js} +4 -4
  141. package/chunks/{cron-delete-LRU4OJYG.js → cron-delete-VDZKUAVK.js} +4 -4
  142. package/chunks/{cron-list-WVP2JXER.js → cron-list-UG7C7RAR.js} +4 -4
  143. package/chunks/{daemon-ARHTSTXP.js → daemon-MI5HF26N.js} +603 -62
  144. package/chunks/{daemon-status-provider-B2UTZUJ2.js → daemon-status-provider-2D47GOJT.js} +36 -36
  145. package/chunks/{de-EBJN3OVN.js → de-2VCDRDGU.js} +4 -1
  146. package/chunks/{dist-WKPOYU7O.js → dist-IEXZC5ZR.js} +1 -1
  147. package/chunks/{dist-XKU3ABM5.js → dist-PQK4GCKA.js} +1 -1
  148. package/chunks/{dist-VHV4EVHG.js → dist-U75JK3PF.js} +1 -1
  149. package/chunks/{dist-R7LN5AZE.js → dist-VXO7QBON.js} +2 -2
  150. package/chunks/{dist-PNVLTKTL.js → dist-WH4TZSH3.js} +158 -4
  151. package/chunks/{dist-QYCAEZIT.js → dist-X2ABIW5R.js} +5 -1
  152. package/chunks/{earlyInputCapture-3VTHRC4C.js → earlyInputCapture-OJQPGCSX.js} +27 -27
  153. package/chunks/{edit-VNI4NJ73.js → edit-LZOAFLT2.js} +27 -27
  154. package/chunks/{en-5A6LA7RK.js → en-NJCA3TAA.js} +5 -1
  155. package/chunks/{enter-worktree-IYYBKPZT.js → enter-worktree-VL2TCGI5.js} +26 -26
  156. package/chunks/{enterPlanMode-GMC5FD5A.js → enterPlanMode-QGHBHZWI.js} +42 -27
  157. package/chunks/{environment-5HSSRMJ7.js → environment-2G5IC2EU.js} +30 -29
  158. package/chunks/{errors-HMFCJJ7P.js → errors-7QNQDNI2.js} +28 -28
  159. package/chunks/{exit-worktree-6BHCMP5G.js → exit-worktree-5V3X2MRH.js} +26 -26
  160. package/chunks/{exitPlanMode-CJW7G74W.js → exitPlanMode-XDPNQB4H.js} +26 -26
  161. package/chunks/{fast-path-FRDMDVHG.js → fast-path-NNSD4BVZ.js} +3 -3
  162. package/chunks/{fast-path-settings-5QZE64HR.js → fast-path-settings-DAOVFADC.js} +6 -4
  163. package/chunks/{fr-YXRABLYZ.js → fr-5F3E7WKD.js} +4 -1
  164. package/chunks/{gemini-QYSEGHAX.js → gemini-RKDUWGXJ.js} +139 -76
  165. package/chunks/{geminiContentGenerator-J7YNZDYP.js → geminiContentGenerator-V7QGHXVF.js} +4 -4
  166. package/chunks/{glob-BRCSGFOT.js → glob-ZNQUUOTS.js} +28 -27
  167. package/chunks/{grep-EE2DUOSY.js → grep-NYIGLM7R.js} +26 -26
  168. package/chunks/{handleAutoUpdate-5NWTLR67.js → handleAutoUpdate-UBQ4IQXY.js} +30 -30
  169. package/chunks/{i18n-BASPENNQ.js → i18n-5T3S6SGP.js} +27 -27
  170. package/chunks/initializer-TJED246Q.js +73 -0
  171. package/chunks/{installationInfo-W6V4DT7W.js → installationInfo-OTEU7FKR.js} +27 -27
  172. package/chunks/{ja-7VQOANVG.js → ja-66J6B53L.js} +5 -2
  173. package/chunks/{keychain-token-storage-VKUBNCP4.js → keychain-token-storage-AU22CQI6.js} +2 -2
  174. package/chunks/list-6OHS7MFJ.js +76 -0
  175. package/chunks/loadedSettingsAdapter-5456XIYG.js +70 -0
  176. package/chunks/{loop-wakeup-WX7BLWWP.js → loop-wakeup-C4EXLYVA.js} +5 -5
  177. package/chunks/{ls-ZB2BDP6T.js → ls-2OUTG3IZ.js} +4 -4
  178. package/chunks/{lsp-V5DN4YUJ.js → lsp-4VMNXZW6.js} +2 -2
  179. package/chunks/mcp-NOWRPFKY.js +70 -0
  180. package/chunks/{monitor-X5Z3H4FY.js → monitor-CVDZO3IZ.js} +26 -26
  181. package/chunks/nonInteractiveCli-UGI7Y43E.js +129 -0
  182. package/chunks/{notebook-edit-TRM2QIJK.js → notebook-edit-NWIA5TEJ.js} +27 -27
  183. package/chunks/{openaiContentGenerator-AAYONPMF.js → openaiContentGenerator-KJONBBJO.js} +12 -12
  184. package/chunks/{pidfile-D4I4FTVA.js → pidfile-L3TGXMTF.js} +27 -27
  185. package/chunks/{pt-2C6YCSHL.js → pt-TFZO5Y6T.js} +4 -1
  186. package/chunks/{qwenContentGenerator-K3HZ2H76.js → qwenContentGenerator-GXUZB5SJ.js} +28 -28
  187. package/chunks/{qwenOAuth2-PJQ27GSO.js → qwenOAuth2-LEYOU7RU.js} +5 -5
  188. package/chunks/{read-file-7SZSIZOL.js → read-file-I4OUZXTA.js} +8 -8
  189. package/chunks/{read-mcp-resource-SM5DA4RG.js → read-mcp-resource-JUFHCKSC.js} +2 -2
  190. package/chunks/{record-artifact-4XKZX3UW.js → record-artifact-DWSMBXYY.js} +2 -2
  191. package/chunks/{ripGrep-YNPFVCZP.js → ripGrep-XLCXANIO.js} +26 -26
  192. package/chunks/{ru-6BBHVZZV.js → ru-4L4LFHIT.js} +4 -1
  193. package/chunks/{run-qwen-serve-DMWV5N6L.js → run-qwen-serve-R6SBP6YS.js} +1232 -371
  194. package/chunks/{runtime-57WWRVHN.js → runtime-U3S33YUQ.js} +42 -37
  195. package/chunks/{scheduler-YBLGWSIL.js → scheduler-65QCIELP.js} +26 -26
  196. package/chunks/{send-message-F36YD6KQ.js → send-message-JZ752NWD.js} +3 -3
  197. package/chunks/{serve-R63NK3CV.js → serve-PSPOFCOD.js} +36 -34
  198. package/chunks/{server-Z22GCAXP.js → server-6P5ZB56O.js} +5561 -1377
  199. package/chunks/{session-HKAAI7BN.js → session-ILLOYW75.js} +298 -98
  200. package/chunks/{settings-3EYN66GK.js → settings-RMUJGYIK.js} +34 -32
  201. package/chunks/{shell-6YXINTWJ.js → shell-65GTAN5Q.js} +28 -26
  202. package/chunks/{skill-OO57P4X6.js → skill-L76U3YCX.js} +10 -10
  203. package/chunks/{spawnChannel-JD7G4VU6.js → spawnChannel-LXIGZ4EM.js} +28 -28
  204. package/chunks/{src-G5UPLZSZ.js → src-DWZT2X3Z.js} +87 -27
  205. package/chunks/{standalone-update-OB7F4JPZ.js → standalone-update-F6SRKPSD.js} +28 -28
  206. package/chunks/{startInteractiveUI-73EGLIIH.js → startInteractiveUI-UEJQP7S3.js} +730 -397
  207. package/chunks/{syntheticOutput-34H7LGA7.js → syntheticOutput-LELY6HAI.js} +3 -3
  208. package/chunks/{task-create-FRGOEIKY.js → task-create-QY3BIMNM.js} +8 -7
  209. package/chunks/{task-list-OW766BXZ.js → task-list-D2U47WBJ.js} +6 -5
  210. package/chunks/{task-stop-SIR5SNBN.js → task-stop-N6E5IYLH.js} +2 -2
  211. package/chunks/{task-update-YRA532MT.js → task-update-HJCQILLB.js} +8 -7
  212. package/chunks/{team-create-PECAAPXK.js → team-create-4QBZVOGN.js} +26 -26
  213. package/chunks/{team-delete-6OSECUZC.js → team-delete-RCWYDRF4.js} +6 -5
  214. package/chunks/{team-plan-approval-L6F434RY.js → team-plan-approval-BK4CIOFV.js} +26 -26
  215. package/chunks/{theme-manager-ZG4RY6GU.js → theme-manager-5F2IGW6E.js} +27 -27
  216. package/chunks/{todoWrite-YDMFEV4G.js → todoWrite-FKCGATPJ.js} +4 -4
  217. package/chunks/{tool-search-THVIWAPB.js → tool-search-J2ESO33H.js} +9 -9
  218. package/chunks/{total-session-admission-JOKNRIIA.js → total-session-admission-U4LZ5QTQ.js} +33 -33
  219. package/chunks/tree-sitter-YJVE2ZUK.js +2980 -0
  220. package/chunks/{trustedFolders-EOGT3UVS.js → trustedFolders-TIDOXCJA.js} +29 -28
  221. package/chunks/types-ML3TRJQ5.js +16 -0
  222. package/chunks/{updateCheck-2KYEYVSB.js → updateCheck-VRVR26FI.js} +29 -29
  223. package/chunks/{validateNonInterActiveAuth-EN6ZQSR2.js → validateNonInterActiveAuth-UGKYAVLG.js} +75 -71
  224. package/chunks/{version-3UEA6ZIR.js → version-7HR6VZAT.js} +1 -1
  225. package/chunks/{web-fetch-PAAEQKBW.js → web-fetch-QGODBB6S.js} +5 -5
  226. package/chunks/{workflow-QCCCMYP3.js → workflow-EDQAITEW.js} +27 -27
  227. package/chunks/workspace-providers-status-27UGAK77.js +73 -0
  228. package/chunks/workspace-registration-store-5H7577YQ.js +27 -0
  229. package/chunks/{workspace-registry-24QFLQYH.js → workspace-registry-F3THGAXC.js} +33 -33
  230. package/chunks/workspace-service-4JSAQAHP.js +86 -0
  231. package/chunks/workspace-skills-status-5JTWZHZU.js +72 -0
  232. package/chunks/{write-file-I3MUDRIE.js → write-file-UY6XCZZM.js} +27 -27
  233. package/chunks/{zh-RQE7I22T.js → zh-FSAH32JB.js} +6 -2
  234. package/chunks/{zh-TW-TBPQGHKH.js → zh-TW-D2YIE2LO.js} +6 -2
  235. package/cli.js +11 -11
  236. package/locales/ca.js +6 -0
  237. package/locales/de.js +6 -0
  238. package/locales/en.js +8 -0
  239. package/locales/fr.js +6 -0
  240. package/locales/ja.js +7 -1
  241. package/locales/pt.js +6 -0
  242. package/locales/ru.js +6 -0
  243. package/locales/zh-TW.js +9 -1
  244. package/locales/zh.js +9 -1
  245. package/package.json +3 -3
  246. package/web-shell/assets/{arc-C15hqnJe.js → arc-CObt_TK9.js} +1 -1
  247. package/web-shell/assets/{architectureDiagram-3BPJPVTR-B-At37J_.js → architectureDiagram-3BPJPVTR-B7aiJ6CK.js} +1 -1
  248. package/web-shell/assets/{blockDiagram-GPEHLZMM-B51wjcU7.js → blockDiagram-GPEHLZMM-BSK2CrID.js} +1 -1
  249. package/web-shell/assets/{c4Diagram-AAUBKEIU-xBK7BAwN.js → c4Diagram-AAUBKEIU-Bhx2p7T_.js} +1 -1
  250. package/web-shell/assets/channel-BBaLq8MV.js +1 -0
  251. package/web-shell/assets/{chunk-2J33WTMH-xKmLg7Yr.js → chunk-2J33WTMH-c3Hzv0Ni.js} +1 -1
  252. package/web-shell/assets/{chunk-4BX2VUAB-BfkdKZCM.js → chunk-4BX2VUAB-DNXaK7ZF.js} +1 -1
  253. package/web-shell/assets/{chunk-55IACEB6-DT713sZf.js → chunk-55IACEB6-BXjvDj_i.js} +1 -1
  254. package/web-shell/assets/{chunk-727SXJPM-CYEeAamv.js → chunk-727SXJPM-B6CaKFp-.js} +1 -1
  255. package/web-shell/assets/{chunk-AQP2D5EJ-DBN-5CFd.js → chunk-AQP2D5EJ-tij6Mz9B.js} +1 -1
  256. package/web-shell/assets/{chunk-FMBD7UC4-CGZKk4PH.js → chunk-FMBD7UC4-DdlsGk2h.js} +1 -1
  257. package/web-shell/assets/{chunk-ND2GUHAM-qQbC2O-y.js → chunk-ND2GUHAM-CdgGZSHE.js} +1 -1
  258. package/web-shell/assets/{chunk-QZHKN3VN-B3zeXwsX.js → chunk-QZHKN3VN-D8oJn1C0.js} +1 -1
  259. package/web-shell/assets/classDiagram-4FO5ZUOK-B2ZK6sWE.js +1 -0
  260. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-B2ZK6sWE.js +1 -0
  261. package/web-shell/assets/{cose-bilkent-S5V4N54A-BKsl1Wvy.js → cose-bilkent-S5V4N54A-BUVmNp1Y.js} +1 -1
  262. package/web-shell/assets/{dagre-BM42HDAG-CuuuLiBK.js → dagre-BM42HDAG-CO4q310O.js} +1 -1
  263. package/web-shell/assets/{diagram-2AECGRRQ-CG4_eKiV.js → diagram-2AECGRRQ-C6gFvWkg.js} +1 -1
  264. package/web-shell/assets/{diagram-5GNKFQAL-DSFTmZB1.js → diagram-5GNKFQAL-NG2I_c0h.js} +1 -1
  265. package/web-shell/assets/{diagram-KO2AKTUF-BxwlEHn8.js → diagram-KO2AKTUF-DFKMS6I9.js} +1 -1
  266. package/web-shell/assets/{diagram-LMA3HP47-BUAg-jMG.js → diagram-LMA3HP47-BiElfsfP.js} +1 -1
  267. package/web-shell/assets/{diagram-OG6HWLK6-BFM2jlO5.js → diagram-OG6HWLK6-zLWDYUqu.js} +1 -1
  268. package/web-shell/assets/{erDiagram-TEJ5UH35-CerbFPa2.js → erDiagram-TEJ5UH35-DoVaazhK.js} +1 -1
  269. package/web-shell/assets/{flowDiagram-I6XJVG4X-BNeZz5Zz.js → flowDiagram-I6XJVG4X-0RLz-mXg.js} +1 -1
  270. package/web-shell/assets/{ganttDiagram-6RSMTGT7-CTOogLaM.js → ganttDiagram-6RSMTGT7-C-eX1A39.js} +3 -3
  271. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-yxSFkXPj.js → gitGraphDiagram-PVQCEYII-BauQu1Bu.js} +1 -1
  272. package/web-shell/assets/index-3uAT3ehO.css +5 -0
  273. package/web-shell/assets/index-CVHa2QH7.js +3 -0
  274. package/web-shell/assets/index-D1KigWat.js +1128 -0
  275. package/web-shell/assets/{infoDiagram-5YYISTIA-DYdAUevm.js → infoDiagram-5YYISTIA-C800cFvZ.js} +1 -1
  276. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CNuijZ90.js → ishikawaDiagram-YF4QCWOH-CFK1Jk6e.js} +1 -1
  277. package/web-shell/assets/{journeyDiagram-JHISSGLW-BTyiuonf.js → journeyDiagram-JHISSGLW-Cjx0WAC4.js} +1 -1
  278. package/web-shell/assets/{kanban-definition-UN3LZRKU-DPJo0Uow.js → kanban-definition-UN3LZRKU-DWMDHbiv.js} +1 -1
  279. package/web-shell/assets/{linear-C8wKCbIC.js → linear-vpW4FrZs.js} +1 -1
  280. package/web-shell/assets/{mermaid.core-BV5o7nW5.js → mermaid.core-DsHRUnDd.js} +5 -5
  281. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BtLcBmSt.js → mindmap-definition-RKZ34NQL-D3Eb1cAK.js} +1 -1
  282. package/web-shell/assets/{pieDiagram-4H26LBE5-C22J7A9Q.js → pieDiagram-4H26LBE5-Cr2-6sWt.js} +1 -1
  283. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-DSL10wiL.js → quadrantDiagram-W4KKPZXB-Yd7yUgVp.js} +1 -1
  284. package/web-shell/assets/{requirementDiagram-4Y6WPE33-feqh0UpX.js → requirementDiagram-4Y6WPE33-BE6SprL8.js} +1 -1
  285. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-Z4OVaWaZ.js → sankeyDiagram-5OEKKPKP-DzkuMK8d.js} +1 -1
  286. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DIluIcb1.js → sequenceDiagram-3UESZ5HK-wD9A3Dhi.js} +1 -1
  287. package/web-shell/assets/{stateDiagram-AJRCARHV-hlhnuoYH.js → stateDiagram-AJRCARHV-BOp5q1Nm.js} +1 -1
  288. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BDsWUmPG.js +1 -0
  289. package/web-shell/assets/{timeline-definition-PNZ67QCA-Dqf_CqgL.js → timeline-definition-PNZ67QCA-Btc08sUA.js} +1 -1
  290. package/web-shell/assets/{vennDiagram-CIIHVFJN-DD2QhaTX.js → vennDiagram-CIIHVFJN-Bv6upsOA.js} +1 -1
  291. package/web-shell/assets/{wardley-L42UT6IY-B2uI85U_.js → wardley-L42UT6IY-D-XamnCK.js} +1 -1
  292. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-U1aJX71g.js → wardleyDiagram-YWT4CUSO-BbP_5Wfp.js} +1 -1
  293. package/web-shell/assets/{xychartDiagram-2RQKCTM6-C0ODHUee.js → xychartDiagram-2RQKCTM6-CO5Hh28b.js} +1 -1
  294. package/web-shell/index.html +2 -2
  295. package/chunks/chunk-CU3L64TP.js +0 -93
  296. package/chunks/initializer-UTQ7FB7G.js +0 -71
  297. package/chunks/list-DEICDL65.js +0 -74
  298. package/chunks/loadedSettingsAdapter-NOWEGDYJ.js +0 -68
  299. package/chunks/mcp-L5JXEEIA.js +0 -68
  300. package/chunks/nonInteractiveCli-LS2K4X6A.js +0 -124
  301. package/chunks/types-JNKGKUJT.js +0 -12
  302. package/chunks/workspace-providers-status-4KMGETOJ.js +0 -71
  303. package/chunks/workspace-service-RVLBMSMZ.js +0 -80
  304. package/chunks/workspace-skills-status-DS4ZVFTO.js +0 -70
  305. package/web-shell/assets/channel-CLiQD50f.js +0 -1
  306. package/web-shell/assets/classDiagram-4FO5ZUOK-D3sYqow5.js +0 -1
  307. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-D3sYqow5.js +0 -1
  308. package/web-shell/assets/index-D5IWFVk1.css +0 -5
  309. package/web-shell/assets/index-KFJRDhX7.js +0 -783
  310. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BhQMwgpl.js +0 -1
@@ -0,0 +1,91 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ t
5
+ } from "./chunk-UZKG7HFG.js";
6
+ import {
7
+ writeStderrLine
8
+ } from "./chunk-YUZI3WAC.js";
9
+ import {
10
+ createDebugLogger
11
+ } from "./chunk-7NFB7LBQ.js";
12
+ import {
13
+ init_esbuild_shims
14
+ } from "./chunk-5O2XNYP6.js";
15
+ import {
16
+ __name
17
+ } from "./chunk-J2S4EL5Y.js";
18
+
19
+ // packages/cli/src/utils/chat-recording-failure.ts
20
+ init_esbuild_shims();
21
+ import { randomUUID } from "node:crypto";
22
+ var CHAT_RECORDING_FAILURE_MESSAGE = "Session recording stopped after a write failure. New messages for the affected session will not be saved. Check disk space and permissions, then start a new session to resume recording. See the debug log for details.";
23
+ var TUI_CHAT_RECORDING_FAILURE_MESSAGE = "Session recording stopped after a write failure. New messages for the affected session will not be saved. Check disk space and permissions, then run `/clear` to start a new recorded session. See the debug log for details.";
24
+ var CHAT_RECORDING_SETTLE_TIMEOUT_MS = 2e3;
25
+ var debugLogger = createDebugLogger("CHAT_RECORDING");
26
+ function createChatRecordingFailureSystemMessage(event) {
27
+ return {
28
+ type: "system",
29
+ subtype: "session_recording_degraded",
30
+ uuid: randomUUID(),
31
+ session_id: event.sessionId,
32
+ parent_tool_use_id: null,
33
+ data: {
34
+ session_id: event.sessionId,
35
+ reason: "write_failed",
36
+ message: CHAT_RECORDING_FAILURE_MESSAGE
37
+ }
38
+ };
39
+ }
40
+ __name(createChatRecordingFailureSystemMessage, "createChatRecordingFailureSystemMessage");
41
+ function reportChatRecordingFailureToAdapter(adapter, event) {
42
+ adapter.emitMessage(createChatRecordingFailureSystemMessage(event));
43
+ }
44
+ __name(reportChatRecordingFailureToAdapter, "reportChatRecordingFailureToAdapter");
45
+ function subscribeToHeadlessChatRecordingFailures(config, adapter) {
46
+ if (typeof config.onChatRecordingFailure !== "function") return () => {
47
+ };
48
+ return config.onChatRecordingFailure((event) => {
49
+ if (config.getOutputFormat() === "text" /* TEXT */) {
50
+ writeStderrLine(`Warning: ${t(CHAT_RECORDING_FAILURE_MESSAGE)}`);
51
+ return;
52
+ }
53
+ reportChatRecordingFailureToAdapter(adapter, event);
54
+ });
55
+ }
56
+ __name(subscribeToHeadlessChatRecordingFailures, "subscribeToHeadlessChatRecordingFailures");
57
+ async function settleChatRecording(config, options) {
58
+ if (typeof config.getChatRecordingService !== "function") return "settled";
59
+ const recorder = config.getChatRecordingService();
60
+ if (!recorder) return "settled";
61
+ if (options.finalize) recorder.finalize();
62
+ let timer;
63
+ const timeout = new Promise((resolve) => {
64
+ timer = setTimeout(() => {
65
+ debugLogger.debug("Timed out waiting for chat recording to flush");
66
+ resolve("timeout");
67
+ }, CHAT_RECORDING_SETTLE_TIMEOUT_MS);
68
+ });
69
+ const settled = recorder.flush().then(
70
+ () => "settled",
71
+ () => "settled"
72
+ );
73
+ try {
74
+ return await Promise.race([settled, timeout]);
75
+ } finally {
76
+ if (timer) clearTimeout(timer);
77
+ }
78
+ }
79
+ __name(settleChatRecording, "settleChatRecording");
80
+
81
+ export {
82
+ TUI_CHAT_RECORDING_FAILURE_MESSAGE,
83
+ reportChatRecordingFailureToAdapter,
84
+ subscribeToHeadlessChatRecordingFailures,
85
+ settleChatRecording
86
+ };
87
+ /**
88
+ * @license
89
+ * Copyright 2025 Qwen Team
90
+ * SPDX-License-Identifier: Apache-2.0
91
+ */
@@ -2,24 +2,24 @@
2
2
  "use strict";
3
3
  import {
4
4
  t
5
- } from "./chunk-YAUFFXDS.js";
5
+ } from "./chunk-UZKG7HFG.js";
6
6
  import {
7
7
  computeThresholds,
8
8
  getCoreSystemPrompt
9
- } from "./chunk-NVYTCB5Z.js";
9
+ } from "./chunk-XCR44EEA.js";
10
10
  import {
11
11
  buildSkillLlmContent
12
- } from "./chunk-7R3CZA3Q.js";
12
+ } from "./chunk-2Z5UX4KI.js";
13
13
  import {
14
14
  DiscoveredMCPTool,
15
15
  uiTelemetryService
16
- } from "./chunk-3VAGG5T5.js";
16
+ } from "./chunk-BYOOK22F.js";
17
17
  import {
18
18
  ToolNames
19
- } from "./chunk-B5ORX3FG.js";
19
+ } from "./chunk-JGUT3LWZ.js";
20
20
  import {
21
21
  DEFAULT_TOKEN_LIMIT
22
- } from "./chunk-524RQP4Q.js";
22
+ } from "./chunk-B7NUUEXC.js";
23
23
  import {
24
24
  init_esbuild_shims
25
25
  } from "./chunk-5O2XNYP6.js";
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  getGlobalQwenDir
5
- } from "./chunk-34Z3U5RQ.js";
5
+ } from "./chunk-AU4R7ACM.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";
@@ -1,19 +1,21 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
3
  import {
4
- getInboxesDir,
4
+ getInboxesDir
5
+ } from "./chunk-TV6K2FB4.js";
6
+ import {
5
7
  require_proper_lockfile
6
- } from "./chunk-KKNMOEZH.js";
8
+ } from "./chunk-E2UVIFI2.js";
7
9
  import {
8
10
  Mutex
9
11
  } from "./chunk-VGC4I5JJ.js";
10
12
  import {
11
13
  atomicWriteJSON
12
- } from "./chunk-ZLXQN2QS.js";
14
+ } from "./chunk-WIEO4CWB.js";
13
15
  import {
14
16
  createDebugLogger,
15
17
  isNodeError
16
- } from "./chunk-J4TSQ5EQ.js";
18
+ } from "./chunk-7NFB7LBQ.js";
17
19
  import {
18
20
  init_esbuild_shims
19
21
  } from "./chunk-5O2XNYP6.js";
@@ -1,5 +1,21 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
+ import {
4
+ LOAD_REPLAY_BULK_MODE,
5
+ LOAD_REPLAY_META_KEY,
6
+ LOAD_REPLAY_MODE_META_KEY,
7
+ LOAD_REPLAY_VERSION,
8
+ MID_TURN_QUEUE_DRAIN_METHOD
9
+ } from "./chunk-PZL23GTM.js";
10
+ import {
11
+ DEFAULT_RING_SIZE,
12
+ EVENT_SCHEMA_VERSION,
13
+ EventBus,
14
+ serializedBridgeEventByteLength
15
+ } from "./chunk-6RLROE6G.js";
16
+ import {
17
+ normalizeCompactedReplayMaxBytes
18
+ } from "./chunk-COH43MRJ.js";
3
19
  import {
4
20
  MCP_RESTART_SERVER_DEADLINE_MS
5
21
  } from "./chunk-OCPBI7J5.js";
@@ -22,29 +38,10 @@ import {
22
38
  SessionShellDisabledError,
23
39
  WorkspaceMismatchError,
24
40
  isNotCurrentlyGeneratingCancelError
25
- } from "./chunk-IAVB3HM3.js";
26
- import {
27
- LOAD_REPLAY_BULK_MODE,
28
- LOAD_REPLAY_META_KEY,
29
- LOAD_REPLAY_MODE_META_KEY,
30
- LOAD_REPLAY_VERSION,
31
- MID_TURN_QUEUE_DRAIN_METHOD
32
- } from "./chunk-PZL23GTM.js";
33
- import {
34
- canonicalizeWorkspace
35
- } from "./chunk-W7FJ3N32.js";
36
- import {
37
- DEFAULT_RING_SIZE,
38
- EVENT_SCHEMA_VERSION,
39
- EventBus,
40
- serializedBridgeEventByteLength
41
- } from "./chunk-6RLROE6G.js";
42
- import {
43
- normalizeCompactedReplayMaxBytes
44
- } from "./chunk-COH43MRJ.js";
41
+ } from "./chunk-KSO42X3Z.js";
45
42
  import {
46
43
  defaultSpawnChannelFactory
47
- } from "./chunk-CLFKOZEK.js";
44
+ } from "./chunk-3XULHBC7.js";
48
45
  import {
49
46
  BridgeChannelClosedError,
50
47
  BridgeTimeoutError,
@@ -53,7 +50,10 @@ import {
53
50
  STATUS_SCHEMA_VERSION,
54
51
  createIdleWorkspaceExtensionsStatus,
55
52
  createIdleWorkspaceHooksStatus
56
- } from "./chunk-VWPVHAMO.js";
53
+ } from "./chunk-7DXHIMXL.js";
54
+ import {
55
+ canonicalizeWorkspace
56
+ } from "./chunk-W7FJ3N32.js";
57
57
  import {
58
58
  ClientSideConnection,
59
59
  PROTOCOL_VERSION,
@@ -70,11 +70,11 @@ import {
70
70
  metadataBudgetBytes,
71
71
  normalizeSnapshotPayload,
72
72
  stableSessionArtifactId
73
- } from "./chunk-NVYTCB5Z.js";
73
+ } from "./chunk-XCR44EEA.js";
74
74
  import {
75
75
  DAEMON_TRACEPARENT_META_KEY,
76
76
  DAEMON_TRACESTATE_META_KEY
77
- } from "./chunk-3VAGG5T5.js";
77
+ } from "./chunk-BYOOK22F.js";
78
78
  import {
79
79
  init_esbuild_shims
80
80
  } from "./chunk-5O2XNYP6.js";
@@ -1332,7 +1332,8 @@ function isTrustedArtifactToolUpdate(params, updateMeta) {
1332
1332
  __name(isTrustedArtifactToolUpdate, "isTrustedArtifactToolUpdate");
1333
1333
  function preserveFsErrorOverAcp(err) {
1334
1334
  if (isFsErrorShape(err)) {
1335
- throw new RequestError(-32603, err.message, {
1335
+ const code = err.kind === "parse_error" ? -32602 : -32603;
1336
+ throw new RequestError(code, err.message, {
1336
1337
  errorKind: err.kind,
1337
1338
  ...err.hint !== void 0 ? { hint: err.hint } : {},
1338
1339
  ...err.status !== void 0 ? { status: err.status } : {}
@@ -1587,18 +1588,23 @@ var BridgeClient = class {
1587
1588
  return;
1588
1589
  }
1589
1590
  const durationMs = updateMeta?.["durationMs"];
1591
+ const apiErrors = updateMeta?.["apiErrors"];
1592
+ const apiRetries = updateMeta?.["apiRetries"];
1590
1593
  this.onTokenUsage(
1591
1594
  typeof inputTokens === "number" ? inputTokens : 0,
1592
1595
  typeof outputTokens === "number" ? outputTokens : 0,
1593
- 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
1594
1599
  );
1595
1600
  }
1596
1601
  /**
1597
- * Bounded early-event buffer. Frames are keyed by sessionId; each
1598
- * entry tracks its `expiresAt` for lazy TTL-based eviction in
1599
- * `bufferEarlyEvent`. Drained by `drainEarlyEvents` whenever the
1600
- * bridge registers a session with a matching id. See
1601
- * MAX_EARLY_EVENT_* constants for capacity bounds.
1602
+ * Bounded early-event buffer. The map is scoped to this BridgeClient and
1603
+ * therefore to one channel; a stale channel cannot seed a fresh channel's
1604
+ * future session. Frames are keyed by sessionId; each entry tracks its
1605
+ * `expiresAt` for lazy TTL-based eviction in `bufferEarlyEvent`. Drained by
1606
+ * `drainEarlyEvents` whenever the bridge registers a session with a matching
1607
+ * id. See MAX_EARLY_EVENT_* constants for capacity bounds.
1602
1608
  */
1603
1609
  earlyEvents = /* @__PURE__ */ new Map();
1604
1610
  /**
@@ -1623,7 +1629,7 @@ var BridgeClient = class {
1623
1629
  /**
1624
1630
  * Allow-list of sessionIds currently being restored via
1625
1631
  * `session/load` / `session/resume`. Bypasses the tombstone check
1626
- * in `bufferEarlyEvent` so restore-time guardrail events for a
1632
+ * in `bufferEarlyEvent` so restore-time events for a
1627
1633
  * previously-closed id flow through to the future
1628
1634
  * `createSessionEntry -> drainEarlyEvents` call.
1629
1635
  *
@@ -1801,6 +1807,7 @@ var BridgeClient = class {
1801
1807
  * `qwen/notify/session/model-update`,
1802
1808
  * `qwen/notify/session/mode-update`,
1803
1809
  * `qwen/notify/session/title-update` (auto/in-process session titles),
1810
+ * `qwen/notify/session/recording-degraded`,
1804
1811
  * `qwen/notify/session/prompt-suggestion` (followup assist),
1805
1812
  * `qwen/notify/session/artifact-event` (hook artifacts),
1806
1813
  * `qwen/notify/session/terminal-sequence`, and
@@ -1837,6 +1844,28 @@ var BridgeClient = class {
1837
1844
  }
1838
1845
  return;
1839
1846
  }
1847
+ if (method === "qwen/notify/session/recording-degraded") {
1848
+ const sessionId2 = params["sessionId"];
1849
+ if (params["v"] !== 1 || typeof sessionId2 !== "string" || sessionId2.length === 0 || params["reason"] !== "write_failed") {
1850
+ writeStderrLine(
1851
+ `[demux] session=${typeof sessionId2 === "string" ? sessionId2 : "<missing>"} type=session_recording_degraded action=dropped reason=malformed`
1852
+ );
1853
+ return;
1854
+ }
1855
+ const entry = this.resolveEntry(sessionId2);
1856
+ if (entry && !this.ownsSession(sessionId2)) {
1857
+ writeStderrLine(
1858
+ `[demux] session=${sessionId2} type=session_recording_degraded action=dropped reason=session_not_owned`
1859
+ );
1860
+ return;
1861
+ }
1862
+ if (entry) entry.recordingDegraded = true;
1863
+ this.publishExtNotification(sessionId2, "session_recording_degraded", {
1864
+ sessionId: sessionId2,
1865
+ reason: "write_failed"
1866
+ });
1867
+ return;
1868
+ }
1840
1869
  if (method === "qwen/notify/session/prompt-suggestion") {
1841
1870
  const sessionId2 = params["sessionId"];
1842
1871
  const suggestion = params["suggestion"];
@@ -2093,7 +2122,7 @@ var BridgeClient = class {
2093
2122
  this.sweepExpiredTombstones(now);
2094
2123
  if (this.tombstonedSessionIds.has(sessionId) && !this.inFlightRestoreIds.has(sessionId)) {
2095
2124
  writeStderrLine(
2096
- `qwen serve: dropping mcp guardrail extNotification for tombstoned session ${JSON.stringify(sessionId)} (post-close stale event)`
2125
+ `qwen serve: dropping early extNotification for tombstoned session ${JSON.stringify(sessionId)} (post-close stale event)`
2097
2126
  );
2098
2127
  return;
2099
2128
  }
@@ -2102,7 +2131,7 @@ var BridgeClient = class {
2102
2131
  if (!buf) {
2103
2132
  if (this.earlyEvents.size >= MAX_EARLY_EVENT_SESSIONS) {
2104
2133
  writeStderrLine(
2105
- `qwen serve: dropping mcp guardrail extNotification \u2014 early-event buffer at MAX_EARLY_EVENT_SESSIONS (${MAX_EARLY_EVENT_SESSIONS}); possible session-id fanout abuse`
2134
+ `qwen serve: dropping early extNotification \u2014 early-event buffer at MAX_EARLY_EVENT_SESSIONS (${MAX_EARLY_EVENT_SESSIONS}); possible session-id fanout abuse`
2106
2135
  );
2107
2136
  return;
2108
2137
  }
@@ -2111,7 +2140,7 @@ var BridgeClient = class {
2111
2140
  }
2112
2141
  if (buf.frames.length >= MAX_EARLY_EVENTS_PER_SESSION) {
2113
2142
  writeStderrLine(
2114
- `qwen serve: dropping mcp guardrail extNotification for session ${JSON.stringify(sessionId)} \u2014 per-session cap (${MAX_EARLY_EVENTS_PER_SESSION}) reached`
2143
+ `qwen serve: dropping early extNotification for session ${JSON.stringify(sessionId)} \u2014 per-session cap (${MAX_EARLY_EVENTS_PER_SESSION}) reached`
2115
2144
  );
2116
2145
  return;
2117
2146
  }
@@ -2145,7 +2174,7 @@ var BridgeClient = class {
2145
2174
  * Mark a sessionId as currently being restored via `session/load` /
2146
2175
  * `session/resume`. While in this set, `bufferEarlyEvent` accepts
2147
2176
  * frames for the id even if it's tombstoned — so restore-time
2148
- * guardrail events from the freshly-restored child reach
2177
+ * early events from the freshly-restored child reach
2149
2178
  * `drainEarlyEvents` instead of being rejected by the tombstone.
2150
2179
  *
2151
2180
  * Bridge factory calls this BEFORE awaiting the ACP restore call.
@@ -2179,7 +2208,12 @@ var BridgeClient = class {
2179
2208
  this.tombstonedSessionIds.delete(sessionId);
2180
2209
  const buf = this.earlyEvents.get(sessionId);
2181
2210
  if (!buf) return;
2182
- for (const frame of buf.frames) entry.events.publish(frame);
2211
+ for (const frame of buf.frames) {
2212
+ if (frame.type === "session_recording_degraded") {
2213
+ entry.recordingDegraded = true;
2214
+ }
2215
+ entry.events.publish(frame);
2216
+ }
2183
2217
  this.earlyEvents.delete(sessionId);
2184
2218
  }
2185
2219
  async writeTextFile(params) {
@@ -2246,6 +2280,18 @@ var BridgeClient = class {
2246
2280
  if (typeof params.limit === "number" && params.limit <= 0) {
2247
2281
  return { content: "" };
2248
2282
  }
2283
+ if (typeof params.limit === "number" && params.limit > 0 && !Number.isSafeInteger(params.limit)) {
2284
+ throw RequestError.invalidParams(
2285
+ void 0,
2286
+ `\`limit\` must be a positive integer, got ${params.limit}`
2287
+ );
2288
+ }
2289
+ if (typeof params.line === "number" && params.line > 0 && !Number.isSafeInteger(params.line)) {
2290
+ throw RequestError.invalidParams(
2291
+ void 0,
2292
+ `\`line\` must be a positive integer, got ${params.line}`
2293
+ );
2294
+ }
2249
2295
  const READ_FILE_SIZE_CAP = 100 * 1024 * 1024;
2250
2296
  const stats = await fs.stat(params.path);
2251
2297
  if (!stats.isFile()) {
@@ -4799,6 +4845,12 @@ function parseWorkspaceMemoryDreamResult(response) {
4799
4845
  };
4800
4846
  }
4801
4847
  __name(parseWorkspaceMemoryDreamResult, "parseWorkspaceMemoryDreamResult");
4848
+ function pickUserInputEchoMeta(meta) {
4849
+ if (!meta || typeof meta !== "object" || Array.isArray(meta)) return {};
4850
+ const inputAnnotations = meta["inputAnnotations"];
4851
+ return Array.isArray(inputAnnotations) ? { inputAnnotations } : {};
4852
+ }
4853
+ __name(pickUserInputEchoMeta, "pickUserInputEchoMeta");
4802
4854
  function echoPromptToSessionBus(entry, req, originatorClientId) {
4803
4855
  const prompt = req.prompt;
4804
4856
  if (!Array.isArray(prompt) || prompt.length === 0) return;
@@ -4820,7 +4872,11 @@ function echoPromptToSessionBus(entry, req, originatorClientId) {
4820
4872
  // field permitted alongside spec fields, the SDK normalizer
4821
4873
  // reads it from `update._meta`/`data._meta`, and every other
4822
4874
  // agent-emitted session_update carries `_meta` the same way.
4823
- _meta: { serverTimestamp, source: "bridge-echo" }
4875
+ _meta: {
4876
+ ...pickUserInputEchoMeta(req._meta),
4877
+ serverTimestamp,
4878
+ source: "bridge-echo"
4879
+ }
4824
4880
  }
4825
4881
  },
4826
4882
  ...originatorClientId ? { originatorClientId } : {}
@@ -5206,6 +5262,7 @@ function createAcpSessionBridge(opts) {
5206
5262
  const aliveChannels = /* @__PURE__ */ new Set();
5207
5263
  let inFlightChannelSpawn;
5208
5264
  const byId = /* @__PURE__ */ new Map();
5265
+ const inFlightExtensionRefreshes = /* @__PURE__ */ new Map();
5209
5266
  const toSessionSummary = /* @__PURE__ */ __name((entry) => {
5210
5267
  let isWaitingForPermission = false;
5211
5268
  let isWaitingForUserQuestion = false;
@@ -5257,6 +5314,7 @@ function createAcpSessionBridge(opts) {
5257
5314
  }
5258
5315
  );
5259
5316
  let shuttingDown = false;
5317
+ let shutdownPromise;
5260
5318
  const teeServeDebugLine = /* @__PURE__ */ __name((message) => {
5261
5319
  writeServeDebugLine(message);
5262
5320
  if (opts.onDiagnosticLine && isServeDebugLoggingEnabled()) {
@@ -5382,10 +5440,12 @@ function createAcpSessionBridge(opts) {
5382
5440
  // at the session/update fan-in to the daemon host's metrics ring via
5383
5441
  // the telemetry seam. Optional-chained so non-daemon callers (tests,
5384
5442
  // Mode A) that wire no `tokenUsage` metric are a silent no-op.
5385
- (inputTokens, outputTokens, durationMs) => telemetry.metrics?.tokenUsage?.(
5443
+ (inputTokens, outputTokens, durationMs, apiErrors, apiRetries) => telemetry.metrics?.tokenUsage?.(
5386
5444
  inputTokens,
5387
5445
  outputTokens,
5388
- durationMs
5446
+ durationMs,
5447
+ apiErrors,
5448
+ apiRetries
5389
5449
  ),
5390
5450
  // `create_sub_session` tool: forward the request/response hook so a child
5391
5451
  // tool can ask the daemon to spawn a sub-session and (for 'first-turn')
@@ -6125,6 +6185,7 @@ function createAcpSessionBridge(opts) {
6125
6185
  workspaceCwd,
6126
6186
  persistence: createSessionArtifactPersistence(ci.connection, sessionId)
6127
6187
  }),
6188
+ recordingDegraded: false,
6128
6189
  promptQueue: Promise.resolve(),
6129
6190
  pendingPromptCount: 0,
6130
6191
  pendingPromptList: [],
@@ -7241,7 +7302,8 @@ function createAcpSessionBridge(opts) {
7241
7302
  data: {
7242
7303
  sessionId: entry.sessionId,
7243
7304
  currentModelId: entry.currentModelId ?? null,
7244
- currentApprovalMode: entry.currentApprovalMode ?? null
7305
+ currentApprovalMode: entry.currentApprovalMode ?? null,
7306
+ recordingDegraded: entry.recordingDegraded
7245
7307
  }
7246
7308
  }), "snapshotFrame");
7247
7309
  async function* withSnapshot() {
@@ -7535,7 +7597,7 @@ function createAcpSessionBridge(opts) {
7535
7597
  const r = res;
7536
7598
  if (r && r.persisted === false) {
7537
7599
  writeStderrLine(
7538
- `qwen serve: displayName for ${sessionId} was not persisted (recording service unavailable)`
7600
+ `qwen serve: displayName for ${sessionId} was not persisted`
7539
7601
  );
7540
7602
  }
7541
7603
  }).catch((err) => {
@@ -7975,12 +8037,26 @@ function createAcpSessionBridge(opts) {
7975
8037
  return { refreshed: 0, failed: 0 };
7976
8038
  }
7977
8039
  try {
7978
- await Promise.race([
7979
- withTimeout(
7980
- entry.connection.extMethod(
8040
+ let inFlight = inFlightExtensionRefreshes.get(entry.sessionId);
8041
+ if (!inFlight || inFlight.connection !== entry.connection) {
8042
+ const promise = (async () => {
8043
+ await entry.connection.extMethod(
7981
8044
  SERVE_CONTROL_EXT_METHODS.workspaceExtensionsRefresh,
7982
8045
  { sessionId: entry.sessionId }
7983
- ),
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,
7984
8060
  3e4,
7985
8061
  SERVE_CONTROL_EXT_METHODS.workspaceExtensionsRefresh
7986
8062
  ),
@@ -8764,60 +8840,71 @@ function createAcpSessionBridge(opts) {
8764
8840
  }
8765
8841
  }
8766
8842
  },
8767
- async shutdown() {
8768
- shuttingDown = true;
8769
- cancelIdleTimer();
8770
- stopSessionReaper();
8771
- const entries = Array.from(byId.values());
8772
- const channels = Array.from(aliveChannels);
8773
- for (const ci of channels) ci.isDying = true;
8774
- for (const e of entries) {
8775
- permissionMediator.forgetSession(e.sessionId);
8776
- e.pendingPermissionIds.clear();
8777
- e.pendingInteractions.clear();
8778
- }
8779
- defaultEntry = void 0;
8780
- byId.clear();
8781
- for (const e of entries) {
8782
- telemetry.metrics?.sessionLifecycle("die");
8783
- emitSessionLifecycle({
8784
- type: "removed",
8785
- sessionId: e.sessionId,
8786
- workspaceCwd: e.workspaceCwd,
8787
- reason: "daemon_shutdown"
8788
- });
8789
- try {
8790
- e.events.publish({
8791
- type: "session_died",
8792
- data: { sessionId: e.sessionId, reason: "daemon_shutdown" }
8843
+ shutdown(options) {
8844
+ if (shutdownPromise) return shutdownPromise;
8845
+ const shutdownReason = options?.reason ?? "daemon_shutdown";
8846
+ let resolveShutdown;
8847
+ let rejectShutdown;
8848
+ shutdownPromise = new Promise((resolve2, reject) => {
8849
+ resolveShutdown = resolve2;
8850
+ rejectShutdown = reject;
8851
+ });
8852
+ void (async () => {
8853
+ shuttingDown = true;
8854
+ cancelIdleTimer();
8855
+ stopSessionReaper();
8856
+ const entries = Array.from(byId.values());
8857
+ const channels = Array.from(aliveChannels);
8858
+ for (const ci of channels) ci.isDying = true;
8859
+ for (const e of entries) {
8860
+ permissionMediator.forgetSession(e.sessionId);
8861
+ e.pendingPermissionIds.clear();
8862
+ e.pendingInteractions.clear();
8863
+ }
8864
+ defaultEntry = void 0;
8865
+ byId.clear();
8866
+ for (const e of entries) {
8867
+ telemetry.metrics?.sessionLifecycle("die");
8868
+ emitSessionLifecycle({
8869
+ type: "removed",
8870
+ sessionId: e.sessionId,
8871
+ workspaceCwd: e.workspaceCwd,
8872
+ reason: shutdownReason
8793
8873
  });
8794
- } catch {
8874
+ try {
8875
+ e.events.publish({
8876
+ type: "session_died",
8877
+ data: { sessionId: e.sessionId, reason: shutdownReason }
8878
+ });
8879
+ } catch {
8880
+ }
8881
+ e.events.close();
8795
8882
  }
8796
- e.events.close();
8797
- }
8798
- const inFlightSessionAwaits = Array.from(inFlightSpawns.values()).map(
8799
- (p) => p.then(
8800
- () => void 0,
8801
- () => void 0
8802
- )
8803
- );
8804
- const inFlightRestoreAwaits = Array.from(inFlightRestores.values()).map(
8805
- (restore) => restore.promise.then(
8883
+ const inFlightSessionAwaits = Array.from(inFlightSpawns.values()).map(
8884
+ (p) => p.then(
8885
+ () => void 0,
8886
+ () => void 0
8887
+ )
8888
+ );
8889
+ const inFlightRestoreAwaits = Array.from(inFlightRestores.values()).map(
8890
+ (restore) => restore.promise.then(
8891
+ () => void 0,
8892
+ () => void 0
8893
+ )
8894
+ );
8895
+ const inFlightChannelAwait = inFlightChannelSpawn ? inFlightChannelSpawn.then(
8806
8896
  () => void 0,
8807
8897
  () => void 0
8808
- )
8809
- );
8810
- const inFlightChannelAwait = inFlightChannelSpawn ? inFlightChannelSpawn.then(
8811
- () => void 0,
8812
- () => void 0
8813
- ) : Promise.resolve();
8814
- await Promise.all([
8815
- ...channels.map((ci) => ci.channel.kill().catch(() => {
8816
- })),
8817
- ...inFlightSessionAwaits,
8818
- ...inFlightRestoreAwaits,
8819
- inFlightChannelAwait
8820
- ]);
8898
+ ) : Promise.resolve();
8899
+ await Promise.all([
8900
+ ...channels.map((ci) => ci.channel.kill().catch(() => {
8901
+ })),
8902
+ ...inFlightSessionAwaits,
8903
+ ...inFlightRestoreAwaits,
8904
+ inFlightChannelAwait
8905
+ ]);
8906
+ })().then(resolveShutdown, rejectShutdown);
8907
+ return shutdownPromise;
8821
8908
  },
8822
8909
  async preheat() {
8823
8910
  if (shuttingDown) return;
@@ -3,19 +3,19 @@
3
3
  import {
4
4
  getInstallationInfo,
5
5
  resolveUpdateCommand
6
- } from "./chunk-OQ4DRIOA.js";
6
+ } from "./chunk-WJOC24IW.js";
7
7
  import {
8
8
  performStandaloneUpdate
9
- } from "./chunk-EMDMPBJ4.js";
9
+ } from "./chunk-C47ENMZJ.js";
10
10
  import {
11
11
  updateEventEmitter
12
12
  } from "./chunk-YAF2MQZ6.js";
13
13
  import {
14
14
  t
15
- } from "./chunk-YAUFFXDS.js";
15
+ } from "./chunk-UZKG7HFG.js";
16
16
  import {
17
17
  createDebugLogger
18
- } from "./chunk-J4TSQ5EQ.js";
18
+ } from "./chunk-7NFB7LBQ.js";
19
19
  import {
20
20
  init_esbuild_shims
21
21
  } from "./chunk-5O2XNYP6.js";
@@ -5,11 +5,11 @@ import {
5
5
  } from "./chunk-VGC4I5JJ.js";
6
6
  import {
7
7
  atomicWriteJSON
8
- } from "./chunk-ZLXQN2QS.js";
8
+ } from "./chunk-WIEO4CWB.js";
9
9
  import {
10
10
  Storage,
11
11
  getProjectHash
12
- } from "./chunk-J4TSQ5EQ.js";
12
+ } from "./chunk-7NFB7LBQ.js";
13
13
  import {
14
14
  init_esbuild_shims
15
15
  } from "./chunk-5O2XNYP6.js";
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  createDebugLogger
5
- } from "./chunk-J4TSQ5EQ.js";
5
+ } from "./chunk-7NFB7LBQ.js";
6
6
  import {
7
7
  init_esbuild_shims
8
8
  } from "./chunk-5O2XNYP6.js";