@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
@@ -1,5 +1,8 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
+ import {
4
+ CHANNEL_CONTROL_DEFAULT_TIMEOUT_MS
5
+ } from "./chunk-5HBA2Z7V.js";
3
6
  import {
4
7
  init_esbuild_shims
5
8
  } from "./chunk-5O2XNYP6.js";
@@ -339,10 +342,12 @@ var RestSseTransport = class {
339
342
  _disposed = false;
340
343
  type = "rest";
341
344
  supportsReplay = true;
345
+ restFetch;
342
346
  constructor(baseUrl, token, fetchFn) {
343
347
  this.baseUrl = baseUrl;
344
348
  this.token = token;
345
349
  this._fetch = fetchFn;
350
+ this.restFetch = fetchFn;
346
351
  }
347
352
  get connected() {
348
353
  return !this._disposed;
@@ -477,6 +482,7 @@ var DEFAULT_SESSION_LIST_PAGE_SIZE = 20;
477
482
  var DEFAULT_FETCH_TIMEOUT_MS = 3e4;
478
483
  var VOICE_TRANSCRIPTION_DEFAULT_TIMEOUT_MS = 65e3;
479
484
  var GITHUB_SETUP_DEFAULT_TIMEOUT_MS = 9e4;
485
+ var MAX_TIMER_DELAY_MS = 2147483647;
480
486
  var DEFAULT_MAX_PENDING_PROMPTS_PER_SESSION = 5;
481
487
  var MCP_RESTART_DEFAULT_TIMEOUT_MS = MCP_RESTART_SERVER_DEADLINE_MS + MCP_RESTART_CLIENT_HEADROOM_MS;
482
488
  var CLIENT_ID_HEADER = "X-Qwen-Client-Id";
@@ -567,7 +573,7 @@ var DaemonClient = class {
567
573
  constructor(opts) {
568
574
  this.baseUrl = stripTrailingSlashes(opts.baseUrl);
569
575
  this.token = opts.token ?? readTokenFromEnv();
570
- this._fetch = opts.fetch ?? globalThis.fetch.bind(globalThis);
576
+ this._fetch = opts.fetch ?? opts.transport?.restFetch ?? globalThis.fetch.bind(globalThis);
571
577
  const raw = opts.fetchTimeoutMs ?? DEFAULT_FETCH_TIMEOUT_MS;
572
578
  this.fetchTimeoutMs = Number.isFinite(raw) && raw > 0 ? raw : 0;
573
579
  this.promptLimit = normalizePendingPromptLimit(
@@ -677,7 +683,8 @@ var DaemonClient = class {
677
683
  hasBody ? { "Content-Type": "application/json" } : {},
678
684
  opts.clientId
679
685
  ),
680
- ...hasBody ? { body: JSON.stringify(opts.body) } : {}
686
+ ...hasBody ? { body: JSON.stringify(opts.body) } : {},
687
+ ...opts.signal ? { signal: opts.signal } : {}
681
688
  },
682
689
  async (res) => {
683
690
  if (!res.ok) throw await this.failOnError(res, label);
@@ -696,6 +703,33 @@ var DaemonClient = class {
696
703
  );
697
704
  }
698
705
  /** @internal */
706
+ async sessionExportRequest(path, label, opts = {}) {
707
+ const format = opts.format ?? "html";
708
+ const query = opts.format ? `?format=${urlEncode(opts.format)}` : "";
709
+ return await this.fetchWithTimeout(
710
+ `${this.baseUrl}${path}${query}`,
711
+ { headers: this.headers({}, opts.clientId) },
712
+ async (res) => {
713
+ if (!res.ok) {
714
+ throw await this.failOnError(res, label);
715
+ }
716
+ const content = await res.text();
717
+ const mimeType = res.headers.get("content-type") ?? "";
718
+ const filename = /filename="([^"]+)"/i.exec(
719
+ res.headers.get("content-disposition") ?? ""
720
+ )?.[1] ?? `export.${format}`;
721
+ return {
722
+ content,
723
+ filename,
724
+ mimeType,
725
+ format
726
+ };
727
+ },
728
+ void 0,
729
+ "rest"
730
+ );
731
+ }
732
+ /** @internal */
699
733
  async workspaceNoContentRequest(workspaceSelector, path, label, opts = {}) {
700
734
  return await this.fetchWithTimeout(
701
735
  `${this.baseUrl}/workspaces/${workspaceSelector}${path}`,
@@ -790,6 +824,13 @@ var DaemonClient = class {
790
824
  }
791
825
  );
792
826
  }
827
+ async workspaceGit() {
828
+ return await this.jsonRequest(
829
+ "/workspace/git",
830
+ "GET /workspace/git",
831
+ { mode: "rest" }
832
+ );
833
+ }
793
834
  async workspaceMcpTools(serverName) {
794
835
  return await this.fetchWithTimeout(
795
836
  `${this.baseUrl}/workspace/mcp/${urlEncode(serverName)}/tools`,
@@ -892,64 +933,230 @@ var DaemonClient = class {
892
933
  async workspaceExtensions() {
893
934
  return await this.jsonRequest(
894
935
  "/workspace/extensions",
895
- "GET /workspace/extensions"
936
+ "GET /workspace/extensions",
937
+ { mode: "rest" }
896
938
  );
897
939
  }
898
940
  async installExtension(params, clientId) {
899
941
  return await this.jsonRequest(
900
942
  "/workspace/extensions/install",
901
943
  "POST /workspace/extensions/install",
902
- { method: "POST", body: params, clientId }
944
+ { method: "POST", body: params, clientId, mode: "rest" }
903
945
  );
904
946
  }
905
947
  async extensionOperationStatus(operationId) {
906
948
  return await this.jsonRequest(
907
949
  `/workspace/extensions/operations/${urlEncode(operationId)}`,
908
- "GET /workspace/extensions/operations/:operationId"
950
+ "GET /workspace/extensions/operations/:operationId",
951
+ { mode: "rest" }
952
+ );
953
+ }
954
+ async activeExtensionOperations() {
955
+ return await this.jsonRequest(
956
+ "/workspace/extensions/operations",
957
+ "GET /workspace/extensions/operations",
958
+ { mode: "rest" }
959
+ );
960
+ }
961
+ async respondToExtensionInteraction(operationId, interactionId, response, clientId) {
962
+ return await this.jsonRequest(
963
+ `/workspace/extensions/operations/${urlEncode(operationId)}/interactions/${urlEncode(interactionId)}`,
964
+ "POST /workspace/extensions/operations/:operationId/interactions/:interactionId",
965
+ { method: "POST", body: response, clientId, mode: "rest" }
909
966
  );
910
967
  }
911
968
  async checkExtensionUpdates(clientId) {
912
969
  return await this.jsonRequest(
913
970
  "/workspace/extensions/check-updates",
914
971
  "POST /workspace/extensions/check-updates",
915
- { method: "POST", body: {}, clientId }
972
+ { method: "POST", body: {}, clientId, mode: "rest" }
916
973
  );
917
974
  }
918
975
  async refreshExtensions(clientId) {
919
976
  return await this.jsonRequest(
920
977
  "/workspace/extensions/refresh",
921
978
  "POST /workspace/extensions/refresh",
922
- { method: "POST", body: {}, clientId }
979
+ { method: "POST", body: {}, clientId, mode: "rest" }
923
980
  );
924
981
  }
925
982
  async enableExtension(name, params, clientId) {
926
983
  return await this.jsonRequest(
927
984
  `/workspace/extensions/${urlEncode(name)}/enable`,
928
985
  "POST /workspace/extensions/:name/enable",
929
- { method: "POST", body: params, clientId }
986
+ { method: "POST", body: params, clientId, mode: "rest" }
930
987
  );
931
988
  }
932
989
  async disableExtension(name, params, clientId) {
933
990
  return await this.jsonRequest(
934
991
  `/workspace/extensions/${urlEncode(name)}/disable`,
935
992
  "POST /workspace/extensions/:name/disable",
936
- { method: "POST", body: params, clientId }
993
+ { method: "POST", body: params, clientId, mode: "rest" }
937
994
  );
938
995
  }
939
996
  async updateExtension(name, clientId) {
940
997
  return await this.jsonRequest(
941
998
  `/workspace/extensions/${urlEncode(name)}/update`,
942
999
  "POST /workspace/extensions/:name/update",
943
- { method: "POST", body: {}, clientId }
1000
+ { method: "POST", body: {}, clientId, mode: "rest" }
944
1001
  );
945
1002
  }
946
1003
  async uninstallExtension(name, clientId) {
947
1004
  return await this.jsonRequest(
948
1005
  `/workspace/extensions/${urlEncode(name)}`,
949
1006
  "DELETE /workspace/extensions/:name",
950
- { method: "DELETE", clientId }
1007
+ { method: "DELETE", clientId, mode: "rest" }
1008
+ );
1009
+ }
1010
+ async extensionCatalog() {
1011
+ return await this.jsonRequest(
1012
+ "/extensions",
1013
+ "GET /extensions",
1014
+ { mode: "rest" }
1015
+ );
1016
+ }
1017
+ async installUserExtension(params, clientId) {
1018
+ return await this.jsonRequest(
1019
+ "/extensions/install",
1020
+ "POST /extensions/install",
1021
+ { method: "POST", body: params, clientId, mode: "rest" }
951
1022
  );
952
1023
  }
1024
+ async checkUserExtensionUpdates(clientId) {
1025
+ return await this.jsonRequest(
1026
+ "/extensions/check-updates",
1027
+ "POST /extensions/check-updates",
1028
+ { method: "POST", body: {}, clientId, mode: "rest" }
1029
+ );
1030
+ }
1031
+ async updateUserExtension(extensionId, clientId) {
1032
+ return await this.jsonRequest(
1033
+ `/extensions/${urlEncode(extensionId)}/update`,
1034
+ "POST /extensions/:extensionId/update",
1035
+ { method: "POST", body: {}, clientId, mode: "rest" }
1036
+ );
1037
+ }
1038
+ async uninstallUserExtension(extensionId, clientId) {
1039
+ return await this.fetchWithTimeout(
1040
+ `${this.baseUrl}/extensions/${urlEncode(extensionId)}`,
1041
+ {
1042
+ method: "DELETE",
1043
+ headers: this.headers({}, clientId)
1044
+ },
1045
+ async (res) => {
1046
+ if (res.status === 204) {
1047
+ await res.body?.cancel().catch(() => void 0);
1048
+ return void 0;
1049
+ }
1050
+ if (!res.ok) {
1051
+ throw await this.failOnError(res, "DELETE /extensions/:extensionId");
1052
+ }
1053
+ return await res.json();
1054
+ },
1055
+ void 0,
1056
+ "rest"
1057
+ );
1058
+ }
1059
+ async setExtensionDefaultActivation(extensionId, state, clientId) {
1060
+ return await this.jsonRequest(
1061
+ `/extensions/${urlEncode(extensionId)}/activation`,
1062
+ "PUT /extensions/:extensionId/activation",
1063
+ { method: "PUT", body: { state }, clientId, mode: "rest" }
1064
+ );
1065
+ }
1066
+ async extensionOperation(operationId, signal) {
1067
+ return await this.jsonRequest(
1068
+ `/extensions/operations/${urlEncode(operationId)}`,
1069
+ "GET /extensions/operations/:operationId",
1070
+ signal ? { signal, mode: "rest" } : { mode: "rest" }
1071
+ );
1072
+ }
1073
+ async waitForExtensionOperation(handle, options = {}) {
1074
+ const pollIntervalMs = options.pollIntervalMs ?? 1e3;
1075
+ const timeoutMs = options.timeoutMs ?? 10 * 6e4;
1076
+ const hasDeadline = timeoutMs !== Number.POSITIVE_INFINITY;
1077
+ const deadline = Date.now() + timeoutMs;
1078
+ const timeoutError = /* @__PURE__ */ __name(() => new Error(
1079
+ `Timed out waiting for extension operation ${handle.operationId}. The server operation was not cancelled.`
1080
+ ), "timeoutError");
1081
+ for (; ; ) {
1082
+ options.signal?.throwIfAborted();
1083
+ const pollBudgetMs = deadline - Date.now();
1084
+ if (pollBudgetMs <= 0 || Number.isNaN(pollBudgetMs)) {
1085
+ throw timeoutError();
1086
+ }
1087
+ let operation;
1088
+ if (!hasDeadline) {
1089
+ operation = await this.extensionOperation(
1090
+ handle.operationId,
1091
+ options.signal
1092
+ );
1093
+ } else {
1094
+ const deadlineController = new AbortController();
1095
+ const pollSignal = options.signal ? composeAbortSignals2([options.signal, deadlineController.signal]) : deadlineController.signal;
1096
+ let deadlineTimer;
1097
+ const deadlinePromise = new Promise((_, reject) => {
1098
+ const expire = /* @__PURE__ */ __name(() => {
1099
+ const error = timeoutError();
1100
+ reject(error);
1101
+ deadlineController.abort(error);
1102
+ }, "expire");
1103
+ const schedule = /* @__PURE__ */ __name(() => {
1104
+ const remainingMs2 = deadline - Date.now();
1105
+ if (remainingMs2 <= 0) {
1106
+ expire();
1107
+ return;
1108
+ }
1109
+ deadlineTimer = setTimeout(
1110
+ () => {
1111
+ if (Date.now() >= deadline) {
1112
+ expire();
1113
+ } else {
1114
+ schedule();
1115
+ }
1116
+ },
1117
+ Math.min(remainingMs2, MAX_TIMER_DELAY_MS)
1118
+ );
1119
+ }, "schedule");
1120
+ schedule();
1121
+ });
1122
+ try {
1123
+ operation = await Promise.race([
1124
+ this.extensionOperation(handle.operationId, pollSignal),
1125
+ deadlinePromise
1126
+ ]);
1127
+ } finally {
1128
+ if (deadlineTimer !== void 0) clearTimeout(deadlineTimer);
1129
+ deadlineController.abort();
1130
+ }
1131
+ }
1132
+ if (operation.status !== "queued" && operation.status !== "running") {
1133
+ return operation;
1134
+ }
1135
+ const remainingMs = deadline - Date.now();
1136
+ if (remainingMs <= 0) {
1137
+ throw timeoutError();
1138
+ }
1139
+ await new Promise((resolve, reject) => {
1140
+ const finish = /* @__PURE__ */ __name(() => {
1141
+ options.signal?.removeEventListener("abort", onAbort);
1142
+ resolve();
1143
+ }, "finish");
1144
+ const timer = setTimeout(
1145
+ finish,
1146
+ Math.min(pollIntervalMs, remainingMs, MAX_TIMER_DELAY_MS)
1147
+ );
1148
+ const onAbort = /* @__PURE__ */ __name(() => {
1149
+ clearTimeout(timer);
1150
+ options.signal?.removeEventListener("abort", onAbort);
1151
+ reject(
1152
+ options.signal?.reason ?? new DOMException("Aborted", "AbortError")
1153
+ );
1154
+ }, "onAbort");
1155
+ options.signal?.addEventListener("abort", onAbort, { once: true });
1156
+ if (options.signal?.aborted) onAbort();
1157
+ });
1158
+ }
1159
+ }
953
1160
  // -- Workspace files (workspace files) -------------------------------
954
1161
  async readWorkspaceFile(filePath, opts = {}, clientId) {
955
1162
  const url = new URL(`${this.baseUrl}/file`);
@@ -1359,8 +1566,8 @@ var DaemonClient = class {
1359
1566
  );
1360
1567
  }
1361
1568
  /**
1362
- * Enumerate live sessions in the given workspace. Used by session-picker
1363
- * UIs. Returns an empty list (not 404) when the workspace has no sessions.
1569
+ * Enumerate the session catalog for a workspace. Used by session-picker UIs.
1570
+ * Returns an empty list (not 404) when the workspace has no sessions.
1364
1571
  */
1365
1572
  async listWorkspaceSessions(workspaceCwd, options) {
1366
1573
  const page = await this.listWorkspaceSessionsPage(workspaceCwd, options);
@@ -1438,29 +1645,10 @@ var DaemonClient = class {
1438
1645
  return this.restoreSession("load", sessionId, req, clientId);
1439
1646
  }
1440
1647
  async exportSession(sessionId, opts = {}) {
1441
- const format = opts.format ?? "html";
1442
- const query = opts.format ? `?format=${urlEncode(opts.format)}` : "";
1443
- return await this.fetchWithTimeout(
1444
- `${this.baseUrl}/session/${urlEncode(sessionId)}/export${query}`,
1445
- { headers: this.headers({}, opts.clientId) },
1446
- async (res) => {
1447
- if (!res.ok) {
1448
- throw await this.failOnError(res, "GET /session/:id/export");
1449
- }
1450
- const content = await res.text();
1451
- const mimeType = res.headers.get("content-type") ?? "";
1452
- const filename = /filename="([^"]+)"/i.exec(
1453
- res.headers.get("content-disposition") ?? ""
1454
- )?.[1] ?? `export.${format}`;
1455
- return {
1456
- content,
1457
- filename,
1458
- mimeType,
1459
- format
1460
- };
1461
- },
1462
- void 0,
1463
- "rest"
1648
+ return await this.sessionExportRequest(
1649
+ `/session/${urlEncode(sessionId)}/export`,
1650
+ "GET /session/:id/export",
1651
+ opts
1464
1652
  );
1465
1653
  }
1466
1654
  async getSessionTranscriptPage(sessionId, opts = {}) {
@@ -1715,7 +1903,9 @@ var DaemonClient = class {
1715
1903
  );
1716
1904
  }
1717
1905
  return await res.json();
1718
- }
1906
+ },
1907
+ void 0,
1908
+ "rest"
1719
1909
  );
