@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,621 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ videoFrameDimensionsForTokenBudget
5
+ } from "./chunk-PF3RVYRK.js";
6
+ import {
7
+ BaseMediaPolicyTool,
8
+ BaseMediaPolicyToolInvocation,
9
+ MEDIA_POLICY_IO_SCHEMA_PROPERTIES,
10
+ assertMediaPolicyIo,
11
+ createPolicyToolTimeoutBudget,
12
+ ffmpegFailureMessage,
13
+ formatBytesShort,
14
+ mediaPolicyToolError,
15
+ mediaPolicyToolFailure,
16
+ policyOutputFileName,
17
+ resolvePolicyToolSettings,
18
+ resolvePolicyToolTimeoutMs
19
+ } from "./chunk-UXEI7POA.js";
20
+ import {
21
+ probeMediaMetadata,
22
+ runFfmpeg
23
+ } from "./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/extract-keyframes.ts
41
+ init_esbuild_shims();
42
+ import fs from "node:fs/promises";
43
+ import path from "node:path";
44
+ var OMNI_EXTRACT_KEYFRAMES_TOOL_NAME = ToolNames.OMNI_EXTRACT_KEYFRAMES;
45
+ var EXTRACT_KEYFRAMES_DEFAULTS = {
46
+ maxFrames: 8,
47
+ sceneThreshold: 0.2,
48
+ maxDimension: 768,
49
+ strategy: "scene",
50
+ fps: 1
51
+ };
52
+ function readTier(settings) {
53
+ const value = settings["frameTokenBudget"];
54
+ return value === "small" || value === "normal" || value === "large" ? value : void 0;
55
+ }
56
+ __name(readTier, "readTier");
57
+ function readStrategy(settings) {
58
+ const value = settings["strategy"];
59
+ return value === "scene" || value === "uniform" ? value : void 0;
60
+ }
61
+ __name(readStrategy, "readStrategy");
62
+ function readNumber(settings, key) {
63
+ const value = settings[key];
64
+ return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : void 0;
65
+ }
66
+ __name(readNumber, "readNumber");
67
+ function readNonNegativeNumber(settings, key) {
68
+ const value = settings[key];
69
+ return typeof value === "number" && Number.isFinite(value) && value >= 0 ? value : void 0;
70
+ }
71
+ __name(readNonNegativeNumber, "readNonNegativeNumber");
72
+ function frameFileMatcher(nameTemplate) {
73
+ const escaped = nameTemplate.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
74
+ return new RegExp(`^${escaped.replace("%04d", "(\\d{4})")}$`);
75
+ }
76
+ __name(frameFileMatcher, "frameFileMatcher");
77
+ var TUNABLE_SCHEMA_PROPERTIES = {
78
+ maxFrames: {
79
+ type: "number",
80
+ description: "Maximum number of frames to extract. Default 8.",
81
+ minimum: 1,
82
+ maximum: 64
83
+ },
84
+ sceneThreshold: {
85
+ type: "number",
86
+ description: "Scene-change threshold (0-1) for keyframe selection. Default 0.2.",
87
+ minimum: 0,
88
+ maximum: 1
89
+ },
90
+ maxDimension: {
91
+ type: "number",
92
+ description: "Longest-edge ceiling in pixels for the extracted frames (aspect ratio preserved, never enlarged). Default 768.",
93
+ minimum: 16
94
+ },
95
+ strategy: {
96
+ type: "string",
97
+ enum: ["scene", "uniform"],
98
+ description: "Frame-selection strategy: 'scene' (default; per-bucket scene detection with midpoint fallback) or 'uniform' (duration-adaptive even sampling at a dynamic fps \u2014 the lever for long videos, whose metered cost is frames\xD7pixels)."
99
+ },
100
+ fps: {
101
+ type: "number",
102
+ description: "Uniform strategy only: target frames per second; the frame count is clamp(duration \xD7 fps, 1, maxFrames). Default 1.",
103
+ exclusiveMinimum: 0,
104
+ maximum: 10
105
+ },
106
+ startSec: {
107
+ type: "number",
108
+ description: "Uniform strategy only: sampling window start in seconds. Default 0.",
109
+ minimum: 0
110
+ },
111
+ endSec: {
112
+ type: "number",
113
+ description: "Uniform strategy only: sampling window end in seconds. Default: the video's end.",
114
+ exclusiveMinimum: 0
115
+ },
116
+ frameTokenBudget: {
117
+ type: "string",
118
+ enum: ["small", "normal", "large"],
119
+ description: "Per-frame token-budget tier ('small'/'normal'/'large' = 80/256/1024 visual tokens): frames are resized onto the model patch grid inside the tier's pixel budget. Overrides maxDimension for frame sizing."
120
+ }
121
+ };
122
+ var DESCRIPTOR = {
123
+ kind: "media_policy",
124
+ // '2': outputs now carry `metadata.omniRole: 'keyframe'`, which memory
125
+ // maps to `sampled` coverage. Pre-'2' cache entries and recorded
126
+ // executions hold role-less outputs whose coverage was derived as
127
+ // `complete`; sharing a version would let them converge onto the same
128
+ // fingerprint and keep reporting sampled frames as complete visual
129
+ // coverage — the model would answer about footage it never saw.
130
+ version: "2",
131
+ inputMediaTypes: ["video"],
132
+ outputs: [
133
+ {
134
+ kind: "media",
135
+ mimeTypes: ["image/jpeg"],
136
+ required: true,
137
+ lossy: true
138
+ },
139
+ { kind: "text", role: "disclosure", required: true }
140
+ ],
141
+ settingsSchema: {
142
+ type: "object",
143
+ properties: TUNABLE_SCHEMA_PROPERTIES,
144
+ additionalProperties: false
145
+ }
146
+ };
147
+ function scaleFilter(maxDimension) {
148
+ return `scale='min(${maxDimension},iw)':'min(${maxDimension},ih)':force_original_aspect_ratio=decrease`;
149
+ }
150
+ __name(scaleFilter, "scaleFilter");
151
+ function parseShowinfoTimestamps(stderr) {
152
+ const timestamps = [];
153
+ const pattern = /\bn:\s*\d+.*?\bpts_time:(-?[\d.]+)/g;
154
+ for (const match of stderr.matchAll(pattern)) {
155
+ const t = Number(match[1]);
156
+ timestamps.push(Number.isFinite(t) && t >= 0 ? t : NaN);
157
+ }
158
+ return timestamps;
159
+ }
160
+ __name(parseShowinfoTimestamps, "parseShowinfoTimestamps");
161
+ async function listFrameFiles(outputDir, nameTemplate) {
162
+ const matcher = frameFileMatcher(nameTemplate);
163
+ const entries = await fs.readdir(outputDir);
164
+ return entries.filter((name) => matcher.test(name)).sort();
165
+ }
166
+ __name(listFrameFiles, "listFrameFiles");
167
+ var SCENE_SEARCH_WINDOW_SECONDS = 30;
168
+ function formatSeconds(seconds) {
169
+ return seconds.toFixed(3);
170
+ }
171
+ __name(formatSeconds, "formatSeconds");
172
+ function formatClock(totalSeconds, withHours) {
173
+ const s = Math.max(0, Math.round(totalSeconds));
174
+ const h = Math.floor(s / 3600);
175
+ const m = Math.floor(s % 3600 / 60);
176
+ const mm = String(m).padStart(2, "0");
177
+ const ss = String(s % 60).padStart(2, "0");
178
+ return withHours ? `${h}:${mm}:${ss}` : `${mm}:${ss}`;
179
+ }
180
+ __name(formatClock, "formatClock");
181
+ async function fileExists(filePath) {
182
+ try {
183
+ await fs.access(filePath);
184
+ return true;
185
+ } catch {
186
+ return false;
187
+ }
188
+ }
189
+ __name(fileExists, "fileExists");
190
+ var SEEK_CONCURRENCY = 4;
191
+ var ExtractKeyframesInvocation = class extends BaseMediaPolicyToolInvocation {
192
+ constructor(params, settingsDefaults, timeoutMs) {
193
+ super(params);
194
+ this.settingsDefaults = settingsDefaults;
195
+ this.timeoutMs = timeoutMs;
196
+ }
197
+ static {
198
+ __name(this, "ExtractKeyframesInvocation");
199
+ }
200
+ getDescription() {
201
+ const maxFrames = this.params.maxFrames ?? EXTRACT_KEYFRAMES_DEFAULTS.maxFrames;
202
+ return `Extract up to ${maxFrames} keyframes from ${path.basename(this.params.inputPath)}`;
203
+ }
204
+ async execute(signal) {
205
+ const settings = this.settingsDefaults;
206
+ const maxFrames = Math.floor(
207
+ this.params.maxFrames ?? readNumber(settings, "maxFrames") ?? EXTRACT_KEYFRAMES_DEFAULTS.maxFrames
208
+ );
209
+ const sceneThreshold = this.params.sceneThreshold ?? readNonNegativeNumber(settings, "sceneThreshold") ?? EXTRACT_KEYFRAMES_DEFAULTS.sceneThreshold;
210
+ const maxDimension = this.params.maxDimension ?? readNumber(settings, "maxDimension") ?? EXTRACT_KEYFRAMES_DEFAULTS.maxDimension;
211
+ const strategy = this.params.strategy ?? readStrategy(settings) ?? EXTRACT_KEYFRAMES_DEFAULTS.strategy;
212
+ const fps = this.params.fps ?? readNumber(settings, "fps") ?? EXTRACT_KEYFRAMES_DEFAULTS.fps;
213
+ const startSec = this.params.startSec ?? readNonNegativeNumber(settings, "startSec");
214
+ const endSec = this.params.endSec ?? readNumber(settings, "endSec");
215
+ const frameTokenBudget = this.params.frameTokenBudget ?? readTier(settings);
216
+ try {
217
+ const { inputSizeBytes } = await assertMediaPolicyIo(this.params);
218
+ const probe = await probeMediaMetadata(
219
+ this.params.inputPath,
220
+ "video",
221
+ signal
222
+ );
223
+ const durationSeconds = probe.durationMs !== void 0 && probe.durationMs > 0 ? probe.durationMs / 1e3 : void 0;
224
+ let scaleVf = scaleFilter(maxDimension);
225
+ const sourceDimsKnown = probe.width !== void 0 && probe.height !== void 0 && probe.width > 0 && probe.height > 0;
226
+ let deliveredResolution = "";
227
+ if (frameTokenBudget && sourceDimsKnown) {
228
+ const target = videoFrameDimensionsForTokenBudget(
229
+ probe.width,
230
+ probe.height,
231
+ frameTokenBudget
232
+ );
233
+ scaleVf = `scale=${target.width}:${target.height}`;
234
+ deliveredResolution = `${target.width}\xD7${target.height}`;
235
+ } else if (sourceDimsKnown) {
236
+ const factor = Math.min(
237
+ 1,
238
+ maxDimension / Math.max(probe.width, probe.height)
239
+ );
240
+ deliveredResolution = `${Math.round(probe.width * factor)}\xD7${Math.round(probe.height * factor)}`;
241
+ }
242
+ const remainingTimeoutMs = createPolicyToolTimeoutBudget(this.timeoutMs);
243
+ const context = {
244
+ maxFrames,
245
+ sceneThreshold,
246
+ maxDimension,
247
+ scaleVf,
248
+ remainingTimeoutMs,
249
+ signal
250
+ };
251
+ const extraction = strategy === "uniform" && durationSeconds !== void 0 ? await this.extractUniform(context, durationSeconds, {
252
+ fps,
253
+ startSec,
254
+ endSec
255
+ }) : durationSeconds !== void 0 && maxFrames > 1 ? await this.extractBucketed(context, durationSeconds) : await this.extractSinglePass(context);
256
+ if (!Array.isArray(extraction)) {
257
+ return extraction;
258
+ }
259
+ const frames = extraction;
260
+ const bucketed = strategy !== "uniform" && durationSeconds !== void 0 && maxFrames > 1;
261
+ const originalDuration = durationSeconds !== void 0 ? `${Math.round(durationSeconds)}s` : formatBytesShort(inputSizeBytes);
262
+ const originalResolution = probe.width !== void 0 && probe.height !== void 0 ? `/${probe.width}\xD7${probe.height}` : "";
263
+ const samplingNote = strategy === "uniform" ? `\u5747\u5300\u62BD\u5E27\uFF08\u52A8\u6001\u5E27\u7387 ${fps}fps \u76EE\u6807\uFF0C\u5171 ${frames.length} \u5E27\uFF09` : bucketed ? frames.length < maxFrames ? `\u9759\u6001\u62BD\u5E27\uFF08\u5168\u7247\u5206\u6876\u91C7\u6837\uFF0C\u4EC5\u8986\u76D6 ${frames.length}/${maxFrames} \u4E2A\u5206\u6876\uFF0C\u5176\u4F59\u65F6\u6BB5\u672A\u91C7\u6837\uFF09` : "\u9759\u6001\u62BD\u5E27\uFF08\u5168\u7247\u5206\u6876\u91C7\u6837\uFF09" : "\u9759\u6001\u62BD\u5E27";
264
+ const header = `\u539F\u89C6\u9891 ${originalDuration}${originalResolution} \u2192 \u5173\u952E\u5E27${deliveredResolution ? `\uFF0C\u7F29\u653E\u81F3 ${deliveredResolution}` : ""}\uFF0C${samplingNote}\uFF0C\u65F6\u95F4\u8FDE\u7EED\u6027\u4E22\u5931\u3002\u964D\u8D28\u5E27\u4E0D\u8DB3\u4EE5\u8FA8\u8BC6\u6587\u5B57/\u5C0F\u7269\u4F53/\u7CBE\u786E\u8BA1\u6570\uFF1A\u5148\u7528 omni_extract_keyframes\uFF08strategy=uniform\u3001startSec\u3001endSec\uFF09\u5728\u7591\u4F3C\u533A\u95F4\u52A0\u5BC6\u62BD\u5E27\u5B9A\u4F4D\uFF0C\u518D\u7528 omni_clip_video \u622A\u53D6 \u226420s \u540E read_file \u770B\u539F\u751F\u89C6\u9891\u3002\u770B\u4E0D\u6E05\u7684\u7EC6\u8282\u4E0D\u8981\u51ED\u731C\u6D4B\u4F5C\u7B54`;
265
+ const withHours = (durationSeconds ?? 0) >= 3600;
266
+ const artifacts = [];
267
+ for (const [index, frame] of frames.entries()) {
268
+ const sizeBytes = (await fs.stat(path.join(this.params.outputDir, frame.fileName))).size;
269
+ const t = frame.timeSeconds;
270
+ const marker = t !== void 0 && Number.isFinite(t) ? `<${formatClock(t, withHours)}>` : `<\u5173\u952E\u5E27 ${index + 1}/${frames.length}>`;
271
+ artifacts.push({
272
+ kind: "image",
273
+ storage: "workspace",
274
+ title: `Keyframe ${index + 1}/${frames.length}`,
275
+ workspacePath: frame.fileName,
276
+ mimeType: "image/jpeg",
277
+ sizeBytes,
278
+ metadata: {
279
+ // First frame: header + its marker; the rest: marker only. D8 is
280
+ // still satisfied — every lossy frame carries a non-empty
281
+ // disclosure.
282
+ omniDisclosure: index === 0 ? `${header}
283
+ ${marker}` : marker,
284
+ // Marks the artifact as a sampled excerpt for downstream role
285
+ // consumers (output routing selectors, memory coverage).
286
+ omniRole: "keyframe"
287
+ }
288
+ });
289
+ }
290
+ const summary = `Extracted ${frames.length} keyframe(s) from ${path.basename(this.params.inputPath)} (${originalDuration}${originalResolution})`;
291
+ const outputPaths = frames.map((frame) => path.join(this.params.outputDir, frame.fileName)).join("\n");
292
+ return {
293
+ llmContent: `${summary}
294
+ Output files:
295
+ ${outputPaths}
296
+ Use read_file with these absolute paths to inspect the results.`,
297
+ returnDisplay: summary,
298
+ artifacts
299
+ };
300
+ } catch (error) {
301
+ return mediaPolicyToolFailure(error);
302
+ }
303
+ }
304
+ /**
305
+ * Full-duration coverage: split the timeline into `maxFrames` equal
306
+ * buckets and extract one frame per bucket — a scene change from the
307
+ * bucket's opening window when one exists, the bucket midpoint
308
+ * otherwise. Input seeking (`-ss` before `-i`) jumps straight to each
309
+ * bucket without decoding the preceding footage; it also resets
310
+ * pts to ~0, so the absolute timestamp is bucketStart + showinfo
311
+ * pts_time. Individual bucket failures are tolerated (the last one is
312
+ * kept for the zero-frames diagnostic); the loop stops early when the
313
+ * shared budget is exhausted.
314
+ */
315
+ async extractBucketed(context, durationSeconds) {
316
+ const { maxFrames, sceneThreshold, scaleVf, remainingTimeoutMs, signal } = context;
317
+ const bucket = durationSeconds / maxFrames;
318
+ const window = Math.min(bucket, SCENE_SEARCH_WINDOW_SECONDS);
319
+ const frames = [];
320
+ let lastFailure;
321
+ for (let i = 0; i < maxFrames; i++) {
322
+ if (remainingTimeoutMs() <= 1) {
323
+ break;
324
+ }
325
+ const bucketStart = i * bucket;
326
+ const fileName = policyOutputFileName({
327
+ inputPath: this.params.inputPath,
328
+ operation: "keyframe",
329
+ variant: String(i + 1).padStart(4, "0"),
330
+ extension: ".jpg"
331
+ });
332
+ const outputPath = path.join(this.params.outputDir, fileName);
333
+ const sceneRun = await runFfmpeg(
334
+ [
335
+ "-y",
336
+ "-ss",
337
+ formatSeconds(bucketStart),
338
+ "-t",
339
+ formatSeconds(window),
340
+ "-i",
341
+ this.params.inputPath,
342
+ "-vf",
343
+ `select='gt(scene,${sceneThreshold})',${scaleVf},showinfo`,
344
+ "-vsync",
345
+ "vfr",
346
+ "-frames:v",
347
+ "1",
348
+ "-q:v",
349
+ "4",
350
+ "-update",
351
+ "1",
352
+ outputPath
353
+ ],
354
+ { signal, timeoutMs: remainingTimeoutMs() }
355
+ );
356
+ if (signal.aborted) {
357
+ return mediaPolicyToolError("keyframe extraction aborted");
358
+ }
359
+ if (sceneRun.code === 0 && await fileExists(outputPath)) {
360
+ const pts = parseShowinfoTimestamps(sceneRun.stderr)[0];
361
+ frames.push({
362
+ fileName,
363
+ timeSeconds: bucketStart + (pts !== void 0 && Number.isFinite(pts) ? pts : window / 2)
364
+ });
365
+ continue;
366
+ }
367
+ if (sceneRun.code !== 0) {
368
+ lastFailure = sceneRun;
369
+ }
370
+ const midpoint = bucketStart + bucket / 2;
371
+ const midpointRun = await runFfmpeg(
372
+ [
373
+ "-y",
374
+ "-ss",
375
+ formatSeconds(midpoint),
376
+ "-i",
377
+ this.params.inputPath,
378
+ "-vf",
379
+ scaleVf,
380
+ "-frames:v",
381
+ "1",
382
+ "-q:v",
383
+ "4",
384
+ "-update",
385
+ "1",
386
+ outputPath
387
+ ],
388
+ { signal, timeoutMs: remainingTimeoutMs() }
389
+ );
390
+ if (signal.aborted) {
391
+ return mediaPolicyToolError("keyframe extraction aborted");
392
+ }
393
+ if (midpointRun.code === 0 && await fileExists(outputPath)) {
394
+ frames.push({ fileName, timeSeconds: midpoint });
395
+ } else if (midpointRun.code !== 0) {
396
+ lastFailure = midpointRun;
397
+ }
398
+ }
399
+ if (frames.length === 0) {
400
+ return mediaPolicyToolError(
401
+ lastFailure !== void 0 ? ffmpegFailureMessage(
402
+ lastFailure,
403
+ "extracting keyframes from",
404
+ this.params.inputPath
405
+ ) : `no keyframes could be extracted from ${path.basename(this.params.inputPath)}`
406
+ );
407
+ }
408
+ return frames;
409
+ }
410
+ /**
411
+ * Uniform strategy (⓫, ported from the plugin's
412
+ * `compute_dynamic_fps` + `extract_frames_by_seeking`): the frame
413
+ * count adapts to the window length — clamp(window × fps, 1,
414
+ * maxFrames) — so long videos automatically thin out (the effective
415
+ * fps is nframes/window, capped at the native frame rate), and every
416
+ * timestamp is extracted by its own input-side seek (`-ss` before
417
+ * `-i`: no decode of the preceding footage) with bounded concurrency.
418
+ * `startSec`/`endSec` bound the sampling window (clip-and-sample in
419
+ * one pass). Per-frame timestamps are exact by construction.
420
+ */
421
+ async extractUniform(context, durationSeconds, options) {
422
+ const { maxFrames, scaleVf, remainingTimeoutMs, signal } = context;
423
+ const { fps } = options;
424
+ const windowStart = Math.max(0, options.startSec ?? 0);
425
+ if (windowStart >= durationSeconds) {
426
+ return mediaPolicyToolError(
427
+ `startSec (${windowStart}) is at or beyond the end of the video (${Math.round(durationSeconds)}s)`
428
+ );
429
+ }
430
+ const windowEnd = Math.min(
431
+ options.endSec ?? durationSeconds,
432
+ durationSeconds
433
+ );
434
+ if (windowEnd <= windowStart) {
435
+ return mediaPolicyToolError(
436
+ `the sampling window [${windowStart}\u2013${windowEnd}] is empty`
437
+ );
438
+ }
439
+ const windowSeconds = windowEnd - windowStart;
440
+ const nframes = Math.max(
441
+ 1,
442
+ Math.min(maxFrames, Math.floor(windowSeconds * fps))
443
+ );
444
+ const slice = windowSeconds / nframes;
445
+ const timestamps = Array.from(
446
+ { length: nframes },
447
+ (_, i) => windowStart + (i + 0.5) * slice
448
+ );
449
+ const outcomes = new Array(nframes);
450
+ let nextIndex = 0;
451
+ const worker = /* @__PURE__ */ __name(async () => {
452
+ while (!signal.aborted) {
453
+ const index = nextIndex++;
454
+ if (index >= nframes) return;
455
+ if (remainingTimeoutMs() <= 1) return;
456
+ const timestamp = timestamps[index];
457
+ const fileName = policyOutputFileName({
458
+ inputPath: this.params.inputPath,
459
+ operation: "keyframe",
460
+ variant: String(index + 1).padStart(4, "0"),
461
+ extension: ".jpg"
462
+ });
463
+ const outputPath = path.join(this.params.outputDir, fileName);
464
+ const run = await runFfmpeg(
465
+ [
466
+ "-y",
467
+ "-ss",
468
+ formatSeconds(timestamp),
469
+ "-i",
470
+ this.params.inputPath,
471
+ "-vf",
472
+ scaleVf,
473
+ "-frames:v",
474
+ "1",
475
+ "-q:v",
476
+ "4",
477
+ "-update",
478
+ "1",
479
+ outputPath
480
+ ],
481
+ { signal, timeoutMs: remainingTimeoutMs() }
482
+ );
483
+ if (signal.aborted) return;
484
+ if (run.code === 0 && await fileExists(outputPath)) {
485
+ outcomes[index] = { fileName, timeSeconds: timestamp };
486
+ }
487
+ }
488
+ }, "worker");
489
+ await Promise.all(
490
+ Array.from({ length: Math.min(SEEK_CONCURRENCY, nframes) }, worker)
491
+ );
492
+ if (signal.aborted) {
493
+ return mediaPolicyToolError("keyframe extraction aborted");
494
+ }
495
+ const frames = outcomes.filter((f) => f !== void 0);
496
+ if (frames.length === 0) {
497
+ return mediaPolicyToolError(
498
+ `no keyframes could be extracted from ${path.basename(this.params.inputPath)}`
499
+ );
500
+ }
501
+ return frames;
502
+ }
503
+ /**
504
+ * Single-pass scene detection (legacy path): frame 0 always selected,
505
+ * then every frame whose scene score exceeds the threshold, capped at
506
+ * maxFrames. Only used when the duration is unknown (buckets cannot
507
+ * be placed) or a single frame was requested. showinfo (after select)
508
+ * logs one stderr line per KEPT frame with its pts_time — the
509
+ * timestamps feed the per-frame disclosures.
510
+ */
511
+ async extractSinglePass(context) {
512
+ const { maxFrames, sceneThreshold, scaleVf, remainingTimeoutMs, signal } = context;
513
+ const frameNameTemplate = policyOutputFileName({
514
+ inputPath: this.params.inputPath,
515
+ operation: "keyframe",
516
+ variant: "%04d",
517
+ extension: ".jpg"
518
+ });
519
+ const outputPattern = path.join(this.params.outputDir, frameNameTemplate);
520
+ const staleFrames = await listFrameFiles(
521
+ this.params.outputDir,
522
+ frameNameTemplate
523
+ );
524
+ await Promise.all(
525
+ staleFrames.map(
526
+ (name) => fs.rm(path.join(this.params.outputDir, name), { force: true }).catch(() => {
527
+ })
528
+ )
529
+ );
530
+ const scenePass = await runFfmpeg(
531
+ [
532
+ "-y",
533
+ "-i",
534
+ this.params.inputPath,
535
+ "-vf",
536
+ `select='eq(n,0)+gt(scene,${sceneThreshold})',${scaleVf},showinfo`,
537
+ "-vsync",
538
+ "vfr",
539
+ "-frames:v",
540
+ String(maxFrames),
541
+ "-q:v",
542
+ "4",
543
+ outputPattern
544
+ ],
545
+ { signal, timeoutMs: remainingTimeoutMs() }
546
+ );
547
+ if (signal.aborted) {
548
+ return mediaPolicyToolError("keyframe extraction aborted");
549
+ }
550
+ if (scenePass.code !== 0) {
551
+ return mediaPolicyToolError(
552
+ ffmpegFailureMessage(
553
+ scenePass,
554
+ "extracting keyframes from",
555
+ this.params.inputPath
556
+ )
557
+ );
558
+ }
559
+ const frameFiles = await listFrameFiles(
560
+ this.params.outputDir,
561
+ frameNameTemplate
562
+ );
563
+ if (frameFiles.length === 0) {
564
+ return mediaPolicyToolError(
565
+ `no keyframes could be extracted from ${path.basename(this.params.inputPath)}`
566
+ );
567
+ }
568
+ const timestamps = parseShowinfoTimestamps(scenePass.stderr);
569
+ return frameFiles.map((fileName, index) => {
570
+ const t = timestamps[index];
571
+ return {
572
+ fileName,
573
+ timeSeconds: t !== void 0 && Number.isFinite(t) ? t : void 0
574
+ };
575
+ });
576
+ }
577
+ };
578
+ var OmniExtractKeyframesTool = class extends BaseMediaPolicyTool {
579
+ static {
580
+ __name(this, "OmniExtractKeyframesTool");
581
+ }
582
+ constructor(config) {
583
+ super(
584
+ OMNI_EXTRACT_KEYFRAMES_TOOL_NAME,
585
+ "ExtractKeyframes",
586
+ "Extracts representative still frames spread across the full video duration (per-segment scene detection with midpoint fallback), producing JPEG keyframes with per-frame timestamps and a disclosure of the temporal loss.",
587
+ "other" /* Other */,
588
+ {
589
+ type: "object",
590
+ properties: {
591
+ ...MEDIA_POLICY_IO_SCHEMA_PROPERTIES,
592
+ ...TUNABLE_SCHEMA_PROPERTIES
593
+ },
594
+ required: ["outputDir"],
595
+ additionalProperties: false
596
+ },
597
+ config
598
+ );
599
+ }
600
+ get mediaPolicyDescriptor() {
601
+ return DESCRIPTOR;
602
+ }
603
+ createInvocation(params) {
604
+ return new ExtractKeyframesInvocation(
605
+ params,
606
+ resolvePolicyToolSettings(this.configView, this.name),
607
+ resolvePolicyToolTimeoutMs(this.configView, this.name)
608
+ );
609
+ }
610
+ };
611
+ export {
612
+ EXTRACT_KEYFRAMES_DEFAULTS,
613
+ OMNI_EXTRACT_KEYFRAMES_TOOL_NAME,
614
+ OmniExtractKeyframesTool,
615
+ parseShowinfoTimestamps
616
+ };
617
+ /**
618
+ * @license
619
+ * Copyright 2025 Google LLC
620
+ * SPDX-License-Identifier: Apache-2.0
621
+ */
@@ -1,11 +1,11 @@
1
1
  // Force strict mode and setup for ESM
