@qwen-code/qwen-code 0.19.12 → 0.20.0-nightly.20260721.cda0e0348

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 (280) hide show
  1. package/bundled/qc-helper/docs/configuration/settings.md +1 -1
  2. package/bundled/qc-helper/docs/features/commands.md +54 -0
  3. package/bundled/qc-helper/docs/integration-github-action.md +1 -1
  4. package/bundled/qc-helper/docs/qwen-serve.md +44 -6
  5. package/bundled/review/DESIGN.md +2 -2
  6. package/bundled/review/SKILL.md +13 -9
  7. package/chunks/{MaxSizedBox-QOXLJGAF.js → MaxSizedBox-EE76OHAP.js} +30 -27
  8. package/chunks/{StandaloneSessionPicker-FLV6CGYJ.js → StandaloneSessionPicker-WZH4PC3K.js} +50 -45
  9. package/chunks/{acpAgent-OB2CTF3P.js → acpAgent-2ATF4LMP.js} +437 -156
  10. package/chunks/{agent-CKSI7BTR.js → agent-KTOOFWMV.js} +22 -22
  11. package/chunks/{agent-headless-U36LIYTU.js → agent-headless-WVJCQ27D.js} +22 -22
  12. package/chunks/{anthropicContentGenerator-ZZRGFEES.js → anthropicContentGenerator-W4JLNYWQ.js} +6 -5
  13. package/chunks/{artifact-tool-PHO5XEGZ.js → artifact-tool-WBCAMD3O.js} +2 -2
  14. package/chunks/{askUserQuestion-CEPBT47X.js → askUserQuestion-6DZC4UV5.js} +2 -2
  15. package/chunks/{bridge-AIKTINJG.js → bridge-T4TLAZSJ.js} +25 -25
  16. package/chunks/build-SSCNEHZZ.js +62 -0
  17. package/chunks/{ca-2SL2BXTK.js → ca-ISKASTR5.js} +606 -200
  18. package/chunks/{channel-worker-group-NEUVTPB2.js → channel-worker-group-QZV2SP5U.js} +4 -4
  19. package/chunks/{channel-worker-manager-7CQVOVWV.js → channel-worker-manager-3GMAU45H.js} +4 -4
  20. package/chunks/{channel-worker-supervisor-3BU2KNCZ.js → channel-worker-supervisor-QCXSXCRY.js} +3 -3
  21. package/chunks/{chunk-6ETOSWAO.js → chunk-246TW4IX.js} +3 -3
  22. package/chunks/{chunk-2CCDMJM7.js → chunk-25Y6JSH2.js} +3 -3
  23. package/chunks/{chunk-XSEWNUMZ.js → chunk-2CWOJ2FA.js} +8 -8
  24. package/chunks/{chunk-UZC5VPOJ.js → chunk-2GFRA3MN.js} +3 -3
  25. package/chunks/chunk-2GOPPEHK.js +442 -0
  26. package/chunks/{chunk-MRE77ST5.js → chunk-2ITGJJE2.js} +69 -2216
  27. package/chunks/{chunk-BABX5XRO.js → chunk-2LI23QA6.js} +1 -1
  28. package/chunks/{chunk-EFAXBOQO.js → chunk-32F7BZSK.js} +7 -7
  29. package/chunks/chunk-43T5WDQ7.js +127 -0
  30. package/chunks/{chunk-DJ4VHAFJ.js → chunk-4CWPMWCD.js} +7 -3
  31. package/chunks/{chunk-GMUPIMHF.js → chunk-4RA7PWIY.js} +3 -3
  32. package/chunks/{chunk-6IITZE7O.js → chunk-5JX5EWR5.js} +7 -7
  33. package/chunks/{chunk-OBSLEYCD.js → chunk-5PZ6R37W.js} +29 -2
  34. package/chunks/{chunk-HTHUX2T5.js → chunk-5QWWOFGG.js} +0 -1
  35. package/chunks/{chunk-3DJY4IFO.js → chunk-5SCI6E3E.js} +1 -1
  36. package/chunks/{chunk-GSPWDTYY.js → chunk-5WG2K5RH.js} +53 -16
  37. package/chunks/{chunk-NPMVLWYL.js → chunk-5YVZ2XLV.js} +6 -6
  38. package/chunks/{chunk-TKASNYDS.js → chunk-6DHWO5ZF.js} +3 -3
  39. package/chunks/{chunk-4CHDYDG3.js → chunk-6EFTQYW7.js} +1 -1
  40. package/chunks/{chunk-RKUMFUFM.js → chunk-6MC5ASQK.js} +4 -4
  41. package/chunks/{chunk-HZ4M2UQD.js → chunk-6RVJRVQR.js} +1 -1
  42. package/chunks/{chunk-W6CQPLWM.js → chunk-6ZBPS62S.js} +1 -1
  43. package/chunks/chunk-7KGXAXF7.js +114 -0
  44. package/chunks/{chunk-PK7COE5O.js → chunk-ABIL4ZQU.js} +1 -1
  45. package/chunks/{chunk-OEHCAWUA.js → chunk-ACW3VNUE.js} +2 -2
  46. package/chunks/{chunk-APOFULHK.js → chunk-AWVS63WA.js} +7 -6
  47. package/chunks/{chunk-KGWA7XYL.js → chunk-AY3CSB6F.js} +6 -226
  48. package/chunks/{chunk-XAAEDML2.js → chunk-AYCDXHZB.js} +1 -1
  49. package/chunks/{chunk-42VIHAYT.js → chunk-B452RETY.js} +1 -1
  50. package/chunks/{chunk-VAJS2E2D.js → chunk-BDBMYST4.js} +1 -1
  51. package/chunks/{chunk-5N7M4XYN.js → chunk-BUKOHGBE.js} +5 -5
  52. package/chunks/{chunk-F2RR4HO2.js → chunk-BVLROR2T.js} +1 -1
  53. package/chunks/{chunk-WIYV7CSF.js → chunk-BWK3FX3K.js} +3 -3
  54. package/chunks/{chunk-UE5TZ55T.js → chunk-C27BYUX6.js} +29 -2
  55. package/chunks/{chunk-KRMARA3A.js → chunk-CG2HPAVD.js} +29 -13
  56. package/chunks/{chunk-UOA2IHRI.js → chunk-CPCVCKKF.js} +1 -1
  57. package/chunks/{chunk-HD6EGS5K.js → chunk-CUJX3F4X.js} +31 -6
  58. package/chunks/{chunk-4RPARQ5D.js → chunk-D2VIDMVM.js} +2 -2
  59. package/chunks/{chunk-PUKUUASO.js → chunk-DMRO4GU2.js} +1 -1
  60. package/chunks/{chunk-64GC5EMF.js → chunk-DZZIOIVF.js} +1 -1
  61. package/chunks/{chunk-FUSMC3SZ.js → chunk-E5QFCC4X.js} +13 -8
  62. package/chunks/{chunk-LKR7QQ63.js → chunk-EAUYY7SS.js} +3 -3
  63. package/chunks/{chunk-NE6HHLL3.js → chunk-EDMGFJ3E.js} +2 -2
  64. package/chunks/{chunk-J2MKYJKZ.js → chunk-EIAK6Q2B.js} +2 -2
  65. package/chunks/{chunk-WEPXQKGP.js → chunk-EZVDJFZ7.js} +1 -1
  66. package/chunks/{chunk-NALRQ3SG.js → chunk-FCUUJKZF.js} +394 -128
  67. package/chunks/{chunk-4XCVGEEX.js → chunk-FSL5W5TI.js} +3 -3
  68. package/chunks/{chunk-CHPQFLW6.js → chunk-FYA3Y5JR.js} +5 -5
  69. package/chunks/{chunk-V4PCIS25.js → chunk-FZVSFBNW.js} +69 -7
  70. package/chunks/{chunk-4MPYGENG.js → chunk-G45NOBV7.js} +6 -6
  71. package/chunks/{chunk-OSSDHJDU.js → chunk-G45X5TRN.js} +1 -1
  72. package/chunks/{chunk-3B6PSWHE.js → chunk-GH7OEOYU.js} +4 -4
  73. package/chunks/{chunk-KANTXY7B.js → chunk-GKY2OJ7R.js} +2 -2
  74. package/chunks/chunk-GMGDLUC7.js +37 -0
  75. package/chunks/{chunk-2476XGOU.js → chunk-GPILFVPY.js} +1 -1
  76. package/chunks/{chunk-EISVEV45.js → chunk-H24SOJIQ.js} +2 -2
  77. package/chunks/{chunk-J6NT5YTN.js → chunk-H2XVO6NE.js} +1 -289
  78. package/chunks/{chunk-QIFTJDBY.js → chunk-IM2A6YO3.js} +1 -1
  79. package/chunks/{chunk-R3EDIMYZ.js → chunk-IYZENXFW.js} +1 -1
  80. package/chunks/{chunk-LPHGXXZX.js → chunk-JD3MKVKL.js} +1 -1
  81. package/chunks/{chunk-NUHSLBJZ.js → chunk-JNWZQ27S.js} +15 -9
  82. package/chunks/{chunk-ETN2G32U.js → chunk-JPRLCXAO.js} +4 -4
  83. package/chunks/{chunk-WHQNBBWW.js → chunk-JQMBPGOU.js} +2 -2
  84. package/chunks/{chunk-5QSVANRT.js → chunk-JR6UJ24K.js} +2 -2
  85. package/chunks/{chunk-VLHQMOZK.js → chunk-JRW46GQX.js} +3 -3
  86. package/chunks/{chunk-DUR7BZYK.js → chunk-KRI4VCHX.js} +53 -28
  87. package/chunks/{chunk-PR5XQ73G.js → chunk-KTNIZG2C.js} +2 -2
  88. package/chunks/{chunk-QSG4ZFG4.js → chunk-KTUQMDEP.js} +1 -1
  89. package/chunks/{chunk-HVGJWOR6.js → chunk-L4YSPHR4.js} +2 -2
  90. package/chunks/{chunk-BEZPRKD3.js → chunk-LC5CAVMS.js} +160 -2
  91. package/chunks/{chunk-67Q33DQY.js → chunk-LLDGOZMJ.js} +4 -4
  92. package/chunks/{chunk-UCTCDLDS.js → chunk-LWQ4IAOJ.js} +136 -4
  93. package/chunks/{chunk-GEHSF7MS.js → chunk-NEEB7UEN.js} +2545 -1974
  94. package/chunks/{chunk-GCY7QTCE.js → chunk-NO6XTCYT.js} +1822 -424
  95. package/chunks/{chunk-JCJPZMJV.js → chunk-OOCI5VVU.js} +1 -1
  96. package/chunks/{chunk-XSPFQQRE.js → chunk-OONJNQ42.js} +3 -3
  97. package/chunks/{chunk-ANRANWVE.js → chunk-OP4MOGXF.js} +1 -1
  98. package/chunks/{chunk-GW7BONBU.js → chunk-OV2KB55J.js} +5 -5
  99. package/chunks/{chunk-CPU6I5YV.js → chunk-P64HXIC5.js} +115 -32
  100. package/chunks/{chunk-SGPFJMRP.js → chunk-PBATSWUQ.js} +1 -1
  101. package/chunks/{chunk-GXFYV7MP.js → chunk-PFKNXN67.js} +1106 -592
  102. package/chunks/{chunk-KNGZ5EYL.js → chunk-PYNCSQSI.js} +198 -120
  103. package/chunks/{chunk-I7RRHHYG.js → chunk-QKTHJXCS.js} +1 -1
  104. package/chunks/chunk-QKYTTBYW.js +624 -0
  105. package/chunks/{chunk-76BFY7AF.js → chunk-QTERJVPZ.js} +1 -6
  106. package/chunks/{chunk-W4UN42YP.js → chunk-R3VZNHRX.js} +85 -21
  107. package/chunks/chunk-R5N7NF5D.js +1187 -0
  108. package/chunks/{chunk-ZSDFNE6Y.js → chunk-RF34V75B.js} +3 -3
  109. package/chunks/{chunk-HCCR43AY.js → chunk-RFIAR4YL.js} +1 -1
  110. package/chunks/chunk-RS7MT2QG.js +305 -0
  111. package/chunks/{chunk-BKNPMEN6.js → chunk-RVLZCXEE.js} +162 -17
  112. package/chunks/chunk-SV5PQVQE.js +71 -0
  113. package/chunks/{chunk-3ESL7JXA.js → chunk-U4VGYZN7.js} +3 -3
  114. package/chunks/{chunk-4CA4WUMS.js → chunk-UEY4AYUL.js} +2 -2
  115. package/chunks/{chunk-ZGT623SG.js → chunk-USTF7LPI.js} +12 -12
  116. package/chunks/chunk-V7RNNPGC.js +44 -0
  117. package/chunks/{chunk-VEFR4XJQ.js → chunk-W3BKN3LO.js} +1 -1
  118. package/chunks/{chunk-4SJJT466.js → chunk-WQQDJE2P.js} +94 -177
  119. package/chunks/{chunk-KMJOMWHE.js → chunk-WRRF6TEQ.js} +1 -1
  120. package/chunks/{chunk-GLH2NTPB.js → chunk-XCHUDLER.js} +1 -1
  121. package/chunks/{chunk-7SX6WZNO.js → chunk-XVVH63JG.js} +3 -3
  122. package/chunks/{chunk-N47VAEAJ.js → chunk-XZOBDSDG.js} +2379 -1291
  123. package/chunks/chunk-YGIUIIIF.js +125 -0
  124. package/chunks/{chunk-335ECZTA.js → chunk-ZEOZL37W.js} +1 -1
  125. package/chunks/{computer-use-4PUGCUQK.js → computer-use-M6MGRJF2.js} +22 -22
  126. package/chunks/{config-utils-6PJUXHLI.js → config-utils-MOGE4EVB.js} +3 -3
  127. package/chunks/{contextCommand-C57KTWFV.js → contextCommand-HTRJJYNE.js} +25 -26
  128. package/chunks/{create-sub-session-5Q42XR6I.js → create-sub-session-MB35IHCR.js} +22 -22
  129. package/chunks/{create-sub-session-DIJOV6HV.js → create-sub-session-P26FE5GG.js} +2 -2
  130. package/chunks/{cron-create-X462ERYA.js → cron-create-JWFHBDRQ.js} +4 -4
  131. package/chunks/{cron-delete-SL5UJUM3.js → cron-delete-GDX4E26G.js} +4 -4
  132. package/chunks/{cron-list-3MD6SVXI.js → cron-list-USMAIWPT.js} +4 -4
  133. package/chunks/{daemon-ZW6LHOXT.js → daemon-KLPTQIE4.js} +287 -143
  134. package/chunks/{daemon-status-provider-YPV3UXHT.js → daemon-status-provider-67EKK6S3.js} +29 -29
  135. package/chunks/{dist-NUXRQHC5.js → dist-OAV7LJGJ.js} +1 -1
  136. package/chunks/{dist-XLE6ODMB.js → dist-OMW6WDEO.js} +1 -1
  137. package/chunks/{dist-J2H4KTLB.js → dist-PJLG2XYX.js} +1 -1
  138. package/chunks/{dist-IEQSDXS7.js → dist-UIFWIFRO.js} +2 -2
  139. package/chunks/{dist-IGZMVS5R.js → dist-VGJTZL4E.js} +33 -22
  140. package/chunks/{dist-3DQNQJ6H.js → dist-XBJVSWS2.js} +1 -1
  141. package/chunks/{earlyInputCapture-5VDWSYAM.js → earlyInputCapture-7QJX25AC.js} +23 -23
  142. package/chunks/{edit-GORZTX2U.js → edit-BTPQWGAA.js} +23 -23
  143. package/chunks/{enter-worktree-LJB2AW4L.js → enter-worktree-N3SEYKOO.js} +22 -22
  144. package/chunks/{enterPlanMode-LIIPP37T.js → enterPlanMode-TN2JV5MY.js} +28 -23
  145. package/chunks/{environment-HQ2UHJ35.js → environment-HP6RK262.js} +24 -24
  146. package/chunks/{errors-6JD5VMVQ.js → errors-VHGRDDOQ.js} +24 -24
  147. package/chunks/{exit-worktree-IEP2WHOV.js → exit-worktree-FI3SQY3U.js} +22 -22
  148. package/chunks/{exitPlanMode-U5Z6XBLO.js → exitPlanMode-NZWRVIIY.js} +22 -22
  149. package/chunks/{fast-path-HFKNMP23.js → fast-path-EGP7AXNR.js} +3 -2
  150. package/chunks/{gemini-C2SCJH3N.js → gemini-AN5YMD5O.js} +70 -68
  151. package/chunks/{geminiContentGenerator-ADZTXEKV.js → geminiContentGenerator-ABTMU4FE.js} +4 -4
  152. package/chunks/{glob-GOAPGD6G.js → glob-5YABOPJB.js} +22 -22
  153. package/chunks/{grep-HZLSTX7D.js → grep-U67FKUJT.js} +22 -22
  154. package/chunks/{handleAutoUpdate-UF74WGFE.js → handleAutoUpdate-OOKBP5VD.js} +27 -28
  155. package/chunks/{i18n-FMXIYUOC.js → i18n-GMQV324P.js} +23 -23
  156. package/chunks/{initializer-ERDBM3DU.js → initializer-NWALZGQ5.js} +28 -28
  157. package/chunks/{installationInfo-LROMXYLX.js → installationInfo-Y3M433E7.js} +25 -23
  158. package/chunks/{keychain-token-storage-K23CFKGN.js → keychain-token-storage-DWRJMNH3.js} +2 -2
  159. package/chunks/{list-6JPJROU5.js → list-CQDDWHTS.js} +30 -30
  160. package/chunks/{loadedSettingsAdapter-QCWYUBBF.js → loadedSettingsAdapter-I5KG37EI.js} +27 -27
  161. package/chunks/{loop-wakeup-6H7OENTB.js → loop-wakeup-5GLTUBHA.js} +5 -5
  162. package/chunks/{ls-APTSOOS5.js → ls-FHBY3Y7I.js} +4 -4
  163. package/chunks/{lsp-HPACPJAN.js → lsp-B6VMEW6Y.js} +2 -2
  164. package/chunks/{mcp-3P3KWYWO.js → mcp-24HHCBSP.js} +27 -27
  165. package/chunks/{monitor-LMYKCF6R.js → monitor-Z7NZNNRC.js} +22 -22
  166. package/chunks/nonInteractiveCli-GVF2XDJT.js +126 -0
  167. package/chunks/{notebook-edit-IBEOVZ6A.js → notebook-edit-GFOYAQAZ.js} +23 -23
  168. package/chunks/{openaiContentGenerator-42PZKET5.js → openaiContentGenerator-XAAYV6WR.js} +11 -11
  169. package/chunks/{pidfile-VTBDIGOH.js → pidfile-ILI37KRQ.js} +23 -23
  170. package/chunks/{processUtils-L7ZKOGDG.js → processUtils-LIPJMLVZ.js} +2 -2
  171. package/chunks/{qwenContentGenerator-VR2CNFGI.js → qwenContentGenerator-DLJ3KKGZ.js} +24 -24
  172. package/chunks/{qwenOAuth2-6LS2T3Q6.js → qwenOAuth2-J47FU5PW.js} +11 -11
  173. package/chunks/react-SG7JAQSZ.js +8 -0
  174. package/chunks/{read-file-VSKOE22I.js → read-file-LCQ2KNNP.js} +8 -8
  175. package/chunks/{read-mcp-resource-C6NT52T6.js → read-mcp-resource-AKCL7I43.js} +2 -2
  176. package/chunks/{record-artifact-ENCU7QCL.js → record-artifact-PEUB7727.js} +2 -2
  177. package/chunks/resumeHistoryUtils-PSCSAKA6.js +78 -0
  178. package/chunks/{ripGrep-5V5FLW2A.js → ripGrep-Y2XW4EFC.js} +22 -22
  179. package/chunks/{run-qwen-serve-LSOPP4R2.js → run-qwen-serve-DQ5ZIR36.js} +1459 -148
  180. package/chunks/{runtime-LT7R4CS5.js → runtime-6MQFF2A6.js} +33 -31
  181. package/chunks/{scheduler-YOWQ7KZP.js → scheduler-K4S7NY3G.js} +22 -22
  182. package/chunks/{send-message-5GZ4FX2V.js → send-message-3RHE7HSM.js} +3 -3
  183. package/chunks/{serve-VWLBXKGK.js → serve-JFAAPC5J.js} +27 -27
  184. package/chunks/{server-3RW3FYOH.js → server-QB6CHRZN.js} +866 -271
  185. package/chunks/{session-ZONXFOBQ.js → session-FKPVXAAB.js} +79 -163
  186. package/chunks/{settings-JC3VC53L.js → settings-CADELKSU.js} +26 -26
  187. package/chunks/{shell-2NGEMAVM.js → shell-EON6WVVH.js} +22 -22
  188. package/chunks/{skill-3U2T6H3E.js → skill-FKSYXJ5U.js} +10 -10
  189. package/chunks/{spawnChannel-QEAUPARQ.js → spawnChannel-VM5IHLJO.js} +24 -24
  190. package/chunks/{src-75ZPXO7B.js → src-Q4XB6SVD.js} +66 -22
  191. package/chunks/{standalone-update-UUJWJWYY.js → standalone-update-KGZHPBMA.js} +24 -24
  192. package/chunks/{startInteractiveUI-V7XISPQ6.js → startInteractiveUI-EYDJIIIZ.js} +5484 -2045
  193. package/chunks/{syntheticOutput-ULOVVLY4.js → syntheticOutput-FG5PQKIR.js} +3 -3
  194. package/chunks/{task-create-DUE2PMNI.js → task-create-HX32YXO7.js} +7 -7
  195. package/chunks/{task-list-WVPNX7BZ.js → task-list-QWSY4ZIU.js} +5 -5
  196. package/chunks/{task-stop-CPEQWOT6.js → task-stop-GWC6UWAL.js} +2 -2
  197. package/chunks/{task-update-HY2LNFFB.js → task-update-NCTAB73Q.js} +7 -7
  198. package/chunks/{team-create-R6AXDYPG.js → team-create-CYP3YKYT.js} +22 -22
  199. package/chunks/{team-delete-JJV6IUOA.js → team-delete-KK37HTOG.js} +5 -5
  200. package/chunks/{team-plan-approval-O2ZPPT64.js → team-plan-approval-5LXIFKNV.js} +22 -22
  201. package/chunks/{theme-manager-YIX2IC2D.js → theme-manager-QOUMDWMP.js} +23 -23
  202. package/chunks/{todoWrite-JHHIDOIV.js → todoWrite-ERCAMLFS.js} +4 -4
  203. package/chunks/{tool-search-5IE2VO7X.js → tool-search-Q27QHQU3.js} +9 -9
  204. package/chunks/{total-session-admission-K6APQYEF.js → total-session-admission-HWVCZ2WR.js} +25 -25
  205. package/chunks/{trustedFolders-GPSSPVBF.js → trustedFolders-C6664IQC.js} +23 -23
  206. package/chunks/{update-relaunch-4BVAPX6Y.js → update-relaunch-QC3E4FZW.js} +9 -9
  207. package/chunks/{updateCheck-AHTHWLAM.js → updateCheck-MVUKJMBX.js} +33 -26
  208. package/chunks/useAutoAcceptIndicator-J234IFIS.js +80 -0
  209. package/chunks/{validateNonInterActiveAuth-UKAPCWDM.js → validateNonInterActiveAuth-YPPEKX4N.js} +61 -63
  210. package/chunks/{version-EXGWKKQE.js → version-5IXFQ4PT.js} +1 -1
  211. package/chunks/{web-fetch-ZDNE6FF2.js → web-fetch-L62NQVKN.js} +10 -10
  212. package/chunks/{workflow-G7U6OQWS.js → workflow-6MHBBFQU.js} +23 -23
  213. package/chunks/{workspace-providers-status-W6CEA6YM.js → workspace-providers-status-ZTW2B5QU.js} +30 -30
  214. package/chunks/{workspace-registration-store-OGBMWCLC.js → workspace-registration-store-P6QHCSMU.js} +7 -1
  215. package/chunks/{workspace-registry-ZUWQM44P.js → workspace-registry-R54M5O3W.js} +25 -25
  216. package/chunks/{workspace-service-UXX5P7GU.js → workspace-service-WYLRGM4A.js} +32 -32
  217. package/chunks/{workspace-skills-status-635B5R7N.js → workspace-skills-status-NN5QFU3A.js} +28 -28
  218. package/chunks/{write-file-DR3HN7IH.js → write-file-EAT3CHUK.js} +23 -23
  219. package/cli.js +11 -11
  220. package/locales/ca.js +763 -201
  221. package/package.json +3 -3
  222. package/web-shell/assets/{arc-_dVIKMdB.js → arc-B0iTWRo2.js} +1 -1
  223. package/web-shell/assets/{architectureDiagram-3BPJPVTR-MuN3nKpL.js → architectureDiagram-3BPJPVTR-DSQP4-9D.js} +1 -1
  224. package/web-shell/assets/{blockDiagram-GPEHLZMM-BtmvJjzx.js → blockDiagram-GPEHLZMM-BNPVXVT3.js} +1 -1
  225. package/web-shell/assets/{c4Diagram-AAUBKEIU-Dvi58_BU.js → c4Diagram-AAUBKEIU-DEHfJFiD.js} +1 -1
  226. package/web-shell/assets/channel-tVz-qNSq.js +1 -0
  227. package/web-shell/assets/{chunk-2J33WTMH-YqxOVhS1.js → chunk-2J33WTMH-VZ0uL1p9.js} +1 -1
  228. package/web-shell/assets/{chunk-4BX2VUAB-DoBgbC9z.js → chunk-4BX2VUAB-D5TKmvwG.js} +1 -1
  229. package/web-shell/assets/{chunk-55IACEB6-3NEQrBAr.js → chunk-55IACEB6-BDW1Lcq-.js} +1 -1
  230. package/web-shell/assets/{chunk-727SXJPM-DrCZQxp0.js → chunk-727SXJPM-Cj4h85iM.js} +1 -1
  231. package/web-shell/assets/{chunk-AQP2D5EJ-m_g3zjgv.js → chunk-AQP2D5EJ-5LeqiOhZ.js} +1 -1
  232. package/web-shell/assets/{chunk-FMBD7UC4-D1_crABJ.js → chunk-FMBD7UC4-BaTgsco7.js} +1 -1
  233. package/web-shell/assets/{chunk-ND2GUHAM-BdhgVtBx.js → chunk-ND2GUHAM-t3uGlIUk.js} +1 -1
  234. package/web-shell/assets/{chunk-QZHKN3VN-BlmThhm-.js → chunk-QZHKN3VN-rOnNXL2Q.js} +1 -1
  235. package/web-shell/assets/classDiagram-4FO5ZUOK-CWuaBxYV.js +1 -0
  236. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CWuaBxYV.js +1 -0
  237. package/web-shell/assets/{cose-bilkent-S5V4N54A-Cbjm_00Z.js → cose-bilkent-S5V4N54A-CcqXykgA.js} +1 -1
  238. package/web-shell/assets/{dagre-BM42HDAG-C39QNVgC.js → dagre-BM42HDAG-Dkjrchoy.js} +1 -1
  239. package/web-shell/assets/{diagram-2AECGRRQ-DNXSAixC.js → diagram-2AECGRRQ-B6lcra9M.js} +1 -1
  240. package/web-shell/assets/{diagram-5GNKFQAL-BCbGUPEA.js → diagram-5GNKFQAL-bAIzq3PT.js} +1 -1
  241. package/web-shell/assets/{diagram-KO2AKTUF-1eujKSDC.js → diagram-KO2AKTUF-G9MAZDNW.js} +1 -1
  242. package/web-shell/assets/{diagram-LMA3HP47-DUMKXgql.js → diagram-LMA3HP47-DVLF1uWZ.js} +1 -1
  243. package/web-shell/assets/{diagram-OG6HWLK6-BFktU3_u.js → diagram-OG6HWLK6-Cf7y20Tc.js} +1 -1
  244. package/web-shell/assets/{erDiagram-TEJ5UH35-BvJC7DLk.js → erDiagram-TEJ5UH35-C7ETZB3o.js} +1 -1
  245. package/web-shell/assets/{flowDiagram-I6XJVG4X-Cgu3PlOt.js → flowDiagram-I6XJVG4X-Cl2xgL6J.js} +1 -1
  246. package/web-shell/assets/{ganttDiagram-6RSMTGT7-DLNXN5Xh.js → ganttDiagram-6RSMTGT7-BgjbMs3q.js} +1 -1
  247. package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BQFRDv6R.js → gitGraphDiagram-PVQCEYII-JVX34Omm.js} +1 -1
  248. package/web-shell/assets/index-48bIcdqF.js +1197 -0
  249. package/web-shell/assets/{index-CdC3pjP3.js → index-BG7Zc4f_.js} +1 -1
  250. package/web-shell/assets/index-BI-JAO07.css +5 -0
  251. package/web-shell/assets/{infoDiagram-5YYISTIA-DT2mOSvp.js → infoDiagram-5YYISTIA-3NYyMeZU.js} +1 -1
  252. package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-9fy_K4bd.js → ishikawaDiagram-YF4QCWOH-C03VCu-U.js} +1 -1
  253. package/web-shell/assets/{journeyDiagram-JHISSGLW-CoGSEuhE.js → journeyDiagram-JHISSGLW-C9PuBRZW.js} +1 -1
  254. package/web-shell/assets/{kanban-definition-UN3LZRKU-BP9hHYIj.js → kanban-definition-UN3LZRKU-C3LvioWR.js} +1 -1
  255. package/web-shell/assets/{linear-uIroDsmp.js → linear-Du6Yw8N_.js} +1 -1
  256. package/web-shell/assets/{mermaid.core-BUwoStsA.js → mermaid.core-BXY5D2-X.js} +5 -5
  257. package/web-shell/assets/{mindmap-definition-RKZ34NQL-DZB-FWim.js → mindmap-definition-RKZ34NQL-2UrHLaDp.js} +1 -1
  258. package/web-shell/assets/{pieDiagram-4H26LBE5-YPptloKl.js → pieDiagram-4H26LBE5-dC03ml45.js} +1 -1
  259. package/web-shell/assets/{quadrantDiagram-W4KKPZXB-dgk3DSzm.js → quadrantDiagram-W4KKPZXB-CD6jARrp.js} +1 -1
  260. package/web-shell/assets/{requirementDiagram-4Y6WPE33-BH2En2i9.js → requirementDiagram-4Y6WPE33-BrK8aXfv.js} +1 -1
  261. package/web-shell/assets/{sankeyDiagram-5OEKKPKP-BB98feeI.js → sankeyDiagram-5OEKKPKP-B5Vitki_.js} +1 -1
  262. package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CunAIGh8.js → sequenceDiagram-3UESZ5HK-CBy2t6Bo.js} +1 -1
  263. package/web-shell/assets/{stateDiagram-AJRCARHV-DTJs_-I2.js → stateDiagram-AJRCARHV-Enrka6T2.js} +1 -1
  264. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DUtYfXpW.js +1 -0
  265. package/web-shell/assets/{timeline-definition-PNZ67QCA-Cd4AN7O0.js → timeline-definition-PNZ67QCA-CwFq78ss.js} +1 -1
  266. package/web-shell/assets/{vennDiagram-CIIHVFJN-xIG-rUU9.js → vennDiagram-CIIHVFJN-BkOidM0g.js} +1 -1
  267. package/web-shell/assets/{wardley-L42UT6IY-D1UyjIcG.js → wardley-L42UT6IY-D_j13hQW.js} +1 -1
  268. package/web-shell/assets/{wardleyDiagram-YWT4CUSO-BVM0Mb99.js → wardleyDiagram-YWT4CUSO-7EveB1w6.js} +1 -1
  269. package/web-shell/assets/{xychartDiagram-2RQKCTM6-BX31JDSz.js → xychartDiagram-2RQKCTM6-DRkBhMXr.js} +1 -1
  270. package/web-shell/index.html +2 -2
  271. package/chunks/chunk-EDFD7VOX.js +0 -368
  272. package/chunks/chunk-GFYFLDEG.js +0 -709
  273. package/chunks/chunk-LUJQUNKY.js +0 -3288
  274. package/chunks/nonInteractiveCli-YURFHZV5.js +0 -129
  275. package/web-shell/assets/channel-Bi5TehaT.js +0 -1
  276. package/web-shell/assets/classDiagram-4FO5ZUOK-BKhhRdd1.js +0 -1
  277. package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BKhhRdd1.js +0 -1
  278. package/web-shell/assets/index-C_ouplMQ.js +0 -1187
  279. package/web-shell/assets/index-XGDFJE-X.css +0 -5
  280. package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DrfFMYta.js +0 -1
