@qwen-code/qwen-code 0.20.2-headless-image-routing.1 → 0.21.0

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 (370) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +5 -0
  2. package/bundled/qc-helper/docs/features/sub-agents.md +23 -5
  3. package/bundled/qc-helper/docs/integration-github-action.md +9 -9
  4. package/bundled/review/SKILL.md +7 -3
  5. package/chunks/MaxSizedBox-5DPPWPGT.js +85 -0
  6. package/chunks/{StandaloneSessionPicker-PLQQB22E.js → StandaloneSessionPicker-BIRMPLRD.js} +66 -59
  7. package/chunks/{acp-startup-profiler-N3RHHXJ3.js → acp-startup-profiler-RV3IV562.js} +2 -2
  8. package/chunks/{acpAgent-AIVK2EM5.js → acpAgent-6J2U72PQ.js} +705 -182
  9. package/chunks/agent-6ODUANDO.js +81 -0
  10. package/chunks/agent-headless-7BYQTMHW.js +75 -0
  11. package/chunks/{anthropicContentGenerator-HGWAHO24.js → anthropicContentGenerator-75BKLTSP.js} +117 -43
  12. package/chunks/{artifact-tool-56T5IMBP.js → artifact-tool-Y5T7GG7F.js} +3 -3
  13. package/chunks/{askUserQuestion-E25OBIC2.js → askUserQuestion-2H6747FR.js} +3 -3
  14. package/chunks/bridge-ZUB64FAE.js +90 -0
  15. package/chunks/{build-GHIZ4MSZ.js → build-RV63TIRH.js} +2 -3
  16. package/chunks/{ca-N6VVUFVB.js → ca-25EDXPFZ.js} +2 -0
  17. package/chunks/{channel-worker-group-QZV2SP5U.js → channel-worker-group-2ZD7TVAT.js} +8 -7
  18. package/chunks/{channel-worker-manager-3GMAU45H.js → channel-worker-manager-4OA4BCGB.js} +190 -30
  19. package/chunks/{channel-worker-supervisor-QCXSXCRY.js → channel-worker-supervisor-V7KCFJTS.js} +7 -6
  20. package/chunks/{chunk-TYQMGACW.js → chunk-22C7BQ6D.js} +508 -10967
  21. package/chunks/chunk-2JZBVYTU.js +452 -0
  22. package/chunks/{chunk-H2XVO6NE.js → chunk-2MIN6GRR.js} +1 -1
  23. package/chunks/{chunk-4DWTDZGS.js → chunk-2NH6DYI4.js} +12 -12
  24. package/chunks/chunk-2SCDWPXI.js +246 -0
  25. package/chunks/{chunk-QE4KFTBS.js → chunk-2X55UKQE.js} +3 -3
  26. package/chunks/{chunk-QBUDF33N.js → chunk-3QMGYBFN.js} +1 -1
  27. package/chunks/{chunk-3OAKYHRG.js → chunk-3RN6GBKS.js} +1 -1
  28. package/chunks/{chunk-QR6U5QPP.js → chunk-3SJ43L4W.js} +4 -0
  29. package/chunks/chunk-46UV252V.js +128 -0
  30. package/chunks/{chunk-GHRSKGHF.js → chunk-4WIZGAH3.js} +7 -7
  31. package/chunks/{chunk-CAS7CB3T.js → chunk-55DJUCI2.js} +87 -29
  32. package/chunks/{chunk-QNLNLENL.js → chunk-5I2IWRSH.js} +2 -2
  33. package/chunks/{chunk-H24SOJIQ.js → chunk-5NBDS5S6.js} +147 -7
  34. package/chunks/{chunk-E4IMU4Y5.js → chunk-63P4EL5V.js} +1 -1
  35. package/chunks/chunk-6FGBXPWM.js +293 -0
  36. package/chunks/{chunk-FFFM6NJV.js → chunk-6GMVPFB2.js} +155 -73
  37. package/chunks/{chunk-KWK7UE6L.js → chunk-6OUGMXDC.js} +6 -6
  38. package/chunks/{chunk-QRUIS3DN.js → chunk-6PEXNQTX.js} +22 -1
  39. package/chunks/{chunk-FZPTCQY7.js → chunk-7JURR4JT.js} +1 -1
  40. package/chunks/{chunk-Q6NAKZTA.js → chunk-7MVVZO4N.js} +4 -4
  41. package/chunks/{chunk-6ZBPS62S.js → chunk-7ZCNENPP.js} +1 -1
  42. package/chunks/{chunk-6X4GWOPW.js → chunk-A5L3JMUA.js} +1 -1
  43. package/chunks/{chunk-YO2XRXY6.js → chunk-ACY3A37B.js} +3 -3
  44. package/chunks/chunk-AMDSOFFV.js +10860 -0
  45. package/chunks/{chunk-RV4C2ZFG.js → chunk-BIQWWWJN.js} +1 -1
  46. package/chunks/{chunk-ZHERRXZJ.js → chunk-BJX6ZSUK.js} +4 -4
  47. package/chunks/chunk-BK2UNYWD.js +29 -0
  48. package/chunks/{chunk-FRPDJNK3.js → chunk-BKHWX6I2.js} +3 -3
  49. package/chunks/chunk-BPJSQIJX.js +100 -0
  50. package/chunks/{chunk-M7WBGLYP.js → chunk-BULDBTYC.js} +2 -0
  51. package/chunks/{chunk-ZDP2Y2AL.js → chunk-CIKQ7KKO.js} +4625 -8645
  52. package/chunks/{chunk-PEJWA3QQ.js → chunk-D3UEZIQH.js} +4 -2
  53. package/chunks/chunk-DHHOYAPR.js +1462 -0
  54. package/chunks/{chunk-LESHKUWF.js → chunk-DLWL3Z7A.js} +5 -3
  55. package/chunks/{chunk-XHATNRQA.js → chunk-DP3IHZGG.js} +0 -2
  56. package/chunks/chunk-E5TUC6CA.js +479 -0
  57. package/chunks/{chunk-JC26SJ5Y.js → chunk-EBJQ6AXW.js} +13 -12
  58. package/chunks/{chunk-RCWKCN2Z.js → chunk-EPDRMGT4.js} +164 -17
  59. package/chunks/{chunk-FUFCALSJ.js → chunk-ETSW4KLJ.js} +2 -2
  60. package/chunks/{chunk-KHOVYUHX.js → chunk-FNQ6T3CV.js} +20 -3
  61. package/chunks/{chunk-SP5WRGVG.js → chunk-FQK6JAFG.js} +72 -23
  62. package/chunks/{chunk-NWZY2SPY.js → chunk-FSITMZJH.js} +8 -8
  63. package/chunks/{chunk-6RLROE6G.js → chunk-GLWP3FDB.js} +80 -15
  64. package/chunks/{chunk-KPBVP6SL.js → chunk-GSN55ZRI.js} +5 -5
  65. package/chunks/{chunk-MLYGPZGU.js → chunk-H4SBPHSA.js} +3 -3
  66. package/chunks/chunk-H5FFA6TH.js +902 -0
  67. package/chunks/{chunk-TDKQP3M6.js → chunk-HIJQF5B5.js} +1 -1
  68. package/chunks/{chunk-5G3ZVADU.js → chunk-IJTOWOD7.js} +17 -6
  69. package/chunks/chunk-IKCX4CCL.js +469 -0
  70. package/chunks/{chunk-LPEONXNV.js → chunk-IKYJHJNF.js} +3 -3
  71. package/chunks/{chunk-DTZY2SH2.js → chunk-IO3IX5Q4.js} +1 -1
  72. package/chunks/{chunk-RS7MT2QG.js → chunk-IPUUTYMV.js} +2 -4
  73. package/chunks/{chunk-XU457J4V.js → chunk-IRH27ZC2.js} +2 -2
  74. package/chunks/{chunk-46DK772E.js → chunk-J24WCGIN.js} +4 -4
  75. package/chunks/{chunk-4LVZNIDO.js → chunk-J56UI34H.js} +4 -13
  76. package/chunks/{chunk-TJTKSVIV.js → chunk-JLU636DO.js} +5 -1
  77. package/chunks/{chunk-RKWX4CMO.js → chunk-JVPM2ULZ.js} +6 -6
  78. package/chunks/{chunk-ENPCQK44.js → chunk-JXJFVC6E.js} +37 -18
  79. package/chunks/{chunk-NABLFI57.js → chunk-JZA3JUDJ.js} +1 -1
  80. package/chunks/{chunk-CGLQAVZE.js → chunk-K36B6G2O.js} +5 -5
  81. package/chunks/{chunk-GPSKDNEE.js → chunk-K4XWPEWB.js} +4 -4
  82. package/chunks/{chunk-QOZOIPSF.js → chunk-KIM5GUMA.js} +650 -113
  83. package/chunks/{chunk-JZSM2IZ3.js → chunk-KMQ33DO4.js} +7 -5
  84. package/chunks/{chunk-E2UVIFI2.js → chunk-KRXPRVGL.js} +0 -1
  85. package/chunks/{chunk-WHGVTP7Q.js → chunk-L26JL52R.js} +3 -3
  86. package/chunks/{chunk-7Z6JQEL6.js → chunk-L5UHQJTJ.js} +1 -1
  87. package/chunks/{chunk-O2XSCRCS.js → chunk-LB6DUZ26.js} +259 -67
  88. package/chunks/chunk-LEH5C7FV.js +232 -0
  89. package/chunks/{chunk-RWV32G2M.js → chunk-LH2BYDQ5.js} +6 -4
  90. package/chunks/{chunk-QKTHJXCS.js → chunk-LK7CHLVP.js} +79 -2
  91. package/chunks/{chunk-VRRF3GW5.js → chunk-LKEJ26GS.js} +11 -11
  92. package/chunks/{chunk-SQFXI7VK.js → chunk-LQIW3YFY.js} +227 -41
  93. package/chunks/chunk-LS77BEZP.js +405 -0
  94. package/chunks/{chunk-BSHD62QJ.js → chunk-M4FMGVY4.js} +3 -3
  95. package/chunks/{chunk-57FIIFJN.js → chunk-M5JM7OSF.js} +1 -1
  96. package/chunks/{chunk-7362QS5B.js → chunk-MB4MZHMJ.js} +80 -37
  97. package/chunks/{chunk-4K56OJFJ.js → chunk-MUP3T3AD.js} +1 -1
  98. package/chunks/{chunk-3HFNGB2O.js → chunk-MVSUYZDT.js} +4 -4
  99. package/chunks/{chunk-T5IO6FZ4.js → chunk-MZAXJAUM.js} +1 -1
  100. package/chunks/{chunk-QKNXKTZX.js → chunk-NH6KE4JX.js} +3 -3
  101. package/chunks/chunk-NIBLUX3Y.js +934 -0
  102. package/chunks/{chunk-OQB4EXO4.js → chunk-NL7LTRLR.js} +1 -1
  103. package/chunks/{chunk-CS2FSS7W.js → chunk-OFDOK3VM.js} +5 -5
  104. package/chunks/{chunk-LIZRAKPB.js → chunk-OHNBB4XR.js} +1 -1
  105. package/chunks/{chunk-MDZTPSXO.js → chunk-OKY7HXPG.js} +2 -2
  106. package/chunks/{chunk-NHDKSOEY.js → chunk-P3QQPMQA.js} +5 -5
  107. package/chunks/{chunk-7THPNISK.js → chunk-PC6JANNU.js} +5 -5
  108. package/chunks/{chunk-OTQ6PSZC.js → chunk-PHOF65IG.js} +3498 -1030
  109. package/chunks/{chunk-OQ5SYCPE.js → chunk-PJIZUQVC.js} +2 -2
  110. package/chunks/{chunk-5DTTYNB7.js → chunk-PQNHRFJC.js} +16 -3
  111. package/chunks/{chunk-YM3SZTH4.js → chunk-PR75REBZ.js} +18 -1
  112. package/chunks/{chunk-RECUEJ7B.js → chunk-PSOO6YXD.js} +18 -15
  113. package/chunks/{chunk-X6N25LXS.js → chunk-PWTZEM3C.js} +2 -2
  114. package/chunks/{chunk-5NJTNQUW.js → chunk-PWVFN2LF.js} +1 -1
  115. package/chunks/{chunk-7AUH6A4T.js → chunk-Q4M4MDQ4.js} +2 -2
  116. package/chunks/{chunk-EZPB6S2I.js → chunk-QAF7NMK7.js} +1 -1
  117. package/chunks/{chunk-5GI55PF5.js → chunk-R5AFZNQW.js} +5 -5
  118. package/chunks/{chunk-T5B5NQZX.js → chunk-RF3EXIHJ.js} +47 -60
  119. package/chunks/{chunk-4K7VDKAD.js → chunk-RHLZR4E5.js} +1 -1
  120. package/chunks/{chunk-TJDW42MV.js → chunk-RIBKPMRP.js} +220 -141
  121. package/chunks/{chunk-RVLZCXEE.js → chunk-RWTEFFPU.js} +82 -3
  122. package/chunks/{chunk-L5QZGCRH.js → chunk-RZIX2G32.js} +1 -1
  123. package/chunks/{chunk-LLKWRXSS.js → chunk-SQCQ4KO2.js} +350 -418
  124. package/chunks/{chunk-THJNPLI4.js → chunk-TARRHLLG.js} +1 -0
  125. package/chunks/{chunk-XCXYRDHB.js → chunk-TEHGS6UP.js} +47 -18
  126. package/chunks/{chunk-PQIVAWXN.js → chunk-TGILQ3YH.js} +8 -8
  127. package/chunks/{chunk-Q2YKNMLS.js → chunk-TOFQCPDC.js} +43 -10
  128. package/chunks/{chunk-L3KUB6XM.js → chunk-TPRQ7RZH.js} +586 -242
  129. package/chunks/{chunk-T4TZQJ7W.js → chunk-TWPJO254.js} +5 -16
  130. package/chunks/{chunk-HIP6TVWA.js → chunk-U7M2DMGW.js} +3 -3
  131. package/chunks/{chunk-ACW3VNUE.js → chunk-UDX5OBWR.js} +41 -9
  132. package/chunks/{chunk-LW2FUYBN.js → chunk-USTWD7QV.js} +6 -4
  133. package/chunks/{chunk-NPQDJGKU.js → chunk-UUUTRMI2.js} +1 -1
  134. package/chunks/chunk-UW5EOVUN.js +249 -0
  135. package/chunks/{chunk-6IL7KRLE.js → chunk-VAK25FTU.js} +1 -1
  136. package/chunks/{chunk-O4BHWVUD.js → chunk-VIA5XA4U.js} +5 -2
  137. package/chunks/{chunk-EBXZ2YGV.js → chunk-VRYUBFMC.js} +1 -1
  138. package/chunks/{chunk-TWVE5ZS5.js → chunk-VULLI6WQ.js} +172 -6
  139. package/chunks/{chunk-LNDD3IML.js → chunk-WCXCRJYB.js} +1 -1
  140. package/chunks/{chunk-2LI23QA6.js → chunk-X5XDDSSH.js} +1 -1
  141. package/chunks/{chunk-Q35QUZDQ.js → chunk-Y34KJKDC.js} +1 -1
  142. package/chunks/{chunk-7NR2AIK6.js → chunk-YBL3QUDD.js} +2 -2
  143. package/chunks/{chunk-H4AR2JQF.js → chunk-YH6G52F2.js} +3 -3
  144. package/chunks/{chunk-MBOJHHPI.js → chunk-YPE6A4GC.js} +2 -2
  145. package/chunks/{chunk-3EK5ZOUQ.js → chunk-YX324OPW.js} +1 -1
  146. package/chunks/{chunk-4PTLZ3NX.js → chunk-Z2BC6UJ5.js} +3 -3
  147. package/chunks/{chunk-QLJUC7TG.js → chunk-ZD6UTE4A.js} +1 -1
  148. package/chunks/{chunk-LX3COOXF.js → chunk-ZFDTEDCF.js} +6 -6
  149. package/chunks/chunk-ZJHVAS7M.js +289 -0
  150. package/chunks/{chunk-4OWXOUYF.js → chunk-ZNAUOR2I.js} +15 -12
  151. package/chunks/{chunk-T2L47JJK.js → chunk-ZOIFNCKL.js} +4 -4
  152. package/chunks/{computer-use-2VIV73WK.js → computer-use-SOQ4E3VX.js} +43 -35
  153. package/chunks/{config-utils-FYTBZLCJ.js → config-utils-7V7GGIW6.js} +3 -3
  154. package/chunks/contextCommand-JLHYA34Z.js +80 -0
  155. package/chunks/{create-sub-session-AZ77LBL3.js → create-sub-session-IWW2IZ2T.js} +3 -3
  156. package/chunks/{create-sub-session-XDHHC2P4.js → create-sub-session-QRJLW5BV.js} +43 -35
  157. package/chunks/{cron-create-KTWJM7QT.js → cron-create-YIID5XAW.js} +6 -6
  158. package/chunks/{cron-delete-2P3I5ULL.js → cron-delete-ZVHYCEP2.js} +5 -5
  159. package/chunks/{cron-list-PXDPGEDQ.js → cron-list-XEGS463Q.js} +5 -5
  160. package/chunks/{daemon-RAPSDJH7.js → daemon-YO6433NF.js} +350 -53
  161. package/chunks/daemon-status-provider-2233Q37D.js +89 -0
  162. package/chunks/{de-4IBXM7CN.js → de-HGRCYDEJ.js} +1 -0
  163. package/chunks/{dist-UIFWIFRO.js → dist-46NQKLTW.js} +2 -2
  164. package/chunks/{dist-XRYV6TJP.js → dist-AIKFMUKK.js} +50 -4
  165. package/chunks/{dist-XBJVSWS2.js → dist-BBLXMS3N.js} +14 -2
  166. package/chunks/{dist-OMW6WDEO.js → dist-F6IBUDR4.js} +40 -9
  167. package/chunks/{dist-PJLG2XYX.js → dist-WEAHOXDM.js} +1 -1
  168. package/chunks/{dist-OAV7LJGJ.js → dist-YFNEUWSE.js} +26 -2
  169. package/chunks/earlyInputCapture-A7NDU3PF.js +82 -0
  170. package/chunks/{edit-CS6SFEXC.js → edit-OBDSQURM.js} +43 -35
  171. package/chunks/{en-USMCCJAJ.js → en-MTWBNGDO.js} +15 -0
  172. package/chunks/{enter-worktree-LMAL75DY.js → enter-worktree-U6MRPQ2P.js} +43 -35
  173. package/chunks/{enterPlanMode-WVJB4DSS.js → enterPlanMode-BC5QUZZ2.js} +43 -35
  174. package/chunks/{environment-6YHC4JAJ.js → environment-W5UFC2CH.js} +46 -38
  175. package/chunks/errors-M7CLORXH.js +88 -0
  176. package/chunks/{exit-worktree-KPFD742L.js → exit-worktree-DGNYMECB.js} +43 -35
  177. package/chunks/{exitPlanMode-UEJS6CDY.js → exitPlanMode-GXTBWQAR.js} +43 -35
  178. package/chunks/{fast-path-G2N4NRCA.js → fast-path-JJZFJANL.js} +6 -6
  179. package/chunks/{fast-path-settings-DAOVFADC.js → fast-path-settings-WQJU2LAT.js} +2 -2
  180. package/chunks/{fr-WVHEBDDB.js → fr-45RLL55O.js} +1 -0
  181. package/chunks/{gemini-2MDVIOVT.js → gemini-QS36EBZV.js} +132 -102
  182. package/chunks/{geminiContentGenerator-ZXTDBMFR.js → geminiContentGenerator-AG4KB6CV.js} +14 -8
  183. package/chunks/{getMachineId-bsd-QFVLPUPT.js → getMachineId-bsd-V7W3GODC.js} +1 -1
  184. package/chunks/{getMachineId-darwin-DGMQQE2E.js → getMachineId-darwin-TDO75DQP.js} +1 -1
  185. package/chunks/{getMachineId-linux-R4Z6CSWC.js → getMachineId-linux-TF43WQT2.js} +1 -1
  186. package/chunks/{getMachineId-unsupported-Z3SBVBUV.js → getMachineId-unsupported-ZGUO3TXT.js} +1 -1
  187. package/chunks/{getMachineId-win-SCK5UFDT.js → getMachineId-win-ECFYZZFQ.js} +1 -1
  188. package/chunks/{glob-562XFLIZ.js → glob-V7R3PSK3.js} +43 -35
  189. package/chunks/{grep-MGEFBDQK.js → grep-QYPSK7OP.js} +43 -35
  190. package/chunks/handleAutoUpdate-6DBEZYPV.js +81 -0
  191. package/chunks/{i18n-R6HJENXA.js → i18n-VUJJZIMU.js} +44 -36
  192. package/chunks/image-gen-Z3VPGKRC.js +240 -0
  193. package/chunks/initializer-UWAK5U5O.js +86 -0
  194. package/chunks/installationInfo-6O2YAA52.js +80 -0
  195. package/chunks/{ja-KY4ROZTE.js → ja-B7DF7DFG.js} +1 -0
  196. package/chunks/{keychain-token-storage-6ACJDYIB.js → keychain-token-storage-MDTG3WRM.js} +3 -3
  197. package/chunks/{kittyProtocolDetector-HCNNKJTI.js → kittyProtocolDetector-MBRTDRBK.js} +5 -3
  198. package/chunks/list-GB4ESM3T.js +89 -0
  199. package/chunks/list-agents-5KJJHR6I.js +80 -0
  200. package/chunks/loadedSettingsAdapter-OT6JVQ7U.js +83 -0
  201. package/chunks/loggingContentGenerator-HS3S5H3Q.js +1077 -0
  202. package/chunks/{loop-wakeup-RNMRVA66.js → loop-wakeup-FXKNNYSY.js} +7 -7
  203. package/chunks/{ls-J2ZI5XYK.js → ls-NTK6VOQJ.js} +5 -5
  204. package/chunks/{lsp-UMS3NUB5.js → lsp-2JI24STP.js} +3 -3
  205. package/chunks/{managed-npm-update-4KNYSOYC.js → managed-npm-update-JYEMMXA3.js} +94 -38
  206. package/chunks/mcp-6DBDJPFU.js +83 -0
  207. package/chunks/{monitor-DMHKE4SW.js → monitor-R3ODH5U6.js} +45 -36
  208. package/chunks/node-UUDY34IG.js +305 -0
  209. package/chunks/nonInteractiveCli-MOYCYBBU.js +141 -0
  210. package/chunks/{notebook-edit-35SJGEOR.js → notebook-edit-BNOK452R.js} +43 -35
  211. package/chunks/{openaiContentGenerator-5LPAFXPF.js → openaiContentGenerator-WMCU3O2H.js} +27 -17
  212. package/chunks/pidfile-TFRZZZIO.js +86 -0
  213. package/chunks/{processUtils-GM2I55KF.js → processUtils-RT7UNCC2.js} +2 -2
  214. package/chunks/{pt-OK455PLH.js → pt-22Q3FP73.js} +1 -0
  215. package/chunks/{qwenContentGenerator-HKOYNP7H.js → qwenContentGenerator-HHCRK4SX.js} +56 -42
  216. package/chunks/{qwenOAuth2-NUUYC3V5.js → qwenOAuth2-OWLB5AKH.js} +14 -27
  217. package/chunks/read-file-APMO3PSX.js +31 -0
  218. package/chunks/{read-mcp-resource-F6HYMDUY.js → read-mcp-resource-4DKQWGHD.js} +3 -3
  219. package/chunks/{record-artifact-7GCFLDD7.js → record-artifact-RQKFYO5B.js} +3 -3
  220. package/chunks/resumeHistoryUtils-6KRYEAWZ.js +91 -0
  221. package/chunks/ripGrep-BEJDEDXW.js +73 -0
  222. package/chunks/{ru-7SPDGMGD.js → ru-FZCNZHDC.js} +1 -0
  223. package/chunks/{run-qwen-serve-5VH3F4NW.js → run-qwen-serve-FU6HEM4J.js} +271 -57
  224. package/chunks/{runtime-OH77YH7W.js → runtime-XXRRTNP6.js} +55 -45
  225. package/chunks/{scheduler-WJQSLCSV.js → scheduler-G2ZS2Z7E.js} +43 -35
  226. package/chunks/{sdk-exporters-grpc-ETLH47EP.js → sdk-exporters-grpc-AK3LGHNO.js} +3 -3
  227. package/chunks/{sdk-exporters-http-T3POX73F.js → sdk-exporters-http-FYBSUCPD.js} +6 -6
  228. package/chunks/{sdk-impl-NSLPDH6I.js → sdk-impl-GMVPB7NB.js} +6 -6
  229. package/chunks/{send-message-PYIJ2PZL.js → send-message-Q6OOR6BR.js} +46 -9
  230. package/chunks/serve-7BSTXJ4T.js +89 -0
  231. package/chunks/{server-E4N4AI6Z.js → server-4UMH7OIZ.js} +2362 -411
  232. package/chunks/{session-5YUWIOQE.js → session-K3O3Q2SV.js} +105 -87
  233. package/chunks/{settings-YY7ZSFO7.js → settings-CR2EWTBA.js} +53 -45
  234. package/chunks/shell-HH3PF3A2.js +83 -0
  235. package/chunks/{skill-PAIDX3EU.js → skill-I3SDA4MB.js} +17 -16
  236. package/chunks/spawnChannel-RWNDBXGA.js +82 -0
  237. package/chunks/{src-IZXLJI5M.js → src-GE4TTTML.js} +302 -184
  238. package/chunks/{standalone-update-X675JVBL.js → standalone-update-Q6WFRZZQ.js} +45 -37
  239. package/chunks/{startInteractiveUI-ND2IVBU3.js → startInteractiveUI-SLZGHRPH.js} +747 -310
  240. package/chunks/{syntheticOutput-H7RTI5KL.js → syntheticOutput-I3757IWH.js} +4 -4
  241. package/chunks/{task-create-7474AJJD.js → task-create-N7WQSGYA.js} +10 -10
  242. package/chunks/{task-list-633HGOIB.js → task-list-FOPULZEP.js} +7 -7
  243. package/chunks/{task-stop-MNUGHPIA.js → task-stop-H6RHXFVQ.js} +4 -4
  244. package/chunks/{task-update-66GQB5LI.js → task-update-M57TFZJT.js} +10 -10
  245. package/chunks/{team-create-2DEYNMMN.js → team-create-YJALH5D2.js} +46 -38
  246. package/chunks/{team-delete-BB3CG3QF.js → team-delete-QE2UXJL7.js} +7 -7
  247. package/chunks/{team-plan-approval-65AVAOCT.js → team-plan-approval-34QFYKGN.js} +43 -35
  248. package/chunks/theme-manager-SWRILQHI.js +77 -0
  249. package/chunks/{todoWrite-KRAUN54W.js → todoWrite-VQ7FKOHL.js} +5 -5
  250. package/chunks/{tool-search-ZQP3SMTV.js → tool-search-NF7GB6LE.js} +16 -16
  251. package/chunks/total-session-admission-DLHHHLD3.js +84 -0
  252. package/chunks/{tree-sitter-FS4VPMZA.js → tree-sitter-4D7QS7F6.js} +1 -1
  253. package/chunks/{tree-sitter-bash-6B46JJCV.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
  254. package/chunks/{trustedFolders-LURI52LP.js → trustedFolders-KHXHY6PY.js} +44 -36
  255. package/chunks/{update-relaunch-BPWFIDLM.js → update-relaunch-WBUZJC5O.js} +5 -5
  256. package/chunks/updateCheck-RKL6M5XN.js +92 -0
  257. package/chunks/useAutoAcceptIndicator-CFQ5BUJL.js +93 -0
  258. package/chunks/{validateNonInterActiveAuth-HWD6Y22I.js → validateNonInterActiveAuth-3R223G3R.js} +89 -80
  259. package/chunks/{version-OD4JAFG7.js → version-HS7YSFHV.js} +1 -1
  260. package/chunks/{web-fetch-RFBKNU24.js → web-fetch-NKCSG7ZE.js} +18 -16
  261. package/chunks/{web-search-AKTVS5YZ.js → web-search-S62WAP4S.js} +13 -27
  262. package/chunks/{workflow-VZVCOSZN.js → workflow-QAGU5RU4.js} +44 -36
  263. package/chunks/workspace-providers-status-QSVZUETE.js +86 -0
  264. package/chunks/{workspace-registration-store-Q5SFJSX4.js → workspace-registration-store-24JMHDGF.js} +2 -2
  265. package/chunks/workspace-registry-UT4RBNBM.js +88 -0
  266. package/chunks/workspace-service-JFWRUS4V.js +98 -0
  267. package/chunks/workspace-skills-status-ZBBKJOI2.js +85 -0
  268. package/chunks/write-file-VHIXW5M7.js +73 -0
  269. package/chunks/{zh-WY5DWYZD.js → zh-LUIGBD55.js} +15 -0
  270. package/chunks/{zh-TW-BM47YBFH.js → zh-TW-F5KG2IYD.js} +15 -0
  271. package/cli-entry.js +10 -1
  272. package/cli.js +13 -13
  273. package/locales/ca.js +2 -0
  274. package/locales/de.js +1 -0
  275. package/locales/en.js +25 -0
  276. package/locales/fr.js +1 -0
  277. package/locales/ja.js +1 -0
  278. package/locales/pt.js +1 -0
  279. package/locales/ru.js +1 -0
  280. package/locales/zh-TW.js +23 -0
  281. package/locales/zh.js +23 -0
  282. package/package.json +3 -3
  283. package/web-shell/assets/{arc-BWFm0SI0.js → arc-DcbWnB9T.js} +1 -1
  284. package/web-shell/assets/{architectureDiagram-3BPJPVTR-CZ_yL-DQ.js → architectureDiagram-3BPJPVTR-kMMF5sud.js} +1 -1
  285. package/web-shell/assets/{blockDiagram-GPEHLZMM-B9F9mJvG.js → blockDiagram-GPEHLZMM-Htl9vTJS.js} +1 -1
  286. package/web-shell/assets/{c4Diagram-AAUBKEIU-BUdwJW5f.js → c4Diagram-AAUBKEIU-BnZnm0mQ.js} +1 -1
  287. package/web-shell/assets/channel-Cq7YKtfC.js +1 -0
  288. package/web-shell/assets/{chunk-2J33WTMH-w4cF-qlF.js → chunk-2J33WTMH-DziB7kDG.js} +1 -1
  289. package/web-shell/assets/{chunk-4BX2VUAB-BXwURxHJ.js → chunk-4BX2VUAB-CmkD8daw.js} +1 -1
  290. package/web-shell/assets/{chunk-55IACEB6-Gem3LalC.js → chunk-55IACEB6-CHAd9A_U.js} +1 -1
  291. package/web-shell/assets/{chunk-727SXJPM-A3ddVojI.js → chunk-727SXJPM-Dqaam3fE.js} +1 -1
  292. package/web-shell/assets/{chunk-AQP2D5EJ-CjHZ5L_R.js → chunk-AQP2D5EJ-D_-saBYM.js} +1 -1
  293. package/web-shell/assets/{chunk-FMBD7UC4-CKgdgcpv.js → chunk-FMBD7UC4-B9r_veWD.js} +1 -1
  294. package/web-shell/assets/{chunk-ND2GUHAM-Cn2Dykjb.js → chunk-ND2GUHAM-B3EaCSpL.js} +1 -1
  295. package/web-shell/assets/{chunk-QZHKN3VN--0SyraC5.js → chunk-QZHKN3VN-CYq8x9mn.js} +1 -1
  296. package/web-shell/assets/classDiagram-4FO5ZUOK-CQ9aC1Tg.js +1 -0
  297. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CQ9aC1Tg.js +1 -0
  298. package/web-shell/assets/{cose-bilkent-S5V4N54A-CphhAity.js → cose-bilkent-S5V4N54A-D0ng4uiB.js} +1 -1
  299. package/web-shell/assets/{dagre-BM42HDAG-DU--jiKp.js → dagre-BM42HDAG-DCZollQv.js} +1 -1
  300. package/web-shell/assets/{diagram-2AECGRRQ-BzvuZw1Y.js → diagram-2AECGRRQ-Dfk2pWS0.js} +1 -1
  301. package/web-shell/assets/{diagram-5GNKFQAL-D84-49Y0.js → diagram-5GNKFQAL-kX38ltWR.js} +1 -1
  302. package/web-shell/assets/{diagram-KO2AKTUF-DQTq-3_3.js → diagram-KO2AKTUF-CJz2vsXh.js} +1 -1
  303. package/web-shell/assets/{diagram-LMA3HP47-8FTrshzN.js → diagram-LMA3HP47-BvMLZm_7.js} +1 -1
  304. package/web-shell/assets/{diagram-OG6HWLK6-BCjpDBCm.js → diagram-OG6HWLK6-l7kfStkO.js} +1 -1
  305. package/web-shell/assets/{erDiagram-TEJ5UH35-BtRObkmg.js → erDiagram-TEJ5UH35-BSVa8GGT.js} +1 -1
  306. package/web-shell/assets/{flowDiagram-I6XJVG4X-DTrW6oxy.js → flowDiagram-I6XJVG4X-CoawKIXH.js} +1 -1
  307. package/web-shell/assets/{ganttDiagram-6RSMTGT7-BgPNSW6j.js → ganttDiagram-6RSMTGT7-DFUDH0zF.js} +1 -1
  308. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BTclNgGV.js → gitGraphDiagram-PVQCEYII-Y2pvpT4e.js} +1 -1
  309. package/web-shell/assets/{index-CxA7AqY6.js → index-D0GX0zZf.js} +1 -1
  310. package/web-shell/assets/index-D9haPt0X.css +5 -0
  311. package/web-shell/assets/index-ckX9Pq5k.js +1230 -0
  312. package/web-shell/assets/{infoDiagram-5YYISTIA-DCE4AJt2.js → infoDiagram-5YYISTIA-CU8_zLiX.js} +1 -1
  313. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-C8iE6q4Y.js → ishikawaDiagram-YF4QCWOH-AVQiV0DU.js} +1 -1
  314. package/web-shell/assets/{journeyDiagram-JHISSGLW-C_dxdyEc.js → journeyDiagram-JHISSGLW-DQ0VSKa3.js} +1 -1
  315. package/web-shell/assets/{kanban-definition-UN3LZRKU-Dw3n1u3w.js → kanban-definition-UN3LZRKU-BqnWqsE_.js} +1 -1
  316. package/web-shell/assets/{linear-C2BF2zJ9.js → linear-BkoihsaA.js} +1 -1
  317. package/web-shell/assets/{mermaid.core-CGTQU3MA.js → mermaid.core-5RJs-31j.js} +5 -5
  318. package/web-shell/assets/{mindmap-definition-RKZ34NQL-BVFZm9ZC.js → mindmap-definition-RKZ34NQL-D33Bxnpd.js} +1 -1
  319. package/web-shell/assets/{pieDiagram-4H26LBE5-Cc-TNN3n.js → pieDiagram-4H26LBE5-BuEAw3BH.js} +1 -1
  320. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CgW3Rzsi.js → quadrantDiagram-W4KKPZXB-Kox_usEq.js} +1 -1
  321. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BAaj0Y3B.js → requirementDiagram-4Y6WPE33-CNjeUif0.js} +1 -1
  322. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-XJWmekxS.js → sankeyDiagram-5OEKKPKP-BCd2OL_U.js} +1 -1
  323. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CtRc_0wf.js → sequenceDiagram-3UESZ5HK-CF2ZTsz0.js} +1 -1
  324. package/web-shell/assets/{stateDiagram-AJRCARHV-WCnvMGy5.js → stateDiagram-AJRCARHV-qenSzHtm.js} +1 -1
  325. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-B7W4zlCr.js +1 -0
  326. package/web-shell/assets/{timeline-definition-PNZ67QCA-C9cRx49L.js → timeline-definition-PNZ67QCA-B5DyWdgs.js} +1 -1
  327. package/web-shell/assets/{vennDiagram-CIIHVFJN-BvXOCEt-.js → vennDiagram-CIIHVFJN-DqP4I_o_.js} +1 -1
  328. package/web-shell/assets/{wardley-L42UT6IY-ByafGtzu.js → wardley-L42UT6IY-CJe2e4mg.js} +1 -1
  329. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-CozAnw8x.js → wardleyDiagram-YWT4CUSO-BMDSw-Rr.js} +1 -1
  330. package/web-shell/assets/{xychartDiagram-2RQKCTM6-Camu9Qvq.js → xychartDiagram-2RQKCTM6-BTVZYkxD.js} +1 -1
  331. package/web-shell/index.html +17 -13
  332. package/chunks/MaxSizedBox-3XQIBACV.js +0 -78
  333. package/chunks/agent-QXD5NSKA.js +0 -73
  334. package/chunks/agent-headless-4VXR2TBK.js +0 -67
  335. package/chunks/bridge-GIBRSPE6.js +0 -81
  336. package/chunks/chunk-CBOQ3HY7.js +0 -2019
  337. package/chunks/chunk-MA6GYKK7.js +0 -6928
  338. package/chunks/contextCommand-XQU7KLIH.js +0 -72
  339. package/chunks/daemon-status-provider-KQVNB4VA.js +0 -80
  340. package/chunks/earlyInputCapture-WP5SA3KH.js +0 -74
  341. package/chunks/errors-JEYPXX4S.js +0 -80
  342. package/chunks/handleAutoUpdate-2VJPAW43.js +0 -73
  343. package/chunks/initializer-UOX67ZFQ.js +0 -78
  344. package/chunks/installationInfo-NQNY34X3.js +0 -72
  345. package/chunks/list-2Z7KS7ZF.js +0 -81
  346. package/chunks/loadedSettingsAdapter-LIYY3LE4.js +0 -75
  347. package/chunks/mcp-AJ4QW3JA.js +0 -75
  348. package/chunks/nonInteractiveCli-PUSO5QF6.js +0 -134
  349. package/chunks/pidfile-EH2JW2PB.js +0 -78
  350. package/chunks/read-file-JZ5VXILQ.js +0 -31
  351. package/chunks/resumeHistoryUtils-Z3HG4WKM.js +0 -84
  352. package/chunks/ripGrep-JNLJCT2B.js +0 -65
  353. package/chunks/serve-NN5FXWR6.js +0 -81
  354. package/chunks/shell-FXT3NVC6.js +0 -75
  355. package/chunks/spawnChannel-XAWLXNOD.js +0 -74
  356. package/chunks/theme-manager-2WZHPK2M.js +0 -69
  357. package/chunks/total-session-admission-HULB2TEQ.js +0 -75
  358. package/chunks/updateCheck-D4ESCHBJ.js +0 -88
  359. package/chunks/useAutoAcceptIndicator-CBNLOF2P.js +0 -86
  360. package/chunks/workspace-providers-status-TJTVHORI.js +0 -78
  361. package/chunks/workspace-registry-H6VM5WXK.js +0 -79
  362. package/chunks/workspace-service-ZNKD3I2J.js +0 -90
  363. package/chunks/workspace-skills-status-OOBIXADG.js +0 -77
  364. package/chunks/write-file-CAKK5IAO.js +0 -65
  365. package/web-shell/assets/channel-DiLlxxIf.js +0 -1
  366. package/web-shell/assets/classDiagram-4FO5ZUOK-CkylTdM4.js +0 -1
  367. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CkylTdM4.js +0 -1
  368. package/web-shell/assets/index-CGtQqOIa.css +0 -5
  369. package/web-shell/assets/index-TtM0hVjU.js +0 -1207
  370. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-D1gzH2Ue.js +0 -1