2
2
  "use strict";
3
- import {
4
- RUNTIME_STARTUP_CANCELLED_MESSAGE
5
- } from "./chunk-QUPXZXLV.js";
6
3
  import {
7
4
  getHeadlessYoloSafetyWarning
8
5
  } from "./chunk-6H67XLET.js";
6
+ import {
7
+ RUNTIME_STARTUP_CANCELLED_MESSAGE
8
+ } from "./chunk-QUPXZXLV.js";
9
9
  import {
10
10
  MAX_COMPACTED_REPLAY_MAX_BYTES
11
11
  } from "./chunk-WCCLLK7X.js";
@@ -374,7 +374,7 @@ async function maybeOpenWebShellBrowser(handle, open, openWithAuth) {
374
374
  } catch {
375
375
  return;
376
376
  }
377
- const { maybeOpenWebShellBrowser: openBrowser } = await import("./serve-2XXQLVK2.js");
377
+ const { maybeOpenWebShellBrowser: openBrowser } = await import("./serve-UQL5X5K7.js");
378
378
  await openBrowser(handle, true, openWithAuth);
379
379
  }
380
380
  __name(maybeOpenWebShellBrowser, "maybeOpenWebShellBrowser");
@@ -447,7 +447,7 @@ async function tryRunServeFastPath(rawArgv = process.argv.slice(2)) {
447
447
  process.exit(1);
448
448
  }
449
449
  }
450
- const { runQwenServe } = await import("./run-qwen-serve-ZVEKGS7Y.js");
450
+ const { runQwenServe } = await import("./run-qwen-serve-3K3D5MSR.js");
451
451
  let handle;
452
452
  try {
453
453
  handle = await runQwenServe(parsed.options, {
@@ -0,0 +1,21 @@
1
+ // Force strict mode and setup for ESM
2
+ "use strict";
3
+ import {
4
+ assertOmniRuntimeDependencies,
5
+ isFfmpegAvailable,
6
+ isFfprobeAvailable,
7
+ probeMediaMetadata,
8
+ resetFfmpegCachesForTests,
9
+ runFfmpeg
10
+ } from "./chunk-KSEKRQJO.js";
11
+ import "./chunk-S34QJ6IR.js";
12
+ import "./chunk-5O2XNYP6.js";
13
+ import "./chunk-J2S4EL5Y.js";
14
+ export {
15
+ assertOmniRuntimeDependencies,
16
+ isFfmpegAvailable,
17
+ isFfprobeAvailable,
18
+ probeMediaMetadata,
19
+ resetFfmpegCachesForTests,
20
+ runFfmpeg
21
+ };