@qwen-code/qwen-code 0.23.5-preview.0 → 0.24.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 (480) hide show
  1. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  2. package/bundled/qc-helper/docs/features/goals.md +4 -2
  3. package/bundled/qc-helper/docs/features/omni-fixed-policies-preset.json +242 -0
  4. package/bundled/qc-helper/docs/features/omni-media-policies.md +443 -0
  5. package/bundled/qc-helper/docs/overview.md +1 -1
  6. package/bundled/qc-helper/docs/quickstart.md +2 -3
  7. package/chunks/MaxSizedBox-I5COUCHZ.js +148 -0
  8. package/chunks/{StandaloneSessionPicker-V635V72I.js → StandaloneSessionPicker-KUGOBVEW.js} +114 -90
  9. package/chunks/acp-subagent-executor-PRPMLKVJ.js +164 -0
  10. package/chunks/{acpAgent-3DPWZTNC.js → acpAgent-EHXZXVUB.js} +269 -194
  11. package/chunks/{agent-KIHGINKN.js → agent-FWPNJI6N.js} +59 -49
  12. package/chunks/agent-headless-M5Z7WIDL.js +104 -0
  13. package/chunks/{anthropicContentGenerator-4FGOM5LK.js → anthropicContentGenerator-FLTEUSIQ.js} +30 -27
  14. package/chunks/{artifact-tool-MUTNH4NI.js → artifact-tool-3MWM6SN2.js} +11 -7
  15. package/chunks/{askUserQuestion-AKIRLVB5.js → askUserQuestion-YFFBB4K3.js} +6 -4
  16. package/chunks/bridge-EWCKRGWY.js +156 -0
  17. package/chunks/{build-5KWQBWEQ.js → build-5OQN7CDU.js} +1 -1
  18. package/chunks/caption-audio-UXXLI3JZ.js +443 -0
  19. package/chunks/caption-image-B7O4TUFP.js +247 -0
  20. package/chunks/{channel-management-service-RRILWSXX.js → channel-management-service-GRJG5R46.js} +1 -1
  21. package/chunks/channel-settings-store-NXZNLT5L.js +158 -0
  22. package/chunks/{channel-worker-group-3DUJFZJR.js → channel-worker-group-SCSKCSBJ.js} +4 -4
  23. package/chunks/{channel-worker-manager-E5UW2VLA.js → channel-worker-manager-AHCZCKON.js} +4 -4
  24. package/chunks/{channel-worker-supervisor-VN33GSEC.js → channel-worker-supervisor-BGUAVITB.js} +3 -3
  25. package/chunks/{chunk-3LLEB5CU.js → chunk-24ZB2JNI.js} +2 -2
  26. package/chunks/{chunk-5NUKK2DT.js → chunk-25FMWESU.js} +47 -8
  27. package/chunks/{chunk-3WWPEFMX.js → chunk-2FQM443D.js} +82 -4
  28. package/chunks/{chunk-VEXUA6DX.js → chunk-2FRZ4ZP2.js} +13 -11
  29. package/chunks/{chunk-WBSJ6VPZ.js → chunk-2GNZTJRK.js} +3 -3
  30. package/chunks/{chunk-YP2K3WOS.js → chunk-2VWXODMY.js} +7 -4
  31. package/chunks/{chunk-L2A5VBDL.js → chunk-2ZCLSPE4.js} +9 -9
  32. package/chunks/{chunk-KEM7MWS7.js → chunk-366JNNY7.js} +6 -4
  33. package/chunks/{chunk-TKF4JINY.js → chunk-3FEGERVL.js} +1 -1
  34. package/chunks/{chunk-TDKUXSJO.js → chunk-3MW6PPA5.js} +1 -1
  35. package/chunks/{chunk-4LIPOIXS.js → chunk-3NHJLWOD.js} +1 -1
  36. package/chunks/{chunk-3UGMLA4V.js → chunk-3V7RNGLC.js} +10 -10
  37. package/chunks/{chunk-XICCGDWF.js → chunk-3WIPATJX.js} +2 -2
  38. package/chunks/chunk-43QUA4MC.js +135 -0
  39. package/chunks/{chunk-Q2SAQTEJ.js → chunk-4B7U3KQP.js} +1 -1
  40. package/chunks/{chunk-SFL6U7U7.js → chunk-4JFRCIMW.js} +2 -2
  41. package/chunks/{chunk-TPY6HW55.js → chunk-4OZY6LN2.js} +12 -6
  42. package/chunks/{chunk-IVFTLUZD.js → chunk-4SZ2636R.js} +3 -3
  43. package/chunks/{chunk-7CLLH5TI.js → chunk-4YS7RMCB.js} +6 -4
  44. package/chunks/{chunk-NQ272MQG.js → chunk-5XK2YELE.js} +7 -5
  45. package/chunks/{chunk-HX4WXX3H.js → chunk-65YADOPT.js} +89 -74
  46. package/chunks/chunk-6C3D7BKK.js +153 -0
  47. package/chunks/{chunk-DC4ZNGH4.js → chunk-6DB6UHY3.js} +3 -3
  48. package/chunks/{chunk-WZWTY7SG.js → chunk-6IW6SX75.js} +6 -6
  49. package/chunks/{chunk-HYHSMTRA.js → chunk-6XRR4RYH.js} +4 -4
  50. package/chunks/{chunk-AXPOOQAW.js → chunk-736AZVPL.js} +2 -2
  51. package/chunks/{chunk-UQGRJTDK.js → chunk-7JWD2EML.js} +3 -3
  52. package/chunks/{chunk-BUQN5LTI.js → chunk-7PQ65Z5F.js} +2 -2
  53. package/chunks/{chunk-43Y26NPF.js → chunk-A5EWSUYT.js} +3 -3
  54. package/chunks/{chunk-VQDWCQOE.js → chunk-ANKISCKU.js} +1 -0
  55. package/chunks/{chunk-NXUZFW3G.js → chunk-AUFTA63J.js} +1 -1
  56. package/chunks/{chunk-4QPVZA5J.js → chunk-AVVSSP4R.js} +3 -3
  57. package/chunks/{chunk-36SDZ2Q4.js → chunk-B3HGO6BB.js} +7 -5
  58. package/chunks/{chunk-6USYH3EU.js → chunk-B3XJFEEH.js} +5 -3
  59. package/chunks/{chunk-GSKX53AN.js → chunk-BA6AXQDA.js} +1 -1
  60. package/chunks/{chunk-FBY32737.js → chunk-BHHR5MEI.js} +4 -4
  61. package/chunks/{chunk-FX6PZBOV.js → chunk-BJ2TJY7V.js} +4 -4
  62. package/chunks/chunk-BKVPLSEI.js +133 -0
  63. package/chunks/chunk-BQMSZSG6.js +21 -0
  64. package/chunks/{chunk-BW2SMO6L.js → chunk-BXAU2UKM.js} +1 -1
  65. package/chunks/{chunk-3LMDSCLU.js → chunk-C4FISGDN.js} +2 -2
  66. package/chunks/{chunk-XFFRI3WM.js → chunk-CA63HYHU.js} +4 -2
  67. package/chunks/{chunk-IXO2OCIP.js → chunk-CKNBSVBC.js} +12 -8
  68. package/chunks/{chunk-347O2YZJ.js → chunk-CNG7ILRW.js} +39 -61
  69. package/chunks/chunk-CQULG2GJ.js +1330 -0
  70. package/chunks/{chunk-VVI7MK3V.js → chunk-CTGMXP4A.js} +9 -7
  71. package/chunks/{chunk-QT6Z2IBF.js → chunk-CYFQLCCG.js} +2 -2
  72. package/chunks/chunk-DBDJRURL.js +42 -0
  73. package/chunks/{chunk-X7AYIXC7.js → chunk-DJLCK66M.js} +5 -3
  74. package/chunks/chunk-DJYHML3Y.js +121 -0
  75. package/chunks/{chunk-MO4XID7S.js → chunk-DNDECZXY.js} +3 -3
  76. package/chunks/{chunk-D7JMO2GP.js → chunk-DNHL4S5B.js} +1 -1
  77. package/chunks/{chunk-WL36KHUQ.js → chunk-DTSG4EHA.js} +11 -9
  78. package/chunks/{chunk-M23GFJ5B.js → chunk-EHMLJKF5.js} +1 -1
  79. package/chunks/{chunk-TIGXX4PA.js → chunk-EKBQJ627.js} +2 -2
  80. package/chunks/{chunk-RSWBT7AZ.js → chunk-ERIBG3BX.js} +35 -551
  81. package/chunks/{chunk-PPJSG2PU.js → chunk-EVZT24AF.js} +6 -142
  82. package/chunks/{chunk-E2VSBAFA.js → chunk-FL2EJUOY.js} +5 -5
  83. package/chunks/{chunk-2C5TR6HN.js → chunk-FSNLTHNG.js} +1 -1
  84. package/chunks/chunk-FTKXJMQV.js +255 -0
  85. package/chunks/{chunk-TRZ22SG5.js → chunk-FXPP7VLM.js} +6 -4
  86. package/chunks/{chunk-CDDP4ONL.js → chunk-G3PBYAGM.js} +60 -134
  87. package/chunks/{chunk-AEWCOE64.js → chunk-GACWUBXV.js} +2 -2
  88. package/chunks/{chunk-OWUAZXXN.js → chunk-GHG4PQY2.js} +3 -3
  89. package/chunks/{chunk-VU3XMZ5I.js → chunk-GHZJQCSZ.js} +3 -3
  90. package/chunks/{chunk-FIJODK52.js → chunk-GJHAV2F7.js} +3 -3
  91. package/chunks/{chunk-36NRLIR6.js → chunk-GQZA7EYC.js} +11 -11
  92. package/chunks/{chunk-4JFLRHNE.js → chunk-GVHYY2RS.js} +1 -1
  93. package/chunks/{chunk-H6L4NEAT.js → chunk-GVMXFXQG.js} +1 -1
  94. package/chunks/{chunk-G45B3INR.js → chunk-GVTAFLWB.js} +2 -2
  95. package/chunks/{chunk-GJKP6XOB.js → chunk-GW5SJ3II.js} +16 -19
  96. package/chunks/{chunk-AQP3H22J.js → chunk-GY7FOHQP.js} +1 -1
  97. package/chunks/chunk-GZ5MEGA3.js +44 -0
  98. package/chunks/{chunk-FCPJXKDG.js → chunk-HA6DKD44.js} +9 -9
  99. package/chunks/{chunk-FEDFZBGR.js → chunk-HR4OWLKI.js} +3 -3
  100. package/chunks/{chunk-CXY6BICQ.js → chunk-HWKWZSZY.js} +162 -109
  101. package/chunks/{chunk-K4XMAIRX.js → chunk-I3NKMMHS.js} +12 -12
  102. package/chunks/{chunk-QMENOK5T.js → chunk-IH4TNUVS.js} +9 -7
  103. package/chunks/{chunk-FASYATAZ.js → chunk-IHUOMYBO.js} +1 -1
  104. package/chunks/{chunk-IZ2U57NY.js → chunk-IITTKFWM.js} +4 -2
  105. package/chunks/{chunk-M22WLKLI.js → chunk-IQGEZOGN.js} +7 -7
  106. package/chunks/chunk-IVPSLX4P.js +578 -0
  107. package/chunks/{chunk-BTICBRPL.js → chunk-IWMYX5LB.js} +3 -3
  108. package/chunks/{chunk-V4JJAVHQ.js → chunk-JCIDHFSB.js} +2 -2
  109. package/chunks/{chunk-PF7GAP6K.js → chunk-JENFAGVX.js} +65 -54
  110. package/chunks/{chunk-LO2UWNO5.js → chunk-JFEWKEKG.js} +3 -3
  111. package/chunks/{chunk-BHG3H6OZ.js → chunk-JJVDKHQU.js} +1 -1
  112. package/chunks/chunk-JYGESWZM.js +149 -0
  113. package/chunks/{chunk-KVC7HZWK.js → chunk-JYTJ5FCM.js} +1 -1
  114. package/chunks/{chunk-KVQ3QL4K.js → chunk-KCL6OMCX.js} +3 -3
  115. package/chunks/{chunk-3HTUE6ZR.js → chunk-KCRV4F3G.js} +4 -4
  116. package/chunks/{chunk-3WILPKTJ.js → chunk-KKPIFWTZ.js} +11 -6
  117. package/chunks/{chunk-CXONOVBN.js → chunk-KS6F6LZQ.js} +8 -6
  118. package/chunks/chunk-KSEKRQJO.js +253 -0
  119. package/chunks/{chunk-P42KMMU6.js → chunk-KWTLCPYY.js} +19 -6
  120. package/chunks/{chunk-U4AASWUQ.js → chunk-L4GF4IK2.js} +3 -3
  121. package/chunks/{chunk-5FK4MSHB.js → chunk-LADOQIYQ.js} +6 -4
  122. package/chunks/{chunk-DJXSOEFB.js → chunk-LAE6RY3L.js} +1 -1
  123. package/chunks/{chunk-CQPM66MG.js → chunk-LG475XAV.js} +4 -4
  124. package/chunks/{chunk-3BZI5GDP.js → chunk-M5YIHMXP.js} +6 -4
  125. package/chunks/{chunk-6WXVEDT2.js → chunk-MC2RYJMU.js} +5 -3
  126. package/chunks/chunk-MNU36NGH.js +233 -0
  127. package/chunks/{chunk-M4U2LTD2.js → chunk-MS4SXNJ6.js} +1 -1
  128. package/chunks/{chunk-ZFHKUQZ4.js → chunk-NEVUE35Z.js} +5 -5
  129. package/chunks/{chunk-DRAX5YAI.js → chunk-NFC4WTY2.js} +6 -4
  130. package/chunks/{chunk-SOLRBF7L.js → chunk-NSKNTJHU.js} +10 -10
  131. package/chunks/{chunk-B5TJK7B3.js → chunk-NZRX5WYI.js} +1 -1
  132. package/chunks/{chunk-YM6KUQ2S.js → chunk-O4A2B6V2.js} +3 -3
  133. package/chunks/{chunk-DX6JTDMR.js → chunk-OB57Y2WH.js} +1 -1
  134. package/chunks/{chunk-INN5ORKX.js → chunk-OLFTIODD.js} +1 -1
  135. package/chunks/chunk-PF3RVYRK.js +108 -0
  136. package/chunks/{chunk-WSJI6ODG.js → chunk-PGMF3LSO.js} +29 -27
  137. package/chunks/{chunk-OALXNGUA.js → chunk-PJ3GAHED.js} +10 -10
  138. package/chunks/{chunk-XWJFDJZK.js → chunk-PJSZXERN.js} +1 -1
  139. package/chunks/{chunk-GSAOVDTH.js → chunk-POMFSBEC.js} +4 -4
  140. package/chunks/{chunk-EWNKP4V4.js → chunk-PPVM7YLS.js} +1 -1
  141. package/chunks/{chunk-WK6DEH3Q.js → chunk-PQQV3OBW.js} +6 -4
  142. package/chunks/{chunk-BHVF3R6B.js → chunk-PZT2654P.js} +4 -4
  143. package/chunks/{chunk-ZSTCM3MX.js → chunk-Q5N5NEVT.js} +1 -1
  144. package/chunks/{chunk-KFFCDLKV.js → chunk-QE36VXWP.js} +1 -1
  145. package/chunks/{chunk-V545KI73.js → chunk-QPTE6BKL.js} +1 -1
  146. package/chunks/{chunk-5VQR2DD7.js → chunk-QQPRTJOM.js} +5 -3
  147. package/chunks/{chunk-QIPLWW6Q.js → chunk-QU7T5PKF.js} +1 -1
  148. package/chunks/{chunk-Y2KJC55Y.js → chunk-QYT7J3UM.js} +4 -4
  149. package/chunks/{chunk-SFHX5G2S.js → chunk-R34ALEH5.js} +14 -14
  150. package/chunks/{chunk-TXTCM3TC.js → chunk-R4DAJXOV.js} +18 -14
  151. package/chunks/{chunk-2GP6BQ2J.js → chunk-RA6PKQVM.js} +2 -2
  152. package/chunks/{chunk-HXUI5D4H.js → chunk-RDN5ITXF.js} +1 -1
  153. package/chunks/{chunk-G6UUOCUT.js → chunk-RMI3DKMV.js} +1 -1
  154. package/chunks/chunk-RSFNJ6UU.js +1252 -0
  155. package/chunks/{chunk-EDIDYZBT.js → chunk-RVT5L74D.js} +1 -1
  156. package/chunks/{chunk-GI7SLDOI.js → chunk-RXP5FVC4.js} +6 -6
  157. package/chunks/chunk-S34QJ6IR.js +290 -0
  158. package/chunks/chunk-S5BHLTHK.js +190 -0
  159. package/chunks/{chunk-2XRE4KE4.js → chunk-S7BE3FMA.js} +1 -1
  160. package/chunks/{chunk-7O5PYQ3M.js → chunk-SBP43AO6.js} +1 -1
  161. package/chunks/chunk-SLHYLVRW.js +1377 -0
  162. package/chunks/{chunk-HNFKYKHH.js → chunk-SMAAYU3F.js} +16 -16
  163. package/chunks/{chunk-KAYC5FBN.js → chunk-SNPYTKXI.js} +825 -234
  164. package/chunks/{chunk-IKBEIDOH.js → chunk-SOZJODVX.js} +13 -13
  165. package/chunks/{chunk-Y4NNIGYO.js → chunk-SSFOFDNL.js} +1 -1
  166. package/chunks/{chunk-WNQIJTOP.js → chunk-SSGVTJ2W.js} +243 -17
  167. package/chunks/{chunk-NFXXBWSE.js → chunk-SU64336V.js} +2 -2
  168. package/chunks/chunk-TFDCK56Y.js +154 -0
  169. package/chunks/{chunk-JRHKM3YQ.js → chunk-TS4JJ7NN.js} +2 -2
  170. package/chunks/{chunk-C4HBZQNH.js → chunk-U3MTHCJF.js} +1 -1
  171. package/chunks/{chunk-AUX2FL5T.js → chunk-UBQVV7MX.js} +625 -6
  172. package/chunks/{chunk-B6RMK4ED.js → chunk-UHBYCY7U.js} +9 -7
  173. package/chunks/{chunk-Y53DG2HA.js → chunk-UIWUFHRJ.js} +1 -1
  174. package/chunks/chunk-UQRDQCWF.js +102 -0
  175. package/chunks/{chunk-NKTMUPHJ.js → chunk-UVMU7DDP.js} +5 -3
  176. package/chunks/chunk-UXEI7POA.js +273 -0
  177. package/chunks/chunk-V2XJJTAB.js +228 -0
  178. package/chunks/chunk-VDNCKE2O.js +24 -0
  179. package/chunks/{chunk-YQQ2U7AS.js → chunk-VISF4MEY.js} +1 -1
  180. package/chunks/{chunk-RRI764F7.js → chunk-VPFKSRAB.js} +13 -11
  181. package/chunks/chunk-VPGRGNNH.js +578 -0
  182. package/chunks/{chunk-SYMXYRM5.js → chunk-W7JWIIRC.js} +1 -1
  183. package/chunks/{chunk-AZCTY64Z.js → chunk-WEUQIY3Q.js} +1 -1
  184. package/chunks/{chunk-SSWTA7CH.js → chunk-WIKUMTAB.js} +12 -12
  185. package/chunks/chunk-WL2CTQGT.js +1625 -0
  186. package/chunks/chunk-WL2V7PTE.js +78 -0
  187. package/chunks/{chunk-Q54O3EIA.js → chunk-WSZ6VS24.js} +45 -30
  188. package/chunks/{chunk-UZSB57EV.js → chunk-WX4W3FCV.js} +5 -5
  189. package/chunks/{chunk-OSG23MR3.js → chunk-X3T5IOX6.js} +2 -2
  190. package/chunks/{chunk-EIBECN2J.js → chunk-XGHVF5DC.js} +5 -5
  191. package/chunks/{chunk-D3KVGQUV.js → chunk-XJ52OCCN.js} +4 -4
  192. package/chunks/{chunk-YZXSDPOQ.js → chunk-XMAIUTED.js} +84 -40
  193. package/chunks/{chunk-QGEISOJ2.js → chunk-XQBZZVJA.js} +3 -3
  194. package/chunks/{chunk-OZEV3R3S.js → chunk-XYAB5R6E.js} +3 -3
  195. package/chunks/chunk-XZA32HII.js +19 -0
  196. package/chunks/{chunk-4FLUQWJ4.js → chunk-Y3Q5OK4D.js} +1 -1
  197. package/chunks/chunk-YDERQ7ZV.js +248 -0
  198. package/chunks/{chunk-AKRSSKUT.js → chunk-YFHX6MOF.js} +10 -10
  199. package/chunks/{chunk-ZMYKNKET.js → chunk-YPJZDZMP.js} +3 -3
  200. package/chunks/{chunk-3XBUCOWS.js → chunk-YSD6IY6F.js} +2 -2
  201. package/chunks/{chunk-CH2YDT6X.js → chunk-YVYK3JYU.js} +5 -3
  202. package/chunks/{chunk-YL3UJML3.js → chunk-YWDVNBGE.js} +4 -4
  203. package/chunks/{chunk-C3T6HPNM.js → chunk-ZGADNVME.js} +5 -5
  204. package/chunks/{chunk-M3JGHRMQ.js → chunk-ZJ7KIWG5.js} +1 -1
  205. package/chunks/{chunk-QHSOINX6.js → chunk-ZJBYZN5D.js} +2 -2
  206. package/chunks/{chunk-SYROIHU7.js → chunk-ZRQGTRHA.js} +4 -2
  207. package/chunks/{chunk-NCPFOLM2.js → chunk-ZTBP4SFC.js} +78 -18
  208. package/chunks/{chunk-ZAFYHRVY.js → chunk-ZYDMQCQP.js} +4 -274
  209. package/chunks/clip-audio-SH4L7AEY.js +255 -0
  210. package/chunks/clip-image-BQRPECIS.js +239 -0
  211. package/chunks/clip-video-JIRMV5IH.js +277 -0
  212. package/chunks/{codex-subagent-executor-AEAIQZDC.js → codex-subagent-executor-Y5ILNWG6.js} +92 -68
  213. package/chunks/config-3X4AXU45.js +21 -0
  214. package/chunks/config-T5RO4NJV.js +17 -0
  215. package/chunks/config-utils-3YNEDKT4.js +151 -0
  216. package/chunks/contextCommand-7JVXVYN4.js +144 -0
  217. package/chunks/convert-image-D52K2FFB.js +231 -0
  218. package/chunks/{core-runtime-ZI4RTOJQ.js → core-runtime-6IZNPJUN.js} +92 -67
  219. package/chunks/{create-sub-session-BBWFQARJ.js → create-sub-session-5XHUO2PW.js} +90 -66
  220. package/chunks/{create-sub-session-MSGNIM37.js → create-sub-session-6EDEANCD.js} +7 -5
  221. package/chunks/{cron-create-U2JJ5CCF.js → cron-create-GS7ORRO6.js} +8 -5
  222. package/chunks/{cron-delete-7DM4LJWD.js → cron-delete-3GGDNNXD.js} +8 -5
  223. package/chunks/{cron-list-VCUSZK2Y.js → cron-list-EX27DW4H.js} +8 -5
  224. package/chunks/{daemon-git-worktree-guard-KECEMV6A.js → daemon-git-worktree-guard-BULXRIDA.js} +90 -66
  225. package/chunks/daemon-status-provider-VSVXVY4O.js +155 -0
  226. package/chunks/daemon-trust-policy-WVSDS2WT.js +150 -0
  227. package/chunks/{daemon-trust-policy-monitor-546N5ZVL.js → daemon-trust-policy-monitor-HXQ2GLTX.js} +95 -71
  228. package/chunks/deferred-core-runtime-EXI7LXLE.js +153 -0
  229. package/chunks/{display-image-QTHALY6N.js → display-image-FTWDRBOP.js} +10 -7
  230. package/chunks/{dist-BNW423XT.js → dist-CXDHIHN4.js} +5 -0
  231. package/chunks/downsample-audio-LPDWX6GF.js +217 -0
  232. package/chunks/downsample-image-A5JEYIV5.js +249 -0
  233. package/chunks/downscale-video-4W5BX5KO.js +249 -0
  234. package/chunks/{earlyInputCapture-BXP7V2P3.js → earlyInputCapture-UJ3KFVZQ.js} +3 -2
  235. package/chunks/{edit-CMSQB7NP.js → edit-JJ34NKRC.js} +68 -56
  236. package/chunks/{en-56QLKXS2.js → en-FCK6MBTI.js} +16 -0
  237. package/chunks/{enter-worktree-DA6A4XC5.js → enter-worktree-QK7DR5EF.js} +12 -9
  238. package/chunks/{enterPlanMode-UDPMNESD.js → enterPlanMode-H6FBPVLB.js} +62 -51
  239. package/chunks/environment-7DMLANWW.js +167 -0
  240. package/chunks/errors-OH3DYEDL.js +151 -0
  241. package/chunks/{exec-RPKEY6HP.js → exec-7CFNHYCV.js} +31 -9
  242. package/chunks/{exit-worktree-4H6Z2VQI.js → exit-worktree-62COYIHF.js} +14 -10
  243. package/chunks/exitPlanMode-5YR5VWXS.js +102 -0
  244. package/chunks/extract-audio-GSSZQV6G.js +229 -0
  245. package/chunks/extract-keyframes-Q6DRMQAJ.js +621 -0
  246. package/chunks/{fast-path-F2CYDDZ4.js → fast-path-4DS2GR5O.js} +5 -5
  247. package/chunks/ffmpeg-N4LIIVNR.js +21 -0
  248. package/chunks/{glob-Z2JMJKKN.js → glob-GFID3F3R.js} +63 -51
  249. package/chunks/{goal-tools-HXVVLGCV.js → goal-tools-2OB5WPNH.js} +59 -49
  250. package/chunks/{grep-H2I33VAO.js → grep-JB5DGQ3B.js} +13 -9
  251. package/chunks/handleAutoUpdate-5OQL4YBU.js +147 -0
  252. package/chunks/i18n-TV5G7SXO.js +164 -0
  253. package/chunks/{image-gen-HIAZCB5T.js → image-gen-LX3C4V3R.js} +16 -11
  254. package/chunks/initializer-R2EI4UJ6.js +151 -0
  255. package/chunks/installationInfo-HYOWC3BN.js +145 -0
  256. package/chunks/{keychain-token-storage-NQ5XWIPX.js → keychain-token-storage-ZZNRE6D4.js} +3 -2
  257. package/chunks/list-ORJQQUNR.js +154 -0
  258. package/chunks/{list-agents-EWDCEPIW.js → list-agents-HS6HH4DJ.js} +10 -7
  259. package/chunks/{llm-LSUBOJAR.js → llm-YKBQVN7S.js} +159 -134
  260. package/chunks/{llm-content-generator-MLIONRXE.js → llm-content-generator-QJBXJRKT.js} +11 -9
  261. package/chunks/loadedSettingsAdapter-4FQH6Y3D.js +148 -0
  262. package/chunks/{loggingContentGenerator-TUPEXFMM.js → loggingContentGenerator-DEOANG3F.js} +74 -63
  263. package/chunks/{loop-wakeup-ZBVRI6VH.js → loop-wakeup-4B7OY3TV.js} +9 -6
  264. package/chunks/{ls-6ZB3BEIR.js → ls-EZ5PSWU2.js} +8 -5
  265. package/chunks/{lsp-M54FQARP.js → lsp-DYFFHKB3.js} +6 -3
  266. package/chunks/{managed-npm-update-WEA5XMFZ.js → managed-npm-update-36U25ZEZ.js} +91 -67
  267. package/chunks/mcp-ZI7LXLAQ.js +148 -0
  268. package/chunks/memory-side-query-DRV7FXK4.js +221 -0
  269. package/chunks/model-call-collection-RX7C24YP.js +171 -0
  270. package/chunks/model-configuration-3JIO6IRV.js +161 -0
  271. package/chunks/modelConfigUtils-2BJQI2S4.js +140 -0
  272. package/chunks/{monitor-CI7YE7MT.js → monitor-LXQRI2IF.js} +63 -51
  273. package/chunks/nonInteractiveCli-HRXVUV2H.js +235 -0
  274. package/chunks/nonInteractiveToolExecutor-QPAIKNPL.js +101 -0
  275. package/chunks/{notebook-edit-3WCVRNGL.js → notebook-edit-5CM3VYNK.js} +63 -52
  276. package/chunks/ocr-image-Q4HYJ3U7.js +252 -0
  277. package/chunks/omni-A5XLPNSH.js +147 -0
  278. package/chunks/{openaiContentGenerator-OGILGUZE.js → openaiContentGenerator-O5G3QCHX.js} +36 -31
  279. package/chunks/{openaiResponsesContentGenerator-NXOXUPFM.js → openaiResponsesContentGenerator-W2V7AYVE.js} +12 -10
  280. package/chunks/pidfile-MI5FGYF5.js +151 -0
  281. package/chunks/{processUtils-O4II3RYH.js → processUtils-EWKUPVJH.js} +2 -2
  282. package/chunks/prompt-terminal-ledger-5HEXZMWT.js +143 -0
  283. package/chunks/{qwenContentGenerator-I4LRYADV.js → qwenContentGenerator-HHNDIW2Q.js} +70 -60
  284. package/chunks/{qwenOAuth2-3J66TOT5.js → qwenOAuth2-GD3UIYUP.js} +9 -8
  285. package/chunks/reactive-degrade-KWCJUHXH.js +375 -0
  286. package/chunks/read-file-ZQKBXJSH.js +37 -0
  287. package/chunks/{read-mcp-resource-LPSWXVOD.js → read-mcp-resource-INJIV3UC.js} +8 -4
  288. package/chunks/recall-media-memory-tool-PEE2BWRY.js +198 -0
  289. package/chunks/{record-artifact-L3CFJOMA.js → record-artifact-KKW3AIMJ.js} +6 -4
  290. package/chunks/record-source-2VSQINX6.js +24 -0
  291. package/chunks/{report-findings-LY5HQY4K.js → report-findings-OZSLWYAS.js} +7 -5
  292. package/chunks/{request-shutdown-53SNYGVR.js → request-shutdown-3RUGTWRR.js} +12 -9
  293. package/chunks/resumeHistoryUtils-5V3KISJ6.js +156 -0
  294. package/chunks/ripGrep-F5MM4HGA.js +43 -0
  295. package/chunks/{run-qwen-serve-ZVEKGS7Y.js → run-qwen-serve-3K3D5MSR.js} +70 -70
  296. package/chunks/{runtime-SJCRYNPA.js → runtime-FAWN3GQH.js} +98 -74
  297. package/chunks/sandbox-BPRE7KYF.js +170 -0
  298. package/chunks/sandboxConfig-V3OHETXW.js +138 -0
  299. package/chunks/scheduled-tasks-LB2PINB3.js +167 -0
  300. package/chunks/scheduler-NHAWKARI.js +160 -0
  301. package/chunks/{sdk-exporters-http-DR4G663K.js → sdk-exporters-http-SWXTEEVT.js} +3 -2
  302. package/chunks/{sdk-impl-SJR26MQF.js → sdk-impl-FK4JY6LX.js} +5 -4
  303. package/chunks/{send-message-DN76MXDX.js → send-message-TLF36UW2.js} +16 -13
  304. package/chunks/serve-UQL5X5K7.js +156 -0
  305. package/chunks/{server-UHMKPCAZ.js → server-3HUUEDUC.js} +286 -261
  306. package/chunks/{session-ZLUK7E4P.js → session-XODWSTJ3.js} +151 -127
  307. package/chunks/session-attachments-root-BENUIMZM.js +141 -0
  308. package/chunks/{session-pr-refresh-3OMTQWCZ.js → session-pr-refresh-CSRULMTI.js} +95 -71
  309. package/chunks/{settings-P4DHIIUP.js → settings-42FFX5TK.js} +94 -70
  310. package/chunks/{shell-IMFUVQQ5.js → shell-NLNU2TPF.js} +59 -49
  311. package/chunks/{skill-NB5RJGZW.js → skill-KIRNNJMK.js} +22 -17
  312. package/chunks/skill-settings-MPHPE43F.js +164 -0
  313. package/chunks/spawnChannel-TXNLXP2R.js +152 -0
  314. package/chunks/standalone-update-XAC364AM.js +156 -0
  315. package/chunks/{start-opentui-ui-JKAIWGF7.js → start-opentui-ui-3OLDXRMX.js} +223 -189
  316. package/chunks/{startInteractiveUI-YRPOT6GH.js → startInteractiveUI-UB2HRTV7.js} +339 -295
  317. package/chunks/storage-VZECDJNX.js +17 -0
  318. package/chunks/{syntheticOutput-EX5L5GYI.js → syntheticOutput-SSXJ2NEY.js} +5 -3
  319. package/chunks/task-create-EEMYF6LY.js +30 -0
  320. package/chunks/{task-list-ZLJSMRFA.js → task-list-GA5GOR74.js} +9 -6
  321. package/chunks/{task-stop-MD7P6QGK.js → task-stop-3MXTDL7H.js} +6 -3
  322. package/chunks/{task-update-3LSYQDRW.js → task-update-JSBHKL4L.js} +16 -13
  323. package/chunks/{team-create-2XTBYRJF.js → team-create-VES6TOBA.js} +62 -51
  324. package/chunks/{team-delete-RIDINW6I.js → team-delete-V2CROTI6.js} +9 -6
  325. package/chunks/{team-plan-approval-CFNWW7ZQ.js → team-plan-approval-ZMCHBBUM.js} +61 -50
  326. package/chunks/terminal-image-renderer-73NDY7OJ.js +156 -0
  327. package/chunks/theme-manager-YG3L7BV6.js +140 -0
  328. package/chunks/{todoWrite-XSTG2VT5.js → todoWrite-CMBHPR66.js} +8 -5
  329. package/chunks/tool-result-media-V3LNDB5Q.js +45 -0
  330. package/chunks/{tool-search-ZHTJU2MV.js → tool-search-7XR7RHMB.js} +43 -21
  331. package/chunks/total-session-admission-QUZYGACG.js +151 -0
  332. package/chunks/transcribe-audio-AJQZPNEV.js +30 -0
  333. package/chunks/trustedFolders-QRII2BL7.js +160 -0
  334. package/chunks/understand-video-segments-5TMRDQUB.js +438 -0
  335. package/chunks/{update-relaunch-LI7GRP36.js → update-relaunch-735DXN5P.js} +5 -5
  336. package/chunks/updateCheck-FXXOM4YS.js +156 -0
  337. package/chunks/upload-cache-5YULQVZZ.js +17 -0
  338. package/chunks/upload-config-CKDIXTPK.js +25 -0
  339. package/chunks/useAutoAcceptIndicator-KXXTKOGD.js +158 -0
  340. package/chunks/{validateNonInterActiveAuth-YFPCYYNL.js → validateNonInterActiveAuth-DXCBDHIX.js} +143 -119
  341. package/chunks/{version-4MTL4JVU.js → version-76T4NBMQ.js} +1 -1
  342. package/chunks/{web-fetch-O6RG6ISB.js → web-fetch-UIDZX5RN.js} +27 -20
  343. package/chunks/{web-search-JHAXVEMD.js → web-search-VETWDOUJ.js} +14 -11
  344. package/chunks/{web-shell-static-FFWCUUZS.js → web-shell-static-XSCCMXKQ.js} +3 -3
  345. package/chunks/{workflow-O7L6VDYU.js → workflow-MHYBJHPP.js} +63 -52
  346. package/chunks/workspace-providers-status-WFBT3LS5.js +154 -0
  347. package/chunks/{workspace-registration-store-7G4E7YPY.js → workspace-registration-store-M3WKKBJQ.js} +1 -1
  348. package/chunks/workspace-registry-FIUB7MGD.js +160 -0
  349. package/chunks/workspace-runtime-coordinator-5Z7M36W7.js +163 -0
  350. package/chunks/workspace-service-TP4VRTZF.js +165 -0
  351. package/chunks/workspace-skills-status-CILWVQHU.js +151 -0
  352. package/chunks/{workspace-trust-reconciler-XEBW5FUL.js → workspace-trust-reconciler-2OPSTQNS.js} +98 -74
  353. package/chunks/write-file-N7NBKIYD.js +107 -0
  354. package/chunks/{zh-TW-S3YTQ4DS.js → zh-TW-SRB5QSER.js} +16 -0
  355. package/chunks/{zh-F76MZTL3.js → zh-UBQIFP4A.js} +16 -0
  356. package/chunks/{zoom-image-RDPRTP4B.js → zoom-image-3GHVMYEW.js} +18 -13
  357. package/cli.js +14 -14
  358. package/export-transcript-document.js +3 -3
  359. package/locales/en.js +18 -0
  360. package/locales/zh-TW.js +17 -0
  361. package/locales/zh.js +17 -0
  362. package/package.json +3 -3
  363. package/web-shell/assets/{abnfDiagram-VCTEODGH-RxykUDmi.js → abnfDiagram-VCTEODGH-vfbwxn7H.js} +1 -1
  364. package/web-shell/assets/{arc-CZpgGCJC.js → arc-BT0KMrP5.js} +1 -1
  365. package/web-shell/assets/{architectureDiagram-5GKGNRK7-BHSMzNDT.js → architectureDiagram-5GKGNRK7-B3TlGgP4.js} +1 -1
  366. package/web-shell/assets/{blockDiagram-NRAW4CY4-Bn4mF9SZ.js → blockDiagram-NRAW4CY4-DnwF5xi-.js} +1 -1
  367. package/web-shell/assets/{c4Diagram-UCG6FXSJ-CBM-Bj6t.js → c4Diagram-UCG6FXSJ-8qvMMfFg.js} +1 -1
  368. package/web-shell/assets/channel-CTm0xByY.js +1 -0
  369. package/web-shell/assets/{chunk-2Q5K7J3B-D5Fin58O.js → chunk-2Q5K7J3B-CHM51UX6.js} +1 -1
  370. package/web-shell/assets/{chunk-5VM5RSS4-CY05weF7.js → chunk-5VM5RSS4-BNXaOtyN.js} +1 -1
  371. package/web-shell/assets/{chunk-F27PBJKO-3neZnj5Y.js → chunk-F27PBJKO-DT-vcF3X.js} +1 -1
  372. package/web-shell/assets/{chunk-G27WJ6UU-Cd7EU4BE.js → chunk-G27WJ6UU-BXz8438J.js} +1 -1
  373. package/web-shell/assets/{chunk-JWPE2WC7-DwK1mqFw.js → chunk-JWPE2WC7-CP2ozL3M.js} +1 -1
  374. package/web-shell/assets/{chunk-LCL6LL3I-Sl7vY22C.js → chunk-LCL6LL3I-DTAWXvja.js} +1 -1
  375. package/web-shell/assets/{chunk-POPQ4Y6H-BXNzpbVg.js → chunk-POPQ4Y6H-DZENJpGx.js} +1 -1
  376. package/web-shell/assets/{chunk-SVP7TREG-DjjButcp.js → chunk-SVP7TREG-Dl8djRwv.js} +1 -1
  377. package/web-shell/assets/{chunk-XXDRQBXY-DNOiCjOJ.js → chunk-XXDRQBXY-B3lJllMA.js} +1 -1
  378. package/web-shell/assets/classDiagram-DTDB5LWJ-DhMuMK_E.js +1 -0
  379. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DhMuMK_E.js +1 -0
  380. package/web-shell/assets/{cose-bilkent-JH36ORCC-BUnker7a.js → cose-bilkent-JH36ORCC-DeosJDcB.js} +1 -1
  381. package/web-shell/assets/{cynefin-OW5HDTMX-DcUgdWE5.js → cynefin-OW5HDTMX-BvqcLoHm.js} +1 -1
  382. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-CvDKsZsL.js → cynefinDiagram-5FMLGOSQ-BYS0pmSs.js} +1 -1
  383. package/web-shell/assets/{dagre-3AP2YEHR-jpCmUbr1.js → dagre-3AP2YEHR-IDScuL-R.js} +1 -1
  384. package/web-shell/assets/{diagram-S7CK7UJ4-DBe_bKE5.js → diagram-S7CK7UJ4-EYNlkkKJ.js} +1 -1
  385. package/web-shell/assets/{diagram-UQ7AKVKN-oXvPpDgs.js → diagram-UQ7AKVKN-D3x9g8Ep.js} +1 -1
  386. package/web-shell/assets/{diagram-VSXAHHWV-BD7-_SGh.js → diagram-VSXAHHWV-C35O1dtR.js} +1 -1
  387. package/web-shell/assets/{diagram-VX7I27RA-DOJL0wub.js → diagram-VX7I27RA-XvMv2aCN.js} +1 -1
  388. package/web-shell/assets/{diagram-Z3DM3KII-DRIiodDD.js → diagram-Z3DM3KII-CeryNvru.js} +1 -1
  389. package/web-shell/assets/{ebnfDiagram-PWID7BFC-Db31Ulmb.js → ebnfDiagram-PWID7BFC-DAmepjvB.js} +1 -1
  390. package/web-shell/assets/{erDiagram-SSCWMZ5O-CVHhwI2_.js → erDiagram-SSCWMZ5O-BkGfBZt_.js} +1 -1
  391. package/web-shell/assets/{flowDiagram-A5DVABFB-DWOFy1FK.js → flowDiagram-A5DVABFB-CzUCgun9.js} +1 -1
  392. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-C0sxQtPd.js → ganttDiagram-EL5Y4UJY-BIFST90r.js} +1 -1
  393. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-CNituBYC.js → gitGraphDiagram-WWUBYQGX-jVvRSGcu.js} +1 -1
  394. package/web-shell/assets/{index-B15NlwB8.js → index-M1TfOjx2.js} +457 -457
  395. package/web-shell/assets/{index-gm9tLk7h.js → index-krCDFzE6.js} +1 -1
  396. package/web-shell/assets/{infoDiagram-RXCK75RN-CxhJYtIR.js → infoDiagram-RXCK75RN-DsU7vA4Q.js} +1 -1
  397. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-By2mchUy.js → ishikawaDiagram-5VMMS53U-K9mTNAbN.js} +1 -1
  398. package/web-shell/assets/{journeyDiagram-EYS64GPL-CVH-OweI.js → journeyDiagram-EYS64GPL-BKuHLGxv.js} +1 -1
  399. package/web-shell/assets/{kanban-definition-3QL26DDD-Cc9dQXLy.js → kanban-definition-3QL26DDD-CXG9frQ_.js} +1 -1
  400. package/web-shell/assets/{layout-C_60ysHw.js → layout-6G_l7UoH.js} +1 -1
  401. package/web-shell/assets/{linear-BvAVfqwu.js → linear-DYpvB2mh.js} +1 -1
  402. package/web-shell/assets/{mermaid.core-C3CoBKAc.js → mermaid.core-Sj3dJttQ.js} +6 -6
  403. package/web-shell/assets/{mindmap-definition-FBJOCRG2-Cuu8Q8LM.js → mindmap-definition-FBJOCRG2-DNJ1e6qd.js} +1 -1
  404. package/web-shell/assets/{pegDiagram-XKGWAZYB-DmAeyDO2.js → pegDiagram-XKGWAZYB-D-KPklHv.js} +1 -1
  405. package/web-shell/assets/{pieDiagram-E7YTZNPT-B7vbB_xv.js → pieDiagram-E7YTZNPT-BQPm03g2.js} +1 -1
  406. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-BqOBkRR7.js → quadrantDiagram-AXDQQJYC-BubBXSqD.js} +1 -1
  407. package/web-shell/assets/{railroadDiagram-O6MQD6OU-sI06lZIu.js → railroadDiagram-O6MQD6OU-DatD6KIT.js} +1 -1
  408. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-Bg13d10S.js → requirementDiagram-EFPCY7ZU-DiQ6jsZY.js} +1 -1
  409. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-WFOzZHrR.js → sankeyDiagram-P5KCCOFB-C07fyxbH.js} +1 -1
  410. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-CCdRbA4E.js → sequenceDiagram-WJ2MYXX4-DWXtsWzI.js} +1 -1
  411. package/web-shell/assets/{sizeCapture-X5ZJPWSS-BH5F3bGg.js → sizeCapture-X5ZJPWSS-B0cQ1v0l.js} +1 -1
  412. package/web-shell/assets/{stateDiagram-HBIQ2CUA-NwS2X3QB.js → stateDiagram-HBIQ2CUA-zHgWc00n.js} +1 -1
  413. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-C-3ZC2nf.js +1 -0
  414. package/web-shell/assets/{swimlanes-XN3QIQJK-Bm38pM28.js → swimlanes-XN3QIQJK-Dnrrhu0H.js} +1 -1
  415. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Ded1L5cw.js +8 -0
  416. package/web-shell/assets/{timeline-definition-24CTP7MA-Do-agLSo.js → timeline-definition-24CTP7MA-8BV7W2Xq.js} +1 -1
  417. package/web-shell/assets/{vennDiagram-4TSXK5OY-aggLfZzl.js → vennDiagram-4TSXK5OY-tmBBtlnj.js} +1 -1
  418. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-D5JR3mXX.js → wardleyDiagram-VM6X3IG4-Cq96T3gb.js} +1 -1
  419. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-DhtLDuXs.js → xychartDiagram-S5SC5T6Z-Dpzx_ZGQ.js} +1 -1
  420. package/web-shell/index.html +1 -1
  421. package/chunks/MaxSizedBox-FCF6M53W.js +0 -124
  422. package/chunks/acp-subagent-executor-TND6W2O5.js +0 -140
  423. package/chunks/agent-headless-EJ4QOUSM.js +0 -94
  424. package/chunks/bridge-MUX5YJZT.js +0 -132
  425. package/chunks/channel-settings-store-7CBIRZER.js +0 -134
  426. package/chunks/config-utils-KX2YS725.js +0 -127
  427. package/chunks/contextCommand-RV6Y5LNJ.js +0 -120
  428. package/chunks/daemon-status-provider-NULJNAEV.js +0 -131
  429. package/chunks/daemon-trust-policy-S4KWGPV3.js +0 -126
  430. package/chunks/deferred-core-runtime-T23ZT443.js +0 -128
  431. package/chunks/environment-TSQJUTPV.js +0 -143
  432. package/chunks/errors-RIVYJS6T.js +0 -127
  433. package/chunks/exitPlanMode-BYBBFN2T.js +0 -92
  434. package/chunks/handleAutoUpdate-FZP45KOR.js +0 -123
  435. package/chunks/i18n-OTB62AKW.js +0 -140
  436. package/chunks/initializer-4JXZEC4B.js +0 -127
  437. package/chunks/installationInfo-2IJV5QKC.js +0 -121
  438. package/chunks/list-KQSQ4A5G.js +0 -130
  439. package/chunks/loadedSettingsAdapter-TZTTNRHI.js +0 -124
  440. package/chunks/mcp-TFDTUPIA.js +0 -124
  441. package/chunks/model-configuration-ZCAKKIOF.js +0 -137
  442. package/chunks/modelConfigUtils-J3ZPW7ZK.js +0 -116
  443. package/chunks/nonInteractiveCli-GPT3TVOK.js +0 -211
  444. package/chunks/pidfile-GBTBIGHF.js +0 -127
  445. package/chunks/prompt-terminal-ledger-ILIXZI3E.js +0 -119
  446. package/chunks/read-file-G4XKW2CS.js +0 -31
  447. package/chunks/record-source-2GSY5JD5.js +0 -22
  448. package/chunks/resumeHistoryUtils-YPJU4XFE.js +0 -132
  449. package/chunks/ripGrep-AAKMALLM.js +0 -39
  450. package/chunks/sandbox-UIXL423Z.js +0 -146
  451. package/chunks/sandboxConfig-CY343YNJ.js +0 -114
  452. package/chunks/scheduled-tasks-5UGBEVNZ.js +0 -143
  453. package/chunks/scheduler-GCZYLZ2P.js +0 -136
  454. package/chunks/serve-2XXQLVK2.js +0 -132
  455. package/chunks/session-attachments-root-DHQM5IEZ.js +0 -117
  456. package/chunks/skill-settings-IXG5CTQO.js +0 -140
  457. package/chunks/spawnChannel-Q3YALTCJ.js +0 -128
  458. package/chunks/standalone-update-H5OJ7MM7.js +0 -132
  459. package/chunks/task-create-75HVPEAH.js +0 -28
  460. package/chunks/terminal-image-renderer-UDPJPGPQ.js +0 -132
  461. package/chunks/theme-manager-SK57EKMO.js +0 -116
  462. package/chunks/total-session-admission-UUZBDQCG.js +0 -127
  463. package/chunks/trustedFolders-4LDBLNTS.js +0 -136
  464. package/chunks/updateCheck-PKSSORPO.js +0 -132
  465. package/chunks/useAutoAcceptIndicator-I32UEQPI.js +0 -134
  466. package/chunks/workspace-providers-status-WRX6CJM4.js +0 -130
  467. package/chunks/workspace-registry-SXIMGT4D.js +0 -136
  468. package/chunks/workspace-runtime-coordinator-7DOEHXYT.js +0 -139
  469. package/chunks/workspace-service-HDXOZMYC.js +0 -141
  470. package/chunks/workspace-skills-status-VN4L37CA.js +0 -127
  471. package/chunks/write-file-LKX4ETIO.js +0 -97
  472. package/web-shell/assets/channel-DFYs_LlK.js +0 -1
  473. package/web-shell/assets/classDiagram-DTDB5LWJ-DnGrKXoM.js +0 -1
  474. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DnGrKXoM.js +0 -1
  475. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-1aU2JZXO.js +0 -1
  476. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Dp-u6kQG.js +0 -8
  477. package/chunks/{chunk-XAJZFGD2.js → chunk-PXXYQOZO.js} +8 -8
  478. package/chunks/{chunk-WVURIAEE.js → chunk-SVWWF5TZ.js} +3 -3
  479. package/chunks/{dist-G5UMXIGF.js → dist-I6D6XOWV.js} +1 -1
  480. package/chunks/{dist-UXVNLQHG.js → dist-VIKOMAGG.js} +3 -3
