From 0389de0646337c6cbb8d8f91039ceb7f62a4900c Mon Sep 17 00:00:00 2001 From: ae9is <125031666+ae9is@users.noreply.github.com> Date: Thu, 16 Jan 2025 03:33:11 +0000 Subject: [PATCH 1/6] fix: gif frame extraction and remove outdated dependency "gif-frames" --- packages/plugin-node/package.json | 3 +- packages/plugin-node/src/services/image.ts | 22 +- pnpm-lock.yaml | 437 ++------------------- 3 files changed, 49 insertions(+), 413 deletions(-) diff --git a/packages/plugin-node/package.json b/packages/plugin-node/package.json index 4dac931b40c..862266d9958 100644 --- a/packages/plugin-node/package.json +++ b/packages/plugin-node/package.json @@ -23,13 +23,13 @@ "tsup.config.ts" ], "dependencies": { - "@elizaos/core": "workspace:*", "@aws-sdk/client-s3": "^3.705.0", "@aws-sdk/s3-request-presigner": "^3.705.0", "@cliqz/adblocker-playwright": "1.34.0", "@echogarden/espeak-ng-emscripten": "0.3.3", "@echogarden/kissfft-wasm": "0.2.0", "@echogarden/speex-resampler-wasm": "0.2.1", + "@elizaos/core": "workspace:*", "@huggingface/transformers": "3.0.2", "@opendocsg/pdf2md": "0.1.32", "@types/uuid": "10.0.0", @@ -46,7 +46,6 @@ "formdata-node": "6.0.3", "fs-extra": "11.2.0", "gaxios": "6.7.1", - "gif-frames": "0.4.1", "glob": "11.0.0", "graceful-fs": "4.2.11", "html-escaper": "3.0.3", diff --git a/packages/plugin-node/src/services/image.ts b/packages/plugin-node/src/services/image.ts index 56a59c9056d..7e74233b56e 100644 --- a/packages/plugin-node/src/services/image.ts +++ b/packages/plugin-node/src/services/image.ts @@ -19,8 +19,8 @@ import { RawImage, type Tensor, } from "@huggingface/transformers"; +import sharp from "sharp"; import fs from "fs"; -import gifFrames from "gif-frames"; import os from "os"; import path from "path"; @@ -339,23 +339,17 @@ export class ImageDescriptionService private async extractFirstFrameFromGif( gifUrl: string ): Promise<{ filePath: string }> { - const frameData = await gifFrames({ - url: gifUrl, - frames: 1, - outputType: "png", - }); - const tempFilePath = path.join( os.tmpdir(), `gif_frame_${Date.now()}.png` ); - - return new Promise((resolve, reject) => { - const writeStream = fs.createWriteStream(tempFilePath); - frameData[0].getImage().pipe(writeStream); - writeStream.on("finish", () => resolve({ filePath: tempFilePath })); - writeStream.on("error", reject); - }); + const resp = await fetch(gifUrl); + const buff = await resp.arrayBuffer(); + const imgBuff = Buffer.from(buff); + await sharp(imgBuff).toFormat("png").toFile(tempFilePath); + return { + filePath: tempFilePath, + }; } async describeImage( diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0cd62964e02..e63224f60f9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2366,9 +2366,6 @@ importers: gaxios: specifier: 6.7.1 version: 6.7.1(encoding@0.1.13) - gif-frames: - specifier: 0.4.1 - version: 0.4.1 glob: specifier: 11.0.0 version: 11.0.0 @@ -11238,9 +11235,6 @@ packages: asn1.js@5.4.1: resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - asn1js@2.4.0: resolution: {integrity: sha512-PvZC0FMyMut8aOnR2jAEGSkmRtHIUYPe9amUEnGjr9TdnUmsfoOkjrvUkOEU9mzpYBR1HyO9bF+8U1cLTMMHhQ==} engines: {node: '>=6.0.0'} @@ -11249,10 +11243,6 @@ packages: resolution: {integrity: sha512-FVnvrKJwpt9LP2lAMl8qZswRNm3T4q9CON+bxldk2iwk3FFpuwhx2FfinyitizWHsVYyaY+y5JzDR0rCMV5yTQ==} engines: {node: '>=12.0.0'} - assert-plus@1.0.0: - resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} - engines: {node: '>=0.8'} - assert@1.5.1: resolution: {integrity: sha512-zzw1uCAgLbsKwBfFc8CX78DDg+xZeBksSO3vwVIDDN5i94eOrPsSSyiVhmsSABFDM/OcpE2aagCat9dnWQLG1A==} @@ -11326,12 +11316,6 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - aws-sign2@0.7.0: - resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} - - aws4@1.13.2: - resolution: {integrity: sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==} - axe-core@4.10.2: resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} @@ -11525,9 +11509,6 @@ packages: bcp-47-match@1.0.3: resolution: {integrity: sha512-LggQ4YTdjWQSKELZF5JwchnBa1u0pIQSZf5lSdOHEdbVP55h0qICA/FUp3+W99q0xqxYa1ZQizTUH87gecII5w==} - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} @@ -12401,10 +12382,6 @@ packages: resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} engines: {node: '>= 0.6'} - contentstream@1.0.0: - resolution: {integrity: sha512-jqWbfFZFG9tZbdej7+TzXI4kanABh3BLtTWY6NxqTK5zo6iTIeo5aq4iRVfYsLQ0y8ccQqmJR/J4NeMmEdnR2w==} - engines: {node: '>= 0.8.0'} - conventional-changelog-angular@7.0.0: resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==} engines: {node: '>=16'} @@ -12495,9 +12472,6 @@ packages: core-js@3.40.0: resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==} - core-util-is@1.0.2: - resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} - core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -12775,9 +12749,6 @@ packages: culvert@0.1.2: resolution: {integrity: sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==} - cwise-compiler@1.1.3: - resolution: {integrity: sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==} - cyrb53@1.0.0: resolution: {integrity: sha512-Elxs7damp1axRN+npujLik9K6q1QTd6nvJIVJ0IBTV8lCRsTgDeRnkGDTSxQYAbME7kzpooRXCG4UJYAyTe18w==} @@ -12951,13 +12922,6 @@ packages: dash-ast@1.0.0: resolution: {integrity: sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==} - dashdash@1.14.1: - resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} - engines: {node: '>=0.10'} - - data-uri-to-buffer@0.0.3: - resolution: {integrity: sha512-Cp+jOa8QJef5nXS5hU7M1DWzXPEIoVR3kbV0dQuVGwROZg8bGf1DcCnkmajBTnvghTtSNMUdRrPjgaT6ZQucbw==} - data-uri-to-buffer@4.0.1: resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} engines: {node: '>= 12'} @@ -13417,9 +13381,6 @@ packages: easy-table@1.1.0: resolution: {integrity: sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA==} - ecc-jsbn@0.1.2: - resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} - ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} @@ -14043,10 +14004,6 @@ packages: extrareqp2@1.0.0: resolution: {integrity: sha512-Gum0g1QYb6wpPJCVypWP3bbIuaibcFiJcpuPM10YSXp/tzqi84x9PJageob+eN4xVRIOto4wjSGNLyMD54D2xA==} - extsprintf@1.3.0: - resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} - engines: {'0': node >=0.6.0} - eyes@0.1.8: resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} engines: {node: '> 0.1.90'} @@ -14287,9 +14244,6 @@ packages: resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} - forever-agent@0.6.1: - resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} - fork-ts-checker-webpack-plugin@6.5.3: resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} engines: {node: '>=10', yarn: '>=1.0.0'} @@ -14311,10 +14265,6 @@ packages: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} - form-data@2.3.3: - resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} - engines: {node: '>= 0.12'} - form-data@2.5.2: resolution: {integrity: sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q==} engines: {node: '>= 0.12'} @@ -14482,9 +14432,6 @@ packages: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} engines: {node: '>=8.0.0'} - get-pixels-jpeg-js-upgrade@3.3.0-jpeg-js-upgrade.0: - resolution: {integrity: sha512-3GQfE+K7GPp04Rbxh4GQhvGNPStlVYkW8b3hhsAD/3sDuBM5js1hnsNRptMIwyTrAjUoezEnUCFxhnQ0OLi3Sg==} - get-pkg-repo@4.2.1: resolution: {integrity: sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==} engines: {node: '>=6.9.0'} @@ -14529,16 +14476,6 @@ packages: resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} engines: {node: '>= 14'} - getpass@0.1.7: - resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} - - gif-encoder@0.4.3: - resolution: {integrity: sha512-HMfSa+EIng62NbDhM63QGYoc49/m8DcZ9hhBtw+CXX9mKboSpeFVxjZ2WEWaMFZ14MUjfACK7jsrxrJffIVrCg==} - engines: {node: '>= 0.8.0'} - - gif-frames@0.4.1: - resolution: {integrity: sha512-BSqFuIz4qeZsX7wKDlwyF6qkGyUAgoYNRFJs7v8P97qvBz1FmzyRFHA/EWi/81OMHb0xQdps1X8BYrTyI3e3Aw==} - giget@1.2.3: resolution: {integrity: sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==} hasBin: true @@ -14769,15 +14706,6 @@ packages: engines: {node: '>=0.4.7'} hasBin: true - har-schema@2.0.0: - resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==} - engines: {node: '>=4'} - - har-validator@5.1.5: - resolution: {integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==} - engines: {node: '>=6'} - deprecated: this library is no longer supported - hard-rejection@2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} @@ -15033,10 +14961,6 @@ packages: http-response-object@3.0.2: resolution: {integrity: sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA==} - http-signature@1.2.0: - resolution: {integrity: sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==} - engines: {node: '>=0.8', npm: '>=1.3.7'} - http2-wrapper@1.0.3: resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} engines: {node: '>=10.19.0'} @@ -15238,9 +15162,6 @@ packages: resolution: {integrity: sha512-0SZXGNGZ+WzISQ67QDyZ2x0+wVxjjUndtD8oSeik/4ajifeiRufed8fCb8QW8VMyi4MXcS+UO1k/0NGhvq1PAg==} engines: {node: '>=12.22.0'} - iota-array@1.0.0: - resolution: {integrity: sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA==} - ip-address@9.0.5: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} @@ -15645,9 +15566,6 @@ packages: peerDependencies: ws: '*' - isstream@0.1.2: - resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} - istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -15862,9 +15780,6 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} - jpeg-js@0.3.7: - resolution: {integrity: sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==} - js-base64@3.7.7: resolution: {integrity: sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==} @@ -15909,9 +15824,6 @@ packages: jsbi@4.3.0: resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==} - jsbn@0.1.1: - resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} - jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} @@ -16014,10 +15926,6 @@ packages: resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} engines: {node: '>=12', npm: '>=6'} - jsprim@1.4.2: - resolution: {integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==} - engines: {node: '>=0.6.0'} - jsrsasign@11.1.0: resolution: {integrity: sha512-Ov74K9GihaK9/9WncTe1mPmvrO7Py665TUfUKvraXBpu+xcTWitrtuOwcjf4KMU9maPaYn0OuaWy0HOzy/GBXg==} @@ -17170,9 +17078,6 @@ packages: resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} engines: {node: '>= 6.0.0'} - multi-integer-range@3.0.0: - resolution: {integrity: sha512-uQzynjVJ8F7x5wjaK0g4Ybhy2TvO/pk96+YHyS5g1W4GuUEV6HMebZ8HcRwWgKIRCUT2MLbM5uCKwYcAqkS+8Q==} - multiaddr@7.5.0: resolution: {integrity: sha512-GvhHsIGDULh06jyb6ev+VfREH9evJCFIRnh3jUt9iEZ6XDbyoisZRFEI9bMvK/AiR6y66y6P+eoBw9mBYMhMvw==} deprecated: This module is deprecated, please upgrade to @multiformats/multiaddr @@ -17261,15 +17166,6 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} - ndarray-ops@1.2.2: - resolution: {integrity: sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw==} - - ndarray-pack@1.2.1: - resolution: {integrity: sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==} - - ndarray@1.0.19: - resolution: {integrity: sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==} - near-abi@0.1.1: resolution: {integrity: sha512-RVDI8O+KVxRpC3KycJ1bpfVj9Zv+xvq9PlW1yIFl46GhrnLw83/72HqHGjGDjQ8DtltkcpSjY9X3YIGZ+1QyzQ==} @@ -17348,10 +17244,6 @@ packages: node-api-headers@1.4.0: resolution: {integrity: sha512-u83U3WnRbBpWlhc0sQbpF3slHRLV/a6/OXByc+QzHcLxiDiJUWLuKGZp4/ntZUchnXGOCnCq++JUEtwb1/tyow==} - node-bitmap@0.0.1: - resolution: {integrity: sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA==} - engines: {node: '>=v0.6.5'} - node-cache@5.1.2: resolution: {integrity: sha512-t1QzWwnk4sjLWaQAS8CHgOJ+RAfmHpxFWmc36IWTiWHQfs0w5JDMBS1b1ZxQteo0vVVuWJvIUKHDkkeK7vIGCg==} engines: {node: '>= 8.0.0'} @@ -17565,9 +17457,6 @@ packages: o3@1.0.3: resolution: {integrity: sha512-f+4n+vC6s4ysy7YO7O2gslWZBUu8Qj2i2OUJOvjRxQva7jVjYjB29jrr9NCjmxZQR0gzrOcv1RnqoYOeMs5VRQ==} - oauth-sign@0.9.0: - resolution: {integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==} - object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -17630,9 +17519,6 @@ packages: zod: optional: true - omggif@1.0.10: - resolution: {integrity: sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==} - on-exit-leak-free@0.2.0: resolution: {integrity: sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg==} @@ -17909,9 +17795,6 @@ packages: resolution: {integrity: sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - parse-data-uri@0.2.0: - resolution: {integrity: sha512-uOtts8NqDcaCt1rIsO3VFDRsAfgE4c6osG4d9z3l4dCBlxYFzni6Di/oNU270SDrjkfZuUvLZx1rxMyqh46Y9w==} - parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} @@ -18080,9 +17963,6 @@ packages: perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - performance-now@2.1.0: - resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} - pg-cloudflare@1.1.1: resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} @@ -18234,14 +18114,6 @@ packages: engines: {node: '>=12.0.0'} hasBin: true - pngjs-nozlib@1.0.0: - resolution: {integrity: sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA==} - engines: {iojs: '>= 1.0.0', node: '>=0.10.0'} - - pngjs@2.3.1: - resolution: {integrity: sha512-ITNPqvx+SSssNFOgHQzGG87HrqQ0g2nMSHc1jjU5Piq9xJEJ40fiFEPz0S5HSSXxBHrTnhaBHIayTO5aRfk2vw==} - engines: {iojs: '>= 1.0.0', node: '>=0.10.0'} - pngjs@5.0.0: resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} engines: {node: '>=10.13.0'} @@ -19217,10 +19089,6 @@ packages: resolution: {integrity: sha512-EJPeIn0CYrGu+hli1xilKAPXODtJ12T0sP63Ijx2/khC2JtuaN3JyNIpvmnkmaEtha9ocbG4A4cMcr+TvqvwQg==} engines: {node: '>=0.6'} - qs@6.5.3: - resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} - engines: {node: '>=0.6'} - quais@1.0.0-alpha.25: resolution: {integrity: sha512-dohlLbU55+7VYwmP2dENQ9ptPBBY+Rw6glRfgdMv5ClimQGfxF3DQHWe1G+qwWdyM9avkdoyBwBkw9BHwph/vA==} engines: {node: '>=17.0.0'} @@ -19473,9 +19341,6 @@ packages: resolution: {integrity: sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - readable-stream@1.0.34: - resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} - readable-stream@1.1.14: resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} @@ -19656,11 +19521,6 @@ packages: resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} engines: {node: '>=0.10'} - request@2.88.2: - resolution: {integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==} - engines: {node: '>= 6'} - deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 - require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -19886,9 +19746,6 @@ packages: resolution: {integrity: sha512-jLYV0DORrzY3xaz/S9ydJL6Iz7essZeAfnAavsJ+zsJGZ1MOnsS52yRjU3uF3pJa/lla7+wisp//fxOwOH8SKQ==} engines: {node: '>= 0.10'} - save-pixels-jpeg-js-upgrade@2.3.4-jpeg-js-upgrade.0: - resolution: {integrity: sha512-mFeQrydaAVTYQjywMvuNtjHmYZwAXZlo96Xouh3I7wTYDdUhMttoEPQsfk6EP+Wxt+fo/B8SW/A8dfhBImhKIw==} - sax@1.4.1: resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} @@ -20375,11 +20232,6 @@ packages: srt@0.0.3: resolution: {integrity: sha512-lak1bX2JSWpzar6NrXDSn1EQDfUeqKOikE+NY3EpjzH6sbqWl3oKlEWiVPFAFSFaMHjdyEXfYiwTrXhWNdeIOg==} - sshpk@1.18.0: - resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} - engines: {node: '>=0.10.0'} - hasBin: true - ssri@10.0.6: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -21031,10 +20883,6 @@ packages: resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true - tough-cookie@2.5.0: - resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==} - engines: {node: '>=0.8'} - tough-cookie@4.1.4: resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} engines: {node: '>=6'} @@ -21270,9 +21118,6 @@ packages: tweetnacl-util@0.15.1: resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - tweetnacl@1.0.3: resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} @@ -21537,9 +21382,6 @@ packages: unified@9.2.2: resolution: {integrity: sha512-Sg7j110mtefBD+qunSLO1lqOEKdrwBFBrR6Qd8f4uwkhWNlbkaqwHse6e7QvD3AP/MNoJdEDLaf8OxYyoWgorQ==} - uniq@1.0.1: - resolution: {integrity: sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==} - unique-filename@3.0.0: resolution: {integrity: sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -21806,11 +21648,6 @@ packages: resolution: {integrity: sha512-508e6IcKLrhxKdBbcA2b4KQZlLVp2+J5UwQ6F7Drckkc5N9ZJwFa4TgWtsww9UG8fGHbm6gbV19TdM5pQ4GaIA==} hasBin: true - uuid@3.4.0: - resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} - deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. - hasBin: true - uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true @@ -21875,10 +21712,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - verror@1.10.0: - resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} - engines: {'0': node >=0.6.0} - vfile-location@3.2.0: resolution: {integrity: sha512-aLEIZKv/oxuCDZ8lkJGhuhztf/BW4M+iHdCwglA/eWc+vtuRFJj8EtgceYFX4LRjOhCAAiNHsKGssC6onJ+jbA==} @@ -28618,7 +28451,7 @@ snapshots: '@kwsites/file-exists@1.1.1': dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -30958,7 +30791,7 @@ snapshots: '@pm2/pm2-version-check@1.0.4': dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -35798,7 +35631,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -36187,10 +36020,6 @@ snapshots: minimalistic-assert: 1.0.1 safer-buffer: 2.1.2 - asn1@0.2.6: - dependencies: - safer-buffer: 2.1.2 - asn1js@2.4.0: dependencies: pvutils: 1.1.3 @@ -36201,8 +36030,6 @@ snapshots: pvutils: 1.1.3 tslib: 2.8.1 - assert-plus@1.0.0: {} - assert@1.5.1: dependencies: object.assign: 4.1.7 @@ -36298,10 +36125,6 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - aws-sign2@0.7.0: {} - - aws4@1.13.2: {} - axe-core@4.10.2: {} axios-mock-adapter@1.22.0(axios@1.7.9): @@ -36334,7 +36157,7 @@ snapshots: axios@0.27.2: dependencies: - follow-redirects: 1.15.9(debug@4.4.0) + follow-redirects: 1.15.9 form-data: 4.0.1 transitivePeerDependencies: - debug @@ -36371,6 +36194,14 @@ snapshots: transitivePeerDependencies: - debug + axios@1.7.9: + dependencies: + follow-redirects: 1.15.9 + form-data: 4.0.1 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + axios@1.7.9(debug@4.4.0): dependencies: follow-redirects: 1.15.9(debug@4.4.0) @@ -36593,10 +36424,6 @@ snapshots: bcp-47-match@1.0.3: {} - bcrypt-pbkdf@1.0.2: - dependencies: - tweetnacl: 0.14.5 - bech32@1.1.4: {} bech32@2.0.0: {} @@ -37467,7 +37294,7 @@ snapshots: cmake-js@7.3.0: dependencies: axios: 1.7.9(debug@4.4.0) - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 fs-extra: 11.2.0 lodash.isplainobject: 4.0.6 memory-stream: 1.0.0 @@ -37683,10 +37510,6 @@ snapshots: content-type@1.0.5: {} - contentstream@1.0.0: - dependencies: - readable-stream: 1.0.34 - conventional-changelog-angular@7.0.0: dependencies: compare-func: 2.0.0 @@ -37788,8 +37611,6 @@ snapshots: core-js@3.40.0: {} - core-util-is@1.0.2: {} - core-util-is@1.0.3: {} cors@2.8.5: @@ -38213,10 +38034,6 @@ snapshots: culvert@0.1.2: {} - cwise-compiler@1.1.3: - dependencies: - uniq: 1.0.1 - cyrb53@1.0.0: {} cytoscape-cose-bilkent@4.1.0(cytoscape@3.31.0): @@ -38414,12 +38231,6 @@ snapshots: dash-ast@1.0.0: {} - dashdash@1.14.1: - dependencies: - assert-plus: 1.0.0 - - data-uri-to-buffer@0.0.3: {} - data-uri-to-buffer@4.0.1: {} data-uri-to-buffer@6.0.2: {} @@ -38463,7 +38274,7 @@ snapshots: debug-fabulous@2.0.2: dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 memoizee: 0.4.17 transitivePeerDependencies: - supports-color @@ -38493,6 +38304,10 @@ snapshots: dependencies: ms: 2.1.3 + debug@4.4.0: + dependencies: + ms: 2.1.3 + debug@4.4.0(supports-color@5.5.0): dependencies: ms: 2.1.3 @@ -38861,11 +38676,6 @@ snapshots: optionalDependencies: wcwidth: 1.0.1 - ecc-jsbn@0.1.2: - dependencies: - jsbn: 0.1.1 - safer-buffer: 2.1.2 - ecdsa-sig-formatter@1.0.11: dependencies: safe-buffer: 5.2.1 @@ -40042,7 +39852,7 @@ snapshots: extract-zip@2.0.1: dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: @@ -40056,8 +39866,6 @@ snapshots: transitivePeerDependencies: - debug - extsprintf@1.3.0: {} - eyes@0.1.8: {} fast-content-type-parse@2.0.1: {} @@ -40297,13 +40105,15 @@ snapshots: async: 0.2.10 which: 1.3.1 + follow-redirects@1.15.9: {} + follow-redirects@1.15.9(debug@4.3.7): optionalDependencies: debug: 4.3.7 follow-redirects@1.15.9(debug@4.4.0): optionalDependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 fomo-sdk-solana@1.3.2(bufferutil@4.0.9)(encoding@0.1.13)(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.7.3)(utf-8-validate@5.0.10): dependencies: @@ -40338,8 +40148,6 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@9.18.0(jiti@2.4.2))(typescript@5.7.3)(webpack@5.97.1(@swc/core@1.10.7(@swc/helpers@0.5.15))): dependencies: '@babel/code-frame': 7.26.2 @@ -40364,12 +40172,6 @@ snapshots: form-data-encoder@2.1.4: {} - form-data@2.3.3: - dependencies: - asynckit: 0.4.0 - combined-stream: 1.0.8 - mime-types: 2.1.35 - form-data@2.5.2: dependencies: asynckit: 0.4.0 @@ -40602,20 +40404,6 @@ snapshots: get-package-type@0.1.0: {} - get-pixels-jpeg-js-upgrade@3.3.0-jpeg-js-upgrade.0: - dependencies: - data-uri-to-buffer: 0.0.3 - jpeg-js: 0.3.7 - mime-types: 2.1.35 - ndarray: 1.0.19 - ndarray-pack: 1.2.1 - node-bitmap: 0.0.1 - omggif: 1.0.10 - parse-data-uri: 0.2.0 - pngjs: 2.3.1 - request: 2.88.2 - through: 2.3.8 - get-pkg-repo@4.2.1: dependencies: '@hutson/parse-repository-url': 3.0.2 @@ -40656,24 +40444,10 @@ snapshots: dependencies: basic-ftp: 5.0.5 data-uri-to-buffer: 6.0.2 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color - getpass@0.1.7: - dependencies: - assert-plus: 1.0.0 - - gif-encoder@0.4.3: - dependencies: - readable-stream: 1.1.14 - - gif-frames@0.4.1: - dependencies: - get-pixels-jpeg-js-upgrade: 3.3.0-jpeg-js-upgrade.0 - multi-integer-range: 3.0.0 - save-pixels-jpeg-js-upgrade: 2.3.4-jpeg-js-upgrade.0 - giget@1.2.3: dependencies: citty: 0.1.6 @@ -41000,13 +40774,6 @@ snapshots: optionalDependencies: uglify-js: 3.19.3 - har-schema@2.0.0: {} - - har-validator@5.1.5: - dependencies: - ajv: 6.12.6 - har-schema: 2.0.0 - hard-rejection@2.1.0: {} has-ansi@2.0.0: @@ -41374,7 +41141,7 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -41402,12 +41169,6 @@ snapshots: dependencies: '@types/node': 10.17.60 - http-signature@1.2.0: - dependencies: - assert-plus: 1.0.0 - jsprim: 1.4.2 - sshpk: 1.18.0 - http2-wrapper@1.0.3: dependencies: quick-lru: 5.1.1 @@ -41423,21 +41184,21 @@ snapshots: https-proxy-agent@4.0.0: dependencies: agent-base: 5.1.1 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -41640,8 +41401,6 @@ snapshots: transitivePeerDependencies: - supports-color - iota-array@1.0.0: {} - ip-address@9.0.5: dependencies: jsbn: 1.1.0 @@ -42016,8 +41775,6 @@ snapshots: dependencies: ws: 8.18.0(bufferutil@4.0.9)(utf-8-validate@6.0.5) - isstream@0.1.2: {} - istanbul-lib-coverage@3.2.2: {} istanbul-lib-instrument@5.2.1: @@ -42715,8 +42472,6 @@ snapshots: joycon@3.1.1: {} - jpeg-js@0.3.7: {} - js-base64@3.7.7: {} js-git@0.7.8: @@ -42757,8 +42512,6 @@ snapshots: jsbi@4.3.0: {} - jsbn@0.1.1: {} - jsbn@1.1.0: {} jsdoc-type-pratt-parser@4.0.0: {} @@ -42903,13 +42656,6 @@ snapshots: ms: 2.1.3 semver: 7.6.3 - jsprim@1.4.2: - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - jsrsasign@11.1.0: {} jssha@3.2.0: {} @@ -44480,8 +44226,6 @@ snapshots: type-is: 1.6.18 xtend: 4.0.2 - multi-integer-range@3.0.0: {} - multiaddr@7.5.0: dependencies: buffer: 5.7.1 @@ -44573,20 +44317,6 @@ snapshots: natural-compare@1.4.0: {} - ndarray-ops@1.2.2: - dependencies: - cwise-compiler: 1.1.3 - - ndarray-pack@1.2.1: - dependencies: - cwise-compiler: 1.1.3 - ndarray: 1.0.19 - - ndarray@1.0.19: - dependencies: - iota-array: 1.0.0 - is-buffer: 1.1.6 - near-abi@0.1.1: dependencies: '@types/json-schema': 7.0.15 @@ -44695,8 +44425,6 @@ snapshots: node-api-headers@1.4.0: {} - node-bitmap@0.0.1: {} - node-cache@5.1.2: dependencies: clone: 2.1.2 @@ -45026,8 +44754,6 @@ snapshots: dependencies: capability: 0.2.5 - oauth-sign@0.9.0: {} - object-assign@4.1.1: {} object-hash@3.0.0: {} @@ -45115,8 +44841,6 @@ snapshots: optionalDependencies: zod: 3.24.1 - omggif@1.0.10: {} - on-exit-leak-free@0.2.0: {} on-finished@2.4.1: @@ -45447,7 +45171,7 @@ snapshots: dependencies: '@tootallnate/quickjs-emscripten': 0.23.0 agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 get-uri: 6.0.4 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 @@ -45531,10 +45255,6 @@ snapshots: just-diff: 6.0.2 just-diff-apply: 5.5.0 - parse-data-uri@0.2.0: - dependencies: - data-uri-to-buffer: 0.0.3 - parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -45691,8 +45411,6 @@ snapshots: perfect-debounce@1.0.0: {} - performance-now@2.1.0: {} - pg-cloudflare@1.1.1: optional: true @@ -45827,7 +45545,7 @@ snapshots: pm2-axon-rpc@0.7.1: dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -45835,7 +45553,7 @@ snapshots: dependencies: amp: 0.3.1 amp-message: 0.1.2 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 escape-string-regexp: 4.0.0 transitivePeerDependencies: - supports-color @@ -45852,7 +45570,7 @@ snapshots: pm2-sysmonit@1.2.8: dependencies: async: 3.2.6 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 pidusage: 2.0.21 systeminformation: 5.23.5 tx2: 1.0.5 @@ -45874,7 +45592,7 @@ snapshots: commander: 2.15.1 croner: 4.1.97 dayjs: 1.11.13 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 enquirer: 2.3.6 eventemitter2: 5.0.1 fclone: 1.0.11 @@ -45898,10 +45616,6 @@ snapshots: - supports-color - utf-8-validate - pngjs-nozlib@1.0.0: {} - - pngjs@2.3.1: {} - pngjs@5.0.0: {} pnpm@9.14.4: {} @@ -46772,7 +46486,7 @@ snapshots: proxy-agent@6.3.1: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 lru-cache: 7.18.3 @@ -46866,7 +46580,7 @@ snapshots: puppeteer-extra-plugin-capsolver@2.0.1(bufferutil@4.0.9)(encoding@0.1.13)(puppeteer-core@19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(typescript@5.7.3)(utf-8-validate@5.0.10): dependencies: - axios: 1.7.9(debug@4.4.0) + axios: 1.7.9 capsolver-npm: 2.0.2 puppeteer: 19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10) puppeteer-extra: 3.3.6(puppeteer-core@19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(puppeteer@19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)) @@ -46885,7 +46599,7 @@ snapshots: puppeteer-extra-plugin@3.2.3(puppeteer-extra@3.3.6(puppeteer-core@19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(puppeteer@19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))): dependencies: '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 merge-deep: 3.0.3 optionalDependencies: puppeteer-extra: 3.3.6(puppeteer-core@19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(puppeteer@19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)) @@ -46895,7 +46609,7 @@ snapshots: puppeteer-extra@3.3.6(puppeteer-core@19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10))(puppeteer@19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10)): dependencies: '@types/debug': 4.1.12 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 deepmerge: 4.3.1 optionalDependencies: puppeteer: 19.11.1(bufferutil@4.0.9)(encoding@0.1.13)(typescript@5.7.3)(utf-8-validate@5.0.10) @@ -46941,8 +46655,6 @@ snapshots: dependencies: side-channel: 1.1.0 - qs@6.5.3: {} - quais@1.0.0-alpha.25(bufferutil@4.0.9)(utf-8-validate@6.0.5): dependencies: '@bitcoinerlab/secp256k1': 1.2.0 @@ -47246,13 +46958,6 @@ snapshots: dependencies: mute-stream: 1.0.0 - readable-stream@1.0.34: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 0.0.1 - string_decoder: 0.10.31 - readable-stream@1.1.14: dependencies: core-util-is: 1.0.3 @@ -47522,36 +47227,13 @@ snapshots: repeat-string@1.6.1: {} - request@2.88.2: - dependencies: - aws-sign2: 0.7.0 - aws4: 1.13.2 - caseless: 0.12.0 - combined-stream: 1.0.8 - extend: 3.0.2 - forever-agent: 0.6.1 - form-data: 2.3.3 - har-validator: 5.1.5 - http-signature: 1.2.0 - is-typedarray: 1.0.0 - isstream: 0.1.2 - json-stringify-safe: 5.0.1 - mime-types: 2.1.35 - oauth-sign: 0.9.0 - performance-now: 2.1.0 - qs: 6.5.3 - safe-buffer: 5.2.1 - tough-cookie: 2.5.0 - tunnel-agent: 0.6.0 - uuid: 3.4.0 - require-directory@2.1.1: {} require-from-string@2.0.2: {} require-in-the-middle@5.2.0: dependencies: - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 module-details-from-path: 1.0.3 resolve: 1.22.10 transitivePeerDependencies: @@ -47781,16 +47463,6 @@ snapshots: sandwich-stream@2.0.2: {} - save-pixels-jpeg-js-upgrade@2.3.4-jpeg-js-upgrade.0: - dependencies: - contentstream: 1.0.0 - gif-encoder: 0.4.3 - jpeg-js: 0.3.7 - ndarray: 1.0.19 - ndarray-ops: 1.2.2 - pngjs-nozlib: 1.0.0 - through: 2.3.8 - sax@1.4.1: {} saxes@6.0.0: @@ -48138,7 +47810,7 @@ snapshots: dependencies: '@kwsites/file-exists': 1.1.1 '@kwsites/promise-deferred': 1.1.1 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 transitivePeerDependencies: - supports-color @@ -48239,7 +47911,7 @@ snapshots: socks-proxy-agent@8.0.5: dependencies: agent-base: 7.1.3 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -48481,18 +48153,6 @@ snapshots: dependencies: ap: 0.1.0 - sshpk@1.18.0: - dependencies: - asn1: 0.2.6 - assert-plus: 1.0.0 - bcrypt-pbkdf: 1.0.2 - dashdash: 1.14.1 - ecc-jsbn: 0.1.2 - getpass: 0.1.7 - jsbn: 0.1.1 - safer-buffer: 2.1.2 - tweetnacl: 0.14.5 - ssri@10.0.6: dependencies: minipass: 7.1.2 @@ -49214,11 +48874,6 @@ snapshots: touch@3.1.1: {} - tough-cookie@2.5.0: - dependencies: - psl: 1.15.0 - punycode: 2.3.1 - tough-cookie@4.1.4: dependencies: psl: 1.15.0 @@ -49521,7 +49176,7 @@ snapshots: cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.0 - debug: 4.4.0(supports-color@5.5.0) + debug: 4.4.0 esbuild: 0.24.2 joycon: 3.1.1 picocolors: 1.1.1 @@ -49599,8 +49254,6 @@ snapshots: tweetnacl-util@0.15.1: {} - tweetnacl@0.14.5: {} - tweetnacl@1.0.3: {} twitter-api-v2@1.19.0: {} @@ -49889,8 +49542,6 @@ snapshots: trough: 1.0.5 vfile: 4.2.1 - uniq@1.0.1: {} - unique-filename@3.0.0: dependencies: unique-slug: 4.0.0 @@ -50129,8 +49780,6 @@ snapshots: uuid@11.0.5: {} - uuid@3.4.0: {} - uuid@8.3.2: {} uuid@9.0.1: {} @@ -50178,12 +49827,6 @@ snapshots: vary@1.1.2: {} - verror@1.10.0: - dependencies: - assert-plus: 1.0.0 - core-util-is: 1.0.2 - extsprintf: 1.3.0 - vfile-location@3.2.0: {} vfile-location@5.0.3: From 1733d32320af5d97c40debcc93af7bf30390aaa7 Mon Sep 17 00:00:00 2001 From: ae9is <125031666+ae9is@users.noreply.github.com> Date: Thu, 16 Jan 2025 03:42:14 +0000 Subject: [PATCH 2/6] fix: local image description --- packages/plugin-node/src/services/image.ts | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/packages/plugin-node/src/services/image.ts b/packages/plugin-node/src/services/image.ts index 7e74233b56e..b5ceafb22a6 100644 --- a/packages/plugin-node/src/services/image.ts +++ b/packages/plugin-node/src/services/image.ts @@ -111,15 +111,14 @@ class LocalImageProvider implements ImageProvider { } async describeImage( - imageData: Buffer + imageData: Buffer, + mimeType: string ): Promise<{ title: string; description: string }> { if (!this.model || !this.processor || !this.tokenizer) { throw new Error("Model components not initialized"); } - - const base64Data = imageData.toString("base64"); - const dataUrl = `data:image/jpeg;base64,${base64Data}`; - const image = await RawImage.fromURL(dataUrl); + const blob = new Blob([imageData], { type: mimeType }); + const image = await RawImage.fromBlob(blob); const visionInputs = await this.processor(image); const prompts = this.processor.construct_prompts(""); const textInputs = this.tokenizer(prompts); From 4cbbe11935b68c82261731c2a46b8326977b99c2 Mon Sep 17 00:00:00 2001 From: ae9is <125031666+ae9is@users.noreply.github.com> Date: Thu, 16 Jan 2025 10:07:05 +0000 Subject: [PATCH 3/6] fix: describe image action to account for differences in file location object between models --- packages/plugin-node/src/actions/describe-image.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/plugin-node/src/actions/describe-image.ts b/packages/plugin-node/src/actions/describe-image.ts index 6dad46240ad..c02772a44f1 100644 --- a/packages/plugin-node/src/actions/describe-image.ts +++ b/packages/plugin-node/src/actions/describe-image.ts @@ -43,12 +43,18 @@ export const describeImage: Action = { stop: ["\n"], }); - if (!isFileLocationResult(fileLocationResultObject?.object)) { + if ( + !isFileLocationResult( + fileLocationResultObject?.object ?? fileLocationResultObject + ) + ) { elizaLogger.error("Failed to generate file location"); return false; } - const { fileLocation } = fileLocationResultObject.object; + let fileLocation = (fileLocationResultObject?.object as any) + ?.fileLocation; + fileLocation ??= fileLocationResultObject; const { description } = await runtime .getService(ServiceType.IMAGE_DESCRIPTION) From de75361c014ee074d6ac5d60a83028c1e73b258e Mon Sep 17 00:00:00 2001 From: ae9is <125031666+ae9is@users.noreply.github.com> Date: Thu, 16 Jan 2025 10:25:21 +0000 Subject: [PATCH 4/6] fix: image description service to handle more input formats correctly --- packages/plugin-node/src/services/image.ts | 98 +++++++++++++--------- 1 file changed, 58 insertions(+), 40 deletions(-) diff --git a/packages/plugin-node/src/services/image.ts b/packages/plugin-node/src/services/image.ts index b5ceafb22a6..58a3632d4c7 100644 --- a/packages/plugin-node/src/services/image.ts +++ b/packages/plugin-node/src/services/image.ts @@ -19,7 +19,7 @@ import { RawImage, type Tensor, } from "@huggingface/transformers"; -import sharp from "sharp"; +import sharp, { AvailableFormatInfo, FormatEnum } from "sharp"; import fs from "fs"; import os from "os"; import path from "path"; @@ -299,67 +299,85 @@ export class ImageDescriptionService this.initialized = true; } + /** + * @param imageUrlOrPath URL or file system path to an image. Any format that the sharp library supports as input should work. Images that aren't JPEG or PNG will be converted to PNG. + * @returns Image data buffer and mime type. + */ private async loadImageData( - imageUrl: string + imageUrlOrPath: string ): Promise<{ data: Buffer; mimeType: string }> { - const isGif = imageUrl.toLowerCase().endsWith(".gif"); - let imageData: Buffer; - let mimeType: string; - - if (isGif) { - const { filePath } = await this.extractFirstFrameFromGif(imageUrl); - imageData = fs.readFileSync(filePath); - mimeType = "image/png"; - fs.unlinkSync(filePath); // Clean up temp file + let loadedImageData: Buffer; + let loadedMimeType: string; + const { imageData, mimeType } = await this.fetchImage(imageUrlOrPath); + const skipConversion = + mimeType === "image/jpeg" || + mimeType === "image/jpg" || + mimeType === "image/png"; + if (skipConversion) { + loadedImageData = imageData; + loadedMimeType = mimeType; } else { - if (fs.existsSync(imageUrl)) { - imageData = fs.readFileSync(imageUrl); - const ext = path.extname(imageUrl).slice(1); - mimeType = ext ? `image/${ext}` : "image/jpeg"; - } else { - const response = await fetch(imageUrl); - if (!response.ok) { - throw new Error( - `Failed to fetch image: ${response.statusText}` - ); - } - imageData = Buffer.from(await response.arrayBuffer()); - mimeType = response.headers.get("content-type") || "image/jpeg"; - } + const converted = await this.convertImageDataToFormat( + imageData, + "png" + ); + loadedImageData = converted.imageData; + loadedMimeType = converted.mimeType; } - - if (!imageData || imageData.length === 0) { + if (!loadedImageData || loadedImageData.length === 0) { throw new Error("Failed to fetch image data"); } - - return { data: imageData, mimeType }; + return { data: loadedImageData, mimeType: loadedMimeType }; } - private async extractFirstFrameFromGif( - gifUrl: string - ): Promise<{ filePath: string }> { + private async convertImageDataToFormat( + data: Buffer, + format: keyof FormatEnum | AvailableFormatInfo = "png" + ): Promise<{ imageData: Buffer; mimeType: string }> { const tempFilePath = path.join( os.tmpdir(), - `gif_frame_${Date.now()}.png` + `tmp_img_${Date.now()}.${format}` ); - const resp = await fetch(gifUrl); - const buff = await resp.arrayBuffer(); - const imgBuff = Buffer.from(buff); - await sharp(imgBuff).toFormat("png").toFile(tempFilePath); + await sharp(data).toFormat(format).toFile(tempFilePath); + const { imageData, mimeType } = await this.fetchImage(tempFilePath); + fs.unlinkSync(tempFilePath); // Clean up temp file return { - filePath: tempFilePath, + imageData, + mimeType, }; } + private async fetchImage( + imageUrlOrPath: string + ): Promise<{ imageData: Buffer; mimeType: string }> { + let imageData: Buffer; + let mimeType: string; + if (fs.existsSync(imageUrlOrPath)) { + imageData = fs.readFileSync(imageUrlOrPath); + const ext = path.extname(imageUrlOrPath).slice(1).toLowerCase(); + mimeType = ext ? `image/${ext}` : "image/jpeg"; + } else { + const response = await fetch(imageUrlOrPath); + if (!response.ok) { + throw new Error( + `Failed to fetch image: ${response.statusText}` + ); + } + imageData = Buffer.from(await response.arrayBuffer()); + mimeType = response.headers.get("content-type") || "image/jpeg"; + } + return { imageData, mimeType }; + } + async describeImage( - imageUrl: string + imageUrlOrPath: string ): Promise<{ title: string; description: string }> { if (!this.initialized) { await this.initializeProvider(); } try { - const { data, mimeType } = await this.loadImageData(imageUrl); + const { data, mimeType } = await this.loadImageData(imageUrlOrPath); return await this.provider!.describeImage(data, mimeType); } catch (error) { elizaLogger.error("Error in describeImage:", error); From 7e96ac24bd6a7967720e249f8f813d1f8be2e359 Mon Sep 17 00:00:00 2001 From: ae9is <125031666+ae9is@users.noreply.github.com> Date: Thu, 16 Jan 2025 10:29:10 +0000 Subject: [PATCH 5/6] fix: route to local vision model provider when using ollama --- packages/plugin-node/src/services/image.ts | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/packages/plugin-node/src/services/image.ts b/packages/plugin-node/src/services/image.ts index 58a3632d4c7..02116a3526f 100644 --- a/packages/plugin-node/src/services/image.ts +++ b/packages/plugin-node/src/services/image.ts @@ -263,10 +263,12 @@ export class ImageDescriptionService if (this.runtime.imageVisionModelProvider) { if ( this.runtime.imageVisionModelProvider === - ModelProviderName.LLAMALOCAL + ModelProviderName.LLAMALOCAL || + this.runtime.imageVisionModelProvider === + ModelProviderName.OLLAMA ) { this.provider = new LocalImageProvider(); - elizaLogger.debug("Using llama local for vision model"); + elizaLogger.debug("Using local provider for vision model"); } else if ( this.runtime.imageVisionModelProvider === ModelProviderName.GOOGLE @@ -284,9 +286,12 @@ export class ImageDescriptionService `Unsupported image vision model provider: ${this.runtime.imageVisionModelProvider}` ); } - } else if (model === models[ModelProviderName.LLAMALOCAL]) { + } else if ( + model === models[ModelProviderName.LLAMALOCAL] || + model === models[ModelProviderName.OLLAMA] + ) { this.provider = new LocalImageProvider(); - elizaLogger.debug("Using llama local for vision model"); + elizaLogger.debug("Using local provider for vision model"); } else if (model === models[ModelProviderName.GOOGLE]) { this.provider = new GoogleImageProvider(this.runtime); elizaLogger.debug("Using google for vision model"); From 6170d4c458fd66493d76f5b09a05ea50ee4e759b Mon Sep 17 00:00:00 2001 From: ae9is <125031666+ae9is@users.noreply.github.com> Date: Fri, 17 Jan 2025 04:32:03 +0000 Subject: [PATCH 6/6] fix: improve temp file cleanup in image conversion --- packages/plugin-node/src/services/image.ts | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/packages/plugin-node/src/services/image.ts b/packages/plugin-node/src/services/image.ts index 02116a3526f..55c181910f1 100644 --- a/packages/plugin-node/src/services/image.ts +++ b/packages/plugin-node/src/services/image.ts @@ -343,13 +343,16 @@ export class ImageDescriptionService os.tmpdir(), `tmp_img_${Date.now()}.${format}` ); - await sharp(data).toFormat(format).toFile(tempFilePath); - const { imageData, mimeType } = await this.fetchImage(tempFilePath); - fs.unlinkSync(tempFilePath); // Clean up temp file - return { - imageData, - mimeType, - }; + try { + await sharp(data).toFormat(format).toFile(tempFilePath); + const { imageData, mimeType } = await this.fetchImage(tempFilePath); + return { + imageData, + mimeType, + }; + } finally { + fs.unlinkSync(tempFilePath); // Clean up temp file + } } private async fetchImage(