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 |
+
};
|