@@ -0,0 +1,443 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ requestOmniChatCompletion
5
+ } from "./chunk-WL2V7PTE.js";
6
+ import {
7
+ collapseRepetitionDegeneration
8
+ } from "./chunk-IVPSLX4P.js";
9
+ import {
10
+ BaseMediaPolicyTool,
11
+ BaseMediaPolicyToolInvocation,
12
+ MEDIA_POLICY_IO_SCHEMA_PROPERTIES,
13
+ assertMediaPolicyIo,
14
+ createPolicyToolTimeoutBudget,
15
+ mediaPolicyToolError,
16
+ mediaPolicyToolFailure,
17
+ mediaPolicyToolSuccess,
18
+ policyOutputFileName,
19
+ resolvePolicyToolSettings,
20
+ resolvePolicyToolTimeoutMs
21
+ } from "./chunk-UXEI7POA.js";
22
+ import {
23
+ recognizeMediaFile
24
+ } from "./chunk-S5BHLTHK.js";
25
+ import {
26
+ runFfmpeg
27
+ } from "./chunk-KSEKRQJO.js";
28
+ import "./chunk-MNU36NGH.js";
29
+ import "./chunk-BQMSZSG6.js";
30
+ import "./chunk-VPGRGNNH.js";
31
+ import {
32
+ ToolNames
33
+ } from "./chunk-ERIBG3BX.js";
34
+ import "./chunk-ZYDMQCQP.js";
35
+ import "./chunk-S34QJ6IR.js";
36
+ import "./chunk-TBWQLLFO.js";
37
+ import {
38
+ init_esbuild_shims
39
+ } from "./chunk-5O2XNYP6.js";
40
+ import {
41
+ __name
42
+ } from "./chunk-J2S4EL5Y.js";
43
+
44
+ // packages/core/src/omni/policy/tools/caption-audio.ts
45
+ init_esbuild_shims();
46
+ import fs from "node:fs/promises";
47
+ import path from "node:path";
48
+ var OMNI_CAPTION_AUDIO_TOOL_NAME = ToolNames.OMNI_CAPTION_AUDIO;
49
+ var CAPTION_AUDIO_DEFAULTS = {
50
+ model: "qwen3.5-omni-plus",
51
+ baseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1",
52
+ apiKeyEnv: "DASHSCOPE_API_KEY",
53
+ maxInputBytes: 10 * 1024 * 1024,
54
+ chunkSeconds: 180,
55
+ prompt: "\u8BF7\u63CF\u8FF0\u8FD9\u6BB5\u97F3\u9891\u7684\u5185\u5BB9\uFF0C\u5305\u62EC\u8BED\u97F3\u5927\u610F\u3001\u8BF4\u8BDD\u4EBA\u97F3\u8272\u3001\u80CC\u666F\u58F0\u97F3\u4E8B\u4EF6\u4E0E\u60C5\u7EEA\u6C1B\u56F4\u3002"
56
+ };
57
+ var CHUNK_CONCURRENCY = 3;
58
+ var MAX_SEGMENT_COUNT = 512;
59
+ var CHUNK_AUDIO_ARGS = [
60
+ "-vn",
61
+ "-c:a",
62
+ "aac",
63
+ "-b:a",
64
+ "32k",
65
+ "-ar",
66
+ "16000",
67
+ "-ac",
68
+ "1"
69
+ ];
70
+ var INPUT_AUDIO_FORMATS = {
71
+ "audio/wav": "wav",
72
+ "audio/mpeg": "mp3",
73
+ "audio/aac": "aac",
74
+ "audio/flac": "flac",
75
+ "audio/ogg": "ogg",
76
+ "audio/mp4": "m4a"
77
+ };
78
+ var TUNABLE_SCHEMA_PROPERTIES = {
79
+ prompt: {
80
+ type: "string",
81
+ description: "Understanding instruction the caption is written to (e.g. what aspects to describe: speech gist, timbre, sound events, mood). Default: a general semantic description."
82
+ },
83
+ model: {
84
+ type: "string",
85
+ description: "Omni understanding model id. Default 'qwen3.5-omni-plus'."
86
+ },
87
+ baseUrl: {
88
+ type: "string",
89
+ description: "OpenAI-compatible endpoint base URL the request is sent to. Defaults to the DashScope compatible-mode endpoint."
90
+ },
91
+ apiKeyEnv: {
92
+ type: "string",
93
+ description: "Environment variable holding the API key for the endpoint. Default 'DASHSCOPE_API_KEY'."
94
+ },
95
+ maxInputBytes: {
96
+ type: "number",
97
+ description: "Maximum input audio size in bytes. Default 10485760 (10MiB).",
98
+ minimum: 1
99
+ },
100
+ chunkSeconds: {
101
+ type: "number",
102
+ description: "Audio longer than this is split into segments of this length and each segment is described separately (per-segment time ranges are prefixed to the text). Default 180.",
103
+ minimum: 30,
104
+ maximum: 1800
105
+ }
106
+ };
107
+ var DESCRIPTOR = {
108
+ kind: "media_policy",
109
+ version: "1",
110
+ inputMediaTypes: ["audio"],
111
+ outputs: [
112
+ {
113
+ // Text-product protocol, role 'caption' (memory role enum预留,
114
+ // M §5.5). Unlike a transcript this is NOT verbatim speech: it is
115
+ // the model's semantic description (timbre, events, mood included).
116
+ kind: "file",
117
+ role: "caption",
118
+ mimeTypes: ["text/plain"],
119
+ required: true,
120
+ lossy: true
121
+ },
122
+ { kind: "text", role: "disclosure", required: true }
123
+ ],
124
+ settingsSchema: {
125
+ type: "object",
126
+ properties: TUNABLE_SCHEMA_PROPERTIES,
127
+ additionalProperties: false
128
+ },
129
+ // Endpoint + credential selection stays operator-controlled (same
130
+ // rationale as omni_transcribe_audio).
131
+ operatorOnlyParams: ["baseUrl", "apiKeyEnv"]
132
+ };
133
+ var readString = /* @__PURE__ */ __name((settings, key) => {
134
+ const value = settings[key];
135
+ return typeof value === "string" && value.length > 0 ? value : void 0;
136
+ }, "readString");
137
+ var readNumber = /* @__PURE__ */ __name((settings, key) => {
138
+ const value = settings[key];
139
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
140
+ }, "readNumber");
141
+ function formatClock(totalSeconds, withHours) {
142
+ const s = Math.round(totalSeconds);
143
+ const h = Math.floor(s / 3600);
144
+ const m = Math.floor(s % 3600 / 60);
145
+ const mm = String(m).padStart(2, "0");
146
+ const ss = String(s % 60).padStart(2, "0");
147
+ return withHours ? `${h}:${mm}:${ss}` : `${mm}:${ss}`;
148
+ }
149
+ __name(formatClock, "formatClock");
150
+ var CaptionAudioInvocation = class extends BaseMediaPolicyToolInvocation {
151
+ constructor(params, settingsDefaults, timeoutMs) {
152
+ super(params);
153
+ this.settingsDefaults = settingsDefaults;
154
+ this.timeoutMs = timeoutMs;
155
+ }
156
+ static {
157
+ __name(this, "CaptionAudioInvocation");
158
+ }
159
+ getDescription() {
160
+ return `Describe ${path.basename(this.params.inputPath)} with an omni model`;
161
+ }
162
+ async execute(signal) {
163
+ const settings = this.settingsDefaults;
164
+ const model = this.params.model ?? readString(settings, "model") ?? CAPTION_AUDIO_DEFAULTS.model;
165
+ const baseUrl = this.params.baseUrl ?? readString(settings, "baseUrl") ?? CAPTION_AUDIO_DEFAULTS.baseUrl;
166
+ const apiKeyEnv = this.params.apiKeyEnv ?? readString(settings, "apiKeyEnv") ?? CAPTION_AUDIO_DEFAULTS.apiKeyEnv;
167
+ const maxInputBytes = this.params.maxInputBytes ?? readNumber(settings, "maxInputBytes") ?? CAPTION_AUDIO_DEFAULTS.maxInputBytes;
168
+ const chunkSeconds = this.params.chunkSeconds ?? readNumber(settings, "chunkSeconds") ?? CAPTION_AUDIO_DEFAULTS.chunkSeconds;
169
+ const prompt = this.params.prompt ?? readString(settings, "prompt") ?? CAPTION_AUDIO_DEFAULTS.prompt;
170
+ try {
171
+ const { inputSizeBytes } = await assertMediaPolicyIo(this.params);
172
+ if (inputSizeBytes > maxInputBytes) {
173
+ return mediaPolicyToolError(
174
+ `input audio is ${inputSizeBytes} bytes, over the ${maxInputBytes}-byte caption limit`
175
+ );
176
+ }
177
+ const apiKey = process.env[apiKeyEnv];
178
+ if (!apiKey) {
179
+ return mediaPolicyToolError(
180
+ `environment variable ${apiKeyEnv} is not set; audio captioning is unavailable`
181
+ );
182
+ }
183
+ const recognized = await recognizeMediaFile(this.params.inputPath, {
184
+ expectedModality: "audio",
185
+ signal
186
+ });
187
+ const format = INPUT_AUDIO_FORMATS[recognized.detectedMimeType];
188
+ if (!format) {
189
+ return mediaPolicyToolError(
190
+ `audio container ${recognized.detectedMimeType} is not supported by ${OMNI_CAPTION_AUDIO_TOOL_NAME}`
191
+ );
192
+ }
193
+ const durationSeconds = recognized.metadata.durationMs !== void 0 && recognized.metadata.durationMs > 0 ? recognized.metadata.durationMs / 1e3 : void 0;
194
+ const backend = { model, baseUrl, apiKey, prompt };
195
+ const segmentCount = durationSeconds !== void 0 ? Math.ceil(durationSeconds / chunkSeconds) : 1;
196
+ if (segmentCount > MAX_SEGMENT_COUNT) {
197
+ return mediaPolicyToolError(
198
+ `container claims ${Math.round(durationSeconds ?? 0)}s of audio (${segmentCount} segments of ${chunkSeconds}s, over the ${MAX_SEGMENT_COUNT}-segment ceiling) \u2014 implausible for a ${inputSizeBytes}-byte input`
199
+ );
200
+ }
201
+ let caption;
202
+ let degeneratedSegments = 0;
203
+ let failedSegments = 0;
204
+ if (durationSeconds !== void 0 && segmentCount > 1) {
205
+ const chunked = await this.captionChunked({
206
+ backend,
207
+ durationSeconds,
208
+ segmentCount,
209
+ signal
210
+ });
211
+ if (!Array.isArray(chunked)) {
212
+ return chunked;
213
+ }
214
+ const withHours = Math.round(durationSeconds) >= 3600;
215
+ const lines = [];
216
+ const segmentLength = durationSeconds / segmentCount;
217
+ for (const [index, outcome] of chunked.entries()) {
218
+ const range = `[${formatClock(index * segmentLength, withHours)}-${formatClock(Math.min((index + 1) * segmentLength, durationSeconds), withHours)}]`;
219
+ if (outcome.text !== void 0) {
220
+ lines.push(`${range} ${outcome.text}`);
221
+ if (outcome.degenerated) degeneratedSegments++;
222
+ } else {
223
+ lines.push(`${range} \uFF08\u8BE5\u6BB5\u7406\u89E3\u5931\u8D25\uFF1A${outcome.failure}\uFF09`);
224
+ failedSegments++;
225
+ }
226
+ }
227
+ caption = lines.join("\n");
228
+ } else {
229
+ const bytes = await fs.readFile(this.params.inputPath);
230
+ const dataUri = `data:${recognized.detectedMimeType};base64,${bytes.toString("base64")}`;
231
+ const response = await requestOmniChatCompletion({
232
+ ...backend,
233
+ media: [{ type: "input_audio", data: dataUri, format }],
234
+ timeoutMs: this.timeoutMs,
235
+ signal,
236
+ tool: "omni_caption_audio"
237
+ });
238
+ if (!response.ok) {
239
+ return mediaPolicyToolError(
240
+ `caption request failed: ${response.error}`
241
+ );
242
+ }
243
+ const collapsed = collapseRepetitionDegeneration(response.text);
244
+ caption = collapsed.text;
245
+ if (collapsed.degenerated) degeneratedSegments = 1;
246
+ if (!caption) {
247
+ return mediaPolicyToolError("caption request returned empty text");
248
+ }
249
+ }
250
+ const outputFileName = policyOutputFileName({
251
+ inputPath: this.params.inputPath,
252
+ operation: "caption",
253
+ extension: ".txt"
254
+ });
255
+ const outputPath = path.join(this.params.outputDir, outputFileName);
256
+ const encoded = Buffer.from(caption, "utf-8");
257
+ await fs.writeFile(outputPath, encoded);
258
+ const durationPart = durationSeconds !== void 0 ? `${Math.round(durationSeconds)}s ` : "";
259
+ const segmentPart = segmentCount > 1 ? `\u5206 ${segmentCount} \u6BB5\u8BED\u4E49\u63CF\u8FF0` : "\u8BED\u4E49\u63CF\u8FF0";
260
+ const failurePart = failedSegments > 0 ? `\uFF08${failedSegments} \u6BB5\u5931\u8D25\uFF09` : "";
261
+ const degenerationPart = degeneratedSegments > 0 ? `\uFF0C${segmentCount > 1 ? `${degeneratedSegments} \u6BB5` : ""}\u68C0\u6D4B\u5230\u91CD\u590D\u9000\u5316\u5DF2\u622A\u65AD` : "";
262
+ const disclosure = `\u539F ${durationPart}\u97F3\u9891 \u2192 ${segmentPart} ${[...caption].length} \u5B57\uFF08${model}\uFF09${failurePart}${degenerationPart}\uFF0C\u4E3A\u6A21\u578B\u7406\u89E3\u800C\u975E\u9010\u5B57\u5185\u5BB9\uFF0C\u7EC6\u8282\u53EF\u80FD\u6709\u8BEF`;
263
+ return mediaPolicyToolSuccess({
264
+ outputDir: this.params.outputDir,
265
+ outputFileName,
266
+ artifactKind: "file",
267
+ title: "Audio caption",
268
+ mimeType: "text/plain",
269
+ sizeBytes: encoded.length,
270
+ disclosure,
271
+ role: "caption"
272
+ });
273
+ } catch (error) {
274
+ if (error instanceof Error && error.name === "TimeoutError" && !signal.aborted) {
275
+ return mediaPolicyToolError(
276
+ `caption request timed out after ${this.timeoutMs}ms`
277
+ );
278
+ }
279
+ return mediaPolicyToolFailure(error);
280
+ }
281
+ }
282
+ /**
283
+ * Chunked understanding: cut the audio into `segmentCount` equal
284
+ * segments (16kHz mono AAC) and caption them with bounded concurrency.
285
+ * Same failure stance as the ASR tool: individual segment failures
286
+ * become inline markers; the run only errors when EVERY segment
287
+ * failed. All cuts and requests share one wall-clock budget.
288
+ */
289
+ async captionChunked(options) {
290
+ const { backend, durationSeconds, segmentCount, signal } = options;
291
+ const segmentLength = durationSeconds / segmentCount;
292
+ const remainingTimeoutMs = createPolicyToolTimeoutBudget(this.timeoutMs);
293
+ const outcomes = new Array(segmentCount);
294
+ let nextIndex = 0;
295
+ const worker = /* @__PURE__ */ __name(async () => {
296
+ while (!signal.aborted) {
297
+ const index = nextIndex++;
298
+ if (index >= segmentCount) return;
299
+ if (remainingTimeoutMs() <= 1) {
300
+ outcomes[index] = { failure: "\u65F6\u95F4\u9884\u7B97\u8017\u5C3D", degenerated: false };
301
+ continue;
302
+ }
303
+ outcomes[index] = await this.captionChunk({
304
+ backend,
305
+ index,
306
+ startSeconds: index * segmentLength,
307
+ lengthSeconds: segmentLength,
308
+ remainingTimeoutMs,
309
+ signal
310
+ });
311
+ }
312
+ }, "worker");
313
+ await Promise.all(
314
+ Array.from({ length: Math.min(CHUNK_CONCURRENCY, segmentCount) }, worker)
315
+ );
316
+ if (signal.aborted) {
317
+ return mediaPolicyToolError("audio captioning aborted");
318
+ }
319
+ if (outcomes.every((o) => o.text === void 0)) {
320
+ const lastFailure = outcomes[outcomes.length - 1]?.failure ?? "unknown";
321
+ return mediaPolicyToolError(
322
+ `captioning failed for all ${segmentCount} segments (last: ${lastFailure})`
323
+ );
324
+ }
325
+ return outcomes;
326
+ }
327
+ /** Cut one segment with ffmpeg, caption it, collapse repetition
328
+ * degeneration, and clean the temporary cut up. Never throws for
329
+ * per-segment problems — they come back as `failure`. */
330
+ async captionChunk(options) {
331
+ const {
332
+ backend,
333
+ index,
334
+ startSeconds,
335
+ lengthSeconds,
336
+ remainingTimeoutMs,
337
+ signal
338
+ } = options;
339
+ const chunkPath = path.join(
340
+ this.params.outputDir,
341
+ `chunk_${String(index + 1).padStart(4, "0")}.m4a`
342
+ );
343
+ try {
344
+ const cut = await runFfmpeg(
345
+ [
346
+ "-y",
347
+ "-ss",
348
+ startSeconds.toFixed(3),
349
+ "-t",
350
+ lengthSeconds.toFixed(3),
351
+ "-i",
352
+ this.params.inputPath,
353
+ ...CHUNK_AUDIO_ARGS,
354
+ chunkPath
355
+ ],
356
+ { signal, timeoutMs: remainingTimeoutMs() }
357
+ );
358
+ if (signal.aborted) {
359
+ return { failure: "aborted", degenerated: false };
360
+ }
361
+ if (cut.code !== 0) {
362
+ return {
363
+ failure: `\u5207\u7247\u5931\u8D25\uFF08ffmpeg exit ${cut.code}\uFF09`,
364
+ degenerated: false
365
+ };
366
+ }
367
+ const bytes = await fs.readFile(chunkPath);
368
+ const dataUri = `data:audio/mp4;base64,${bytes.toString("base64")}`;
369
+ const response = await requestOmniChatCompletion({
370
+ ...backend,
371
+ media: [{ type: "input_audio", data: dataUri, format: "m4a" }],
372
+ timeoutMs: remainingTimeoutMs(),
373
+ signal,
374
+ tool: "omni_caption_audio"
375
+ });
376
+ if (!response.ok) {
377
+ return { failure: response.error, degenerated: false };
378
+ }
379
+ const collapsed = collapseRepetitionDegeneration(response.text);
380
+ if (!collapsed.text) {
381
+ return { failure: "\u8FD4\u56DE\u7A7A\u6587\u672C", degenerated: false };
382
+ }
383
+ return { text: collapsed.text, degenerated: collapsed.degenerated };
384
+ } catch (error) {
385
+ if (signal.aborted) {
386
+ return { failure: "aborted", degenerated: false };
387
+ }
388
+ if (error instanceof Error && error.name === "TimeoutError") {
389
+ return { failure: "\u8BF7\u6C42\u8D85\u65F6", degenerated: false };
390
+ }
391
+ return {
392
+ failure: error instanceof Error ? error.message : String(error),
393
+ degenerated: false
394
+ };
395
+ } finally {
396
+ await fs.rm(chunkPath, { force: true }).catch(() => {
397
+ });
398
+ }
399
+ }
400
+ };
401
+ var OmniCaptionAudioTool = class extends BaseMediaPolicyTool {
402
+ static {
403
+ __name(this, "OmniCaptionAudioTool");
404
+ }
405
+ constructor(config = {}) {
406
+ super(
407
+ OMNI_CAPTION_AUDIO_TOOL_NAME,
408
+ "CaptionAudio",
409
+ "Generates a semantic text description of an audio file with an omni model under the caller's prompt \u2014 speech gist, timbre, sound events, mood (long audio is split into time-labeled segments) \u2014 with a disclosure that it is an interpretation, not verbatim content.",
410
+ "other" /* Other */,
411
+ {
412
+ type: "object",
413
+ properties: {
414
+ ...MEDIA_POLICY_IO_SCHEMA_PROPERTIES,
415
+ ...TUNABLE_SCHEMA_PROPERTIES
416
+ },
417
+ required: ["outputDir"],
418
+ additionalProperties: false
419
+ },
420
+ config
421
+ );
422
+ }
423
+ get mediaPolicyDescriptor() {
424
+ return DESCRIPTOR;
425
+ }
426
+ createInvocation(params) {
427
+ return new CaptionAudioInvocation(
428
+ params,
429
+ resolvePolicyToolSettings(this.configView, this.name),
430
+ resolvePolicyToolTimeoutMs(this.configView, this.name)
431
+ );
432
+ }
433
+ };
434
+ export {
435
+ CAPTION_AUDIO_DEFAULTS,
436
+ OMNI_CAPTION_AUDIO_TOOL_NAME,
437
+ OmniCaptionAudioTool
438
+ };
439
+ /**
440
+ * @license
441
+ * Copyright 2025 Google LLC
442
+ * SPDX-License-Identifier: Apache-2.0
443
+ */
@@ -0,0 +1,247 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ requestOmniChatCompletion
5
+ } from "./chunk-WL2V7PTE.js";
6
+ import "./chunk-IVPSLX4P.js";
7
+ import {
8
+ BaseMediaPolicyTool,
9
+ BaseMediaPolicyToolInvocation,
10
+ MEDIA_POLICY_IO_SCHEMA_PROPERTIES,
11
+ assertMediaPolicyIo,
12
+ formatBytesShort,
13
+ mediaPolicyToolError,
14
+ mediaPolicyToolFailure,
15
+ mediaPolicyToolSuccess,
16
+ policyOutputFileName,
17
+ resolvePolicyToolSettings,
18
+ resolvePolicyToolTimeoutMs
19
+ } from "./chunk-UXEI7POA.js";
20
+ import {
21
+ recognizeMediaFile
22
+ } from "./chunk-S5BHLTHK.js";
23
+ import "./chunk-KSEKRQJO.js";
24
+ import "./chunk-MNU36NGH.js";
25
+ import "./chunk-BQMSZSG6.js";
26
+ import "./chunk-VPGRGNNH.js";
27
+ import {
28
+ ToolNames
29
+ } from "./chunk-ERIBG3BX.js";
30
+ import "./chunk-ZYDMQCQP.js";
31
+ import "./chunk-S34QJ6IR.js";
32
+ import "./chunk-TBWQLLFO.js";
33
+ import {
34
+ init_esbuild_shims
35
+ } from "./chunk-5O2XNYP6.js";
36
+ import {
37
+ __name
38
+ } from "./chunk-J2S4EL5Y.js";
39
+
40
+ // packages/core/src/omni/policy/tools/caption-image.ts
41
+ init_esbuild_shims();
42
+ import fs from "node:fs/promises";
43
+ import path from "node:path";
44
+ var OMNI_CAPTION_IMAGE_TOOL_NAME = ToolNames.OMNI_CAPTION_IMAGE;
45
+ var CAPTION_IMAGE_DEFAULTS = {
46
+ model: "qwen3.5-omni-plus",
47
+ baseUrl: "https://dashscope.aliyuncs.com/compatible-mode/v1",
48
+ apiKeyEnv: "DASHSCOPE_API_KEY",
49
+ maxInputBytes: 10 * 1024 * 1024,
50
+ prompt: "\u8BF7\u8BE6\u7EC6\u63CF\u8FF0\u8FD9\u5F20\u56FE\u7247\u7684\u5185\u5BB9\u3002"
51
+ };
52
+ var TUNABLE_SCHEMA_PROPERTIES = {
53
+ prompt: {
54
+ type: "string",
55
+ description: "Understanding instruction the caption is written to (what to describe, what to focus on). Default: a general detailed description of the image."
56
+ },
57
+ model: {
58
+ type: "string",
59
+ description: "Captioning model id. Default 'qwen3.5-omni-plus'."
60
+ },
61
+ baseUrl: {
62
+ type: "string",
63
+ description: "OpenAI-compatible endpoint base URL the caption request is sent to. Defaults to the DashScope compatible-mode endpoint."
64
+ },
65
+ apiKeyEnv: {
66
+ type: "string",
67
+ description: "Environment variable holding the API key for the endpoint. Default 'DASHSCOPE_API_KEY'."
68
+ },
69
+ maxInputBytes: {
70
+ type: "number",
71
+ description: "Maximum input image size in bytes. Default 10485760 (10MiB).",
72
+ minimum: 1
73
+ }
74
+ };
75
+ var DESCRIPTOR = {
76
+ kind: "media_policy",
77
+ version: "1",
78
+ inputMediaTypes: ["image"],
79
+ outputs: [
80
+ {
81
+ // Same text-product protocol as the transcript tool: a strict
82
+ // UTF-8 text/plain file artifact, delivered as a text Part, labeled
83
+ // `metadata.omniRole: 'caption'` (memory role enum预留, M §5.5).
84
+ kind: "file",
85
+ role: "caption",
86
+ mimeTypes: ["text/plain"],
87
+ required: true,
88
+ // A caption is a lossy rendering of the visual content by
89
+ // definition: fine detail, exact text and spatial relationships may
90
+ // be dropped or misdescribed.
91
+ lossy: true
92
+ },
93
+ { kind: "text", role: "disclosure", required: true }
94
+ ],
95
+ settingsSchema: {
96
+ type: "object",
97
+ properties: TUNABLE_SCHEMA_PROPERTIES,
98
+ additionalProperties: false
99
+ },
100
+ // Endpoint + credential selection stays operator-controlled (same
101
+ // rationale as omni_transcribe_audio).
102
+ operatorOnlyParams: ["baseUrl", "apiKeyEnv"]
103
+ };
104
+ var readString = /* @__PURE__ */ __name((settings, key) => {
105
+ const value = settings[key];
106
+ return typeof value === "string" && value.length > 0 ? value : void 0;
107
+ }, "readString");
108
+ var readNumber = /* @__PURE__ */ __name((settings, key) => {
109
+ const value = settings[key];
110
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
111
+ }, "readNumber");
112
+ var CaptionImageInvocation = class extends BaseMediaPolicyToolInvocation {
113
+ constructor(params, settingsDefaults, timeoutMs) {
114
+ super(params);
115
+ this.settingsDefaults = settingsDefaults;
116
+ this.timeoutMs = timeoutMs;
117
+ }
118
+ static {
119
+ __name(this, "CaptionImageInvocation");
120
+ }
121
+ getDescription() {
122
+ return `Caption ${path.basename(this.params.inputPath)} with a VL model`;
123
+ }
124
+ async execute(signal) {
125
+ const settings = this.settingsDefaults;
126
+ const model = this.params.model ?? readString(settings, "model") ?? CAPTION_IMAGE_DEFAULTS.model;
127
+ const baseUrl = this.params.baseUrl ?? readString(settings, "baseUrl") ?? CAPTION_IMAGE_DEFAULTS.baseUrl;
128
+ const apiKeyEnv = this.params.apiKeyEnv ?? readString(settings, "apiKeyEnv") ?? CAPTION_IMAGE_DEFAULTS.apiKeyEnv;
129
+ const maxInputBytes = this.params.maxInputBytes ?? readNumber(settings, "maxInputBytes") ?? CAPTION_IMAGE_DEFAULTS.maxInputBytes;
130
+ const prompt = this.params.prompt ?? readString(settings, "prompt") ?? CAPTION_IMAGE_DEFAULTS.prompt;
131
+ try {
132
+ const { inputSizeBytes } = await assertMediaPolicyIo(this.params);
133
+ if (inputSizeBytes > maxInputBytes) {
134
+ return mediaPolicyToolError(
135
+ `input image is ${inputSizeBytes} bytes, over the ${maxInputBytes}-byte caption limit`
136
+ );
137
+ }
138
+ const apiKey = process.env[apiKeyEnv];
139
+ if (!apiKey) {
140
+ return mediaPolicyToolError(
141
+ `environment variable ${apiKeyEnv} is not set; image captioning is unavailable`
142
+ );
143
+ }
144
+ const recognized = await recognizeMediaFile(this.params.inputPath, {
145
+ expectedModality: "image",
146
+ signal
147
+ });
148
+ if ((recognized.metadata.frameCount ?? 1) > 1) {
149
+ return mediaPolicyToolError(
150
+ `animated image (${recognized.metadata.frameCount} frames) is not supported by ${OMNI_CAPTION_IMAGE_TOOL_NAME}`
151
+ );
152
+ }
153
+ const bytes = await fs.readFile(this.params.inputPath);
154
+ const dataUri = `data:${recognized.detectedMimeType};base64,${bytes.toString("base64")}`;
155
+ const response = await requestOmniChatCompletion({
156
+ model,
157
+ baseUrl,
158
+ apiKey,
159
+ prompt,
160
+ media: [{ type: "image_url", url: dataUri }],
161
+ timeoutMs: this.timeoutMs,
162
+ signal,
163
+ tool: "omni_caption_image"
164
+ });
165
+ if (!response.ok) {
166
+ return mediaPolicyToolError(
167
+ `caption request failed: ${response.error}`
168
+ );
169
+ }
170
+ const caption = response.text;
171
+ if (!caption) {
172
+ return mediaPolicyToolError("caption request returned empty text");
173
+ }
174
+ const outputFileName = policyOutputFileName({
175
+ inputPath: this.params.inputPath,
176
+ operation: "caption",
177
+ extension: ".txt"
178
+ });
179
+ const outputPath = path.join(this.params.outputDir, outputFileName);
180
+ const encoded = Buffer.from(caption, "utf-8");
181
+ await fs.writeFile(outputPath, encoded);
182
+ const m = recognized.metadata;
183
+ const original = m.width !== void 0 && m.height !== void 0 ? `${m.width}\xD7${m.height}/${formatBytesShort(inputSizeBytes)}` : formatBytesShort(inputSizeBytes);
184
+ const disclosure = `\u539F ${original} \u56FE\u7247 \u2192 \u8BED\u4E49\u63CF\u8FF0 ${[...caption].length} \u5B57\uFF08${model}\uFF09\uFF0C\u89C6\u89C9\u7EC6\u8282\u6709\u635F\u3001\u63CF\u8FF0\u53EF\u80FD\u6709\u8BEF`;
185
+ return mediaPolicyToolSuccess({
186
+ outputDir: this.params.outputDir,
187
+ outputFileName,
188
+ artifactKind: "file",
189
+ title: "Image caption",
190
+ mimeType: "text/plain",
191
+ sizeBytes: encoded.length,
192
+ disclosure,
193
+ role: "caption"
194
+ });
195
+ } catch (error) {
196
+ if (error instanceof Error && error.name === "TimeoutError" && !signal.aborted) {
197
+ return mediaPolicyToolError(
198
+ `caption request timed out after ${this.timeoutMs}ms`
199
+ );
200
+ }
201
+ return mediaPolicyToolFailure(error);
202
+ }
203
+ }
204
+ };
205
+ var OmniCaptionImageTool = class extends BaseMediaPolicyTool {
206
+ static {
207
+ __name(this, "OmniCaptionImageTool");
208
+ }
209
+ constructor(config = {}) {
210
+ super(
211
+ OMNI_CAPTION_IMAGE_TOOL_NAME,
212
+ "CaptionImage",
213
+ "Generates a semantic text description (caption) of an image with a VL model under the caller's prompt, turning visual content into context text, with a disclosure of the loss.",
214
+ "other" /* Other */,
215
+ {
216
+ type: "object",
217
+ properties: {
218
+ ...MEDIA_POLICY_IO_SCHEMA_PROPERTIES,
219
+ ...TUNABLE_SCHEMA_PROPERTIES
220
+ },
221
+ required: ["outputDir"],
222
+ additionalProperties: false
223
+ },
224
+ config
225
+ );
226
+ }
227
+ get mediaPolicyDescriptor() {
228
+ return DESCRIPTOR;
229
+ }
230
+ createInvocation(params) {
231
+ return new CaptionImageInvocation(
232
+ params,
233
+ resolvePolicyToolSettings(this.configView, this.name),
234
+ resolvePolicyToolTimeoutMs(this.configView, this.name)
235
+ );
236
+ }
237
+ };
238
+ export {
239
+ CAPTION_IMAGE_DEFAULTS,
240
+ OMNI_CAPTION_IMAGE_TOOL_NAME,
241
+ OmniCaptionImageTool
242
+ };
243
+ /**
244
+ * @license
245
+ * Copyright 2025 Google LLC
246
+ * SPDX-License-Identifier: Apache-2.0
247
+ */
@@ -2,7 +2,7 @@
2
2
  "use strict";
3
3
  import {
4
4
  getPlugin
5
- } from "./chunk-U4AASWUQ.js";
5
+ } from "./chunk-L4GF4IK2.js";
6
6
  import {
7
7
  resolveChannelCwd
8
8
  } from "./chunk-LFKXIOGC.js";