1720
1910
  }
1721
1911
  async rewindSession(sessionId, promptId, opts) {
@@ -1737,7 +1927,9 @@ var DaemonClient = class {
1737
1927
  throw await this.failOnError(res, "POST /session/:id/rewind");
1738
1928
  }
1739
1929
  return await res.json();
1740
- }
1930
+ },
1931
+ void 0,
1932
+ "rest"
1741
1933
  );
1742
1934
  }
1743
1935
  /**
@@ -1932,6 +2124,35 @@ var DaemonClient = class {
1932
2124
  }
1933
2125
  );
1934
2126
  }
2127
+ /**
2128
+ * Toggle a user-invocable skill in workspace `skills.disabled` settings.
2129
+ * Active ACP sessions refresh their skill validation and command lists before
2130
+ * the response returns; `activation` reports deferred or partial refreshes.
2131
+ *
2132
+ * Pre-flight `caps.features.includes('workspace_skill_toggle')` before calling.
2133
+ */
2134
+ async setWorkspaceSkillEnabled(skillName, enabled, opts) {
2135
+ return await this.fetchWithTimeout(
2136
+ `${this.baseUrl}/workspace/skills/${urlEncode(skillName)}/enable`,
2137
+ {
2138
+ method: "POST",
2139
+ headers: this.headers(
2140
+ { "Content-Type": "application/json" },
2141
+ opts?.clientId
2142
+ ),
2143
+ body: JSON.stringify({ enabled })
2144
+ },
2145
+ async (res) => {
2146
+ if (!res.ok) {
2147
+ throw await this.failOnError(
2148
+ res,
2149
+ "POST /workspace/skills/:name/enable"
2150
+ );
2151
+ }
2152
+ return await res.json();
2153
+ }
2154
+ );
2155
+ }
1935
2156
  async workspaceSettings(opts) {
1936
2157
  return await this.fetchWithTimeout(
1937
2158
  `${this.baseUrl}/workspace/settings`,
@@ -1966,6 +2187,25 @@ var DaemonClient = class {
1966
2187
  }
1967
2188
  );
1968
2189
  }
