update: remove openai

This commit is contained in:
2025-11-24 04:26:57 +08:00
parent bd5fa00022
commit 6d473a0902
10 changed files with 370 additions and 256 deletions

View File

@@ -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 <xiongxiao@xiongxiao.me> (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"

403
pnpm-lock.yaml generated
View File

@@ -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:

2
pnpm-workspace.yaml Normal file
View File

@@ -0,0 +1,2 @@
onlyBuiltDependencies:
- esbuild

View File

@@ -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());
}
}

View File

@@ -31,7 +31,7 @@ export class SiliconFlow extends BaseChat {
super({ ...(options as BaseChatOptions), baseURL: baseURL });
}
async getUsageInfo(): Promise<SiliconFlowUsageResponse> {
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);

View File

@@ -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<string, string>, 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<T = any>(url = '', opts: { headers?: Record<string, string> } = {}): Promise<T> {
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<ChatMessageComplete> {
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<string, string>) {
return {
'Content-Type': 'application/json',
@@ -139,12 +215,23 @@ export class BaseChat implements BaseChatInterface, BaseChatUsageInterface {
*/
async generateEmbeddingCore(text: string | string[], options?: EmbeddingMessage): Promise<EmbeddingMessageComplete> {
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;

View File

@@ -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) {

View File

@@ -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,
});
}
}

View File

@@ -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 }));

View File

@@ -1,6 +1,8 @@
{
"extends": "@kevisual/types/json/backend.json",
"compilerOptions": {
"module": "NodeNext",
"target": "esnext",
"baseUrl": "./",
"allowImportingTsExtensions": true,
"paths": {