mirror of
https://github.com/pacnpal/Roo-Code.git
synced 2025-12-20 12:21:13 -05:00
Remove sharp processing and use original images in requests
This commit is contained in:
535
package-lock.json
generated
535
package-lock.json
generated
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "claude-dev",
|
"name": "claude-dev",
|
||||||
"version": "1.0.97",
|
"version": "1.0.98",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "claude-dev",
|
"name": "claude-dev",
|
||||||
"version": "1.0.97",
|
"version": "1.0.98",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@anthropic-ai/bedrock-sdk": "^0.10.2",
|
"@anthropic-ai/bedrock-sdk": "^0.10.2",
|
||||||
@@ -21,7 +21,6 @@
|
|||||||
"os-name": "^6.0.0",
|
"os-name": "^6.0.0",
|
||||||
"p-wait-for": "^5.0.2",
|
"p-wait-for": "^5.0.2",
|
||||||
"serialize-error": "^11.0.3",
|
"serialize-error": "^11.0.3",
|
||||||
"sharp": "^0.33.4",
|
|
||||||
"tree-kill": "^1.2.2",
|
"tree-kill": "^1.2.2",
|
||||||
"tree-sitter-wasms": "^0.1.11",
|
"tree-sitter-wasms": "^0.1.11",
|
||||||
"web-tree-sitter": "^0.22.6"
|
"web-tree-sitter": "^0.22.6"
|
||||||
@@ -2147,21 +2146,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@emnapi/runtime": {
|
|
||||||
"version": "1.2.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz",
|
|
||||||
"integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==",
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"tslib": "^2.4.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@emnapi/runtime/node_modules/tslib": {
|
|
||||||
"version": "2.6.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz",
|
|
||||||
"integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==",
|
|
||||||
"optional": true
|
|
||||||
},
|
|
||||||
"node_modules/@esbuild/aix-ppc64": {
|
"node_modules/@esbuild/aix-ppc64": {
|
||||||
"version": "0.21.5",
|
"version": "0.21.5",
|
||||||
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
|
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
|
||||||
@@ -2699,437 +2683,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "BSD-3-Clause"
|
"license": "BSD-3-Clause"
|
||||||
},
|
},
|
||||||
"node_modules/@img/sharp-darwin-arm64": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.26",
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@img/sharp-libvips-darwin-arm64": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-darwin-x64": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.26",
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@img/sharp-libvips-darwin-x64": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-libvips-darwin-arm64": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"macos": ">=11",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-libvips-darwin-x64": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"darwin"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"macos": ">=10.13",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-libvips-linux-arm": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==",
|
|
||||||
"cpu": [
|
|
||||||
"arm"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.28",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-libvips-linux-arm64": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.26",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-libvips-linux-s390x": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==",
|
|
||||||
"cpu": [
|
|
||||||
"s390x"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.28",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-libvips-linux-x64": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.26",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-libvips-linuxmusl-arm64": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"musl": ">=1.2.2",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-libvips-linuxmusl-x64": {
|
|
||||||
"version": "1.0.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz",
|
|
||||||
"integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"musl": ">=1.2.2",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-linux-arm": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==",
|
|
||||||
"cpu": [
|
|
||||||
"arm"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.28",
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@img/sharp-libvips-linux-arm": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-linux-arm64": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.26",
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@img/sharp-libvips-linux-arm64": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-linux-s390x": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==",
|
|
||||||
"cpu": [
|
|
||||||
"s390x"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.31",
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@img/sharp-libvips-linux-s390x": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-linux-x64": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"glibc": ">=2.26",
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@img/sharp-libvips-linux-x64": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-linuxmusl-arm64": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==",
|
|
||||||
"cpu": [
|
|
||||||
"arm64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"musl": ">=1.2.2",
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@img/sharp-libvips-linuxmusl-arm64": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-linuxmusl-x64": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"linux"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"musl": ">=1.2.2",
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@img/sharp-libvips-linuxmusl-x64": "1.0.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-wasm32": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==",
|
|
||||||
"cpu": [
|
|
||||||
"wasm32"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"dependencies": {
|
|
||||||
"@emnapi/runtime": "^1.1.1"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-win32-ia32": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==",
|
|
||||||
"cpu": [
|
|
||||||
"ia32"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@img/sharp-win32-x64": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==",
|
|
||||||
"cpu": [
|
|
||||||
"x64"
|
|
||||||
],
|
|
||||||
"optional": true,
|
|
||||||
"os": [
|
|
||||||
"win32"
|
|
||||||
],
|
|
||||||
"engines": {
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0",
|
|
||||||
"npm": ">=9.6.5",
|
|
||||||
"pnpm": ">=7.1.0",
|
|
||||||
"yarn": ">=3.2.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@isaacs/cliui": {
|
"node_modules/@isaacs/cliui": {
|
||||||
"version": "8.0.2",
|
"version": "8.0.2",
|
||||||
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
|
||||||
@@ -5790,22 +5343,11 @@
|
|||||||
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/color": {
|
|
||||||
"version": "4.2.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
|
|
||||||
"integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
|
|
||||||
"dependencies": {
|
|
||||||
"color-convert": "^2.0.1",
|
|
||||||
"color-string": "^1.9.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=12.5.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/color-convert": {
|
"node_modules/color-convert": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
||||||
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"color-name": "~1.1.4"
|
"color-name": "~1.1.4"
|
||||||
@@ -5818,17 +5360,9 @@
|
|||||||
"version": "1.1.4",
|
"version": "1.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
||||||
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
||||||
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/color-string": {
|
|
||||||
"version": "1.9.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
|
|
||||||
"integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
|
|
||||||
"dependencies": {
|
|
||||||
"color-name": "^1.0.0",
|
|
||||||
"simple-swizzle": "^0.2.2"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/combined-stream": {
|
"node_modules/combined-stream": {
|
||||||
"version": "1.0.8",
|
"version": "1.0.8",
|
||||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||||
@@ -6036,14 +5570,6 @@
|
|||||||
"node": ">=0.4.0"
|
"node": ">=0.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/detect-libc": {
|
|
||||||
"version": "2.0.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
|
|
||||||
"integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
|
|
||||||
"engines": {
|
|
||||||
"node": ">=8"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/diff": {
|
"node_modules/diff": {
|
||||||
"version": "5.2.0",
|
"version": "5.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz",
|
||||||
@@ -9328,6 +8854,7 @@
|
|||||||
"version": "7.6.2",
|
"version": "7.6.2",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
|
||||||
"integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
|
"integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
|
||||||
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
"semver": "bin/semver.js"
|
"semver": "bin/semver.js"
|
||||||
@@ -9414,45 +8941,6 @@
|
|||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/sharp": {
|
|
||||||
"version": "0.33.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz",
|
|
||||||
"integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==",
|
|
||||||
"hasInstallScript": true,
|
|
||||||
"dependencies": {
|
|
||||||
"color": "^4.2.3",
|
|
||||||
"detect-libc": "^2.0.3",
|
|
||||||
"semver": "^7.6.0"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"libvips": ">=8.15.2",
|
|
||||||
"node": "^18.17.0 || ^20.3.0 || >=21.0.0"
|
|
||||||
},
|
|
||||||
"funding": {
|
|
||||||
"url": "https://opencollective.com/libvips"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"@img/sharp-darwin-arm64": "0.33.4",
|
|
||||||
"@img/sharp-darwin-x64": "0.33.4",
|
|
||||||
"@img/sharp-libvips-darwin-arm64": "1.0.2",
|
|
||||||
"@img/sharp-libvips-darwin-x64": "1.0.2",
|
|
||||||
"@img/sharp-libvips-linux-arm": "1.0.2",
|
|
||||||
"@img/sharp-libvips-linux-arm64": "1.0.2",
|
|
||||||
"@img/sharp-libvips-linux-s390x": "1.0.2",
|
|
||||||
"@img/sharp-libvips-linux-x64": "1.0.2",
|
|
||||||
"@img/sharp-libvips-linuxmusl-arm64": "1.0.2",
|
|
||||||
"@img/sharp-libvips-linuxmusl-x64": "1.0.2",
|
|
||||||
"@img/sharp-linux-arm": "0.33.4",
|
|
||||||
"@img/sharp-linux-arm64": "0.33.4",
|
|
||||||
"@img/sharp-linux-s390x": "0.33.4",
|
|
||||||
"@img/sharp-linux-x64": "0.33.4",
|
|
||||||
"@img/sharp-linuxmusl-arm64": "0.33.4",
|
|
||||||
"@img/sharp-linuxmusl-x64": "0.33.4",
|
|
||||||
"@img/sharp-wasm32": "0.33.4",
|
|
||||||
"@img/sharp-win32-ia32": "0.33.4",
|
|
||||||
"@img/sharp-win32-x64": "0.33.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/shebang-command": {
|
"node_modules/shebang-command": {
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
|
||||||
@@ -9515,19 +9003,6 @@
|
|||||||
"url": "https://github.com/sponsors/isaacs"
|
"url": "https://github.com/sponsors/isaacs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/simple-swizzle": {
|
|
||||||
"version": "0.2.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
|
|
||||||
"integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
|
|
||||||
"dependencies": {
|
|
||||||
"is-arrayish": "^0.3.1"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/simple-swizzle/node_modules/is-arrayish": {
|
|
||||||
"version": "0.3.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
|
|
||||||
"integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
|
|
||||||
},
|
|
||||||
"node_modules/slash": {
|
"node_modules/slash": {
|
||||||
"version": "5.1.0",
|
"version": "5.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
|
||||||
|
|||||||
@@ -135,7 +135,6 @@
|
|||||||
"os-name": "^6.0.0",
|
"os-name": "^6.0.0",
|
||||||
"p-wait-for": "^5.0.2",
|
"p-wait-for": "^5.0.2",
|
||||||
"serialize-error": "^11.0.3",
|
"serialize-error": "^11.0.3",
|
||||||
"sharp": "^0.33.4",
|
|
||||||
"tree-kill": "^1.2.2",
|
"tree-kill": "^1.2.2",
|
||||||
"tree-sitter-wasms": "^0.1.11",
|
"tree-sitter-wasms": "^0.1.11",
|
||||||
"web-tree-sitter": "^0.22.6"
|
"web-tree-sitter": "^0.22.6"
|
||||||
|
|||||||
@@ -311,10 +311,15 @@ export class ClaudeDev {
|
|||||||
|
|
||||||
private formatImagesIntoBlocks(images?: string[]): Anthropic.ImageBlockParam[] {
|
private formatImagesIntoBlocks(images?: string[]): Anthropic.ImageBlockParam[] {
|
||||||
return images
|
return images
|
||||||
? images.map((base64) => ({
|
? images.map((dataUrl) => {
|
||||||
|
// data:image/png;base64,base64string
|
||||||
|
const [rest, base64] = dataUrl.split(",")
|
||||||
|
const mimeType = rest.split(":")[1].split(";")[0]
|
||||||
|
return {
|
||||||
type: "image",
|
type: "image",
|
||||||
source: { type: "base64", media_type: "image/webp", data: base64 },
|
source: { type: "base64", media_type: mimeType, data: base64 },
|
||||||
}))
|
} as Anthropic.ImageBlockParam
|
||||||
|
})
|
||||||
: []
|
: []
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ export class OpenRouterHandler implements ApiHandler {
|
|||||||
if (part.type === "image") {
|
if (part.type === "image") {
|
||||||
return {
|
return {
|
||||||
type: "image_url",
|
type: "image_url",
|
||||||
image_url: { url: "data:image/webp;base64," + part.source.data },
|
image_url: { url: `data:${part.source.media_type};base64,${part.source.data}` },
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return { type: "text", text: part.text }
|
return { type: "text", text: part.text }
|
||||||
@@ -161,7 +161,7 @@ export class OpenRouterHandler implements ApiHandler {
|
|||||||
toolMessages.forEach((toolMessage) => {
|
toolMessages.forEach((toolMessage) => {
|
||||||
// The Anthropic SDK allows tool results to be a string or an array of text and image blocks, enabling rich and structured content. In contrast, the OpenAI SDK only supports tool results as a single string, so we map the Anthropic tool result parts into one concatenated string to maintain compatibility.
|
// The Anthropic SDK allows tool results to be a string or an array of text and image blocks, enabling rich and structured content. In contrast, the OpenAI SDK only supports tool results as a single string, so we map the Anthropic tool result parts into one concatenated string to maintain compatibility.
|
||||||
let content: string
|
let content: string
|
||||||
let images: string[] = []
|
let images: Anthropic.Messages.ImageBlockParam[] = []
|
||||||
if (typeof toolMessage.content === "string") {
|
if (typeof toolMessage.content === "string") {
|
||||||
content = toolMessage.content
|
content = toolMessage.content
|
||||||
} else {
|
} else {
|
||||||
@@ -169,7 +169,7 @@ export class OpenRouterHandler implements ApiHandler {
|
|||||||
toolMessage.content
|
toolMessage.content
|
||||||
?.map((part) => {
|
?.map((part) => {
|
||||||
if (part.type === "image") {
|
if (part.type === "image") {
|
||||||
images.push(part.source.data)
|
images.push(part)
|
||||||
return "(see following user message for image)"
|
return "(see following user message for image)"
|
||||||
}
|
}
|
||||||
return part.text
|
return part.text
|
||||||
@@ -185,9 +185,9 @@ export class OpenRouterHandler implements ApiHandler {
|
|||||||
if (images.length > 0) {
|
if (images.length > 0) {
|
||||||
openAiMessages.push({
|
openAiMessages.push({
|
||||||
role: "user",
|
role: "user",
|
||||||
content: images.map((image) => ({
|
content: images.map((part) => ({
|
||||||
type: "image_url",
|
type: "image_url",
|
||||||
image_url: { url: "data:image/webp;base64," + image },
|
image_url: { url: `data:${part.source.media_type};base64,${part.source.data}` },
|
||||||
})),
|
})),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,11 @@
|
|||||||
import { Anthropic } from "@anthropic-ai/sdk"
|
|
||||||
import os from "os"
|
|
||||||
import * as path from "path"
|
|
||||||
import * as vscode from "vscode"
|
import * as vscode from "vscode"
|
||||||
import { Uri, Webview } from "vscode"
|
import { Uri, Webview } from "vscode"
|
||||||
import { ClaudeDev } from "../ClaudeDev"
|
import { ClaudeDev } from "../ClaudeDev"
|
||||||
import { ApiProvider } from "../shared/api"
|
import { ApiProvider } from "../shared/api"
|
||||||
import { ExtensionMessage } from "../shared/ExtensionMessage"
|
import { ExtensionMessage } from "../shared/ExtensionMessage"
|
||||||
import { WebviewMessage } from "../shared/WebviewMessage"
|
import { WebviewMessage } from "../shared/WebviewMessage"
|
||||||
import { processPastedImages, selectAndProcessImages } from "../utils/process-images"
|
|
||||||
import { downloadTask } from "../utils/export-markdown"
|
import { downloadTask } from "../utils/export-markdown"
|
||||||
|
import { selectImages } from "../utils/process-images"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
https://github.com/microsoft/vscode-webview-ui-toolkit-samples/blob/main/default/weather-webview/src/providers/WeatherViewProvider.ts
|
https://github.com/microsoft/vscode-webview-ui-toolkit-samples/blob/main/default/weather-webview/src/providers/WeatherViewProvider.ts
|
||||||
@@ -301,16 +298,8 @@ export class ClaudeDevProvider implements vscode.WebviewViewProvider {
|
|||||||
downloadTask(this.claudeDev?.apiConversationHistory ?? [])
|
downloadTask(this.claudeDev?.apiConversationHistory ?? [])
|
||||||
break
|
break
|
||||||
case "selectImages":
|
case "selectImages":
|
||||||
const images = await selectAndProcessImages()
|
const images = await selectImages()
|
||||||
await this.postMessageToWebview({ type: "selectedImages", images })
|
await this.postMessageToWebview({ type: "selectedImages", images })
|
||||||
break
|
|
||||||
case "processPastedImages":
|
|
||||||
const pastedImages = message.images ?? []
|
|
||||||
if (pastedImages.length > 0) {
|
|
||||||
const processedImages = await processPastedImages(pastedImages)
|
|
||||||
await this.postMessageToWebview({ type: "selectedImages", images: processedImages })
|
|
||||||
}
|
|
||||||
|
|
||||||
break
|
break
|
||||||
// Add more switch case statements here as more webview message commands
|
// Add more switch case statements here as more webview message commands
|
||||||
// are created within the webview context (i.e. inside media/main.js)
|
// are created within the webview context (i.e. inside media/main.js)
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ export interface WebviewMessage {
|
|||||||
| "didShowAnnouncement"
|
| "didShowAnnouncement"
|
||||||
| "downloadTask"
|
| "downloadTask"
|
||||||
| "selectImages"
|
| "selectImages"
|
||||||
| "processPastedImages"
|
|
||||||
text?: string
|
text?: string
|
||||||
askResponse?: ClaudeAskResponse
|
askResponse?: ClaudeAskResponse
|
||||||
apiConfiguration?: ApiConfiguration
|
apiConfiguration?: ApiConfiguration
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import * as vscode from "vscode"
|
import * as vscode from "vscode"
|
||||||
import fs from "fs/promises"
|
import fs from "fs/promises"
|
||||||
import sharp from "sharp"
|
import * as path from "path"
|
||||||
|
|
||||||
export async function selectAndProcessImages(): Promise<string[]> {
|
export async function selectImages(): Promise<string[]> {
|
||||||
const options: vscode.OpenDialogOptions = {
|
const options: vscode.OpenDialogOptions = {
|
||||||
canSelectMany: true,
|
canSelectMany: true,
|
||||||
openLabel: "Select",
|
openLabel: "Select",
|
||||||
filters: {
|
filters: {
|
||||||
Images: ["png", "jpg", "jpeg", "gif", "webp", "tiff", "avif", "svg"], // sharp can convert these to webp which both anthropic and openrouter support
|
Images: ["png", "jpg", "jpeg", "webp"], // supported by anthropic and openrouter
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -20,45 +20,26 @@ export async function selectAndProcessImages(): Promise<string[]> {
|
|||||||
return await Promise.all(
|
return await Promise.all(
|
||||||
fileUris.map(async (uri) => {
|
fileUris.map(async (uri) => {
|
||||||
const imagePath = uri.fsPath
|
const imagePath = uri.fsPath
|
||||||
const originalBuffer = await fs.readFile(imagePath)
|
const buffer = await fs.readFile(imagePath)
|
||||||
return convertToWebpBase64(originalBuffer)
|
const base64 = buffer.toString("base64")
|
||||||
|
const mimeType = getMimeType(imagePath)
|
||||||
|
const dataUrl = `data:${mimeType};base64,${base64}`
|
||||||
|
return dataUrl
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function processPastedImages(base64Strings: string[]): Promise<string[]> {
|
function getMimeType(filePath: string): string {
|
||||||
return await Promise.all(
|
const ext = path.extname(filePath).toLowerCase()
|
||||||
base64Strings.map(async (base64) => {
|
switch (ext) {
|
||||||
const buffer = Buffer.from(base64, "base64")
|
case ".png":
|
||||||
return convertToWebpBase64(buffer)
|
return "image/png"
|
||||||
})
|
case ".jpeg":
|
||||||
)
|
case ".jpg":
|
||||||
}
|
return "image/jpeg"
|
||||||
|
case ".webp":
|
||||||
async function convertToWebpBase64(buffer: Buffer): Promise<string> {
|
return "image/webp"
|
||||||
const processedBuffer = await sharp(buffer)
|
default:
|
||||||
/*
|
throw new Error(`Unsupported file type: ${ext}`)
|
||||||
Anthropic docs recommendations:
|
}
|
||||||
- To improve time-to-first-token resize images to no more than 1.15 megapixels (and within 1568 pixels in both dimensions)
|
|
||||||
- WebP is a newer image format that's more efficient than PNG and JPEG, so ideal for keeping token usage low. (ive seen the following compression decrease size by 10x)
|
|
||||||
*/
|
|
||||||
.resize(1568, 1568, {
|
|
||||||
fit: "inside", // maintain aspect ratio
|
|
||||||
withoutEnlargement: true, // don't enlarge smaller images
|
|
||||||
})
|
|
||||||
.webp({
|
|
||||||
// NOTE: consider increasing effort from 4 to 6 (max), this may increase processing time by up to ~500ms
|
|
||||||
quality: 80,
|
|
||||||
})
|
|
||||||
.toBuffer()
|
|
||||||
|
|
||||||
const base64 = processedBuffer.toString("base64")
|
|
||||||
|
|
||||||
// console.log({
|
|
||||||
// originalSize: buffer.length,
|
|
||||||
// processedSize: processedBuffer.length,
|
|
||||||
// base64,
|
|
||||||
// })
|
|
||||||
|
|
||||||
return base64
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -271,7 +271,7 @@ const ChatView = ({ messages, isHidden, vscodeThemeName, showAnnouncement, hideA
|
|||||||
|
|
||||||
const handlePaste = async (e: React.ClipboardEvent) => {
|
const handlePaste = async (e: React.ClipboardEvent) => {
|
||||||
const items = e.clipboardData.items
|
const items = e.clipboardData.items
|
||||||
const acceptedTypes = ["png", "jpg", "jpeg", "gif", "webp", "tiff", "avif", "svg"]
|
const acceptedTypes = ["png", "jpeg", "webp"] // supported by anthropic and openrouter (jpg is just a file extension but the image will be recognized as jpeg)
|
||||||
const imageItems = Array.from(items).filter((item) => {
|
const imageItems = Array.from(items).filter((item) => {
|
||||||
const [type, subtype] = item.type.split("/")
|
const [type, subtype] = item.type.split("/")
|
||||||
return type === "image" && acceptedTypes.includes(subtype)
|
return type === "image" && acceptedTypes.includes(subtype)
|
||||||
@@ -299,15 +299,10 @@ const ChatView = ({ messages, isHidden, vscodeThemeName, showAnnouncement, hideA
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
const imageDataArray = await Promise.all(imagePromises)
|
const imageDataArray = await Promise.all(imagePromises)
|
||||||
const base64Strings = imageDataArray
|
const dataUrls = imageDataArray.filter((dataUrl): dataUrl is string => dataUrl !== null)
|
||||||
.filter((dataUrl): dataUrl is string => dataUrl !== null)
|
//.map((dataUrl) => dataUrl.split(",")[1]) // strip the mime type prefix, sharp doesn't need it
|
||||||
.map((dataUrl) => dataUrl.split(",")[1]) // strip the mime type prefix, sharp doesn't need it
|
if (dataUrls.length > 0) {
|
||||||
if (base64Strings.length > 0) {
|
setSelectedImages((prevImages) => [...prevImages, ...dataUrls].slice(0, MAX_IMAGES_PER_MESSAGE))
|
||||||
// Send base64 encoded image data to the extension
|
|
||||||
vscode.postMessage({
|
|
||||||
type: "processPastedImages",
|
|
||||||
images: base64Strings,
|
|
||||||
})
|
|
||||||
} else {
|
} else {
|
||||||
console.warn("No valid images were processed")
|
console.warn("No valid images were processed")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ const Thumbnails: React.FC<ThumbnailsProps> = ({ images, style, setImages, onHei
|
|||||||
onMouseEnter={() => setHoveredIndex(index)}
|
onMouseEnter={() => setHoveredIndex(index)}
|
||||||
onMouseLeave={() => setHoveredIndex(null)}>
|
onMouseLeave={() => setHoveredIndex(null)}>
|
||||||
<img
|
<img
|
||||||
src={`data:image/webp;base64,${image}`}
|
src={image}
|
||||||
alt={`Thumbnail ${index + 1}`}
|
alt={`Thumbnail ${index + 1}`}
|
||||||
style={{
|
style={{
|
||||||
width: 34,
|
width: 34,
|
||||||
|
|||||||
Reference in New Issue
Block a user