@@ -381,6 +381,9 @@ var RestSseTransport = class {
381
381
  }
382
382
  if (opts.lastEventId !== void 0) {
383
383
  headers["Last-Event-ID"] = String(opts.lastEventId);
384
+ if (opts.epoch !== void 0) {
385
+ headers["X-Qwen-Event-Epoch"] = opts.epoch;
386
+ }
384
387
  }
385
388
  const fetchSignal = opts.signal ? composeAbortSignals([opts.signal, requestCtrl.signal]) : requestCtrl.signal;
386
389
  let url = `${this.baseUrl}/session/${encodeURIComponent(sessionId)}/events`;
@@ -439,6 +442,10 @@ var RestSseTransport = class {
439
442
  if (!res.body) {
440
443
  throw new Error("No SSE body");
441
444
  }
445
+ const responseEpoch = res.headers.get("x-qwen-event-epoch");
446
+ if (responseEpoch) {
447
+ opts.onEpoch?.(responseEpoch);
448
+ }
442
449
  yield* parseSseStream(res.body, fetchSignal);
443
450
  } finally {
444
451
  requestCtrl.abort();
@@ -590,6 +597,7 @@ var DEFAULT_SESSION_LIST_PAGE_SIZE = 20;
590
597
  var DEFAULT_FETCH_TIMEOUT_MS = 3e4;
591
598
  var VOICE_TRANSCRIPTION_DEFAULT_TIMEOUT_MS = 65e3;
592
599
  var GITHUB_SETUP_DEFAULT_TIMEOUT_MS = 9e4;
600
+ var CHANNEL_NOTIFY_DEFAULT_TIMEOUT_MS = 35e3;
593
601
  var MAX_TIMER_DELAY_MS = 2147483647;
594
602
  var DEFAULT_MAX_PENDING_PROMPTS_PER_SESSION = 5;
595
603
  var MCP_RESTART_DEFAULT_TIMEOUT_MS = MCP_RESTART_SERVER_DEADLINE_MS + MCP_RESTART_CLIENT_HEADROOM_MS;
@@ -902,6 +910,25 @@ var DaemonClient = class {
902
910
  }
903
911
  );
