@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.
- package/bundled/qc-helper/docs/features/_meta.ts +1 -0
- package/bundled/qc-helper/docs/features/goals.md +4 -2
- package/bundled/qc-helper/docs/features/omni-fixed-policies-preset.json +242 -0
- package/bundled/qc-helper/docs/features/omni-media-policies.md +443 -0
- package/bundled/qc-helper/docs/overview.md +1 -1
- package/bundled/qc-helper/docs/quickstart.md +2 -3
- package/chunks/MaxSizedBox-I5COUCHZ.js +148 -0
- package/chunks/{StandaloneSessionPicker-V635V72I.js → StandaloneSessionPicker-KUGOBVEW.js} +114 -90
- package/chunks/acp-subagent-executor-PRPMLKVJ.js +164 -0
- package/chunks/{acpAgent-3DPWZTNC.js → acpAgent-EHXZXVUB.js} +269 -194
- package/chunks/{agent-KIHGINKN.js → agent-FWPNJI6N.js} +59 -49
- package/chunks/agent-headless-M5Z7WIDL.js +104 -0
- package/chunks/{anthropicContentGenerator-4FGOM5LK.js → anthropicContentGenerator-FLTEUSIQ.js} +30 -27
- package/chunks/{artifact-tool-MUTNH4NI.js → artifact-tool-3MWM6SN2.js} +11 -7
- package/chunks/{askUserQuestion-AKIRLVB5.js → askUserQuestion-YFFBB4K3.js} +6 -4
- package/chunks/bridge-EWCKRGWY.js +156 -0
- package/chunks/{build-5KWQBWEQ.js → build-5OQN7CDU.js} +1 -1
- package/chunks/caption-audio-UXXLI3JZ.js +443 -0
- package/chunks/caption-image-B7O4TUFP.js +247 -0
- package/chunks/{channel-management-service-RRILWSXX.js → channel-management-service-GRJG5R46.js} +1 -1
- package/chunks/channel-settings-store-NXZNLT5L.js +158 -0
- package/chunks/{channel-worker-group-3DUJFZJR.js → channel-worker-group-SCSKCSBJ.js} +4 -4
- package/chunks/{channel-worker-manager-E5UW2VLA.js → channel-worker-manager-AHCZCKON.js} +4 -4
- package/chunks/{channel-worker-supervisor-VN33GSEC.js → channel-worker-supervisor-BGUAVITB.js} +3 -3
- package/chunks/{chunk-3LLEB5CU.js → chunk-24ZB2JNI.js} +2 -2
- package/chunks/{chunk-5NUKK2DT.js → chunk-25FMWESU.js} +47 -8
- package/chunks/{chunk-3WWPEFMX.js → chunk-2FQM443D.js} +82 -4
- package/chunks/{chunk-VEXUA6DX.js → chunk-2FRZ4ZP2.js} +13 -11
- package/chunks/{chunk-WBSJ6VPZ.js → chunk-2GNZTJRK.js} +3 -3
- package/chunks/{chunk-YP2K3WOS.js → chunk-2VWXODMY.js} +7 -4
- package/chunks/{chunk-L2A5VBDL.js → chunk-2ZCLSPE4.js} +9 -9
- package/chunks/{chunk-KEM7MWS7.js → chunk-366JNNY7.js} +6 -4
- package/chunks/{chunk-TKF4JINY.js → chunk-3FEGERVL.js} +1 -1
- package/chunks/{chunk-TDKUXSJO.js → chunk-3MW6PPA5.js} +1 -1
- package/chunks/{chunk-4LIPOIXS.js → chunk-3NHJLWOD.js} +1 -1
- package/chunks/{chunk-3UGMLA4V.js → chunk-3V7RNGLC.js} +10 -10
- package/chunks/{chunk-XICCGDWF.js → chunk-3WIPATJX.js} +2 -2
- package/chunks/chunk-43QUA4MC.js +135 -0
- package/chunks/{chunk-Q2SAQTEJ.js → chunk-4B7U3KQP.js} +1 -1
- package/chunks/{chunk-SFL6U7U7.js → chunk-4JFRCIMW.js} +2 -2
- package/chunks/{chunk-TPY6HW55.js → chunk-4OZY6LN2.js} +12 -6
- package/chunks/{chunk-IVFTLUZD.js → chunk-4SZ2636R.js} +3 -3
- package/chunks/{chunk-7CLLH5TI.js → chunk-4YS7RMCB.js} +6 -4
- package/chunks/{chunk-NQ272MQG.js → chunk-5XK2YELE.js} +7 -5
- package/chunks/{chunk-HX4WXX3H.js → chunk-65YADOPT.js} +89 -74
- package/chunks/chunk-6C3D7BKK.js +153 -0
- package/chunks/{chunk-DC4ZNGH4.js → chunk-6DB6UHY3.js} +3 -3
- package/chunks/{chunk-WZWTY7SG.js → chunk-6IW6SX75.js} +6 -6
- package/chunks/{chunk-HYHSMTRA.js → chunk-6XRR4RYH.js} +4 -4
- package/chunks/{chunk-AXPOOQAW.js → chunk-736AZVPL.js} +2 -2
- package/chunks/{chunk-UQGRJTDK.js → chunk-7JWD2EML.js} +3 -3
- package/chunks/{chunk-BUQN5LTI.js → chunk-7PQ65Z5F.js} +2 -2
- package/chunks/{chunk-43Y26NPF.js → chunk-A5EWSUYT.js} +3 -3
- package/chunks/{chunk-VQDWCQOE.js → chunk-ANKISCKU.js} +1 -0
- package/chunks/{chunk-NXUZFW3G.js → chunk-AUFTA63J.js} +1 -1
- package/chunks/{chunk-4QPVZA5J.js → chunk-AVVSSP4R.js} +3 -3
- package/chunks/{chunk-36SDZ2Q4.js → chunk-B3HGO6BB.js} +7 -5
- package/chunks/{chunk-6USYH3EU.js → chunk-B3XJFEEH.js} +5 -3
- package/chunks/{chunk-GSKX53AN.js → chunk-BA6AXQDA.js} +1 -1
- package/chunks/{chunk-FBY32737.js → chunk-BHHR5MEI.js} +4 -4
- package/chunks/{chunk-FX6PZBOV.js → chunk-BJ2TJY7V.js} +4 -4
- package/chunks/chunk-BKVPLSEI.js +133 -0
- package/chunks/chunk-BQMSZSG6.js +21 -0
- package/chunks/{chunk-BW2SMO6L.js → chunk-BXAU2UKM.js} +1 -1
- package/chunks/{chunk-3LMDSCLU.js → chunk-C4FISGDN.js} +2 -2
- package/chunks/{chunk-XFFRI3WM.js → chunk-CA63HYHU.js} +4 -2
- package/chunks/{chunk-IXO2OCIP.js → chunk-CKNBSVBC.js} +12 -8
- package/chunks/{chunk-347O2YZJ.js → chunk-CNG7ILRW.js} +39 -61
- package/chunks/chunk-CQULG2GJ.js +1330 -0
- package/chunks/{chunk-VVI7MK3V.js → chunk-CTGMXP4A.js} +9 -7
- package/chunks/{chunk-QT6Z2IBF.js → chunk-CYFQLCCG.js} +2 -2
- package/chunks/chunk-DBDJRURL.js +42 -0
- package/chunks/{chunk-X7AYIXC7.js → chunk-DJLCK66M.js} +5 -3
- package/chunks/chunk-DJYHML3Y.js +121 -0
- package/chunks/{chunk-MO4XID7S.js → chunk-DNDECZXY.js} +3 -3
- package/chunks/{chunk-D7JMO2GP.js → chunk-DNHL4S5B.js} +1 -1
- package/chunks/{chunk-WL36KHUQ.js → chunk-DTSG4EHA.js} +11 -9
- package/chunks/{chunk-M23GFJ5B.js → chunk-EHMLJKF5.js} +1 -1
- package/chunks/{chunk-TIGXX4PA.js → chunk-EKBQJ627.js} +2 -2
- package/chunks/{chunk-RSWBT7AZ.js → chunk-ERIBG3BX.js} +35 -551
- package/chunks/{chunk-PPJSG2PU.js → chunk-EVZT24AF.js} +6 -142
- package/chunks/{chunk-E2VSBAFA.js → chunk-FL2EJUOY.js} +5 -5
- package/chunks/{chunk-2C5TR6HN.js → chunk-FSNLTHNG.js} +1 -1
- package/chunks/chunk-FTKXJMQV.js +255 -0
- package/chunks/{chunk-TRZ22SG5.js → chunk-FXPP7VLM.js} +6 -4
- package/chunks/{chunk-CDDP4ONL.js → chunk-G3PBYAGM.js} +60 -134
- package/chunks/{chunk-AEWCOE64.js → chunk-GACWUBXV.js} +2 -2
- package/chunks/{chunk-OWUAZXXN.js → chunk-GHG4PQY2.js} +3 -3
- package/chunks/{chunk-VU3XMZ5I.js → chunk-GHZJQCSZ.js} +3 -3
- package/chunks/{chunk-FIJODK52.js → chunk-GJHAV2F7.js} +3 -3
- package/chunks/{chunk-36NRLIR6.js → chunk-GQZA7EYC.js} +11 -11
- package/chunks/{chunk-4JFLRHNE.js → chunk-GVHYY2RS.js} +1 -1
- package/chunks/{chunk-H6L4NEAT.js → chunk-GVMXFXQG.js} +1 -1
- package/chunks/{chunk-G45B3INR.js → chunk-GVTAFLWB.js} +2 -2
- package/chunks/{chunk-GJKP6XOB.js → chunk-GW5SJ3II.js} +16 -19
- package/chunks/{chunk-AQP3H22J.js → chunk-GY7FOHQP.js} +1 -1
- package/chunks/chunk-GZ5MEGA3.js +44 -0
- package/chunks/{chunk-FCPJXKDG.js → chunk-HA6DKD44.js} +9 -9
- package/chunks/{chunk-FEDFZBGR.js → chunk-HR4OWLKI.js} +3 -3
- package/chunks/{chunk-CXY6BICQ.js → chunk-HWKWZSZY.js} +162 -109
- package/chunks/{chunk-K4XMAIRX.js → chunk-I3NKMMHS.js} +12 -12
- package/chunks/{chunk-QMENOK5T.js → chunk-IH4TNUVS.js} +9 -7
- package/chunks/{chunk-FASYATAZ.js → chunk-IHUOMYBO.js} +1 -1
- package/chunks/{chunk-IZ2U57NY.js → chunk-IITTKFWM.js} +4 -2
- package/chunks/{chunk-M22WLKLI.js → chunk-IQGEZOGN.js} +7 -7
- package/chunks/chunk-IVPSLX4P.js +578 -0
- package/chunks/{chunk-BTICBRPL.js → chunk-IWMYX5LB.js} +3 -3
- package/chunks/{chunk-V4JJAVHQ.js → chunk-JCIDHFSB.js} +2 -2
- package/chunks/{chunk-PF7GAP6K.js → chunk-JENFAGVX.js} +65 -54
- package/chunks/{chunk-LO2UWNO5.js → chunk-JFEWKEKG.js} +3 -3
- package/chunks/{chunk-BHG3H6OZ.js → chunk-JJVDKHQU.js} +1 -1
- package/chunks/chunk-JYGESWZM.js +149 -0
- package/chunks/{chunk-KVC7HZWK.js → chunk-JYTJ5FCM.js} +1 -1
- package/chunks/{chunk-KVQ3QL4K.js → chunk-KCL6OMCX.js} +3 -3
- package/chunks/{chunk-3HTUE6ZR.js → chunk-KCRV4F3G.js} +4 -4
- package/chunks/{chunk-3WILPKTJ.js → chunk-KKPIFWTZ.js} +11 -6
- package/chunks/{chunk-CXONOVBN.js → chunk-KS6F6LZQ.js} +8 -6
- package/chunks/chunk-KSEKRQJO.js +253 -0
- package/chunks/{chunk-P42KMMU6.js → chunk-KWTLCPYY.js} +19 -6
- package/chunks/{chunk-U4AASWUQ.js → chunk-L4GF4IK2.js} +3 -3
- package/chunks/{chunk-5FK4MSHB.js → chunk-LADOQIYQ.js} +6 -4
- package/chunks/{chunk-DJXSOEFB.js → chunk-LAE6RY3L.js} +1 -1
- package/chunks/{chunk-CQPM66MG.js → chunk-LG475XAV.js} +4 -4
- package/chunks/{chunk-3BZI5GDP.js → chunk-M5YIHMXP.js} +6 -4
- package/chunks/{chunk-6WXVEDT2.js → chunk-MC2RYJMU.js} +5 -3
- package/chunks/chunk-MNU36NGH.js +233 -0
- package/chunks/{chunk-M4U2LTD2.js → chunk-MS4SXNJ6.js} +1 -1
- package/chunks/{chunk-ZFHKUQZ4.js → chunk-NEVUE35Z.js} +5 -5
- package/chunks/{chunk-DRAX5YAI.js → chunk-NFC4WTY2.js} +6 -4
- package/chunks/{chunk-SOLRBF7L.js → chunk-NSKNTJHU.js} +10 -10
- package/chunks/{chunk-B5TJK7B3.js → chunk-NZRX5WYI.js} +1 -1
- package/chunks/{chunk-YM6KUQ2S.js → chunk-O4A2B6V2.js} +3 -3
- package/chunks/{chunk-DX6JTDMR.js → chunk-OB57Y2WH.js} +1 -1
- package/chunks/{chunk-INN5ORKX.js → chunk-OLFTIODD.js} +1 -1
- package/chunks/chunk-PF3RVYRK.js +108 -0
- package/chunks/{chunk-WSJI6ODG.js → chunk-PGMF3LSO.js} +29 -27
- package/chunks/{chunk-OALXNGUA.js → chunk-PJ3GAHED.js} +10 -10
- package/chunks/{chunk-XWJFDJZK.js → chunk-PJSZXERN.js} +1 -1
- package/chunks/{chunk-GSAOVDTH.js → chunk-POMFSBEC.js} +4 -4
- package/chunks/{chunk-EWNKP4V4.js → chunk-PPVM7YLS.js} +1 -1
- package/chunks/{chunk-WK6DEH3Q.js → chunk-PQQV3OBW.js} +6 -4
- package/chunks/{chunk-BHVF3R6B.js → chunk-PZT2654P.js} +4 -4
- package/chunks/{chunk-ZSTCM3MX.js → chunk-Q5N5NEVT.js} +1 -1
- package/chunks/{chunk-KFFCDLKV.js → chunk-QE36VXWP.js} +1 -1
- package/chunks/{chunk-V545KI73.js → chunk-QPTE6BKL.js} +1 -1
- package/chunks/{chunk-5VQR2DD7.js → chunk-QQPRTJOM.js} +5 -3
- package/chunks/{chunk-QIPLWW6Q.js → chunk-QU7T5PKF.js} +1 -1
- package/chunks/{chunk-Y2KJC55Y.js → chunk-QYT7J3UM.js} +4 -4
- package/chunks/{chunk-SFHX5G2S.js → chunk-R34ALEH5.js} +14 -14
- package/chunks/{chunk-TXTCM3TC.js → chunk-R4DAJXOV.js} +18 -14
- package/chunks/{chunk-2GP6BQ2J.js → chunk-RA6PKQVM.js} +2 -2
- package/chunks/{chunk-HXUI5D4H.js → chunk-RDN5ITXF.js} +1 -1
- package/chunks/{chunk-G6UUOCUT.js → chunk-RMI3DKMV.js} +1 -1
- package/chunks/chunk-RSFNJ6UU.js +1252 -0
- package/chunks/{chunk-EDIDYZBT.js → chunk-RVT5L74D.js} +1 -1
- package/chunks/{chunk-GI7SLDOI.js → chunk-RXP5FVC4.js} +6 -6
- package/chunks/chunk-S34QJ6IR.js +290 -0
- package/chunks/chunk-S5BHLTHK.js +190 -0
- package/chunks/{chunk-2XRE4KE4.js → chunk-S7BE3FMA.js} +1 -1
- package/chunks/{chunk-7O5PYQ3M.js → chunk-SBP43AO6.js} +1 -1
- package/chunks/chunk-SLHYLVRW.js +1377 -0
- package/chunks/{chunk-HNFKYKHH.js → chunk-SMAAYU3F.js} +16 -16
- package/chunks/{chunk-KAYC5FBN.js → chunk-SNPYTKXI.js} +825 -234
- package/chunks/{chunk-IKBEIDOH.js → chunk-SOZJODVX.js} +13 -13
- package/chunks/{chunk-Y4NNIGYO.js → chunk-SSFOFDNL.js} +1 -1
- package/chunks/{chunk-WNQIJTOP.js → chunk-SSGVTJ2W.js} +243 -17
- package/chunks/{chunk-NFXXBWSE.js → chunk-SU64336V.js} +2 -2
- package/chunks/chunk-TFDCK56Y.js +154 -0
- package/chunks/{chunk-JRHKM3YQ.js → chunk-TS4JJ7NN.js} +2 -2
- package/chunks/{chunk-C4HBZQNH.js → chunk-U3MTHCJF.js} +1 -1
- package/chunks/{chunk-AUX2FL5T.js → chunk-UBQVV7MX.js} +625 -6
- package/chunks/{chunk-B6RMK4ED.js → chunk-UHBYCY7U.js} +9 -7
- package/chunks/{chunk-Y53DG2HA.js → chunk-UIWUFHRJ.js} +1 -1
- package/chunks/chunk-UQRDQCWF.js +102 -0
- package/chunks/{chunk-NKTMUPHJ.js → chunk-UVMU7DDP.js} +5 -3
- package/chunks/chunk-UXEI7POA.js +273 -0
- package/chunks/chunk-V2XJJTAB.js +228 -0
- package/chunks/chunk-VDNCKE2O.js +24 -0
- package/chunks/{chunk-YQQ2U7AS.js → chunk-VISF4MEY.js} +1 -1
- package/chunks/{chunk-RRI764F7.js → chunk-VPFKSRAB.js} +13 -11
- package/chunks/chunk-VPGRGNNH.js +578 -0
- package/chunks/{chunk-SYMXYRM5.js → chunk-W7JWIIRC.js} +1 -1
- package/chunks/{chunk-AZCTY64Z.js → chunk-WEUQIY3Q.js} +1 -1
- package/chunks/{chunk-SSWTA7CH.js → chunk-WIKUMTAB.js} +12 -12
- package/chunks/chunk-WL2CTQGT.js +1625 -0
- package/chunks/chunk-WL2V7PTE.js +78 -0
- package/chunks/{chunk-Q54O3EIA.js → chunk-WSZ6VS24.js} +45 -30
- package/chunks/{chunk-UZSB57EV.js → chunk-WX4W3FCV.js} +5 -5
- package/chunks/{chunk-OSG23MR3.js → chunk-X3T5IOX6.js} +2 -2
- package/chunks/{chunk-EIBECN2J.js → chunk-XGHVF5DC.js} +5 -5
- package/chunks/{chunk-D3KVGQUV.js → chunk-XJ52OCCN.js} +4 -4
- package/chunks/{chunk-YZXSDPOQ.js → chunk-XMAIUTED.js} +84 -40
- package/chunks/{chunk-QGEISOJ2.js → chunk-XQBZZVJA.js} +3 -3
- package/chunks/{chunk-OZEV3R3S.js → chunk-XYAB5R6E.js} +3 -3
- package/chunks/chunk-XZA32HII.js +19 -0
- package/chunks/{chunk-4FLUQWJ4.js → chunk-Y3Q5OK4D.js} +1 -1
- package/chunks/chunk-YDERQ7ZV.js +248 -0
- package/chunks/{chunk-AKRSSKUT.js → chunk-YFHX6MOF.js} +10 -10
- package/chunks/{chunk-ZMYKNKET.js → chunk-YPJZDZMP.js} +3 -3
- package/chunks/{chunk-3XBUCOWS.js → chunk-YSD6IY6F.js} +2 -2
- package/chunks/{chunk-CH2YDT6X.js → chunk-YVYK3JYU.js} +5 -3
- package/chunks/{chunk-YL3UJML3.js → chunk-YWDVNBGE.js} +4 -4
- package/chunks/{chunk-C3T6HPNM.js → chunk-ZGADNVME.js} +5 -5
- package/chunks/{chunk-M3JGHRMQ.js → chunk-ZJ7KIWG5.js} +1 -1
- package/chunks/{chunk-QHSOINX6.js → chunk-ZJBYZN5D.js} +2 -2
- package/chunks/{chunk-SYROIHU7.js → chunk-ZRQGTRHA.js} +4 -2
- package/chunks/{chunk-NCPFOLM2.js → chunk-ZTBP4SFC.js} +78 -18
- package/chunks/{chunk-ZAFYHRVY.js → chunk-ZYDMQCQP.js} +4 -274
- package/chunks/clip-audio-SH4L7AEY.js +255 -0
- package/chunks/clip-image-BQRPECIS.js +239 -0
- package/chunks/clip-video-JIRMV5IH.js +277 -0
- package/chunks/{codex-subagent-executor-AEAIQZDC.js → codex-subagent-executor-Y5ILNWG6.js} +92 -68
- package/chunks/config-3X4AXU45.js +21 -0
- package/chunks/config-T5RO4NJV.js +17 -0
- package/chunks/config-utils-3YNEDKT4.js +151 -0
- package/chunks/contextCommand-7JVXVYN4.js +144 -0
- package/chunks/convert-image-D52K2FFB.js +231 -0
- package/chunks/{core-runtime-ZI4RTOJQ.js → core-runtime-6IZNPJUN.js} +92 -67
- package/chunks/{create-sub-session-BBWFQARJ.js → create-sub-session-5XHUO2PW.js} +90 -66
- package/chunks/{create-sub-session-MSGNIM37.js → create-sub-session-6EDEANCD.js} +7 -5
- package/chunks/{cron-create-U2JJ5CCF.js → cron-create-GS7ORRO6.js} +8 -5
- package/chunks/{cron-delete-7DM4LJWD.js → cron-delete-3GGDNNXD.js} +8 -5
- package/chunks/{cron-list-VCUSZK2Y.js → cron-list-EX27DW4H.js} +8 -5
- package/chunks/{daemon-git-worktree-guard-KECEMV6A.js → daemon-git-worktree-guard-BULXRIDA.js} +90 -66
- package/chunks/daemon-status-provider-VSVXVY4O.js +155 -0
- package/chunks/daemon-trust-policy-WVSDS2WT.js +150 -0
- package/chunks/{daemon-trust-policy-monitor-546N5ZVL.js → daemon-trust-policy-monitor-HXQ2GLTX.js} +95 -71
- package/chunks/deferred-core-runtime-EXI7LXLE.js +153 -0
- package/chunks/{display-image-QTHALY6N.js → display-image-FTWDRBOP.js} +10 -7
- package/chunks/{dist-BNW423XT.js → dist-CXDHIHN4.js} +5 -0
- package/chunks/downsample-audio-LPDWX6GF.js +217 -0
- package/chunks/downsample-image-A5JEYIV5.js +249 -0
- package/chunks/downscale-video-4W5BX5KO.js +249 -0
- package/chunks/{earlyInputCapture-BXP7V2P3.js → earlyInputCapture-UJ3KFVZQ.js} +3 -2
- package/chunks/{edit-CMSQB7NP.js → edit-JJ34NKRC.js} +68 -56
- package/chunks/{en-56QLKXS2.js → en-FCK6MBTI.js} +16 -0
- package/chunks/{enter-worktree-DA6A4XC5.js → enter-worktree-QK7DR5EF.js} +12 -9
- package/chunks/{enterPlanMode-UDPMNESD.js → enterPlanMode-H6FBPVLB.js} +62 -51
- package/chunks/environment-7DMLANWW.js +167 -0
- package/chunks/errors-OH3DYEDL.js +151 -0
- package/chunks/{exec-RPKEY6HP.js → exec-7CFNHYCV.js} +31 -9
- package/chunks/{exit-worktree-4H6Z2VQI.js → exit-worktree-62COYIHF.js} +14 -10
- package/chunks/exitPlanMode-5YR5VWXS.js +102 -0
- package/chunks/extract-audio-GSSZQV6G.js +229 -0
- package/chunks/extract-keyframes-Q6DRMQAJ.js +621 -0
- package/chunks/{fast-path-F2CYDDZ4.js → fast-path-4DS2GR5O.js} +5 -5
- package/chunks/ffmpeg-N4LIIVNR.js +21 -0
- package/chunks/{glob-Z2JMJKKN.js → glob-GFID3F3R.js} +63 -51
- package/chunks/{goal-tools-HXVVLGCV.js → goal-tools-2OB5WPNH.js} +59 -49
- package/chunks/{grep-H2I33VAO.js → grep-JB5DGQ3B.js} +13 -9
- package/chunks/handleAutoUpdate-5OQL4YBU.js +147 -0
- package/chunks/i18n-TV5G7SXO.js +164 -0
- package/chunks/{image-gen-HIAZCB5T.js → image-gen-LX3C4V3R.js} +16 -11
- package/chunks/initializer-R2EI4UJ6.js +151 -0
- package/chunks/installationInfo-HYOWC3BN.js +145 -0
- package/chunks/{keychain-token-storage-NQ5XWIPX.js → keychain-token-storage-ZZNRE6D4.js} +3 -2
- package/chunks/list-ORJQQUNR.js +154 -0
- package/chunks/{list-agents-EWDCEPIW.js → list-agents-HS6HH4DJ.js} +10 -7
- package/chunks/{llm-LSUBOJAR.js → llm-YKBQVN7S.js} +159 -134
- package/chunks/{llm-content-generator-MLIONRXE.js → llm-content-generator-QJBXJRKT.js} +11 -9
- package/chunks/loadedSettingsAdapter-4FQH6Y3D.js +148 -0
- package/chunks/{loggingContentGenerator-TUPEXFMM.js → loggingContentGenerator-DEOANG3F.js} +74 -63
- package/chunks/{loop-wakeup-ZBVRI6VH.js → loop-wakeup-4B7OY3TV.js} +9 -6
- package/chunks/{ls-6ZB3BEIR.js → ls-EZ5PSWU2.js} +8 -5
- package/chunks/{lsp-M54FQARP.js → lsp-DYFFHKB3.js} +6 -3
- package/chunks/{managed-npm-update-WEA5XMFZ.js → managed-npm-update-36U25ZEZ.js} +91 -67
- package/chunks/mcp-ZI7LXLAQ.js +148 -0
- package/chunks/memory-side-query-DRV7FXK4.js +221 -0
- package/chunks/model-call-collection-RX7C24YP.js +171 -0
- package/chunks/model-configuration-3JIO6IRV.js +161 -0
- package/chunks/modelConfigUtils-2BJQI2S4.js +140 -0
- package/chunks/{monitor-CI7YE7MT.js → monitor-LXQRI2IF.js} +63 -51
- package/chunks/nonInteractiveCli-HRXVUV2H.js +235 -0
- package/chunks/nonInteractiveToolExecutor-QPAIKNPL.js +101 -0
- package/chunks/{notebook-edit-3WCVRNGL.js → notebook-edit-5CM3VYNK.js} +63 -52
- package/chunks/ocr-image-Q4HYJ3U7.js +252 -0
- package/chunks/omni-A5XLPNSH.js +147 -0
- package/chunks/{openaiContentGenerator-OGILGUZE.js → openaiContentGenerator-O5G3QCHX.js} +36 -31
- package/chunks/{openaiResponsesContentGenerator-NXOXUPFM.js → openaiResponsesContentGenerator-W2V7AYVE.js} +12 -10
- package/chunks/pidfile-MI5FGYF5.js +151 -0
- package/chunks/{processUtils-O4II3RYH.js → processUtils-EWKUPVJH.js} +2 -2
- package/chunks/prompt-terminal-ledger-5HEXZMWT.js +143 -0
- package/chunks/{qwenContentGenerator-I4LRYADV.js → qwenContentGenerator-HHNDIW2Q.js} +70 -60
- package/chunks/{qwenOAuth2-3J66TOT5.js → qwenOAuth2-GD3UIYUP.js} +9 -8
- package/chunks/reactive-degrade-KWCJUHXH.js +375 -0
- package/chunks/read-file-ZQKBXJSH.js +37 -0
- package/chunks/{read-mcp-resource-LPSWXVOD.js → read-mcp-resource-INJIV3UC.js} +8 -4
- package/chunks/recall-media-memory-tool-PEE2BWRY.js +198 -0
- package/chunks/{record-artifact-L3CFJOMA.js → record-artifact-KKW3AIMJ.js} +6 -4
- package/chunks/record-source-2VSQINX6.js +24 -0
- package/chunks/{report-findings-LY5HQY4K.js → report-findings-OZSLWYAS.js} +7 -5
- package/chunks/{request-shutdown-53SNYGVR.js → request-shutdown-3RUGTWRR.js} +12 -9
- package/chunks/resumeHistoryUtils-5V3KISJ6.js +156 -0
- package/chunks/ripGrep-F5MM4HGA.js +43 -0
- package/chunks/{run-qwen-serve-ZVEKGS7Y.js → run-qwen-serve-3K3D5MSR.js} +70 -70
- package/chunks/{runtime-SJCRYNPA.js → runtime-FAWN3GQH.js} +98 -74
- package/chunks/sandbox-BPRE7KYF.js +170 -0
- package/chunks/sandboxConfig-V3OHETXW.js +138 -0
- package/chunks/scheduled-tasks-LB2PINB3.js +167 -0
- package/chunks/scheduler-NHAWKARI.js +160 -0
- package/chunks/{sdk-exporters-http-DR4G663K.js → sdk-exporters-http-SWXTEEVT.js} +3 -2
- package/chunks/{sdk-impl-SJR26MQF.js → sdk-impl-FK4JY6LX.js} +5 -4
- package/chunks/{send-message-DN76MXDX.js → send-message-TLF36UW2.js} +16 -13
- package/chunks/serve-UQL5X5K7.js +156 -0
- package/chunks/{server-UHMKPCAZ.js → server-3HUUEDUC.js} +286 -261
- package/chunks/{session-ZLUK7E4P.js → session-XODWSTJ3.js} +151 -127
- package/chunks/session-attachments-root-BENUIMZM.js +141 -0
- package/chunks/{session-pr-refresh-3OMTQWCZ.js → session-pr-refresh-CSRULMTI.js} +95 -71
- package/chunks/{settings-P4DHIIUP.js → settings-42FFX5TK.js} +94 -70
- package/chunks/{shell-IMFUVQQ5.js → shell-NLNU2TPF.js} +59 -49
- package/chunks/{skill-NB5RJGZW.js → skill-KIRNNJMK.js} +22 -17
- package/chunks/skill-settings-MPHPE43F.js +164 -0
- package/chunks/spawnChannel-TXNLXP2R.js +152 -0
- package/chunks/standalone-update-XAC364AM.js +156 -0
- package/chunks/{start-opentui-ui-JKAIWGF7.js → start-opentui-ui-3OLDXRMX.js} +223 -189
- package/chunks/{startInteractiveUI-YRPOT6GH.js → startInteractiveUI-UB2HRTV7.js} +339 -295
- package/chunks/storage-VZECDJNX.js +17 -0
- package/chunks/{syntheticOutput-EX5L5GYI.js → syntheticOutput-SSXJ2NEY.js} +5 -3
- package/chunks/task-create-EEMYF6LY.js +30 -0
- package/chunks/{task-list-ZLJSMRFA.js → task-list-GA5GOR74.js} +9 -6
- package/chunks/{task-stop-MD7P6QGK.js → task-stop-3MXTDL7H.js} +6 -3
- package/chunks/{task-update-3LSYQDRW.js → task-update-JSBHKL4L.js} +16 -13
- package/chunks/{team-create-2XTBYRJF.js → team-create-VES6TOBA.js} +62 -51
- package/chunks/{team-delete-RIDINW6I.js → team-delete-V2CROTI6.js} +9 -6
- package/chunks/{team-plan-approval-CFNWW7ZQ.js → team-plan-approval-ZMCHBBUM.js} +61 -50
- package/chunks/terminal-image-renderer-73NDY7OJ.js +156 -0
- package/chunks/theme-manager-YG3L7BV6.js +140 -0
- package/chunks/{todoWrite-XSTG2VT5.js → todoWrite-CMBHPR66.js} +8 -5
- package/chunks/tool-result-media-V3LNDB5Q.js +45 -0
- package/chunks/{tool-search-ZHTJU2MV.js → tool-search-7XR7RHMB.js} +43 -21
- package/chunks/total-session-admission-QUZYGACG.js +151 -0
- package/chunks/transcribe-audio-AJQZPNEV.js +30 -0
- package/chunks/trustedFolders-QRII2BL7.js +160 -0
- package/chunks/understand-video-segments-5TMRDQUB.js +438 -0
- package/chunks/{update-relaunch-LI7GRP36.js → update-relaunch-735DXN5P.js} +5 -5
- package/chunks/updateCheck-FXXOM4YS.js +156 -0
- package/chunks/upload-cache-5YULQVZZ.js +17 -0
- package/chunks/upload-config-CKDIXTPK.js +25 -0
- package/chunks/useAutoAcceptIndicator-KXXTKOGD.js +158 -0
- package/chunks/{validateNonInterActiveAuth-YFPCYYNL.js → validateNonInterActiveAuth-DXCBDHIX.js} +143 -119
- package/chunks/{version-4MTL4JVU.js → version-76T4NBMQ.js} +1 -1
- package/chunks/{web-fetch-O6RG6ISB.js → web-fetch-UIDZX5RN.js} +27 -20
- package/chunks/{web-search-JHAXVEMD.js → web-search-VETWDOUJ.js} +14 -11
- package/chunks/{web-shell-static-FFWCUUZS.js → web-shell-static-XSCCMXKQ.js} +3 -3
- package/chunks/{workflow-O7L6VDYU.js → workflow-MHYBJHPP.js} +63 -52
- package/chunks/workspace-providers-status-WFBT3LS5.js +154 -0
- package/chunks/{workspace-registration-store-7G4E7YPY.js → workspace-registration-store-M3WKKBJQ.js} +1 -1
- package/chunks/workspace-registry-FIUB7MGD.js +160 -0
- package/chunks/workspace-runtime-coordinator-5Z7M36W7.js +163 -0
- package/chunks/workspace-service-TP4VRTZF.js +165 -0
- package/chunks/workspace-skills-status-CILWVQHU.js +151 -0
- package/chunks/{workspace-trust-reconciler-XEBW5FUL.js → workspace-trust-reconciler-2OPSTQNS.js} +98 -74
- package/chunks/write-file-N7NBKIYD.js +107 -0
- package/chunks/{zh-TW-S3YTQ4DS.js → zh-TW-SRB5QSER.js} +16 -0
- package/chunks/{zh-F76MZTL3.js → zh-UBQIFP4A.js} +16 -0
- package/chunks/{zoom-image-RDPRTP4B.js → zoom-image-3GHVMYEW.js} +18 -13
- package/cli.js +14 -14
- package/export-transcript-document.js +3 -3
- package/locales/en.js +18 -0
- package/locales/zh-TW.js +17 -0
- package/locales/zh.js +17 -0
- package/package.json +3 -3
- package/web-shell/assets/{abnfDiagram-VCTEODGH-RxykUDmi.js → abnfDiagram-VCTEODGH-vfbwxn7H.js} +1 -1
- package/web-shell/assets/{arc-CZpgGCJC.js → arc-BT0KMrP5.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-BHSMzNDT.js → architectureDiagram-5GKGNRK7-B3TlGgP4.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-Bn4mF9SZ.js → blockDiagram-NRAW4CY4-DnwF5xi-.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-CBM-Bj6t.js → c4Diagram-UCG6FXSJ-8qvMMfFg.js} +1 -1
- package/web-shell/assets/channel-CTm0xByY.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-D5Fin58O.js → chunk-2Q5K7J3B-CHM51UX6.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-CY05weF7.js → chunk-5VM5RSS4-BNXaOtyN.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-3neZnj5Y.js → chunk-F27PBJKO-DT-vcF3X.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-Cd7EU4BE.js → chunk-G27WJ6UU-BXz8438J.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-DwK1mqFw.js → chunk-JWPE2WC7-CP2ozL3M.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-Sl7vY22C.js → chunk-LCL6LL3I-DTAWXvja.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-BXNzpbVg.js → chunk-POPQ4Y6H-DZENJpGx.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-DjjButcp.js → chunk-SVP7TREG-Dl8djRwv.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-DNOiCjOJ.js → chunk-XXDRQBXY-B3lJllMA.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DhMuMK_E.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DhMuMK_E.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-BUnker7a.js → cose-bilkent-JH36ORCC-DeosJDcB.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-DcUgdWE5.js → cynefin-OW5HDTMX-BvqcLoHm.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-CvDKsZsL.js → cynefinDiagram-5FMLGOSQ-BYS0pmSs.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-jpCmUbr1.js → dagre-3AP2YEHR-IDScuL-R.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-DBe_bKE5.js → diagram-S7CK7UJ4-EYNlkkKJ.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-oXvPpDgs.js → diagram-UQ7AKVKN-D3x9g8Ep.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-BD7-_SGh.js → diagram-VSXAHHWV-C35O1dtR.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-DOJL0wub.js → diagram-VX7I27RA-XvMv2aCN.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-DRIiodDD.js → diagram-Z3DM3KII-CeryNvru.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-Db31Ulmb.js → ebnfDiagram-PWID7BFC-DAmepjvB.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-CVHhwI2_.js → erDiagram-SSCWMZ5O-BkGfBZt_.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-DWOFy1FK.js → flowDiagram-A5DVABFB-CzUCgun9.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-C0sxQtPd.js → ganttDiagram-EL5Y4UJY-BIFST90r.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-CNituBYC.js → gitGraphDiagram-WWUBYQGX-jVvRSGcu.js} +1 -1
- package/web-shell/assets/{index-B15NlwB8.js → index-M1TfOjx2.js} +457 -457
- package/web-shell/assets/{index-gm9tLk7h.js → index-krCDFzE6.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-CxhJYtIR.js → infoDiagram-RXCK75RN-DsU7vA4Q.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-By2mchUy.js → ishikawaDiagram-5VMMS53U-K9mTNAbN.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-CVH-OweI.js → journeyDiagram-EYS64GPL-BKuHLGxv.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-Cc9dQXLy.js → kanban-definition-3QL26DDD-CXG9frQ_.js} +1 -1
- package/web-shell/assets/{layout-C_60ysHw.js → layout-6G_l7UoH.js} +1 -1
- package/web-shell/assets/{linear-BvAVfqwu.js → linear-DYpvB2mh.js} +1 -1
- package/web-shell/assets/{mermaid.core-C3CoBKAc.js → mermaid.core-Sj3dJttQ.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-Cuu8Q8LM.js → mindmap-definition-FBJOCRG2-DNJ1e6qd.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-DmAeyDO2.js → pegDiagram-XKGWAZYB-D-KPklHv.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-B7vbB_xv.js → pieDiagram-E7YTZNPT-BQPm03g2.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC-BqOBkRR7.js → quadrantDiagram-AXDQQJYC-BubBXSqD.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-sI06lZIu.js → railroadDiagram-O6MQD6OU-DatD6KIT.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-Bg13d10S.js → requirementDiagram-EFPCY7ZU-DiQ6jsZY.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-WFOzZHrR.js → sankeyDiagram-P5KCCOFB-C07fyxbH.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-CCdRbA4E.js → sequenceDiagram-WJ2MYXX4-DWXtsWzI.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-BH5F3bGg.js → sizeCapture-X5ZJPWSS-B0cQ1v0l.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-NwS2X3QB.js → stateDiagram-HBIQ2CUA-zHgWc00n.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-C-3ZC2nf.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-Bm38pM28.js → swimlanes-XN3QIQJK-Dnrrhu0H.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Ded1L5cw.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-Do-agLSo.js → timeline-definition-24CTP7MA-8BV7W2Xq.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-aggLfZzl.js → vennDiagram-4TSXK5OY-tmBBtlnj.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-D5JR3mXX.js → wardleyDiagram-VM6X3IG4-Cq96T3gb.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-DhtLDuXs.js → xychartDiagram-S5SC5T6Z-Dpzx_ZGQ.js} +1 -1
- package/web-shell/index.html +1 -1
- package/chunks/MaxSizedBox-FCF6M53W.js +0 -124
- package/chunks/acp-subagent-executor-TND6W2O5.js +0 -140
- package/chunks/agent-headless-EJ4QOUSM.js +0 -94
- package/chunks/bridge-MUX5YJZT.js +0 -132
- package/chunks/channel-settings-store-7CBIRZER.js +0 -134
- package/chunks/config-utils-KX2YS725.js +0 -127
- package/chunks/contextCommand-RV6Y5LNJ.js +0 -120
- package/chunks/daemon-status-provider-NULJNAEV.js +0 -131
- package/chunks/daemon-trust-policy-S4KWGPV3.js +0 -126
- package/chunks/deferred-core-runtime-T23ZT443.js +0 -128
- package/chunks/environment-TSQJUTPV.js +0 -143
- package/chunks/errors-RIVYJS6T.js +0 -127
- package/chunks/exitPlanMode-BYBBFN2T.js +0 -92
- package/chunks/handleAutoUpdate-FZP45KOR.js +0 -123
- package/chunks/i18n-OTB62AKW.js +0 -140
- package/chunks/initializer-4JXZEC4B.js +0 -127
- package/chunks/installationInfo-2IJV5QKC.js +0 -121
- package/chunks/list-KQSQ4A5G.js +0 -130
- package/chunks/loadedSettingsAdapter-TZTTNRHI.js +0 -124
- package/chunks/mcp-TFDTUPIA.js +0 -124
- package/chunks/model-configuration-ZCAKKIOF.js +0 -137
- package/chunks/modelConfigUtils-J3ZPW7ZK.js +0 -116
- package/chunks/nonInteractiveCli-GPT3TVOK.js +0 -211
- package/chunks/pidfile-GBTBIGHF.js +0 -127
- package/chunks/prompt-terminal-ledger-ILIXZI3E.js +0 -119
- package/chunks/read-file-G4XKW2CS.js +0 -31
- package/chunks/record-source-2GSY5JD5.js +0 -22
- package/chunks/resumeHistoryUtils-YPJU4XFE.js +0 -132
- package/chunks/ripGrep-AAKMALLM.js +0 -39
- package/chunks/sandbox-UIXL423Z.js +0 -146
- package/chunks/sandboxConfig-CY343YNJ.js +0 -114
- package/chunks/scheduled-tasks-5UGBEVNZ.js +0 -143
- package/chunks/scheduler-GCZYLZ2P.js +0 -136
- package/chunks/serve-2XXQLVK2.js +0 -132
- package/chunks/session-attachments-root-DHQM5IEZ.js +0 -117
- package/chunks/skill-settings-IXG5CTQO.js +0 -140
- package/chunks/spawnChannel-Q3YALTCJ.js +0 -128
- package/chunks/standalone-update-H5OJ7MM7.js +0 -132
- package/chunks/task-create-75HVPEAH.js +0 -28
- package/chunks/terminal-image-renderer-UDPJPGPQ.js +0 -132
- package/chunks/theme-manager-SK57EKMO.js +0 -116
- package/chunks/total-session-admission-UUZBDQCG.js +0 -127
- package/chunks/trustedFolders-4LDBLNTS.js +0 -136
- package/chunks/updateCheck-PKSSORPO.js +0 -132
- package/chunks/useAutoAcceptIndicator-I32UEQPI.js +0 -134
- package/chunks/workspace-providers-status-WRX6CJM4.js +0 -130
- package/chunks/workspace-registry-SXIMGT4D.js +0 -136
- package/chunks/workspace-runtime-coordinator-7DOEHXYT.js +0 -139
- package/chunks/workspace-service-HDXOZMYC.js +0 -141
- package/chunks/workspace-skills-status-VN4L37CA.js +0 -127
- package/chunks/write-file-LKX4ETIO.js +0 -97
- package/web-shell/assets/channel-DFYs_LlK.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-DnGrKXoM.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-DnGrKXoM.js +0 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-1aU2JZXO.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Dp-u6kQG.js +0 -8
- package/chunks/{chunk-XAJZFGD2.js → chunk-PXXYQOZO.js} +8 -8
- package/chunks/{chunk-WVURIAEE.js → chunk-SVWWF5TZ.js} +3 -3
- package/chunks/{dist-G5UMXIGF.js → dist-I6D6XOWV.js} +1 -1
- 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
|
+
*/
|