@@ -339,6 +339,7 @@ var RestSseTransport = class {
339
339
  baseUrl;
340
340
  token;
341
341
  _fetch;
342
+ activeSseRequests = /* @__PURE__ */ new Set();
342
343
  _disposed = false;
343
344
  type = "rest";
344
345
  supportsReplay = true;
@@ -371,75 +372,86 @@ var RestSseTransport = class {
371
372
  if (this._disposed) {
372
373
  throw new DaemonTransportClosedError();
373
374
  }
374
- const headers = { Accept: "text/event-stream" };
375
- if (this.token) {
376
- headers["Authorization"] = `Bearer ${this.token}`;
377
- }
378
- if (opts.lastEventId !== void 0) {
379
- headers["Last-Event-ID"] = String(opts.lastEventId);
380
- }
381
- const connectCtrl = new AbortController();
382
- let connectTimer;
383
- const connectTimeoutMs = opts.connectTimeoutMs;
384
- if (connectTimeoutMs && Number.isFinite(connectTimeoutMs)) {
385
- connectTimer = setTimeout(
386
- () => connectCtrl.abort(
387
- new DOMException("Initial connect timed out", "TimeoutError")
388
- ),
389
- connectTimeoutMs
390
- );
391
- if (typeof connectTimer === "object" && connectTimer && "unref" in connectTimer) {
392
- connectTimer.unref();
393
- }
394
- }
395
- const fetchSignal = opts.signal ? composeAbortSignals([opts.signal, connectCtrl.signal]) : connectCtrl.signal;
396
- let url = `${this.baseUrl}/session/${encodeURIComponent(sessionId)}/events`;
397
- if (opts.maxQueued !== void 0) {
398
- url += `?maxQueued=${encodeURIComponent(String(opts.maxQueued))}`;
399
- }
400
- let res;
375
+ const requestCtrl = new AbortController();
376
+ this.activeSseRequests.add(requestCtrl);
401
377
  try {
402
- res = await this._fetch(url, { headers, signal: fetchSignal });
403
- } finally {
404
- if (connectTimer !== void 0) clearTimeout(connectTimer);
405
- }
406
- if (!res.ok) {
407
- let body;
378
+ const headers = { Accept: "text/event-stream" };
379
+ if (this.token) {
380
+ headers["Authorization"] = `Bearer ${this.token}`;
381
+ }
382
+ if (opts.lastEventId !== void 0) {
383
+ headers["Last-Event-ID"] = String(opts.lastEventId);
384
+ }
385
+ const fetchSignal = opts.signal ? composeAbortSignals([opts.signal, requestCtrl.signal]) : requestCtrl.signal;
386
+ let url = `${this.baseUrl}/session/${encodeURIComponent(sessionId)}/events`;
387
+ if (opts.maxQueued !== void 0) {
388
+ url += `?maxQueued=${encodeURIComponent(String(opts.maxQueued))}`;
389
+ }
390
+ let connectTimer;
391
+ const connectTimeoutMs = opts.connectTimeoutMs;
392
+ if (connectTimeoutMs && Number.isFinite(connectTimeoutMs)) {
393
+ connectTimer = setTimeout(
394
+ () => requestCtrl.abort(
395
+ new DOMException("Initial connect timed out", "TimeoutError")
396
+ ),
397
+ connectTimeoutMs
398
+ );
399
+ if (typeof connectTimer === "object" && connectTimer && "unref" in connectTimer) {
400
+ connectTimer.unref();
401
+ }
402
+ }
403
+ let res;
408
404
  try {
409
- const text = await res.text();
405
+ res = await this._fetch(url, { headers, signal: fetchSignal });
406
+ } finally {
407
+ if (connectTimer !== void 0) clearTimeout(connectTimer);
408
+ }
409
+ if (!res.ok) {
410
+ let body;
410
411
  try {
411
- body = JSON.parse(text);
412
+ const text = await res.text();
413
+ try {
414
+ body = JSON.parse(text);
415
+ } catch {
416
+ body = text;
417
+ }
412
418
  } catch {
413
- body = text;
414
419
  }
415
- } catch {
420
+ const detail = body && typeof body === "object" && "error" in body ? String(body.error) : `HTTP ${res.status}`;
421
+ throw new DaemonHttpError(
422
+ res.status,
423
+ body,
424
+ `GET /session/:id/events: ${detail}`
425
+ );
416
426
  }
417
- const detail = body && typeof body === "object" && "error" in body ? String(body.error) : `HTTP ${res.status}`;
418
- throw new DaemonHttpError(
419
- res.status,
420
- body,
421
- `GET /session/:id/events: ${detail}`
422
- );
423
- }
424
- const ct = res.headers.get("content-type") ?? "";
425
- if (!ct.toLowerCase().includes("text/event-stream")) {
426
- try {
427
- await res.body?.cancel();
428
- } catch {
427
+ const ct = res.headers.get("content-type") ?? "";
428
+ if (!ct.toLowerCase().includes("text/event-stream")) {
429
+ try {
430
+ await res.body?.cancel();
431
+ } catch {
432
+ }
433
+ throw new DaemonHttpError(
434
+ res.status,
435
+ ct,
436
+ `GET /session/:id/events: expected content-type text/event-stream, got "${ct}"`
437
+ );
429
438
  }
430
- throw new DaemonHttpError(
431
- res.status,
432
- ct,
433
- `GET /session/:id/events: expected content-type text/event-stream, got "${ct}"`
434
- );
435
- }
436
- if (!res.body) {
437
- throw new Error("No SSE body");
439
+ if (!res.body) {
440
+ throw new Error("No SSE body");
441
+ }
442
+ yield* parseSseStream(res.body, fetchSignal);
443
+ } finally {
444
+ requestCtrl.abort();
445
+ this.activeSseRequests.delete(requestCtrl);
438
446
  }
439
- yield* parseSseStream(res.body, opts.signal);
440
447
  }
441
448
  dispose() {
449
+ if (this._disposed) return;
442
450
  this._disposed = true;
451
+ for (const requestCtrl of this.activeSseRequests) {
452
+ requestCtrl.abort();
453
+ }
454
+ this.activeSseRequests.clear();
443
455
  }
444
456
  };
445
457
  function composeAbortSignals(signals) {
@@ -994,6 +1006,24 @@ var DaemonClient = class {
994
1006
  { mode: "rest" }
995
1007
  );
996
1008
  }
1009
+ async workspaceGitLog(limit, skip) {
1010
+ const params = new URLSearchParams();
1011
+ if (limit != null) params.set("limit", String(limit));
1012
+ if (skip != null) params.set("skip", String(skip));
1013
+ const qs = params.toString();
1014
+ return await this.jsonRequest(
1015
+ `/workspace/git/log${qs ? `?${qs}` : ""}`,
1016
+ "GET /workspace/git/log",
1017
+ { mode: "rest" }
1018
+ );
1019
+ }
1020
+ async workspaceGitCommitDetail(sha) {
1021
+ return await this.jsonRequest(
1022
+ `/workspace/git/log/commit?sha=${urlEncode(sha)}`,
1023
+ "GET /workspace/git/log/commit",
1024
+ { mode: "rest" }
1025
+ );
1026
+ }
997
1027
  async workspaceMcpTools(serverName) {
998
1028
  return await this.fetchWithTimeout(
999
1029
  `${this.baseUrl}/workspace/mcp/${urlEncode(serverName)}/tools`,
@@ -1036,28 +1066,21 @@ var DaemonClient = class {
1036
1066
  async workspaceAcpPreheat(timeoutMs) {
1037
1067
  const serverBudgetMs = timeoutMs ?? 5e3;
1038
1068
  const suffix = timeoutMs !== void 0 ? `?timeoutMs=${encodeURIComponent(timeoutMs)}` : "";
1039
- return await this.fetchWithTimeout(
1040
- `${this.baseUrl}/workspace/acp/preheat${suffix}`,
1041
- { method: "POST", headers: this.headers() },
1042
- async (res) => {
1043
- if (!res.ok) {
1044
- throw await this.failOnError(res, "POST /workspace/acp/preheat");
1045
- }
1046
- return await res.json();
1047
- },
1048
- serverBudgetMs + 2e3
1069
+ return await this.jsonRequest(
1070
+ `/workspace/acp/preheat${suffix}`,
1071
+ "POST /workspace/acp/preheat",
1072
+ {
1073
+ method: "POST",
1074
+ timeoutMs: serverBudgetMs + 2e3,
1075
+ mode: "rest"
1076
+ }
1049
1077
  );
1050
1078
  }
1051
1079
  async workspaceAcpStatus() {
1052
- return await this.fetchWithTimeout(
1053
- `${this.baseUrl}/workspace/acp/status`,
1054
- { headers: this.headers() },
1055
- async (res) => {
1056
- if (!res.ok) {
1057
- throw await this.failOnError(res, "GET /workspace/acp/status");
1058
- }
1059
- return await res.json();
1060
- }
1080
+ return await this.jsonRequest(
1081
+ "/workspace/acp/status",
1082
+ "GET /workspace/acp/status",
1083
+ { mode: "rest" }
1061
1084
  );
1062
1085
  }
1063
1086
  async workspaceProviders() {
@@ -1742,7 +1765,8 @@ var DaemonClient = class {
1742
1765
  ...req.sessionScope !== void 0 ? { sessionScope: req.sessionScope } : {},
1743
1766
  ...req.approvalMode !== void 0 ? { approvalMode: req.approvalMode } : {},
1744
1767
  ...req.sourceType !== void 0 ? { sourceType: req.sourceType } : {},
1745
- ...req.sourceId !== void 0 ? { sourceId: req.sourceId } : {}
1768
+ ...req.sourceId !== void 0 ? { sourceId: req.sourceId } : {},
1769
+ ...req.worktree !== void 0 ? { worktree: req.worktree } : {}
1746
1770
  })
1747
1771
  },
1748
1772
  async (res) => {
@@ -3336,7 +3360,8 @@ var DaemonClient = class {
3336
3360
  headers: this.headers({ "Content-Type": "application/json" }),
3337
3361
  body: JSON.stringify({
3338
3362
  cwd,
3339
- ...options.persist ? { persist: true } : {}
3363
+ ...options.persist ? { persist: true } : {},
3364
+ ...options.displayName !== void 0 ? { displayName: options.displayName } : {}
3340
3365
  })
3341
3366
  },
3342
3367
  async (res) => {
@@ -3347,6 +3372,14 @@ var DaemonClient = class {
3347
3372
  }
3348
3373
  );
3349
3374
  }
3375
+ async updateWorkspace(workspaceSelector, update) {
3376
+ return await this.workspaceJsonRequest(
3377
+ urlEncode(workspaceSelector),
3378
+ "",
3379
+ "PATCH /workspaces/:workspace",
3380
+ { method: "PATCH", body: update, mode: "rest" }
3381
+ );
3382
+ }
3350
3383
  // -- Lifecycle / disposal ------------------------------------------------
3351
3384
  /**
3352
3385
  * Release transport resources (WS close, etc.). Idempotent.
@@ -3456,10 +3489,11 @@ var WorkspaceDaemonClient = class {
3456
3489
  opts
3457
3490
  );
3458
3491
  }
3459
- workspaceGit() {
3492
+ workspaceGit(cwd) {
3493
+ const suffix = cwd ? `/git?cwd=${encodeURIComponent(cwd)}` : "/git";
3460
3494
  return this.client.workspaceJsonRequest(
3461
3495
  this.workspaceSelector,
3462
- "/git",
3496
+ suffix,
3463
3497
  "GET /workspaces/:workspace/git",
3464
3498
  { mode: "rest" }
3465
3499
  );
@@ -3481,6 +3515,26 @@ var WorkspaceDaemonClient = class {
3481
3515
  { mode: "rest" }
3482
3516
  );
3483
3517
  }
3518
+ workspaceGitLog(limit, skip) {
3519
+ const params = new URLSearchParams();
3520
+ if (limit != null) params.set("limit", String(limit));
3521
+ if (skip != null) params.set("skip", String(skip));
3522
+ const qs = params.toString();
3523
+ return this.client.workspaceJsonRequest(
3524
+ this.workspaceSelector,
3525
+ `/git/log${qs ? `?${qs}` : ""}`,
3526
+ "GET /workspaces/:workspace/git/log",
3527
+ { mode: "rest" }
3528
+ );
3529
+ }
3530
+ workspaceGitCommitDetail(sha) {
3531
+ return this.client.workspaceJsonRequest(
3532
+ this.workspaceSelector,
3533
+ `/git/log/commit?sha=${urlEncode(sha)}`,
3534
+ "GET /workspaces/:workspace/git/log/commit",
3535
+ { mode: "rest" }
3536
+ );
3537
+ }
3484
3538
  workspaceSkills() {
3485
3539
  return this.get("/skills", "GET /workspaces/:workspace/skills");
3486
3540
  }
@@ -4071,6 +4125,9 @@ var DaemonSessionClient = class _DaemonSessionClient {
4071
4125
  get clientId() {
4072
4126
  return this.session.clientId;
4073
4127
  }
4128
+ get worktree() {
4129
+ return this.session.worktree;
4130
+ }
4074
4131
  get lastEventId() {
4075
4132
  return this.lastSeenEventId;
4076
4133
  }
@@ -6257,9 +6314,11 @@ function normalizeMidTurnMessageInjected(event, base) {
6257
6314
  __name(normalizeMidTurnMessageInjected, "normalizeMidTurnMessageInjected");
6258
6315
  function createBase(event, opts) {
6259
6316
  const serverTimestamp = extractServerTimestamp(event);
6317
+ const sourceRecordIds = extractSourceRecordIds(event);
6260
6318
  return {
6261
6319
  ...event.id !== void 0 ? { eventId: event.id } : {},
6262
6320
  ...serverTimestamp !== void 0 ? { serverTimestamp } : {},
6321
+ ...sourceRecordIds ? { sourceRecordIds } : {},
6263
6322
  ...event.originatorClientId ? { originatorClientId: event.originatorClientId } : {},
6264
6323
  ...opts.includeRawEvent ? { rawEvent: { ...event, data: redactSensitiveFields(event.data) } } : {}
6265
6324
  };
@@ -6448,9 +6507,26 @@ function extractParentToolCallId(update) {
6448
6507
  __name(extractParentToolCallId, "extractParentToolCallId");
6449
6508
  function extractUpdateMeta(update) {
6450
6509
  const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
6451
- return meta ? { ...meta } : void 0;
6510
+ if (!meta) return void 0;
6511
+ const { qwenTranscript: _qwenTranscript, ...displayMeta } = meta;
6512
+ return Object.keys(displayMeta).length > 0 ? displayMeta : void 0;
6452
6513
  }
6453
6514
  __name(extractUpdateMeta, "extractUpdateMeta");
6515
+ function extractSourceRecordIds(event) {
6516
+ if (!isRecord2(event.data)) return void 0;
6517
+ const update = getSessionUpdatePayload(event.data);
6518
+ const meta = update && isRecord2(update["_meta"]) ? update["_meta"] : void 0;
6519
+ const transcript = meta && isRecord2(meta["qwenTranscript"]) ? meta["qwenTranscript"] : void 0;
6520
+ const values = transcript?.["sourceRecordIds"];
6521
+ if (!Array.isArray(values)) return void 0;
6522
+ const ids = [
6523
+ ...new Set(
6524
+ values.filter((value) => typeof value === "string")
6525
+ )
6526
+ ];
6527
+ return ids.length > 0 ? ids : void 0;
6528
+ }
6529
+ __name(extractSourceRecordIds, "extractSourceRecordIds");
6454
6530
  function extractAssistantUsage(update) {
6455
6531
  const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
6456
6532
  const usage = meta && isRecord2(meta["usage"]) ? meta["usage"] : void 0;
@@ -6515,8 +6591,9 @@ __name(normalizeToolUpdate, "normalizeToolUpdate");
6515
6591
  function normalizePlanUpdate(update, base) {
6516
6592
  const entries = Array.isArray(update["entries"]) ? update["entries"] : [];
6517
6593
  const contentText = capDetails(formatPlanEntries(entries));
6518
- const planCallId = base.eventId !== void 0 ? `${DAEMON_PLAN_TOOL_CALL_ID}-${base.eventId}` : DAEMON_PLAN_TOOL_CALL_ID;
6519
6594
  const meta = isRecord2(update["_meta"]) ? update["_meta"] : void 0;
6595
+ const transcript = meta && isRecord2(meta["qwenTranscript"]) ? meta["qwenTranscript"] : void 0;
6596
+ const planCallId = getString2(transcript, "planToolCallId") ?? (base.eventId !== void 0 ? `${DAEMON_PLAN_TOOL_CALL_ID}-${base.eventId}` : DAEMON_PLAN_TOOL_CALL_ID);
6520
6597
  const stats = meta && isRecord2(meta["stats"]) ? meta["stats"] : void 0;
6521
6598
  return {
6522
6599
  ...base,
@@ -7581,24 +7658,27 @@ var TRIMMED_PERMISSION_BLOCK_ID = "__trimmed_permission_block__";
7581
7658
  var MAX_TEXT_BLOCK_LENGTH = 1e5;
7582
7659
  var TEXT_TRUNCATED_SUFFIX = "\n[truncated]\n";
7583
7660
  var MAX_CLONE_DEPTH = 16;
7661
+ var truncationCallbacks = /* @__PURE__ */ new WeakMap();
7584
7662
  var timestampFormatterCache = /* @__PURE__ */ new Map();
7585
7663
  function createDaemonTranscriptState(opts = {}) {
7586
- return {
7664
+ const state = {
7587
7665
  blocks: [],
7588
- blockIndexById: {},
7589
- toolBlockByCallId: {},
7590
- trimmedToolNotificationByCallId: {},
7591
- permissionBlockByRequestId: {},
7592
- activeAssistantBlockByParent: {},
7593
- activeThoughtBlockByParent: {},
7666
+ blockIndexById: createIndex(),
7667
+ toolBlockByCallId: createIndex(),
7668
+ trimmedToolNotificationByCallId: createIndex(),
7669
+ permissionBlockByRequestId: createIndex(),
7670
+ activeAssistantBlockByParent: createIndex(),
7671
+ activeThoughtBlockByParent: createIndex(),
7594
7672
  // PR-E sidechannel: track current tool / approval mode / progress
7595
- toolProgress: {},
7673
+ toolProgress: createIndex(),
7596
7674
  awaitingResync: false,
7597
7675
  resyncRequiredCount: 0,
7598
7676
  nextOrdinal: 1,
7599
7677
  now: opts.now ?? Date.now(),
7600
7678
  maxBlocks: opts.maxBlocks ?? DEFAULT_MAX_BLOCKS
7601
7679
  };
7680
+ if (opts.onTruncation) truncationCallbacks.set(state, opts.onTruncation);
7681
+ return state;
7602
7682
  }
7603
7683
  __name(createDaemonTranscriptState, "createDaemonTranscriptState");
7604
7684
  var IN_FLIGHT_TOOL_STATUSES = /* @__PURE__ */ new Set([
@@ -7654,7 +7734,7 @@ function reduceDaemonTranscriptEvents(state, events, opts = {}) {
7654
7734
  }
7655
7735
  __name(reduceDaemonTranscriptEvents, "reduceDaemonTranscriptEvents");
7656
7736
  function rebuildDaemonTranscriptBlockIndex(blocks) {
7657
- const blockIndexById = {};
7737
+ const blockIndexById = createIndex();
7658
7738
  blocks.forEach((block, index) => {
7659
7739
  blockIndexById[block.id] = index;
7660
7740
  });
@@ -7687,11 +7767,17 @@ function applyDaemonTranscriptEvent(next, event) {
7687
7767
  appendTextDelta(next, "user", "activeUserBlockId", event.text, event);
7688
7768
  break;
7689
7769
  case "user.image.delta": {
7690
- if (!next.activeUserBlockId) {
7770
+ const activeUserIndex = next.activeUserBlockId ? next.blockIndexById[next.activeUserBlockId] : void 0;
7771
+ const activeUser = activeUserIndex !== void 0 ? next.blocks[activeUserIndex] : void 0;
7772
+ if (activeUser?.kind !== "user" || !stringArraysEqual(activeUser.sourceRecordIds, event.sourceRecordIds)) {
7691
7773
  const block = createTextBlock(
7692
7774
  next,
7693
7775
  "user",
7694
- ""
7776
+ "",
7777
+ event.eventId,
7778
+ event.serverTimestamp,
7779
+ void 0,
7780
+ event.sourceRecordIds
7695
7781
  );
7696
7782
  block.images = [{ data: event.data, mimeType: event.mimeType }];
7697
7783
  appendBlock(next, block);
@@ -7919,7 +8005,7 @@ function appendTextDelta(state, kind, activeKey, text, event) {
7919
8005
  const effectiveId = parentMap && parentId != null ? parentMap[parentId] : state[activeKey];
7920
8006
  const existing = getWritableBlockById(state, effectiveId);
7921
8007
  if (existing && existing.kind === kind && canMergeTextDelta(existing, event)) {
7922
- existing.text = appendBoundedText(existing.text, text);
8008
+ existing.text = appendBoundedText(state, existing, text);
7923
8009
  existing.updatedAt = state.now;
7924
8010
  if (event.eventId !== void 0) existing.eventId = event.eventId;
7925
8011
  if (event.serverTimestamp !== void 0) {
@@ -7928,18 +8014,23 @@ function appendTextDelta(state, kind, activeKey, text, event) {
7928
8014
  if ("meta" in event && event.meta) {
7929
8015
  existing.meta = { ...existing.meta, ...event.meta };
7930
8016
  }
7931
- if (kind === "assistant" || kind === "thought") existing.streaming = true;
8017
+ if (kind !== "user") existing.streaming = true;
7932
8018
  return;
7933
8019
  }
8020
+ if (existing?.kind === kind && kind !== "user") {
8021
+ existing.streaming = false;
8022
+ existing.updatedAt = state.now;
8023
+ }
7934
8024
  const block = createTextBlock(
7935
8025
  state,
7936
8026
  kind,
7937
8027
  text,
7938
8028
  event.eventId,
7939
8029
  event.serverTimestamp,
7940
- "meta" in event ? event.meta : void 0
8030
+ "meta" in event ? event.meta : void 0,
8031
+ event.sourceRecordIds
7941
8032
  );
7942
- if (kind === "assistant" || kind === "thought") block.streaming = true;
8033
+ if (kind !== "user") block.streaming = true;
7943
8034
  if (kind === "thought") block.collapsed = true;
7944
8035
  if (parentId != null) {
7945
8036
  block.parentToolCallId = parentId;
@@ -7969,6 +8060,9 @@ function canMergeTextDelta(existing, event) {
7969
8060
  return false;
7970
8061
  }
7971
8062
  if (existing.meta?.qwenDiscreteMessage === true) return false;
8063
+ if (!stringArraysEqual(existing.sourceRecordIds, event.sourceRecordIds)) {
8064
+ return false;
8065
+ }
7972
8066
  return !("meta" in event) || event.meta?.qwenDiscreteMessage !== true;
7973
8067
  }
7974
8068
  __name(canMergeTextDelta, "canMergeTextDelta");
@@ -8021,6 +8115,10 @@ function upsertToolBlock(state, event) {
8021
8115
  if (event.locations !== void 0) existing.locations = event.locations;
8022
8116
  if (event.rawInput !== void 0) existing.rawInput = event.rawInput;
8023
8117
  if (event.rawOutput !== void 0) existing.rawOutput = event.rawOutput;
8118
+ existing.sourceRecordIds = unionStrings(
8119
+ existing.sourceRecordIds,
8120
+ event.sourceRecordIds
8121
+ );
8024
8122
  if (event.toolName) existing.toolName = event.toolName;
8025
8123
  if (event.toolKind) existing.toolKind = event.toolKind;
8026
8124
  if (event.parentToolCallId && !existing.parentToolCallId) {
@@ -8055,6 +8153,7 @@ function upsertToolBlock(state, event) {
8055
8153
  updatedAt: state.now,
8056
8154
  ...event.eventId !== void 0 ? { eventId: event.eventId } : {},
8057
8155
  ...event.serverTimestamp !== void 0 ? { serverTimestamp: event.serverTimestamp } : {},
8156
+ ...event.sourceRecordIds ? { sourceRecordIds: [...event.sourceRecordIds] } : {},
8058
8157
  ...event.details ? { details: event.details } : {},
8059
8158
  ...event.content !== void 0 ? { content: event.content } : {},
8060
8159
  ...event.locations !== void 0 ? { locations: event.locations } : {},
@@ -8121,16 +8220,17 @@ function appendShellBlock(state, event) {
8121
8220
  if (last?.kind === "shell" && last.stream === event.stream) {
8122
8221
  const writable = getWritableBlockById(state, last.id);
8123
8222
  if (writable?.kind === "shell") {
8124
- writable.text = appendBoundedText(writable.text, event.text);
8223
+ writable.text = appendBoundedText(state, writable, event.text);
8125
8224
  writable.updatedAt = state.now;
8126
8225
  if (event.eventId !== void 0) writable.eventId = event.eventId;
8127
8226
  }
8128
8227
  return;
8129
8228
  }
8229
+ const blockId = allocateBlockId(state, "shell");
8130
8230
  const block = {
8131
- id: allocateBlockId(state, "shell"),
8231
+ id: blockId,
8132
8232
  kind: "shell",
8133
- text: truncateText(event.text),
8233
+ text: truncateText(state, blockId, void 0, event.text),
8134
8234
  clientReceivedAt: state.now,
8135
8235
  createdAt: state.now,
8136
8236
  updatedAt: state.now,
@@ -8148,7 +8248,7 @@ function appendUserShellBlock(state, event) {
8148
8248
  if (last?.kind === "user_shell" && last.stream === event.stream && !state.pendingUserShellCommand) {
8149
8249
  const writable = getWritableBlockById(state, last.id);
8150
8250
  if (writable?.kind === "user_shell") {
8151
- writable.text = appendBoundedText(writable.text, event.text);
8251
+ writable.text = appendBoundedText(state, writable, event.text);
8152
8252
  writable.updatedAt = state.now;
8153
8253
  if (event.eventId !== void 0) writable.eventId = event.eventId;
8154
8254
  }
@@ -8156,10 +8256,11 @@ function appendUserShellBlock(state, event) {
8156
8256
  }
8157
8257
  const pending = state.pendingUserShellCommand;
8158
8258
  const previous = last?.kind === "user_shell" ? last : void 0;
8259
+ const blockId = allocateBlockId(state, "user-shell");
8159
8260
  const block = {
8160
- id: allocateBlockId(state, "user-shell"),
8261
+ id: blockId,
8161
8262
  kind: "user_shell",
8162
- text: truncateText(event.text),
8263
+ text: truncateText(state, blockId, void 0, event.text),
8163
8264
  command: pending?.command ?? previous?.command ?? "",
8164
8265
  ...pending?.cwd || previous?.cwd ? { cwd: pending?.cwd ?? previous?.cwd } : {},
8165
8266
  clientReceivedAt: state.now,
@@ -8242,10 +8343,11 @@ function resolvePermissionBlock(state, event) {
8242
8343
  }
8243
8344
  __name(resolvePermissionBlock, "resolvePermissionBlock");
8244
8345
  function appendStatusBlock(state, kind, text, event, opts = {}) {
8346
+ const blockId = allocateBlockId(state, kind);
8245
8347
  const block = {
8246
- id: allocateBlockId(state, kind),
8348
+ id: blockId,
8247
8349
  kind,
8248
- text: truncateText(text),
8350
+ text: truncateText(state, blockId, void 0, text),
8249
8351
  clientReceivedAt: state.now,
8250
8352
  createdAt: state.now,
8251
8353
  updatedAt: state.now,
@@ -8285,22 +8387,24 @@ function appendPromptCancelledBlock(state, event) {
8285
8387
  clearActiveText(state);
8286
8388
  }
8287
8389
  __name(appendPromptCancelledBlock, "appendPromptCancelledBlock");
8288
- function createTextBlock(state, kind, text, eventId, serverTimestamp, meta) {
8390
+ function createTextBlock(state, kind, text, eventId, serverTimestamp, meta, sourceRecordIds) {
8391
+ const blockId = allocateBlockId(state, kind);
8289
8392
  return {
8290
- id: allocateBlockId(state, kind),
8393
+ id: blockId,
8291
8394
  kind,
8292
- text: truncateText(text),
8395
+ text: truncateText(state, blockId, sourceRecordIds, text),
8293
8396
  clientReceivedAt: state.now,
8294
8397
  createdAt: state.now,
8295
8398
  updatedAt: state.now,
8296
8399
  ...eventId !== void 0 ? { eventId } : {},
8297
8400
  ...serverTimestamp !== void 0 ? { serverTimestamp } : {},
8401
+ ...sourceRecordIds ? { sourceRecordIds: [...sourceRecordIds] } : {},
8298
8402
  ...meta ? { meta: { ...meta } } : {}
8299
8403
  };
8300
8404
  }
8301
8405
  __name(createTextBlock, "createTextBlock");
8302
8406
  function cloneTranscriptState(state, opts) {
8303
- return {
8407
+ const next = {
8304
8408
  ...state,
8305
8409
  now: opts.now ?? Date.now(),
8306
8410
  maxBlocks: opts.maxBlocks ?? state.maxBlocks,
@@ -8316,21 +8420,25 @@ function cloneTranscriptState(state, opts) {
8316
8420
  // consumers + the WeakMap caches want.
8317
8421
  blocks: state.blocks,
8318
8422
  blockIndexById: state.blockIndexById,
8319
- toolBlockByCallId: { ...state.toolBlockByCallId },
8320
- activeAssistantBlockByParent: { ...state.activeAssistantBlockByParent },
8321
- activeThoughtBlockByParent: { ...state.activeThoughtBlockByParent },
8322
- trimmedToolNotificationByCallId: {
8323
- ...state.trimmedToolNotificationByCallId
8324
- },
8325
- permissionBlockByRequestId: { ...state.permissionBlockByRequestId },
8423
+ toolBlockByCallId: createIndex(state.toolBlockByCallId),
8424
+ activeAssistantBlockByParent: createIndex(
8425
+ state.activeAssistantBlockByParent
8426
+ ),
8427
+ activeThoughtBlockByParent: createIndex(state.activeThoughtBlockByParent),
8428
+ trimmedToolNotificationByCallId: createIndex(
8429
+ state.trimmedToolNotificationByCallId
8430
+ ),
8431
+ permissionBlockByRequestId: createIndex(state.permissionBlockByRequestId),
8326
8432
  // Deep-clone the inner progress records.
8327
8433
  // The outer spread alone shares `{ ratio?, step? }` references between
8328
8434
  // snapshots — once `tool.progress` event handlers start mutating in
8329
8435
  // place, the prior snapshot leaks. Pre-empt that here; cost is bounded
8330
8436
  // by `Object.keys(state.toolProgress).length` which is small (only
8331
8437
  // in-flight tools).
8332
- toolProgress: Object.fromEntries(
8333
- Object.entries(state.toolProgress).map(([k, v]) => [k, { ...v }])
8438
+ toolProgress: createIndex(
8439
+ Object.fromEntries(
8440
+ Object.entries(state.toolProgress).map(([k, v]) => [k, { ...v }])
8441
+ )
8334
8442
  ),
8335
8443
  lastResyncRequired: state.lastResyncRequired !== void 0 ? { ...state.lastResyncRequired } : void 0,
8336
8444
  // Share the reference — the reducer assigns a new object when
@@ -8340,10 +8448,14 @@ function cloneTranscriptState(state, opts) {
8340
8448
  // that don't touch the suggestion.
8341
8449
  lastFollowupSuggestion: state.lastFollowupSuggestion
8342
8450
  };
8451
+ const onTruncation = opts.onTruncation ?? truncationCallbacks.get(state);
8452
+ if (onTruncation) truncationCallbacks.set(next, onTruncation);
8453
+ return next;
8343
8454
  }
8344
8455
  __name(cloneTranscriptState, "cloneTranscriptState");
8345
8456
  function trimTranscriptState(state) {
8346
8457
  if (state.blocks.length <= state.maxBlocks) return state;
8458
+ truncationCallbacks.get(state)?.({ kind: "blocks" });
8347
8459
  const blocks = state.blocks.slice(-state.maxBlocks);
8348
8460
  const keptIds = new Set(blocks.map((block) => block.id));
8349
8461
  state.blocks = blocks;
@@ -8413,7 +8525,7 @@ var ownedBlocks = /* @__PURE__ */ new WeakMap();
8413
8525
  function takeBlocksOwnership(state) {
8414
8526
  if (ownedBlocks.get(state) === state.blocks) return;
8415
8527
  state.blocks = [...state.blocks];
8416
- state.blockIndexById = { ...state.blockIndexById };
8528
+ state.blockIndexById = createIndex(state.blockIndexById);
8417
8529
  ownedBlocks.set(state, state.blocks);
8418
8530
  }
8419
8531
  __name(takeBlocksOwnership, "takeBlocksOwnership");
@@ -8443,14 +8555,14 @@ function truncateTranscriptBeforeBlock(state, blockIndex) {
8443
8555
  __name(truncateTranscriptBeforeBlock, "truncateTranscriptBeforeBlock");
8444
8556
  function rebuildTranscriptIndexes(state) {
8445
8557
  state.blockIndexById = rebuildDaemonTranscriptBlockIndex(state.blocks);
8446
- state.toolBlockByCallId = {};
8447
- state.permissionBlockByRequestId = {};
8448
- state.trimmedToolNotificationByCallId = {};
8558
+ state.toolBlockByCallId = createIndex();
8559
+ state.permissionBlockByRequestId = createIndex();
8560
+ state.trimmedToolNotificationByCallId = createIndex();
8449
8561
  state.activeUserBlockId = void 0;
8450
8562
  state.activeAssistantBlockId = void 0;
8451
8563
  state.activeThoughtBlockId = void 0;
8452
- state.activeAssistantBlockByParent = {};
8453
- state.activeThoughtBlockByParent = {};
8564
+ state.activeAssistantBlockByParent = createIndex();
8565
+ state.activeThoughtBlockByParent = createIndex();
8454
8566
  state.currentToolCallId = void 0;
8455
8567
  state.pendingUserShellCommand = void 0;
8456
8568
  state.lastFollowupSuggestion = void 0;
@@ -8526,13 +8638,18 @@ function clearActiveText(state, parentToolCallId) {
8526
8638
  }
8527
8639
  }
8528
8640
  __name(clearActiveText, "clearActiveText");
8529
- function appendBoundedText(existing, text) {
8530
- if (existing.length >= MAX_TEXT_BLOCK_LENGTH) return existing;
8531
- return truncateText(existing + text);
8641
+ function appendBoundedText(state, block, text) {
8642
+ const existing = "text" in block ? block.text : "";
8643
+ if (existing.length >= MAX_TEXT_BLOCK_LENGTH) {
8644
+ if (text) reportTextTruncation(state, block.id, block.sourceRecordIds);
8645
+ return existing;
8646
+ }
8647
+ return truncateText(state, block.id, block.sourceRecordIds, existing + text);
8532
8648
  }
8533
8649
  __name(appendBoundedText, "appendBoundedText");
8534
- function truncateText(text) {
8650
+ function truncateText(state, blockId, sourceRecordIds, text) {
8535
8651
  if (text.length <= MAX_TEXT_BLOCK_LENGTH) return text;
8652
+ reportTextTruncation(state, blockId, sourceRecordIds);
8536
8653
  const keepLength = Math.max(
8537
8654
  0,
8538
8655
  MAX_TEXT_BLOCK_LENGTH - TEXT_TRUNCATED_SUFFIX.length
@@ -8540,6 +8657,29 @@ function truncateText(text) {
8540
8657
  return `${text.slice(0, keepLength)}${TEXT_TRUNCATED_SUFFIX}`;
8541
8658
  }
8542
8659
  __name(truncateText, "truncateText");
8660
+ function reportTextTruncation(state, blockId, sourceRecordIds) {
8661
+ truncationCallbacks.get(state)?.({
8662
+ kind: "text",
8663
+ blockId,
8664
+ sourceRecordIds
8665
+ });
8666
+ }
8667
+ __name(reportTextTruncation, "reportTextTruncation");
8668
+ function createIndex(source) {
8669
+ return Object.assign(/* @__PURE__ */ Object.create(null), source);
8670
+ }
8671
+ __name(createIndex, "createIndex");
8672
+ function stringArraysEqual(left, right) {
8673
+ if (left === right) return true;
8674
+ if (!left || !right || left.length !== right.length) return false;
8675
+ return left.every((value, index) => value === right[index]);
8676
+ }
8677
+ __name(stringArraysEqual, "stringArraysEqual");
8678
+ function unionStrings(left, right) {
8679
+ if (!left && !right) return void 0;
8680
+ return [.../* @__PURE__ */ new Set([...left ?? [], ...right ?? []])];
8681
+ }
8682
+ __name(unionStrings, "unionStrings");
8543
8683
  function pruneTrimmedToolIndexes(state) {
8544
8684
  const maxTrimmedEntries = Math.max(0, state.maxBlocks);
8545
8685
  const trimmedToolCallIds = Object.entries(state.toolBlockByCallId).filter(([, blockId]) => blockId === TRIMMED_TOOL_BLOCK_ID).map(([toolCallId]) => toolCallId);
@@ -8801,25 +8941,29 @@ function createState(seed) {
8801
8941
  ...seed,
8802
8942
  blocks,
8803
8943
  blockIndexById: rebuildDaemonTranscriptBlockIndex(blocks),
8804
- toolBlockByCallId: { ...seed.toolBlockByCallId ?? {} },
8805
- trimmedToolNotificationByCallId: {
8806
- ...seed.trimmedToolNotificationByCallId ?? {}
8807
- },
8808
- permissionBlockByRequestId: {
8809
- ...seed.permissionBlockByRequestId ?? {}
8810
- },
8811
- toolProgress: { ...seed.toolProgress ?? {} },
8812
- activeAssistantBlockByParent: {
8813
- ...seed.activeAssistantBlockByParent ?? {}
8814
- },
8815
- activeThoughtBlockByParent: {
8816
- ...seed.activeThoughtBlockByParent ?? {}
8817
- },
8944
+ toolBlockByCallId: createNullIndex(seed.toolBlockByCallId),
8945
+ trimmedToolNotificationByCallId: createNullIndex(
8946
+ seed.trimmedToolNotificationByCallId
8947
+ ),
8948
+ permissionBlockByRequestId: createNullIndex(
8949
+ seed.permissionBlockByRequestId
8950
+ ),
8951
+ toolProgress: createNullIndex(seed.toolProgress),
8952
+ activeAssistantBlockByParent: createNullIndex(
8953
+ seed.activeAssistantBlockByParent
8954
+ ),
8955
+ activeThoughtBlockByParent: createNullIndex(
8956
+ seed.activeThoughtBlockByParent
8957
+ ),
8818
8958
  lastResyncRequired: seed.lastResyncRequired !== void 0 ? { ...seed.lastResyncRequired } : void 0,
8819
8959
  lastFollowupSuggestion: seed.lastFollowupSuggestion !== void 0 ? { ...seed.lastFollowupSuggestion } : void 0
8820
8960
  };
8821
8961
  }
8822
8962
  __name(createState, "createState");
8963
+ function createNullIndex(source) {
8964
+ return Object.assign(/* @__PURE__ */ Object.create(null), source);
8965
+ }
8966
+ __name(createNullIndex, "createNullIndex");
8823
8967
 
8824
8968
  // packages/sdk-typescript/src/daemon/ui/sentinels.ts
8825
8969
  init_esbuild_shims();