diff --git a/package.json b/package.json index 8d2946e..4cd4b21 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@kevisual/ai", - "version": "0.0.11", + "version": "0.0.12", "description": "AI Center Services", "main": "index.js", "basename": "/root/ai-center-services", @@ -28,7 +28,7 @@ ], "author": "abearxiong (https://www.xiongxiao.me)", "license": "MIT", - "packageManager": "pnpm@10.19.0", + "packageManager": "pnpm@10.23.0", "type": "module", "publishConfig": { "registry": "https://registry.npmjs.org/", @@ -56,34 +56,34 @@ "devDependencies": { "@kevisual/code-center-module": "0.0.24", "@kevisual/mark": "0.0.7", - "@kevisual/router": "0.0.30", + "@kevisual/router": "0.0.33", "@kevisual/types": "^0.0.10", "@kevisual/use-config": "^1.0.19", - "@types/bun": "^1.3.0", + "@types/bun": "^1.3.3", "@types/crypto-js": "^4.2.2", "@types/formidable": "^3.4.6", "@types/lodash-es": "^4.17.12", - "@types/node": "^24.9.1", + "@types/node": "^24.10.1", "@vitejs/plugin-basic-ssl": "^2.1.0", "cookie": "^1.0.2", "cross-env": "^10.1.0", "crypto-js": "^4.2.0", - "dayjs": "^1.11.18", + "dayjs": "^1.11.19", "dotenv": "^17.2.3", "formidable": "^3.5.4", "ioredis": "^5.8.2", "json5": "^2.2.3", "lodash-es": "^4.17.21", - "openai": "6.6.0", + "openai": "6.9.1", "pm2": "^6.0.13", - "rimraf": "^6.0.1", - "rollup": "^4.52.5", + "rimraf": "^6.1.2", + "rollup": "^4.53.3", "rollup-plugin-dts": "^6.2.3", "sequelize": "^6.37.7", "tape": "^5.9.0", "tiktoken": "^1.0.22", "typescript": "^5.9.3", - "vite": "^7.1.12" + "vite": "^7.2.4" }, "dependencies": { "@kevisual/logger": "^0.0.4" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2e51d5b..ad941cd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -19,8 +19,8 @@ importers: specifier: 0.0.7 version: 0.0.7(dotenv@17.2.3)(esbuild@0.25.8) '@kevisual/router': - specifier: 0.0.30 - version: 0.0.30 + specifier: 0.0.33 + version: 0.0.33 '@kevisual/types': specifier: ^0.0.10 version: 0.0.10 @@ -28,8 +28,8 @@ importers: specifier: ^1.0.19 version: 1.0.19(dotenv@17.2.3) '@types/bun': - specifier: ^1.3.0 - version: 1.3.0(@types/react@19.1.9) + specifier: ^1.3.3 + version: 1.3.3 '@types/crypto-js': specifier: ^4.2.2 version: 4.2.2 @@ -40,11 +40,11 @@ importers: specifier: ^4.17.12 version: 4.17.12 '@types/node': - specifier: ^24.9.1 - version: 24.9.1 + specifier: ^24.10.1 + version: 24.10.1 '@vitejs/plugin-basic-ssl': specifier: ^2.1.0 - version: 2.1.0(vite@7.1.12(@types/node@24.9.1)) + version: 2.1.0(vite@7.2.4(@types/node@24.10.1)) cookie: specifier: ^1.0.2 version: 1.0.2 @@ -55,8 +55,8 @@ importers: specifier: ^4.2.0 version: 4.2.0 dayjs: - specifier: ^1.11.18 - version: 1.11.18 + specifier: ^1.11.19 + version: 1.11.19 dotenv: specifier: ^17.2.3 version: 17.2.3 @@ -73,20 +73,20 @@ importers: specifier: ^4.17.21 version: 4.17.21 openai: - specifier: 6.6.0 - version: 6.6.0(ws@8.18.3)(zod@3.25.76) + specifier: 6.9.1 + version: 6.9.1(ws@8.18.3)(zod@3.25.76) pm2: specifier: ^6.0.13 version: 6.0.13 rimraf: - specifier: ^6.0.1 - version: 6.0.1 + specifier: ^6.1.2 + version: 6.1.2 rollup: - specifier: ^4.52.5 - version: 4.52.5 + specifier: ^4.53.3 + version: 4.53.3 rollup-plugin-dts: specifier: ^6.2.3 - version: 6.2.3(rollup@4.52.5)(typescript@5.9.3) + version: 6.2.3(rollup@4.53.3)(typescript@5.9.3) sequelize: specifier: ^6.37.7 version: 6.37.7(pg@8.16.3) @@ -100,8 +100,8 @@ importers: specifier: ^5.9.3 version: 5.9.3 vite: - specifier: ^7.1.12 - version: 7.1.12(@types/node@24.9.1) + specifier: ^7.2.4 + version: 7.2.4(@types/node@24.10.1) packages: @@ -312,8 +312,8 @@ packages: '@kevisual/router@0.0.23': resolution: {integrity: sha512-W6ehlhAzNe58vq4QeQt2XFoO84Qaw34A0PVOByJsJ2ICj4YKBTclAt+rOAoISCvUeSbeNOIuhUE3sLyPfplzUw==} - '@kevisual/router@0.0.30': - resolution: {integrity: sha512-/mBo7aZFWjT4QfHkI5HPXfdgSwZzt3mAVei7dcNSBTPe9KQSoYKZ8BTq9VTUj3XE0sI6o1bZjlLYvinpVnZilw==} + '@kevisual/router@0.0.33': + resolution: {integrity: sha512-9z7TkSzCIGbXn9SuHPBdZpGwHlAuwA8iN5jNAZBUvbEvBRkBxlrbdCSe9fBYiAHueLm2AceFNrW74uulOiAkqA==} '@kevisual/router@0.0.7': resolution: {integrity: sha512-4n1Tp4YLoraJv7jtfy7jbuLGyAj0B2QkTlnlEDHCUTlEUOvOkjtf7DHAe2SL92fTgXhSbod0I/0vUcDF85oj/w==} @@ -439,124 +439,124 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.52.5': - resolution: {integrity: sha512-8c1vW4ocv3UOMp9K+gToY5zL2XiiVw3k7f1ksf4yO1FlDFQ1C2u72iACFnSOceJFsWskc2WZNqeRhFRPzv+wtQ==} + '@rollup/rollup-android-arm-eabi@4.53.3': + resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.52.5': - resolution: {integrity: sha512-mQGfsIEFcu21mvqkEKKu2dYmtuSZOBMmAl5CFlPGLY94Vlcm+zWApK7F/eocsNzp8tKmbeBP8yXyAbx0XHsFNA==} + '@rollup/rollup-android-arm64@4.53.3': + resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.52.5': - resolution: {integrity: sha512-takF3CR71mCAGA+v794QUZ0b6ZSrgJkArC+gUiG6LB6TQty9T0Mqh3m2ImRBOxS2IeYBo4lKWIieSvnEk2OQWA==} + '@rollup/rollup-darwin-arm64@4.53.3': + resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.52.5': - resolution: {integrity: sha512-W901Pla8Ya95WpxDn//VF9K9u2JbocwV/v75TE0YIHNTbhqUTv9w4VuQ9MaWlNOkkEfFwkdNhXgcLqPSmHy0fA==} + '@rollup/rollup-darwin-x64@4.53.3': + resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.52.5': - resolution: {integrity: sha512-QofO7i7JycsYOWxe0GFqhLmF6l1TqBswJMvICnRUjqCx8b47MTo46W8AoeQwiokAx3zVryVnxtBMcGcnX12LvA==} + '@rollup/rollup-freebsd-arm64@4.53.3': + resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.52.5': - resolution: {integrity: sha512-jr21b/99ew8ujZubPo9skbrItHEIE50WdV86cdSoRkKtmWa+DDr6fu2c/xyRT0F/WazZpam6kk7IHBerSL7LDQ==} + '@rollup/rollup-freebsd-x64@4.53.3': + resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': - resolution: {integrity: sha512-PsNAbcyv9CcecAUagQefwX8fQn9LQ4nZkpDboBOttmyffnInRy8R8dSg6hxxl2Re5QhHBf6FYIDhIj5v982ATQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': + resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.52.5': - resolution: {integrity: sha512-Fw4tysRutyQc/wwkmcyoqFtJhh0u31K+Q6jYjeicsGJJ7bbEq8LwPWV/w0cnzOqR2m694/Af6hpFayLJZkG2VQ==} + '@rollup/rollup-linux-arm-musleabihf@4.53.3': + resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.52.5': - resolution: {integrity: sha512-a+3wVnAYdQClOTlyapKmyI6BLPAFYs0JM8HRpgYZQO02rMR09ZcV9LbQB+NL6sljzG38869YqThrRnfPMCDtZg==} + '@rollup/rollup-linux-arm64-gnu@4.53.3': + resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.52.5': - resolution: {integrity: sha512-AvttBOMwO9Pcuuf7m9PkC1PUIKsfaAJ4AYhy944qeTJgQOqJYJ9oVl2nYgY7Rk0mkbsuOpCAYSs6wLYB2Xiw0Q==} + '@rollup/rollup-linux-arm64-musl@4.53.3': + resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.52.5': - resolution: {integrity: sha512-DkDk8pmXQV2wVrF6oq5tONK6UHLz/XcEVow4JTTerdeV1uqPeHxwcg7aFsfnSm9L+OO8WJsWotKM2JJPMWrQtA==} + '@rollup/rollup-linux-loong64-gnu@4.53.3': + resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.52.5': - resolution: {integrity: sha512-W/b9ZN/U9+hPQVvlGwjzi+Wy4xdoH2I8EjaCkMvzpI7wJUs8sWJ03Rq96jRnHkSrcHTpQe8h5Tg3ZzUPGauvAw==} + '@rollup/rollup-linux-ppc64-gnu@4.53.3': + resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.52.5': - resolution: {integrity: sha512-sjQLr9BW7R/ZiXnQiWPkErNfLMkkWIoCz7YMn27HldKsADEKa5WYdobaa1hmN6slu9oWQbB6/jFpJ+P2IkVrmw==} + '@rollup/rollup-linux-riscv64-gnu@4.53.3': + resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.52.5': - resolution: {integrity: sha512-hq3jU/kGyjXWTvAh2awn8oHroCbrPm8JqM7RUpKjalIRWWXE01CQOf/tUNWNHjmbMHg/hmNCwc/Pz3k1T/j/Lg==} + '@rollup/rollup-linux-riscv64-musl@4.53.3': + resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.52.5': - resolution: {integrity: sha512-gn8kHOrku8D4NGHMK1Y7NA7INQTRdVOntt1OCYypZPRt6skGbddska44K8iocdpxHTMMNui5oH4elPH4QOLrFQ==} + '@rollup/rollup-linux-s390x-gnu@4.53.3': + resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.52.5': - resolution: {integrity: sha512-hXGLYpdhiNElzN770+H2nlx+jRog8TyynpTVzdlc6bndktjKWyZyiCsuDAlpd+j+W+WNqfcyAWz9HxxIGfZm1Q==} + '@rollup/rollup-linux-x64-gnu@4.53.3': + resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.52.5': - resolution: {integrity: sha512-arCGIcuNKjBoKAXD+y7XomR9gY6Mw7HnFBv5Rw7wQRvwYLR7gBAgV7Mb2QTyjXfTveBNFAtPt46/36vV9STLNg==} + '@rollup/rollup-linux-x64-musl@4.53.3': + resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openharmony-arm64@4.52.5': - resolution: {integrity: sha512-QoFqB6+/9Rly/RiPjaomPLmR/13cgkIGfA40LHly9zcH1S0bN2HVFYk3a1eAyHQyjs3ZJYlXvIGtcCs5tko9Cw==} + '@rollup/rollup-openharmony-arm64@4.53.3': + resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.52.5': - resolution: {integrity: sha512-w0cDWVR6MlTstla1cIfOGyl8+qb93FlAVutcor14Gf5Md5ap5ySfQ7R9S/NjNaMLSFdUnKGEasmVnu3lCMqB7w==} + '@rollup/rollup-win32-arm64-msvc@4.53.3': + resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.52.5': - resolution: {integrity: sha512-Aufdpzp7DpOTULJCuvzqcItSGDH73pF3ko/f+ckJhxQyHtp67rHw3HMNxoIdDMUITJESNE6a8uh4Lo4SLouOUg==} + '@rollup/rollup-win32-ia32-msvc@4.53.3': + resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.52.5': - resolution: {integrity: sha512-UGBUGPFp1vkj6p8wCRraqNhqwX/4kNQPS57BCFc8wYh0g94iVIW33wJtQAx3G7vrjjNtRaxiMUylM0ktp/TRSQ==} + '@rollup/rollup-win32-x64-gnu@4.53.3': + resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.52.5': - resolution: {integrity: sha512-TAcgQh2sSkykPRWLrdyy2AiceMckNf5loITqXxFI5VuQjS5tSuw3WlwdN8qv8vzjLAUTvYaH/mVjSFpbkFbpTg==} + '@rollup/rollup-win32-x64-msvc@4.53.3': + resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} cpu: [x64] os: [win32] @@ -566,8 +566,8 @@ packages: '@tootallnate/quickjs-emscripten@0.23.0': resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} - '@types/bun@1.3.0': - resolution: {integrity: sha512-+lAGCYjXjip2qY375xX/scJeVRmZ5cY0wyHYyCYxNcdEXrQ4AOe3gACgd4iQ8ksOslJtW4VNxBJ8llUwc3a6AA==} + '@types/bun@1.3.3': + resolution: {integrity: sha512-ogrKbJ2X5N0kWLLFKeytG0eHDleBYtngtlbu9cyBKFtNL3cnpDZkNdQj8flVf6WTZUX5ulI9AY1oa7ljhSrp+g==} '@types/cors@2.8.19': resolution: {integrity: sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg==} @@ -609,11 +609,8 @@ packages: '@types/node@22.17.0': resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==} - '@types/node@24.9.1': - resolution: {integrity: sha512-QoiaXANRkSXK6p0Duvt56W208du4P9Uye9hWLWgGMDTEoKPhuenzNcC4vGUmrNkiOKTlIrBoyNQYNpSwfEZXSg==} - - '@types/react@19.1.9': - resolution: {integrity: sha512-WmdoynAX8Stew/36uTSVMcLJJ1KRh6L3IZRx1PZ7qJtBqT3dYTgyDTx8H1qoRghErydW7xw9mSJ3wS//tCRpFA==} + '@types/node@24.10.1': + resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -737,10 +734,8 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bun-types@1.3.0: - resolution: {integrity: sha512-u8X0thhx+yJ0KmkxuEo9HAtdfgCBaM/aI9K90VQcQioAmkVp3SG3FkwWGibUFz3WdXAdcsqOcbU40lK7tbHdkQ==} - peerDependencies: - '@types/react': ^19 + bun-types@1.3.3: + resolution: {integrity: sha512-z3Xwlg7j2l9JY27x5Qn3Wlyos8YAp0kKRlrePAOjgjMGS5IG6E7Jnlx736vH9UVI4wUICwwhC9anYL++XeOgTQ==} call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} @@ -827,9 +822,6 @@ packages: crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - culvert@0.1.2: resolution: {integrity: sha512-yi1x3EAWKjQTreYWeSd98431AV+IEE0qoDyOoaHJ7KJ21gv6HtBXHVLX74opVSGqcR8/AbjJBHAHpcOy2bj5Gg==} @@ -852,8 +844,8 @@ packages: dayjs@1.11.15: resolution: {integrity: sha512-MC+DfnSWiM9APs7fpiurHGCoeIx0Gdl6QZBy+5lu8MbYKN5FZEXqOgrundfibdfhGZ15o9hzmZ2xJjZnbvgKXQ==} - dayjs@1.11.18: - resolution: {integrity: sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==} + dayjs@1.11.19: + resolution: {integrity: sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==} dayjs@1.8.36: resolution: {integrity: sha512-3VmRXEtw7RZKAf+4Tv1Ym9AGeo8r8+CjDi26x+7SYQil1UqtqdaokhzoEJohqlzt0m5kacJSDhJQkG/LWhpRBw==} @@ -1180,6 +1172,10 @@ packages: engines: {node: 20 || >=22} hasBin: true + glob@13.0.0: + resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==} + engines: {node: 20 || >=22} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported @@ -1494,6 +1490,10 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} + minimatch@10.1.1: + resolution: {integrity: sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==} + engines: {node: 20 || >=22} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -1586,8 +1586,8 @@ packages: once@1.4.0: resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - openai@6.6.0: - resolution: {integrity: sha512-1yWk4cBsHF5Bq9TreHYOHY7pbqdlT74COnm8vPx7WKn36StS+Hyk8DdAitnLaw67a5Cudkz5EmlFQjSrNnrA2w==} + openai@6.9.1: + resolution: {integrity: sha512-vQ5Rlt0ZgB3/BNmTa7bIijYFhz3YBceAA3Z4JuoMSBftBF9YqFHIEhZakSs+O/Ad7EaoEimZvHxD5ylRjN11Lg==} hasBin: true peerDependencies: ws: ^8.18.0 @@ -1809,8 +1809,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rimraf@6.0.1: - resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + rimraf@6.1.2: + resolution: {integrity: sha512-cFCkPslJv7BAXJsYlK1dZsbP8/ZNLkCAQ0bi1hf5EKX2QHegmDFEFA6QhuYJlk7UDdc+02JjO80YSOrWPpw06g==} engines: {node: 20 || >=22} hasBin: true @@ -1839,8 +1839,8 @@ packages: rollup-pluginutils@2.8.2: resolution: {integrity: sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==} - rollup@4.52.5: - resolution: {integrity: sha512-3GuObel8h7Kqdjt0gxkEzaifHTqLVW56Y/bjN7PSQtkKr0w3V/QYSdt6QWYtd7A1xUtYQigtdUfgj1RvWVtorw==} + rollup@4.53.3: + resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -1875,8 +1875,8 @@ packages: resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} engines: {node: '>=10'} - selfsigned@3.0.1: - resolution: {integrity: sha512-6U6w6kSLrM9Zxo0D7mC7QdGS6ZZytMWBnj/vhF9p+dAHx6CwGezuRcO4VclTbrrI7mg7SD6zNiqXUuBHOVopNQ==} + selfsigned@4.0.0: + resolution: {integrity: sha512-eP/1BEUCziBF/7p96ergE2JlGOMsGj9kIe77pD99G3ValgxDFwHA2oNCYW4rjlmYp8LXc684ypH0836GjSKw0A==} engines: {node: '>=10'} semver@7.5.4: @@ -2174,8 +2174,8 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite@7.1.12: - resolution: {integrity: sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==} + vite@7.2.4: + resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2472,20 +2472,20 @@ snapshots: '@kevisual/rollup-tools@0.0.1(esbuild@0.25.8)': dependencies: - '@rollup/plugin-alias': 5.1.1(rollup@4.52.5) - '@rollup/plugin-commonjs': 28.0.6(rollup@4.52.5) - '@rollup/plugin-json': 6.1.0(rollup@4.52.5) - '@rollup/plugin-node-resolve': 15.3.1(rollup@4.52.5) - '@rollup/plugin-replace': 6.0.2(rollup@4.52.5) - '@rollup/plugin-typescript': 12.1.4(rollup@4.52.5)(tslib@2.8.1)(typescript@5.9.3) + '@rollup/plugin-alias': 5.1.1(rollup@4.53.3) + '@rollup/plugin-commonjs': 28.0.6(rollup@4.53.3) + '@rollup/plugin-json': 6.1.0(rollup@4.53.3) + '@rollup/plugin-node-resolve': 15.3.1(rollup@4.53.3) + '@rollup/plugin-replace': 6.0.2(rollup@4.53.3) + '@rollup/plugin-typescript': 12.1.4(rollup@4.53.3)(tslib@2.8.1)(typescript@5.9.3) '@types/node': 22.17.0 chalk: 5.5.0 commander: 12.1.0 glob: 11.0.3 - rollup: 4.52.5 + rollup: 4.53.3 rollup-plugin-copy: 3.5.0 - rollup-plugin-dts: 6.2.3(rollup@4.52.5)(typescript@5.9.3) - rollup-plugin-esbuild: 6.2.1(esbuild@0.25.8)(rollup@4.52.5) + rollup-plugin-dts: 6.2.3(rollup@4.53.3)(typescript@5.9.3) + rollup-plugin-esbuild: 6.2.1(esbuild@0.25.8)(rollup@4.53.3) rollup-plugin-inject: 3.0.2 tslib: 2.8.1 typescript: 5.9.3 @@ -2501,10 +2501,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@kevisual/router@0.0.30': + '@kevisual/router@0.0.33': dependencies: path-to-regexp: 8.3.0 - selfsigned: 3.0.1 + selfsigned: 4.0.0 send: 1.2.0 transitivePeerDependencies: - supports-color @@ -2604,13 +2604,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@rollup/plugin-alias@5.1.1(rollup@4.52.5)': + '@rollup/plugin-alias@5.1.1(rollup@4.53.3)': optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-commonjs@28.0.6(rollup@4.52.5)': + '@rollup/plugin-commonjs@28.0.6(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.4.6(picomatch@4.0.3) @@ -2618,127 +2618,125 @@ snapshots: magic-string: 0.30.17 picomatch: 4.0.3 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-json@6.1.0(rollup@4.52.5)': + '@rollup/plugin-json@6.1.0(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-node-resolve@15.3.1(rollup@4.52.5)': + '@rollup/plugin-node-resolve@15.3.1(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-replace@6.0.2(rollup@4.52.5)': + '@rollup/plugin-replace@6.0.2(rollup@4.53.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) magic-string: 0.30.17 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/plugin-typescript@12.1.4(rollup@4.52.5)(tslib@2.8.1)(typescript@5.9.3)': + '@rollup/plugin-typescript@12.1.4(rollup@4.53.3)(tslib@2.8.1)(typescript@5.9.3)': dependencies: - '@rollup/pluginutils': 5.2.0(rollup@4.52.5) + '@rollup/pluginutils': 5.2.0(rollup@4.53.3) resolve: 1.22.10 typescript: 5.9.3 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 tslib: 2.8.1 - '@rollup/pluginutils@5.2.0(rollup@4.52.5)': + '@rollup/pluginutils@5.2.0(rollup@4.53.3)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.52.5 + rollup: 4.53.3 - '@rollup/rollup-android-arm-eabi@4.52.5': + '@rollup/rollup-android-arm-eabi@4.53.3': optional: true - '@rollup/rollup-android-arm64@4.52.5': + '@rollup/rollup-android-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-arm64@4.52.5': + '@rollup/rollup-darwin-arm64@4.53.3': optional: true - '@rollup/rollup-darwin-x64@4.52.5': + '@rollup/rollup-darwin-x64@4.53.3': optional: true - '@rollup/rollup-freebsd-arm64@4.52.5': + '@rollup/rollup-freebsd-arm64@4.53.3': optional: true - '@rollup/rollup-freebsd-x64@4.52.5': + '@rollup/rollup-freebsd-x64@4.53.3': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.52.5': + '@rollup/rollup-linux-arm-gnueabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.52.5': + '@rollup/rollup-linux-arm-musleabihf@4.53.3': optional: true - '@rollup/rollup-linux-arm64-gnu@4.52.5': + '@rollup/rollup-linux-arm64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-arm64-musl@4.52.5': + '@rollup/rollup-linux-arm64-musl@4.53.3': optional: true - '@rollup/rollup-linux-loong64-gnu@4.52.5': + '@rollup/rollup-linux-loong64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.52.5': + '@rollup/rollup-linux-ppc64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.52.5': + '@rollup/rollup-linux-riscv64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-riscv64-musl@4.52.5': + '@rollup/rollup-linux-riscv64-musl@4.53.3': optional: true - '@rollup/rollup-linux-s390x-gnu@4.52.5': + '@rollup/rollup-linux-s390x-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-gnu@4.52.5': + '@rollup/rollup-linux-x64-gnu@4.53.3': optional: true - '@rollup/rollup-linux-x64-musl@4.52.5': + '@rollup/rollup-linux-x64-musl@4.53.3': optional: true - '@rollup/rollup-openharmony-arm64@4.52.5': + '@rollup/rollup-openharmony-arm64@4.53.3': optional: true - '@rollup/rollup-win32-arm64-msvc@4.52.5': + '@rollup/rollup-win32-arm64-msvc@4.53.3': optional: true - '@rollup/rollup-win32-ia32-msvc@4.52.5': + '@rollup/rollup-win32-ia32-msvc@4.53.3': optional: true - '@rollup/rollup-win32-x64-gnu@4.52.5': + '@rollup/rollup-win32-x64-gnu@4.53.3': optional: true - '@rollup/rollup-win32-x64-msvc@4.52.5': + '@rollup/rollup-win32-x64-msvc@4.53.3': optional: true '@socket.io/component-emitter@3.1.2': {} '@tootallnate/quickjs-emscripten@0.23.0': {} - '@types/bun@1.3.0(@types/react@19.1.9)': + '@types/bun@1.3.3': dependencies: - bun-types: 1.3.0(@types/react@19.1.9) - transitivePeerDependencies: - - '@types/react' + bun-types: 1.3.3 '@types/cors@2.8.19': dependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.1 '@types/crypto-js@4.2.2': {} @@ -2750,16 +2748,16 @@ snapshots: '@types/formidable@3.4.6': dependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.1 '@types/fs-extra@8.1.5': dependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.1 '@types/glob@7.2.0': dependencies: '@types/minimatch': 6.0.0 - '@types/node': 24.9.1 + '@types/node': 24.10.1 '@types/lodash-es@4.17.12': dependencies: @@ -2775,27 +2773,23 @@ snapshots: '@types/node-forge@1.3.13': dependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.1 '@types/node@22.17.0': dependencies: undici-types: 6.21.0 - '@types/node@24.9.1': + '@types/node@24.10.1': dependencies: undici-types: 7.16.0 - '@types/react@19.1.9': - dependencies: - csstype: 3.1.3 - '@types/resolve@1.20.2': {} '@types/validator@13.15.2': {} - '@vitejs/plugin-basic-ssl@2.1.0(vite@7.1.12(@types/node@24.9.1))': + '@vitejs/plugin-basic-ssl@2.1.0(vite@7.2.4(@types/node@24.10.1))': dependencies: - vite: 7.1.12(@types/node@24.9.1) + vite: 7.2.4(@types/node@24.10.1) accepts@1.3.8: dependencies: @@ -2895,10 +2889,9 @@ snapshots: buffer-from@1.1.2: {} - bun-types@1.3.0(@types/react@19.1.9): + bun-types@1.3.3: dependencies: - '@types/node': 24.9.1 - '@types/react': 19.1.9 + '@types/node': 24.10.1 call-bind-apply-helpers@1.0.2: dependencies: @@ -2984,8 +2977,6 @@ snapshots: crypto-js@4.2.0: {} - csstype@3.1.3: {} - culvert@0.1.2: {} data-uri-to-buffer@6.0.2: {} @@ -3010,7 +3001,7 @@ snapshots: dayjs@1.11.15: {} - dayjs@1.11.18: {} + dayjs@1.11.19: {} dayjs@1.8.36: {} @@ -3115,7 +3106,7 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.19 - '@types/node': 24.9.1 + '@types/node': 24.10.1 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 @@ -3419,6 +3410,12 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 2.0.0 + glob@13.0.0: + dependencies: + minimatch: 10.1.1 + minipass: 7.1.2 + path-scurry: 2.0.0 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -3748,6 +3745,10 @@ snapshots: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@10.1.1: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + minimatch@3.1.2: dependencies: brace-expansion: 1.1.12 @@ -3828,7 +3829,7 @@ snapshots: dependencies: wrappy: 1.0.2 - openai@6.6.0(ws@8.18.3)(zod@3.25.76): + openai@6.9.1(ws@8.18.3)(zod@3.25.76): optionalDependencies: ws: 8.18.3 zod: 3.25.76 @@ -4104,9 +4105,9 @@ snapshots: reusify@1.1.0: {} - rimraf@6.0.1: + rimraf@6.1.2: dependencies: - glob: 11.0.3 + glob: 13.0.0 package-json-from-dist: 1.0.1 rollup-plugin-copy@3.5.0: @@ -4117,21 +4118,21 @@ snapshots: globby: 10.0.1 is-plain-object: 3.0.1 - rollup-plugin-dts@6.2.3(rollup@4.52.5)(typescript@5.9.3): + rollup-plugin-dts@6.2.3(rollup@4.53.3)(typescript@5.9.3): dependencies: magic-string: 0.30.17 - rollup: 4.52.5 + rollup: 4.53.3 typescript: 5.9.3 optionalDependencies: '@babel/code-frame': 7.27.1 - rollup-plugin-esbuild@6.2.1(esbuild@0.25.8)(rollup@4.52.5): + rollup-plugin-esbuild@6.2.1(esbuild@0.25.8)(rollup@4.53.3): dependencies: debug: 4.4.1 es-module-lexer: 1.7.0 esbuild: 0.25.8 get-tsconfig: 4.10.1 - rollup: 4.52.5 + rollup: 4.53.3 unplugin-utils: 0.2.5 transitivePeerDependencies: - supports-color @@ -4146,32 +4147,32 @@ snapshots: dependencies: estree-walker: 0.6.1 - rollup@4.52.5: + rollup@4.53.3: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.52.5 - '@rollup/rollup-android-arm64': 4.52.5 - '@rollup/rollup-darwin-arm64': 4.52.5 - '@rollup/rollup-darwin-x64': 4.52.5 - '@rollup/rollup-freebsd-arm64': 4.52.5 - '@rollup/rollup-freebsd-x64': 4.52.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.52.5 - '@rollup/rollup-linux-arm-musleabihf': 4.52.5 - '@rollup/rollup-linux-arm64-gnu': 4.52.5 - '@rollup/rollup-linux-arm64-musl': 4.52.5 - '@rollup/rollup-linux-loong64-gnu': 4.52.5 - '@rollup/rollup-linux-ppc64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-gnu': 4.52.5 - '@rollup/rollup-linux-riscv64-musl': 4.52.5 - '@rollup/rollup-linux-s390x-gnu': 4.52.5 - '@rollup/rollup-linux-x64-gnu': 4.52.5 - '@rollup/rollup-linux-x64-musl': 4.52.5 - '@rollup/rollup-openharmony-arm64': 4.52.5 - '@rollup/rollup-win32-arm64-msvc': 4.52.5 - '@rollup/rollup-win32-ia32-msvc': 4.52.5 - '@rollup/rollup-win32-x64-gnu': 4.52.5 - '@rollup/rollup-win32-x64-msvc': 4.52.5 + '@rollup/rollup-android-arm-eabi': 4.53.3 + '@rollup/rollup-android-arm64': 4.53.3 + '@rollup/rollup-darwin-arm64': 4.53.3 + '@rollup/rollup-darwin-x64': 4.53.3 + '@rollup/rollup-freebsd-arm64': 4.53.3 + '@rollup/rollup-freebsd-x64': 4.53.3 + '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 + '@rollup/rollup-linux-arm-musleabihf': 4.53.3 + '@rollup/rollup-linux-arm64-gnu': 4.53.3 + '@rollup/rollup-linux-arm64-musl': 4.53.3 + '@rollup/rollup-linux-loong64-gnu': 4.53.3 + '@rollup/rollup-linux-ppc64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-gnu': 4.53.3 + '@rollup/rollup-linux-riscv64-musl': 4.53.3 + '@rollup/rollup-linux-s390x-gnu': 4.53.3 + '@rollup/rollup-linux-x64-gnu': 4.53.3 + '@rollup/rollup-linux-x64-musl': 4.53.3 + '@rollup/rollup-openharmony-arm64': 4.53.3 + '@rollup/rollup-win32-arm64-msvc': 4.53.3 + '@rollup/rollup-win32-ia32-msvc': 4.53.3 + '@rollup/rollup-win32-x64-gnu': 4.53.3 + '@rollup/rollup-win32-x64-msvc': 4.53.3 fsevents: 2.3.3 run-parallel@1.2.0: @@ -4210,7 +4211,7 @@ snapshots: '@types/node-forge': 1.3.13 node-forge: 1.3.1 - selfsigned@3.0.1: + selfsigned@4.0.0: dependencies: node-forge: 1.3.1 @@ -4222,7 +4223,7 @@ snapshots: send@1.2.0: dependencies: - debug: 4.4.1 + debug: 4.4.3 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 @@ -4562,16 +4563,16 @@ snapshots: vary@1.1.2: {} - vite@7.1.12(@types/node@24.9.1): + vite@7.2.4(@types/node@24.10.1): dependencies: esbuild: 0.25.8 fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.52.5 + rollup: 4.53.3 tinyglobby: 0.2.15 optionalDependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.1 fsevents: 2.3.3 vizion@2.2.1: @@ -4628,7 +4629,7 @@ snapshots: wkx@0.5.0: dependencies: - '@types/node': 24.9.1 + '@types/node': 24.10.1 wrap-ansi@7.0.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..efc037a --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,2 @@ +onlyBuiltDependencies: + - esbuild diff --git a/src/provider/chat-adapter/ollama.ts b/src/provider/chat-adapter/ollama.ts index 994e35e..c871b54 100644 --- a/src/provider/chat-adapter/ollama.ts +++ b/src/provider/chat-adapter/ollama.ts @@ -37,11 +37,11 @@ export class Ollama extends BaseChat { async listModels(): Promise<{ models: OllamaModel[] }> { const _url = new URL(this.baseURL); const tagsURL = new URL('/api/tags', _url); - return this.openai.get(tagsURL.toString()); + return this.get(tagsURL.toString()); } async listRunModels(): Promise<{ models: OllamaModel[] }> { const _url = new URL(this.baseURL); const tagsURL = new URL('/api/ps', _url); - return this.openai.get(tagsURL.toString()); + return this.get(tagsURL.toString()); } } diff --git a/src/provider/chat-adapter/siliconflow.ts b/src/provider/chat-adapter/siliconflow.ts index 867a28a..f01265a 100644 --- a/src/provider/chat-adapter/siliconflow.ts +++ b/src/provider/chat-adapter/siliconflow.ts @@ -31,7 +31,7 @@ export class SiliconFlow extends BaseChat { super({ ...(options as BaseChatOptions), baseURL: baseURL }); } async getUsageInfo(): Promise { - return this.openai.get('/user/info'); + return this.get('/user/info'); } async chat(messages: OpenAI.Chat.Completions.ChatCompletionMessageParam[], options?: ChatMessageOptions) { const res = await super.chat(messages, options); diff --git a/src/provider/core/chat.ts b/src/provider/core/chat.ts index 4950f8c..e24945a 100644 --- a/src/provider/core/chat.ts +++ b/src/provider/core/chat.ts @@ -65,6 +65,7 @@ export class BaseChat implements BaseChatInterface, BaseChatUsageInterface { prompt_tokens: number; total_tokens: number; completion_tokens: number; + responseText: string; constructor(options: BaseChatOptions) { this.baseURL = options.baseURL; @@ -73,47 +74,121 @@ export class BaseChat implements BaseChatInterface, BaseChatUsageInterface { // @ts-ignore const DEFAULT_IS_BROWSER = getIsBrowser(); this.isBrowser = options.isBrowser ?? DEFAULT_IS_BROWSER; - this.openai = new OpenAI({ - apiKey: this.apiKey, - baseURL: this.baseURL, - dangerouslyAllowBrowser: options?.dangerouslyAllowBrowser ?? this.isBrowser, + // this.openai = new OpenAI({ + // apiKey: this.apiKey, + // baseURL: this.baseURL, + // dangerouslyAllowBrowser: options?.dangerouslyAllowBrowser ?? this.isBrowser, + // }); + } + post(url = '', opts: { headers?: Record, data?: any } = {}) { + let _url = url.startsWith('http') ? url : this.baseURL + url; + return fetch(_url, { + method: 'POST', + ...opts, + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${this.apiKey}`, + ...opts.headers, + }, + body: opts?.data ? JSON.stringify(opts.data) : undefined, }); } + async get(url = '', opts: { headers?: Record } = {}): Promise { + let _url = url.startsWith('http') ? url : this.baseURL + url; + return fetch(_url, { + method: 'GET', + ...opts, + headers: { + 'Content-Type': 'application/json', + Authorization: `Bearer ${this.apiKey}`, + ...opts.headers, + }, + }).then((res) => res.json()); + } /** * 聊天 */ async chat(messages: ChatMessage[], options?: ChatMessageOptions): Promise { - const createParams: OpenAI.Chat.Completions.ChatCompletionCreateParams = { + const requestBody = { model: this.model, messages, ...options, stream: false, }; - const res = (await this.openai.chat.completions.create(createParams)) as ChatMessageComplete; + + const response = await this.post(`${this.baseURL}/chat/completions`, { data: requestBody }); + + if (!response.ok) { + const errorText = await response.text(); + throw new Error(`Chat API request failed: ${response.status} ${response.statusText} - ${errorText}`); + } + + const res = await response.json() as ChatMessageComplete; + this.prompt_tokens = res.usage?.prompt_tokens ?? 0; this.total_tokens = res.usage?.total_tokens ?? 0; this.completion_tokens = res.usage?.completion_tokens ?? 0; + this.responseText = res.choices[0]?.message?.content || ''; return res; } async chatStream(messages: ChatMessage[], options?: ChatMessageOptions) { - const createParams: OpenAI.Chat.Completions.ChatCompletionCreateParams = { + if (options?.response_format) { + throw new Error('response_format is not supported in stream mode'); + } + + const requestBody = { model: this.model, messages, ...options, stream: true, }; - if (createParams.response_format) { - throw new Error('response_format is not supported in stream mode'); + + const response = await this.post(`${this.baseURL}/chat/completions`, { data: requestBody }); + + if (!response.ok) { + const errorText = await response.text(); + throw new Error(`Chat Stream API request failed: ${response.status} ${response.statusText} - ${errorText}`); } - return this.openai.chat.completions.create(createParams) as unknown as ChatStream; + + const decoder = new TextDecoder(); + const reader = response.body?.getReader(); + + if (!reader) { + throw new Error('Response body is not readable'); + } + + // 创建一个新的 ReadableStream,使用 decoder 解析数据 + const stream = new ReadableStream({ + async start(controller) { + try { + while (true) { + const { done, value } = await reader.read(); + if (done) { + controller.close(); + break; + } + // 检查 value 类型,如果是 Uint8Array 才解码,否则直接使用 + if (typeof value === 'string') { + controller.enqueue(value); + } else if (value instanceof Uint8Array) { + const text = decoder.decode(value, { stream: true }); + controller.enqueue(text); + } else { + controller.enqueue(value); + } + } + } catch (error) { + controller.error(error); + } + }, + cancel() { + reader.releaseLock(); + } + }); + + return stream as unknown as ChatStream; } - /** - * 测试 - */ - test() { - return this.chat([{ role: 'user', content: 'Hello, world!' }]); - } /** * 获取聊天使用情况 * @returns @@ -125,6 +200,7 @@ export class BaseChat implements BaseChatInterface, BaseChatUsageInterface { completion_tokens: this.completion_tokens, }; } + getHeaders(headers?: Record) { return { 'Content-Type': 'application/json', @@ -139,12 +215,23 @@ export class BaseChat implements BaseChatInterface, BaseChatUsageInterface { */ async generateEmbeddingCore(text: string | string[], options?: EmbeddingMessage): Promise { const embeddingModel = options?.model || this.model; - const res = await this.openai.embeddings.create({ + + const requestBody = { model: embeddingModel, input: text, encoding_format: 'float', ...options, - }); + }; + + const response = await this.post(`${this.baseURL}/embeddings`, { data: requestBody }); + + if (!response.ok) { + const errorText = await response.text(); + throw new Error(`Embedding API request failed: ${response.status} ${response.statusText} - ${errorText}`); + } + + const res = await response.json() as EmbeddingMessageComplete; + this.prompt_tokens += res.usage.prompt_tokens; this.total_tokens += res.usage.total_tokens; return res; diff --git a/src/provider/core/index.ts b/src/provider/core/index.ts index 732dc35..3e540f8 100644 --- a/src/provider/core/index.ts +++ b/src/provider/core/index.ts @@ -2,17 +2,6 @@ import { ChatStream } from './type.ts'; // export type { BaseChat, BaseChatOptions } from './chat.ts'; export * from './chat.ts' -// export { -// ChatMessage, -// ChatMessageOptions, // -// ChatMessageComplete, -// ChatMessageStream, -// BaseChatInterface, -// BaseChatUsageInterface, -// ChatStream, -// EmbeddingMessage, -// EmbeddingMessageComplete, -// } from './type.ts'; export * from './type.ts' /** * for await (const chunk of chatStream) { diff --git a/src/provider/knowledge-adapter/siliconflow.ts b/src/provider/knowledge-adapter/siliconflow.ts index 393f865..b30521a 100644 --- a/src/provider/knowledge-adapter/siliconflow.ts +++ b/src/provider/knowledge-adapter/siliconflow.ts @@ -7,8 +7,8 @@ export class SiliconFlowKnowledge extends KnowledgeBase { } async rerank(data: RerankOptions) { - return this.openai.post('/rerank', { - body: data, + return this.post('/rerank', { + data: data, }); } } diff --git a/src/test/aliyun/test.ts b/src/test/aliyun/test.ts index 698ff1d..e984cc0 100644 --- a/src/test/aliyun/test.ts +++ b/src/test/aliyun/test.ts @@ -11,16 +11,49 @@ const ai = new BailianProvider({ }) -const res = await ai.chat([ +// const res = await ai.chat([ - { - role: 'user', - content: `1+1等于多少?` - }, - -], -) -console.log('AI Response:', res); -const content = res.choices[0].message?.content || '' +// { +// role: 'user', +// content: `1+1等于多少?` +// }, -console.log(util.inspect(res, { depth: null })) +// ], +// ) +// // console.log('AI Response:', res); +// const content = res.choices[0].message?.content || '' + +// console.log(util.inspect(res, { depth: null })) + +// console.log('responseText', ai.responseText) + + +// const res = await ai.chatStream([ + +// { +// role: 'user', +// content: `1+1等于多少?` +// }, + +// ], +// ) +// // console.log('AI Response:', res); +// export const readStream = async (chatStream) => { +// let buffer = ''; +// for await (const chunk of chatStream) { +// // chunk 已经是解码后的字符串,直接拼接即可 +// buffer += chunk; +// } +// console.log('AI Response:', buffer); +// }; + +// await readStream(res); + +const embe = await ai.generateEmbeddingCore([ + '你好,世界!', + 'Hello, world!', +], { + model: 'text-embedding-v4' +}); + +console.log('Embedding Response:', util.inspect(embe, { depth: null })); \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index b4d458c..b50c53e 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,6 +1,8 @@ { "extends": "@kevisual/types/json/backend.json", "compilerOptions": { + "module": "NodeNext", + "target": "esnext", "baseUrl": "./", "allowImportingTsExtensions": true, "paths": {