904
912
  }
913
+ /**
914
+ * Send text directly through the primary workspace's channel worker.
915
+ * This does not create or prompt an Agent session. Pre-flight the
916
+ * `channel_delivery` capability before calling across mixed daemon versions.
917
+ * A successful capability check does not guarantee worker liveness; callers
918
+ * must treat 503 `channel_worker_unavailable` as an expected outcome.
919
+ */
920
+ async notify(req, opts) {
921
+ return await this.jsonRequest(
922
+ "/workspace/notify",
923
+ "POST /workspace/notify",
924
+ {
925
+ method: "POST",
926
+ body: req,
927
+ timeoutMs: opts?.timeoutMs ?? CHANNEL_NOTIFY_DEFAULT_TIMEOUT_MS,
928
+ mode: "rest"
929
+ }
930
+ );
931
+ }
905
932
  async requireCapability(capability) {
906
933
  const caps = await this.capabilities();
907
934
  if (!caps.features.includes(capability)) {
@@ -968,13 +995,13 @@ var DaemonClient = class {
968
995
  }
969
996
  );
970
997
  }
971
- async reloadWorkspaceMcp() {
998
+ async reloadWorkspaceMcp(options = {}) {
972
999
  return await this.fetchWithTimeout(
973
1000
  `${this.baseUrl}/workspace/mcp/reload`,
974
1001
  {
975
1002
  method: "POST",
976
1003
  headers: this.headers({ "Content-Type": "application/json" }),
977
- body: "{}"
1004
+ body: JSON.stringify(options)
978
1005
  },
979
1006
  async (res) => {
980
1007
  if (!res.ok) {
@@ -1628,9 +1655,47 @@ var DaemonClient = class {
1628
1655
  MCP_RESTART_DEFAULT_TIMEOUT_MS
1629
1656
  );
1630
1657
  }
1631
- async getWorkspaceAgent(agentType) {
1658
+ async *generateContentEvents(path, label, body, opts, parse, requireTerminal) {
1659
+ const res = await this.transport.fetch(`${this.baseUrl}${path}`, {
1660
+ method: "POST",
1661
+ headers: this.headers(
1662
+ {
1663
+ "Content-Type": "application/json",
1664
+ Accept: "text/event-stream"
1665
+ },
1666
+ opts?.clientId
1667
+ ),
1668
+ body: JSON.stringify(body),
1669
+ signal: opts?.signal
1670
+ });
1671
+ if (!res.ok) throw await this.failOnError(res, label);
1672
+ if (!res.body) throw new Error("Generation response body is missing");
1673
+ let sawTerminal = false;
1674
+ for await (const event of parseSseStream(res.body, opts?.signal)) {
1675
+ const generationEvent = parse(event);
1676
+ if (!generationEvent) continue;
1677
+ sawTerminal = generationEvent.type === "done" || generationEvent.type === "error";
1678
+ yield generationEvent;
1679
+ if (requireTerminal && sawTerminal) return;
1680
+ }
1681
+ if (requireTerminal && !opts?.signal?.aborted && !sawTerminal) {
1682
+ throw new Error("Stream ended without terminal event");
1683
+ }
1684
+ }
1685
+ async *generateWorkspaceContent(prompt, opts) {
1686
+ yield* this.generateContentEvents(
1687
+ "/workspace/generate",
1688
+ "POST /workspace/generate",
1689
+ { prompt },
1690
+ opts,
1691
+ parseSessionGenerationEvent,
1692
+ true
1693
+ );
1694
+ }
1695
+ async getWorkspaceAgent(agentType, opts = {}) {
1696
+ const url = opts.scope ? `${this.baseUrl}/workspace/agents/${urlEncode(agentType)}?scope=${urlEncode(opts.scope)}` : `${this.baseUrl}/workspace/agents/${urlEncode(agentType)}`;
1632
1697
  return await this.fetchWithTimeout(
1633
- `${this.baseUrl}/workspace/agents/${urlEncode(agentType)}`,
1698
+ url,
1634
1699
  { headers: this.headers() },
1635
1700
  async (res) => {
1636
1701
  if (!res.ok) {
@@ -1766,7 +1831,8 @@ var DaemonClient = class {
1766
1831
  ...req.approvalMode !== void 0 ? { approvalMode: req.approvalMode } : {},
1767
1832
  ...req.sourceType !== void 0 ? { sourceType: req.sourceType } : {},
1768
1833
  ...req.sourceId !== void 0 ? { sourceId: req.sourceId } : {},
1769
- ...req.worktree !== void 0 ? { worktree: req.worktree } : {}
1834
+ ...req.worktree !== void 0 ? { worktree: req.worktree } : {},
1835
+ ...req.branch !== void 0 ? { branch: req.branch } : {}
1770
1836
  })
1771
1837
  },
1772
1838
  async (res) => {
@@ -1880,6 +1946,20 @@ var DaemonClient = class {
1880
1946
  }
1881
1947
  );
1882
1948
  }
1949
+ async resolveSubagentSession(sessionId, toolCallId, clientId) {
1950
+ return await this.jsonRequest(
1951
+ `/session/${urlEncode(sessionId)}/subagents/${urlEncode(toolCallId)}`,
1952
+ "GET /session/:id/subagents/:toolCallId",
1953
+ { clientId, mode: "rest" }
1954
+ );
1955
+ }
1956
+ async cancelSubagentSession(sessionId, toolCallId, clientId) {
1957
+ return await this.jsonRequest(
1958
+ `/session/${urlEncode(sessionId)}/subagents/${urlEncode(toolCallId)}/cancel`,
1959
+ "POST /session/:id/subagents/:toolCallId/cancel",
1960
+ { clientId, mode: "rest", method: "POST" }
1961
+ );
1962
+ }
1883
1963
  async resumeSession(sessionId, req = {}, clientId) {
1884
1964
  return this.restoreSession("resume", sessionId, req, clientId);
1885
1965
  }
@@ -2191,29 +2271,14 @@ var DaemonClient = class {
2191
2271
  return await res.json();
2192
2272
  }
2193
2273
  async *generateSessionContent(sessionId, prompt, opts) {
2194
- const res = await this.transport.fetch(
2195
- `${this.baseUrl}/session/${urlEncode(sessionId)}/generate`,
2196
- {
2197
- method: "POST",
2198
- headers: this.headers(
2199
- {
2200
- "Content-Type": "application/json",
2201
- Accept: "text/event-stream"
2202
- },
2203
- opts?.clientId
2204
- ),
2205
- body: JSON.stringify({ prompt }),
2206
- signal: opts?.signal
2207
- }
2274
+ yield* this.generateContentEvents(
2275
+ `/session/${urlEncode(sessionId)}/generate`,
2276
+ "POST /session/:id/generate",
2277
+ { prompt },
2278
+ opts,
2279
+ parseSessionGenerationEvent,
2280
+ false
2208
2281
  );
2209
- if (!res.ok) {
2210
- throw await this.failOnError(res, "POST /session/:id/generate");
2211
- }
2212
- if (!res.body) throw new Error("Generation response body is missing");
2213
- for await (const event of parseSseStream(res.body, opts?.signal)) {
2214
- const generationEvent = parseSessionGenerationEvent(event);
2215
- if (generationEvent) yield generationEvent;
2216
- }
2217
2282
  }
2218
2283
  async btwSession(sessionId, question, opts) {
2219
2284
  const res = await this.transport.fetch(
@@ -2948,7 +3013,8 @@ var DaemonClient = class {
2948
3013
  accept.promptId,
2949
3014
  accept.lastEventId,
2950
3015
  signal,
2951
- clientId
3016
+ clientId,
3017
+ accept.eventEpoch
2952
3018
  );
2953
3019
  } finally {
2954
3020
  releasePromptSlot();
@@ -3002,12 +3068,16 @@ var DaemonClient = class {
3002
3068
  }
3003
3069
  return await res.json();
3004
3070
  }
3005
- async _awaitTurnComplete(sessionId, promptId, lastEventId, signal, clientId) {
3071
+ async _awaitTurnComplete(sessionId, promptId, lastEventId, signal, clientId, eventEpoch) {
3006
3072
  const sseAbort = new AbortController();
3007
3073
  const composedSignal = signal ? composeAbortSignals2([signal, sseAbort.signal]) : sseAbort.signal;
3008
3074
  try {
3009
3075
  const events = this.subscribeEvents(sessionId, {
3010
3076
  lastEventId,
3077
+ // Cursor and epoch both come from the 202 envelope: a daemon
3078
+ // restart between the 202 and this subscribe is detected as an
3079
+ // epoch mismatch instead of silently mis-resuming (DAEMON-001).
3080
+ ...eventEpoch !== void 0 ? { epoch: eventEpoch } : {},
3011
3081
  signal: composedSignal
3012
3082
  });
3013
3083
  for await (const event of events) {
@@ -3073,6 +3143,8 @@ var DaemonClient = class {
3073
3143
  async *subscribeEvents(sessionId, opts = {}) {
3074
3144
  yield* this.transport.subscribeEvents(sessionId, {
3075
3145
  lastEventId: opts.lastEventId,
3146
+ epoch: opts.epoch,
3147
+ onEpoch: opts.onEpoch,
3076
3148
  maxQueued: opts.maxQueued,
3077
3149
  signal: opts.signal,
3078
3150
  connectTimeoutMs: this.fetchTimeoutMs || void 0
@@ -3469,6 +3541,24 @@ var WorkspaceDaemonClient = class {
3469
3541
  workspaceMcp() {
3470
3542
  return this.get("/mcp", "GET /workspaces/:workspace/mcp");
3471
3543
  }
3544
+ /**
3545
+ * Send text directly through this exact workspace's channel worker.
3546
+ * A successful capability pre-flight does not guarantee worker liveness;
3547
+ * callers must treat 503 `channel_worker_unavailable` as an expected outcome.
3548
+ */
3549
+ notify(req, opts) {
3550
+ return this.client.workspaceJsonRequest(
3551
+ this.workspaceSelector,
3552
+ "/notify",
3553
+ "POST /workspaces/:workspace/notify",
3554
+ {
3555
+ method: "POST",
3556
+ body: req,
3557
+ timeoutMs: opts?.timeoutMs ?? CHANNEL_NOTIFY_DEFAULT_TIMEOUT_MS,
3558
+ mode: "rest"
3559
+ }
3560
+ );
3561
+ }
3472
3562
  initializeWorkspaceMcp() {
3473
3563
  return this.post(
3474
3564
  "/mcp/initialize",
@@ -3476,11 +3566,11 @@ var WorkspaceDaemonClient = class {
3476
3566
  {}
3477
3567
  );
3478
3568
  }
3479
- reloadWorkspaceMcp() {
3569
+ reloadWorkspaceMcp(options = {}) {
3480
3570
  return this.post(
3481
3571
  "/mcp/reload",
3482
3572
  "POST /workspaces/:workspace/mcp/reload",
3483
- {}
3573
+ options
3484
3574
  );
3485
3575
  }
3486
3576
  workspaceVoice(clientId) {
@@ -4049,7 +4139,20 @@ var DaemonSessionClient = class _DaemonSessionClient {
4049
4139
  replaySnapshot;
4050
4140
  hasActivePrompt;
4051
4141
  historyHasMore;
4142
+ /**
4143
+ * True when the load response flagged the replay snapshot as degraded
4144
+ * (`replayDegraded` — compaction failed at least once, so
4145
+ * `replaySnapshot` may lag behind live events). Prefer the full
4146
+ * transcript (see `fullTranscriptAvailable`) when set.
4147
+ */
4148
+ replayDegraded;
4052
4149
  lastSeenEventId;
4150
+ /**
4151
+ * Epoch token paired with {@link lastSeenEventId}. Seeded from the
4152
+ * load/resume/create response when available, refreshed from every
4153
+ * subscription's `X-Qwen-Event-Epoch` response header.
4154
+ */
4155
+ lastSeenEpoch;
4053
4156
  subscriptionActive = false;
4054
4157
  /** In-flight `reattach()` so concurrent prompts re-register only once. */
4055
4158
  reattaching;
@@ -4061,11 +4164,13 @@ var DaemonSessionClient = class _DaemonSessionClient {
4061
4164
  this.state = { ...opts.state ?? {} };
4062
4165
  this.hasActivePrompt = opts.hasActivePrompt ?? false;
4063
4166
  this.historyHasMore = opts.historyHasMore ?? false;
4167
+ this.replayDegraded = opts.replayDegraded ?? false;
4064
4168
  this.replaySnapshot = opts.replaySnapshot ?? {
4065
4169
  compactedReplay: [],
4066
4170
  liveJournal: []
4067
4171
  };
4068
4172
  this.lastSeenEventId = validateLastEventId(opts.lastEventId);
4173
+ this.lastSeenEpoch = opts.eventEpoch;
4069
4174
  this.promptLimit = opts.maxPendingPromptsPerSession === void 0 ? opts.client.maxPendingPromptsPerSession : normalizePendingPromptLimit(opts.maxPendingPromptsPerSession);
4070
4175
  }
4071
4176
  /**
@@ -4078,7 +4183,11 @@ var DaemonSessionClient = class _DaemonSessionClient {
4078
4183
  client,
4079
4184
  session,
4080
4185
  hasActivePrompt: session.hasActivePrompt,
4081
- lastEventId
4186
+ lastEventId,
4187
+ // Newer daemons may stamp the bus epoch on the create/attach
4188
+ // response; older ones don't — the first subscription then learns it
4189
+ // from the `X-Qwen-Event-Epoch` response header.
4190
+ eventEpoch: session.eventEpoch
4082
4191
  });
4083
4192
  }
4084
4193
  /**
@@ -4093,7 +4202,9 @@ var DaemonSessionClient = class _DaemonSessionClient {
4093
4202
  compactedReplay,
4094
4203
  liveJournal,
4095
4204
  historyHasMore,
4205
+ replayDegraded,
4096
4206
  lastEventId: serverLastEventId,
4207
+ eventEpoch,
4097
4208
  ...session
4098
4209
  } = await client.loadSession(sessionId, req, clientId);
4099
4210
  return new _DaemonSessionClient({
@@ -4102,11 +4213,13 @@ var DaemonSessionClient = class _DaemonSessionClient {
4102
4213
  hasActivePrompt,
4103
4214
  state,
4104
4215
  lastEventId: serverLastEventId ?? 0,
4216
+ eventEpoch,
4105
4217
  replaySnapshot: {
4106
4218
  compactedReplay: compactedReplay ?? [],
4107
4219
  liveJournal: liveJournal ?? []
4108
4220
  },
4109
- historyHasMore
4221
+ historyHasMore,
4222
+ replayDegraded
4110
4223
  });
4111
4224
  }
4112
4225
  /**
@@ -4120,6 +4233,7 @@ var DaemonSessionClient = class _DaemonSessionClient {
4120
4233
  state,
4121
4234
  hasActivePrompt,
4122
4235
  lastEventId: serverLastEventId,
4236
+ eventEpoch,
4123
4237
  ...session
4124
4238
  } = await client.resumeSession(sessionId, req, clientId);
4125
4239
  return new _DaemonSessionClient({
@@ -4127,7 +4241,8 @@ var DaemonSessionClient = class _DaemonSessionClient {
4127
4241
  session,
4128
4242
  hasActivePrompt,
4129
4243
  state,
4130
- lastEventId: serverLastEventId ?? 0
4244
+ lastEventId: serverLastEventId ?? 0,
4245
+ eventEpoch
4131
4246
  });
4132
4247
  }
4133
4248
  get sessionId() {
@@ -4145,6 +4260,9 @@ var DaemonSessionClient = class _DaemonSessionClient {
4145
4260
  get worktree() {
4146
4261
  return this.session.worktree;
4147
4262
  }
4263
+ get branch() {
4264
+ return this.session.branch;
4265
+ }
4148
4266
  get lastEventId() {
4149
4267
  return this.lastSeenEventId;
4150
4268
  }
@@ -4511,9 +4629,16 @@ var DaemonSessionClient = class _DaemonSessionClient {
4511
4629
  try {
4512
4630
  const { resume = true, ...subscribeOpts } = opts;
4513
4631
  const lastEventId = subscribeOpts.lastEventId ?? (resume ? this.lastSeenEventId : void 0);
4632
+ const epoch = subscribeOpts.epoch ?? (resume ? this.lastSeenEpoch : void 0);
4633
+ const callerOnEpoch = subscribeOpts.onEpoch;
4514
4634
  for await (const event of this.client.subscribeEvents(this.sessionId, {
4515
4635
  ...subscribeOpts,
4516
- lastEventId
4636
+ lastEventId,
4637
+ ...epoch !== void 0 ? { epoch } : {},
4638
+ onEpoch: /* @__PURE__ */ __name((learned) => {
4639
+ this.lastSeenEpoch = learned;
4640
+ callerOnEpoch?.(learned);
4641
+ }, "onEpoch")
4517
4642
  })) {
4518
4643
  this._dispatchTurnEvent(event);
4519
4644
  yield event;
@@ -4686,6 +4811,7 @@ var DAEMON_KNOWN_EVENT_TYPE_VALUES = [
4686
4811
  // consumers silently drop this event via `asKnownDaemonEvent`
4687
4812
  // returning undefined (no protocol bump required).
4688
4813
  "followup_suggestion",
4814
+ "channel_delivery_result",
4689
4815
  "user_shell_command",
4690
4816
  "user_shell_result",
4691
4817
  "turn_complete",
@@ -4874,6 +5000,8 @@ function asKnownDaemonEvent(event) {
4874
5000
  return event.data != null && typeof event.data === "object" ? event : void 0;
4875
5001
  case "followup_suggestion":
4876
5002
  return isFollowupSuggestionData(event.data) ? event : void 0;
5003
+ case "channel_delivery_result":
5004
+ return isChannelDeliveryResultData(event.data) ? event : void 0;
4877
5005
  case "mcp_server_added":
4878
5006
  return isMcpServerAddedData(event.data) ? event : void 0;
4879
5007
  case "mcp_server_removed":
@@ -5187,6 +5315,7 @@ function reduceDaemonSessionEvent(state, rawEvent) {
5187
5315
  case PENDING_PROMPT_ADDED_EVENT:
5188
5316
  case PENDING_PROMPT_STARTED_EVENT:
5189
5317
  case PENDING_PROMPT_COMPLETED_EVENT:
5318
+ case "channel_delivery_result":
5190
5319
  return base;
5191
5320
  case "session_rewound":
5192
5321
  return {
@@ -5610,6 +5739,38 @@ function isFollowupSuggestionData(value) {
5610
5739
  return isRecord(value) && isNonEmptyString(value["sessionId"]) && isNonEmptyString(value["suggestion"]) && isNonEmptyString(value["promptId"]);
5611
5740
  }
5612
5741
  __name(isFollowupSuggestionData, "isFollowupSuggestionData");
5742
+ var CHANNEL_DELIVERY_ERROR_CODES = /* @__PURE__ */ new Set([
5743
+ "channel_worker_unavailable",
5744
+ "channel_delivery_timeout",
5745
+ "channel_delivery_invalid",
5746
+ "channel_delivery_rejected",
5747
+ "channel_delivery_queue_full",
5748
+ "channel_delivery_failed"
5749
+ ]);
5750
+ function isChannelDeliveryResultData(value) {
5751
+ if (!isRecord(value) || !isNonEmptyString(value["sessionId"]) || !isNonEmptyString(value["deliveryId"]) || value["status"] !== "delivered" && value["status"] !== "failed" && value["status"] !== "skipped" || !Object.keys(value).every(
5752
+ (key) => [
5753
+ "sessionId",
5754
+ "deliveryId",
5755
+ "source",
5756
+ "status",
5757
+ "promptId",
5758
+ "taskId",
5759
+ "firedAt",
5760
+ "code",
5761
+ "error"
5762
+ ].includes(key)
5763
+ )) {
5764
+ return false;
5765
+ }
5766
+ const correlationValid = value["source"] === "prompt" && isNonEmptyString(value["promptId"]) && value["taskId"] === void 0 && value["firedAt"] === void 0 || value["source"] === "scheduled" && isNonEmptyString(value["taskId"]) && isFiniteNumber(value["firedAt"]) && value["promptId"] === void 0;
5767
+ if (!correlationValid) return false;
5768
+ if (value["status"] === "failed") {
5769
+ return typeof value["code"] === "string" && CHANNEL_DELIVERY_ERROR_CODES.has(value["code"]) && isNonEmptyString(value["error"]);
5770
+ }
5771
+ return value["code"] === void 0 && value["error"] === void 0;
5772
+ }
5773
+ __name(isChannelDeliveryResultData, "isChannelDeliveryResultData");
5613
5774
  function isMcpServerAddedData(value) {
5614
5775
  if (!isRecord(value)) return false;
5615
5776
  if (!isNonEmptyString(value["name"])) return false;
@@ -6351,26 +6512,43 @@ function extractServerTimestamp(event) {
6351
6512
  }
6352
6513
  if (isRecord2(event.data)) {
6353
6514
  const dataMeta = event.data["_meta"];
6515
+ const update = event.data["update"];
6516
+ const updateMeta = isRecord2(update) ? update["_meta"] : void 0;
6354
6517
  if (isRecord2(dataMeta)) {
6355
6518
  const ts = dataMeta["serverTimestamp"];
6356
6519
  if (typeof ts === "number" && Number.isFinite(ts)) return ts;
6357
6520
  }
6358
- const update = event.data["update"];
6359
- if (isRecord2(update)) {
6360
- const updateMeta = update["_meta"];
6361
- if (isRecord2(updateMeta)) {
6362
- const serverTs = updateMeta["serverTimestamp"];
6363
- if (typeof serverTs === "number" && Number.isFinite(serverTs)) {
6364
- return serverTs;
6365
- }
6366
- const ts = updateMeta["timestamp"];
6367
- if (typeof ts === "number" && Number.isFinite(ts)) return ts;
6521
+ if (isRecord2(updateMeta)) {
6522
+ const serverTs = updateMeta["serverTimestamp"];
6523
+ if (typeof serverTs === "number" && Number.isFinite(serverTs)) {
6524
+ return serverTs;
6368
6525
  }
6369
6526
  }
6527
+ const timestampCandidates = [
6528
+ isRecord2(updateMeta) ? updateMeta["timestamp"] : void 0,
6529
+ isRecord2(update) ? update["timestamp"] : void 0,
6530
+ isRecord2(dataMeta) ? dataMeta["timestamp"] : void 0,
6531
+ event.data["timestamp"]
6532
+ ];
6533
+ for (const candidate of timestampCandidates) {
6534
+ const timestamp = parseTimestamp(candidate);
6535
+ if (timestamp !== void 0) return timestamp;
6536
+ }
6370
6537
  }
6371
6538
  return void 0;
6372
6539
  }
6373
6540
  __name(extractServerTimestamp, "extractServerTimestamp");
6541
+ function parseTimestamp(value) {
6542
+ if (typeof value === "number" && Number.isFinite(value)) return value;
6543
+ if (typeof value !== "string") return void 0;
6544
+ if (/^\d+$/.test(value)) {
6545
+ const numeric = Number(value);
6546
+ return Number.isFinite(numeric) ? numeric : void 0;
6547
+ }
6548
+ const parsed = Date.parse(value);
6549
+ return Number.isFinite(parsed) ? parsed : void 0;
6550
+ }
6551
+ __name(parseTimestamp, "parseTimestamp");
6374
6552
  function normalizeSessionUpdate(event, base, opts) {
6375
6553
  const update = getSessionUpdatePayload(event.data);
6376
6554
  if (!update) {
@@ -6563,7 +6741,8 @@ function normalizeToolUpdate(update, base) {
6563
6741
  const metadata = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
6564
6742
  const toolName = getString2(update, "toolName") ?? getString2(update, "name") ?? (metadata ? getString2(metadata, "toolName") : void 0) ?? (metadata ? getString2(metadata, "name") : void 0);
6565
6743
  const toolKind = getString2(update, "kind");
6566
- const title = getString2(update, "title") ?? toolName ?? toolKind;
6744
+ const explicitTitle = getString2(update, "title");
6745
+ const title = explicitTitle ?? (getString2(update, "sessionUpdate") === "tool_call" ? toolName ?? toolKind : void 0);
6567
6746
  const rawInputSource = update["rawInput"] ?? update["input"] ?? update["args"];
6568
6747
  const rawOutputSource = update["rawOutput"] ?? update["output"] ?? update["result"];
6569
6748
  const rawInput = rawInputSource !== void 0 ? redactSensitiveFields(rawInputSource) : void 0;
@@ -7692,7 +7871,8 @@ function createDaemonTranscriptState(opts = {}) {
7692
7871
  resyncRequiredCount: 0,
7693
7872
  nextOrdinal: 1,
7694
7873
  now: opts.now ?? Date.now(),
7695
- maxBlocks: opts.maxBlocks ?? DEFAULT_MAX_BLOCKS
7874
+ maxBlocks: opts.maxBlocks ?? DEFAULT_MAX_BLOCKS,
7875
+ retainSubagentBlocks: opts.retainSubagentBlocks ?? true
7696
7876
  };
7697
7877
  if (opts.onTruncation) truncationCallbacks.set(state, opts.onTruncation);
7698
7878
  return state;
@@ -7811,6 +7991,7 @@ function applyDaemonTranscriptEvent(next, event) {
7811
7991
  break;
7812
7992
  }
7813
7993
  case "assistant.text.delta":
7994
+ if (event.parentToolCallId && !next.retainSubagentBlocks) break;
7814
7995
  appendTextDelta(
7815
7996
  next,
7816
7997
  "assistant",
@@ -7826,9 +8007,14 @@ function applyDaemonTranscriptEvent(next, event) {
7826
8007
  }
7827
8008
  break;
7828
8009
  case "assistant.usage":
7829
- applyAssistantUsage(next, event);
8010
+ if (event.parentToolCallId && !next.retainSubagentBlocks) {
8011
+ applySubagentUsageToParentTool(next, event);
8012
+ } else {
8013
+ applyAssistantUsage(next, event);
8014
+ }
7830
8015
  break;
7831
8016
  case "thought.text.delta":
8017
+ if (event.parentToolCallId && !next.retainSubagentBlocks) break;
7832
8018
  appendTextDelta(
7833
8019
  next,
7834
8020
  "thought",
@@ -7838,6 +8024,10 @@ function applyDaemonTranscriptEvent(next, event) {
7838
8024
  );
7839
8025
  break;
7840
8026
  case "tool.update":
8027
+ if (event.parentToolCallId && !next.retainSubagentBlocks) {
8028
+ discardToolBlock(next, event.toolCallId);
8029
+ break;
8030
+ }
7841
8031
  upsertToolBlock(next, event);
7842
8032
  break;
7843
8033
  case "shell.output":
@@ -7993,6 +8183,35 @@ function applyAssistantUsage(state, event) {
7993
8183
  block.updatedAt = state.now;
7994
8184
  }
7995
8185
  __name(applyAssistantUsage, "applyAssistantUsage");
8186
+ function applySubagentUsageToParentTool(state, event) {
8187
+ if (!event.parentToolCallId) return;
8188
+ const block = getWritableBlockById(
8189
+ state,
8190
+ state.toolBlockByCallId[event.parentToolCallId]
8191
+ );
8192
+ if (block?.kind !== "tool") return;
8193
+ const current = isRecord2(block.rawOutput) ? block.rawOutput : void 0;
8194
+ const currentSummary = isRecord2(current?.["executionSummary"]) ? current["executionSummary"] : void 0;
8195
+ const inputTokens = finiteNumber(currentSummary?.["inputTokens"]) + event.usage.inputTokens;
8196
+ const outputTokens = finiteNumber(currentSummary?.["outputTokens"]) + event.usage.outputTokens;
8197
+ const cachedTokens = finiteNumber(currentSummary?.["cachedTokens"]) + (event.usage.cachedTokens ?? 0);
8198
+ block.rawOutput = {
8199
+ ...current ?? { type: "task_execution", status: "running" },
8200
+ executionSummary: {
8201
+ ...currentSummary ?? {},
8202
+ inputTokens,
8203
+ outputTokens,
8204
+ cachedTokens,
8205
+ totalTokens: inputTokens + outputTokens
8206
+ }
8207
+ };
8208
+ block.updatedAt = state.now;
8209
+ }
8210
+ __name(applySubagentUsageToParentTool, "applySubagentUsageToParentTool");
8211
+ function finiteNumber(value) {
8212
+ return typeof value === "number" && Number.isFinite(value) ? value : 0;
8213
+ }
8214
+ __name(finiteNumber, "finiteNumber");
7996
8215
  function clearActiveThought(state, event) {
7997
8216
  finalizeStreamingTextBlock(state, state.activeThoughtBlockId, event);
7998
8217
  state.activeThoughtBlockId = void 0;
@@ -8095,6 +8314,11 @@ function finishAssistant(state, event) {
8095
8314
  }
8096
8315
  __name(finishAssistant, "finishAssistant");
8097
8316
  function upsertToolBlock(state, event) {
8317
+ const compactTaskOutput = !state.retainSubagentBlocks && isRecord2(event.rawOutput) && event.rawOutput["type"] === "task_execution";
8318
+ let rawOutput = compactTaskExecutionOutput(
8319
+ event.rawOutput,
8320
+ state.retainSubagentBlocks
8321
+ );
8098
8322
  const existingId = state.toolBlockByCallId[event.toolCallId];
8099
8323
  if (existingId === TRIMMED_TOOL_BLOCK_ID) {
8100
8324
  if (shouldRecreateTrimmedToolBlock(event)) {
@@ -8128,10 +8352,49 @@ function upsertToolBlock(state, event) {
8128
8352
  existing.updatedAt = state.now;
8129
8353
  if (event.eventId !== void 0) existing.eventId = event.eventId;
8130
8354
  if (event.details) existing.details = event.details;
8131
- if (event.content !== void 0) existing.content = event.content;
8355
+ if (compactTaskOutput) delete existing.content;
8356
+ else if (event.content !== void 0) existing.content = event.content;
8132
8357
  if (event.locations !== void 0) existing.locations = event.locations;
8133
8358
  if (event.rawInput !== void 0) existing.rawInput = event.rawInput;
8134
- if (event.rawOutput !== void 0) existing.rawOutput = event.rawOutput;
8359
+ if (rawOutput !== void 0) {
8360
+ if (compactTaskOutput && isRecord2(rawOutput) && isRecord2(existing.rawOutput)) {
8361
+ const prevSummary = isRecord2(existing.rawOutput["executionSummary"]) ? existing.rawOutput["executionSummary"] : void 0;
8362
+ const nextSummary = isRecord2(rawOutput["executionSummary"]) ? rawOutput["executionSummary"] : void 0;
8363
+ if (prevSummary && nextSummary) {
8364
+ const inputTokens = Math.max(
8365
+ finiteNumber(prevSummary["inputTokens"]),
8366
+ finiteNumber(nextSummary["inputTokens"])
8367
+ );
8368
+ const outputTokens = Math.max(
8369
+ finiteNumber(prevSummary["outputTokens"]),
8370
+ finiteNumber(nextSummary["outputTokens"])
8371
+ );
8372
+ rawOutput = {
8373
+ ...rawOutput,
8374
+ executionSummary: {
8375
+ ...nextSummary,
8376
+ inputTokens,
8377
+ outputTokens,
8378
+ cachedTokens: Math.max(
8379
+ finiteNumber(prevSummary["cachedTokens"]),
8380
+ finiteNumber(nextSummary["cachedTokens"])
8381
+ ),
8382
+ totalTokens: Math.max(
8383
+ finiteNumber(prevSummary["totalTokens"]),
8384
+ finiteNumber(nextSummary["totalTokens"]),
8385
+ inputTokens + outputTokens
8386
+ )
8387
+ }
8388
+ };
8389
+ } else if (prevSummary) {
8390
+ rawOutput = {
8391
+ ...rawOutput,
8392
+ executionSummary: { ...prevSummary }
8393
+ };
8394
+ }
8395
+ }
8396
+ existing.rawOutput = rawOutput;
8397
+ }
8135
8398
  existing.sourceRecordIds = unionStrings(
8136
8399
  existing.sourceRecordIds,
8137
8400
  event.sourceRecordIds
@@ -8172,10 +8435,10 @@ function upsertToolBlock(state, event) {
8172
8435
  ...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
8173
8436
  ...event.sourceRecordIds ? { sourceRecordIds: [...event.sourceRecordIds] } : {},
8174
8437
  ...event.details ? { details: event.details } : {},
8175
- ...event.content !== void 0 ? { content: event.content } : {},
8438
+ ...!compactTaskOutput && event.content !== void 0 ? { content: event.content } : {},
8176
8439
  ...event.locations !== void 0 ? { locations: event.locations } : {},
8177
8440
  ...event.rawInput !== void 0 ? { rawInput: event.rawInput } : {},
8178
- ...event.rawOutput !== void 0 ? { rawOutput: event.rawOutput } : {},
8441
+ ...rawOutput !== void 0 ? { rawOutput } : {},
8179
8442
  ...event.toolName ? { toolName: event.toolName } : {},
8180
8443
  ...event.toolKind ? { toolKind: event.toolKind } : {},
8181
8444
  ...event.parentToolCallId ? { parentToolCallId: event.parentToolCallId } : {},
@@ -8196,6 +8459,38 @@ function upsertToolBlock(state, event) {
8196
8459
  clearActiveText(state, event.parentToolCallId);
8197
8460
  }
8198
8461
  __name(upsertToolBlock, "upsertToolBlock");
8462
+ function discardToolBlock(state, toolCallId) {
8463
+ const blockId = state.toolBlockByCallId[toolCallId];
8464
+ if (!blockId || blockId === TRIMMED_TOOL_BLOCK_ID) return;
8465
+ takeBlocksOwnership(state);
8466
+ state.blocks = state.blocks.filter((block) => block.id !== blockId);
8467
+ state.blockIndexById = rebuildDaemonTranscriptBlockIndex(state.blocks);
8468
+ delete state.toolBlockByCallId[toolCallId];
8469
+ delete state.toolProgress[toolCallId];
8470
+ if (state.currentToolCallId === toolCallId) {
8471
+ state.currentToolCallId = void 0;
8472
+ }
8473
+ }
8474
+ __name(discardToolBlock, "discardToolBlock");
8475
+ function compactTaskExecutionOutput(rawOutput, retainSubagentBlocks) {
8476
+ if (retainSubagentBlocks || !isRecord2(rawOutput) || rawOutput["type"] !== "task_execution") {
8477
+ return rawOutput;
8478
+ }
8479
+ const compact = { type: "task_execution" };
8480
+ for (const key of [
8481
+ "subagentName",
8482
+ "subagentColor",
8483
+ "taskDescription",
8484
+ "status",
8485
+ "terminateReason",
8486
+ "tokenCount",
8487
+ "executionSummary"
8488
+ ]) {
8489
+ if (rawOutput[key] !== void 0) compact[key] = rawOutput[key];
8490
+ }
8491
+ return compact;
8492
+ }
8493
+ __name(compactTaskExecutionOutput, "compactTaskExecutionOutput");
8199
8494
  function updateCurrentToolPointer(state, toolCallId, status) {
8200
8495
  if (status === void 0) return;
8201
8496
  if (IN_FLIGHT_TOOL_STATUSES.has(status)) {
@@ -8425,6 +8720,7 @@ function cloneTranscriptState(state, opts) {
8425
8720
  ...state,
8426
8721
  now: opts.now ?? Date.now(),
8427
8722
  maxBlocks: opts.maxBlocks ?? state.maxBlocks,
8723
+ retainSubagentBlocks: opts.retainSubagentBlocks ?? state.retainSubagentBlocks,
8428
8724
  // Lazy copy-on-write for
8429
8725
  // `blocks` + `blockIndexById`. Eager `[...state.blocks]` defeated the
8430
8726
  // `sortedBlocksCache` / `childrenIndexCache` WeakMaps — every dispatch
@@ -8894,6 +9190,7 @@ function createDaemonTranscriptStore(seed = {}) {
8894
9190
  reset(nextSeed = {}) {
8895
9191
  state = createState({
8896
9192
  maxBlocks: nextSeed.maxBlocks ?? state.maxBlocks,
9193
+ retainSubagentBlocks: nextSeed.retainSubagentBlocks ?? state.retainSubagentBlocks,
8897
9194
  ...nextSeed
8898
9195
  });
8899
9196
  scheduleNotify();
@@ -9003,7 +9300,7 @@ function daemonUiEventToTerminalText(event) {
9003
9300
  case "tool.update":
9004
9301
  return terminalLine(
9005
9302
  `tool ${event.status}`,
9006
- `${event.title}${event.details ? ` ${event.details}` : ""}`,
9303
+ `${event.title ?? event.toolName ?? event.toolKind ?? "Tool"}${event.details ? ` ${event.details}` : ""}`,
9007
9304
  "38;5;75"
9008
9305
  );
9009
9306
  case "shell.output":