@qwen-code/qwen-code 0.23.5-preview.0 → 0.24.0-nightly.20260917.f822124af5

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 (498) hide show
  1. package/bundled/goal-draft/SKILL.md +5 -5
  2. package/bundled/qc-helper/docs/configuration/auth.md +1 -0
  3. package/bundled/qc-helper/docs/configuration/model-providers.md +43 -14
  4. package/bundled/qc-helper/docs/configuration/settings.md +2 -1
  5. package/bundled/qc-helper/docs/extension/introduction.md +2 -0
  6. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  7. package/bundled/qc-helper/docs/features/goals.md +11 -11
  8. package/bundled/qc-helper/docs/features/hooks.md +8 -10
  9. package/bundled/qc-helper/docs/features/omni-fixed-policies-preset.json +242 -0
  10. package/bundled/qc-helper/docs/features/omni-media-policies.md +443 -0
  11. package/bundled/qc-helper/docs/overview.md +1 -1
  12. package/bundled/qc-helper/docs/quickstart.md +2 -3
  13. package/bundled/review/SKILL.md +1 -1
  14. package/bundled/workflow-authoring/SKILL.md +22 -7
  15. package/chunks/MaxSizedBox-4VDYUHUI.js +148 -0
  16. package/chunks/{StandaloneSessionPicker-V635V72I.js → StandaloneSessionPicker-SGMGJOH3.js} +115 -91
  17. package/chunks/acp-subagent-executor-EGAATYQA.js +164 -0
  18. package/chunks/{acpAgent-3DPWZTNC.js → acpAgent-2JQ2N2T5.js} +361 -229
  19. package/chunks/{agent-KIHGINKN.js → agent-QWNE3MPD.js} +59 -49
  20. package/chunks/agent-headless-GRSMZK5Z.js +104 -0
  21. package/chunks/{anthropicContentGenerator-4FGOM5LK.js → anthropicContentGenerator-INV24RMG.js} +30 -27
  22. package/chunks/{artifact-tool-MUTNH4NI.js → artifact-tool-3MWM6SN2.js} +11 -7
  23. package/chunks/{askUserQuestion-AKIRLVB5.js → askUserQuestion-YFFBB4K3.js} +6 -4
  24. package/chunks/bridge-R65BJ2YL.js +156 -0
  25. package/chunks/{build-5KWQBWEQ.js → build-5OQN7CDU.js} +1 -1
  26. package/chunks/caption-audio-UXXLI3JZ.js +443 -0
  27. package/chunks/caption-image-B7O4TUFP.js +247 -0
  28. package/chunks/{channel-management-service-RRILWSXX.js → channel-management-service-GRJG5R46.js} +1 -1
  29. package/chunks/channel-settings-store-TBLCDTV2.js +158 -0
  30. package/chunks/{channel-worker-group-3DUJFZJR.js → channel-worker-group-SCSKCSBJ.js} +4 -4
  31. package/chunks/{channel-worker-manager-E5UW2VLA.js → channel-worker-manager-AHCZCKON.js} +4 -4
  32. package/chunks/{channel-worker-supervisor-VN33GSEC.js → channel-worker-supervisor-BGUAVITB.js} +3 -3
  33. package/chunks/{chunk-5NUKK2DT.js → chunk-25FMWESU.js} +47 -8
  34. package/chunks/{chunk-VVI7MK3V.js → chunk-2A6RZKP2.js} +9 -7
  35. package/chunks/{chunk-3WWPEFMX.js → chunk-2FQM443D.js} +82 -4
  36. package/chunks/{chunk-D3KVGQUV.js → chunk-37XDTMFG.js} +4 -4
  37. package/chunks/{chunk-TDKUXSJO.js → chunk-3MW6PPA5.js} +1 -1
  38. package/chunks/{chunk-4LIPOIXS.js → chunk-3NHJLWOD.js} +1 -1
  39. package/chunks/{chunk-AQP3H22J.js → chunk-3ZGIRRAE.js} +1 -1
  40. package/chunks/{chunk-WSJI6ODG.js → chunk-422D2UIO.js} +210 -150
  41. package/chunks/chunk-43QUA4MC.js +135 -0
  42. package/chunks/{chunk-Q2SAQTEJ.js → chunk-4B7U3KQP.js} +1 -1
  43. package/chunks/{chunk-SFL6U7U7.js → chunk-4JFRCIMW.js} +2 -2
  44. package/chunks/{chunk-IVFTLUZD.js → chunk-4SZ2636R.js} +3 -3
  45. package/chunks/{chunk-6OTF7TTE.js → chunk-4VYTH6OF.js} +24 -1
  46. package/chunks/{chunk-7CLLH5TI.js → chunk-4YS7RMCB.js} +6 -4
  47. package/chunks/{chunk-BW2SMO6L.js → chunk-5FHOPPLZ.js} +1 -1
  48. package/chunks/{chunk-QIPLWW6Q.js → chunk-5MYQ66UF.js} +1 -1
  49. package/chunks/{chunk-TXTCM3TC.js → chunk-5VDOVBNG.js} +18 -14
  50. package/chunks/{chunk-L2A5VBDL.js → chunk-67ZCKSV6.js} +9 -9
  51. package/chunks/chunk-6C3D7BKK.js +153 -0
  52. package/chunks/{chunk-DC4ZNGH4.js → chunk-6DB6UHY3.js} +3 -3
  53. package/chunks/{chunk-AXPOOQAW.js → chunk-736AZVPL.js} +2 -2
  54. package/chunks/{chunk-M22WLKLI.js → chunk-77ORAIEF.js} +7 -7
  55. package/chunks/{chunk-BUQN5LTI.js → chunk-7PQ65Z5F.js} +2 -2
  56. package/chunks/{chunk-CXY6BICQ.js → chunk-A5EGR6ZS.js} +204 -120
  57. package/chunks/{chunk-VQDWCQOE.js → chunk-ANKISCKU.js} +1 -0
  58. package/chunks/{chunk-7D4CV7JH.js → chunk-APHDK7GV.js} +116 -4
  59. package/chunks/{chunk-B5TJK7B3.js → chunk-ARKOX7HM.js} +1 -1
  60. package/chunks/{chunk-NXUZFW3G.js → chunk-AUFTA63J.js} +1 -1
  61. package/chunks/{chunk-36SDZ2Q4.js → chunk-B3HGO6BB.js} +7 -5
  62. package/chunks/{chunk-6USYH3EU.js → chunk-B3XJFEEH.js} +5 -3
  63. package/chunks/{chunk-AEWCOE64.js → chunk-B5WYAQ4I.js} +2 -2
  64. package/chunks/{chunk-GSKX53AN.js → chunk-BA6AXQDA.js} +1 -1
  65. package/chunks/{chunk-Y2KJC55Y.js → chunk-BBHLWLIK.js} +4 -4
  66. package/chunks/chunk-BKVPLSEI.js +133 -0
  67. package/chunks/chunk-BQMSZSG6.js +21 -0
  68. package/chunks/{chunk-3LMDSCLU.js → chunk-C4FISGDN.js} +2 -2
  69. package/chunks/{chunk-SFHX5G2S.js → chunk-C4MMZVYX.js} +80 -15
  70. package/chunks/{chunk-4JFLRHNE.js → chunk-C4QWV63F.js} +1 -1
  71. package/chunks/{chunk-XFFRI3WM.js → chunk-CA63HYHU.js} +4 -2
  72. package/chunks/{chunk-FBY32737.js → chunk-CJNWKJFH.js} +4 -4
  73. package/chunks/{chunk-QT6Z2IBF.js → chunk-CYFQLCCG.js} +2 -2
  74. package/chunks/{chunk-X7AYIXC7.js → chunk-DJLCK66M.js} +5 -3
  75. package/chunks/chunk-DJYHML3Y.js +121 -0
  76. package/chunks/{chunk-MO4XID7S.js → chunk-DNDECZXY.js} +3 -3
  77. package/chunks/{chunk-H6L4NEAT.js → chunk-DQCGGSDO.js} +1 -1
  78. package/chunks/{chunk-347O2YZJ.js → chunk-DUWQ5Q6R.js} +115 -67
  79. package/chunks/{chunk-FEDFZBGR.js → chunk-E6A52AP2.js} +28 -17
  80. package/chunks/{chunk-TIGXX4PA.js → chunk-EKBQJ627.js} +2 -2
  81. package/chunks/{chunk-RSWBT7AZ.js → chunk-ERIBG3BX.js} +35 -551
  82. package/chunks/{chunk-PPJSG2PU.js → chunk-EVZT24AF.js} +6 -142
  83. package/chunks/{chunk-YZXSDPOQ.js → chunk-F7L4ZMKS.js} +84 -40
  84. package/chunks/{chunk-HX4WXX3H.js → chunk-FGAWVV4X.js} +101 -75
  85. package/chunks/chunk-FT3O44AZ.js +1635 -0
  86. package/chunks/chunk-FTKXJMQV.js +255 -0
  87. package/chunks/{chunk-5FK4MSHB.js → chunk-FWP5GZRY.js} +6 -4
  88. package/chunks/{chunk-TRZ22SG5.js → chunk-FXPP7VLM.js} +6 -4
  89. package/chunks/{chunk-INN5ORKX.js → chunk-G25IQMCV.js} +1 -1
  90. package/chunks/{chunk-OWUAZXXN.js → chunk-GHG4PQY2.js} +3 -3
  91. package/chunks/{chunk-FASYATAZ.js → chunk-GL5TRVMS.js} +1 -1
  92. package/chunks/{chunk-G45B3INR.js → chunk-GVTAFLWB.js} +2 -2
  93. package/chunks/{chunk-G6UUOCUT.js → chunk-GXNXX7A2.js} +7 -1
  94. package/chunks/{chunk-GI7SLDOI.js → chunk-HUUBCY33.js} +6 -6
  95. package/chunks/chunk-I7MIPRIQ.js +181 -0
  96. package/chunks/{chunk-NQ272MQG.js → chunk-IAKJXTGS.js} +7 -5
  97. package/chunks/{chunk-V4JJAVHQ.js → chunk-ID7XHHY5.js} +2 -2
  98. package/chunks/{chunk-IXO2OCIP.js → chunk-IIHFUREY.js} +12 -8
  99. package/chunks/{chunk-IZ2U57NY.js → chunk-IITTKFWM.js} +4 -2
  100. package/chunks/chunk-IVPSLX4P.js +578 -0
  101. package/chunks/{chunk-BTICBRPL.js → chunk-IWMYX5LB.js} +3 -3
  102. package/chunks/{chunk-UZSB57EV.js → chunk-JR2WFCQG.js} +29 -17
  103. package/chunks/{chunk-GJKP6XOB.js → chunk-JWV5GI77.js} +16 -19
  104. package/chunks/chunk-JYGESWZM.js +149 -0
  105. package/chunks/{chunk-KVC7HZWK.js → chunk-JYTJ5FCM.js} +1 -1
  106. package/chunks/{chunk-SOLRBF7L.js → chunk-JZUSFW64.js} +10 -10
  107. package/chunks/{chunk-CDDP4ONL.js → chunk-K2T5PKFS.js} +60 -134
  108. package/chunks/{chunk-EIBECN2J.js → chunk-K5VVDHDV.js} +5 -5
  109. package/chunks/{chunk-NKTMUPHJ.js → chunk-KDM4KSVG.js} +14 -4
  110. package/chunks/{chunk-3WILPKTJ.js → chunk-KKPIFWTZ.js} +11 -6
  111. package/chunks/{chunk-3HTUE6ZR.js → chunk-KPK6NQVR.js} +4 -4
  112. package/chunks/{chunk-CXONOVBN.js → chunk-KS6F6LZQ.js} +8 -6
  113. package/chunks/{chunk-D7JMO2GP.js → chunk-KSECLXYH.js} +1 -1
  114. package/chunks/chunk-KSEKRQJO.js +253 -0
  115. package/chunks/{chunk-KEM7MWS7.js → chunk-KWZ2DDOC.js} +765 -428
  116. package/chunks/{chunk-U4AASWUQ.js → chunk-L4GF4IK2.js} +3 -3
  117. package/chunks/{chunk-CQPM66MG.js → chunk-L7HFHYGB.js} +4 -4
  118. package/chunks/{chunk-DJXSOEFB.js → chunk-LAE6RY3L.js} +1 -1
  119. package/chunks/{chunk-WNQIJTOP.js → chunk-LDM3JQZF.js} +243 -17
  120. package/chunks/{chunk-KVQ3QL4K.js → chunk-LLTRNLK2.js} +3 -3
  121. package/chunks/{chunk-IKBEIDOH.js → chunk-LVXTBFWP.js} +13 -13
  122. package/chunks/{chunk-AKRSSKUT.js → chunk-LWALWKFU.js} +10 -10
  123. package/chunks/{chunk-WL36KHUQ.js → chunk-LWV4RLBT.js} +11 -9
  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-ZMYKNKET.js → chunk-MQWZWHTY.js} +3 -3
  128. package/chunks/{chunk-M4U2LTD2.js → chunk-MS4SXNJ6.js} +1 -1
  129. package/chunks/{chunk-QHSOINX6.js → chunk-MZKXPQWL.js} +2 -2
  130. package/chunks/{chunk-36NRLIR6.js → chunk-NBLWUMYE.js} +13 -11
  131. package/chunks/{chunk-DRAX5YAI.js → chunk-NFC4WTY2.js} +6 -4
  132. package/chunks/chunk-NX6JUO42.js +102 -0
  133. package/chunks/chunk-O345BAI3.js +42 -0
  134. package/chunks/{chunk-YM6KUQ2S.js → chunk-O4A2B6V2.js} +3 -3
  135. package/chunks/chunk-O55EKI4S.js +7668 -0
  136. package/chunks/{chunk-3UGMLA4V.js → chunk-OA5H5PPQ.js} +10 -10
  137. package/chunks/{chunk-DX6JTDMR.js → chunk-OB57Y2WH.js} +1 -1
  138. package/chunks/{chunk-4QPVZA5J.js → chunk-OOSOAFCT.js} +3 -3
  139. package/chunks/{chunk-E2VSBAFA.js → chunk-OXBD7VUE.js} +5 -5
  140. package/chunks/{chunk-M23GFJ5B.js → chunk-OY5GQPMU.js} +1 -1
  141. package/chunks/chunk-PF3RVYRK.js +108 -0
  142. package/chunks/{chunk-XWJFDJZK.js → chunk-PJSZXERN.js} +1 -1
  143. package/chunks/{chunk-GSAOVDTH.js → chunk-POMFSBEC.js} +4 -4
  144. package/chunks/{chunk-EWNKP4V4.js → chunk-PPVM7YLS.js} +1 -1
  145. package/chunks/{chunk-WK6DEH3Q.js → chunk-PQQV3OBW.js} +6 -4
  146. package/chunks/{chunk-ZSTCM3MX.js → chunk-Q5N5NEVT.js} +1 -1
  147. package/chunks/{chunk-HYHSMTRA.js → chunk-QCTWNYL6.js} +4 -4
  148. package/chunks/{chunk-KFFCDLKV.js → chunk-QE36VXWP.js} +1 -1
  149. package/chunks/{chunk-3LLEB5CU.js → chunk-QG73VXTF.js} +2 -2
  150. package/chunks/{chunk-QMENOK5T.js → chunk-QJJN2VJY.js} +10 -8
  151. package/chunks/{chunk-XICCGDWF.js → chunk-QKYAXSNG.js} +2 -2
  152. package/chunks/{chunk-V545KI73.js → chunk-QPTE6BKL.js} +1 -1
  153. package/chunks/{chunk-2GP6BQ2J.js → chunk-RA6PKQVM.js} +2 -2
  154. package/chunks/{chunk-TPY6HW55.js → chunk-RFAX4WKE.js} +13 -7
  155. package/chunks/chunk-RSFNJ6UU.js +1252 -0
  156. package/chunks/{chunk-EDIDYZBT.js → chunk-RVT5L74D.js} +1 -1
  157. package/chunks/{chunk-FCPJXKDG.js → chunk-RXDTMGUH.js} +9 -9
  158. package/chunks/{chunk-P42KMMU6.js → chunk-RZZLNI74.js} +27 -25
  159. package/chunks/{chunk-ZFHKUQZ4.js → chunk-S2R4L34O.js} +12 -5
  160. package/chunks/chunk-S34QJ6IR.js +290 -0
  161. package/chunks/chunk-S5BHLTHK.js +190 -0
  162. package/chunks/{chunk-2XRE4KE4.js → chunk-S7BE3FMA.js} +1 -1
  163. package/chunks/{chunk-7O5PYQ3M.js → chunk-SBP43AO6.js} +1 -1
  164. package/chunks/chunk-SLHYLVRW.js +1377 -0
  165. package/chunks/{chunk-SSWTA7CH.js → chunk-SLV3GU2S.js} +12 -12
  166. package/chunks/chunk-SLVJ55G3.js +11397 -0
  167. package/chunks/{chunk-5VQR2DD7.js → chunk-SQRZJD25.js} +5 -3
  168. package/chunks/{chunk-K4XMAIRX.js → chunk-SRFYBJ4P.js} +14 -14
  169. package/chunks/{chunk-Y4NNIGYO.js → chunk-SSFOFDNL.js} +1 -1
  170. package/chunks/{chunk-NFXXBWSE.js → chunk-SU64336V.js} +2 -2
  171. package/chunks/{chunk-RRI764F7.js → chunk-SWHBXWVS.js} +45 -26
  172. package/chunks/{chunk-BHVF3R6B.js → chunk-TAMBGU42.js} +4 -4
  173. package/chunks/chunk-TFDCK56Y.js +154 -0
  174. package/chunks/{chunk-Q54O3EIA.js → chunk-TNTYSST7.js} +55 -33
  175. package/chunks/{chunk-JRHKM3YQ.js → chunk-TS4JJ7NN.js} +2 -2
  176. package/chunks/{chunk-VEXUA6DX.js → chunk-TWD6EZLA.js} +13 -11
  177. package/chunks/{chunk-WZWTY7SG.js → chunk-TZ4QKMPU.js} +6 -6
  178. package/chunks/{chunk-C4HBZQNH.js → chunk-U3MTHCJF.js} +1 -1
  179. package/chunks/{chunk-VU3XMZ5I.js → chunk-U3VIKF53.js} +3 -3
  180. package/chunks/{chunk-BHG3H6OZ.js → chunk-U4KO33OD.js} +1 -1
  181. package/chunks/{chunk-2C5TR6HN.js → chunk-UANUZBL2.js} +1 -1
  182. package/chunks/{chunk-Y53DG2HA.js → chunk-UIWUFHRJ.js} +1 -1
  183. package/chunks/{chunk-UQGRJTDK.js → chunk-UP3XL4VB.js} +3 -3
  184. package/chunks/{chunk-43Y26NPF.js → chunk-UR27ZXFZ.js} +3 -3
  185. package/chunks/{chunk-LO2UWNO5.js → chunk-UXC6MURF.js} +3 -3
  186. package/chunks/chunk-UXEI7POA.js +273 -0
  187. package/chunks/chunk-V2XJJTAB.js +228 -0
  188. package/chunks/chunk-VDNCKE2O.js +24 -0
  189. package/chunks/{chunk-YQQ2U7AS.js → chunk-VLBL6Q7X.js} +1 -1
  190. package/chunks/{chunk-HNFKYKHH.js → chunk-VNQTV5NC.js} +104 -26
  191. package/chunks/chunk-VPGRGNNH.js +578 -0
  192. package/chunks/{chunk-TKF4JINY.js → chunk-VVQ57VLE.js} +1 -1
  193. package/chunks/{chunk-AUX2FL5T.js → chunk-W2UTVLT2.js} +641 -11
  194. package/chunks/{chunk-SYMXYRM5.js → chunk-W7JWIIRC.js} +1 -1
  195. package/chunks/{chunk-WBSJ6VPZ.js → chunk-WDVSRQIQ.js} +3 -3
  196. package/chunks/{chunk-AZCTY64Z.js → chunk-WEUQIY3Q.js} +1 -1
  197. package/chunks/{chunk-FX6PZBOV.js → chunk-WHBL5HJF.js} +4 -4
  198. package/chunks/chunk-WL2V7PTE.js +78 -0
  199. package/chunks/{chunk-OSG23MR3.js → chunk-X3T5IOX6.js} +2 -2
  200. package/chunks/{chunk-OZEV3R3S.js → chunk-XYAB5R6E.js} +3 -3
  201. package/chunks/chunk-XZA32HII.js +19 -0
  202. package/chunks/{chunk-4FLUQWJ4.js → chunk-Y3Q5OK4D.js} +1 -1
  203. package/chunks/chunk-YDERQ7ZV.js +248 -0
  204. package/chunks/{chunk-QGEISOJ2.js → chunk-YKM7SY3N.js} +3 -3
  205. package/chunks/{chunk-HXUI5D4H.js → chunk-YRNAZIDX.js} +1 -1
  206. package/chunks/{chunk-MFDKHGTD.js → chunk-YRNLF4SV.js} +3 -1
  207. package/chunks/{chunk-3XBUCOWS.js → chunk-YSD6IY6F.js} +2 -2
  208. package/chunks/{chunk-CH2YDT6X.js → chunk-YVYK3JYU.js} +5 -3
  209. package/chunks/{chunk-YL3UJML3.js → chunk-YWDVNBGE.js} +4 -4
  210. package/chunks/{chunk-KAYC5FBN.js → chunk-Z3DLUFMT.js} +1595 -1399
  211. package/chunks/chunk-Z547XC3A.js +44 -0
  212. package/chunks/{chunk-B6RMK4ED.js → chunk-Z5UFM7P6.js} +9 -7
  213. package/chunks/chunk-ZAX2LW35.js +1330 -0
  214. package/chunks/{chunk-C3T6HPNM.js → chunk-ZGADNVME.js} +5 -5
  215. package/chunks/{chunk-M3JGHRMQ.js → chunk-ZJ7KIWG5.js} +1 -1
  216. package/chunks/{chunk-SYROIHU7.js → chunk-ZRQGTRHA.js} +4 -2
  217. package/chunks/{chunk-NCPFOLM2.js → chunk-ZTBP4SFC.js} +78 -18
  218. package/chunks/{chunk-ZAFYHRVY.js → chunk-ZYDMQCQP.js} +4 -274
  219. package/chunks/{chunk-YP2K3WOS.js → chunk-ZYLZNSBW.js} +7 -4
  220. package/chunks/clip-audio-SH4L7AEY.js +255 -0
  221. package/chunks/clip-image-BQRPECIS.js +239 -0
  222. package/chunks/clip-video-JIRMV5IH.js +277 -0
  223. package/chunks/{codex-subagent-executor-AEAIQZDC.js → codex-subagent-executor-BQZZ3Z4E.js} +92 -68
  224. package/chunks/config-3X4AXU45.js +21 -0
  225. package/chunks/config-T5RO4NJV.js +17 -0
  226. package/chunks/config-utils-65HZJG2Y.js +151 -0
  227. package/chunks/contextCommand-P2WZOTZP.js +144 -0
  228. package/chunks/convert-image-D52K2FFB.js +231 -0
  229. package/chunks/{core-runtime-ZI4RTOJQ.js → core-runtime-G7RWUDR5.js} +94 -67
  230. package/chunks/{create-sub-session-MSGNIM37.js → create-sub-session-6EDEANCD.js} +7 -5
  231. package/chunks/{create-sub-session-BBWFQARJ.js → create-sub-session-C6OHZMEI.js} +90 -66
  232. package/chunks/{cron-create-U2JJ5CCF.js → cron-create-GS7ORRO6.js} +8 -5
  233. package/chunks/{cron-delete-7DM4LJWD.js → cron-delete-3GGDNNXD.js} +8 -5
  234. package/chunks/{cron-list-VCUSZK2Y.js → cron-list-EX27DW4H.js} +8 -5
  235. package/chunks/{daemon-INCM4VBX.js → daemon-62G2N3ZH.js} +1 -1
  236. package/chunks/{daemon-git-worktree-guard-KECEMV6A.js → daemon-git-worktree-guard-Y5MRUXHR.js} +90 -66
  237. package/chunks/daemon-status-provider-ORUXPQJO.js +155 -0
  238. package/chunks/daemon-trust-policy-CG35YJC5.js +150 -0
  239. package/chunks/{daemon-trust-policy-monitor-546N5ZVL.js → daemon-trust-policy-monitor-PT2ZJL3A.js} +96 -72
  240. package/chunks/deferred-core-runtime-K74JXKVR.js +153 -0
  241. package/chunks/{display-image-QTHALY6N.js → display-image-L3A755PZ.js} +10 -7
  242. package/chunks/{dist-BNW423XT.js → dist-CXDHIHN4.js} +5 -0
  243. package/chunks/downsample-audio-LPDWX6GF.js +217 -0
  244. package/chunks/downsample-image-A5JEYIV5.js +249 -0
  245. package/chunks/downscale-video-4W5BX5KO.js +249 -0
  246. package/chunks/{earlyInputCapture-BXP7V2P3.js → earlyInputCapture-UJ3KFVZQ.js} +3 -2
  247. package/chunks/{edit-CMSQB7NP.js → edit-VBS2GF24.js} +68 -56
  248. package/chunks/{en-56QLKXS2.js → en-FCK6MBTI.js} +16 -0
  249. package/chunks/{enter-worktree-DA6A4XC5.js → enter-worktree-QK7DR5EF.js} +12 -9
  250. package/chunks/{enterPlanMode-UDPMNESD.js → enterPlanMode-WC33QFGB.js} +62 -51
  251. package/chunks/environment-HN47IXJZ.js +167 -0
  252. package/chunks/errors-JC3V3RJA.js +151 -0
  253. package/chunks/{exec-RPKEY6HP.js → exec-7CFNHYCV.js} +31 -9
  254. package/chunks/{exit-worktree-4H6Z2VQI.js → exit-worktree-62COYIHF.js} +14 -10
  255. package/chunks/exitPlanMode-7R7DYPUV.js +102 -0
  256. package/chunks/extract-audio-GSSZQV6G.js +229 -0
  257. package/chunks/extract-keyframes-Q6DRMQAJ.js +621 -0
  258. package/chunks/{fast-path-F2CYDDZ4.js → fast-path-WN7SASHV.js} +6 -6
  259. package/chunks/{fast-path-settings-N2VGRGDJ.js → fast-path-settings-ASPHHCAG.js} +2 -2
  260. package/chunks/ffmpeg-N4LIIVNR.js +21 -0
  261. package/chunks/{glob-Z2JMJKKN.js → glob-HHM36TVT.js} +63 -51
  262. package/chunks/{goal-tools-HXVVLGCV.js → goal-tools-JTF7S4FP.js} +59 -49
  263. package/chunks/{grep-H2I33VAO.js → grep-JB5DGQ3B.js} +13 -9
  264. package/chunks/handleAutoUpdate-GGFSWLAH.js +147 -0
  265. package/chunks/i18n-NYQWDZWJ.js +164 -0
  266. package/chunks/{image-gen-HIAZCB5T.js → image-gen-LX3C4V3R.js} +16 -11
  267. package/chunks/initializer-6IZ4SNMM.js +151 -0
  268. package/chunks/installationInfo-K4KMCK7Q.js +145 -0
  269. package/chunks/{keychain-token-storage-NQ5XWIPX.js → keychain-token-storage-ZZNRE6D4.js} +3 -2
  270. package/chunks/list-KAWCG4I6.js +154 -0
  271. package/chunks/{list-agents-EWDCEPIW.js → list-agents-HS6HH4DJ.js} +10 -7
  272. package/chunks/{llm-LSUBOJAR.js → llm-UAZU4HC5.js} +162 -135
  273. package/chunks/{llm-content-generator-MLIONRXE.js → llm-content-generator-M3MT4BP3.js} +11 -9
  274. package/chunks/loadedSettingsAdapter-XKUVLEYR.js +152 -0
  275. package/chunks/{loggingContentGenerator-TUPEXFMM.js → loggingContentGenerator-2WW2O46K.js} +74 -63
  276. package/chunks/{loop-wakeup-ZBVRI6VH.js → loop-wakeup-4B7OY3TV.js} +9 -6
  277. package/chunks/{ls-6ZB3BEIR.js → ls-EZ5PSWU2.js} +8 -5
  278. package/chunks/{lsp-M54FQARP.js → lsp-DYFFHKB3.js} +6 -3
  279. package/chunks/{managed-npm-update-WEA5XMFZ.js → managed-npm-update-VRSID5W3.js} +91 -67
  280. package/chunks/mcp-DQEPGE5B.js +148 -0
  281. package/chunks/memory-side-query-DRV7FXK4.js +221 -0
  282. package/chunks/model-call-collection-HXYIVZDO.js +171 -0
  283. package/chunks/model-configuration-5FJL5BJE.js +161 -0
  284. package/chunks/modelConfigUtils-UE3FDHG3.js +140 -0
  285. package/chunks/{monitor-CI7YE7MT.js → monitor-IRKGV3RU.js} +63 -51
  286. package/chunks/nonInteractiveCli-LF5DTTUJ.js +235 -0
  287. package/chunks/nonInteractiveToolExecutor-KGIGCNUC.js +101 -0
  288. package/chunks/{notebook-edit-3WCVRNGL.js → notebook-edit-E2NGGRVT.js} +63 -52
  289. package/chunks/ocr-image-Q4HYJ3U7.js +252 -0
  290. package/chunks/omni-EHZU5MVU.js +147 -0
  291. package/chunks/{openaiContentGenerator-OGILGUZE.js → openaiContentGenerator-VZ4QWOSU.js} +36 -31
  292. package/chunks/{openaiResponsesContentGenerator-NXOXUPFM.js → openaiResponsesContentGenerator-OQFPKE6V.js} +15 -12
  293. package/chunks/pidfile-OQREIPGE.js +151 -0
  294. package/chunks/{processUtils-O4II3RYH.js → processUtils-VFFEEP7L.js} +2 -2
  295. package/chunks/prompt-terminal-ledger-46ELXYOX.js +143 -0
  296. package/chunks/{qwenContentGenerator-I4LRYADV.js → qwenContentGenerator-H3CWSIV5.js} +70 -60
  297. package/chunks/{qwenOAuth2-3J66TOT5.js → qwenOAuth2-GD3UIYUP.js} +9 -8
  298. package/chunks/reactive-degrade-KRTLV22M.js +375 -0
  299. package/chunks/read-file-BSZJVJ4F.js +37 -0
  300. package/chunks/{read-mcp-resource-LPSWXVOD.js → read-mcp-resource-INJIV3UC.js} +8 -4
  301. package/chunks/recall-media-memory-tool-PEE2BWRY.js +198 -0
  302. package/chunks/{record-artifact-L3CFJOMA.js → record-artifact-KKW3AIMJ.js} +6 -4
  303. package/chunks/record-source-OZ7JQFJK.js +24 -0
  304. package/chunks/{report-findings-LY5HQY4K.js → report-findings-OZSLWYAS.js} +7 -5
  305. package/chunks/{request-shutdown-53SNYGVR.js → request-shutdown-NMWMWGNR.js} +12 -9
  306. package/chunks/resumeHistoryUtils-P33LLL4M.js +156 -0
  307. package/chunks/ripGrep-2FWQ6RU3.js +43 -0
  308. package/chunks/{run-qwen-serve-ZVEKGS7Y.js → run-qwen-serve-HMQ2QCS7.js} +85 -73
  309. package/chunks/runtime-5X746HBH.js +188 -0
  310. package/chunks/sandbox-5FENHQ3J.js +170 -0
  311. package/chunks/sandboxConfig-7V6K3L4N.js +138 -0
  312. package/chunks/scheduled-tasks-Z4YOCKQV.js +167 -0
  313. package/chunks/scheduler-64LTQG3P.js +160 -0
  314. package/chunks/{sdk-exporters-http-DR4G663K.js → sdk-exporters-http-SWXTEEVT.js} +3 -2
  315. package/chunks/{sdk-impl-SJR26MQF.js → sdk-impl-FK4JY6LX.js} +5 -4
  316. package/chunks/{send-message-DN76MXDX.js → send-message-SNCXOZA7.js} +16 -13
  317. package/chunks/serve-C56AM3HW.js +156 -0
  318. package/chunks/{server-UHMKPCAZ.js → server-5NPGYNJG.js} +2169 -529
  319. package/chunks/{session-ZLUK7E4P.js → session-JOY4PHTN.js} +152 -128
  320. package/chunks/session-attachments-root-765GPAJU.js +141 -0
  321. package/chunks/{session-pr-refresh-3OMTQWCZ.js → session-pr-refresh-JUKB3A7P.js} +95 -71
  322. package/chunks/{settings-P4DHIIUP.js → settings-P326ULSH.js} +95 -71
  323. package/chunks/{shell-IMFUVQQ5.js → shell-747O3UYW.js} +59 -49
  324. package/chunks/{skill-NB5RJGZW.js → skill-DOHHQC32.js} +22 -17
  325. package/chunks/skill-settings-RI5JR6ZG.js +164 -0
  326. package/chunks/spawnChannel-745P6IB6.js +152 -0
  327. package/chunks/standalone-update-JC4E4UEO.js +156 -0
  328. package/chunks/{start-opentui-ui-JKAIWGF7.js → start-opentui-ui-RC62XZUC.js} +1611 -800
  329. package/chunks/{startInteractiveUI-YRPOT6GH.js → startInteractiveUI-PIBA3ADH.js} +521 -374
  330. package/chunks/storage-VZECDJNX.js +17 -0
  331. package/chunks/{syntheticOutput-EX5L5GYI.js → syntheticOutput-SSXJ2NEY.js} +5 -3
  332. package/chunks/task-create-FD3EJI7F.js +30 -0
  333. package/chunks/{task-list-ZLJSMRFA.js → task-list-GA5GOR74.js} +9 -6
  334. package/chunks/{task-stop-MD7P6QGK.js → task-stop-3MXTDL7H.js} +6 -3
  335. package/chunks/{task-update-3LSYQDRW.js → task-update-YHFYE7L6.js} +16 -13
  336. package/chunks/{team-create-2XTBYRJF.js → team-create-PJYGG3AE.js} +62 -51
  337. package/chunks/{team-delete-RIDINW6I.js → team-delete-V2CROTI6.js} +9 -6
  338. package/chunks/{team-plan-approval-CFNWW7ZQ.js → team-plan-approval-B36IMXRL.js} +61 -50
  339. package/chunks/terminal-image-renderer-7OSAIRLS.js +156 -0
  340. package/chunks/theme-manager-PVMU3VN5.js +140 -0
  341. package/chunks/{todoWrite-XSTG2VT5.js → todoWrite-LT75PK2W.js} +8 -5
  342. package/chunks/tool-result-media-S6D7T7TZ.js +45 -0
  343. package/chunks/{tool-search-ZHTJU2MV.js → tool-search-MNRENFML.js} +43 -21
  344. package/chunks/total-session-admission-XOFLP43R.js +151 -0
  345. package/chunks/transcribe-audio-AJQZPNEV.js +30 -0
  346. package/chunks/trustedFolders-SBORXKH4.js +160 -0
  347. package/chunks/understand-video-segments-5TMRDQUB.js +438 -0
  348. package/chunks/{update-relaunch-LI7GRP36.js → update-relaunch-FVAD6CYB.js} +5 -5
  349. package/chunks/updateCheck-PK4QHA67.js +156 -0
  350. package/chunks/upload-cache-5YULQVZZ.js +17 -0
  351. package/chunks/upload-config-AZ63YJU2.js +25 -0
  352. package/chunks/useAutoAcceptIndicator-SPTOOUWR.js +158 -0
  353. package/chunks/{validateNonInterActiveAuth-YFPCYYNL.js → validateNonInterActiveAuth-XXHRLXWV.js} +144 -120
  354. package/chunks/{version-4MTL4JVU.js → version-AGTZHZNY.js} +1 -1
  355. package/chunks/{web-fetch-O6RG6ISB.js → web-fetch-KMXKLQKY.js} +27 -20
  356. package/chunks/{web-search-JHAXVEMD.js → web-search-OLBQWW2Y.js} +14 -11
  357. package/chunks/{web-shell-static-FFWCUUZS.js → web-shell-static-XSCCMXKQ.js} +3 -3
  358. package/chunks/{workflow-O7L6VDYU.js → workflow-2LC5ZV4Z.js} +214 -73
  359. package/chunks/workspace-providers-status-4IJHDGCM.js +154 -0
  360. package/chunks/{workspace-registration-store-7G4E7YPY.js → workspace-registration-store-M4LBEY5A.js} +1 -1
  361. package/chunks/workspace-registry-D4HQ3TWX.js +160 -0
  362. package/chunks/workspace-runtime-coordinator-ZG3IRRQ6.js +163 -0
  363. package/chunks/workspace-service-7ORHK4P4.js +165 -0
  364. package/chunks/workspace-skills-status-J43O7A5Q.js +151 -0
  365. package/chunks/{workspace-trust-reconciler-XEBW5FUL.js → workspace-trust-reconciler-7ZMDX27O.js} +99 -75
  366. package/chunks/write-file-MWN2PNMG.js +107 -0
  367. package/chunks/{zh-TW-S3YTQ4DS.js → zh-TW-SRB5QSER.js} +16 -0
  368. package/chunks/{zh-F76MZTL3.js → zh-UBQIFP4A.js} +16 -0
  369. package/chunks/{zoom-image-RDPRTP4B.js → zoom-image-H7MLEC2E.js} +18 -13
  370. package/cli.js +14 -14
  371. package/export-transcript-document.js +52 -52
  372. package/locales/en.js +18 -0
  373. package/locales/zh-TW.js +17 -0
  374. package/locales/zh.js +17 -0
  375. package/package.json +3 -3
  376. package/web-shell/assets/{abnfDiagram-VCTEODGH-RxykUDmi.js → abnfDiagram-VCTEODGH-L57MVQ_O.js} +1 -1
  377. package/web-shell/assets/{arc-CZpgGCJC.js → arc-Cdl4BCU9.js} +1 -1
  378. package/web-shell/assets/{architectureDiagram-5GKGNRK7-BHSMzNDT.js → architectureDiagram-5GKGNRK7-wLGfVuoB.js} +1 -1
  379. package/web-shell/assets/{blockDiagram-NRAW4CY4-Bn4mF9SZ.js → blockDiagram-NRAW4CY4-LXdTypiA.js} +1 -1
  380. package/web-shell/assets/{c4Diagram-UCG6FXSJ-CBM-Bj6t.js → c4Diagram-UCG6FXSJ-Ci95CJAD.js} +1 -1
  381. package/web-shell/assets/channel-DwdlDVan.js +1 -0
  382. package/web-shell/assets/{chunk-2Q5K7J3B-D5Fin58O.js → chunk-2Q5K7J3B-CTb0CG3P.js} +1 -1
  383. package/web-shell/assets/{chunk-5VM5RSS4-CY05weF7.js → chunk-5VM5RSS4-BIyA8dbi.js} +1 -1
  384. package/web-shell/assets/{chunk-F27PBJKO-3neZnj5Y.js → chunk-F27PBJKO-BlcPeoaN.js} +1 -1
  385. package/web-shell/assets/{chunk-G27WJ6UU-Cd7EU4BE.js → chunk-G27WJ6UU-KdH5H1ne.js} +1 -1
  386. package/web-shell/assets/{chunk-JWPE2WC7-DwK1mqFw.js → chunk-JWPE2WC7-DEh0r7ty.js} +1 -1
  387. package/web-shell/assets/{chunk-LCL6LL3I-Sl7vY22C.js → chunk-LCL6LL3I-DwD-l0mq.js} +1 -1
  388. package/web-shell/assets/{chunk-POPQ4Y6H-BXNzpbVg.js → chunk-POPQ4Y6H-D_ybAWGG.js} +1 -1
  389. package/web-shell/assets/{chunk-SVP7TREG-DjjButcp.js → chunk-SVP7TREG-Bk6Dq0yA.js} +1 -1
  390. package/web-shell/assets/{chunk-XXDRQBXY-DNOiCjOJ.js → chunk-XXDRQBXY-D4vL2YuW.js} +1 -1
  391. package/web-shell/assets/classDiagram-DTDB5LWJ-CIyD-qft.js +1 -0
  392. package/web-shell/assets/classDiagram-v2-JRS7N3AN-CIyD-qft.js +1 -0
  393. package/web-shell/assets/{cose-bilkent-JH36ORCC-BUnker7a.js → cose-bilkent-JH36ORCC-BditfMcM.js} +1 -1
  394. package/web-shell/assets/{cynefin-OW5HDTMX-DcUgdWE5.js → cynefin-OW5HDTMX-DAlaYMkD.js} +1 -1
  395. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-CvDKsZsL.js → cynefinDiagram-5FMLGOSQ-B9jOfS3X.js} +1 -1
  396. package/web-shell/assets/{dagre-3AP2YEHR-jpCmUbr1.js → dagre-3AP2YEHR-DO6EyeMX.js} +1 -1
  397. package/web-shell/assets/{diagram-S7CK7UJ4-DBe_bKE5.js → diagram-S7CK7UJ4-DIwGJ7mC.js} +1 -1
  398. package/web-shell/assets/{diagram-UQ7AKVKN-oXvPpDgs.js → diagram-UQ7AKVKN-DT5RqZBV.js} +1 -1
  399. package/web-shell/assets/{diagram-VSXAHHWV-BD7-_SGh.js → diagram-VSXAHHWV-DJBMayCs.js} +1 -1
  400. package/web-shell/assets/{diagram-VX7I27RA-DOJL0wub.js → diagram-VX7I27RA-BllSiq1w.js} +1 -1
  401. package/web-shell/assets/{diagram-Z3DM3KII-DRIiodDD.js → diagram-Z3DM3KII-Vw1NsAH3.js} +1 -1
  402. package/web-shell/assets/{ebnfDiagram-PWID7BFC-Db31Ulmb.js → ebnfDiagram-PWID7BFC-TY7loKI3.js} +1 -1
  403. package/web-shell/assets/{erDiagram-SSCWMZ5O-CVHhwI2_.js → erDiagram-SSCWMZ5O-BYrxi-FK.js} +1 -1
  404. package/web-shell/assets/{flowDiagram-A5DVABFB-DWOFy1FK.js → flowDiagram-A5DVABFB-BTQ4IRh-.js} +1 -1
  405. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-C0sxQtPd.js → ganttDiagram-EL5Y4UJY-96GXN9_Z.js} +1 -1
  406. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-CNituBYC.js → gitGraphDiagram-WWUBYQGX-BgIxQjuh.js} +1 -1
  407. package/web-shell/assets/{index-B15NlwB8.js → index-BvmsVGIg.js} +472 -465
  408. package/web-shell/assets/{index-BSrS0tQ6.css → index-D0aLpdAG.css} +2 -2
  409. package/web-shell/assets/{index-gm9tLk7h.js → index-SPar5CcF.js} +1 -1
  410. package/web-shell/assets/{infoDiagram-RXCK75RN-CxhJYtIR.js → infoDiagram-RXCK75RN-BlyUMpEA.js} +1 -1
  411. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-By2mchUy.js → ishikawaDiagram-5VMMS53U-94uLMZ3k.js} +1 -1
  412. package/web-shell/assets/{journeyDiagram-EYS64GPL-CVH-OweI.js → journeyDiagram-EYS64GPL-DbnJfG3S.js} +1 -1
  413. package/web-shell/assets/{kanban-definition-3QL26DDD-Cc9dQXLy.js → kanban-definition-3QL26DDD-gjWM2ioU.js} +1 -1
  414. package/web-shell/assets/{layout-C_60ysHw.js → layout-CmDpGoK-.js} +1 -1
  415. package/web-shell/assets/{linear-BvAVfqwu.js → linear-DksWgqn0.js} +1 -1
  416. package/web-shell/assets/{mermaid.core-C3CoBKAc.js → mermaid.core-DCpE5atR.js} +6 -6
  417. package/web-shell/assets/{mindmap-definition-FBJOCRG2-Cuu8Q8LM.js → mindmap-definition-FBJOCRG2-DanEOvck.js} +1 -1
  418. package/web-shell/assets/{pegDiagram-XKGWAZYB-DmAeyDO2.js → pegDiagram-XKGWAZYB-V2ee76OP.js} +1 -1
  419. package/web-shell/assets/{pieDiagram-E7YTZNPT-B7vbB_xv.js → pieDiagram-E7YTZNPT-CYvmbkkp.js} +1 -1
  420. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-BqOBkRR7.js → quadrantDiagram-AXDQQJYC-BRkw6ha0.js} +1 -1
  421. package/web-shell/assets/{railroadDiagram-O6MQD6OU-sI06lZIu.js → railroadDiagram-O6MQD6OU-D_YmVT7T.js} +1 -1
  422. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-Bg13d10S.js → requirementDiagram-EFPCY7ZU-DTF9UgWw.js} +1 -1
  423. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-WFOzZHrR.js → sankeyDiagram-P5KCCOFB-znmuOvtK.js} +1 -1
  424. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-CCdRbA4E.js → sequenceDiagram-WJ2MYXX4-B8CE9gDr.js} +1 -1
  425. package/web-shell/assets/{sizeCapture-X5ZJPWSS-BH5F3bGg.js → sizeCapture-X5ZJPWSS-BqE_jooQ.js} +1 -1
  426. package/web-shell/assets/{stateDiagram-HBIQ2CUA-NwS2X3QB.js → stateDiagram-HBIQ2CUA-4AmlCOLW.js} +1 -1
  427. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-DwExf4Jm.js +1 -0
  428. package/web-shell/assets/{swimlanes-XN3QIQJK-Bm38pM28.js → swimlanes-XN3QIQJK-B40gtZOq.js} +1 -1
  429. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-CXXUsHPj.js +8 -0
  430. package/web-shell/assets/{timeline-definition-24CTP7MA-Do-agLSo.js → timeline-definition-24CTP7MA-B23KIwTc.js} +1 -1
  431. package/web-shell/assets/{vennDiagram-4TSXK5OY-aggLfZzl.js → vennDiagram-4TSXK5OY-eyJpBjg6.js} +1 -1
  432. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-D5JR3mXX.js → wardleyDiagram-VM6X3IG4-BBjaaHeP.js} +1 -1
  433. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-DhtLDuXs.js → xychartDiagram-S5SC5T6Z-Cq3Bnvj4.js} +1 -1
  434. package/web-shell/index.html +2 -2
  435. package/chunks/MaxSizedBox-FCF6M53W.js +0 -124
  436. package/chunks/acp-subagent-executor-TND6W2O5.js +0 -140
  437. package/chunks/agent-headless-EJ4QOUSM.js +0 -94
  438. package/chunks/bridge-MUX5YJZT.js +0 -132
  439. package/chunks/channel-settings-store-7CBIRZER.js +0 -134
  440. package/chunks/chunk-FIJODK52.js +0 -154
  441. package/chunks/chunk-OALXNGUA.js +0 -2137
  442. package/chunks/chunk-PF7GAP6K.js +0 -16861
  443. package/chunks/config-utils-KX2YS725.js +0 -127
  444. package/chunks/contextCommand-RV6Y5LNJ.js +0 -120
  445. package/chunks/daemon-status-provider-NULJNAEV.js +0 -131
  446. package/chunks/daemon-trust-policy-S4KWGPV3.js +0 -126
  447. package/chunks/deferred-core-runtime-T23ZT443.js +0 -128
  448. package/chunks/environment-TSQJUTPV.js +0 -143
  449. package/chunks/errors-RIVYJS6T.js +0 -127
  450. package/chunks/exitPlanMode-BYBBFN2T.js +0 -92
  451. package/chunks/handleAutoUpdate-FZP45KOR.js +0 -123
  452. package/chunks/i18n-OTB62AKW.js +0 -140
  453. package/chunks/initializer-4JXZEC4B.js +0 -127
  454. package/chunks/installationInfo-2IJV5QKC.js +0 -121
  455. package/chunks/list-KQSQ4A5G.js +0 -130
  456. package/chunks/loadedSettingsAdapter-TZTTNRHI.js +0 -124
  457. package/chunks/mcp-TFDTUPIA.js +0 -124
  458. package/chunks/model-configuration-ZCAKKIOF.js +0 -137
  459. package/chunks/modelConfigUtils-J3ZPW7ZK.js +0 -116
  460. package/chunks/nonInteractiveCli-GPT3TVOK.js +0 -211
  461. package/chunks/pidfile-GBTBIGHF.js +0 -127
  462. package/chunks/prompt-terminal-ledger-ILIXZI3E.js +0 -119
  463. package/chunks/read-file-G4XKW2CS.js +0 -31
  464. package/chunks/record-source-2GSY5JD5.js +0 -22
  465. package/chunks/resumeHistoryUtils-YPJU4XFE.js +0 -132
  466. package/chunks/ripGrep-AAKMALLM.js +0 -39
  467. package/chunks/runtime-SJCRYNPA.js +0 -164
  468. package/chunks/sandbox-UIXL423Z.js +0 -146
  469. package/chunks/sandboxConfig-CY343YNJ.js +0 -114
  470. package/chunks/scheduled-tasks-5UGBEVNZ.js +0 -143
  471. package/chunks/scheduler-GCZYLZ2P.js +0 -136
  472. package/chunks/serve-2XXQLVK2.js +0 -132
  473. package/chunks/session-attachments-root-DHQM5IEZ.js +0 -117
  474. package/chunks/skill-settings-IXG5CTQO.js +0 -140
  475. package/chunks/spawnChannel-Q3YALTCJ.js +0 -128
  476. package/chunks/standalone-update-H5OJ7MM7.js +0 -132
  477. package/chunks/task-create-75HVPEAH.js +0 -28
  478. package/chunks/terminal-image-renderer-UDPJPGPQ.js +0 -132
  479. package/chunks/theme-manager-SK57EKMO.js +0 -116
  480. package/chunks/total-session-admission-UUZBDQCG.js +0 -127
  481. package/chunks/trustedFolders-4LDBLNTS.js +0 -136
  482. package/chunks/updateCheck-PKSSORPO.js +0 -132
  483. package/chunks/useAutoAcceptIndicator-I32UEQPI.js +0 -134
  484. package/chunks/workspace-providers-status-WRX6CJM4.js +0 -130
  485. package/chunks/workspace-registry-SXIMGT4D.js +0 -136
  486. package/chunks/workspace-runtime-coordinator-7DOEHXYT.js +0 -139
  487. package/chunks/workspace-service-HDXOZMYC.js +0 -141
  488. package/chunks/workspace-skills-status-VN4L37CA.js +0 -127
  489. package/chunks/write-file-LKX4ETIO.js +0 -97
  490. package/web-shell/assets/channel-DFYs_LlK.js +0 -1
  491. package/web-shell/assets/classDiagram-DTDB5LWJ-DnGrKXoM.js +0 -1
  492. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DnGrKXoM.js +0 -1
  493. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-1aU2JZXO.js +0 -1
  494. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Dp-u6kQG.js +0 -8
  495. package/chunks/{chunk-XAJZFGD2.js → chunk-PXXYQOZO.js} +8 -8
  496. package/chunks/{chunk-WVURIAEE.js → chunk-SVWWF5TZ.js} +3 -3
  497. package/chunks/{dist-G5UMXIGF.js → dist-I6D6XOWV.js} +1 -1
  498. 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";