Spaces:
Running
on
CPU Upgrade
Running
on
CPU Upgrade
Thomas G. Lopes
commited on
MCPs (#91)
Browse files- .env.example +1 -1
- eslint.config.mts +2 -0
- package.json +11 -8
- pnpm-lock.yaml +652 -101
- src/app.css +1 -0
- src/lib/components/inference-playground/code-snippets.svelte +1 -0
- src/lib/components/inference-playground/generation-config.svelte +22 -1
- src/lib/components/inference-playground/mcp-card.svelte +110 -0
- src/lib/components/inference-playground/mcp-form.svelte +160 -0
- src/lib/components/inference-playground/mcp-modal.svelte +53 -0
- src/lib/components/inference-playground/structured-output-modal.svelte +1 -0
- src/lib/components/switch.svelte +57 -0
- src/lib/constants.ts +14 -0
- src/lib/data/context_length.json +269 -0
- src/lib/state/mcps.svelte.ts +86 -0
- src/lib/state/projects.svelte.ts +3 -0
- src/lib/utils/business.svelte.ts +93 -134
- src/lib/utils/stream.ts +144 -0
- src/lib/utils/styles.ts +6 -0
- src/lib/utils/url.spec.ts +59 -0
- src/lib/utils/url.ts +40 -0
- src/routes/api/generate/+server.ts +202 -0
- src/routes/api/generate/adapter.ts +71 -0
- src/routes/api/generate/mcp.ts +106 -0
- src/routes/api/generate/types.ts +53 -0
- src/routes/api/generate/utils.ts +11 -0
.env.example
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
|
|
| 1 |
HYPERBOLIC_API_KEY=
|
| 2 |
COHERE_API_KEY=
|
| 3 |
TOGETHER_API_KEY=
|
|
@@ -9,4 +10,3 @@ FAL_API_KEY=
|
|
| 9 |
HF_TOKEN=
|
| 10 |
|
| 11 |
MODELS_FILE=
|
| 12 |
-
|
|
|
|
| 1 |
+
PUBLIC_ENABLE_MCP=
|
| 2 |
HYPERBOLIC_API_KEY=
|
| 3 |
COHERE_API_KEY=
|
| 4 |
TOGETHER_API_KEY=
|
|
|
|
| 10 |
HF_TOKEN=
|
| 11 |
|
| 12 |
MODELS_FILE=
|
|
|
eslint.config.mts
CHANGED
|
@@ -66,6 +66,7 @@ export default ts.config(
|
|
| 66 |
"object-shorthand": ["error", "always"],
|
| 67 |
"svelte/no-at-html-tags": "off",
|
| 68 |
"svelte/require-each-key": "off",
|
|
|
|
| 69 |
"local/enforce-ext": [
|
| 70 |
"error",
|
| 71 |
{
|
|
@@ -92,6 +93,7 @@ export default ts.config(
|
|
| 92 |
"**/package-lock.json",
|
| 93 |
"**/yarn.lock",
|
| 94 |
"context_length.json",
|
|
|
|
| 95 |
],
|
| 96 |
},
|
| 97 |
{
|
|
|
|
| 66 |
"object-shorthand": ["error", "always"],
|
| 67 |
"svelte/no-at-html-tags": "off",
|
| 68 |
"svelte/require-each-key": "off",
|
| 69 |
+
"svelte/no-navigation-without-resolve": "off",
|
| 70 |
"local/enforce-ext": [
|
| 71 |
"error",
|
| 72 |
{
|
|
|
|
| 93 |
"**/package-lock.json",
|
| 94 |
"**/yarn.lock",
|
| 95 |
"context_length.json",
|
| 96 |
+
".claude/**/*",
|
| 97 |
],
|
| 98 |
},
|
| 99 |
{
|
package.json
CHANGED
|
@@ -12,8 +12,9 @@
|
|
| 12 |
"lint": "prettier . --check . && eslint src/",
|
| 13 |
"format": "prettier . --write .",
|
| 14 |
"clean": "rm -rf ./node_modules/ && rm -rf ./.svelte-kit/ && ni && echo 'Project cleaned!'",
|
|
|
|
| 15 |
"test:unit": "vitest --browser.headless",
|
| 16 |
-
"test": "npm run test:unit",
|
| 17 |
"test:e2e": "playwright test"
|
| 18 |
},
|
| 19 |
"devDependencies": {
|
|
@@ -30,10 +31,10 @@
|
|
| 30 |
"@playwright/test": "^1.49.1",
|
| 31 |
"@ryoppippi/unplugin-typia": "^1.0.0",
|
| 32 |
"@samchon/openapi": "^3.0.0",
|
| 33 |
-
"@sveltejs/adapter-auto": "^3.
|
| 34 |
-
"@sveltejs/adapter-node": "^5.
|
| 35 |
-
"@sveltejs/kit": "^2.
|
| 36 |
-
"@sveltejs/vite-plugin-svelte": "^4.0.
|
| 37 |
"@tailwindcss/container-queries": "^0.1.1",
|
| 38 |
"@tailwindcss/postcss": "^4.0.9",
|
| 39 |
"@testing-library/jest-dom": "^6.6.3",
|
|
@@ -59,8 +60,8 @@
|
|
| 59 |
"prettier-plugin-tailwindcss": "^0.6.11",
|
| 60 |
"runed": "^0.25.0",
|
| 61 |
"shiki": "^3.4.0",
|
| 62 |
-
"svelte": "^5.
|
| 63 |
-
"svelte-check": "^4.
|
| 64 |
"tailwind-merge": "^3.0.2",
|
| 65 |
"tailwindcss": "^4.0.9",
|
| 66 |
"ts-patch": "^3.3.0",
|
|
@@ -74,11 +75,13 @@
|
|
| 74 |
},
|
| 75 |
"type": "module",
|
| 76 |
"dependencies": {
|
|
|
|
| 77 |
"@tailwindcss/typography": "^0.5.16",
|
| 78 |
"dequal": "^2.0.3",
|
| 79 |
-
"eslint-plugin-svelte": "^3.
|
| 80 |
"marked": "^16.1.2",
|
| 81 |
"remult": "^3.0.2",
|
|
|
|
| 82 |
"typia": "^8.0.0"
|
| 83 |
},
|
| 84 |
"pnpm": {
|
|
|
|
| 12 |
"lint": "prettier . --check . && eslint src/",
|
| 13 |
"format": "prettier . --write .",
|
| 14 |
"clean": "rm -rf ./node_modules/ && rm -rf ./.svelte-kit/ && ni && echo 'Project cleaned!'",
|
| 15 |
+
"update-ctx-length": "jiti scripts/update-ctx-length.ts",
|
| 16 |
"test:unit": "vitest --browser.headless",
|
| 17 |
+
"test": "npm run test:unit -- --run",
|
| 18 |
"test:e2e": "playwright test"
|
| 19 |
},
|
| 20 |
"devDependencies": {
|
|
|
|
| 31 |
"@playwright/test": "^1.49.1",
|
| 32 |
"@ryoppippi/unplugin-typia": "^1.0.0",
|
| 33 |
"@samchon/openapi": "^3.0.0",
|
| 34 |
+
"@sveltejs/adapter-auto": "^3.3.1",
|
| 35 |
+
"@sveltejs/adapter-node": "^5.3.1",
|
| 36 |
+
"@sveltejs/kit": "^2.37.1",
|
| 37 |
+
"@sveltejs/vite-plugin-svelte": "^4.0.4",
|
| 38 |
"@tailwindcss/container-queries": "^0.1.1",
|
| 39 |
"@tailwindcss/postcss": "^4.0.9",
|
| 40 |
"@testing-library/jest-dom": "^6.6.3",
|
|
|
|
| 60 |
"prettier-plugin-tailwindcss": "^0.6.11",
|
| 61 |
"runed": "^0.25.0",
|
| 62 |
"shiki": "^3.4.0",
|
| 63 |
+
"svelte": "^5.38.7",
|
| 64 |
+
"svelte-check": "^4.3.1",
|
| 65 |
"tailwind-merge": "^3.0.2",
|
| 66 |
"tailwindcss": "^4.0.9",
|
| 67 |
"ts-patch": "^3.3.0",
|
|
|
|
| 75 |
},
|
| 76 |
"type": "module",
|
| 77 |
"dependencies": {
|
| 78 |
+
"@modelcontextprotocol/sdk": "^1.13.3",
|
| 79 |
"@tailwindcss/typography": "^0.5.16",
|
| 80 |
"dequal": "^2.0.3",
|
| 81 |
+
"eslint-plugin-svelte": "^3.12.2",
|
| 82 |
"marked": "^16.1.2",
|
| 83 |
"remult": "^3.0.2",
|
| 84 |
+
"tailwindcss-spring": "^1.0.1",
|
| 85 |
"typia": "^8.0.0"
|
| 86 |
},
|
| 87 |
"pnpm": {
|
pnpm-lock.yaml
CHANGED
|
@@ -8,6 +8,9 @@ importers:
|
|
| 8 |
|
| 9 |
.:
|
| 10 |
dependencies:
|
|
|
|
|
|
|
|
|
|
| 11 |
'@tailwindcss/typography':
|
| 12 |
specifier: ^0.5.16
|
| 13 |
version: 0.5.16(tailwindcss@4.0.9)
|
|
@@ -15,14 +18,17 @@ importers:
|
|
| 15 |
specifier: ^2.0.3
|
| 16 |
version: 2.0.3
|
| 17 |
eslint-plugin-svelte:
|
| 18 |
-
specifier: ^3.
|
| 19 |
-
version: 3.
|
| 20 |
marked:
|
| 21 |
specifier: ^16.1.2
|
| 22 |
version: 16.1.2
|
| 23 |
remult:
|
| 24 |
specifier: ^3.0.2
|
| 25 |
version: 3.0.2
|
|
|
|
|
|
|
|
|
|
| 26 |
typia:
|
| 27 |
specifier: ^8.0.0
|
| 28 |
version: 8.0.0(@samchon/openapi@3.0.0)(typescript@5.8.2)
|
|
@@ -67,17 +73,17 @@ importers:
|
|
| 67 |
specifier: ^3.0.0
|
| 68 |
version: 3.0.0
|
| 69 |
'@sveltejs/adapter-auto':
|
| 70 |
-
specifier: ^3.
|
| 71 |
-
version: 3.3.1(@sveltejs/kit@2.
|
| 72 |
'@sveltejs/adapter-node':
|
| 73 |
-
specifier: ^5.
|
| 74 |
-
version: 5.
|
| 75 |
'@sveltejs/kit':
|
| 76 |
-
specifier: ^2.
|
| 77 |
-
version: 2.
|
| 78 |
'@sveltejs/vite-plugin-svelte':
|
| 79 |
-
specifier: ^4.0.
|
| 80 |
-
version: 4.0.4(svelte@5.
|
| 81 |
'@tailwindcss/container-queries':
|
| 82 |
specifier: ^0.1.1
|
| 83 |
version: 0.1.1(tailwindcss@4.0.9)
|
|
@@ -89,7 +95,7 @@ importers:
|
|
| 89 |
version: 6.6.3
|
| 90 |
'@testing-library/svelte':
|
| 91 |
specifier: ^5.2.4
|
| 92 |
-
version: 5.2.8(svelte@5.
|
| 93 |
'@types/node':
|
| 94 |
specifier: ^22.14.1
|
| 95 |
version: 22.14.1
|
|
@@ -128,10 +134,10 @@ importers:
|
|
| 128 |
version: 26.1.0
|
| 129 |
melt:
|
| 130 |
specifier: ^0.36.0
|
| 131 |
-
version: 0.36.0(@floating-ui/dom@1.6.13)(svelte@5.
|
| 132 |
openai:
|
| 133 |
specifier: ^4.90.0
|
| 134 |
-
version: 4.90.0(ws@8.18.2)
|
| 135 |
playwright:
|
| 136 |
specifier: ^1.52.0
|
| 137 |
version: 1.52.0
|
|
@@ -143,22 +149,22 @@ importers:
|
|
| 143 |
version: 3.5.3
|
| 144 |
prettier-plugin-svelte:
|
| 145 |
specifier: ^3.4.0
|
| 146 |
-
version: 3.4.0(prettier@3.5.3)(svelte@5.
|
| 147 |
prettier-plugin-tailwindcss:
|
| 148 |
specifier: ^0.6.11
|
| 149 |
-
version: 0.6.11(prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.
|
| 150 |
runed:
|
| 151 |
specifier: ^0.25.0
|
| 152 |
-
version: 0.25.0(svelte@5.
|
| 153 |
shiki:
|
| 154 |
specifier: ^3.4.0
|
| 155 |
version: 3.4.0
|
| 156 |
svelte:
|
| 157 |
-
specifier: ^5.
|
| 158 |
-
version: 5.
|
| 159 |
svelte-check:
|
| 160 |
-
specifier: ^4.
|
| 161 |
-
version: 4.1
|
| 162 |
tailwind-merge:
|
| 163 |
specifier: ^3.0.2
|
| 164 |
version: 3.0.2
|
|
@@ -179,7 +185,7 @@ importers:
|
|
| 179 |
version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 180 |
unplugin-icons:
|
| 181 |
specifier: ^22.1.0
|
| 182 |
-
version: 22.1.0(svelte@5.
|
| 183 |
vite:
|
| 184 |
specifier: ^5.4.4
|
| 185 |
version: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
|
@@ -188,7 +194,7 @@ importers:
|
|
| 188 |
version: 3.1.4(@types/node@22.14.1)(@vitest/browser@3.1.4)(jsdom@26.1.0)(lightningcss@1.29.1)
|
| 189 |
vitest-browser-svelte:
|
| 190 |
specifier: ^0.1.0
|
| 191 |
-
version: 0.1.0(@vitest/browser@3.1.4)(svelte@5.
|
| 192 |
|
| 193 |
packages:
|
| 194 |
|
|
@@ -199,10 +205,6 @@ packages:
|
|
| 199 |
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
|
| 200 |
engines: {node: '>=10'}
|
| 201 |
|
| 202 |
-
'@ampproject/remapping@2.3.0':
|
| 203 |
-
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
|
| 204 |
-
engines: {node: '>=6.0.0'}
|
| 205 |
-
|
| 206 |
'@antfu/install-pkg@1.0.0':
|
| 207 |
resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==}
|
| 208 |
|
|
@@ -774,24 +776,32 @@ packages:
|
|
| 774 |
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
|
| 775 |
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
| 776 |
|
| 777 |
-
'@jridgewell/gen-mapping@0.3.
|
| 778 |
-
resolution: {integrity: sha512-
|
| 779 |
-
|
|
|
|
|
|
|
| 780 |
|
| 781 |
'@jridgewell/resolve-uri@3.1.2':
|
| 782 |
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
|
| 783 |
engines: {node: '>=6.0.0'}
|
| 784 |
|
| 785 |
-
'@jridgewell/set-array@1.2.1':
|
| 786 |
-
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
|
| 787 |
-
engines: {node: '>=6.0.0'}
|
| 788 |
-
|
| 789 |
'@jridgewell/sourcemap-codec@1.5.0':
|
| 790 |
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
|
| 791 |
|
|
|
|
|
|
|
|
|
|
| 792 |
'@jridgewell/trace-mapping@0.3.25':
|
| 793 |
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
|
| 794 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 795 |
'@noble/hashes@1.8.0':
|
| 796 |
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
|
| 797 |
engines: {node: ^14.21.3 || >=16}
|
|
@@ -1014,6 +1024,9 @@ packages:
|
|
| 1014 |
'@sinclair/typebox@0.27.8':
|
| 1015 |
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
|
| 1016 |
|
|
|
|
|
|
|
|
|
|
| 1017 |
'@sveltejs/acorn-typescript@1.0.5':
|
| 1018 |
resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==}
|
| 1019 |
peerDependencies:
|
|
@@ -1024,19 +1037,23 @@ packages:
|
|
| 1024 |
peerDependencies:
|
| 1025 |
'@sveltejs/kit': ^2.0.0
|
| 1026 |
|
| 1027 |
-
'@sveltejs/adapter-node@5.
|
| 1028 |
-
resolution: {integrity: sha512-
|
| 1029 |
peerDependencies:
|
| 1030 |
'@sveltejs/kit': ^2.4.0
|
| 1031 |
|
| 1032 |
-
'@sveltejs/kit@2.
|
| 1033 |
-
resolution: {integrity: sha512-
|
| 1034 |
engines: {node: '>=18.13'}
|
| 1035 |
hasBin: true
|
| 1036 |
peerDependencies:
|
| 1037 |
-
'@
|
|
|
|
| 1038 |
svelte: ^4.0.0 || ^5.0.0-next.0
|
| 1039 |
-
vite: ^5.0.3 || ^6.0.0
|
|
|
|
|
|
|
|
|
|
| 1040 |
|
| 1041 |
'@sveltejs/vite-plugin-svelte-inspector@3.0.1':
|
| 1042 |
resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==}
|
|
@@ -1297,6 +1314,10 @@ packages:
|
|
| 1297 |
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
|
| 1298 |
engines: {node: '>=6.5'}
|
| 1299 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1300 |
acorn-jsx@5.3.2:
|
| 1301 |
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
| 1302 |
peerDependencies:
|
|
@@ -1307,6 +1328,11 @@ packages:
|
|
| 1307 |
engines: {node: '>=0.4.0'}
|
| 1308 |
hasBin: true
|
| 1309 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1310 |
agent-base@7.1.3:
|
| 1311 |
resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
|
| 1312 |
engines: {node: '>= 14'}
|
|
@@ -1371,6 +1397,10 @@ packages:
|
|
| 1371 |
bl@4.1.0:
|
| 1372 |
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
|
| 1373 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1374 |
boolean@3.2.0:
|
| 1375 |
resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
|
| 1376 |
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
|
|
@@ -1388,6 +1418,10 @@ packages:
|
|
| 1388 |
buffer@5.7.1:
|
| 1389 |
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
| 1390 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1391 |
cac@6.7.14:
|
| 1392 |
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
|
| 1393 |
engines: {node: '>=8'}
|
|
@@ -1396,6 +1430,10 @@ packages:
|
|
| 1396 |
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
|
| 1397 |
engines: {node: '>= 0.4'}
|
| 1398 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1399 |
callsites@3.1.0:
|
| 1400 |
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
|
| 1401 |
engines: {node: '>=6'}
|
|
@@ -1504,13 +1542,33 @@ packages:
|
|
| 1504 |
resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
|
| 1505 |
engines: {node: ^14.18.0 || >=16.10.0}
|
| 1506 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1507 |
cookie@0.6.0:
|
| 1508 |
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
|
| 1509 |
engines: {node: '>= 0.6'}
|
| 1510 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1511 |
core-util-is@1.0.3:
|
| 1512 |
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
| 1513 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1514 |
cross-spawn@7.0.6:
|
| 1515 |
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
| 1516 |
engines: {node: '>= 8'}
|
|
@@ -1572,6 +1630,10 @@ packages:
|
|
| 1572 |
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
| 1573 |
engines: {node: '>=0.4.0'}
|
| 1574 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1575 |
dequal@2.0.3:
|
| 1576 |
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
|
| 1577 |
engines: {node: '>=6'}
|
|
@@ -1588,8 +1650,8 @@ packages:
|
|
| 1588 |
detect-node@2.1.0:
|
| 1589 |
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
|
| 1590 |
|
| 1591 |
-
devalue@5.
|
| 1592 |
-
resolution: {integrity: sha512-
|
| 1593 |
|
| 1594 |
devlop@1.1.0:
|
| 1595 |
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
|
|
@@ -1619,9 +1681,16 @@ packages:
|
|
| 1619 |
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
|
| 1620 |
engines: {node: '>= 0.4'}
|
| 1621 |
|
|
|
|
|
|
|
|
|
|
| 1622 |
emoji-regex@8.0.0:
|
| 1623 |
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
| 1624 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1625 |
enhanced-resolve@5.18.1:
|
| 1626 |
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
|
| 1627 |
engines: {node: '>=10.13.0'}
|
|
@@ -1662,6 +1731,9 @@ packages:
|
|
| 1662 |
engines: {node: '>=18'}
|
| 1663 |
hasBin: true
|
| 1664 |
|
|
|
|
|
|
|
|
|
|
| 1665 |
escape-string-regexp@1.0.5:
|
| 1666 |
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
|
| 1667 |
engines: {node: '>=0.8.0'}
|
|
@@ -1690,8 +1762,8 @@ packages:
|
|
| 1690 |
eslint-config-prettier:
|
| 1691 |
optional: true
|
| 1692 |
|
| 1693 |
-
eslint-plugin-svelte@3.
|
| 1694 |
-
resolution: {integrity: sha512-
|
| 1695 |
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 1696 |
peerDependencies:
|
| 1697 |
eslint: ^8.57.1 || ^9.0.0
|
|
@@ -1759,14 +1831,36 @@ packages:
|
|
| 1759 |
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
|
| 1760 |
engines: {node: '>=0.10.0'}
|
| 1761 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1762 |
event-target-shim@5.0.1:
|
| 1763 |
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
|
| 1764 |
engines: {node: '>=6'}
|
| 1765 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1766 |
expect-type@1.2.1:
|
| 1767 |
resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
|
| 1768 |
engines: {node: '>=12.0.0'}
|
| 1769 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1770 |
exsolve@1.0.4:
|
| 1771 |
resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
|
| 1772 |
|
|
@@ -1825,6 +1919,10 @@ packages:
|
|
| 1825 |
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
|
| 1826 |
engines: {node: '>=8'}
|
| 1827 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1828 |
find-cache-dir@5.0.0:
|
| 1829 |
resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==}
|
| 1830 |
engines: {node: '>=16'}
|
|
@@ -1858,6 +1956,14 @@ packages:
|
|
| 1858 |
resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==}
|
| 1859 |
engines: {node: '>= 12.20'}
|
| 1860 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1861 |
fsevents@2.3.2:
|
| 1862 |
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
| 1863 |
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
|
@@ -1964,6 +2070,10 @@ packages:
|
|
| 1964 |
html-void-elements@3.0.0:
|
| 1965 |
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
|
| 1966 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1967 |
http-proxy-agent@7.0.2:
|
| 1968 |
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
|
| 1969 |
engines: {node: '>= 14'}
|
|
@@ -1983,6 +2093,10 @@ packages:
|
|
| 1983 |
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
|
| 1984 |
engines: {node: '>=0.10.0'}
|
| 1985 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1986 |
ieee754@1.2.1:
|
| 1987 |
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
| 1988 |
|
|
@@ -2016,6 +2130,10 @@ packages:
|
|
| 2016 |
resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
|
| 2017 |
engines: {node: '>=12.0.0'}
|
| 2018 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2019 |
is-arrayish@0.3.2:
|
| 2020 |
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
|
| 2021 |
|
|
@@ -2049,6 +2167,9 @@ packages:
|
|
| 2049 |
is-potential-custom-element-name@1.0.1:
|
| 2050 |
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
|
| 2051 |
|
|
|
|
|
|
|
|
|
|
| 2052 |
is-reference@1.2.1:
|
| 2053 |
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
|
| 2054 |
|
|
@@ -2266,12 +2387,20 @@ packages:
|
|
| 2266 |
mdast-util-to-hast@13.2.0:
|
| 2267 |
resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
|
| 2268 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2269 |
melt@0.36.0:
|
| 2270 |
resolution: {integrity: sha512-lJdUuPvsCZs7zpcL2iSvxerHxv3QuM91FoTbdsliOQ2+J3fR4ADqUN878J4kkQSzzHlWqyedQmEBDP6U3iEWgA==}
|
| 2271 |
peerDependencies:
|
| 2272 |
'@floating-ui/dom': ^1.6.0
|
| 2273 |
svelte: ^5.30.1
|
| 2274 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2275 |
merge2@1.4.1:
|
| 2276 |
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
| 2277 |
engines: {node: '>= 8'}
|
|
@@ -2299,10 +2428,18 @@ packages:
|
|
| 2299 |
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
|
| 2300 |
engines: {node: '>= 0.6'}
|
| 2301 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2302 |
mime-types@2.1.35:
|
| 2303 |
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
| 2304 |
engines: {node: '>= 0.6'}
|
| 2305 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2306 |
mimic-fn@2.1.0:
|
| 2307 |
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
|
| 2308 |
engines: {node: '>=6'}
|
|
@@ -2364,6 +2501,10 @@ packages:
|
|
| 2364 |
natural-compare@1.4.0:
|
| 2365 |
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
| 2366 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2367 |
node-domexception@1.0.0:
|
| 2368 |
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
| 2369 |
engines: {node: '>=10.5.0'}
|
|
@@ -2380,10 +2521,25 @@ packages:
|
|
| 2380 |
nwsapi@2.2.20:
|
| 2381 |
resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==}
|
| 2382 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2383 |
object-keys@1.1.1:
|
| 2384 |
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
|
| 2385 |
engines: {node: '>= 0.4'}
|
| 2386 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2387 |
onetime@5.1.2:
|
| 2388 |
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
|
| 2389 |
engines: {node: '>=6'}
|
|
@@ -2457,6 +2613,10 @@ packages:
|
|
| 2457 |
parse5@7.3.0:
|
| 2458 |
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
|
| 2459 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2460 |
path-exists@4.0.0:
|
| 2461 |
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
| 2462 |
engines: {node: '>=8'}
|
|
@@ -2472,6 +2632,9 @@ packages:
|
|
| 2472 |
path-parse@1.0.7:
|
| 2473 |
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
|
| 2474 |
|
|
|
|
|
|
|
|
|
|
| 2475 |
pathe@1.1.2:
|
| 2476 |
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
|
| 2477 |
|
|
@@ -2493,6 +2656,10 @@ packages:
|
|
| 2493 |
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
|
| 2494 |
engines: {node: '>=12'}
|
| 2495 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2496 |
pkg-dir@7.0.0:
|
| 2497 |
resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
|
| 2498 |
engines: {node: '>=14.16'}
|
|
@@ -2641,10 +2808,18 @@ packages:
|
|
| 2641 |
resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==}
|
| 2642 |
engines: {node: '>=12.0.0'}
|
| 2643 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2644 |
punycode@2.3.1:
|
| 2645 |
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
| 2646 |
engines: {node: '>=6'}
|
| 2647 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2648 |
quansync@0.2.8:
|
| 2649 |
resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==}
|
| 2650 |
|
|
@@ -2655,6 +2830,14 @@ packages:
|
|
| 2655 |
resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==}
|
| 2656 |
engines: {node: '>=4'}
|
| 2657 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2658 |
react-is@17.0.2:
|
| 2659 |
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
|
| 2660 |
|
|
@@ -2722,6 +2905,10 @@ packages:
|
|
| 2722 |
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
| 2723 |
hasBin: true
|
| 2724 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2725 |
rrweb-cssom@0.8.0:
|
| 2726 |
resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
|
| 2727 |
|
|
@@ -2772,13 +2959,24 @@ packages:
|
|
| 2772 |
engines: {node: '>=10'}
|
| 2773 |
hasBin: true
|
| 2774 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2775 |
serialize-error@7.0.1:
|
| 2776 |
resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
|
| 2777 |
engines: {node: '>=10'}
|
| 2778 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2779 |
set-cookie-parser@2.7.1:
|
| 2780 |
resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
|
| 2781 |
|
|
|
|
|
|
|
|
|
|
| 2782 |
sharp@0.34.2:
|
| 2783 |
resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==}
|
| 2784 |
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
|
|
@@ -2794,6 +2992,22 @@ packages:
|
|
| 2794 |
shiki@3.4.0:
|
| 2795 |
resolution: {integrity: sha512-Ni80XHcqhOEXv5mmDAvf5p6PAJqbUc/RzFeaOqk+zP5DLvTPS3j0ckvA+MI87qoxTQ5RGJDVTbdl/ENLSyyAnQ==}
|
| 2796 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2797 |
siginfo@2.0.0:
|
| 2798 |
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
|
| 2799 |
|
|
@@ -2820,6 +3034,14 @@ packages:
|
|
| 2820 |
stackback@0.0.2:
|
| 2821 |
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
|
| 2822 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2823 |
std-env@3.9.0:
|
| 2824 |
resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
|
| 2825 |
|
|
@@ -2853,8 +3075,8 @@ packages:
|
|
| 2853 |
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
| 2854 |
engines: {node: '>= 0.4'}
|
| 2855 |
|
| 2856 |
-
svelte-check@4.1
|
| 2857 |
-
resolution: {integrity: sha512-
|
| 2858 |
engines: {node: '>= 18.0.0'}
|
| 2859 |
hasBin: true
|
| 2860 |
peerDependencies:
|
|
@@ -2870,8 +3092,8 @@ packages:
|
|
| 2870 |
svelte:
|
| 2871 |
optional: true
|
| 2872 |
|
| 2873 |
-
svelte@5.
|
| 2874 |
-
resolution: {integrity: sha512-
|
| 2875 |
engines: {node: '>=18'}
|
| 2876 |
|
| 2877 |
symbol-tree@3.2.4:
|
|
@@ -2884,6 +3106,11 @@ packages:
|
|
| 2884 |
tailwind-merge@3.0.2:
|
| 2885 |
resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==}
|
| 2886 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2887 |
tailwindcss@4.0.9:
|
| 2888 |
resolution: {integrity: sha512-12laZu+fv1ONDRoNR9ipTOpUD7RN9essRVkX36sjxuRUInpN7hIiHN4lBd/SIFjbISvnXzp8h/hXzmU8SQQYhw==}
|
| 2889 |
|
|
@@ -2935,6 +3162,10 @@ packages:
|
|
| 2935 |
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
| 2936 |
engines: {node: '>=8.0'}
|
| 2937 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2938 |
totalist@3.0.1:
|
| 2939 |
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
|
| 2940 |
engines: {node: '>=6'}
|
|
@@ -2982,6 +3213,10 @@ packages:
|
|
| 2982 |
resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==}
|
| 2983 |
engines: {node: '>=16'}
|
| 2984 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2985 |
typescript-eslint@8.26.1:
|
| 2986 |
resolution: {integrity: sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==}
|
| 2987 |
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
|
@@ -3037,6 +3272,10 @@ packages:
|
|
| 3037 |
unist-util-visit@5.0.0:
|
| 3038 |
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
|
| 3039 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3040 |
unplugin-icons@22.1.0:
|
| 3041 |
resolution: {integrity: sha512-ect2ZNtk1Zgwb0NVHd0C1IDW/MV+Jk/xaq4t8o6rYdVS3+L660ZdD5kTSQZvsgdwCvquRw+/wYn75hsweRjoIA==}
|
| 3042 |
peerDependencies:
|
|
@@ -3078,6 +3317,10 @@ packages:
|
|
| 3078 |
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
|
| 3079 |
hasBin: true
|
| 3080 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3081 |
vfile-message@4.0.2:
|
| 3082 |
resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
|
| 3083 |
|
|
@@ -3263,6 +3506,9 @@ packages:
|
|
| 3263 |
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
|
| 3264 |
engines: {node: '>=8'}
|
| 3265 |
|
|
|
|
|
|
|
|
|
|
| 3266 |
ws@8.18.2:
|
| 3267 |
resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
|
| 3268 |
engines: {node: '>=10.0.0'}
|
|
@@ -3306,6 +3552,14 @@ packages:
|
|
| 3306 |
zimmerframe@1.1.2:
|
| 3307 |
resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
|
| 3308 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3309 |
zwitch@2.0.4:
|
| 3310 |
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
|
| 3311 |
|
|
@@ -3315,11 +3569,6 @@ snapshots:
|
|
| 3315 |
|
| 3316 |
'@alloc/quick-lru@5.2.0': {}
|
| 3317 |
|
| 3318 |
-
'@ampproject/remapping@2.3.0':
|
| 3319 |
-
dependencies:
|
| 3320 |
-
'@jridgewell/gen-mapping': 0.3.8
|
| 3321 |
-
'@jridgewell/trace-mapping': 0.3.25
|
| 3322 |
-
|
| 3323 |
'@antfu/install-pkg@1.0.0':
|
| 3324 |
dependencies:
|
| 3325 |
package-manager-detector: 0.2.11
|
|
@@ -3723,23 +3972,49 @@ snapshots:
|
|
| 3723 |
dependencies:
|
| 3724 |
'@sinclair/typebox': 0.27.8
|
| 3725 |
|
| 3726 |
-
'@jridgewell/gen-mapping@0.3.
|
| 3727 |
dependencies:
|
| 3728 |
-
'@jridgewell/set-array': 1.2.1
|
| 3729 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3730 |
-
'@jridgewell/trace-mapping': 0.3.
|
| 3731 |
|
| 3732 |
-
'@jridgewell/
|
|
|
|
|
|
|
|
|
|
| 3733 |
|
| 3734 |
-
'@jridgewell/
|
| 3735 |
|
| 3736 |
'@jridgewell/sourcemap-codec@1.5.0': {}
|
| 3737 |
|
|
|
|
|
|
|
| 3738 |
'@jridgewell/trace-mapping@0.3.25':
|
| 3739 |
dependencies:
|
| 3740 |
'@jridgewell/resolve-uri': 3.1.2
|
| 3741 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3742 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3743 |
'@noble/hashes@1.8.0': {}
|
| 3744 |
|
| 3745 |
'@nodelib/fs.scandir@2.1.5':
|
|
@@ -3949,57 +4224,65 @@ snapshots:
|
|
| 3949 |
|
| 3950 |
'@sinclair/typebox@0.27.8': {}
|
| 3951 |
|
|
|
|
|
|
|
| 3952 |
'@sveltejs/acorn-typescript@1.0.5(acorn@8.14.0)':
|
| 3953 |
dependencies:
|
| 3954 |
acorn: 8.14.0
|
| 3955 |
|
| 3956 |
-
'@sveltejs/
|
| 3957 |
dependencies:
|
| 3958 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3959 |
import-meta-resolve: 4.1.0
|
| 3960 |
|
| 3961 |
-
'@sveltejs/adapter-node@5.
|
| 3962 |
dependencies:
|
| 3963 |
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.9)
|
| 3964 |
'@rollup/plugin-json': 6.1.0(rollup@4.34.9)
|
| 3965 |
'@rollup/plugin-node-resolve': 16.0.0(rollup@4.34.9)
|
| 3966 |
-
'@sveltejs/kit': 2.
|
| 3967 |
rollup: 4.34.9
|
| 3968 |
|
| 3969 |
-
'@sveltejs/kit@2.
|
| 3970 |
dependencies:
|
| 3971 |
-
'@
|
|
|
|
|
|
|
| 3972 |
'@types/cookie': 0.6.0
|
|
|
|
| 3973 |
cookie: 0.6.0
|
| 3974 |
-
devalue: 5.
|
| 3975 |
esm-env: 1.2.2
|
| 3976 |
-
import-meta-resolve: 4.1.0
|
| 3977 |
kleur: 4.1.5
|
| 3978 |
magic-string: 0.30.17
|
| 3979 |
mrmime: 2.0.1
|
| 3980 |
sade: 1.8.1
|
| 3981 |
set-cookie-parser: 2.7.1
|
| 3982 |
sirv: 3.0.1
|
| 3983 |
-
svelte: 5.
|
| 3984 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 3985 |
|
| 3986 |
-
'@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.
|
| 3987 |
dependencies:
|
| 3988 |
-
'@sveltejs/vite-plugin-svelte': 4.0.4(svelte@5.
|
| 3989 |
debug: 4.4.0
|
| 3990 |
-
svelte: 5.
|
| 3991 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 3992 |
transitivePeerDependencies:
|
| 3993 |
- supports-color
|
| 3994 |
|
| 3995 |
-
'@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.
|
| 3996 |
dependencies:
|
| 3997 |
-
'@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.
|
| 3998 |
debug: 4.4.0
|
| 3999 |
deepmerge: 4.3.1
|
| 4000 |
kleur: 4.1.5
|
| 4001 |
magic-string: 0.30.17
|
| 4002 |
-
svelte: 5.
|
| 4003 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 4004 |
vitefu: 1.0.6(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
|
| 4005 |
transitivePeerDependencies:
|
|
@@ -4100,10 +4383,10 @@ snapshots:
|
|
| 4100 |
lodash: 4.17.21
|
| 4101 |
redent: 3.0.0
|
| 4102 |
|
| 4103 |
-
'@testing-library/svelte@5.2.8(svelte@5.
|
| 4104 |
dependencies:
|
| 4105 |
'@testing-library/dom': 10.4.0
|
| 4106 |
-
svelte: 5.
|
| 4107 |
optionalDependencies:
|
| 4108 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 4109 |
vitest: 3.1.4(@types/node@22.14.1)(@vitest/browser@3.1.4)(jsdom@26.1.0)(lightningcss@1.29.1)
|
|
@@ -4287,12 +4570,19 @@ snapshots:
|
|
| 4287 |
dependencies:
|
| 4288 |
event-target-shim: 5.0.1
|
| 4289 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4290 |
acorn-jsx@5.3.2(acorn@8.14.0):
|
| 4291 |
dependencies:
|
| 4292 |
acorn: 8.14.0
|
| 4293 |
|
| 4294 |
acorn@8.14.0: {}
|
| 4295 |
|
|
|
|
|
|
|
| 4296 |
agent-base@7.1.3: {}
|
| 4297 |
|
| 4298 |
agentkeepalive@4.6.0:
|
|
@@ -4346,6 +4636,20 @@ snapshots:
|
|
| 4346 |
inherits: 2.0.4
|
| 4347 |
readable-stream: 3.6.2
|
| 4348 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4349 |
boolean@3.2.0: {}
|
| 4350 |
|
| 4351 |
brace-expansion@1.1.11:
|
|
@@ -4366,6 +4670,8 @@ snapshots:
|
|
| 4366 |
base64-js: 1.5.1
|
| 4367 |
ieee754: 1.2.1
|
| 4368 |
|
|
|
|
|
|
|
| 4369 |
cac@6.7.14: {}
|
| 4370 |
|
| 4371 |
call-bind-apply-helpers@1.0.2:
|
|
@@ -4373,6 +4679,11 @@ snapshots:
|
|
| 4373 |
es-errors: 1.3.0
|
| 4374 |
function-bind: 1.1.2
|
| 4375 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4376 |
callsites@3.1.0: {}
|
| 4377 |
|
| 4378 |
ccount@2.0.1: {}
|
|
@@ -4465,10 +4776,25 @@ snapshots:
|
|
| 4465 |
|
| 4466 |
consola@3.4.0: {}
|
| 4467 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4468 |
cookie@0.6.0: {}
|
| 4469 |
|
|
|
|
|
|
|
| 4470 |
core-util-is@1.0.3: {}
|
| 4471 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4472 |
cross-spawn@7.0.6:
|
| 4473 |
dependencies:
|
| 4474 |
path-key: 3.1.1
|
|
@@ -4521,6 +4847,8 @@ snapshots:
|
|
| 4521 |
|
| 4522 |
delayed-stream@1.0.0: {}
|
| 4523 |
|
|
|
|
|
|
|
| 4524 |
dequal@2.0.3: {}
|
| 4525 |
|
| 4526 |
detect-libc@1.0.3: {}
|
|
@@ -4529,7 +4857,7 @@ snapshots:
|
|
| 4529 |
|
| 4530 |
detect-node@2.1.0: {}
|
| 4531 |
|
| 4532 |
-
devalue@5.
|
| 4533 |
|
| 4534 |
devlop@1.1.0:
|
| 4535 |
dependencies:
|
|
@@ -4553,8 +4881,12 @@ snapshots:
|
|
| 4553 |
es-errors: 1.3.0
|
| 4554 |
gopd: 1.2.0
|
| 4555 |
|
|
|
|
|
|
|
| 4556 |
emoji-regex@8.0.0: {}
|
| 4557 |
|
|
|
|
|
|
|
| 4558 |
enhanced-resolve@5.18.1:
|
| 4559 |
dependencies:
|
| 4560 |
graceful-fs: 4.2.11
|
|
@@ -4635,6 +4967,8 @@ snapshots:
|
|
| 4635 |
'@esbuild/win32-ia32': 0.25.1
|
| 4636 |
'@esbuild/win32-x64': 0.25.1
|
| 4637 |
|
|
|
|
|
|
|
| 4638 |
escape-string-regexp@1.0.5: {}
|
| 4639 |
|
| 4640 |
escape-string-regexp@4.0.0: {}
|
|
@@ -4652,7 +4986,7 @@ snapshots:
|
|
| 4652 |
optionalDependencies:
|
| 4653 |
eslint-config-prettier: 10.1.1(eslint@9.22.0(jiti@2.4.2))
|
| 4654 |
|
| 4655 |
-
eslint-plugin-svelte@3.
|
| 4656 |
dependencies:
|
| 4657 |
'@eslint-community/eslint-utils': 4.7.0(eslint@9.22.0(jiti@2.4.2))
|
| 4658 |
'@jridgewell/sourcemap-codec': 1.5.0
|
|
@@ -4664,9 +4998,9 @@ snapshots:
|
|
| 4664 |
postcss-load-config: 3.1.4(postcss@8.5.3)
|
| 4665 |
postcss-safe-parser: 7.0.1(postcss@8.5.3)
|
| 4666 |
semver: 7.7.2
|
| 4667 |
-
svelte-eslint-parser: 1.3.0(svelte@5.
|
| 4668 |
optionalDependencies:
|
| 4669 |
-
svelte: 5.
|
| 4670 |
transitivePeerDependencies:
|
| 4671 |
- ts-node
|
| 4672 |
|
|
@@ -4753,10 +5087,54 @@ snapshots:
|
|
| 4753 |
|
| 4754 |
esutils@2.0.3: {}
|
| 4755 |
|
|
|
|
|
|
|
| 4756 |
event-target-shim@5.0.1: {}
|
| 4757 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4758 |
expect-type@1.2.1: {}
|
| 4759 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4760 |
exsolve@1.0.4: {}
|
| 4761 |
|
| 4762 |
external-editor@3.1.0:
|
|
@@ -4807,6 +5185,17 @@ snapshots:
|
|
| 4807 |
dependencies:
|
| 4808 |
to-regex-range: 5.0.1
|
| 4809 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4810 |
find-cache-dir@5.0.0:
|
| 4811 |
dependencies:
|
| 4812 |
common-path-prefix: 3.0.0
|
|
@@ -4845,6 +5234,10 @@ snapshots:
|
|
| 4845 |
node-domexception: 1.0.0
|
| 4846 |
web-streams-polyfill: 4.0.0-beta.3
|
| 4847 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4848 |
fsevents@2.3.2:
|
| 4849 |
optional: true
|
| 4850 |
|
|
@@ -4957,6 +5350,14 @@ snapshots:
|
|
| 4957 |
|
| 4958 |
html-void-elements@3.0.0: {}
|
| 4959 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4960 |
http-proxy-agent@7.0.2:
|
| 4961 |
dependencies:
|
| 4962 |
agent-base: 7.1.3
|
|
@@ -4983,6 +5384,10 @@ snapshots:
|
|
| 4983 |
dependencies:
|
| 4984 |
safer-buffer: 2.1.2
|
| 4985 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4986 |
ieee754@1.2.1: {}
|
| 4987 |
|
| 4988 |
ignore@5.3.2: {}
|
|
@@ -5020,6 +5425,8 @@ snapshots:
|
|
| 5020 |
through: 2.3.8
|
| 5021 |
wrap-ansi: 6.2.0
|
| 5022 |
|
|
|
|
|
|
|
| 5023 |
is-arrayish@0.3.2: {}
|
| 5024 |
|
| 5025 |
is-core-module@2.16.1:
|
|
@@ -5042,6 +5449,8 @@ snapshots:
|
|
| 5042 |
|
| 5043 |
is-potential-custom-element-name@1.0.1: {}
|
| 5044 |
|
|
|
|
|
|
|
| 5045 |
is-reference@1.2.1:
|
| 5046 |
dependencies:
|
| 5047 |
'@types/estree': 1.0.6
|
|
@@ -5225,7 +5634,7 @@ snapshots:
|
|
| 5225 |
|
| 5226 |
magic-string@0.30.17:
|
| 5227 |
dependencies:
|
| 5228 |
-
'@jridgewell/sourcemap-codec': 1.5.
|
| 5229 |
|
| 5230 |
marked@16.1.2: {}
|
| 5231 |
|
|
@@ -5247,14 +5656,18 @@ snapshots:
|
|
| 5247 |
unist-util-visit: 5.0.0
|
| 5248 |
vfile: 6.0.3
|
| 5249 |
|
| 5250 |
-
|
|
|
|
|
|
|
| 5251 |
dependencies:
|
| 5252 |
'@floating-ui/dom': 1.6.13
|
| 5253 |
dequal: 2.0.3
|
| 5254 |
jest-axe: 9.0.0
|
| 5255 |
nanoid: 5.1.5
|
| 5256 |
-
runed: 0.23.4(svelte@5.
|
| 5257 |
-
svelte: 5.
|
|
|
|
|
|
|
| 5258 |
|
| 5259 |
merge2@1.4.1: {}
|
| 5260 |
|
|
@@ -5282,10 +5695,16 @@ snapshots:
|
|
| 5282 |
|
| 5283 |
mime-db@1.52.0: {}
|
| 5284 |
|
|
|
|
|
|
|
| 5285 |
mime-types@2.1.35:
|
| 5286 |
dependencies:
|
| 5287 |
mime-db: 1.52.0
|
| 5288 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5289 |
mimic-fn@2.1.0: {}
|
| 5290 |
|
| 5291 |
min-indent@1.0.1: {}
|
|
@@ -5329,6 +5748,8 @@ snapshots:
|
|
| 5329 |
|
| 5330 |
natural-compare@1.4.0: {}
|
| 5331 |
|
|
|
|
|
|
|
| 5332 |
node-domexception@1.0.0: {}
|
| 5333 |
|
| 5334 |
node-fetch@2.7.0:
|
|
@@ -5337,8 +5758,20 @@ snapshots:
|
|
| 5337 |
|
| 5338 |
nwsapi@2.2.20: {}
|
| 5339 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5340 |
object-keys@1.1.1: {}
|
| 5341 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5342 |
onetime@5.1.2:
|
| 5343 |
dependencies:
|
| 5344 |
mimic-fn: 2.1.0
|
|
@@ -5370,7 +5803,7 @@ snapshots:
|
|
| 5370 |
platform: 1.3.6
|
| 5371 |
protobufjs: 7.4.0
|
| 5372 |
|
| 5373 |
-
openai@4.90.0(ws@8.18.2):
|
| 5374 |
dependencies:
|
| 5375 |
'@types/node': 18.19.84
|
| 5376 |
'@types/node-fetch': 2.6.12
|
|
@@ -5381,6 +5814,7 @@ snapshots:
|
|
| 5381 |
node-fetch: 2.7.0
|
| 5382 |
optionalDependencies:
|
| 5383 |
ws: 8.18.2
|
|
|
|
| 5384 |
transitivePeerDependencies:
|
| 5385 |
- encoding
|
| 5386 |
|
|
@@ -5435,6 +5869,8 @@ snapshots:
|
|
| 5435 |
dependencies:
|
| 5436 |
entities: 6.0.0
|
| 5437 |
|
|
|
|
|
|
|
| 5438 |
path-exists@4.0.0: {}
|
| 5439 |
|
| 5440 |
path-exists@5.0.0: {}
|
|
@@ -5443,6 +5879,8 @@ snapshots:
|
|
| 5443 |
|
| 5444 |
path-parse@1.0.7: {}
|
| 5445 |
|
|
|
|
|
|
|
| 5446 |
pathe@1.1.2: {}
|
| 5447 |
|
| 5448 |
pathe@2.0.3: {}
|
|
@@ -5455,6 +5893,8 @@ snapshots:
|
|
| 5455 |
|
| 5456 |
picomatch@4.0.2: {}
|
| 5457 |
|
|
|
|
|
|
|
| 5458 |
pkg-dir@7.0.0:
|
| 5459 |
dependencies:
|
| 5460 |
find-up: 6.3.0
|
|
@@ -5518,16 +5958,16 @@ snapshots:
|
|
| 5518 |
dependencies:
|
| 5519 |
fast-diff: 1.3.0
|
| 5520 |
|
| 5521 |
-
prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.
|
| 5522 |
dependencies:
|
| 5523 |
prettier: 3.5.3
|
| 5524 |
-
svelte: 5.
|
| 5525 |
|
| 5526 |
-
prettier-plugin-tailwindcss@0.6.11(prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.
|
| 5527 |
dependencies:
|
| 5528 |
prettier: 3.5.3
|
| 5529 |
optionalDependencies:
|
| 5530 |
-
prettier-plugin-svelte: 3.4.0(prettier@3.5.3)(svelte@5.
|
| 5531 |
|
| 5532 |
prettier@3.5.3: {}
|
| 5533 |
|
|
@@ -5560,8 +6000,17 @@ snapshots:
|
|
| 5560 |
'@types/node': 22.14.1
|
| 5561 |
long: 5.3.1
|
| 5562 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5563 |
punycode@2.3.1: {}
|
| 5564 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5565 |
quansync@0.2.8: {}
|
| 5566 |
|
| 5567 |
queue-microtask@1.2.3: {}
|
|
@@ -5571,6 +6020,15 @@ snapshots:
|
|
| 5571 |
drange: 1.1.1
|
| 5572 |
ret: 0.2.2
|
| 5573 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5574 |
react-is@17.0.2: {}
|
| 5575 |
|
| 5576 |
react-is@18.3.1: {}
|
|
@@ -5660,6 +6118,16 @@ snapshots:
|
|
| 5660 |
'@rollup/rollup-win32-x64-msvc': 4.34.9
|
| 5661 |
fsevents: 2.3.3
|
| 5662 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5663 |
rrweb-cssom@0.8.0: {}
|
| 5664 |
|
| 5665 |
run-async@2.4.1: {}
|
|
@@ -5668,15 +6136,15 @@ snapshots:
|
|
| 5668 |
dependencies:
|
| 5669 |
queue-microtask: 1.2.3
|
| 5670 |
|
| 5671 |
-
runed@0.23.4(svelte@5.
|
| 5672 |
dependencies:
|
| 5673 |
esm-env: 1.2.2
|
| 5674 |
-
svelte: 5.
|
| 5675 |
|
| 5676 |
-
runed@0.25.0(svelte@5.
|
| 5677 |
dependencies:
|
| 5678 |
esm-env: 1.2.2
|
| 5679 |
-
svelte: 5.
|
| 5680 |
|
| 5681 |
rxjs@7.8.2:
|
| 5682 |
dependencies:
|
|
@@ -5700,12 +6168,39 @@ snapshots:
|
|
| 5700 |
|
| 5701 |
semver@7.7.2: {}
|
| 5702 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5703 |
serialize-error@7.0.1:
|
| 5704 |
dependencies:
|
| 5705 |
type-fest: 0.13.1
|
| 5706 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5707 |
set-cookie-parser@2.7.1: {}
|
| 5708 |
|
|
|
|
|
|
|
| 5709 |
sharp@0.34.2:
|
| 5710 |
dependencies:
|
| 5711 |
color: 4.2.3
|
|
@@ -5751,6 +6246,34 @@ snapshots:
|
|
| 5751 |
'@shikijs/vscode-textmate': 10.0.2
|
| 5752 |
'@types/hast': 3.0.4
|
| 5753 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5754 |
siginfo@2.0.0: {}
|
| 5755 |
|
| 5756 |
signal-exit@3.0.7: {}
|
|
@@ -5773,6 +6296,10 @@ snapshots:
|
|
| 5773 |
|
| 5774 |
stackback@0.0.2: {}
|
| 5775 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5776 |
std-env@3.9.0: {}
|
| 5777 |
|
| 5778 |
string-width@4.2.3:
|
|
@@ -5806,19 +6333,19 @@ snapshots:
|
|
| 5806 |
|
| 5807 |
supports-preserve-symlinks-flag@1.0.0: {}
|
| 5808 |
|
| 5809 |
-
svelte-check@4.1
|
| 5810 |
dependencies:
|
| 5811 |
'@jridgewell/trace-mapping': 0.3.25
|
| 5812 |
chokidar: 4.0.3
|
| 5813 |
fdir: 6.4.3(picomatch@4.0.2)
|
| 5814 |
picocolors: 1.1.1
|
| 5815 |
sade: 1.8.1
|
| 5816 |
-
svelte: 5.
|
| 5817 |
typescript: 5.8.2
|
| 5818 |
transitivePeerDependencies:
|
| 5819 |
- picomatch
|
| 5820 |
|
| 5821 |
-
svelte-eslint-parser@1.3.0(svelte@5.
|
| 5822 |
dependencies:
|
| 5823 |
eslint-scope: 8.3.0
|
| 5824 |
eslint-visitor-keys: 4.2.0
|
|
@@ -5827,11 +6354,11 @@ snapshots:
|
|
| 5827 |
postcss-scss: 4.0.9(postcss@8.5.3)
|
| 5828 |
postcss-selector-parser: 7.1.0
|
| 5829 |
optionalDependencies:
|
| 5830 |
-
svelte: 5.
|
| 5831 |
|
| 5832 |
-
svelte@5.
|
| 5833 |
dependencies:
|
| 5834 |
-
'@
|
| 5835 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 5836 |
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.0)
|
| 5837 |
'@types/estree': 1.0.6
|
|
@@ -5855,6 +6382,10 @@ snapshots:
|
|
| 5855 |
|
| 5856 |
tailwind-merge@3.0.2: {}
|
| 5857 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5858 |
tailwindcss@4.0.9: {}
|
| 5859 |
|
| 5860 |
tapable@2.2.1: {}
|
|
@@ -5899,6 +6430,8 @@ snapshots:
|
|
| 5899 |
dependencies:
|
| 5900 |
is-number: 7.0.0
|
| 5901 |
|
|
|
|
|
|
|
| 5902 |
totalist@3.0.1: {}
|
| 5903 |
|
| 5904 |
tough-cookie@5.1.2:
|
|
@@ -5938,6 +6471,12 @@ snapshots:
|
|
| 5938 |
|
| 5939 |
type-fest@4.37.0: {}
|
| 5940 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 5941 |
typescript-eslint@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2):
|
| 5942 |
dependencies:
|
| 5943 |
'@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
|
@@ -6001,7 +6540,9 @@ snapshots:
|
|
| 6001 |
unist-util-is: 6.0.0
|
| 6002 |
unist-util-visit-parents: 6.0.1
|
| 6003 |
|
| 6004 |
-
|
|
|
|
|
|
|
| 6005 |
dependencies:
|
| 6006 |
'@antfu/install-pkg': 1.0.0
|
| 6007 |
'@iconify/utils': 2.3.0
|
|
@@ -6009,7 +6550,7 @@ snapshots:
|
|
| 6009 |
local-pkg: 1.1.1
|
| 6010 |
unplugin: 2.2.0
|
| 6011 |
optionalDependencies:
|
| 6012 |
-
svelte: 5.
|
| 6013 |
transitivePeerDependencies:
|
| 6014 |
- supports-color
|
| 6015 |
|
|
@@ -6031,6 +6572,8 @@ snapshots:
|
|
| 6031 |
|
| 6032 |
uuid@8.3.2: {}
|
| 6033 |
|
|
|
|
|
|
|
| 6034 |
vfile-message@4.0.2:
|
| 6035 |
dependencies:
|
| 6036 |
'@types/unist': 3.0.3
|
|
@@ -6085,10 +6628,10 @@ snapshots:
|
|
| 6085 |
optionalDependencies:
|
| 6086 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 6087 |
|
| 6088 |
-
vitest-browser-svelte@0.1.0(@vitest/browser@3.1.4)(svelte@5.
|
| 6089 |
dependencies:
|
| 6090 |
'@vitest/browser': 3.1.4(playwright@1.52.0)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))(vitest@3.1.4)
|
| 6091 |
-
svelte: 5.
|
| 6092 |
vitest: 3.1.4(@types/node@22.14.1)(@vitest/browser@3.1.4)(jsdom@26.1.0)(lightningcss@1.29.1)
|
| 6093 |
|
| 6094 |
vitest@3.1.4(@types/node@22.14.1)(@vitest/browser@3.1.4)(jsdom@26.1.0)(lightningcss@1.29.1):
|
|
@@ -6182,6 +6725,8 @@ snapshots:
|
|
| 6182 |
string-width: 4.2.3
|
| 6183 |
strip-ansi: 6.0.1
|
| 6184 |
|
|
|
|
|
|
|
| 6185 |
ws@8.18.2: {}
|
| 6186 |
|
| 6187 |
xml-name-validator@5.0.0: {}
|
|
@@ -6201,4 +6746,10 @@ snapshots:
|
|
| 6201 |
|
| 6202 |
zimmerframe@1.1.2: {}
|
| 6203 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6204 |
zwitch@2.0.4: {}
|
|
|
|
| 8 |
|
| 9 |
.:
|
| 10 |
dependencies:
|
| 11 |
+
'@modelcontextprotocol/sdk':
|
| 12 |
+
specifier: ^1.13.3
|
| 13 |
+
version: 1.17.5
|
| 14 |
'@tailwindcss/typography':
|
| 15 |
specifier: ^0.5.16
|
| 16 |
version: 0.5.16(tailwindcss@4.0.9)
|
|
|
|
| 18 |
specifier: ^2.0.3
|
| 19 |
version: 2.0.3
|
| 20 |
eslint-plugin-svelte:
|
| 21 |
+
specifier: ^3.12.2
|
| 22 |
+
version: 3.12.2(eslint@9.22.0(jiti@2.4.2))(svelte@5.38.7)
|
| 23 |
marked:
|
| 24 |
specifier: ^16.1.2
|
| 25 |
version: 16.1.2
|
| 26 |
remult:
|
| 27 |
specifier: ^3.0.2
|
| 28 |
version: 3.0.2
|
| 29 |
+
tailwindcss-spring:
|
| 30 |
+
specifier: ^1.0.1
|
| 31 |
+
version: 1.0.1(tailwindcss@4.0.9)
|
| 32 |
typia:
|
| 33 |
specifier: ^8.0.0
|
| 34 |
version: 8.0.0(@samchon/openapi@3.0.0)(typescript@5.8.2)
|
|
|
|
| 73 |
specifier: ^3.0.0
|
| 74 |
version: 3.0.0
|
| 75 |
'@sveltejs/adapter-auto':
|
| 76 |
+
specifier: ^3.3.1
|
| 77 |
+
version: 3.3.1(@sveltejs/kit@2.37.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))
|
| 78 |
'@sveltejs/adapter-node':
|
| 79 |
+
specifier: ^5.3.1
|
| 80 |
+
version: 5.3.1(@sveltejs/kit@2.37.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))
|
| 81 |
'@sveltejs/kit':
|
| 82 |
+
specifier: ^2.37.1
|
| 83 |
+
version: 2.37.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
|
| 84 |
'@sveltejs/vite-plugin-svelte':
|
| 85 |
+
specifier: ^4.0.4
|
| 86 |
+
version: 4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
|
| 87 |
'@tailwindcss/container-queries':
|
| 88 |
specifier: ^0.1.1
|
| 89 |
version: 0.1.1(tailwindcss@4.0.9)
|
|
|
|
| 95 |
version: 6.6.3
|
| 96 |
'@testing-library/svelte':
|
| 97 |
specifier: ^5.2.4
|
| 98 |
+
version: 5.2.8(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))(vitest@3.1.4)
|
| 99 |
'@types/node':
|
| 100 |
specifier: ^22.14.1
|
| 101 |
version: 22.14.1
|
|
|
|
| 134 |
version: 26.1.0
|
| 135 |
melt:
|
| 136 |
specifier: ^0.36.0
|
| 137 |
+
version: 0.36.0(@floating-ui/dom@1.6.13)(svelte@5.38.7)
|
| 138 |
openai:
|
| 139 |
specifier: ^4.90.0
|
| 140 |
+
version: 4.90.0(ws@8.18.2)(zod@3.25.76)
|
| 141 |
playwright:
|
| 142 |
specifier: ^1.52.0
|
| 143 |
version: 1.52.0
|
|
|
|
| 149 |
version: 3.5.3
|
| 150 |
prettier-plugin-svelte:
|
| 151 |
specifier: ^3.4.0
|
| 152 |
+
version: 3.4.0(prettier@3.5.3)(svelte@5.38.7)
|
| 153 |
prettier-plugin-tailwindcss:
|
| 154 |
specifier: ^0.6.11
|
| 155 |
+
version: 0.6.11(prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.38.7))(prettier@3.5.3)
|
| 156 |
runed:
|
| 157 |
specifier: ^0.25.0
|
| 158 |
+
version: 0.25.0(svelte@5.38.7)
|
| 159 |
shiki:
|
| 160 |
specifier: ^3.4.0
|
| 161 |
version: 3.4.0
|
| 162 |
svelte:
|
| 163 |
+
specifier: ^5.38.7
|
| 164 |
+
version: 5.38.7
|
| 165 |
svelte-check:
|
| 166 |
+
specifier: ^4.3.1
|
| 167 |
+
version: 4.3.1(picomatch@4.0.2)(svelte@5.38.7)(typescript@5.8.2)
|
| 168 |
tailwind-merge:
|
| 169 |
specifier: ^3.0.2
|
| 170 |
version: 3.0.2
|
|
|
|
| 185 |
version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 186 |
unplugin-icons:
|
| 187 |
specifier: ^22.1.0
|
| 188 |
+
version: 22.1.0(svelte@5.38.7)
|
| 189 |
vite:
|
| 190 |
specifier: ^5.4.4
|
| 191 |
version: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
|
|
|
| 194 |
version: 3.1.4(@types/node@22.14.1)(@vitest/browser@3.1.4)(jsdom@26.1.0)(lightningcss@1.29.1)
|
| 195 |
vitest-browser-svelte:
|
| 196 |
specifier: ^0.1.0
|
| 197 |
+
version: 0.1.0(@vitest/browser@3.1.4)(svelte@5.38.7)(vitest@3.1.4)
|
| 198 |
|
| 199 |
packages:
|
| 200 |
|
|
|
|
| 205 |
resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
|
| 206 |
engines: {node: '>=10'}
|
| 207 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 208 |
'@antfu/install-pkg@1.0.0':
|
| 209 |
resolution: {integrity: sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==}
|
| 210 |
|
|
|
|
| 776 |
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
|
| 777 |
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
| 778 |
|
| 779 |
+
'@jridgewell/gen-mapping@0.3.13':
|
| 780 |
+
resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
|
| 781 |
+
|
| 782 |
+
'@jridgewell/remapping@2.3.5':
|
| 783 |
+
resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
|
| 784 |
|
| 785 |
'@jridgewell/resolve-uri@3.1.2':
|
| 786 |
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
|
| 787 |
engines: {node: '>=6.0.0'}
|
| 788 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 789 |
'@jridgewell/sourcemap-codec@1.5.0':
|
| 790 |
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
|
| 791 |
|
| 792 |
+
'@jridgewell/sourcemap-codec@1.5.5':
|
| 793 |
+
resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
|
| 794 |
+
|
| 795 |
'@jridgewell/trace-mapping@0.3.25':
|
| 796 |
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
|
| 797 |
|
| 798 |
+
'@jridgewell/trace-mapping@0.3.30':
|
| 799 |
+
resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
|
| 800 |
+
|
| 801 |
+
'@modelcontextprotocol/sdk@1.17.5':
|
| 802 |
+
resolution: {integrity: sha512-QakrKIGniGuRVfWBdMsDea/dx1PNE739QJ7gCM41s9q+qaCYTHCdsIBXQVVXry3mfWAiaM9kT22Hyz53Uw8mfg==}
|
| 803 |
+
engines: {node: '>=18'}
|
| 804 |
+
|
| 805 |
'@noble/hashes@1.8.0':
|
| 806 |
resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
|
| 807 |
engines: {node: ^14.21.3 || >=16}
|
|
|
|
| 1024 |
'@sinclair/typebox@0.27.8':
|
| 1025 |
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
|
| 1026 |
|
| 1027 |
+
'@standard-schema/spec@1.0.0':
|
| 1028 |
+
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
|
| 1029 |
+
|
| 1030 |
'@sveltejs/acorn-typescript@1.0.5':
|
| 1031 |
resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==}
|
| 1032 |
peerDependencies:
|
|
|
|
| 1037 |
peerDependencies:
|
| 1038 |
'@sveltejs/kit': ^2.0.0
|
| 1039 |
|
| 1040 |
+
'@sveltejs/adapter-node@5.3.1':
|
| 1041 |
+
resolution: {integrity: sha512-PSoGfa9atkmuixe7jvuS2tsUohVZF20So87ASzfMRGTTNqEd8s48KAodlv3CzHwq9XO/BM8KsQLpqqsr/6dmuA==}
|
| 1042 |
peerDependencies:
|
| 1043 |
'@sveltejs/kit': ^2.4.0
|
| 1044 |
|
| 1045 |
+
'@sveltejs/kit@2.37.1':
|
| 1046 |
+
resolution: {integrity: sha512-4T9rF2Roe7RGvHfcn6+n92Yc2NF88k7ljFz9+wE0jWxyencqRpadr2/CvlcQbbTXf1ozmFxgMO6af+qm+1mPFw==}
|
| 1047 |
engines: {node: '>=18.13'}
|
| 1048 |
hasBin: true
|
| 1049 |
peerDependencies:
|
| 1050 |
+
'@opentelemetry/api': ^1.0.0
|
| 1051 |
+
'@sveltejs/vite-plugin-svelte': ^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0
|
| 1052 |
svelte: ^4.0.0 || ^5.0.0-next.0
|
| 1053 |
+
vite: ^5.0.3 || ^6.0.0 || ^7.0.0-beta.0
|
| 1054 |
+
peerDependenciesMeta:
|
| 1055 |
+
'@opentelemetry/api':
|
| 1056 |
+
optional: true
|
| 1057 |
|
| 1058 |
'@sveltejs/vite-plugin-svelte-inspector@3.0.1':
|
| 1059 |
resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==}
|
|
|
|
| 1314 |
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
|
| 1315 |
engines: {node: '>=6.5'}
|
| 1316 |
|
| 1317 |
+
accepts@2.0.0:
|
| 1318 |
+
resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
|
| 1319 |
+
engines: {node: '>= 0.6'}
|
| 1320 |
+
|
| 1321 |
acorn-jsx@5.3.2:
|
| 1322 |
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
| 1323 |
peerDependencies:
|
|
|
|
| 1328 |
engines: {node: '>=0.4.0'}
|
| 1329 |
hasBin: true
|
| 1330 |
|
| 1331 |
+
acorn@8.15.0:
|
| 1332 |
+
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
|
| 1333 |
+
engines: {node: '>=0.4.0'}
|
| 1334 |
+
hasBin: true
|
| 1335 |
+
|
| 1336 |
agent-base@7.1.3:
|
| 1337 |
resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==}
|
| 1338 |
engines: {node: '>= 14'}
|
|
|
|
| 1397 |
bl@4.1.0:
|
| 1398 |
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
|
| 1399 |
|
| 1400 |
+
body-parser@2.2.0:
|
| 1401 |
+
resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==}
|
| 1402 |
+
engines: {node: '>=18'}
|
| 1403 |
+
|
| 1404 |
boolean@3.2.0:
|
| 1405 |
resolution: {integrity: sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==}
|
| 1406 |
deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.
|
|
|
|
| 1418 |
buffer@5.7.1:
|
| 1419 |
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
| 1420 |
|
| 1421 |
+
bytes@3.1.2:
|
| 1422 |
+
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
|
| 1423 |
+
engines: {node: '>= 0.8'}
|
| 1424 |
+
|
| 1425 |
cac@6.7.14:
|
| 1426 |
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
|
| 1427 |
engines: {node: '>=8'}
|
|
|
|
| 1430 |
resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
|
| 1431 |
engines: {node: '>= 0.4'}
|
| 1432 |
|
| 1433 |
+
call-bound@1.0.4:
|
| 1434 |
+
resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
|
| 1435 |
+
engines: {node: '>= 0.4'}
|
| 1436 |
+
|
| 1437 |
callsites@3.1.0:
|
| 1438 |
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
|
| 1439 |
engines: {node: '>=6'}
|
|
|
|
| 1542 |
resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
|
| 1543 |
engines: {node: ^14.18.0 || >=16.10.0}
|
| 1544 |
|
| 1545 |
+
content-disposition@1.0.0:
|
| 1546 |
+
resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==}
|
| 1547 |
+
engines: {node: '>= 0.6'}
|
| 1548 |
+
|
| 1549 |
+
content-type@1.0.5:
|
| 1550 |
+
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
|
| 1551 |
+
engines: {node: '>= 0.6'}
|
| 1552 |
+
|
| 1553 |
+
cookie-signature@1.2.2:
|
| 1554 |
+
resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
|
| 1555 |
+
engines: {node: '>=6.6.0'}
|
| 1556 |
+
|
| 1557 |
cookie@0.6.0:
|
| 1558 |
resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==}
|
| 1559 |
engines: {node: '>= 0.6'}
|
| 1560 |
|
| 1561 |
+
cookie@0.7.2:
|
| 1562 |
+
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
|
| 1563 |
+
engines: {node: '>= 0.6'}
|
| 1564 |
+
|
| 1565 |
core-util-is@1.0.3:
|
| 1566 |
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
|
| 1567 |
|
| 1568 |
+
cors@2.8.5:
|
| 1569 |
+
resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
|
| 1570 |
+
engines: {node: '>= 0.10'}
|
| 1571 |
+
|
| 1572 |
cross-spawn@7.0.6:
|
| 1573 |
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
| 1574 |
engines: {node: '>= 8'}
|
|
|
|
| 1630 |
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
|
| 1631 |
engines: {node: '>=0.4.0'}
|
| 1632 |
|
| 1633 |
+
depd@2.0.0:
|
| 1634 |
+
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
|
| 1635 |
+
engines: {node: '>= 0.8'}
|
| 1636 |
+
|
| 1637 |
dequal@2.0.3:
|
| 1638 |
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
|
| 1639 |
engines: {node: '>=6'}
|
|
|
|
| 1650 |
detect-node@2.1.0:
|
| 1651 |
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
|
| 1652 |
|
| 1653 |
+
devalue@5.3.2:
|
| 1654 |
+
resolution: {integrity: sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==}
|
| 1655 |
|
| 1656 |
devlop@1.1.0:
|
| 1657 |
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
|
|
|
|
| 1681 |
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
|
| 1682 |
engines: {node: '>= 0.4'}
|
| 1683 |
|
| 1684 |
+
ee-first@1.1.1:
|
| 1685 |
+
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
|
| 1686 |
+
|
| 1687 |
emoji-regex@8.0.0:
|
| 1688 |
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
| 1689 |
|
| 1690 |
+
encodeurl@2.0.0:
|
| 1691 |
+
resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
|
| 1692 |
+
engines: {node: '>= 0.8'}
|
| 1693 |
+
|
| 1694 |
enhanced-resolve@5.18.1:
|
| 1695 |
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
|
| 1696 |
engines: {node: '>=10.13.0'}
|
|
|
|
| 1731 |
engines: {node: '>=18'}
|
| 1732 |
hasBin: true
|
| 1733 |
|
| 1734 |
+
escape-html@1.0.3:
|
| 1735 |
+
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
|
| 1736 |
+
|
| 1737 |
escape-string-regexp@1.0.5:
|
| 1738 |
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
|
| 1739 |
engines: {node: '>=0.8.0'}
|
|
|
|
| 1762 |
eslint-config-prettier:
|
| 1763 |
optional: true
|
| 1764 |
|
| 1765 |
+
eslint-plugin-svelte@3.12.2:
|
| 1766 |
+
resolution: {integrity: sha512-NDYltSWcDybvnXD5P3NtrLAfdrgr2lklZsXpyIoSlQfg2d80p/E853XXccu+uVn+w4+Q/iHy4oRw00GJH9I/Cg==}
|
| 1767 |
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 1768 |
peerDependencies:
|
| 1769 |
eslint: ^8.57.1 || ^9.0.0
|
|
|
|
| 1831 |
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
|
| 1832 |
engines: {node: '>=0.10.0'}
|
| 1833 |
|
| 1834 |
+
etag@1.8.1:
|
| 1835 |
+
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
|
| 1836 |
+
engines: {node: '>= 0.6'}
|
| 1837 |
+
|
| 1838 |
event-target-shim@5.0.1:
|
| 1839 |
resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
|
| 1840 |
engines: {node: '>=6'}
|
| 1841 |
|
| 1842 |
+
eventsource-parser@3.0.6:
|
| 1843 |
+
resolution: {integrity: sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==}
|
| 1844 |
+
engines: {node: '>=18.0.0'}
|
| 1845 |
+
|
| 1846 |
+
eventsource@3.0.7:
|
| 1847 |
+
resolution: {integrity: sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==}
|
| 1848 |
+
engines: {node: '>=18.0.0'}
|
| 1849 |
+
|
| 1850 |
expect-type@1.2.1:
|
| 1851 |
resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==}
|
| 1852 |
engines: {node: '>=12.0.0'}
|
| 1853 |
|
| 1854 |
+
express-rate-limit@7.5.1:
|
| 1855 |
+
resolution: {integrity: sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw==}
|
| 1856 |
+
engines: {node: '>= 16'}
|
| 1857 |
+
peerDependencies:
|
| 1858 |
+
express: '>= 4.11'
|
| 1859 |
+
|
| 1860 |
+
express@5.1.0:
|
| 1861 |
+
resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==}
|
| 1862 |
+
engines: {node: '>= 18'}
|
| 1863 |
+
|
| 1864 |
exsolve@1.0.4:
|
| 1865 |
resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==}
|
| 1866 |
|
|
|
|
| 1919 |
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
|
| 1920 |
engines: {node: '>=8'}
|
| 1921 |
|
| 1922 |
+
finalhandler@2.1.0:
|
| 1923 |
+
resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==}
|
| 1924 |
+
engines: {node: '>= 0.8'}
|
| 1925 |
+
|
| 1926 |
find-cache-dir@5.0.0:
|
| 1927 |
resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==}
|
| 1928 |
engines: {node: '>=16'}
|
|
|
|
| 1956 |
resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==}
|
| 1957 |
engines: {node: '>= 12.20'}
|
| 1958 |
|
| 1959 |
+
forwarded@0.2.0:
|
| 1960 |
+
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
|
| 1961 |
+
engines: {node: '>= 0.6'}
|
| 1962 |
+
|
| 1963 |
+
fresh@2.0.0:
|
| 1964 |
+
resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
|
| 1965 |
+
engines: {node: '>= 0.8'}
|
| 1966 |
+
|
| 1967 |
fsevents@2.3.2:
|
| 1968 |
resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
|
| 1969 |
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
|
|
|
| 2070 |
html-void-elements@3.0.0:
|
| 2071 |
resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
|
| 2072 |
|
| 2073 |
+
http-errors@2.0.0:
|
| 2074 |
+
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
|
| 2075 |
+
engines: {node: '>= 0.8'}
|
| 2076 |
+
|
| 2077 |
http-proxy-agent@7.0.2:
|
| 2078 |
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
|
| 2079 |
engines: {node: '>= 14'}
|
|
|
|
| 2093 |
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
|
| 2094 |
engines: {node: '>=0.10.0'}
|
| 2095 |
|
| 2096 |
+
iconv-lite@0.7.0:
|
| 2097 |
+
resolution: {integrity: sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==}
|
| 2098 |
+
engines: {node: '>=0.10.0'}
|
| 2099 |
+
|
| 2100 |
ieee754@1.2.1:
|
| 2101 |
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
|
| 2102 |
|
|
|
|
| 2130 |
resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
|
| 2131 |
engines: {node: '>=12.0.0'}
|
| 2132 |
|
| 2133 |
+
ipaddr.js@1.9.1:
|
| 2134 |
+
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
|
| 2135 |
+
engines: {node: '>= 0.10'}
|
| 2136 |
+
|
| 2137 |
is-arrayish@0.3.2:
|
| 2138 |
resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==}
|
| 2139 |
|
|
|
|
| 2167 |
is-potential-custom-element-name@1.0.1:
|
| 2168 |
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
|
| 2169 |
|
| 2170 |
+
is-promise@4.0.0:
|
| 2171 |
+
resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
|
| 2172 |
+
|
| 2173 |
is-reference@1.2.1:
|
| 2174 |
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
|
| 2175 |
|
|
|
|
| 2387 |
mdast-util-to-hast@13.2.0:
|
| 2388 |
resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==}
|
| 2389 |
|
| 2390 |
+
media-typer@1.1.0:
|
| 2391 |
+
resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
|
| 2392 |
+
engines: {node: '>= 0.8'}
|
| 2393 |
+
|
| 2394 |
melt@0.36.0:
|
| 2395 |
resolution: {integrity: sha512-lJdUuPvsCZs7zpcL2iSvxerHxv3QuM91FoTbdsliOQ2+J3fR4ADqUN878J4kkQSzzHlWqyedQmEBDP6U3iEWgA==}
|
| 2396 |
peerDependencies:
|
| 2397 |
'@floating-ui/dom': ^1.6.0
|
| 2398 |
svelte: ^5.30.1
|
| 2399 |
|
| 2400 |
+
merge-descriptors@2.0.0:
|
| 2401 |
+
resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
|
| 2402 |
+
engines: {node: '>=18'}
|
| 2403 |
+
|
| 2404 |
merge2@1.4.1:
|
| 2405 |
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
| 2406 |
engines: {node: '>= 8'}
|
|
|
|
| 2428 |
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
|
| 2429 |
engines: {node: '>= 0.6'}
|
| 2430 |
|
| 2431 |
+
mime-db@1.54.0:
|
| 2432 |
+
resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
|
| 2433 |
+
engines: {node: '>= 0.6'}
|
| 2434 |
+
|
| 2435 |
mime-types@2.1.35:
|
| 2436 |
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
|
| 2437 |
engines: {node: '>= 0.6'}
|
| 2438 |
|
| 2439 |
+
mime-types@3.0.1:
|
| 2440 |
+
resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==}
|
| 2441 |
+
engines: {node: '>= 0.6'}
|
| 2442 |
+
|
| 2443 |
mimic-fn@2.1.0:
|
| 2444 |
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
|
| 2445 |
engines: {node: '>=6'}
|
|
|
|
| 2501 |
natural-compare@1.4.0:
|
| 2502 |
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
| 2503 |
|
| 2504 |
+
negotiator@1.0.0:
|
| 2505 |
+
resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
|
| 2506 |
+
engines: {node: '>= 0.6'}
|
| 2507 |
+
|
| 2508 |
node-domexception@1.0.0:
|
| 2509 |
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
| 2510 |
engines: {node: '>=10.5.0'}
|
|
|
|
| 2521 |
nwsapi@2.2.20:
|
| 2522 |
resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==}
|
| 2523 |
|
| 2524 |
+
object-assign@4.1.1:
|
| 2525 |
+
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
|
| 2526 |
+
engines: {node: '>=0.10.0'}
|
| 2527 |
+
|
| 2528 |
+
object-inspect@1.13.4:
|
| 2529 |
+
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
|
| 2530 |
+
engines: {node: '>= 0.4'}
|
| 2531 |
+
|
| 2532 |
object-keys@1.1.1:
|
| 2533 |
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
|
| 2534 |
engines: {node: '>= 0.4'}
|
| 2535 |
|
| 2536 |
+
on-finished@2.4.1:
|
| 2537 |
+
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
|
| 2538 |
+
engines: {node: '>= 0.8'}
|
| 2539 |
+
|
| 2540 |
+
once@1.4.0:
|
| 2541 |
+
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
| 2542 |
+
|
| 2543 |
onetime@5.1.2:
|
| 2544 |
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
|
| 2545 |
engines: {node: '>=6'}
|
|
|
|
| 2613 |
parse5@7.3.0:
|
| 2614 |
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
|
| 2615 |
|
| 2616 |
+
parseurl@1.3.3:
|
| 2617 |
+
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
|
| 2618 |
+
engines: {node: '>= 0.8'}
|
| 2619 |
+
|
| 2620 |
path-exists@4.0.0:
|
| 2621 |
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
|
| 2622 |
engines: {node: '>=8'}
|
|
|
|
| 2632 |
path-parse@1.0.7:
|
| 2633 |
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
|
| 2634 |
|
| 2635 |
+
path-to-regexp@8.3.0:
|
| 2636 |
+
resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
|
| 2637 |
+
|
| 2638 |
pathe@1.1.2:
|
| 2639 |
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
|
| 2640 |
|
|
|
|
| 2656 |
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
|
| 2657 |
engines: {node: '>=12'}
|
| 2658 |
|
| 2659 |
+
pkce-challenge@5.0.0:
|
| 2660 |
+
resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==}
|
| 2661 |
+
engines: {node: '>=16.20.0'}
|
| 2662 |
+
|
| 2663 |
pkg-dir@7.0.0:
|
| 2664 |
resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==}
|
| 2665 |
engines: {node: '>=14.16'}
|
|
|
|
| 2808 |
resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==}
|
| 2809 |
engines: {node: '>=12.0.0'}
|
| 2810 |
|
| 2811 |
+
proxy-addr@2.0.7:
|
| 2812 |
+
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
|
| 2813 |
+
engines: {node: '>= 0.10'}
|
| 2814 |
+
|
| 2815 |
punycode@2.3.1:
|
| 2816 |
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
| 2817 |
engines: {node: '>=6'}
|
| 2818 |
|
| 2819 |
+
qs@6.14.0:
|
| 2820 |
+
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
|
| 2821 |
+
engines: {node: '>=0.6'}
|
| 2822 |
+
|
| 2823 |
quansync@0.2.8:
|
| 2824 |
resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==}
|
| 2825 |
|
|
|
|
| 2830 |
resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==}
|
| 2831 |
engines: {node: '>=4'}
|
| 2832 |
|
| 2833 |
+
range-parser@1.2.1:
|
| 2834 |
+
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
|
| 2835 |
+
engines: {node: '>= 0.6'}
|
| 2836 |
+
|
| 2837 |
+
raw-body@3.0.1:
|
| 2838 |
+
resolution: {integrity: sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA==}
|
| 2839 |
+
engines: {node: '>= 0.10'}
|
| 2840 |
+
|
| 2841 |
react-is@17.0.2:
|
| 2842 |
resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==}
|
| 2843 |
|
|
|
|
| 2905 |
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
| 2906 |
hasBin: true
|
| 2907 |
|
| 2908 |
+
router@2.2.0:
|
| 2909 |
+
resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
|
| 2910 |
+
engines: {node: '>= 18'}
|
| 2911 |
+
|
| 2912 |
rrweb-cssom@0.8.0:
|
| 2913 |
resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==}
|
| 2914 |
|
|
|
|
| 2959 |
engines: {node: '>=10'}
|
| 2960 |
hasBin: true
|
| 2961 |
|
| 2962 |
+
send@1.2.0:
|
| 2963 |
+
resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==}
|
| 2964 |
+
engines: {node: '>= 18'}
|
| 2965 |
+
|
| 2966 |
serialize-error@7.0.1:
|
| 2967 |
resolution: {integrity: sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==}
|
| 2968 |
engines: {node: '>=10'}
|
| 2969 |
|
| 2970 |
+
serve-static@2.2.0:
|
| 2971 |
+
resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==}
|
| 2972 |
+
engines: {node: '>= 18'}
|
| 2973 |
+
|
| 2974 |
set-cookie-parser@2.7.1:
|
| 2975 |
resolution: {integrity: sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==}
|
| 2976 |
|
| 2977 |
+
setprototypeof@1.2.0:
|
| 2978 |
+
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
|
| 2979 |
+
|
| 2980 |
sharp@0.34.2:
|
| 2981 |
resolution: {integrity: sha512-lszvBmB9QURERtyKT2bNmsgxXK0ShJrL/fvqlonCo7e6xBF8nT8xU6pW+PMIbLsz0RxQk3rgH9kd8UmvOzlMJg==}
|
| 2982 |
engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0}
|
|
|
|
| 2992 |
shiki@3.4.0:
|
| 2993 |
resolution: {integrity: sha512-Ni80XHcqhOEXv5mmDAvf5p6PAJqbUc/RzFeaOqk+zP5DLvTPS3j0ckvA+MI87qoxTQ5RGJDVTbdl/ENLSyyAnQ==}
|
| 2994 |
|
| 2995 |
+
side-channel-list@1.0.0:
|
| 2996 |
+
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
|
| 2997 |
+
engines: {node: '>= 0.4'}
|
| 2998 |
+
|
| 2999 |
+
side-channel-map@1.0.1:
|
| 3000 |
+
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
|
| 3001 |
+
engines: {node: '>= 0.4'}
|
| 3002 |
+
|
| 3003 |
+
side-channel-weakmap@1.0.2:
|
| 3004 |
+
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
|
| 3005 |
+
engines: {node: '>= 0.4'}
|
| 3006 |
+
|
| 3007 |
+
side-channel@1.1.0:
|
| 3008 |
+
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
|
| 3009 |
+
engines: {node: '>= 0.4'}
|
| 3010 |
+
|
| 3011 |
siginfo@2.0.0:
|
| 3012 |
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
|
| 3013 |
|
|
|
|
| 3034 |
stackback@0.0.2:
|
| 3035 |
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
|
| 3036 |
|
| 3037 |
+
statuses@2.0.1:
|
| 3038 |
+
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
|
| 3039 |
+
engines: {node: '>= 0.8'}
|
| 3040 |
+
|
| 3041 |
+
statuses@2.0.2:
|
| 3042 |
+
resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
|
| 3043 |
+
engines: {node: '>= 0.8'}
|
| 3044 |
+
|
| 3045 |
std-env@3.9.0:
|
| 3046 |
resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==}
|
| 3047 |
|
|
|
|
| 3075 |
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
| 3076 |
engines: {node: '>= 0.4'}
|
| 3077 |
|
| 3078 |
+
svelte-check@4.3.1:
|
| 3079 |
+
resolution: {integrity: sha512-lkh8gff5gpHLjxIV+IaApMxQhTGnir2pNUAqcNgeKkvK5bT/30Ey/nzBxNLDlkztCH4dP7PixkMt9SWEKFPBWg==}
|
| 3080 |
engines: {node: '>= 18.0.0'}
|
| 3081 |
hasBin: true
|
| 3082 |
peerDependencies:
|
|
|
|
| 3092 |
svelte:
|
| 3093 |
optional: true
|
| 3094 |
|
| 3095 |
+
svelte@5.38.7:
|
| 3096 |
+
resolution: {integrity: sha512-1ld9TPZSdUS3EtYGQzisU2nhwXoIzNQcZ71IOU9fEmltaUofQnVfW5CQuhgM/zFsZ43arZXS1BRKi0MYgUV91w==}
|
| 3097 |
engines: {node: '>=18'}
|
| 3098 |
|
| 3099 |
symbol-tree@3.2.4:
|
|
|
|
| 3106 |
tailwind-merge@3.0.2:
|
| 3107 |
resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==}
|
| 3108 |
|
| 3109 |
+
tailwindcss-spring@1.0.1:
|
| 3110 |
+
resolution: {integrity: sha512-v8ibKyVCgbFcHzP9EFSbsvR0vH7Vk2Skl9JnJ9HUrnA16NhjvI4SlV9Y4SkinL+4bNrm1XpftZwX1DAD1mNZFA==}
|
| 3111 |
+
peerDependencies:
|
| 3112 |
+
tailwindcss: '>=3.0.0 || insiders'
|
| 3113 |
+
|
| 3114 |
tailwindcss@4.0.9:
|
| 3115 |
resolution: {integrity: sha512-12laZu+fv1ONDRoNR9ipTOpUD7RN9essRVkX36sjxuRUInpN7hIiHN4lBd/SIFjbISvnXzp8h/hXzmU8SQQYhw==}
|
| 3116 |
|
|
|
|
| 3162 |
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
|
| 3163 |
engines: {node: '>=8.0'}
|
| 3164 |
|
| 3165 |
+
toidentifier@1.0.1:
|
| 3166 |
+
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
|
| 3167 |
+
engines: {node: '>=0.6'}
|
| 3168 |
+
|
| 3169 |
totalist@3.0.1:
|
| 3170 |
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
|
| 3171 |
engines: {node: '>=6'}
|
|
|
|
| 3213 |
resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==}
|
| 3214 |
engines: {node: '>=16'}
|
| 3215 |
|
| 3216 |
+
type-is@2.0.1:
|
| 3217 |
+
resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
|
| 3218 |
+
engines: {node: '>= 0.6'}
|
| 3219 |
+
|
| 3220 |
typescript-eslint@8.26.1:
|
| 3221 |
resolution: {integrity: sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==}
|
| 3222 |
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
|
|
|
| 3272 |
unist-util-visit@5.0.0:
|
| 3273 |
resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
|
| 3274 |
|
| 3275 |
+
unpipe@1.0.0:
|
| 3276 |
+
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
|
| 3277 |
+
engines: {node: '>= 0.8'}
|
| 3278 |
+
|
| 3279 |
unplugin-icons@22.1.0:
|
| 3280 |
resolution: {integrity: sha512-ect2ZNtk1Zgwb0NVHd0C1IDW/MV+Jk/xaq4t8o6rYdVS3+L660ZdD5kTSQZvsgdwCvquRw+/wYn75hsweRjoIA==}
|
| 3281 |
peerDependencies:
|
|
|
|
| 3317 |
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
|
| 3318 |
hasBin: true
|
| 3319 |
|
| 3320 |
+
vary@1.1.2:
|
| 3321 |
+
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
|
| 3322 |
+
engines: {node: '>= 0.8'}
|
| 3323 |
+
|
| 3324 |
vfile-message@4.0.2:
|
| 3325 |
resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
|
| 3326 |
|
|
|
|
| 3506 |
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
|
| 3507 |
engines: {node: '>=8'}
|
| 3508 |
|
| 3509 |
+
wrappy@1.0.2:
|
| 3510 |
+
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
| 3511 |
+
|
| 3512 |
ws@8.18.2:
|
| 3513 |
resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==}
|
| 3514 |
engines: {node: '>=10.0.0'}
|
|
|
|
| 3552 |
zimmerframe@1.1.2:
|
| 3553 |
resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
|
| 3554 |
|
| 3555 |
+
zod-to-json-schema@3.24.6:
|
| 3556 |
+
resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==}
|
| 3557 |
+
peerDependencies:
|
| 3558 |
+
zod: ^3.24.1
|
| 3559 |
+
|
| 3560 |
+
zod@3.25.76:
|
| 3561 |
+
resolution: {integrity: sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==}
|
| 3562 |
+
|
| 3563 |
zwitch@2.0.4:
|
| 3564 |
resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==}
|
| 3565 |
|
|
|
|
| 3569 |
|
| 3570 |
'@alloc/quick-lru@5.2.0': {}
|
| 3571 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3572 |
'@antfu/install-pkg@1.0.0':
|
| 3573 |
dependencies:
|
| 3574 |
package-manager-detector: 0.2.11
|
|
|
|
| 3972 |
dependencies:
|
| 3973 |
'@sinclair/typebox': 0.27.8
|
| 3974 |
|
| 3975 |
+
'@jridgewell/gen-mapping@0.3.13':
|
| 3976 |
dependencies:
|
|
|
|
| 3977 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3978 |
+
'@jridgewell/trace-mapping': 0.3.30
|
| 3979 |
|
| 3980 |
+
'@jridgewell/remapping@2.3.5':
|
| 3981 |
+
dependencies:
|
| 3982 |
+
'@jridgewell/gen-mapping': 0.3.13
|
| 3983 |
+
'@jridgewell/trace-mapping': 0.3.30
|
| 3984 |
|
| 3985 |
+
'@jridgewell/resolve-uri@3.1.2': {}
|
| 3986 |
|
| 3987 |
'@jridgewell/sourcemap-codec@1.5.0': {}
|
| 3988 |
|
| 3989 |
+
'@jridgewell/sourcemap-codec@1.5.5': {}
|
| 3990 |
+
|
| 3991 |
'@jridgewell/trace-mapping@0.3.25':
|
| 3992 |
dependencies:
|
| 3993 |
'@jridgewell/resolve-uri': 3.1.2
|
| 3994 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3995 |
|
| 3996 |
+
'@jridgewell/trace-mapping@0.3.30':
|
| 3997 |
+
dependencies:
|
| 3998 |
+
'@jridgewell/resolve-uri': 3.1.2
|
| 3999 |
+
'@jridgewell/sourcemap-codec': 1.5.0
|
| 4000 |
+
|
| 4001 |
+
'@modelcontextprotocol/sdk@1.17.5':
|
| 4002 |
+
dependencies:
|
| 4003 |
+
ajv: 6.12.6
|
| 4004 |
+
content-type: 1.0.5
|
| 4005 |
+
cors: 2.8.5
|
| 4006 |
+
cross-spawn: 7.0.6
|
| 4007 |
+
eventsource: 3.0.7
|
| 4008 |
+
eventsource-parser: 3.0.6
|
| 4009 |
+
express: 5.1.0
|
| 4010 |
+
express-rate-limit: 7.5.1(express@5.1.0)
|
| 4011 |
+
pkce-challenge: 5.0.0
|
| 4012 |
+
raw-body: 3.0.1
|
| 4013 |
+
zod: 3.25.76
|
| 4014 |
+
zod-to-json-schema: 3.24.6(zod@3.25.76)
|
| 4015 |
+
transitivePeerDependencies:
|
| 4016 |
+
- supports-color
|
| 4017 |
+
|
| 4018 |
'@noble/hashes@1.8.0': {}
|
| 4019 |
|
| 4020 |
'@nodelib/fs.scandir@2.1.5':
|
|
|
|
| 4224 |
|
| 4225 |
'@sinclair/typebox@0.27.8': {}
|
| 4226 |
|
| 4227 |
+
'@standard-schema/spec@1.0.0': {}
|
| 4228 |
+
|
| 4229 |
'@sveltejs/acorn-typescript@1.0.5(acorn@8.14.0)':
|
| 4230 |
dependencies:
|
| 4231 |
acorn: 8.14.0
|
| 4232 |
|
| 4233 |
+
'@sveltejs/acorn-typescript@1.0.5(acorn@8.15.0)':
|
| 4234 |
dependencies:
|
| 4235 |
+
acorn: 8.15.0
|
| 4236 |
+
|
| 4237 |
+
'@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.37.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))':
|
| 4238 |
+
dependencies:
|
| 4239 |
+
'@sveltejs/kit': 2.37.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
|
| 4240 |
import-meta-resolve: 4.1.0
|
| 4241 |
|
| 4242 |
+
'@sveltejs/adapter-node@5.3.1(@sveltejs/kit@2.37.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))':
|
| 4243 |
dependencies:
|
| 4244 |
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.9)
|
| 4245 |
'@rollup/plugin-json': 6.1.0(rollup@4.34.9)
|
| 4246 |
'@rollup/plugin-node-resolve': 16.0.0(rollup@4.34.9)
|
| 4247 |
+
'@sveltejs/kit': 2.37.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
|
| 4248 |
rollup: 4.34.9
|
| 4249 |
|
| 4250 |
+
'@sveltejs/kit@2.37.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))':
|
| 4251 |
dependencies:
|
| 4252 |
+
'@standard-schema/spec': 1.0.0
|
| 4253 |
+
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.15.0)
|
| 4254 |
+
'@sveltejs/vite-plugin-svelte': 4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
|
| 4255 |
'@types/cookie': 0.6.0
|
| 4256 |
+
acorn: 8.15.0
|
| 4257 |
cookie: 0.6.0
|
| 4258 |
+
devalue: 5.3.2
|
| 4259 |
esm-env: 1.2.2
|
|
|
|
| 4260 |
kleur: 4.1.5
|
| 4261 |
magic-string: 0.30.17
|
| 4262 |
mrmime: 2.0.1
|
| 4263 |
sade: 1.8.1
|
| 4264 |
set-cookie-parser: 2.7.1
|
| 4265 |
sirv: 3.0.1
|
| 4266 |
+
svelte: 5.38.7
|
| 4267 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 4268 |
|
| 4269 |
+
'@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))':
|
| 4270 |
dependencies:
|
| 4271 |
+
'@sveltejs/vite-plugin-svelte': 4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
|
| 4272 |
debug: 4.4.0
|
| 4273 |
+
svelte: 5.38.7
|
| 4274 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 4275 |
transitivePeerDependencies:
|
| 4276 |
- supports-color
|
| 4277 |
|
| 4278 |
+
'@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))':
|
| 4279 |
dependencies:
|
| 4280 |
+
'@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)))(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
|
| 4281 |
debug: 4.4.0
|
| 4282 |
deepmerge: 4.3.1
|
| 4283 |
kleur: 4.1.5
|
| 4284 |
magic-string: 0.30.17
|
| 4285 |
+
svelte: 5.38.7
|
| 4286 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 4287 |
vitefu: 1.0.6(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))
|
| 4288 |
transitivePeerDependencies:
|
|
|
|
| 4383 |
lodash: 4.17.21
|
| 4384 |
redent: 3.0.0
|
| 4385 |
|
| 4386 |
+
'@testing-library/svelte@5.2.8(svelte@5.38.7)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))(vitest@3.1.4)':
|
| 4387 |
dependencies:
|
| 4388 |
'@testing-library/dom': 10.4.0
|
| 4389 |
+
svelte: 5.38.7
|
| 4390 |
optionalDependencies:
|
| 4391 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 4392 |
vitest: 3.1.4(@types/node@22.14.1)(@vitest/browser@3.1.4)(jsdom@26.1.0)(lightningcss@1.29.1)
|
|
|
|
| 4570 |
dependencies:
|
| 4571 |
event-target-shim: 5.0.1
|
| 4572 |
|
| 4573 |
+
accepts@2.0.0:
|
| 4574 |
+
dependencies:
|
| 4575 |
+
mime-types: 3.0.1
|
| 4576 |
+
negotiator: 1.0.0
|
| 4577 |
+
|
| 4578 |
acorn-jsx@5.3.2(acorn@8.14.0):
|
| 4579 |
dependencies:
|
| 4580 |
acorn: 8.14.0
|
| 4581 |
|
| 4582 |
acorn@8.14.0: {}
|
| 4583 |
|
| 4584 |
+
acorn@8.15.0: {}
|
| 4585 |
+
|
| 4586 |
agent-base@7.1.3: {}
|
| 4587 |
|
| 4588 |
agentkeepalive@4.6.0:
|
|
|
|
| 4636 |
inherits: 2.0.4
|
| 4637 |
readable-stream: 3.6.2
|
| 4638 |
|
| 4639 |
+
body-parser@2.2.0:
|
| 4640 |
+
dependencies:
|
| 4641 |
+
bytes: 3.1.2
|
| 4642 |
+
content-type: 1.0.5
|
| 4643 |
+
debug: 4.4.0
|
| 4644 |
+
http-errors: 2.0.0
|
| 4645 |
+
iconv-lite: 0.6.3
|
| 4646 |
+
on-finished: 2.4.1
|
| 4647 |
+
qs: 6.14.0
|
| 4648 |
+
raw-body: 3.0.1
|
| 4649 |
+
type-is: 2.0.1
|
| 4650 |
+
transitivePeerDependencies:
|
| 4651 |
+
- supports-color
|
| 4652 |
+
|
| 4653 |
boolean@3.2.0: {}
|
| 4654 |
|
| 4655 |
brace-expansion@1.1.11:
|
|
|
|
| 4670 |
base64-js: 1.5.1
|
| 4671 |
ieee754: 1.2.1
|
| 4672 |
|
| 4673 |
+
bytes@3.1.2: {}
|
| 4674 |
+
|
| 4675 |
cac@6.7.14: {}
|
| 4676 |
|
| 4677 |
call-bind-apply-helpers@1.0.2:
|
|
|
|
| 4679 |
es-errors: 1.3.0
|
| 4680 |
function-bind: 1.1.2
|
| 4681 |
|
| 4682 |
+
call-bound@1.0.4:
|
| 4683 |
+
dependencies:
|
| 4684 |
+
call-bind-apply-helpers: 1.0.2
|
| 4685 |
+
get-intrinsic: 1.3.0
|
| 4686 |
+
|
| 4687 |
callsites@3.1.0: {}
|
| 4688 |
|
| 4689 |
ccount@2.0.1: {}
|
|
|
|
| 4776 |
|
| 4777 |
consola@3.4.0: {}
|
| 4778 |
|
| 4779 |
+
content-disposition@1.0.0:
|
| 4780 |
+
dependencies:
|
| 4781 |
+
safe-buffer: 5.2.1
|
| 4782 |
+
|
| 4783 |
+
content-type@1.0.5: {}
|
| 4784 |
+
|
| 4785 |
+
cookie-signature@1.2.2: {}
|
| 4786 |
+
|
| 4787 |
cookie@0.6.0: {}
|
| 4788 |
|
| 4789 |
+
cookie@0.7.2: {}
|
| 4790 |
+
|
| 4791 |
core-util-is@1.0.3: {}
|
| 4792 |
|
| 4793 |
+
cors@2.8.5:
|
| 4794 |
+
dependencies:
|
| 4795 |
+
object-assign: 4.1.1
|
| 4796 |
+
vary: 1.1.2
|
| 4797 |
+
|
| 4798 |
cross-spawn@7.0.6:
|
| 4799 |
dependencies:
|
| 4800 |
path-key: 3.1.1
|
|
|
|
| 4847 |
|
| 4848 |
delayed-stream@1.0.0: {}
|
| 4849 |
|
| 4850 |
+
depd@2.0.0: {}
|
| 4851 |
+
|
| 4852 |
dequal@2.0.3: {}
|
| 4853 |
|
| 4854 |
detect-libc@1.0.3: {}
|
|
|
|
| 4857 |
|
| 4858 |
detect-node@2.1.0: {}
|
| 4859 |
|
| 4860 |
+
devalue@5.3.2: {}
|
| 4861 |
|
| 4862 |
devlop@1.1.0:
|
| 4863 |
dependencies:
|
|
|
|
| 4881 |
es-errors: 1.3.0
|
| 4882 |
gopd: 1.2.0
|
| 4883 |
|
| 4884 |
+
ee-first@1.1.1: {}
|
| 4885 |
+
|
| 4886 |
emoji-regex@8.0.0: {}
|
| 4887 |
|
| 4888 |
+
encodeurl@2.0.0: {}
|
| 4889 |
+
|
| 4890 |
enhanced-resolve@5.18.1:
|
| 4891 |
dependencies:
|
| 4892 |
graceful-fs: 4.2.11
|
|
|
|
| 4967 |
'@esbuild/win32-ia32': 0.25.1
|
| 4968 |
'@esbuild/win32-x64': 0.25.1
|
| 4969 |
|
| 4970 |
+
escape-html@1.0.3: {}
|
| 4971 |
+
|
| 4972 |
escape-string-regexp@1.0.5: {}
|
| 4973 |
|
| 4974 |
escape-string-regexp@4.0.0: {}
|
|
|
|
| 4986 |
optionalDependencies:
|
| 4987 |
eslint-config-prettier: 10.1.1(eslint@9.22.0(jiti@2.4.2))
|
| 4988 |
|
| 4989 |
+
eslint-plugin-svelte@3.12.2(eslint@9.22.0(jiti@2.4.2))(svelte@5.38.7):
|
| 4990 |
dependencies:
|
| 4991 |
'@eslint-community/eslint-utils': 4.7.0(eslint@9.22.0(jiti@2.4.2))
|
| 4992 |
'@jridgewell/sourcemap-codec': 1.5.0
|
|
|
|
| 4998 |
postcss-load-config: 3.1.4(postcss@8.5.3)
|
| 4999 |
postcss-safe-parser: 7.0.1(postcss@8.5.3)
|
| 5000 |
semver: 7.7.2
|
| 5001 |
+
svelte-eslint-parser: 1.3.0(svelte@5.38.7)
|
| 5002 |
optionalDependencies:
|
| 5003 |
+
svelte: 5.38.7
|
| 5004 |
transitivePeerDependencies:
|
| 5005 |
- ts-node
|
| 5006 |
|
|
|
|
| 5087 |
|
| 5088 |
esutils@2.0.3: {}
|
| 5089 |
|
| 5090 |
+
etag@1.8.1: {}
|
| 5091 |
+
|
| 5092 |
event-target-shim@5.0.1: {}
|
| 5093 |
|
| 5094 |
+
eventsource-parser@3.0.6: {}
|
| 5095 |
+
|
| 5096 |
+
eventsource@3.0.7:
|
| 5097 |
+
dependencies:
|
| 5098 |
+
eventsource-parser: 3.0.6
|
| 5099 |
+
|
| 5100 |
expect-type@1.2.1: {}
|
| 5101 |
|
| 5102 |
+
express-rate-limit@7.5.1(express@5.1.0):
|
| 5103 |
+
dependencies:
|
| 5104 |
+
express: 5.1.0
|
| 5105 |
+
|
| 5106 |
+
express@5.1.0:
|
| 5107 |
+
dependencies:
|
| 5108 |
+
accepts: 2.0.0
|
| 5109 |
+
body-parser: 2.2.0
|
| 5110 |
+
content-disposition: 1.0.0
|
| 5111 |
+
content-type: 1.0.5
|
| 5112 |
+
cookie: 0.7.2
|
| 5113 |
+
cookie-signature: 1.2.2
|
| 5114 |
+
debug: 4.4.0
|
| 5115 |
+
encodeurl: 2.0.0
|
| 5116 |
+
escape-html: 1.0.3
|
| 5117 |
+
etag: 1.8.1
|
| 5118 |
+
finalhandler: 2.1.0
|
| 5119 |
+
fresh: 2.0.0
|
| 5120 |
+
http-errors: 2.0.0
|
| 5121 |
+
merge-descriptors: 2.0.0
|
| 5122 |
+
mime-types: 3.0.1
|
| 5123 |
+
on-finished: 2.4.1
|
| 5124 |
+
once: 1.4.0
|
| 5125 |
+
parseurl: 1.3.3
|
| 5126 |
+
proxy-addr: 2.0.7
|
| 5127 |
+
qs: 6.14.0
|
| 5128 |
+
range-parser: 1.2.1
|
| 5129 |
+
router: 2.2.0
|
| 5130 |
+
send: 1.2.0
|
| 5131 |
+
serve-static: 2.2.0
|
| 5132 |
+
statuses: 2.0.2
|
| 5133 |
+
type-is: 2.0.1
|
| 5134 |
+
vary: 1.1.2
|
| 5135 |
+
transitivePeerDependencies:
|
| 5136 |
+
- supports-color
|
| 5137 |
+
|
| 5138 |
exsolve@1.0.4: {}
|
| 5139 |
|
| 5140 |
external-editor@3.1.0:
|
|
|
|
| 5185 |
dependencies:
|
| 5186 |
to-regex-range: 5.0.1
|
| 5187 |
|
| 5188 |
+
finalhandler@2.1.0:
|
| 5189 |
+
dependencies:
|
| 5190 |
+
debug: 4.4.0
|
| 5191 |
+
encodeurl: 2.0.0
|
| 5192 |
+
escape-html: 1.0.3
|
| 5193 |
+
on-finished: 2.4.1
|
| 5194 |
+
parseurl: 1.3.3
|
| 5195 |
+
statuses: 2.0.2
|
| 5196 |
+
transitivePeerDependencies:
|
| 5197 |
+
- supports-color
|
| 5198 |
+
|
| 5199 |
find-cache-dir@5.0.0:
|
| 5200 |
dependencies:
|
| 5201 |
common-path-prefix: 3.0.0
|
|
|
|
| 5234 |
node-domexception: 1.0.0
|
| 5235 |
web-streams-polyfill: 4.0.0-beta.3
|
| 5236 |
|
| 5237 |
+
forwarded@0.2.0: {}
|
| 5238 |
+
|
| 5239 |
+
fresh@2.0.0: {}
|
| 5240 |
+
|
| 5241 |
fsevents@2.3.2:
|
| 5242 |
optional: true
|
| 5243 |
|
|
|
|
| 5350 |
|
| 5351 |
html-void-elements@3.0.0: {}
|
| 5352 |
|
| 5353 |
+
http-errors@2.0.0:
|
| 5354 |
+
dependencies:
|
| 5355 |
+
depd: 2.0.0
|
| 5356 |
+
inherits: 2.0.4
|
| 5357 |
+
setprototypeof: 1.2.0
|
| 5358 |
+
statuses: 2.0.1
|
| 5359 |
+
toidentifier: 1.0.1
|
| 5360 |
+
|
| 5361 |
http-proxy-agent@7.0.2:
|
| 5362 |
dependencies:
|
| 5363 |
agent-base: 7.1.3
|
|
|
|
| 5384 |
dependencies:
|
| 5385 |
safer-buffer: 2.1.2
|
| 5386 |
|
| 5387 |
+
iconv-lite@0.7.0:
|
| 5388 |
+
dependencies:
|
| 5389 |
+
safer-buffer: 2.1.2
|
| 5390 |
+
|
| 5391 |
ieee754@1.2.1: {}
|
| 5392 |
|
| 5393 |
ignore@5.3.2: {}
|
|
|
|
| 5425 |
through: 2.3.8
|
| 5426 |
wrap-ansi: 6.2.0
|
| 5427 |
|
| 5428 |
+
ipaddr.js@1.9.1: {}
|
| 5429 |
+
|
| 5430 |
is-arrayish@0.3.2: {}
|
| 5431 |
|
| 5432 |
is-core-module@2.16.1:
|
|
|
|
| 5449 |
|
| 5450 |
is-potential-custom-element-name@1.0.1: {}
|
| 5451 |
|
| 5452 |
+
is-promise@4.0.0: {}
|
| 5453 |
+
|
| 5454 |
is-reference@1.2.1:
|
| 5455 |
dependencies:
|
| 5456 |
'@types/estree': 1.0.6
|
|
|
|
| 5634 |
|
| 5635 |
magic-string@0.30.17:
|
| 5636 |
dependencies:
|
| 5637 |
+
'@jridgewell/sourcemap-codec': 1.5.5
|
| 5638 |
|
| 5639 |
marked@16.1.2: {}
|
| 5640 |
|
|
|
|
| 5656 |
unist-util-visit: 5.0.0
|
| 5657 |
vfile: 6.0.3
|
| 5658 |
|
| 5659 |
+
media-typer@1.1.0: {}
|
| 5660 |
+
|
| 5661 |
+
melt@0.36.0(@floating-ui/dom@1.6.13)(svelte@5.38.7):
|
| 5662 |
dependencies:
|
| 5663 |
'@floating-ui/dom': 1.6.13
|
| 5664 |
dequal: 2.0.3
|
| 5665 |
jest-axe: 9.0.0
|
| 5666 |
nanoid: 5.1.5
|
| 5667 |
+
runed: 0.23.4(svelte@5.38.7)
|
| 5668 |
+
svelte: 5.38.7
|
| 5669 |
+
|
| 5670 |
+
merge-descriptors@2.0.0: {}
|
| 5671 |
|
| 5672 |
merge2@1.4.1: {}
|
| 5673 |
|
|
|
|
| 5695 |
|
| 5696 |
mime-db@1.52.0: {}
|
| 5697 |
|
| 5698 |
+
mime-db@1.54.0: {}
|
| 5699 |
+
|
| 5700 |
mime-types@2.1.35:
|
| 5701 |
dependencies:
|
| 5702 |
mime-db: 1.52.0
|
| 5703 |
|
| 5704 |
+
mime-types@3.0.1:
|
| 5705 |
+
dependencies:
|
| 5706 |
+
mime-db: 1.54.0
|
| 5707 |
+
|
| 5708 |
mimic-fn@2.1.0: {}
|
| 5709 |
|
| 5710 |
min-indent@1.0.1: {}
|
|
|
|
| 5748 |
|
| 5749 |
natural-compare@1.4.0: {}
|
| 5750 |
|
| 5751 |
+
negotiator@1.0.0: {}
|
| 5752 |
+
|
| 5753 |
node-domexception@1.0.0: {}
|
| 5754 |
|
| 5755 |
node-fetch@2.7.0:
|
|
|
|
| 5758 |
|
| 5759 |
nwsapi@2.2.20: {}
|
| 5760 |
|
| 5761 |
+
object-assign@4.1.1: {}
|
| 5762 |
+
|
| 5763 |
+
object-inspect@1.13.4: {}
|
| 5764 |
+
|
| 5765 |
object-keys@1.1.1: {}
|
| 5766 |
|
| 5767 |
+
on-finished@2.4.1:
|
| 5768 |
+
dependencies:
|
| 5769 |
+
ee-first: 1.1.1
|
| 5770 |
+
|
| 5771 |
+
once@1.4.0:
|
| 5772 |
+
dependencies:
|
| 5773 |
+
wrappy: 1.0.2
|
| 5774 |
+
|
| 5775 |
onetime@5.1.2:
|
| 5776 |
dependencies:
|
| 5777 |
mimic-fn: 2.1.0
|
|
|
|
| 5803 |
platform: 1.3.6
|
| 5804 |
protobufjs: 7.4.0
|
| 5805 |
|
| 5806 |
+
openai@4.90.0(ws@8.18.2)(zod@3.25.76):
|
| 5807 |
dependencies:
|
| 5808 |
'@types/node': 18.19.84
|
| 5809 |
'@types/node-fetch': 2.6.12
|
|
|
|
| 5814 |
node-fetch: 2.7.0
|
| 5815 |
optionalDependencies:
|
| 5816 |
ws: 8.18.2
|
| 5817 |
+
zod: 3.25.76
|
| 5818 |
transitivePeerDependencies:
|
| 5819 |
- encoding
|
| 5820 |
|
|
|
|
| 5869 |
dependencies:
|
| 5870 |
entities: 6.0.0
|
| 5871 |
|
| 5872 |
+
parseurl@1.3.3: {}
|
| 5873 |
+
|
| 5874 |
path-exists@4.0.0: {}
|
| 5875 |
|
| 5876 |
path-exists@5.0.0: {}
|
|
|
|
| 5879 |
|
| 5880 |
path-parse@1.0.7: {}
|
| 5881 |
|
| 5882 |
+
path-to-regexp@8.3.0: {}
|
| 5883 |
+
|
| 5884 |
pathe@1.1.2: {}
|
| 5885 |
|
| 5886 |
pathe@2.0.3: {}
|
|
|
|
| 5893 |
|
| 5894 |
picomatch@4.0.2: {}
|
| 5895 |
|
| 5896 |
+
pkce-challenge@5.0.0: {}
|
| 5897 |
+
|
| 5898 |
pkg-dir@7.0.0:
|
| 5899 |
dependencies:
|
| 5900 |
find-up: 6.3.0
|
|
|
|
| 5958 |
dependencies:
|
| 5959 |
fast-diff: 1.3.0
|
| 5960 |
|
| 5961 |
+
prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.38.7):
|
| 5962 |
dependencies:
|
| 5963 |
prettier: 3.5.3
|
| 5964 |
+
svelte: 5.38.7
|
| 5965 |
|
| 5966 |
+
prettier-plugin-tailwindcss@0.6.11(prettier-plugin-svelte@3.4.0(prettier@3.5.3)(svelte@5.38.7))(prettier@3.5.3):
|
| 5967 |
dependencies:
|
| 5968 |
prettier: 3.5.3
|
| 5969 |
optionalDependencies:
|
| 5970 |
+
prettier-plugin-svelte: 3.4.0(prettier@3.5.3)(svelte@5.38.7)
|
| 5971 |
|
| 5972 |
prettier@3.5.3: {}
|
| 5973 |
|
|
|
|
| 6000 |
'@types/node': 22.14.1
|
| 6001 |
long: 5.3.1
|
| 6002 |
|
| 6003 |
+
proxy-addr@2.0.7:
|
| 6004 |
+
dependencies:
|
| 6005 |
+
forwarded: 0.2.0
|
| 6006 |
+
ipaddr.js: 1.9.1
|
| 6007 |
+
|
| 6008 |
punycode@2.3.1: {}
|
| 6009 |
|
| 6010 |
+
qs@6.14.0:
|
| 6011 |
+
dependencies:
|
| 6012 |
+
side-channel: 1.1.0
|
| 6013 |
+
|
| 6014 |
quansync@0.2.8: {}
|
| 6015 |
|
| 6016 |
queue-microtask@1.2.3: {}
|
|
|
|
| 6020 |
drange: 1.1.1
|
| 6021 |
ret: 0.2.2
|
| 6022 |
|
| 6023 |
+
range-parser@1.2.1: {}
|
| 6024 |
+
|
| 6025 |
+
raw-body@3.0.1:
|
| 6026 |
+
dependencies:
|
| 6027 |
+
bytes: 3.1.2
|
| 6028 |
+
http-errors: 2.0.0
|
| 6029 |
+
iconv-lite: 0.7.0
|
| 6030 |
+
unpipe: 1.0.0
|
| 6031 |
+
|
| 6032 |
react-is@17.0.2: {}
|
| 6033 |
|
| 6034 |
react-is@18.3.1: {}
|
|
|
|
| 6118 |
'@rollup/rollup-win32-x64-msvc': 4.34.9
|
| 6119 |
fsevents: 2.3.3
|
| 6120 |
|
| 6121 |
+
router@2.2.0:
|
| 6122 |
+
dependencies:
|
| 6123 |
+
debug: 4.4.0
|
| 6124 |
+
depd: 2.0.0
|
| 6125 |
+
is-promise: 4.0.0
|
| 6126 |
+
parseurl: 1.3.3
|
| 6127 |
+
path-to-regexp: 8.3.0
|
| 6128 |
+
transitivePeerDependencies:
|
| 6129 |
+
- supports-color
|
| 6130 |
+
|
| 6131 |
rrweb-cssom@0.8.0: {}
|
| 6132 |
|
| 6133 |
run-async@2.4.1: {}
|
|
|
|
| 6136 |
dependencies:
|
| 6137 |
queue-microtask: 1.2.3
|
| 6138 |
|
| 6139 |
+
runed@0.23.4(svelte@5.38.7):
|
| 6140 |
dependencies:
|
| 6141 |
esm-env: 1.2.2
|
| 6142 |
+
svelte: 5.38.7
|
| 6143 |
|
| 6144 |
+
runed@0.25.0(svelte@5.38.7):
|
| 6145 |
dependencies:
|
| 6146 |
esm-env: 1.2.2
|
| 6147 |
+
svelte: 5.38.7
|
| 6148 |
|
| 6149 |
rxjs@7.8.2:
|
| 6150 |
dependencies:
|
|
|
|
| 6168 |
|
| 6169 |
semver@7.7.2: {}
|
| 6170 |
|
| 6171 |
+
send@1.2.0:
|
| 6172 |
+
dependencies:
|
| 6173 |
+
debug: 4.4.0
|
| 6174 |
+
encodeurl: 2.0.0
|
| 6175 |
+
escape-html: 1.0.3
|
| 6176 |
+
etag: 1.8.1
|
| 6177 |
+
fresh: 2.0.0
|
| 6178 |
+
http-errors: 2.0.0
|
| 6179 |
+
mime-types: 3.0.1
|
| 6180 |
+
ms: 2.1.3
|
| 6181 |
+
on-finished: 2.4.1
|
| 6182 |
+
range-parser: 1.2.1
|
| 6183 |
+
statuses: 2.0.2
|
| 6184 |
+
transitivePeerDependencies:
|
| 6185 |
+
- supports-color
|
| 6186 |
+
|
| 6187 |
serialize-error@7.0.1:
|
| 6188 |
dependencies:
|
| 6189 |
type-fest: 0.13.1
|
| 6190 |
|
| 6191 |
+
serve-static@2.2.0:
|
| 6192 |
+
dependencies:
|
| 6193 |
+
encodeurl: 2.0.0
|
| 6194 |
+
escape-html: 1.0.3
|
| 6195 |
+
parseurl: 1.3.3
|
| 6196 |
+
send: 1.2.0
|
| 6197 |
+
transitivePeerDependencies:
|
| 6198 |
+
- supports-color
|
| 6199 |
+
|
| 6200 |
set-cookie-parser@2.7.1: {}
|
| 6201 |
|
| 6202 |
+
setprototypeof@1.2.0: {}
|
| 6203 |
+
|
| 6204 |
sharp@0.34.2:
|
| 6205 |
dependencies:
|
| 6206 |
color: 4.2.3
|
|
|
|
| 6246 |
'@shikijs/vscode-textmate': 10.0.2
|
| 6247 |
'@types/hast': 3.0.4
|
| 6248 |
|
| 6249 |
+
side-channel-list@1.0.0:
|
| 6250 |
+
dependencies:
|
| 6251 |
+
es-errors: 1.3.0
|
| 6252 |
+
object-inspect: 1.13.4
|
| 6253 |
+
|
| 6254 |
+
side-channel-map@1.0.1:
|
| 6255 |
+
dependencies:
|
| 6256 |
+
call-bound: 1.0.4
|
| 6257 |
+
es-errors: 1.3.0
|
| 6258 |
+
get-intrinsic: 1.3.0
|
| 6259 |
+
object-inspect: 1.13.4
|
| 6260 |
+
|
| 6261 |
+
side-channel-weakmap@1.0.2:
|
| 6262 |
+
dependencies:
|
| 6263 |
+
call-bound: 1.0.4
|
| 6264 |
+
es-errors: 1.3.0
|
| 6265 |
+
get-intrinsic: 1.3.0
|
| 6266 |
+
object-inspect: 1.13.4
|
| 6267 |
+
side-channel-map: 1.0.1
|
| 6268 |
+
|
| 6269 |
+
side-channel@1.1.0:
|
| 6270 |
+
dependencies:
|
| 6271 |
+
es-errors: 1.3.0
|
| 6272 |
+
object-inspect: 1.13.4
|
| 6273 |
+
side-channel-list: 1.0.0
|
| 6274 |
+
side-channel-map: 1.0.1
|
| 6275 |
+
side-channel-weakmap: 1.0.2
|
| 6276 |
+
|
| 6277 |
siginfo@2.0.0: {}
|
| 6278 |
|
| 6279 |
signal-exit@3.0.7: {}
|
|
|
|
| 6296 |
|
| 6297 |
stackback@0.0.2: {}
|
| 6298 |
|
| 6299 |
+
statuses@2.0.1: {}
|
| 6300 |
+
|
| 6301 |
+
statuses@2.0.2: {}
|
| 6302 |
+
|
| 6303 |
std-env@3.9.0: {}
|
| 6304 |
|
| 6305 |
string-width@4.2.3:
|
|
|
|
| 6333 |
|
| 6334 |
supports-preserve-symlinks-flag@1.0.0: {}
|
| 6335 |
|
| 6336 |
+
svelte-check@4.3.1(picomatch@4.0.2)(svelte@5.38.7)(typescript@5.8.2):
|
| 6337 |
dependencies:
|
| 6338 |
'@jridgewell/trace-mapping': 0.3.25
|
| 6339 |
chokidar: 4.0.3
|
| 6340 |
fdir: 6.4.3(picomatch@4.0.2)
|
| 6341 |
picocolors: 1.1.1
|
| 6342 |
sade: 1.8.1
|
| 6343 |
+
svelte: 5.38.7
|
| 6344 |
typescript: 5.8.2
|
| 6345 |
transitivePeerDependencies:
|
| 6346 |
- picomatch
|
| 6347 |
|
| 6348 |
+
svelte-eslint-parser@1.3.0(svelte@5.38.7):
|
| 6349 |
dependencies:
|
| 6350 |
eslint-scope: 8.3.0
|
| 6351 |
eslint-visitor-keys: 4.2.0
|
|
|
|
| 6354 |
postcss-scss: 4.0.9(postcss@8.5.3)
|
| 6355 |
postcss-selector-parser: 7.1.0
|
| 6356 |
optionalDependencies:
|
| 6357 |
+
svelte: 5.38.7
|
| 6358 |
|
| 6359 |
+
svelte@5.38.7:
|
| 6360 |
dependencies:
|
| 6361 |
+
'@jridgewell/remapping': 2.3.5
|
| 6362 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 6363 |
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.0)
|
| 6364 |
'@types/estree': 1.0.6
|
|
|
|
| 6382 |
|
| 6383 |
tailwind-merge@3.0.2: {}
|
| 6384 |
|
| 6385 |
+
tailwindcss-spring@1.0.1(tailwindcss@4.0.9):
|
| 6386 |
+
dependencies:
|
| 6387 |
+
tailwindcss: 4.0.9
|
| 6388 |
+
|
| 6389 |
tailwindcss@4.0.9: {}
|
| 6390 |
|
| 6391 |
tapable@2.2.1: {}
|
|
|
|
| 6430 |
dependencies:
|
| 6431 |
is-number: 7.0.0
|
| 6432 |
|
| 6433 |
+
toidentifier@1.0.1: {}
|
| 6434 |
+
|
| 6435 |
totalist@3.0.1: {}
|
| 6436 |
|
| 6437 |
tough-cookie@5.1.2:
|
|
|
|
| 6471 |
|
| 6472 |
type-fest@4.37.0: {}
|
| 6473 |
|
| 6474 |
+
type-is@2.0.1:
|
| 6475 |
+
dependencies:
|
| 6476 |
+
content-type: 1.0.5
|
| 6477 |
+
media-typer: 1.1.0
|
| 6478 |
+
mime-types: 3.0.1
|
| 6479 |
+
|
| 6480 |
typescript-eslint@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2):
|
| 6481 |
dependencies:
|
| 6482 |
'@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
|
|
|
| 6540 |
unist-util-is: 6.0.0
|
| 6541 |
unist-util-visit-parents: 6.0.1
|
| 6542 |
|
| 6543 |
+
unpipe@1.0.0: {}
|
| 6544 |
+
|
| 6545 |
+
unplugin-icons@22.1.0(svelte@5.38.7):
|
| 6546 |
dependencies:
|
| 6547 |
'@antfu/install-pkg': 1.0.0
|
| 6548 |
'@iconify/utils': 2.3.0
|
|
|
|
| 6550 |
local-pkg: 1.1.1
|
| 6551 |
unplugin: 2.2.0
|
| 6552 |
optionalDependencies:
|
| 6553 |
+
svelte: 5.38.7
|
| 6554 |
transitivePeerDependencies:
|
| 6555 |
- supports-color
|
| 6556 |
|
|
|
|
| 6572 |
|
| 6573 |
uuid@8.3.2: {}
|
| 6574 |
|
| 6575 |
+
vary@1.1.2: {}
|
| 6576 |
+
|
| 6577 |
vfile-message@4.0.2:
|
| 6578 |
dependencies:
|
| 6579 |
'@types/unist': 3.0.3
|
|
|
|
| 6628 |
optionalDependencies:
|
| 6629 |
vite: 5.4.14(@types/node@22.14.1)(lightningcss@1.29.1)
|
| 6630 |
|
| 6631 |
+
vitest-browser-svelte@0.1.0(@vitest/browser@3.1.4)(svelte@5.38.7)(vitest@3.1.4):
|
| 6632 |
dependencies:
|
| 6633 |
'@vitest/browser': 3.1.4(playwright@1.52.0)(vite@5.4.14(@types/node@22.14.1)(lightningcss@1.29.1))(vitest@3.1.4)
|
| 6634 |
+
svelte: 5.38.7
|
| 6635 |
vitest: 3.1.4(@types/node@22.14.1)(@vitest/browser@3.1.4)(jsdom@26.1.0)(lightningcss@1.29.1)
|
| 6636 |
|
| 6637 |
vitest@3.1.4(@types/node@22.14.1)(@vitest/browser@3.1.4)(jsdom@26.1.0)(lightningcss@1.29.1):
|
|
|
|
| 6725 |
string-width: 4.2.3
|
| 6726 |
strip-ansi: 6.0.1
|
| 6727 |
|
| 6728 |
+
wrappy@1.0.2: {}
|
| 6729 |
+
|
| 6730 |
ws@8.18.2: {}
|
| 6731 |
|
| 6732 |
xml-name-validator@5.0.0: {}
|
|
|
|
| 6746 |
|
| 6747 |
zimmerframe@1.1.2: {}
|
| 6748 |
|
| 6749 |
+
zod-to-json-schema@3.24.6(zod@3.25.76):
|
| 6750 |
+
dependencies:
|
| 6751 |
+
zod: 3.25.76
|
| 6752 |
+
|
| 6753 |
+
zod@3.25.76: {}
|
| 6754 |
+
|
| 6755 |
zwitch@2.0.4: {}
|
src/app.css
CHANGED
|
@@ -2,6 +2,7 @@
|
|
| 2 |
@import "tailwindcss";
|
| 3 |
|
| 4 |
@plugin '@tailwindcss/container-queries';
|
|
|
|
| 5 |
@plugin '@tailwindcss/typography';
|
| 6 |
|
| 7 |
@custom-variant dark (&:where(.dark, .dark *));
|
|
|
|
| 2 |
@import "tailwindcss";
|
| 3 |
|
| 4 |
@plugin '@tailwindcss/container-queries';
|
| 5 |
+
@plugin 'tailwindcss-spring';
|
| 6 |
@plugin '@tailwindcss/typography';
|
| 7 |
|
| 8 |
@custom-variant dark (&:where(.dark, .dark *));
|
src/lib/components/inference-playground/code-snippets.svelte
CHANGED
|
@@ -206,6 +206,7 @@
|
|
| 206 |
<a
|
| 207 |
href={installInstructions.docs}
|
| 208 |
target="_blank"
|
|
|
|
| 209 |
class="relative -bottom-[1px] flex items-center gap-1 text-sm font-normal text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
|
| 210 |
>
|
| 211 |
<IconExternal class="text-xs" />
|
|
|
|
| 206 |
<a
|
| 207 |
href={installInstructions.docs}
|
| 208 |
target="_blank"
|
| 209 |
+
rel="external"
|
| 210 |
class="relative -bottom-[1px] flex items-center gap-1 text-sm font-normal text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
|
| 211 |
>
|
| 212 |
<IconExternal class="text-xs" />
|
src/lib/components/inference-playground/generation-config.svelte
CHANGED
|
@@ -7,8 +7,10 @@
|
|
| 7 |
import IconX from "~icons/carbon/close";
|
| 8 |
import ExtraParamsModal, { openExtraParamsModal } from "./extra-params-modal.svelte";
|
| 9 |
import { GENERATION_CONFIG_KEYS, GENERATION_CONFIG_SETTINGS } from "./generation-config-settings.js";
|
|
|
|
| 10 |
import StructuredOutputModal, { openStructuredOutputModal } from "./structured-output-modal.svelte";
|
| 11 |
-
|
|
|
|
| 12 |
interface Props {
|
| 13 |
conversation: ConversationClass;
|
| 14 |
classNames?: string;
|
|
@@ -43,6 +45,7 @@
|
|
| 43 |
});
|
| 44 |
}
|
| 45 |
|
|
|
|
| 46 |
const extraParamsLen = $derived(Object.keys(conversation.data.extraParams ?? {}).length);
|
| 47 |
</script>
|
| 48 |
|
|
@@ -124,6 +127,21 @@
|
|
| 124 |
</label>
|
| 125 |
{/if}
|
| 126 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
<div class="mt-2 flex items-center gap-2">
|
| 128 |
<span class="text-sm font-medium text-gray-900 dark:text-gray-300">Extra parameters</span>
|
| 129 |
<span
|
|
@@ -152,3 +170,6 @@
|
|
| 152 |
|
| 153 |
<StructuredOutputModal {conversation} />
|
| 154 |
<ExtraParamsModal {conversation} />
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
import IconX from "~icons/carbon/close";
|
| 8 |
import ExtraParamsModal, { openExtraParamsModal } from "./extra-params-modal.svelte";
|
| 9 |
import { GENERATION_CONFIG_KEYS, GENERATION_CONFIG_SETTINGS } from "./generation-config-settings.js";
|
| 10 |
+
import MCPModal from "./mcp-modal.svelte";
|
| 11 |
import StructuredOutputModal, { openStructuredOutputModal } from "./structured-output-modal.svelte";
|
| 12 |
+
import { mcpServers } from "$lib/state/mcps.svelte.js";
|
| 13 |
+
import { isMcpEnabled } from "$lib/constants.js";
|
| 14 |
interface Props {
|
| 15 |
conversation: ConversationClass;
|
| 16 |
classNames?: string;
|
|
|
|
| 45 |
});
|
| 46 |
}
|
| 47 |
|
| 48 |
+
let editingMCP = $state(false);
|
| 49 |
const extraParamsLen = $derived(Object.keys(conversation.data.extraParams ?? {}).length);
|
| 50 |
</script>
|
| 51 |
|
|
|
|
| 127 |
</label>
|
| 128 |
{/if}
|
| 129 |
|
| 130 |
+
<!-- MCP Servers -->
|
| 131 |
+
{#if isMcpEnabled()}
|
| 132 |
+
<div class="mt-2 flex cursor-pointer items-center justify-between">
|
| 133 |
+
<span class="text-sm font-medium text-gray-900 dark:text-gray-300">MCP Servers</span>
|
| 134 |
+
<div class="flex items-center gap-2">
|
| 135 |
+
{#if mcpServers.enabled.length > 0}
|
| 136 |
+
<span class="rounded-full bg-blue-100 px-2 py-1 text-xs text-blue-800 dark:bg-blue-900 dark:text-blue-200">
|
| 137 |
+
{mcpServers.enabled.length} enabled
|
| 138 |
+
</span>
|
| 139 |
+
{/if}
|
| 140 |
+
<button class="btn-mini" type="button" onclick={() => (editingMCP = true)}> configure </button>
|
| 141 |
+
</div>
|
| 142 |
+
</div>
|
| 143 |
+
{/if}
|
| 144 |
+
|
| 145 |
<div class="mt-2 flex items-center gap-2">
|
| 146 |
<span class="text-sm font-medium text-gray-900 dark:text-gray-300">Extra parameters</span>
|
| 147 |
<span
|
|
|
|
| 170 |
|
| 171 |
<StructuredOutputModal {conversation} />
|
| 172 |
<ExtraParamsModal {conversation} />
|
| 173 |
+
{#if isMcpEnabled()}
|
| 174 |
+
<MCPModal bind:open={editingMCP} />
|
| 175 |
+
{/if}
|
src/lib/components/inference-playground/mcp-card.svelte
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts">
|
| 2 |
+
import { mcpServers, type MCPServerEntity, type MCPFormData } from "$lib/state/mcps.svelte.js";
|
| 3 |
+
import { projects } from "$lib/state/projects.svelte.js";
|
| 4 |
+
import { extractDomain } from "$lib/utils/url.js";
|
| 5 |
+
import IconEdit from "~icons/carbon/edit";
|
| 6 |
+
import IconDelete from "~icons/carbon/trash-can";
|
| 7 |
+
import Switch from "../switch.svelte";
|
| 8 |
+
import McpForm from "./mcp-form.svelte";
|
| 9 |
+
|
| 10 |
+
interface Props {
|
| 11 |
+
server: MCPServerEntity;
|
| 12 |
+
}
|
| 13 |
+
|
| 14 |
+
let { server }: Props = $props();
|
| 15 |
+
|
| 16 |
+
let editing = $state(false);
|
| 17 |
+
|
| 18 |
+
async function deleteServer() {
|
| 19 |
+
await mcpServers.delete(server.id);
|
| 20 |
+
|
| 21 |
+
// Remove from project's enabled MCPs if it was enabled
|
| 22 |
+
const currentProject = projects.current;
|
| 23 |
+
if (!currentProject?.enabledMCPs?.includes(server.id)) return;
|
| 24 |
+
await projects.update({
|
| 25 |
+
...currentProject,
|
| 26 |
+
enabledMCPs: currentProject.enabledMCPs.filter(mcpId => mcpId !== server.id),
|
| 27 |
+
});
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
async function setEnabled(enabled: boolean) {
|
| 31 |
+
const currentProject = projects.current;
|
| 32 |
+
if (!currentProject) return;
|
| 33 |
+
|
| 34 |
+
const enabledMCPs = currentProject.enabledMCPs || [];
|
| 35 |
+
const newEnabledMCPs = enabled ? [...enabledMCPs, server.id] : enabledMCPs.filter(id => id !== server.id);
|
| 36 |
+
|
| 37 |
+
await projects.update({
|
| 38 |
+
...currentProject,
|
| 39 |
+
enabledMCPs: newEnabledMCPs,
|
| 40 |
+
});
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
const isEnabled = $derived(projects.current?.enabledMCPs?.includes(server.id) || false);
|
| 44 |
+
|
| 45 |
+
async function saveServer(formData: MCPFormData) {
|
| 46 |
+
await mcpServers.update({
|
| 47 |
+
...server,
|
| 48 |
+
...formData,
|
| 49 |
+
});
|
| 50 |
+
editing = false;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
function getFaviconUrl(url: string): string {
|
| 54 |
+
const domain = extractDomain(url);
|
| 55 |
+
return `https://www.google.com/s2/favicons?domain=https://${domain}&sz=64`;
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
function urlWithoutSubpaths(url: string): string {
|
| 59 |
+
const urlObj = new URL(url);
|
| 60 |
+
return urlObj.origin;
|
| 61 |
+
}
|
| 62 |
+
</script>
|
| 63 |
+
|
| 64 |
+
<div class="rounded-lg border border-gray-200 p-3 dark:border-gray-700">
|
| 65 |
+
<div class="flex justify-between">
|
| 66 |
+
<div>
|
| 67 |
+
<div class="flex items-center gap-1">
|
| 68 |
+
<img src={getFaviconUrl(server.url)} alt="Server Icon" class="size-4 rounded p-0.5 dark:bg-gray-500" />
|
| 69 |
+
<span class="font-bold">{server.name}</span>
|
| 70 |
+
</div>
|
| 71 |
+
<p class="mt-1 truncate text-sm dark:text-neutral-300">
|
| 72 |
+
<span class="rounded bg-blue-900 px-0.75 py-0.25 uppercase">
|
| 73 |
+
{server.protocol}
|
| 74 |
+
</span>
|
| 75 |
+
<span>
|
| 76 |
+
{urlWithoutSubpaths(server.url)}
|
| 77 |
+
</span>
|
| 78 |
+
</p>
|
| 79 |
+
{#if server.headers && Object.keys(server.headers).length > 0}
|
| 80 |
+
<p class="mt-1 text-xs dark:text-neutral-400">
|
| 81 |
+
Headers: {Object.keys(server.headers).length} configured
|
| 82 |
+
</p>
|
| 83 |
+
{/if}
|
| 84 |
+
</div>
|
| 85 |
+
<div class="flex flex-col items-end justify-between gap-2">
|
| 86 |
+
<Switch bind:value={() => isEnabled, v => setEnabled(v)} />
|
| 87 |
+
<div class="flex items-center gap-2">
|
| 88 |
+
{#if !editing}
|
| 89 |
+
<button class="btn-mini" onclick={() => (editing = true)}>
|
| 90 |
+
<IconEdit class="h-4 w-4" />
|
| 91 |
+
<span>Edit</span>
|
| 92 |
+
</button>
|
| 93 |
+
<button
|
| 94 |
+
class="btn-mini text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20"
|
| 95 |
+
onclick={() => deleteServer()}
|
| 96 |
+
>
|
| 97 |
+
<IconDelete class="h-4 w-4" />
|
| 98 |
+
<span>Delete</span>
|
| 99 |
+
</button>
|
| 100 |
+
{/if}
|
| 101 |
+
</div>
|
| 102 |
+
</div>
|
| 103 |
+
</div>
|
| 104 |
+
|
| 105 |
+
{#if editing}
|
| 106 |
+
<div class="mt-2 border-t border-neutral-500 pt-2 dark:border-neutral-700">
|
| 107 |
+
<McpForm {server} onSubmit={saveServer} onCancel={() => (editing = false)} />
|
| 108 |
+
</div>
|
| 109 |
+
{/if}
|
| 110 |
+
</div>
|
src/lib/components/inference-playground/mcp-form.svelte
ADDED
|
@@ -0,0 +1,160 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts">
|
| 2 |
+
import { type MCPProtocol, type MCPServerEntity, type MCPFormData } from "$lib/state/mcps.svelte.js";
|
| 3 |
+
import { createFieldValidation } from "$lib/utils/form.svelte";
|
| 4 |
+
import { entries } from "$lib/utils/object.svelte";
|
| 5 |
+
import { isValidURL } from "$lib/utils/url.js";
|
| 6 |
+
import IconAdd from "~icons/carbon/add";
|
| 7 |
+
import IconCheck from "~icons/carbon/checkmark";
|
| 8 |
+
import IconDelete from "~icons/carbon/trash-can";
|
| 9 |
+
|
| 10 |
+
interface Props {
|
| 11 |
+
server?: MCPServerEntity;
|
| 12 |
+
onSubmit: (formData: MCPFormData) => Promise<void>;
|
| 13 |
+
onCancel: () => void;
|
| 14 |
+
submitLabel?: string;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
let { server, onSubmit, onCancel, submitLabel = "Save" }: Props = $props();
|
| 18 |
+
|
| 19 |
+
let formState = $state({
|
| 20 |
+
name: server?.name || "",
|
| 21 |
+
url: server?.url || "",
|
| 22 |
+
protocol: (server?.protocol || "sse") as MCPProtocol,
|
| 23 |
+
headers: entries(server?.headers || {}),
|
| 24 |
+
});
|
| 25 |
+
|
| 26 |
+
const protocolOptions: MCPProtocol[] = ["sse", "http"];
|
| 27 |
+
|
| 28 |
+
const nameField = createFieldValidation({
|
| 29 |
+
validate: v => {
|
| 30 |
+
if (!v) return "Server name is required";
|
| 31 |
+
if (v.trim().length === 0) return "Server name cannot be empty";
|
| 32 |
+
},
|
| 33 |
+
});
|
| 34 |
+
|
| 35 |
+
const urlField = createFieldValidation({
|
| 36 |
+
validate: v => {
|
| 37 |
+
if (!v) return "Server URL is required";
|
| 38 |
+
if (v.trim().length === 0) return "Server URL cannot be empty";
|
| 39 |
+
if (!isValidURL(v)) return "Invalid URL";
|
| 40 |
+
},
|
| 41 |
+
});
|
| 42 |
+
|
| 43 |
+
const disabled = $derived(!nameField.valid || !urlField.valid);
|
| 44 |
+
|
| 45 |
+
async function handleSubmit(e: SubmitEvent) {
|
| 46 |
+
e.preventDefault();
|
| 47 |
+
if (!nameField.valid || !urlField.valid) return;
|
| 48 |
+
|
| 49 |
+
await onSubmit({
|
| 50 |
+
...formState,
|
| 51 |
+
headers: formState.headers.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {}),
|
| 52 |
+
});
|
| 53 |
+
}
|
| 54 |
+
</script>
|
| 55 |
+
|
| 56 |
+
<form class="space-y-3" onsubmit={handleSubmit}>
|
| 57 |
+
<label class="flex flex-col gap-2">
|
| 58 |
+
<p class="block text-sm font-medium text-gray-900 dark:text-white">
|
| 59 |
+
Server Name <span class="text-red-800 dark:text-red-300">*</span>
|
| 60 |
+
</p>
|
| 61 |
+
<input
|
| 62 |
+
type="text"
|
| 63 |
+
bind:value={formState.name}
|
| 64 |
+
class="input block w-full"
|
| 65 |
+
placeholder="My MCP Server"
|
| 66 |
+
{...nameField.attrs}
|
| 67 |
+
required
|
| 68 |
+
/>
|
| 69 |
+
<p class="text-xs text-red-300">{nameField.msg}</p>
|
| 70 |
+
</label>
|
| 71 |
+
|
| 72 |
+
<label class="flex flex-col gap-2">
|
| 73 |
+
<p class="block text-sm font-medium text-gray-900 dark:text-white">
|
| 74 |
+
Server URL <span class="text-red-800 dark:text-red-300">*</span>
|
| 75 |
+
</p>
|
| 76 |
+
<input
|
| 77 |
+
type="url"
|
| 78 |
+
bind:value={formState.url}
|
| 79 |
+
class="input block w-full"
|
| 80 |
+
placeholder="https://mcp.example.com/sse"
|
| 81 |
+
{...urlField.attrs}
|
| 82 |
+
required
|
| 83 |
+
/>
|
| 84 |
+
<p class="text-xs text-red-300">{urlField.msg}</p>
|
| 85 |
+
</label>
|
| 86 |
+
|
| 87 |
+
<div class="flex flex-col gap-2">
|
| 88 |
+
<p class="block text-sm font-medium text-gray-900 dark:text-white">Protocol</p>
|
| 89 |
+
<div class="flex rounded-lg bg-gray-100 p-1 dark:bg-gray-700" role="radiogroup" aria-label="Server Protocol">
|
| 90 |
+
{#each protocolOptions as protocol}
|
| 91 |
+
<label class="relative flex-1 cursor-pointer">
|
| 92 |
+
<input
|
| 93 |
+
type="radio"
|
| 94 |
+
name="protocol-option"
|
| 95 |
+
value={protocol}
|
| 96 |
+
bind:group={formState.protocol}
|
| 97 |
+
class="peer sr-only"
|
| 98 |
+
/>
|
| 99 |
+
<div
|
| 100 |
+
class="flex items-center justify-center rounded-md px-3 py-2 text-sm font-medium text-gray-600 transition-colors duration-200 ease-in-out peer-checked:bg-white peer-checked:text-gray-900 peer-checked:shadow dark:text-gray-300 dark:peer-checked:bg-gray-800 dark:peer-checked:text-white"
|
| 101 |
+
>
|
| 102 |
+
{protocol.toUpperCase()}
|
| 103 |
+
</div>
|
| 104 |
+
<span
|
| 105 |
+
aria-hidden="true"
|
| 106 |
+
class="absolute inset-0 z-0 rounded-md transition-all duration-200 ease-in-out peer-focus:ring-2 peer-focus:ring-blue-500 peer-focus:ring-offset-2 peer-focus:ring-offset-gray-100 dark:peer-focus:ring-offset-gray-700"
|
| 107 |
+
></span>
|
| 108 |
+
</label>
|
| 109 |
+
{/each}
|
| 110 |
+
</div>
|
| 111 |
+
</div>
|
| 112 |
+
|
| 113 |
+
<div class="flex flex-col gap-2">
|
| 114 |
+
<p class="block text-sm font-medium text-gray-900 dark:text-white">Headers</p>
|
| 115 |
+
{#each formState.headers || [] as _, i (i)}
|
| 116 |
+
<div class="flex items-center gap-2">
|
| 117 |
+
<input
|
| 118 |
+
type="text"
|
| 119 |
+
bind:value={formState.headers[i]![0]}
|
| 120 |
+
class="flex-1 rounded-md border border-gray-300 bg-gray-50 px-3 py-2 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100"
|
| 121 |
+
placeholder="Header name"
|
| 122 |
+
/>
|
| 123 |
+
<span class="text-gray-500">:</span>
|
| 124 |
+
<input
|
| 125 |
+
type="text"
|
| 126 |
+
bind:value={formState.headers[i]![1]}
|
| 127 |
+
class="flex-1 rounded-md border border-gray-300 bg-gray-50 px-3 py-2 text-sm dark:border-gray-600 dark:bg-gray-700 dark:text-gray-100"
|
| 128 |
+
placeholder="Header value"
|
| 129 |
+
/>
|
| 130 |
+
<button
|
| 131 |
+
class="btn-sm !h-auto self-stretch text-red-600 hover:bg-red-50 dark:text-red-400 dark:hover:bg-red-900/20"
|
| 132 |
+
onclick={() => {
|
| 133 |
+
formState.headers.splice(i, 1);
|
| 134 |
+
}}
|
| 135 |
+
type="button"
|
| 136 |
+
>
|
| 137 |
+
<IconDelete class="h-4 w-4" />
|
| 138 |
+
</button>
|
| 139 |
+
</div>
|
| 140 |
+
{/each}
|
| 141 |
+
<button
|
| 142 |
+
class="btn-sm self-start"
|
| 143 |
+
type="button"
|
| 144 |
+
onclick={() => {
|
| 145 |
+
formState.headers.push(["", ""]);
|
| 146 |
+
formState = formState;
|
| 147 |
+
}}
|
| 148 |
+
>
|
| 149 |
+
<IconAdd class="size-4" />
|
| 150 |
+
Add Header
|
| 151 |
+
</button>
|
| 152 |
+
</div>
|
| 153 |
+
|
| 154 |
+
<div class="flex items-center gap-2">
|
| 155 |
+
<button class="btn-sm" {disabled}>
|
| 156 |
+
<IconCheck /><span>{submitLabel}</span>
|
| 157 |
+
</button>
|
| 158 |
+
<button class="btn-sm" type="button" onclick={onCancel}> Cancel </button>
|
| 159 |
+
</div>
|
| 160 |
+
</form>
|
src/lib/components/inference-playground/mcp-modal.svelte
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts">
|
| 2 |
+
import { mcpServers, type MCPFormData } from "$lib/state/mcps.svelte.js";
|
| 3 |
+
import IconPlus from "~icons/carbon/add";
|
| 4 |
+
import Dialog from "../dialog.svelte";
|
| 5 |
+
import McpCard from "./mcp-card.svelte";
|
| 6 |
+
import McpForm from "./mcp-form.svelte";
|
| 7 |
+
|
| 8 |
+
interface Props {
|
| 9 |
+
open: boolean;
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
let { open = $bindable(false) }: Props = $props();
|
| 13 |
+
let showAddForm = $state(false);
|
| 14 |
+
|
| 15 |
+
async function addServer(formData: MCPFormData) {
|
| 16 |
+
await mcpServers.create(formData);
|
| 17 |
+
showAddForm = false;
|
| 18 |
+
}
|
| 19 |
+
</script>
|
| 20 |
+
|
| 21 |
+
<Dialog
|
| 22 |
+
class="!w-2xl max-w-[90vw]"
|
| 23 |
+
title="MCP Servers"
|
| 24 |
+
{open}
|
| 25 |
+
onClose={() => {
|
| 26 |
+
open = false;
|
| 27 |
+
}}
|
| 28 |
+
>
|
| 29 |
+
<!-- Server List -->
|
| 30 |
+
<div class="space-y-4">
|
| 31 |
+
{#if mcpServers.all.length === 0}
|
| 32 |
+
<p class="text-sm text-gray-500">No MCP servers configured yet.</p>
|
| 33 |
+
{:else}
|
| 34 |
+
<div class="space-y-2">
|
| 35 |
+
{#each mcpServers.all as server (server.id)}
|
| 36 |
+
<McpCard {server} />
|
| 37 |
+
{/each}
|
| 38 |
+
</div>
|
| 39 |
+
{/if}
|
| 40 |
+
</div>
|
| 41 |
+
|
| 42 |
+
{#if showAddForm}
|
| 43 |
+
<div class="mt-4 border-t border-gray-200 pt-4 dark:border-gray-700">
|
| 44 |
+
<h3 class="mb-3 text-lg font-medium">Add New Server</h3>
|
| 45 |
+
<McpForm onSubmit={addServer} onCancel={() => (showAddForm = false)} submitLabel="Add Server" />
|
| 46 |
+
</div>
|
| 47 |
+
{:else}
|
| 48 |
+
<button class="btn-sm mt-2 flex w-full items-center gap-2" onclick={() => (showAddForm = true)}>
|
| 49 |
+
<IconPlus class="h-4 w-4" />
|
| 50 |
+
Add Server
|
| 51 |
+
</button>
|
| 52 |
+
{/if}
|
| 53 |
+
</Dialog>
|
src/lib/components/inference-playground/structured-output-modal.svelte
CHANGED
|
@@ -31,6 +31,7 @@
|
|
| 31 |
const modes = ["form", "code"] as const;
|
| 32 |
const radioGroup = new RadioGroup({
|
| 33 |
value: modes[0],
|
|
|
|
| 34 |
});
|
| 35 |
|
| 36 |
type Schema = {
|
|
|
|
| 31 |
const modes = ["form", "code"] as const;
|
| 32 |
const radioGroup = new RadioGroup({
|
| 33 |
value: modes[0],
|
| 34 |
+
orientation: "horizontal",
|
| 35 |
});
|
| 36 |
|
| 37 |
type Schema = {
|
src/lib/components/switch.svelte
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts">
|
| 2 |
+
import { classes } from "$lib/utils/styles.js";
|
| 3 |
+
import { type ComponentProps } from "melt";
|
| 4 |
+
import { Toggle, type ToggleProps } from "melt/builders";
|
| 5 |
+
import { ElementSize } from "runed";
|
| 6 |
+
|
| 7 |
+
let {
|
| 8 |
+
class: className,
|
| 9 |
+
value = $bindable(false),
|
| 10 |
+
...rest
|
| 11 |
+
}: ComponentProps<ToggleProps> & { class?: string } = $props();
|
| 12 |
+
|
| 13 |
+
const toggle = new Toggle({
|
| 14 |
+
value: () => value ?? false,
|
| 15 |
+
onValueChange: v => (value = v),
|
| 16 |
+
...rest,
|
| 17 |
+
});
|
| 18 |
+
|
| 19 |
+
let trigger = $state<HTMLButtonElement>();
|
| 20 |
+
const triggerSize = new ElementSize(() => trigger);
|
| 21 |
+
let thumb = $state<HTMLSpanElement>();
|
| 22 |
+
const thumbSize = new ElementSize(() => thumb);
|
| 23 |
+
const padding = 2;
|
| 24 |
+
|
| 25 |
+
const thumbX = $derived.by(() => {
|
| 26 |
+
if (toggle.value) {
|
| 27 |
+
return triggerSize.width - thumbSize.width - padding;
|
| 28 |
+
}
|
| 29 |
+
return padding;
|
| 30 |
+
});
|
| 31 |
+
|
| 32 |
+
let mounted = $state(false);
|
| 33 |
+
$effect(() => {
|
| 34 |
+
setTimeout(() => {
|
| 35 |
+
mounted = true;
|
| 36 |
+
});
|
| 37 |
+
});
|
| 38 |
+
</script>
|
| 39 |
+
|
| 40 |
+
<button
|
| 41 |
+
bind:this={trigger}
|
| 42 |
+
{...toggle.trigger}
|
| 43 |
+
class={classes(
|
| 44 |
+
"relative h-5 w-10 shrink-0 rounded-full bg-neutral-500 transition-all",
|
| 45 |
+
{ "bg-blue-500": toggle.value },
|
| 46 |
+
className,
|
| 47 |
+
)}
|
| 48 |
+
>
|
| 49 |
+
<span
|
| 50 |
+
bind:this={thumb}
|
| 51 |
+
class={classes("spring-bounce-20 spring-duration-200 absolute top-0.5 left-0 h-4 w-4 rounded-full bg-neutral-900", {
|
| 52 |
+
"bg-white": toggle.value,
|
| 53 |
+
"!duration-0": !mounted,
|
| 54 |
+
})}
|
| 55 |
+
style="transform: translateX({thumbX}px)"
|
| 56 |
+
></span>
|
| 57 |
+
</button>
|
src/lib/constants.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
|
|
|
|
|
| 1 |
export enum TEST_IDS {
|
| 2 |
checkpoints_trigger,
|
| 3 |
checkpoints_menu,
|
|
@@ -7,3 +9,15 @@ export enum TEST_IDS {
|
|
| 7 |
|
| 8 |
message,
|
| 9 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { env } from "$env/dynamic/public";
|
| 2 |
+
|
| 3 |
export enum TEST_IDS {
|
| 4 |
checkpoints_trigger,
|
| 5 |
checkpoints_menu,
|
|
|
|
| 9 |
|
| 10 |
message,
|
| 11 |
}
|
| 12 |
+
|
| 13 |
+
export function isMcpEnabled(): boolean {
|
| 14 |
+
const envEnabled = env.PUBLIC_ENABLE_MCP === "true";
|
| 15 |
+
if (envEnabled) return true;
|
| 16 |
+
|
| 17 |
+
if (typeof window === "undefined") return false;
|
| 18 |
+
|
| 19 |
+
const urlParams = new URLSearchParams(window.location.search);
|
| 20 |
+
const hasQueryParam = urlParams.has("mcp") || urlParams.has("enable-mcp");
|
| 21 |
+
|
| 22 |
+
return hasQueryParam;
|
| 23 |
+
}
|
src/lib/data/context_length.json
ADDED
|
@@ -0,0 +1,269 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"replicate": {},
|
| 3 |
+
"sambanova": {
|
| 4 |
+
"DeepSeek-R1-0528": 32768,
|
| 5 |
+
"DeepSeek-R1-Distill-Llama-70B": 131072,
|
| 6 |
+
"DeepSeek-V3-0324": 32768,
|
| 7 |
+
"E5-Mistral-7B-Instruct": 4096,
|
| 8 |
+
"Llama-4-Maverick-17B-128E-Instruct": 131072,
|
| 9 |
+
"Meta-Llama-3.1-8B-Instruct": 16384,
|
| 10 |
+
"Meta-Llama-3.3-70B-Instruct": 131072,
|
| 11 |
+
"Qwen3-32B": 32768,
|
| 12 |
+
"Whisper-Large-v3": 4096
|
| 13 |
+
},
|
| 14 |
+
"nebius": {
|
| 15 |
+
"meta-llama/Meta-Llama-3.1-8B-Instruct-fast": 131072,
|
| 16 |
+
"meta-llama/Meta-Llama-3.1-8B-Instruct": 131072,
|
| 17 |
+
"meta-llama/Meta-Llama-3.1-70B-Instruct": 131072,
|
| 18 |
+
"meta-llama/Meta-Llama-3.1-405B-Instruct": 131072,
|
| 19 |
+
"meta-llama/Llama-Guard-3-8B": 131072,
|
| 20 |
+
"nvidia/Llama-3_1-Nemotron-Ultra-253B-v1": 131072,
|
| 21 |
+
"mistralai/Mistral-Nemo-Instruct-2407": 128000,
|
| 22 |
+
"google/gemma-2-2b-it": 8192,
|
| 23 |
+
"google/gemma-2-9b-it-fast": 8192,
|
| 24 |
+
"Qwen/Qwen2.5-Coder-7B-fast": 32768,
|
| 25 |
+
"Qwen/Qwen2.5-Coder-7B": 32768,
|
| 26 |
+
"Qwen/Qwen2.5-Coder-32B-Instruct-fast": 131072,
|
| 27 |
+
"Qwen/Qwen2.5-Coder-32B-Instruct": 131072,
|
| 28 |
+
"Qwen/Qwen2.5-32B-Instruct-fast": 131072,
|
| 29 |
+
"Qwen/Qwen2.5-32B-Instruct": 131072,
|
| 30 |
+
"Qwen/Qwen2.5-72B-Instruct-fast": 131072,
|
| 31 |
+
"Qwen/Qwen2.5-72B-Instruct": 131072,
|
| 32 |
+
"Qwen/Qwen2-VL-72B-Instruct": 32768,
|
| 33 |
+
"aaditya/Llama3-OpenBioLLM-70B": 8192,
|
| 34 |
+
"BAAI/bge-en-icl": 32768,
|
| 35 |
+
"BAAI/bge-multilingual-gemma2": 8192,
|
| 36 |
+
"intfloat/e5-mistral-7b-instruct": 32768,
|
| 37 |
+
"meta-llama/Llama-3.3-70B-Instruct": 131072,
|
| 38 |
+
"meta-llama/Llama-3.3-70B-Instruct-fast": 131072,
|
| 39 |
+
"microsoft/phi-4": 16384,
|
| 40 |
+
"deepseek-ai/DeepSeek-V3": 163840,
|
| 41 |
+
"deepseek-ai/DeepSeek-R1": 163840,
|
| 42 |
+
"deepseek-ai/DeepSeek-R1-0528": 131072,
|
| 43 |
+
"NousResearch/Hermes-3-Llama-405B": 131072,
|
| 44 |
+
"deepseek-ai/DeepSeek-R1-Distill-Llama-70B": 131072,
|
| 45 |
+
"deepseek-ai/DeepSeek-R1-fast": 163840,
|
| 46 |
+
"Qwen/QwQ-32B-fast": 131072,
|
| 47 |
+
"Qwen/QwQ-32B": 131072,
|
| 48 |
+
"Qwen/Qwen3-235B-A22B": 40960,
|
| 49 |
+
"Qwen/Qwen3-30B-A3B": 40960,
|
| 50 |
+
"Qwen/Qwen3-30B-A3B-fast": 40960,
|
| 51 |
+
"Qwen/Qwen3-32B": 40960,
|
| 52 |
+
"Qwen/Qwen3-32B-fast": 40960,
|
| 53 |
+
"Qwen/Qwen3-14B": 40960,
|
| 54 |
+
"Qwen/Qwen3-4B-fast": 40960,
|
| 55 |
+
"nvidia/Llama-3_3-Nemotron-Super-49B-v1": 131072,
|
| 56 |
+
"mistralai/Mistral-Small-3.1-24B-Instruct-2503": 131072,
|
| 57 |
+
"mistralai/Devstral-Small-2505": 128000,
|
| 58 |
+
"google/gemma-3-27b-it": 110000,
|
| 59 |
+
"google/gemma-3-27b-it-fast": 110000,
|
| 60 |
+
"Qwen/Qwen2.5-VL-72B-Instruct": 32000,
|
| 61 |
+
"Qwen/Qwen3-Embedding-8B": 40960,
|
| 62 |
+
"deepseek-ai/DeepSeek-V3-0324": 163840,
|
| 63 |
+
"deepseek-ai/DeepSeek-V3-0324-fast": 163840,
|
| 64 |
+
"black-forest-labs/flux-dev": 0,
|
| 65 |
+
"black-forest-labs/flux-schnell": 0,
|
| 66 |
+
"stability-ai/sdxl": 0
|
| 67 |
+
},
|
| 68 |
+
"novita": {
|
| 69 |
+
"deepseek/deepseek-r1-0528": 163840,
|
| 70 |
+
"deepseek/deepseek-v3-0324": 163840,
|
| 71 |
+
"baidu/ernie-4.5-vl-424b-a47b": 123000,
|
| 72 |
+
"baidu/ernie-4.5-300b-a47b-paddle": 123000,
|
| 73 |
+
"qwen/qwen3-30b-a3b-fp8": 40960,
|
| 74 |
+
"minimaxai/minimax-m1-80k": 128000,
|
| 75 |
+
"deepseek/deepseek-r1-0528-qwen3-8b": 128000,
|
| 76 |
+
"qwen/qwen3-32b-fp8": 40960,
|
| 77 |
+
"qwen/qwen2.5-vl-72b-instruct": 32768,
|
| 78 |
+
"qwen/qwen3-235b-a22b-fp8": 40960,
|
| 79 |
+
"deepseek/deepseek-v3-turbo": 64000,
|
| 80 |
+
"meta-llama/llama-4-maverick-17b-128e-instruct-fp8": 1048576,
|
| 81 |
+
"google/gemma-3-27b-it": 32000,
|
| 82 |
+
"deepseek/deepseek-r1-turbo": 64000,
|
| 83 |
+
"Sao10K/L3-8B-Stheno-v3.2": 8192,
|
| 84 |
+
"gryphe/mythomax-l2-13b": 4096,
|
| 85 |
+
"deepseek/deepseek-prover-v2-671b": 160000,
|
| 86 |
+
"meta-llama/llama-4-scout-17b-16e-instruct": 131072,
|
| 87 |
+
"deepseek/deepseek-r1-distill-llama-8b": 32000,
|
| 88 |
+
"meta-llama/llama-3.1-8b-instruct": 16384,
|
| 89 |
+
"deepseek/deepseek-r1-distill-qwen-14b": 64000,
|
| 90 |
+
"meta-llama/llama-3.3-70b-instruct": 131072,
|
| 91 |
+
"qwen/qwen-2.5-72b-instruct": 32000,
|
| 92 |
+
"mistralai/mistral-nemo": 60288,
|
| 93 |
+
"deepseek/deepseek-r1-distill-qwen-32b": 64000,
|
| 94 |
+
"meta-llama/llama-3-8b-instruct": 8192,
|
| 95 |
+
"microsoft/wizardlm-2-8x22b": 65535,
|
| 96 |
+
"deepseek/deepseek-r1-distill-llama-70b": 32000,
|
| 97 |
+
"mistralai/mistral-7b-instruct": 32768,
|
| 98 |
+
"meta-llama/llama-3-70b-instruct": 8192,
|
| 99 |
+
"nousresearch/hermes-2-pro-llama-3-8b": 8192,
|
| 100 |
+
"sao10k/l3-70b-euryale-v2.1": 8192,
|
| 101 |
+
"cognitivecomputations/dolphin-mixtral-8x22b": 16000,
|
| 102 |
+
"sophosympatheia/midnight-rose-70b": 4096,
|
| 103 |
+
"sao10k/l3-8b-lunaris": 8192,
|
| 104 |
+
"baidu/ernie-4.5-vl-28b-a3b": 30000,
|
| 105 |
+
"baidu/ernie-4.5-21B-a3b": 120000,
|
| 106 |
+
"baidu/ernie-4.5-0.3b": 120000,
|
| 107 |
+
"google/gemma-3-1b-it": 32768,
|
| 108 |
+
"qwen/qwen3-8b-fp8": 128000,
|
| 109 |
+
"qwen/qwen3-4b-fp8": 128000,
|
| 110 |
+
"thudm/glm-4-32b-0414": 32000,
|
| 111 |
+
"qwen/qwen2.5-7b-instruct": 32000,
|
| 112 |
+
"meta-llama/llama-3.2-1b-instruct": 131000,
|
| 113 |
+
"meta-llama/llama-3.2-3b-instruct": 32768,
|
| 114 |
+
"meta-llama/llama-3.1-8b-instruct-bf16": 8192,
|
| 115 |
+
"sao10k/l31-70b-euryale-v2.2": 8192
|
| 116 |
+
},
|
| 117 |
+
"fal": {
|
| 118 |
+
"fal/model-name": 4096
|
| 119 |
+
},
|
| 120 |
+
"cerebras": {
|
| 121 |
+
"cerebras/model-name": 8192
|
| 122 |
+
},
|
| 123 |
+
"hf-inference": {
|
| 124 |
+
"google/gemma-2-9b-it": 8192,
|
| 125 |
+
"meta-llama/Meta-Llama-3-8B-Instruct": 8192
|
| 126 |
+
},
|
| 127 |
+
"hyperbolic": {
|
| 128 |
+
"Qwen/Qwen2.5-72B-Instruct": 131072,
|
| 129 |
+
"Qwen/Qwen2.5-VL-72B-Instruct": 32768,
|
| 130 |
+
"meta-llama/Meta-Llama-3-70B-Instruct": 8192,
|
| 131 |
+
"deepseek-ai/DeepSeek-V3": 131072,
|
| 132 |
+
"deepseek-ai/DeepSeek-V3-0324": 163840,
|
| 133 |
+
"meta-llama/Llama-3.3-70B-Instruct": 131072,
|
| 134 |
+
"Qwen/Qwen2.5-Coder-32B-Instruct": 32768,
|
| 135 |
+
"meta-llama/Llama-3.2-3B-Instruct": 131072,
|
| 136 |
+
"NousResearch/Hermes-3-Llama-3.1-70B": 12288,
|
| 137 |
+
"meta-llama/Meta-Llama-3.1-405B-Instruct": 131000,
|
| 138 |
+
"meta-llama/Meta-Llama-3.1-70B-Instruct": 131072,
|
| 139 |
+
"meta-llama/Meta-Llama-3.1-8B-Instruct": 131072,
|
| 140 |
+
"mistralai/Pixtral-12B-2409": 32768,
|
| 141 |
+
"Qwen/Qwen2.5-VL-7B-Instruct": 32768,
|
| 142 |
+
"meta-llama/Meta-Llama-3.1-405B-FP8": 32768,
|
| 143 |
+
"deepseek-ai/DeepSeek-R1": 163840,
|
| 144 |
+
"Qwen/QwQ-32B": 131072
|
| 145 |
+
},
|
| 146 |
+
"cohere": {
|
| 147 |
+
"embed-english-light-v3.0": 512,
|
| 148 |
+
"embed-multilingual-v2.0": 256,
|
| 149 |
+
"rerank-v3.5": 4096,
|
| 150 |
+
"embed-v4.0": 8192,
|
| 151 |
+
"rerank-english-v3.0": 4096,
|
| 152 |
+
"command-r-08-2024": 132096,
|
| 153 |
+
"embed-english-light-v3.0-image": 0,
|
| 154 |
+
"embed-english-v3.0-image": 0,
|
| 155 |
+
"command-nightly": 288000,
|
| 156 |
+
"command-a-03-2025": 288000,
|
| 157 |
+
"command-r-plus-08-2024": 132096,
|
| 158 |
+
"c4ai-aya-vision-32b": 16384,
|
| 159 |
+
"command-r": 132096,
|
| 160 |
+
"command-r7b-12-2024": 132000,
|
| 161 |
+
"command-r7b-arabic-02-2025": 128000,
|
| 162 |
+
"command-light-nightly": 4096,
|
| 163 |
+
"embed-english-v3.0": 512,
|
| 164 |
+
"embed-multilingual-light-v3.0-image": 0,
|
| 165 |
+
"embed-multilingual-v3.0-image": 0,
|
| 166 |
+
"c4ai-aya-expanse-32b": 128000,
|
| 167 |
+
"command": 4096
|
| 168 |
+
},
|
| 169 |
+
"together": {
|
| 170 |
+
"togethercomputer/m2-bert-80M-32k-retrieval": 32768,
|
| 171 |
+
"cartesia/sonic": 0,
|
| 172 |
+
"meta-llama/Meta-Llama-3-8B-Instruct-Lite": 8192,
|
| 173 |
+
"intfloat/multilingual-e5-large-instruct": 514,
|
| 174 |
+
"Alibaba-NLP/gte-modernbert-base": 8192,
|
| 175 |
+
"meta-llama/Llama-4-Scout-17B-16E-Instruct": 1048576,
|
| 176 |
+
"meta-llama/LlamaGuard-2-8b": 8192,
|
| 177 |
+
"Qwen/Qwen2.5-Coder-32B-Instruct": 16384,
|
| 178 |
+
"cartesia/sonic-2": 0,
|
| 179 |
+
"Qwen/Qwen3-235B-A22B-fp8-tput": 40960,
|
| 180 |
+
"togethercomputer/MoA-1": 32768,
|
| 181 |
+
"meta-llama/Meta-Llama-3-70B-Instruct-Turbo": 8192,
|
| 182 |
+
"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo": 131072,
|
| 183 |
+
"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo": 131072,
|
| 184 |
+
"meta-llama/Meta-Llama-Guard-3-8B": 8192,
|
| 185 |
+
"arcee_ai/arcee-spotlight": 131072,
|
| 186 |
+
"google/gemma-3-27b-it": 65536,
|
| 187 |
+
"arcee-ai/AFM-4.5B-Preview": 65536,
|
| 188 |
+
"deepseek-ai/DeepSeek-V3": 131072,
|
| 189 |
+
"lgai/exaone-3-5-32b-instruct": 32768,
|
| 190 |
+
"deepseek-ai/DeepSeek-R1-0528-tput": 163840,
|
| 191 |
+
"mistralai/Mixtral-8x7B-Instruct-v0.1": 32768,
|
| 192 |
+
"meta-llama/Llama-Vision-Free": 131072,
|
| 193 |
+
"meta-llama/Llama-3-8b-chat-hf": 8192,
|
| 194 |
+
"mistralai/Mistral-7B-Instruct-v0.1": 32768,
|
| 195 |
+
"Qwen/QwQ-32B": 131072,
|
| 196 |
+
"meta-llama/Llama-2-70b-hf": 4096,
|
| 197 |
+
"togethercomputer/MoA-1-Turbo": 32768,
|
| 198 |
+
"black-forest-labs/FLUX.1-kontext-max": 0,
|
| 199 |
+
"perplexity-ai/r1-1776": 163840,
|
| 200 |
+
"mistralai/Mistral-7B-Instruct-v0.2": 32768,
|
| 201 |
+
"deepseek-ai/DeepSeek-V3-p-dp": 131072,
|
| 202 |
+
"Qwen/Qwen2-72B-Instruct": 32768,
|
| 203 |
+
"mistralai/Mistral-7B-Instruct-v0.3": 32768,
|
| 204 |
+
"NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO": 32768,
|
| 205 |
+
"meta-llama/Llama-Guard-3-11B-Vision-Turbo": 131072,
|
| 206 |
+
"Qwen/Qwen2-VL-72B-Instruct": 32768,
|
| 207 |
+
"scb10x/scb10x-llama3-1-typhoon2-70b-instruct": 8192,
|
| 208 |
+
"arcee-ai/maestro-reasoning": 131072,
|
| 209 |
+
"meta-llama/Llama-3.2-3B-Instruct-Turbo": 131072,
|
| 210 |
+
"arcee-ai/virtuoso-medium-v2": 131072,
|
| 211 |
+
"arcee-ai/coder-large": 32768,
|
| 212 |
+
"meta-llama/Llama-Guard-4-12B": 1048576,
|
| 213 |
+
"deepseek-ai/DeepSeek-R1-Distill-Qwen-14B": 131072,
|
| 214 |
+
"arcee-ai/virtuoso-large": 131072,
|
| 215 |
+
"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B": 131072,
|
| 216 |
+
"deepseek-ai/DeepSeek-R1-Distill-Llama-70B": 131072,
|
| 217 |
+
"nvidia/Llama-3.1-Nemotron-70B-Instruct-HF": 32768,
|
| 218 |
+
"deepseek-ai/DeepSeek-R1-Distill-Llama-70B-free": 8192,
|
| 219 |
+
"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8": 1048576,
|
| 220 |
+
"togethercomputer/Refuel-Llm-V2-Small": 8192,
|
| 221 |
+
"togethercomputer/Refuel-Llm-V2": 16384,
|
| 222 |
+
"Qwen/Qwen2.5-VL-72B-Instruct": 32768,
|
| 223 |
+
"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo": 130815,
|
| 224 |
+
"scb10x/scb10x-typhoon-2-1-gemma3-12b": 131072,
|
| 225 |
+
"arcee-ai/caller": 32768,
|
| 226 |
+
"lgai/exaone-deep-32b": 32768,
|
| 227 |
+
"black-forest-labs/FLUX.1-kontext-pro": 0,
|
| 228 |
+
"google/gemma-3n-E4B-it": 32768,
|
| 229 |
+
"deepseek-ai/DeepSeek-R1": 163840,
|
| 230 |
+
"Qwen/Qwen2.5-72B-Instruct-Turbo": 131072,
|
| 231 |
+
"meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo": 131072,
|
| 232 |
+
"arcee-ai/arcee-blitz": 32768,
|
| 233 |
+
"meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo": 131072,
|
| 234 |
+
"meta-llama/Llama-3-70b-chat-hf": 8192,
|
| 235 |
+
"google/gemma-2-27b-it": 8192,
|
| 236 |
+
"meta-llama/Llama-3.3-70B-Instruct-Turbo-Free": 131072,
|
| 237 |
+
"Qwen/Qwen2.5-7B-Instruct-Turbo": 32768,
|
| 238 |
+
"mistralai/Mistral-Small-24B-Instruct-2501": 32768,
|
| 239 |
+
"Salesforce/Llama-Rank-V1": 8192,
|
| 240 |
+
"meta-llama/Llama-3.3-70B-Instruct-Turbo": 131072,
|
| 241 |
+
"marin-community/marin-8b-instruct": 4096,
|
| 242 |
+
"Qwen/Qwen3-32B-FP8": 0
|
| 243 |
+
},
|
| 244 |
+
"fireworks-ai": {
|
| 245 |
+
"accounts/perplexity/models/r1-1776": 163840,
|
| 246 |
+
"accounts/fireworks/models/deepseek-r1-0528": 163840,
|
| 247 |
+
"accounts/fireworks/models/qwen3-30b-a3b": 40000,
|
| 248 |
+
"accounts/fireworks/models/llama-guard-3-8b": 131072,
|
| 249 |
+
"accounts/fireworks/models/llama4-scout-instruct-basic": 10485760,
|
| 250 |
+
"accounts/fireworks/models/llama4-maverick-instruct-basic": 1048576,
|
| 251 |
+
"accounts/fireworks/models/llama-v3p1-8b-instruct": 131072,
|
| 252 |
+
"accounts/fireworks/models/firesearch-ocr-v6": 8192,
|
| 253 |
+
"accounts/fireworks/models/llama-v3p1-405b-instruct": 131072,
|
| 254 |
+
"accounts/fireworks/models/qwen2-vl-72b-instruct": 32768,
|
| 255 |
+
"accounts/fireworks/models/mixtral-8x22b-instruct": 65536,
|
| 256 |
+
"accounts/fireworks/models/qwen2p5-72b-instruct": 32768,
|
| 257 |
+
"accounts/fireworks/models/deepseek-r1-basic": 163840,
|
| 258 |
+
"accounts/fireworks/models/llama-v3p1-70b-instruct": 131072,
|
| 259 |
+
"accounts/fireworks/models/qwen3-235b-a22b": 128000,
|
| 260 |
+
"accounts/fireworks/models/llama-v3p3-70b-instruct": 131072,
|
| 261 |
+
"accounts/fireworks/models/deepseek-r1": 163840,
|
| 262 |
+
"accounts/sentientfoundation/models/dobby-unhinged-llama-3-3-70b-new": 131072,
|
| 263 |
+
"accounts/sentientfoundation-serverless/models/dobby-mini-unhinged-plus-llama-3-1-8b": 131072,
|
| 264 |
+
"accounts/fireworks/models/deepseek-v3": 131072,
|
| 265 |
+
"accounts/fireworks/models/deepseek-v3-0324": 163840,
|
| 266 |
+
"accounts/fireworks/models/qwq-32b": 131072,
|
| 267 |
+
"accounts/fireworks/models/qwen2p5-vl-32b-instruct": 128000
|
| 268 |
+
}
|
| 269 |
+
}
|
src/lib/state/mcps.svelte.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { idb } from "$lib/remult.js";
|
| 2 |
+
import { dequal } from "dequal";
|
| 3 |
+
import { Entity, Fields, repo, type MembersOnly } from "remult";
|
| 4 |
+
import { projects } from "./projects.svelte";
|
| 5 |
+
|
| 6 |
+
export type MCPProtocol = "sse" | "http";
|
| 7 |
+
|
| 8 |
+
export interface MCPServer {
|
| 9 |
+
id: string;
|
| 10 |
+
name: string;
|
| 11 |
+
url: string;
|
| 12 |
+
protocol: MCPProtocol;
|
| 13 |
+
headers?: Record<string, string>;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
@Entity("mcp_server")
|
| 17 |
+
export class MCPServerEntity {
|
| 18 |
+
@Fields.cuid()
|
| 19 |
+
id!: string;
|
| 20 |
+
|
| 21 |
+
@Fields.string()
|
| 22 |
+
name!: string;
|
| 23 |
+
|
| 24 |
+
@Fields.string()
|
| 25 |
+
url!: string;
|
| 26 |
+
|
| 27 |
+
@Fields.string()
|
| 28 |
+
protocol: MCPProtocol = "sse";
|
| 29 |
+
|
| 30 |
+
@Fields.json()
|
| 31 |
+
headers?: Record<string, string>;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
export type MCPServerEntityMembers = MembersOnly<MCPServerEntity>;
|
| 35 |
+
|
| 36 |
+
export type MCPFormData = {
|
| 37 |
+
name: string;
|
| 38 |
+
url: string;
|
| 39 |
+
protocol: MCPProtocol;
|
| 40 |
+
headers: Record<string, string>;
|
| 41 |
+
};
|
| 42 |
+
|
| 43 |
+
const mcpServersRepo = repo(MCPServerEntity, idb);
|
| 44 |
+
|
| 45 |
+
class MCPServers {
|
| 46 |
+
#servers: Record<MCPServerEntity["id"], MCPServerEntity> = $state({});
|
| 47 |
+
|
| 48 |
+
constructor() {
|
| 49 |
+
mcpServersRepo.find().then(res => {
|
| 50 |
+
res.forEach(server => {
|
| 51 |
+
if (dequal(this.#servers[server.id], server)) return;
|
| 52 |
+
this.#servers[server.id] = server;
|
| 53 |
+
});
|
| 54 |
+
});
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
async create(args: Omit<MCPServerEntity, "id">): Promise<string> {
|
| 58 |
+
const server = await mcpServersRepo.save({ ...args });
|
| 59 |
+
this.#servers[server.id] = server;
|
| 60 |
+
return server.id;
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
get all() {
|
| 64 |
+
return Object.values(this.#servers);
|
| 65 |
+
}
|
| 66 |
+
|
| 67 |
+
get enabled() {
|
| 68 |
+
const currentProject = projects.current;
|
| 69 |
+
if (!currentProject) return [];
|
| 70 |
+
return this.all.filter(server => currentProject.enabledMCPs?.includes(server.id));
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
async update(data: MCPServerEntity) {
|
| 74 |
+
if (!data.id) return;
|
| 75 |
+
await mcpServersRepo.upsert({ where: { id: data.id }, set: data });
|
| 76 |
+
this.#servers[data.id] = { ...data };
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
async delete(id: string) {
|
| 80 |
+
if (!id) return;
|
| 81 |
+
await mcpServersRepo.delete(id);
|
| 82 |
+
delete this.#servers[id];
|
| 83 |
+
}
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
export const mcpServers = new MCPServers();
|
src/lib/state/projects.svelte.ts
CHANGED
|
@@ -16,6 +16,9 @@ export class ProjectEntity {
|
|
| 16 |
@Fields.string()
|
| 17 |
systemMessage?: string;
|
| 18 |
|
|
|
|
|
|
|
|
|
|
| 19 |
@Fields.string()
|
| 20 |
branchedFromId?: string | null;
|
| 21 |
|
|
|
|
| 16 |
@Fields.string()
|
| 17 |
systemMessage?: string;
|
| 18 |
|
| 19 |
+
@Fields.json()
|
| 20 |
+
enabledMCPs?: string[];
|
| 21 |
+
|
| 22 |
@Fields.string()
|
| 23 |
branchedFromId?: string | null;
|
| 24 |
|
src/lib/utils/business.svelte.ts
CHANGED
|
@@ -6,11 +6,12 @@
|
|
| 6 |
*
|
| 7 |
**/
|
| 8 |
|
|
|
|
| 9 |
import { pricing } from "$lib/state/pricing.svelte.js";
|
| 10 |
-
import {
|
| 11 |
import { ConversationClass, type ConversationEntityMembers } from "$lib/state/conversations.svelte";
|
| 12 |
import { token } from "$lib/state/token.svelte";
|
| 13 |
-
import {
|
| 14 |
import {
|
| 15 |
isCustomModel,
|
| 16 |
isHFModel,
|
|
@@ -25,11 +26,12 @@ import { omit } from "$lib/utils/object.svelte.js";
|
|
| 25 |
import type { ChatCompletionInputMessage, InferenceSnippet } from "@huggingface/tasks";
|
| 26 |
import { type ChatCompletionOutputMessage } from "@huggingface/tasks";
|
| 27 |
import { AutoTokenizer, PreTrainedTokenizer } from "@huggingface/transformers";
|
| 28 |
-
import OpenAI from "openai";
|
| 29 |
import { images } from "$lib/state/images.svelte.js";
|
| 30 |
import { projects } from "$lib/state/projects.svelte.js";
|
|
|
|
| 31 |
import { modifySnippet } from "$lib/utils/snippets.js";
|
| 32 |
import { models } from "$lib/state/models.svelte";
|
|
|
|
| 33 |
|
| 34 |
type ChatCompletionInputMessageChunk =
|
| 35 |
NonNullable<ChatCompletionInputMessage["content"]> extends string | (infer U)[] ? U : never;
|
|
@@ -56,20 +58,6 @@ async function parseMessage(message: ConversationMessage): Promise<ChatCompletio
|
|
| 56 |
};
|
| 57 |
}
|
| 58 |
|
| 59 |
-
type HFCompletionMetadata = {
|
| 60 |
-
type: "huggingface";
|
| 61 |
-
client: InferenceClient;
|
| 62 |
-
args: Parameters<InferenceClient["chatCompletion"]>[0];
|
| 63 |
-
};
|
| 64 |
-
|
| 65 |
-
type OpenAICompletionMetadata = {
|
| 66 |
-
type: "openai";
|
| 67 |
-
client: OpenAI;
|
| 68 |
-
args: OpenAI.ChatCompletionCreateParams;
|
| 69 |
-
};
|
| 70 |
-
|
| 71 |
-
type CompletionMetadata = HFCompletionMetadata | OpenAICompletionMetadata;
|
| 72 |
-
|
| 73 |
export function maxAllowedTokens(conversation: ConversationClass) {
|
| 74 |
const model = conversation.model;
|
| 75 |
const { provider } = conversation.data;
|
|
@@ -78,11 +66,29 @@ export function maxAllowedTokens(conversation: ConversationClass) {
|
|
| 78 |
return customMaxTokens[conversation.model.id] ?? 100000;
|
| 79 |
}
|
| 80 |
|
| 81 |
-
// Try to get context length from router data
|
| 82 |
const ctxLength = pricing.getContextLength(model.id, provider);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
|
| 84 |
-
|
| 85 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 86 |
}
|
| 87 |
|
| 88 |
function getResponseFormatObj(conversation: ConversationClass | Conversation) {
|
|
@@ -112,10 +118,11 @@ function getResponseFormatObj(conversation: ConversationClass | Conversation) {
|
|
| 112 |
}
|
| 113 |
}
|
| 114 |
|
| 115 |
-
async function
|
| 116 |
conversation: ConversationClass | Conversation,
|
| 117 |
-
|
| 118 |
-
|
|
|
|
| 119 |
const data = conversation instanceof ConversationClass ? conversation.data : conversation;
|
| 120 |
const model = conversation.model;
|
| 121 |
const systemMessage = projects.current?.systemMessage;
|
|
@@ -126,98 +133,38 @@ async function getCompletionMetadata(
|
|
| 126 |
];
|
| 127 |
const parsed = await Promise.all(messages.map(parseMessage));
|
| 128 |
|
| 129 |
-
const
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
}
|
| 137 |
-
}),
|
| 138 |
-
)
|
| 139 |
-
: {};
|
| 140 |
-
|
| 141 |
-
const baseArgs = {
|
| 142 |
-
...data.config,
|
| 143 |
-
...extraParams,
|
| 144 |
messages: parsed,
|
| 145 |
-
|
| 146 |
-
response_format: getResponseFormatObj(conversation),
|
| 147 |
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
| 148 |
-
} as any;
|
| 149 |
-
|
| 150 |
-
// Handle OpenAI-compatible models
|
| 151 |
-
if (isCustomModel(model)) {
|
| 152 |
-
const openai = new OpenAI({
|
| 153 |
-
apiKey: model.accessToken,
|
| 154 |
-
baseURL: model.endpointUrl,
|
| 155 |
-
dangerouslyAllowBrowser: true,
|
| 156 |
-
fetch: (...args: Parameters<typeof fetch>) => {
|
| 157 |
-
return fetch(args[0], { ...args[1], signal });
|
| 158 |
-
},
|
| 159 |
-
});
|
| 160 |
-
|
| 161 |
-
const args = {
|
| 162 |
-
...baseArgs,
|
| 163 |
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
| 164 |
-
} as any;
|
| 165 |
-
|
| 166 |
-
return {
|
| 167 |
-
type: "openai",
|
| 168 |
-
client: openai,
|
| 169 |
-
args,
|
| 170 |
-
};
|
| 171 |
-
}
|
| 172 |
-
const args = {
|
| 173 |
-
...baseArgs,
|
| 174 |
provider: data.provider,
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
// Handle HuggingFace models
|
| 180 |
-
const clientOptions: ConstructorParameters<typeof InferenceClient>[1] = {};
|
| 181 |
-
if (billing.organization) {
|
| 182 |
-
clientOptions.billTo = billing.organization;
|
| 183 |
-
}
|
| 184 |
-
|
| 185 |
-
return {
|
| 186 |
-
type: "huggingface",
|
| 187 |
-
client: new InferenceClient(token.value, clientOptions),
|
| 188 |
-
args,
|
| 189 |
};
|
| 190 |
-
}
|
| 191 |
|
| 192 |
-
|
| 193 |
-
|
| 194 |
-
|
| 195 |
-
|
| 196 |
-
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
const stream = await metadata.client.chat.completions.create({
|
| 201 |
-
...metadata.args,
|
| 202 |
-
stream: true,
|
| 203 |
-
} as OpenAI.ChatCompletionCreateParamsStreaming);
|
| 204 |
-
|
| 205 |
-
let out = "";
|
| 206 |
-
for await (const chunk of stream) {
|
| 207 |
-
if (chunk.choices[0]?.delta?.content) {
|
| 208 |
-
out += chunk.choices[0].delta.content;
|
| 209 |
-
onChunk(out);
|
| 210 |
-
}
|
| 211 |
-
}
|
| 212 |
-
return;
|
| 213 |
-
}
|
| 214 |
|
| 215 |
-
// HuggingFace streaming
|
| 216 |
let out = "";
|
| 217 |
-
for await (const chunk of
|
| 218 |
-
if (chunk.
|
| 219 |
-
out += chunk.
|
| 220 |
onChunk(out);
|
|
|
|
|
|
|
| 221 |
}
|
| 222 |
}
|
| 223 |
}
|
|
@@ -225,34 +172,46 @@ export async function handleStreamingResponse(
|
|
| 225 |
export async function handleNonStreamingResponse(
|
| 226 |
conversation: ConversationClass | Conversation,
|
| 227 |
): Promise<{ message: ChatCompletionOutputMessage; completion_tokens: number }> {
|
| 228 |
-
const
|
| 229 |
-
|
| 230 |
-
|
| 231 |
-
const response = await metadata.client.chat.completions.create({
|
| 232 |
-
...metadata.args,
|
| 233 |
-
stream: false,
|
| 234 |
-
} as OpenAI.ChatCompletionCreateParamsNonStreaming);
|
| 235 |
-
|
| 236 |
-
if (response.choices && response.choices.length > 0 && response.choices[0]?.message) {
|
| 237 |
-
return {
|
| 238 |
-
message: {
|
| 239 |
-
role: "assistant",
|
| 240 |
-
content: response.choices[0].message.content || "",
|
| 241 |
-
},
|
| 242 |
-
completion_tokens: response.usage?.completion_tokens || 0,
|
| 243 |
-
};
|
| 244 |
-
}
|
| 245 |
-
throw new Error("No response from the model");
|
| 246 |
-
}
|
| 247 |
|
| 248 |
-
|
| 249 |
-
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
|
| 253 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 254 |
}
|
| 255 |
-
|
|
|
|
| 256 |
}
|
| 257 |
|
| 258 |
export function isSystemPromptSupported(model: Model | CustomModel) {
|
|
|
|
| 6 |
*
|
| 7 |
**/
|
| 8 |
|
| 9 |
+
import ctxLengthData from "$lib/data/context_length.json";
|
| 10 |
import { pricing } from "$lib/state/pricing.svelte.js";
|
| 11 |
+
import { snippets } from "@huggingface/inference";
|
| 12 |
import { ConversationClass, type ConversationEntityMembers } from "$lib/state/conversations.svelte";
|
| 13 |
import { token } from "$lib/state/token.svelte";
|
| 14 |
+
import { isMcpEnabled } from "$lib/constants.js";
|
| 15 |
import {
|
| 16 |
isCustomModel,
|
| 17 |
isHFModel,
|
|
|
|
| 26 |
import type { ChatCompletionInputMessage, InferenceSnippet } from "@huggingface/tasks";
|
| 27 |
import { type ChatCompletionOutputMessage } from "@huggingface/tasks";
|
| 28 |
import { AutoTokenizer, PreTrainedTokenizer } from "@huggingface/transformers";
|
|
|
|
| 29 |
import { images } from "$lib/state/images.svelte.js";
|
| 30 |
import { projects } from "$lib/state/projects.svelte.js";
|
| 31 |
+
import { mcpServers } from "$lib/state/mcps.svelte.js";
|
| 32 |
import { modifySnippet } from "$lib/utils/snippets.js";
|
| 33 |
import { models } from "$lib/state/models.svelte";
|
| 34 |
+
import { StreamReader } from "$lib/utils/stream.js";
|
| 35 |
|
| 36 |
type ChatCompletionInputMessageChunk =
|
| 37 |
NonNullable<ChatCompletionInputMessage["content"]> extends string | (infer U)[] ? U : never;
|
|
|
|
| 58 |
};
|
| 59 |
}
|
| 60 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
export function maxAllowedTokens(conversation: ConversationClass) {
|
| 62 |
const model = conversation.model;
|
| 63 |
const { provider } = conversation.data;
|
|
|
|
| 66 |
return customMaxTokens[conversation.model.id] ?? 100000;
|
| 67 |
}
|
| 68 |
|
| 69 |
+
// Try to get context length from pricing/router data first
|
| 70 |
const ctxLength = pricing.getContextLength(model.id, provider);
|
| 71 |
+
if (ctxLength) return ctxLength;
|
| 72 |
+
|
| 73 |
+
// Fall back to local context length data if available
|
| 74 |
+
const providerData = ctxLengthData[provider as keyof typeof ctxLengthData] as Record<string, number> | undefined;
|
| 75 |
+
const localCtxLength = providerData?.[model.id];
|
| 76 |
+
if (localCtxLength) return localCtxLength;
|
| 77 |
+
|
| 78 |
+
// Final fallback to custom max tokens
|
| 79 |
+
return customMaxTokens[conversation.model.id] ?? 100000;
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
function getEnabledMCPs() {
|
| 83 |
+
if (!isMcpEnabled()) return [];
|
| 84 |
|
| 85 |
+
return mcpServers.enabled.map(server => ({
|
| 86 |
+
id: server.id,
|
| 87 |
+
name: server.name,
|
| 88 |
+
url: server.url,
|
| 89 |
+
protocol: server.protocol,
|
| 90 |
+
headers: server.headers,
|
| 91 |
+
}));
|
| 92 |
}
|
| 93 |
|
| 94 |
function getResponseFormatObj(conversation: ConversationClass | Conversation) {
|
|
|
|
| 118 |
}
|
| 119 |
}
|
| 120 |
|
| 121 |
+
export async function handleStreamingResponse(
|
| 122 |
conversation: ConversationClass | Conversation,
|
| 123 |
+
onChunk: (content: string) => void,
|
| 124 |
+
abortController: AbortController,
|
| 125 |
+
): Promise<void> {
|
| 126 |
const data = conversation instanceof ConversationClass ? conversation.data : conversation;
|
| 127 |
const model = conversation.model;
|
| 128 |
const systemMessage = projects.current?.systemMessage;
|
|
|
|
| 133 |
];
|
| 134 |
const parsed = await Promise.all(messages.map(parseMessage));
|
| 135 |
|
| 136 |
+
const requestBody = {
|
| 137 |
+
model: {
|
| 138 |
+
id: model.id,
|
| 139 |
+
isCustom: isCustomModel(model),
|
| 140 |
+
accessToken: isCustomModel(model) ? model.accessToken : undefined,
|
| 141 |
+
endpointUrl: isCustomModel(model) ? model.endpointUrl : undefined,
|
| 142 |
+
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 143 |
messages: parsed,
|
| 144 |
+
config: data.config,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
provider: data.provider,
|
| 146 |
+
streaming: true,
|
| 147 |
+
response_format: getResponseFormatObj(conversation),
|
| 148 |
+
accessToken: token.value,
|
| 149 |
+
enabledMCPs: getEnabledMCPs(),
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 150 |
};
|
|
|
|
| 151 |
|
| 152 |
+
const reader = await StreamReader.fromFetch("/api/generate", {
|
| 153 |
+
method: "POST",
|
| 154 |
+
headers: {
|
| 155 |
+
"Content-Type": "application/json",
|
| 156 |
+
},
|
| 157 |
+
body: JSON.stringify(requestBody),
|
| 158 |
+
signal: abortController.signal,
|
| 159 |
+
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 160 |
|
|
|
|
| 161 |
let out = "";
|
| 162 |
+
for await (const chunk of reader.read()) {
|
| 163 |
+
if (chunk.type === "chunk" && chunk.content) {
|
| 164 |
+
out += chunk.content;
|
| 165 |
onChunk(out);
|
| 166 |
+
} else if (chunk.type === "error") {
|
| 167 |
+
throw new Error(chunk.error || "Stream error");
|
| 168 |
}
|
| 169 |
}
|
| 170 |
}
|
|
|
|
| 172 |
export async function handleNonStreamingResponse(
|
| 173 |
conversation: ConversationClass | Conversation,
|
| 174 |
): Promise<{ message: ChatCompletionOutputMessage; completion_tokens: number }> {
|
| 175 |
+
const data = conversation instanceof ConversationClass ? conversation.data : conversation;
|
| 176 |
+
const model = conversation.model;
|
| 177 |
+
const systemMessage = projects.current?.systemMessage;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 178 |
|
| 179 |
+
const messages: ConversationMessage[] = [
|
| 180 |
+
...(isSystemPromptSupported(model) && systemMessage?.length ? [{ role: "system", content: systemMessage }] : []),
|
| 181 |
+
...(data.messages || []),
|
| 182 |
+
];
|
| 183 |
+
const parsed = await Promise.all(messages.map(parseMessage));
|
| 184 |
+
|
| 185 |
+
const requestBody = {
|
| 186 |
+
model: {
|
| 187 |
+
id: model.id,
|
| 188 |
+
isCustom: isCustomModel(model),
|
| 189 |
+
accessToken: isCustomModel(model) ? model.accessToken : undefined,
|
| 190 |
+
endpointUrl: isCustomModel(model) ? model.endpointUrl : undefined,
|
| 191 |
+
},
|
| 192 |
+
messages: parsed,
|
| 193 |
+
config: data.config,
|
| 194 |
+
provider: data.provider,
|
| 195 |
+
streaming: false,
|
| 196 |
+
response_format: getResponseFormatObj(conversation),
|
| 197 |
+
accessToken: token.value,
|
| 198 |
+
enabledMCPs: getEnabledMCPs(),
|
| 199 |
+
};
|
| 200 |
+
|
| 201 |
+
const response = await fetch("/api/generate", {
|
| 202 |
+
method: "POST",
|
| 203 |
+
headers: {
|
| 204 |
+
"Content-Type": "application/json",
|
| 205 |
+
},
|
| 206 |
+
body: JSON.stringify(requestBody),
|
| 207 |
+
});
|
| 208 |
+
|
| 209 |
+
if (!response.ok) {
|
| 210 |
+
const error = await response.json();
|
| 211 |
+
throw new Error(error.error || "Failed to generate response");
|
| 212 |
}
|
| 213 |
+
|
| 214 |
+
return await response.json();
|
| 215 |
}
|
| 216 |
|
| 217 |
export function isSystemPromptSupported(model: Model | CustomModel) {
|
src/lib/utils/stream.ts
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export interface StreamChunk {
|
| 2 |
+
type: "chunk" | "done" | "error";
|
| 3 |
+
content?: string;
|
| 4 |
+
error?: string;
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
export class StreamReader {
|
| 8 |
+
private decoder = new TextDecoder();
|
| 9 |
+
private buffer = "";
|
| 10 |
+
|
| 11 |
+
constructor(private response: Response) {
|
| 12 |
+
if (!response.body) {
|
| 13 |
+
throw new Error("Response has no body");
|
| 14 |
+
}
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
async *read(): AsyncGenerator<StreamChunk, void, unknown> {
|
| 18 |
+
const reader = this.response.body!.getReader();
|
| 19 |
+
|
| 20 |
+
try {
|
| 21 |
+
while (true) {
|
| 22 |
+
const { done, value } = await reader.read();
|
| 23 |
+
if (done) break;
|
| 24 |
+
|
| 25 |
+
this.buffer += this.decoder.decode(value, { stream: true });
|
| 26 |
+
const lines = this.buffer.split("\n");
|
| 27 |
+
this.buffer = lines.pop() || "";
|
| 28 |
+
|
| 29 |
+
for (const line of lines) {
|
| 30 |
+
if (line.startsWith("data: ")) {
|
| 31 |
+
const data = line.slice(6).trim();
|
| 32 |
+
if (!data) continue;
|
| 33 |
+
|
| 34 |
+
try {
|
| 35 |
+
const parsed = JSON.parse(data) as StreamChunk;
|
| 36 |
+
yield parsed;
|
| 37 |
+
if (parsed.type === "done") return;
|
| 38 |
+
} catch {
|
| 39 |
+
// Ignore malformed JSON
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
}
|
| 43 |
+
}
|
| 44 |
+
} finally {
|
| 45 |
+
reader.releaseLock();
|
| 46 |
+
}
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
static async fromFetch(url: string, options?: RequestInit): Promise<StreamReader> {
|
| 50 |
+
const response = await fetch(url, options);
|
| 51 |
+
if (!response.ok) {
|
| 52 |
+
const error = await response.json();
|
| 53 |
+
throw new Error(error.error || "Request failed");
|
| 54 |
+
}
|
| 55 |
+
return new StreamReader(response);
|
| 56 |
+
}
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
export class StreamWriter {
|
| 60 |
+
private encoder = new TextEncoder();
|
| 61 |
+
private controller?: ReadableStreamDefaultController<Uint8Array>;
|
| 62 |
+
public readonly stream: ReadableStream<Uint8Array>;
|
| 63 |
+
|
| 64 |
+
constructor() {
|
| 65 |
+
this.stream = new ReadableStream({
|
| 66 |
+
start: controller => {
|
| 67 |
+
this.controller = controller;
|
| 68 |
+
},
|
| 69 |
+
});
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
write(chunk: StreamChunk): void {
|
| 73 |
+
if (!this.controller) {
|
| 74 |
+
return;
|
| 75 |
+
}
|
| 76 |
+
|
| 77 |
+
try {
|
| 78 |
+
const data = JSON.stringify(chunk);
|
| 79 |
+
this.controller.enqueue(this.encoder.encode(`data: ${data}\n\n`));
|
| 80 |
+
} catch {
|
| 81 |
+
// Controller might be closed
|
| 82 |
+
}
|
| 83 |
+
}
|
| 84 |
+
|
| 85 |
+
writeChunk(content: string): void {
|
| 86 |
+
this.write({ type: "chunk", content });
|
| 87 |
+
}
|
| 88 |
+
|
| 89 |
+
writeError(error: string): void {
|
| 90 |
+
this.write({ type: "error", error });
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
end(): void {
|
| 94 |
+
if (!this.controller) return;
|
| 95 |
+
try {
|
| 96 |
+
this.write({ type: "done" });
|
| 97 |
+
this.controller.close();
|
| 98 |
+
} catch {
|
| 99 |
+
// Controller might already be closed
|
| 100 |
+
}
|
| 101 |
+
this.controller = undefined;
|
| 102 |
+
}
|
| 103 |
+
|
| 104 |
+
error(error: Error): void {
|
| 105 |
+
if (!this.controller) return;
|
| 106 |
+
try {
|
| 107 |
+
this.writeError(error.message);
|
| 108 |
+
this.controller.close();
|
| 109 |
+
} catch {
|
| 110 |
+
// Controller might already be closed
|
| 111 |
+
}
|
| 112 |
+
this.controller = undefined;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
createResponse(): Response {
|
| 116 |
+
return new Response(this.stream, {
|
| 117 |
+
headers: {
|
| 118 |
+
"Content-Type": "text/event-stream",
|
| 119 |
+
"Cache-Control": "no-cache",
|
| 120 |
+
"Connection": "keep-alive",
|
| 121 |
+
},
|
| 122 |
+
});
|
| 123 |
+
}
|
| 124 |
+
}
|
| 125 |
+
|
| 126 |
+
export async function streamFromAsyncIterable<T>(
|
| 127 |
+
iterable: AsyncIterable<T>,
|
| 128 |
+
transform: (item: T) => StreamChunk,
|
| 129 |
+
): Promise<ReadableStream<Uint8Array>> {
|
| 130 |
+
const writer = new StreamWriter();
|
| 131 |
+
|
| 132 |
+
(async () => {
|
| 133 |
+
try {
|
| 134 |
+
for await (const item of iterable) {
|
| 135 |
+
writer.write(transform(item));
|
| 136 |
+
}
|
| 137 |
+
writer.end();
|
| 138 |
+
} catch (error) {
|
| 139 |
+
writer.error(error instanceof Error ? error : new Error(String(error)));
|
| 140 |
+
}
|
| 141 |
+
})();
|
| 142 |
+
|
| 143 |
+
return writer.stream;
|
| 144 |
+
}
|
src/lib/utils/styles.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { type ClassValue, clsx } from "clsx";
|
| 2 |
+
import { twMerge } from "tailwind-merge";
|
| 3 |
+
|
| 4 |
+
export function classes(...inputs: ClassValue[]) {
|
| 5 |
+
return twMerge(clsx(inputs));
|
| 6 |
+
}
|
src/lib/utils/url.spec.ts
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { describe, expect, it } from "vitest";
|
| 2 |
+
import { extractDomain } from "./url.js";
|
| 3 |
+
|
| 4 |
+
describe("extractDomain", () => {
|
| 5 |
+
it("should handle regular domains", () => {
|
| 6 |
+
expect(extractDomain("https://example.com")).toBe("example.com");
|
| 7 |
+
});
|
| 8 |
+
|
| 9 |
+
it("should handle single subdomains", () => {
|
| 10 |
+
expect(extractDomain("https://sub.example.com")).toBe("example.com");
|
| 11 |
+
});
|
| 12 |
+
|
| 13 |
+
it("should handle multiple subdomains", () => {
|
| 14 |
+
expect(extractDomain("https://sub1.sub2.example.com")).toBe("example.com");
|
| 15 |
+
expect(extractDomain("https://deep.sub.domain.co.uk")).toBe("domain.co.uk");
|
| 16 |
+
expect(extractDomain("https://a.b.c.d.e.f.g.example.net")).toBe("example.net");
|
| 17 |
+
});
|
| 18 |
+
|
| 19 |
+
it("should handle special TLDs like co.uk", () => {
|
| 20 |
+
expect(extractDomain("https://domain.co.uk")).toBe("domain.co.uk");
|
| 21 |
+
expect(extractDomain("https://sub.domain.co.uk")).toBe("domain.co.uk");
|
| 22 |
+
expect(extractDomain("https://another.domain.com.au")).toBe("domain.com.au");
|
| 23 |
+
});
|
| 24 |
+
|
| 25 |
+
it("should handle localhost", () => {
|
| 26 |
+
expect(extractDomain("http://localhost:3000")).toBe("localhost");
|
| 27 |
+
expect(extractDomain("http://localhost")).toBe("localhost");
|
| 28 |
+
});
|
| 29 |
+
|
| 30 |
+
it("should handle non-HTTP/HTTPS protocols", () => {
|
| 31 |
+
expect(extractDomain("ftp://files.example.com")).toBe("example.com");
|
| 32 |
+
expect(extractDomain("ws://websocket.example.com")).toBe("example.com");
|
| 33 |
+
});
|
| 34 |
+
|
| 35 |
+
it("should handle non-string values", () => {
|
| 36 |
+
expect(extractDomain(12345)).toBeNull();
|
| 37 |
+
expect(extractDomain({})).toBeNull();
|
| 38 |
+
expect(extractDomain(["https://example.com"])).toBeNull();
|
| 39 |
+
expect(extractDomain(true)).toBeNull();
|
| 40 |
+
});
|
| 41 |
+
|
| 42 |
+
it("should handle URL instances", () => {
|
| 43 |
+
expect(extractDomain(new URL("https://test.example.com"))).toBe("example.com");
|
| 44 |
+
expect(extractDomain(new URL("https://deeply.nested.subdomain.example.org"))).toBe("example.org");
|
| 45 |
+
});
|
| 46 |
+
|
| 47 |
+
it("should handle invalid URLs gracefully", () => {
|
| 48 |
+
expect(extractDomain("not-a-url")).toBeNull();
|
| 49 |
+
expect(extractDomain("htt:invalid-url")).toBeNull();
|
| 50 |
+
expect(extractDomain("example")).toBeNull();
|
| 51 |
+
expect(extractDomain("http://")).toBeNull();
|
| 52 |
+
});
|
| 53 |
+
|
| 54 |
+
it("should handle tricky but valid URLs", () => {
|
| 55 |
+
expect(extractDomain("https://example.com#hash")).toBe("example.com");
|
| 56 |
+
expect(extractDomain("https://example.com/path")).toBe("example.com");
|
| 57 |
+
expect(extractDomain("https://example.com/path?query=string")).toBe("example.com");
|
| 58 |
+
});
|
| 59 |
+
});
|
src/lib/utils/url.ts
CHANGED
|
@@ -6,3 +6,43 @@ export function isValidURL(url: string): boolean {
|
|
| 6 |
return false;
|
| 7 |
}
|
| 8 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
return false;
|
| 7 |
}
|
| 8 |
}
|
| 9 |
+
|
| 10 |
+
export const extractDomain = (value: unknown) => {
|
| 11 |
+
const url = toURL(value);
|
| 12 |
+
|
| 13 |
+
if (!url) {
|
| 14 |
+
return null;
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
const hostnameParts = url.hostname.split(".");
|
| 18 |
+
|
| 19 |
+
// Determine typical hostnames like "domain.com" or "domain.org"
|
| 20 |
+
if (hostnameParts.length <= 2) {
|
| 21 |
+
return url.hostname;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
// Determine two-part TLD if second last part of the hostname matches one of the prefixes
|
| 25 |
+
const prefixes = ["com", "co", "org", "net", "gov", "edu"];
|
| 26 |
+
const potentialTwoPartTLD = `${hostnameParts[hostnameParts.length - 2]}.${hostnameParts[hostnameParts.length - 1]}`;
|
| 27 |
+
|
| 28 |
+
return prefixes.includes(hostnameParts[hostnameParts.length - 2]!)
|
| 29 |
+
? `${hostnameParts[hostnameParts.length - 3]}.${potentialTwoPartTLD}`
|
| 30 |
+
: hostnameParts.slice(-2).join("."); // Fallback to last two parts of hostname
|
| 31 |
+
};
|
| 32 |
+
|
| 33 |
+
const toURL = (value: unknown) => {
|
| 34 |
+
if (value instanceof URL) {
|
| 35 |
+
return value;
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
if (typeof value !== "string" || !value) {
|
| 39 |
+
return null;
|
| 40 |
+
}
|
| 41 |
+
|
| 42 |
+
try {
|
| 43 |
+
const url = new URL(value);
|
| 44 |
+
return url.hostname ? url : null;
|
| 45 |
+
} catch {
|
| 46 |
+
return null;
|
| 47 |
+
}
|
| 48 |
+
};
|
src/routes/api/generate/+server.ts
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { last } from "$lib/utils/array.js";
|
| 2 |
+
import { StreamWriter } from "$lib/utils/stream.js";
|
| 3 |
+
import { json } from "@sveltejs/kit";
|
| 4 |
+
import type { ChatCompletionMessage } from "openai/resources/index.mjs";
|
| 5 |
+
import type { RequestHandler } from "./$types.js";
|
| 6 |
+
import { createAdapter, type GenerationArgs } from "./adapter.js";
|
| 7 |
+
import { connectToMCPServers, executeMcpTool, type MCPServerConnection } from "./mcp.js";
|
| 8 |
+
import type { FinishReason, GenerateRequest } from "./types.js";
|
| 9 |
+
import { debugLog } from "./utils.js";
|
| 10 |
+
|
| 11 |
+
type AssistantResponse = { message: ChatCompletionMessage; finish_reason: FinishReason };
|
| 12 |
+
|
| 13 |
+
type GenerateLoopArgs = {
|
| 14 |
+
args: GenerationArgs;
|
| 15 |
+
getAssistantResponse: (args: GenerationArgs) => Promise<AssistantResponse>;
|
| 16 |
+
connections: MCPServerConnection[];
|
| 17 |
+
};
|
| 18 |
+
|
| 19 |
+
async function generateLoop({ args, getAssistantResponse, connections }: GenerateLoopArgs) {
|
| 20 |
+
let finish_reason: FinishReason | null = null;
|
| 21 |
+
const abortReasons: FinishReason[] = ["stop", "content_filter", "length"];
|
| 22 |
+
|
| 23 |
+
while (!abortReasons.includes(finish_reason)) {
|
| 24 |
+
debugLog("finish reason", finish_reason);
|
| 25 |
+
switch (finish_reason) {
|
| 26 |
+
case null: {
|
| 27 |
+
const res = await getAssistantResponse(args);
|
| 28 |
+
args.messages.push(res.message);
|
| 29 |
+
finish_reason = res.finish_reason;
|
| 30 |
+
break;
|
| 31 |
+
}
|
| 32 |
+
case "tool_calls": {
|
| 33 |
+
const toolCalls = last(args.messages)?.tool_calls;
|
| 34 |
+
if (!toolCalls) {
|
| 35 |
+
debugLog("No tool calls found");
|
| 36 |
+
finish_reason = null;
|
| 37 |
+
break;
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
debugLog("Executing tool calls");
|
| 41 |
+
debugLog(JSON.stringify(toolCalls, null, 2));
|
| 42 |
+
|
| 43 |
+
await Promise.allSettled(
|
| 44 |
+
toolCalls.map(async toolCall => {
|
| 45 |
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
| 46 |
+
const response = await executeMcpTool(connections, toolCall as any);
|
| 47 |
+
debugLog("Tool call response", response);
|
| 48 |
+
args.messages.push(response);
|
| 49 |
+
}),
|
| 50 |
+
);
|
| 51 |
+
|
| 52 |
+
finish_reason = null;
|
| 53 |
+
|
| 54 |
+
break;
|
| 55 |
+
}
|
| 56 |
+
default: {
|
| 57 |
+
finish_reason = "stop";
|
| 58 |
+
break;
|
| 59 |
+
}
|
| 60 |
+
}
|
| 61 |
+
}
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
export const POST: RequestHandler = async ({ request }) => {
|
| 65 |
+
try {
|
| 66 |
+
const body: GenerateRequest = await request.json();
|
| 67 |
+
const { model, messages, config, provider, streaming, response_format, enabledMCPs } = body;
|
| 68 |
+
|
| 69 |
+
if (enabledMCPs?.length === 0) {
|
| 70 |
+
debugLog(`MCP: Enabled MCP servers: ${enabledMCPs?.join(", ")}`);
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
// Connect to enabled MCP servers
|
| 74 |
+
const connections = await connectToMCPServers(enabledMCPs || []);
|
| 75 |
+
const tools = connections.flatMap(conn => conn.tools);
|
| 76 |
+
|
| 77 |
+
debugLog(`MCP: Connected to ${connections.length} servers with ${tools.length} tools available`);
|
| 78 |
+
|
| 79 |
+
const adapter = createAdapter(body);
|
| 80 |
+
|
| 81 |
+
const args = {
|
| 82 |
+
model: model.id,
|
| 83 |
+
messages,
|
| 84 |
+
provider,
|
| 85 |
+
...config,
|
| 86 |
+
tools,
|
| 87 |
+
response_format,
|
| 88 |
+
stream: streaming,
|
| 89 |
+
};
|
| 90 |
+
|
| 91 |
+
if (streaming) {
|
| 92 |
+
const writer = new StreamWriter();
|
| 93 |
+
|
| 94 |
+
generateLoop({
|
| 95 |
+
args,
|
| 96 |
+
connections,
|
| 97 |
+
getAssistantResponse: async args => {
|
| 98 |
+
debugLog("Generating streaming response");
|
| 99 |
+
const res: AssistantResponse = {
|
| 100 |
+
message: {
|
| 101 |
+
role: "assistant",
|
| 102 |
+
content: "",
|
| 103 |
+
// refusal: null,
|
| 104 |
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
| 105 |
+
} as any,
|
| 106 |
+
finish_reason: null,
|
| 107 |
+
};
|
| 108 |
+
|
| 109 |
+
try {
|
| 110 |
+
const adapterStream = await adapter.stream(args);
|
| 111 |
+
for await (const chunk of adapterStream) {
|
| 112 |
+
const choice = chunk.choices[0];
|
| 113 |
+
if (!choice) continue;
|
| 114 |
+
|
| 115 |
+
if (choice.delta.content) {
|
| 116 |
+
res.message.content += choice.delta.content;
|
| 117 |
+
writer.writeChunk(choice.delta.content || "");
|
| 118 |
+
}
|
| 119 |
+
if (choice.delta.tool_calls) {
|
| 120 |
+
res.message.tool_calls = res.message.tool_calls ?? [];
|
| 121 |
+
|
| 122 |
+
for (const toolCall of choice.delta.tool_calls) {
|
| 123 |
+
res.message.tool_calls[toolCall.index] = res.message.tool_calls[toolCall.index] ?? {
|
| 124 |
+
id: toolCall.id ?? "",
|
| 125 |
+
type: "function",
|
| 126 |
+
function: {
|
| 127 |
+
name: "",
|
| 128 |
+
arguments: "",
|
| 129 |
+
},
|
| 130 |
+
};
|
| 131 |
+
|
| 132 |
+
if (toolCall.function?.name) {
|
| 133 |
+
res.message.tool_calls[toolCall.index]!.function.name += toolCall.function.name;
|
| 134 |
+
}
|
| 135 |
+
if (toolCall.function?.arguments) {
|
| 136 |
+
res.message.tool_calls[toolCall.index]!.function.arguments += toolCall.function.arguments;
|
| 137 |
+
}
|
| 138 |
+
}
|
| 139 |
+
}
|
| 140 |
+
if (choice.finish_reason) {
|
| 141 |
+
res.finish_reason = choice.finish_reason;
|
| 142 |
+
}
|
| 143 |
+
}
|
| 144 |
+
} catch (error) {
|
| 145 |
+
console.error("stream error", error);
|
| 146 |
+
writer.error(error instanceof Error ? error : new Error(String(error)));
|
| 147 |
+
res.finish_reason = "stop";
|
| 148 |
+
return res;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
debugLog("Generated message");
|
| 152 |
+
debugLog(JSON.stringify(res.message, null, 2));
|
| 153 |
+
return res;
|
| 154 |
+
},
|
| 155 |
+
})
|
| 156 |
+
.then(() => writer.end())
|
| 157 |
+
.catch(error => {
|
| 158 |
+
console.error("Generation loop error:", error);
|
| 159 |
+
writer.error(error instanceof Error ? error : new Error(String(error)));
|
| 160 |
+
});
|
| 161 |
+
|
| 162 |
+
debugLog("Creating response...");
|
| 163 |
+
|
| 164 |
+
return writer.createResponse();
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
const message: ChatCompletionMessage = {
|
| 168 |
+
role: "assistant",
|
| 169 |
+
content: "",
|
| 170 |
+
// refusal: null,
|
| 171 |
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
| 172 |
+
} as any;
|
| 173 |
+
|
| 174 |
+
await generateLoop({
|
| 175 |
+
args,
|
| 176 |
+
connections,
|
| 177 |
+
getAssistantResponse: async args => {
|
| 178 |
+
debugLog("Generating non-streaming response");
|
| 179 |
+
const response = await adapter.generate(args);
|
| 180 |
+
debugLog("Generated the response");
|
| 181 |
+
debugLog(JSON.stringify(response, null, 2));
|
| 182 |
+
|
| 183 |
+
if (response.choices && response.choices.length > 0) {
|
| 184 |
+
message.content += response.choices[0]!.message.content ?? "";
|
| 185 |
+
// const { completion_tokens } = response.usage || { completion_tokens: 0 };
|
| 186 |
+
|
| 187 |
+
return {
|
| 188 |
+
message: response.choices[0]!.message,
|
| 189 |
+
finish_reason: response.choices[0]!.finish_reason,
|
| 190 |
+
};
|
| 191 |
+
}
|
| 192 |
+
throw new Error("No response from the model");
|
| 193 |
+
},
|
| 194 |
+
});
|
| 195 |
+
|
| 196 |
+
return json({ message /* ,completion_tokens */ });
|
| 197 |
+
} catch (error) {
|
| 198 |
+
debugLog(JSON.stringify(error, null, 2));
|
| 199 |
+
console.error("Generation error:", error);
|
| 200 |
+
return json({ error: error instanceof Error ? error.message : "Unknown error occurred" }, { status: 500 });
|
| 201 |
+
}
|
| 202 |
+
};
|
src/routes/api/generate/adapter.ts
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
/* eslint-disable @typescript-eslint/no-explicit-any -- Sorry */
|
| 2 |
+
import { omit } from "$lib/utils/object.svelte.js";
|
| 3 |
+
import { InferenceClient } from "@huggingface/inference";
|
| 4 |
+
import type { ChatCompletionInputMessage } from "@huggingface/tasks";
|
| 5 |
+
import OpenAI from "openai";
|
| 6 |
+
import type { Stream } from "openai/streaming.mjs";
|
| 7 |
+
import type { GenerateRequest, OpenAIFunctionSchema } from "./types.js";
|
| 8 |
+
import type { ChatCompletionMessage } from "openai/resources/index.mjs";
|
| 9 |
+
|
| 10 |
+
export type GenerationArgs = {
|
| 11 |
+
model: string;
|
| 12 |
+
messages: Array<ChatCompletionInputMessage | ChatCompletionMessage>;
|
| 13 |
+
provider?: string;
|
| 14 |
+
config?: Record<string, unknown>;
|
| 15 |
+
tools?: OpenAIFunctionSchema[];
|
| 16 |
+
response_format?: unknown;
|
| 17 |
+
};
|
| 18 |
+
|
| 19 |
+
export interface Adapter {
|
| 20 |
+
stream: (args: GenerationArgs) => Promise<Stream<OpenAI.Chat.Completions.ChatCompletionChunk>>;
|
| 21 |
+
generate: (args: GenerationArgs) => Promise<OpenAI.Chat.Completions.ChatCompletion>;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
function createCustomAdapter({ model }: GenerateRequest): Adapter {
|
| 25 |
+
// Handle OpenAI-compatible custom models
|
| 26 |
+
const openai = new OpenAI({
|
| 27 |
+
apiKey: model.accessToken,
|
| 28 |
+
baseURL: model.endpointUrl,
|
| 29 |
+
});
|
| 30 |
+
|
| 31 |
+
return {
|
| 32 |
+
stream: async (args: GenerationArgs) => {
|
| 33 |
+
return await openai.chat.completions.create({
|
| 34 |
+
...omit(args, "provider"),
|
| 35 |
+
stream: true,
|
| 36 |
+
} as OpenAI.ChatCompletionCreateParamsStreaming);
|
| 37 |
+
},
|
| 38 |
+
generate: (args: GenerationArgs) => {
|
| 39 |
+
return openai.chat.completions.create({
|
| 40 |
+
...omit(args, "provider"),
|
| 41 |
+
stream: false,
|
| 42 |
+
} as OpenAI.ChatCompletionCreateParamsNonStreaming);
|
| 43 |
+
},
|
| 44 |
+
};
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
function createHFAdapter({ accessToken }: GenerateRequest): Adapter {
|
| 48 |
+
const client = new InferenceClient(accessToken);
|
| 49 |
+
return {
|
| 50 |
+
stream: (args: GenerationArgs) => {
|
| 51 |
+
return client.chatCompletionStream({
|
| 52 |
+
...args,
|
| 53 |
+
provider: args.provider as any,
|
| 54 |
+
response_format: args.response_format as any,
|
| 55 |
+
tools: args.tools as any,
|
| 56 |
+
} as any) as any;
|
| 57 |
+
},
|
| 58 |
+
generate: (args: GenerationArgs) => {
|
| 59 |
+
return client.chatCompletion(args as any) as any;
|
| 60 |
+
},
|
| 61 |
+
};
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
export function createAdapter(body: GenerateRequest): Adapter {
|
| 65 |
+
const { model } = body;
|
| 66 |
+
|
| 67 |
+
if (model.isCustom) {
|
| 68 |
+
return createCustomAdapter(body);
|
| 69 |
+
}
|
| 70 |
+
return createHFAdapter(body);
|
| 71 |
+
}
|
src/routes/api/generate/mcp.ts
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
|
| 2 |
+
import type { MCPServerConfig, McpToolSchema, OpenAIFunctionSchema } from "./types.js";
|
| 3 |
+
import { debugError, debugLog } from "./utils.js";
|
| 4 |
+
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";
|
| 5 |
+
import { SSEClientTransport } from "@modelcontextprotocol/sdk/client/sse.js";
|
| 6 |
+
|
| 7 |
+
export const mcpToolToOpenAIFunction = (tool: McpToolSchema): OpenAIFunctionSchema => {
|
| 8 |
+
return {
|
| 9 |
+
type: "function",
|
| 10 |
+
function: {
|
| 11 |
+
name: tool.name,
|
| 12 |
+
description: tool.name,
|
| 13 |
+
parameters: tool.inputSchema,
|
| 14 |
+
strict: true,
|
| 15 |
+
},
|
| 16 |
+
};
|
| 17 |
+
};
|
| 18 |
+
|
| 19 |
+
export type MCPServerConnection = { client: Client; tools: OpenAIFunctionSchema[] };
|
| 20 |
+
|
| 21 |
+
export const connectToMCPServers = async (servers: MCPServerConfig[]): Promise<MCPServerConnection[]> => {
|
| 22 |
+
const connections: MCPServerConnection[] = [];
|
| 23 |
+
|
| 24 |
+
await Promise.allSettled(
|
| 25 |
+
servers.map(async server => {
|
| 26 |
+
try {
|
| 27 |
+
const conn: MCPServerConnection = {
|
| 28 |
+
client: new Client({
|
| 29 |
+
name: "playground-client" + crypto.randomUUID(),
|
| 30 |
+
version: "0.0.1",
|
| 31 |
+
}),
|
| 32 |
+
tools: [],
|
| 33 |
+
};
|
| 34 |
+
|
| 35 |
+
debugLog(`Connecting to MCP server: ${server.name} (${server.url})`);
|
| 36 |
+
|
| 37 |
+
let transport;
|
| 38 |
+
const url = new URL(server.url);
|
| 39 |
+
if (server.protocol === "sse") {
|
| 40 |
+
transport = new SSEClientTransport(url);
|
| 41 |
+
} else {
|
| 42 |
+
transport = new StreamableHTTPClientTransport(url);
|
| 43 |
+
}
|
| 44 |
+
|
| 45 |
+
await conn.client.connect(transport);
|
| 46 |
+
|
| 47 |
+
const { tools: mcpTools } = await conn.client.listTools();
|
| 48 |
+
const serverTools = mcpTools.map(mcpToolToOpenAIFunction);
|
| 49 |
+
conn.tools.push(...serverTools);
|
| 50 |
+
debugLog(`Connected to ${server.name} with ${mcpTools.length} tools`);
|
| 51 |
+
connections.push(conn);
|
| 52 |
+
} catch (error) {
|
| 53 |
+
debugError(`Failed to connect to MCP server ${server.name}:`, error);
|
| 54 |
+
}
|
| 55 |
+
}),
|
| 56 |
+
);
|
| 57 |
+
|
| 58 |
+
return connections;
|
| 59 |
+
};
|
| 60 |
+
|
| 61 |
+
export const executeMcpTool = async (
|
| 62 |
+
connections: MCPServerConnection[],
|
| 63 |
+
toolCall: { id: string; function: { name: string; arguments: string } },
|
| 64 |
+
) => {
|
| 65 |
+
try {
|
| 66 |
+
debugLog(`Executing tool: ${toolCall.function.name}`);
|
| 67 |
+
debugLog(`Tool arguments:`, JSON.parse(toolCall.function.arguments));
|
| 68 |
+
|
| 69 |
+
// Try to find the tool in any of the connected clients
|
| 70 |
+
let result = null;
|
| 71 |
+
for (const conn of connections) {
|
| 72 |
+
try {
|
| 73 |
+
const toolExists = conn.tools.some(tool => tool.function?.name === toolCall.function.name);
|
| 74 |
+
if (!toolExists) continue;
|
| 75 |
+
debugLog(`Found tool ${toolCall.function.name}`);
|
| 76 |
+
result = await conn.client.callTool({
|
| 77 |
+
name: toolCall.function.name,
|
| 78 |
+
arguments: JSON.parse(toolCall.function.arguments),
|
| 79 |
+
});
|
| 80 |
+
} catch (clientError) {
|
| 81 |
+
debugError(`Failed to execute tool on client:`, clientError);
|
| 82 |
+
continue;
|
| 83 |
+
}
|
| 84 |
+
}
|
| 85 |
+
|
| 86 |
+
if (!result) {
|
| 87 |
+
throw new Error(`Tool ${toolCall.function.name} not found in any connected MCP server`);
|
| 88 |
+
}
|
| 89 |
+
|
| 90 |
+
// mcpLog(`Tool result:`, result.content);
|
| 91 |
+
|
| 92 |
+
return {
|
| 93 |
+
tool_call_id: toolCall.id,
|
| 94 |
+
role: "tool" as const,
|
| 95 |
+
content: JSON.stringify(result.content),
|
| 96 |
+
};
|
| 97 |
+
} catch (error) {
|
| 98 |
+
debugError(`Tool execution failed:`, error);
|
| 99 |
+
|
| 100 |
+
return {
|
| 101 |
+
tool_call_id: toolCall.id,
|
| 102 |
+
role: "tool" as const,
|
| 103 |
+
content: JSON.stringify({ error: error instanceof Error ? error.message : "Tool execution failed" }),
|
| 104 |
+
};
|
| 105 |
+
}
|
| 106 |
+
};
|
src/routes/api/generate/types.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { ChatCompletionInputMessage } from "@huggingface/tasks";
|
| 2 |
+
import type { ChatCompletionChunk } from "openai/resources/index.mjs";
|
| 3 |
+
|
| 4 |
+
export interface MCPServerConfig {
|
| 5 |
+
id: string;
|
| 6 |
+
name: string;
|
| 7 |
+
url: string;
|
| 8 |
+
protocol: "sse" | "http";
|
| 9 |
+
headers?: Record<string, string>;
|
| 10 |
+
}
|
| 11 |
+
|
| 12 |
+
export interface GenerateRequest {
|
| 13 |
+
model: {
|
| 14 |
+
id: string;
|
| 15 |
+
isCustom?: boolean;
|
| 16 |
+
accessToken?: string;
|
| 17 |
+
endpointUrl?: string;
|
| 18 |
+
};
|
| 19 |
+
messages: ChatCompletionInputMessage[];
|
| 20 |
+
config: Record<string, unknown>;
|
| 21 |
+
provider?: string;
|
| 22 |
+
streaming?: boolean;
|
| 23 |
+
response_format?: unknown;
|
| 24 |
+
accessToken: string;
|
| 25 |
+
enabledMCPs?: MCPServerConfig[];
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
export interface OpenAIFunctionSchema {
|
| 29 |
+
type?: string;
|
| 30 |
+
function?: {
|
| 31 |
+
name?: string;
|
| 32 |
+
description?: string;
|
| 33 |
+
parameters?: {
|
| 34 |
+
type?: string;
|
| 35 |
+
required?: string[];
|
| 36 |
+
additionalProperties?: boolean;
|
| 37 |
+
[key: string]: unknown;
|
| 38 |
+
};
|
| 39 |
+
strict?: boolean;
|
| 40 |
+
};
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
export type McpToolSchema = {
|
| 44 |
+
name: string;
|
| 45 |
+
inputSchema: {
|
| 46 |
+
type: string;
|
| 47 |
+
required?: string[];
|
| 48 |
+
additionalProperties?: boolean;
|
| 49 |
+
[key: string]: unknown;
|
| 50 |
+
};
|
| 51 |
+
};
|
| 52 |
+
|
| 53 |
+
export type FinishReason = ChatCompletionChunk.Choice["finish_reason"];
|
src/routes/api/generate/utils.ts
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
const DEBUG_LOG = true;
|
| 2 |
+
|
| 3 |
+
export const debugLog = (...args: unknown[]) => {
|
| 4 |
+
if (!DEBUG_LOG) return;
|
| 5 |
+
console.log("[LOG DEBUG]", ...args);
|
| 6 |
+
};
|
| 7 |
+
|
| 8 |
+
export const debugError = (...args: unknown[]) => {
|
| 9 |
+
if (!DEBUG_LOG) return;
|
| 10 |
+
console.error("[LOG DEBUG]", ...args);
|
| 11 |
+
};
|