2190
+ async deleteModel(target, opts) {
2191
+ return await this.fetchWithTimeout(
2192
+ `${this.baseUrl}/workspace/models`,
2193
+ {
2194
+ method: "DELETE",
2195
+ headers: this.headers(
2196
+ { "Content-Type": "application/json" },
2197
+ opts?.clientId
2198
+ ),
2199
+ body: JSON.stringify(target)
2200
+ },
2201
+ async (res) => {
2202
+ if (!res.ok) {
2203
+ throw await this.failOnError(res, "DELETE /workspace/models");
2204
+ }
2205
+ return await res.json();
2206
+ }
2207
+ );
2208
+ }
1969
2209
  async workspaceVoice(clientId) {
1970
2210
  return await this.jsonRequest(
1971
2211
  "/workspace/voice",
@@ -1981,9 +2221,26 @@ var DaemonClient = class {
1981
2221
  );
1982
2222
  }
1983
2223
  async transcribeWorkspaceVoice(audio, opts) {
2224
+ return await this.voiceTranscriptionRequest(
2225
+ "/workspace/voice/transcribe",
2226
+ "POST /workspace/voice/transcribe",
2227
+ audio,
2228
+ opts
2229
+ );
2230
+ }
2231
+ /** @internal */
2232
+ async workspaceVoiceTranscriptionRequest(workspaceSelector, audio, opts) {
2233
+ return await this.voiceTranscriptionRequest(
2234
+ `/workspaces/${workspaceSelector}/voice/transcribe`,
2235
+ "POST /workspaces/:workspace/voice/transcribe",
2236
+ audio,
2237
+ opts
2238
+ );
2239
+ }
2240
+ async voiceTranscriptionRequest(path, label, audio, opts) {
1984
2241
  const query = opts.voiceModel ? `?${new URLSearchParams({ voiceModel: opts.voiceModel }).toString()}` : "";
1985
2242
  return await this.fetchWithTimeout(
1986
- `${this.baseUrl}/workspace/voice/transcribe${query}`,
2243
+ `${this.baseUrl}${path}${query}`,
1987
2244
  {
1988
2245
  method: "POST",
1989
2246
  headers: this.headers({ "Content-Type": opts.mimeType }, opts.clientId),
@@ -1991,11 +2248,11 @@ var DaemonClient = class {
1991
2248
  },
1992
2249
  async (res) => {
1993
2250
  if (!res.ok) {
1994
- throw await this.failOnError(res, "POST /workspace/voice/transcribe");
2251
+ throw await this.failOnError(res, label);
1995
2252
  }
1996
2253
  return await res.json();
1997
2254
  },
1998
- VOICE_TRANSCRIPTION_DEFAULT_TIMEOUT_MS,
2255
+ opts.timeoutMs ?? VOICE_TRANSCRIPTION_DEFAULT_TIMEOUT_MS,
1999
2256
  "rest"
2000
2257
  );
2001
2258
  }
@@ -2155,8 +2412,8 @@ var DaemonClient = class {
2155
2412
  /**
2156
2413
  * Reload the daemon-managed channel worker: the daemon stops and relaunches
2157
2414
  * it so it re-reads settings.json (channels / proxy / per-channel model).
2158
- * Requires the daemon to have been started with `--channel`; otherwise the
2159
- * route responds 409. Pre-flight the `channel_reload` capability.
2415
+ * Requires an enabled runtime selection; otherwise the route responds 409.
2416
+ * Pre-flight the dynamic `channel_reload` capability.
2160
2417
  */
2161
2418
  async reloadChannelWorker(opts) {
2162
2419
  return await this.fetchWithTimeout(
@@ -2175,9 +2432,61 @@ var DaemonClient = class {
2175
2432
  }
2176
2433
  return await res.json();
2177
2434
  },
2435
+ opts?.timeoutMs ?? CHANNEL_CONTROL_DEFAULT_TIMEOUT_MS
2436
+ );
2437
+ }
2438
+ async getChannelWorkerControl(opts) {
2439
+ return await this.fetchWithTimeout(
2440
+ `${this.baseUrl}/workspace/channel`,
2441
+ {
2442
+ method: "GET",
2443
+ headers: this.headers({}, opts?.clientId)
2444
+ },
2445
+ async (res) => {
2446
+ if (!res.ok) {
2447
+ throw await this.failOnError(res, "GET /workspace/channel");
2448
+ }
2449
+ return await res.json();
2450
+ },
2178
2451
  opts?.timeoutMs
2179
2452
  );
2180
2453
  }
2454
+ async setChannelWorkerSelection(selection, opts) {
2455
+ return await this.fetchWithTimeout(
2456
+ `${this.baseUrl}/workspace/channel`,
2457
+ {
2458
+ method: "PUT",
2459
+ headers: this.headers(
2460
+ { "Content-Type": "application/json" },
2461
+ opts?.clientId
2462
+ ),
2463
+ body: JSON.stringify({ selection })
2464
+ },
2465
+ async (res) => {
2466
+ if (!res.ok) {
2467
+ throw await this.failOnError(res, "PUT /workspace/channel");
2468
+ }
2469
+ return await res.json();
2470
+ },
2471
+ opts?.timeoutMs ?? CHANNEL_CONTROL_DEFAULT_TIMEOUT_MS
2472
+ );
2473
+ }
2474
+ async stopChannelWorker(opts) {
2475
+ return await this.fetchWithTimeout(
2476
+ `${this.baseUrl}/workspace/channel`,
2477
+ {
2478
+ method: "DELETE",
2479
+ headers: this.headers({}, opts?.clientId)
2480
+ },
2481
+ async (res) => {
2482
+ if (!res.ok) {
2483
+ throw await this.failOnError(res, "DELETE /workspace/channel");
2484
+ }
2485
+ return await res.json();
2486
+ },
2487
+ opts?.timeoutMs ?? CHANNEL_CONTROL_DEFAULT_TIMEOUT_MS
2488
+ );
2489
+ }
2181
2490
  async manageMcpServer(serverName, action, opts) {
2182
2491
  return await this.fetchWithTimeout(
2183
2492
  `${this.baseUrl}/workspace/mcp/${urlEncode(serverName)}/${urlEncode(action)}`,
@@ -2784,13 +3093,16 @@ var DaemonClient = class {
2784
3093
  }
2785
3094
  );
2786
3095
  }
2787
- async addWorkspace(cwd) {
3096
+ async addWorkspace(cwd, options = {}) {
2788
3097
  return await this.fetchWithTimeout(
2789
3098
  `${this.baseUrl}/workspaces`,
2790
3099
  {
2791
3100
  method: "POST",
2792
3101
  headers: this.headers({ "Content-Type": "application/json" }),
2793
- body: JSON.stringify({ cwd })
3102
+ body: JSON.stringify({
3103
+ cwd,
3104
+ ...options.persist ? { persist: true } : {}
3105
+ })
2794
3106
  },
2795
3107
  async (res) => {
2796
3108
  if (!res.ok) {
@@ -2872,6 +3184,37 @@ var WorkspaceDaemonClient = class {
2872
3184
  workspaceMcp() {
2873
3185
  return this.get("/mcp", "GET /workspaces/:workspace/mcp");
2874
3186
  }
3187
+ workspaceVoice(clientId) {
3188
+ return this.client.workspaceJsonRequest(
3189
+ this.workspaceSelector,
3190
+ "/voice",
3191
+ "GET /workspaces/:workspace/voice",
3192
+ { clientId, mode: "rest" }
3193
+ );
3194
+ }
3195
+ setWorkspaceVoice(update, clientId) {
3196
+ return this.client.workspaceJsonRequest(
3197
+ this.workspaceSelector,
3198
+ "/voice",
3199
+ "POST /workspaces/:workspace/voice",
3200
+ { method: "POST", body: update, clientId, mode: "rest" }
3201
+ );
3202
+ }
3203
+ transcribeWorkspaceVoice(audio, opts) {
3204
+ return this.client.workspaceVoiceTranscriptionRequest(
3205
+ this.workspaceSelector,
3206
+ audio,
3207
+ opts
3208
+ );
3209
+ }
3210
+ workspaceGit() {
3211
+ return this.client.workspaceJsonRequest(
3212
+ this.workspaceSelector,
3213
+ "/git",
3214
+ "GET /workspaces/:workspace/git",
3215
+ { mode: "rest" }
3216
+ );
3217
+ }
2875
3218
  workspaceSkills() {
2876
3219
  return this.get("/skills", "GET /workspaces/:workspace/skills");
2877
3220
  }
@@ -2893,6 +3236,22 @@ var WorkspaceDaemonClient = class {
2893
3236
  workspaceMemory() {
2894
3237
  return this.get("/memory", "GET /workspaces/:workspace/memory");
2895
3238
  }
3239
+ remove(options) {
3240
+ const body = options?.force === void 0 ? void 0 : {
3241
+ force: options.force
3242
+ };
3243
+ return this.client.workspaceJsonRequest(
3244
+ this.workspaceSelector,
3245
+ "",
3246
+ "DELETE /workspaces/:workspace",
3247
+ {
3248
+ method: "DELETE",
3249
+ ...body ? { body } : {},
3250
+ ...options?.timeoutMs !== void 0 ? { timeoutMs: options.timeoutMs } : {},
3251
+ mode: "rest"
3252
+ }
3253
+ );
3254
+ }
2896
3255
  writeWorkspaceMemory(req, clientId) {
2897
3256
  return this.post(
2898
3257
  "/memory",
@@ -2970,6 +3329,32 @@ var WorkspaceDaemonClient = class {
2970
3329
  const page = await this.listWorkspaceSessionsPage(options);
2971
3330
  return page.sessions;
2972
3331
  }
3332
+ /**
3333
+ * Read one page from an active persisted session transcript in this
3334
+ * workspace.
3335
+ * The daemon performs replay locally without attaching to the session or
3336
+ * starting ACP. This method always uses native REST transport.
3337
+ */
3338
+ getSessionTranscriptPage(sessionId, opts = {}) {
3339
+ const query = new URLSearchParams();
3340
+ if (opts.cursor !== void 0) query.set("cursor", opts.cursor);
3341
+ if (opts.limit !== void 0) query.set("limit", String(opts.limit));
3342
+ const suffix = query.size > 0 ? `?${query.toString()}` : "";
3343
+ return this.client.workspaceJsonRequest(
3344
+ this.workspaceSelector,
3345
+ `/session/${urlEncode(sessionId)}/transcript${suffix}`,
3346
+ "GET /workspaces/:workspace/session/:id/transcript",
3347
+ { clientId: opts.clientId, mode: "rest" }
3348
+ );
3349
+ }
3350
+ /** Export an active persisted session from this registered workspace. */
3351
+ exportSession(sessionId, opts = {}) {
3352
+ return this.client.sessionExportRequest(
3353
+ `/workspaces/${this.workspaceSelector}/session/${urlEncode(sessionId)}/export`,
3354
+ "GET /workspaces/:workspace/session/:id/export",
3355
+ opts
3356
+ );
3357
+ }
2973
3358
  listSessionGroups() {
2974
3359
  return this.get(
2975
3360
  "/session-groups",
@@ -3001,6 +3386,14 @@ var WorkspaceDaemonClient = class {
3001
3386
  { method: "DELETE" }
3002
3387
  );
3003
3388
  }
3389
+ updateSessionOrganization(sessionId, update, clientId) {
3390
+ return this.client.workspaceJsonRequest(
3391
+ this.workspaceSelector,
3392
+ `/session/${urlEncode(sessionId)}/organization`,
3393
+ "PATCH /workspaces/:workspace/session/:id/organization",
3394
+ { method: "PATCH", body: update, clientId }
3395
+ );
3396
+ }
3004
3397
  deleteSessionsData(sessionIds, clientId) {
3005
3398
  return this.post(
3006
3399
  "/sessions/delete",
@@ -3062,11 +3455,16 @@ var WorkspaceDaemonClient = class {
3062
3455
  "GET /workspaces/:workspace/list"
3063
3456
  );
3064
3457
  }
3065
- glob(pattern) {
3458
+ glob(pattern, opts = {}) {
3066
3459
  const query = new URLSearchParams({ pattern });
3067
- return this.get(
3460
+ if (opts.maxResults !== void 0) {
3461
+ query.set("maxResults", String(opts.maxResults));
3462
+ }
3463
+ return this.client.workspaceJsonRequest(
3464
+ this.workspaceSelector,
3068
3465
  `/glob?${query.toString()}`,
3069
- "GET /workspaces/:workspace/glob"
3466
+ "GET /workspaces/:workspace/glob",
3467
+ { signal: opts.signal }
3070
3468
  );
3071
3469
  }
3072
3470
  writeWorkspaceFile(req, clientId) {
@@ -3138,6 +3536,14 @@ var WorkspaceDaemonClient = class {
3138
3536
  opts?.clientId
3139
3537
  );
3140
3538
  }
3539
+ setWorkspaceSkillEnabled(skillName, enabled, opts) {
3540
+ return this.post(
3541
+ `/skills/${urlEncode(skillName)}/enable`,
3542
+ "POST /workspaces/:workspace/skills/:name/enable",
3543
+ { enabled },
3544
+ opts?.clientId
3545
+ );
3546
+ }
3141
3547
  restartMcpServer(serverName, opts) {
3142
3548
  const query = opts?.entryIndex === void 0 ? "" : `?entryIndex=${urlEncode(String(opts.entryIndex))}`;
3143
3549
  return this.post(
@@ -3165,6 +3571,38 @@ var WorkspaceDaemonClient = class {
3165
3571
  opts?.clientId
3166
3572
  );
3167
3573
  }
3574
+ workspaceExtensions() {
3575
+ return this.client.workspaceJsonRequest(
3576
+ this.workspaceSelector,
3577
+ "/extensions",
3578
+ "GET /workspaces/:workspace/extensions",
3579
+ { mode: "rest" }
3580
+ );
3581
+ }
3582
+ setExtensionActivation(extensionId, state, clientId) {
3583
+ return this.client.workspaceJsonRequest(
3584
+ this.workspaceSelector,
3585
+ `/extensions/${urlEncode(extensionId)}/activation`,
3586
+ "PUT /workspaces/:workspace/extensions/:extensionId/activation",
3587
+ { method: "PUT", body: { state }, clientId, mode: "rest" }
3588
+ );
3589
+ }
3590
+ clearExtensionActivation(extensionId, clientId) {
3591
+ return this.client.workspaceJsonRequest(
3592
+ this.workspaceSelector,
3593
+ `/extensions/${urlEncode(extensionId)}/activation`,
3594
+ "DELETE /workspaces/:workspace/extensions/:extensionId/activation",
3595
+ { method: "DELETE", clientId, mode: "rest" }
3596
+ );
3597
+ }
3598
+ refreshExtensionRuntime(clientId) {
3599
+ return this.client.workspaceJsonRequest(
3600
+ this.workspaceSelector,
3601
+ "/extensions/refresh",
3602
+ "POST /workspaces/:workspace/extensions/refresh",
3603
+ { method: "POST", body: {}, clientId, mode: "rest" }
3604
+ );
3605
+ }
3168
3606
  get(path, label, clientId) {
3169
3607
  return this.client.workspaceJsonRequest(
3170
3608
  this.workspaceSelector,
@@ -3775,6 +4213,7 @@ var DAEMON_KNOWN_EVENT_TYPE_VALUES = [
3775
4213
  "session_died",
3776
4214
  "session_closed",
3777
4215
  "session_metadata_updated",
4216
+ "session_recording_degraded",
3778
4217
  "artifact_changed",
3779
4218
  MID_TURN_MESSAGE_INJECTED_EVENT,
3780
4219
  PENDING_PROMPT_ADDED_EVENT,
@@ -3885,7 +4324,8 @@ var DAEMON_KNOWN_EVENT_TYPE_VALUES = [
3885
4324
  // `replay_complete` when `?snapshot=1` is set on the SSE endpoint.
3886
4325
  // Carries `currentModelId` and `currentApprovalMode` so reconnecting
3887
4326
  // clients can seed their reducer without an extra round-trip.
3888
- "session_snapshot"
4327
+ "session_snapshot",
4328
+ "git_branch_changed"
3889
4329
  ];
3890
4330
  var DAEMON_KNOWN_EVENT_TYPES = new Set(
3891
4331
  DAEMON_KNOWN_EVENT_TYPE_VALUES
@@ -3899,6 +4339,7 @@ var RESYNC_PASSTHROUGH_TYPES = /* @__PURE__ */ new Set([
3899
4339
  "session_closed",
3900
4340
  "client_evicted",
3901
4341
  "stream_error",
4342
+ "session_recording_degraded",
3902
4343
  // A5 (#4511): the snapshot is a full-state authoritative frame, not a
3903
4344
  // delta, so it is safe to apply during resync — and it is exactly what
3904
4345
  // lets a client that reconnected past the ring recover currentModelId /
@@ -3913,6 +4354,7 @@ function createDaemonSessionViewState(seed = {}) {
3913
4354
  sessionId: seed.sessionId,
3914
4355
  currentModelId: seed.currentModelId,
3915
4356
  displayName: seed.displayName,
4357
+ recordingDegraded: seed.recordingDegraded ?? false,
3916
4358
  lastSessionUpdate: seed.lastSessionUpdate,
3917
4359
  lastModelSwitchFailure: seed.lastModelSwitchFailure,
3918
4360
  terminalEvent: seed.terminalEvent,
@@ -3998,6 +4440,8 @@ function asKnownDaemonEvent(event) {
3998
4440
  return isSessionClosedData(event.data) ? event : void 0;
3999
4441
  case "session_metadata_updated":
4000
4442
  return isSessionMetadataUpdatedData(event.data) ? event : void 0;
4443
+ case "session_recording_degraded":
4444
+ return isSessionRecordingDegradedData(event.data) ? event : void 0;
4001
4445
  case "artifact_changed":
4002
4446
  return isArtifactChangedData(event.data) ? event : void 0;
4003
4447
  case MID_TURN_MESSAGE_INJECTED_EVENT:
@@ -4380,7 +4824,14 @@ function reduceDaemonSessionEvent(state, rawEvent) {
4380
4824
  ...base,
4381
4825
  sessionId: event.data.sessionId,
4382
4826
  ...event.data.currentModelId != null ? { currentModelId: event.data.currentModelId } : {},
4383
- ...event.data.currentApprovalMode != null ? { approvalMode: event.data.currentApprovalMode } : {}
4827
+ ...event.data.currentApprovalMode != null ? { approvalMode: event.data.currentApprovalMode } : {},
4828
+ ...event.data.recordingDegraded !== void 0 ? { recordingDegraded: event.data.recordingDegraded } : {}
4829
+ };
4830
+ case "session_recording_degraded":
4831
+ return {
4832
+ ...base,
4833
+ sessionId: event.data.sessionId,
4834
+ recordingDegraded: true
4384
4835
  };
4385
4836
  case "session_branched":
4386
4837
  return {
@@ -4841,9 +5292,14 @@ function isSessionSnapshotData(value) {
4841
5292
  if (!isRecord(value) || !isNonEmptyString(value["sessionId"])) return false;
4842
5293
  const model = value["currentModelId"];
4843
5294
  const mode = value["currentApprovalMode"];
4844
- return (model === null || typeof model === "string") && (mode === null || typeof mode === "string");
5295
+ const recordingDegraded = value["recordingDegraded"];
5296
+ return (model === null || typeof model === "string") && (mode === null || typeof mode === "string") && (recordingDegraded === void 0 || typeof recordingDegraded === "boolean");
4845
5297
  }
4846
5298
  __name(isSessionSnapshotData, "isSessionSnapshotData");
5299
+ function isSessionRecordingDegradedData(value) {
5300
+ return isRecord(value) && isNonEmptyString(value["sessionId"]) && value["reason"] === "write_failed";
5301
+ }
5302
+ __name(isSessionRecordingDegradedData, "isSessionRecordingDegradedData");
4847
5303
  function isPermissionOption(value) {
4848
5304
  return isRecord(value) && isNonEmptyString(value["optionId"]);
4849
5305
  }
@@ -5171,6 +5627,7 @@ var MCP_RESTART_REFUSED_REASONS2 = /* @__PURE__ */ new Set([
5171
5627
  ]);
5172
5628
  var MALFORMED_MEMORY_CHANGED = "malformed memory_changed payload";
5173
5629
  var MAX_DETAILS_LENGTH = 4096;
5630
+ var SESSION_RECORDING_DEGRADED_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.";
5174
5631
  function normalizeDaemonEvent(event, opts = {}) {
5175
5632
  const base = createBase(event, opts);
5176
5633
  switch (event.type) {
@@ -5231,6 +5688,42 @@ function normalizeDaemonEvent(event, opts = {}) {
5231
5688
  text: `Session closed: ${getString2(event.data, "reason") ?? "closed"}`
5232
5689
  }
5233
5690
  ];
5691
+ case "session_recording_degraded": {
5692
+ const sessionId = getString2(event.data, "sessionId");
5693
+ if (!sessionId || getString2(event.data, "reason") !== "write_failed") {
5694
+ return fallbackDebug(event, base, "malformed recording state");
5695
+ }
5696
+ return [
5697
+ {
5698
+ ...base,
5699
+ type: "error",
5700
+ recoverable: true,
5701
+ code: "session_recording_degraded",
5702
+ text: SESSION_RECORDING_DEGRADED_MESSAGE
5703
+ }
5704
+ ];
5705
+ }
5706
+ case "session_snapshot": {
5707
+ if (!isRecord2(event.data) || !getString2(event.data, "sessionId")) {
5708
+ return fallbackDebug(event, base, "malformed recording snapshot");
5709
+ }
5710
+ const recordingDegraded = event.data["recordingDegraded"];
5711
+ if (recordingDegraded !== void 0 && typeof recordingDegraded !== "boolean") {
5712
+ return fallbackDebug(event, base, "malformed recording snapshot");
5713
+ }
5714
+ if (recordingDegraded === true) {
5715
+ return [
5716
+ {
5717
+ ...base,
5718
+ type: "error",
5719
+ recoverable: true,
5720
+ code: "session_recording_degraded",
5721
+ text: SESSION_RECORDING_DEGRADED_MESSAGE
5722
+ }
5723
+ ];
5724
+ }
5725
+ return [];
5726
+ }
5234
5727
  case "client_evicted":
5235
5728
  return [
5236
5729
  {
@@ -5336,6 +5829,8 @@ function normalizeDaemonEvent(event, opts = {}) {
5336
5829
  case "approval_mode_changed":
5337
5830
  return normalizeApprovalModeChanged(event, base);
5338
5831
  // ── Workspace events ──────────────────────────────────────
5832
+ case "git_branch_changed":
5833
+ return [];
5339
5834
  case "memory_changed":
5340
5835
  return normalizeMemoryChanged(event, base);
5341
5836
  case "agent_changed":
@@ -5362,6 +5857,8 @@ function normalizeDaemonEvent(event, opts = {}) {
5362
5857
  return normalizeMcpServerRestartRefused(event, base);
5363
5858
  case "extensions_changed":
5364
5859
  return normalizeExtensionsChanged(event, base);
5860
+ case "artifact_changed":
5861
+ return normalizeArtifactChanged(event, base);
5365
5862
  // ── Auth device-flow events (RFC 8628) ─────────────────
5366
5863
  case "auth_device_flow_started":
5367
5864
  return normalizeAuthDeviceFlowStarted(event, base);
@@ -5374,16 +5871,20 @@ function normalizeDaemonEvent(event, opts = {}) {
5374
5871
  case "auth_device_flow_cancelled":
5375
5872
  return normalizeAuthDeviceFlowCancelled(event, base);
5376
5873
  default:
5377
- return [
5378
- {
5379
- ...base,
5380
- type: "debug",
5381
- text: `${event.type} (unrecognized daemon event): ${stringifyRedactedJson(event.data)}`
5382
- }
5383
- ];
5874
+ return normalizeUnrecognizedEvent(event, base);
5384
5875
  }
5385
5876
  }
5386
5877
  __name(normalizeDaemonEvent, "normalizeDaemonEvent");
5878
+ function normalizeUnrecognizedEvent(event, base) {
5879
+ return [
5880
+ {
5881
+ ...base,
5882
+ type: "debug",
5883
+ text: `${event.type} (unrecognized daemon event): ${stringifyRedactedJson(event.data)}`
5884
+ }
5885
+ ];
5886
+ }
5887
+ __name(normalizeUnrecognizedEvent, "normalizeUnrecognizedEvent");
5387
5888
  function normalizeStateResyncRequired(event, base) {
5388
5889
  const reason = getString2(event.data, "reason");
5389
5890
  const lastDeliveredId = numberField(event.data, "lastDeliveredId");
@@ -5637,8 +6138,13 @@ function normalizeSessionUpdate(event, base, opts) {
5637
6138
  ];
5638
6139
  }
5639
6140
  case "tool_call":
5640
- case "tool_call_update":
6141
+ case "tool_call_update": {
6142
+ const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
6143
+ if (getString2(update, "status") === "in_progress" && getString2(update, "kind") === void 0 && meta?.["shellProgress"] !== void 0) {
6144
+ return [];
6145
+ }
5641
6146
  return [normalizeToolUpdate(update, base)];
6147
+ }
5642
6148
  case "shell_output":
5643
6149
  case "tool_output": {
5644
6150
  const text = getOutputText(update);
@@ -5959,6 +6465,27 @@ function normalizeSessionMetadataUpdated(event, base) {
5959
6465
  ];
5960
6466
  }
5961
6467
  __name(normalizeSessionMetadataUpdated, "normalizeSessionMetadataUpdated");
6468
+ function normalizeArtifactChanged(event, base) {
6469
+ const sessionId = getString2(event.data, "sessionId");
6470
+ const change = isRecord2(event.data) ? event.data["change"] : void 0;
6471
+ if (!sessionId || !isRecord2(change)) {
6472
+ return fallbackDebug(event, base, "malformed artifact_changed payload");
6473
+ }
6474
+ const action = getString2(change, "action");
6475
+ const artifactId = getString2(change, "artifactId");
6476
+ if (!action || !artifactId) {
6477
+ return fallbackDebug(event, base, "missing action or artifactId");
6478
+ }
6479
+ return [
6480
+ {
6481
+ ...base,
6482
+ type: "session.artifact.changed",
6483
+ sessionId,
6484
+ change
6485
+ }
6486
+ ];
6487
+ }
6488
+ __name(normalizeArtifactChanged, "normalizeArtifactChanged");
5962
6489
  function normalizeApprovalModeChanged(event, base) {
5963
6490
  const sessionId = getString2(event.data, "sessionId");
5964
6491
  const previous = getString2(event.data, "previous");
@@ -6819,7 +7346,14 @@ var RESYNC_PASSTHROUGH_TYPES2 = /* @__PURE__ */ new Set([
6819
7346
  function appendLocalUserTranscriptMessage(state, text, opts = {}) {
6820
7347
  const next = cloneTranscriptState(state, opts);
6821
7348
  finishAssistant(next);
6822
- const block = createTextBlock(next, "user", text);
7349
+ const block = createTextBlock(
7350
+ next,
7351
+ "user",
7352
+ text,
7353
+ void 0,
7354
+ void 0,
7355
+ opts.meta
7356
+ );
6823
7357
  if (opts.images && opts.images.length > 0) {
6824
7358
  block.images = [...opts.images];
6825
7359
  }
@@ -6958,6 +7492,7 @@ function applyDaemonTranscriptEvent(next, event) {
6958
7492
  next.approvalMode = event.next;
6959
7493
  break;
6960
7494
  case "session.metadata.changed":
7495
+ case "session.artifact.changed":
6961
7496
  case "session.available_commands":
6962
7497
  break;
6963
7498
  case "session.state_resync_required":
@@ -7912,8 +8447,8 @@ function createDaemonTranscriptStore(seed = {}) {
7912
8447
  state = reduceDaemonTranscriptEvents(state, events);
7913
8448
  scheduleNotify();
7914
8449
  },
7915
- appendLocalUserMessage(text, images) {
7916
- state = appendLocalUserTranscriptMessage(state, text, { images });
8450
+ appendLocalUserMessage(text, images, meta) {
8451
+ state = appendLocalUserTranscriptMessage(state, text, { images, meta });
7917
8452
  scheduleNotify();
7918
8453
  },
7919
8454
  reset(nextSeed = {}) {
@@ -8058,6 +8593,12 @@ function daemonUiEventToTerminalText(event) {
8058
8593
  `metadata: ${event.displayName ?? "(no display name)"}`,
8059
8594
  "36"
8060
8595
  );
8596
+ case "session.artifact.changed":
8597
+ return terminalLine(
8598
+ "artifact",
8599
+ `${event.change.action} ${event.change.artifact?.title ?? event.change.artifactId}`,
8600
+ "36"
8601
+ );
8061
8602
  case "session.approval_mode.changed":
8062
8603
  return terminalLine(
8063
8604
  "approval-mode",