try fix client
Browse files- package-lock.json +701 -2
- package.json +1 -0
- src/lib/components/MonsterGenerator/MonsterGenerator.svelte +2 -2
- src/lib/components/MonsterGenerator/MonsterResult.svelte +107 -348
- src/lib/components/Piclets/PicletDetail.svelte +0 -1
- src/lib/services/qwen3Client.ts +112 -105
- src/lib/services/textGenerationClient.ts +69 -2
package-lock.json
CHANGED
@@ -8,6 +8,7 @@
|
|
8 |
"name": "svelte",
|
9 |
"version": "0.0.0",
|
10 |
"dependencies": {
|
|
|
11 |
"@imgly/background-removal": "^1.7.0",
|
12 |
"dexie": "^4.0.11"
|
13 |
},
|
@@ -39,6 +40,34 @@
|
|
39 |
"node": ">=6.0.0"
|
40 |
}
|
41 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
"node_modules/@esbuild/aix-ppc64": {
|
43 |
"version": "0.25.6",
|
44 |
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
|
@@ -481,6 +510,26 @@
|
|
481 |
"node": ">=18"
|
482 |
}
|
483 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
484 |
"node_modules/@imgly/background-removal": {
|
485 |
"version": "1.7.0",
|
486 |
"resolved": "https://registry.npmjs.org/@imgly/background-removal/-/background-removal-1.7.0.tgz",
|
@@ -495,6 +544,80 @@
|
|
495 |
"onnxruntime-web": "1.21.0"
|
496 |
}
|
497 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
498 |
"node_modules/@jridgewell/gen-mapping": {
|
499 |
"version": "0.3.12",
|
500 |
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
|
@@ -534,6 +657,45 @@
|
|
534 |
"@jridgewell/sourcemap-codec": "^1.4.14"
|
535 |
}
|
536 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
537 |
"node_modules/@polka/url": {
|
538 |
"version": "1.0.0-next.29",
|
539 |
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
|
@@ -962,6 +1124,12 @@
|
|
962 |
"@types/deep-eql": "*"
|
963 |
}
|
964 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
965 |
"node_modules/@types/deep-eql": {
|
966 |
"version": "4.0.2",
|
967 |
"resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
|
@@ -976,6 +1144,12 @@
|
|
976 |
"dev": true,
|
977 |
"license": "MIT"
|
978 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
979 |
"node_modules/@types/node": {
|
980 |
"version": "24.0.14",
|
981 |
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.14.tgz",
|
@@ -985,6 +1159,18 @@
|
|
985 |
"undici-types": "~7.8.0"
|
986 |
}
|
987 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
988 |
"node_modules/@types/whatwg-mimetype": {
|
989 |
"version": "3.0.2",
|
990 |
"resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz",
|
@@ -1142,6 +1328,57 @@
|
|
1142 |
"node": ">=0.4.0"
|
1143 |
}
|
1144 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1145 |
"node_modules/aria-query": {
|
1146 |
"version": "5.3.2",
|
1147 |
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
|
@@ -1172,6 +1409,19 @@
|
|
1172 |
"node": ">= 0.4"
|
1173 |
}
|
1174 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1175 |
"node_modules/cac": {
|
1176 |
"version": "6.7.14",
|
1177 |
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
|
@@ -1225,6 +1475,46 @@
|
|
1225 |
"url": "https://paulmillr.com/funding/"
|
1226 |
}
|
1227 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1228 |
"node_modules/clsx": {
|
1229 |
"version": "2.1.1",
|
1230 |
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
@@ -1235,6 +1525,33 @@
|
|
1235 |
"node": ">=6"
|
1236 |
}
|
1237 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1238 |
"node_modules/debug": {
|
1239 |
"version": "4.4.1",
|
1240 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
|
@@ -1279,6 +1596,12 @@
|
|
1279 |
"integrity": "sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==",
|
1280 |
"license": "Apache-2.0"
|
1281 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
1282 |
"node_modules/es-module-lexer": {
|
1283 |
"version": "1.7.0",
|
1284 |
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
|
@@ -1328,6 +1651,15 @@
|
|
1328 |
"@esbuild/win32-x64": "0.25.6"
|
1329 |
}
|
1330 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1331 |
"node_modules/esm-env": {
|
1332 |
"version": "1.2.2",
|
1333 |
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
|
@@ -1355,6 +1687,15 @@
|
|
1355 |
"@types/estree": "^1.0.0"
|
1356 |
}
|
1357 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1358 |
"node_modules/expect-type": {
|
1359 |
"version": "1.2.2",
|
1360 |
"resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
|
@@ -1390,6 +1731,12 @@
|
|
1390 |
}
|
1391 |
}
|
1392 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
1393 |
"node_modules/fflate": {
|
1394 |
"version": "0.8.2",
|
1395 |
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
|
@@ -1426,6 +1773,24 @@
|
|
1426 |
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
1427 |
}
|
1428 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1429 |
"node_modules/guid-typescript": {
|
1430 |
"version": "1.0.9",
|
1431 |
"resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",
|
@@ -1465,6 +1830,12 @@
|
|
1465 |
"dev": true,
|
1466 |
"license": "MIT"
|
1467 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
1468 |
"node_modules/iota-array": {
|
1469 |
"version": "1.0.0",
|
1470 |
"resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
|
@@ -1477,6 +1848,21 @@
|
|
1477 |
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
|
1478 |
"license": "MIT"
|
1479 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1480 |
"node_modules/is-reference": {
|
1481 |
"version": "3.0.3",
|
1482 |
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
|
@@ -1568,6 +1954,59 @@
|
|
1568 |
"dev": true,
|
1569 |
"license": "MIT"
|
1570 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1571 |
"node_modules/nanoid": {
|
1572 |
"version": "3.3.11",
|
1573 |
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
@@ -1597,6 +2036,17 @@
|
|
1597 |
"is-buffer": "^1.0.2"
|
1598 |
}
|
1599 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1600 |
"node_modules/onnxruntime-common": {
|
1601 |
"version": "1.21.0",
|
1602 |
"resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.21.0.tgz",
|
@@ -1619,6 +2069,18 @@
|
|
1619 |
"protobufjs": "^7.2.4"
|
1620 |
}
|
1621 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1622 |
"node_modules/pathe": {
|
1623 |
"version": "2.0.3",
|
1624 |
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
|
@@ -1640,7 +2102,6 @@
|
|
1640 |
"version": "1.1.1",
|
1641 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
1642 |
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
1643 |
-
"dev": true,
|
1644 |
"license": "ISC"
|
1645 |
},
|
1646 |
"node_modules/picomatch": {
|
@@ -1717,6 +2178,33 @@
|
|
1717 |
"node": ">=12.0.0"
|
1718 |
}
|
1719 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1720 |
"node_modules/readdirp": {
|
1721 |
"version": "4.1.2",
|
1722 |
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
@@ -1731,6 +2219,21 @@
|
|
1731 |
"url": "https://paulmillr.com/funding/"
|
1732 |
}
|
1733 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1734 |
"node_modules/rollup": {
|
1735 |
"version": "4.45.1",
|
1736 |
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz",
|
@@ -1784,6 +2287,15 @@
|
|
1784 |
"node": ">=6"
|
1785 |
}
|
1786 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1787 |
"node_modules/siginfo": {
|
1788 |
"version": "2.0.0",
|
1789 |
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
|
@@ -1791,6 +2303,18 @@
|
|
1791 |
"dev": true,
|
1792 |
"license": "ISC"
|
1793 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1794 |
"node_modules/sirv": {
|
1795 |
"version": "3.0.1",
|
1796 |
"resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz",
|
@@ -1823,6 +2347,15 @@
|
|
1823 |
"dev": true,
|
1824 |
"license": "MIT"
|
1825 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1826 |
"node_modules/std-env": {
|
1827 |
"version": "3.9.0",
|
1828 |
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
|
@@ -1830,6 +2363,38 @@
|
|
1830 |
"dev": true,
|
1831 |
"license": "MIT"
|
1832 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1833 |
"node_modules/strip-literal": {
|
1834 |
"version": "3.0.0",
|
1835 |
"resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz",
|
@@ -1893,6 +2458,12 @@
|
|
1893 |
"typescript": ">=5.0.0"
|
1894 |
}
|
1895 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
1896 |
"node_modules/tinybench": {
|
1897 |
"version": "2.9.0",
|
1898 |
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
|
@@ -1964,11 +2535,37 @@
|
|
1964 |
"node": ">=6"
|
1965 |
}
|
1966 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1967 |
"node_modules/typescript": {
|
1968 |
"version": "5.8.3",
|
1969 |
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
1970 |
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
1971 |
-
"dev": true,
|
1972 |
"license": "Apache-2.0",
|
1973 |
"bin": {
|
1974 |
"tsc": "bin/tsc",
|
@@ -1984,6 +2581,25 @@
|
|
1984 |
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
|
1985 |
"license": "MIT"
|
1986 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1987 |
"node_modules/vite": {
|
1988 |
"version": "6.3.5",
|
1989 |
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
|
@@ -2202,6 +2818,89 @@
|
|
2202 |
"node": ">=8"
|
2203 |
}
|
2204 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2205 |
"node_modules/zimmerframe": {
|
2206 |
"version": "1.1.2",
|
2207 |
"resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
|
|
|
8 |
"name": "svelte",
|
9 |
"version": "0.0.0",
|
10 |
"dependencies": {
|
11 |
+
"@gradio/client": "^1.15.6",
|
12 |
"@imgly/background-removal": "^1.7.0",
|
13 |
"dexie": "^4.0.11"
|
14 |
},
|
|
|
40 |
"node": ">=6.0.0"
|
41 |
}
|
42 |
},
|
43 |
+
"node_modules/@bundled-es-modules/cookie": {
|
44 |
+
"version": "2.0.1",
|
45 |
+
"resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz",
|
46 |
+
"integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==",
|
47 |
+
"license": "ISC",
|
48 |
+
"dependencies": {
|
49 |
+
"cookie": "^0.7.2"
|
50 |
+
}
|
51 |
+
},
|
52 |
+
"node_modules/@bundled-es-modules/statuses": {
|
53 |
+
"version": "1.0.1",
|
54 |
+
"resolved": "https://registry.npmjs.org/@bundled-es-modules/statuses/-/statuses-1.0.1.tgz",
|
55 |
+
"integrity": "sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==",
|
56 |
+
"license": "ISC",
|
57 |
+
"dependencies": {
|
58 |
+
"statuses": "^2.0.1"
|
59 |
+
}
|
60 |
+
},
|
61 |
+
"node_modules/@bundled-es-modules/tough-cookie": {
|
62 |
+
"version": "0.1.6",
|
63 |
+
"resolved": "https://registry.npmjs.org/@bundled-es-modules/tough-cookie/-/tough-cookie-0.1.6.tgz",
|
64 |
+
"integrity": "sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==",
|
65 |
+
"license": "ISC",
|
66 |
+
"dependencies": {
|
67 |
+
"@types/tough-cookie": "^4.0.5",
|
68 |
+
"tough-cookie": "^4.1.4"
|
69 |
+
}
|
70 |
+
},
|
71 |
"node_modules/@esbuild/aix-ppc64": {
|
72 |
"version": "0.25.6",
|
73 |
"resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz",
|
|
|
510 |
"node": ">=18"
|
511 |
}
|
512 |
},
|
513 |
+
"node_modules/@gradio/client": {
|
514 |
+
"version": "1.15.6",
|
515 |
+
"resolved": "https://registry.npmjs.org/@gradio/client/-/client-1.15.6.tgz",
|
516 |
+
"integrity": "sha512-QDUj2uubhp8emy7vSF/27Pn7X/tTiI2kOIL4ymiqClw9ps3DMZnsmUgKg0JSQ0w/ir71kWV0zcmJLtsy2E+KKw==",
|
517 |
+
"license": "ISC",
|
518 |
+
"dependencies": {
|
519 |
+
"@types/eventsource": "^1.1.15",
|
520 |
+
"bufferutil": "^4.0.7",
|
521 |
+
"eventsource": "^2.0.2",
|
522 |
+
"fetch-event-stream": "^0.1.5",
|
523 |
+
"msw": "^2.2.1",
|
524 |
+
"semiver": "^1.1.0",
|
525 |
+
"textlinestream": "^1.1.1",
|
526 |
+
"typescript": "^5.0.0",
|
527 |
+
"ws": "^8.13.0"
|
528 |
+
},
|
529 |
+
"engines": {
|
530 |
+
"node": ">=18.0.0"
|
531 |
+
}
|
532 |
+
},
|
533 |
"node_modules/@imgly/background-removal": {
|
534 |
"version": "1.7.0",
|
535 |
"resolved": "https://registry.npmjs.org/@imgly/background-removal/-/background-removal-1.7.0.tgz",
|
|
|
544 |
"onnxruntime-web": "1.21.0"
|
545 |
}
|
546 |
},
|
547 |
+
"node_modules/@inquirer/confirm": {
|
548 |
+
"version": "5.1.14",
|
549 |
+
"resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.14.tgz",
|
550 |
+
"integrity": "sha512-5yR4IBfe0kXe59r1YCTG8WXkUbl7Z35HK87Sw+WUyGD8wNUx7JvY7laahzeytyE1oLn74bQnL7hstctQxisQ8Q==",
|
551 |
+
"license": "MIT",
|
552 |
+
"dependencies": {
|
553 |
+
"@inquirer/core": "^10.1.15",
|
554 |
+
"@inquirer/type": "^3.0.8"
|
555 |
+
},
|
556 |
+
"engines": {
|
557 |
+
"node": ">=18"
|
558 |
+
},
|
559 |
+
"peerDependencies": {
|
560 |
+
"@types/node": ">=18"
|
561 |
+
},
|
562 |
+
"peerDependenciesMeta": {
|
563 |
+
"@types/node": {
|
564 |
+
"optional": true
|
565 |
+
}
|
566 |
+
}
|
567 |
+
},
|
568 |
+
"node_modules/@inquirer/core": {
|
569 |
+
"version": "10.1.15",
|
570 |
+
"resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.15.tgz",
|
571 |
+
"integrity": "sha512-8xrp836RZvKkpNbVvgWUlxjT4CraKk2q+I3Ksy+seI2zkcE+y6wNs1BVhgcv8VyImFecUhdQrYLdW32pAjwBdA==",
|
572 |
+
"license": "MIT",
|
573 |
+
"dependencies": {
|
574 |
+
"@inquirer/figures": "^1.0.13",
|
575 |
+
"@inquirer/type": "^3.0.8",
|
576 |
+
"ansi-escapes": "^4.3.2",
|
577 |
+
"cli-width": "^4.1.0",
|
578 |
+
"mute-stream": "^2.0.0",
|
579 |
+
"signal-exit": "^4.1.0",
|
580 |
+
"wrap-ansi": "^6.2.0",
|
581 |
+
"yoctocolors-cjs": "^2.1.2"
|
582 |
+
},
|
583 |
+
"engines": {
|
584 |
+
"node": ">=18"
|
585 |
+
},
|
586 |
+
"peerDependencies": {
|
587 |
+
"@types/node": ">=18"
|
588 |
+
},
|
589 |
+
"peerDependenciesMeta": {
|
590 |
+
"@types/node": {
|
591 |
+
"optional": true
|
592 |
+
}
|
593 |
+
}
|
594 |
+
},
|
595 |
+
"node_modules/@inquirer/figures": {
|
596 |
+
"version": "1.0.13",
|
597 |
+
"resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.13.tgz",
|
598 |
+
"integrity": "sha512-lGPVU3yO9ZNqA7vTYz26jny41lE7yoQansmqdMLBEfqaGsmdg7V3W9mK9Pvb5IL4EVZ9GnSDGMO/cJXud5dMaw==",
|
599 |
+
"license": "MIT",
|
600 |
+
"engines": {
|
601 |
+
"node": ">=18"
|
602 |
+
}
|
603 |
+
},
|
604 |
+
"node_modules/@inquirer/type": {
|
605 |
+
"version": "3.0.8",
|
606 |
+
"resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.8.tgz",
|
607 |
+
"integrity": "sha512-lg9Whz8onIHRthWaN1Q9EGLa/0LFJjyM8mEUbL1eTi6yMGvBf8gvyDLtxSXztQsxMvhxxNpJYrwa1YHdq+w4Jw==",
|
608 |
+
"license": "MIT",
|
609 |
+
"engines": {
|
610 |
+
"node": ">=18"
|
611 |
+
},
|
612 |
+
"peerDependencies": {
|
613 |
+
"@types/node": ">=18"
|
614 |
+
},
|
615 |
+
"peerDependenciesMeta": {
|
616 |
+
"@types/node": {
|
617 |
+
"optional": true
|
618 |
+
}
|
619 |
+
}
|
620 |
+
},
|
621 |
"node_modules/@jridgewell/gen-mapping": {
|
622 |
"version": "0.3.12",
|
623 |
"resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.12.tgz",
|
|
|
657 |
"@jridgewell/sourcemap-codec": "^1.4.14"
|
658 |
}
|
659 |
},
|
660 |
+
"node_modules/@mswjs/interceptors": {
|
661 |
+
"version": "0.39.3",
|
662 |
+
"resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.39.3.tgz",
|
663 |
+
"integrity": "sha512-9bw/wBL7pblsnOCIqvn1788S9o4h+cC5HWXg0Xhh0dOzsZ53IyfmBM+FYqpDDPbm0xjCqEqvCITloF3Dm4TXRQ==",
|
664 |
+
"license": "MIT",
|
665 |
+
"dependencies": {
|
666 |
+
"@open-draft/deferred-promise": "^2.2.0",
|
667 |
+
"@open-draft/logger": "^0.3.0",
|
668 |
+
"@open-draft/until": "^2.0.0",
|
669 |
+
"is-node-process": "^1.2.0",
|
670 |
+
"outvariant": "^1.4.3",
|
671 |
+
"strict-event-emitter": "^0.5.1"
|
672 |
+
},
|
673 |
+
"engines": {
|
674 |
+
"node": ">=18"
|
675 |
+
}
|
676 |
+
},
|
677 |
+
"node_modules/@open-draft/deferred-promise": {
|
678 |
+
"version": "2.2.0",
|
679 |
+
"resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz",
|
680 |
+
"integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==",
|
681 |
+
"license": "MIT"
|
682 |
+
},
|
683 |
+
"node_modules/@open-draft/logger": {
|
684 |
+
"version": "0.3.0",
|
685 |
+
"resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz",
|
686 |
+
"integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==",
|
687 |
+
"license": "MIT",
|
688 |
+
"dependencies": {
|
689 |
+
"is-node-process": "^1.2.0",
|
690 |
+
"outvariant": "^1.4.0"
|
691 |
+
}
|
692 |
+
},
|
693 |
+
"node_modules/@open-draft/until": {
|
694 |
+
"version": "2.1.0",
|
695 |
+
"resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz",
|
696 |
+
"integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==",
|
697 |
+
"license": "MIT"
|
698 |
+
},
|
699 |
"node_modules/@polka/url": {
|
700 |
"version": "1.0.0-next.29",
|
701 |
"resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz",
|
|
|
1124 |
"@types/deep-eql": "*"
|
1125 |
}
|
1126 |
},
|
1127 |
+
"node_modules/@types/cookie": {
|
1128 |
+
"version": "0.6.0",
|
1129 |
+
"resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz",
|
1130 |
+
"integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==",
|
1131 |
+
"license": "MIT"
|
1132 |
+
},
|
1133 |
"node_modules/@types/deep-eql": {
|
1134 |
"version": "4.0.2",
|
1135 |
"resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz",
|
|
|
1144 |
"dev": true,
|
1145 |
"license": "MIT"
|
1146 |
},
|
1147 |
+
"node_modules/@types/eventsource": {
|
1148 |
+
"version": "1.1.15",
|
1149 |
+
"resolved": "https://registry.npmjs.org/@types/eventsource/-/eventsource-1.1.15.tgz",
|
1150 |
+
"integrity": "sha512-XQmGcbnxUNa06HR3VBVkc9+A2Vpi9ZyLJcdS5dwaQQ/4ZMWFO+5c90FnMUpbtMZwB/FChoYHwuVg8TvkECacTA==",
|
1151 |
+
"license": "MIT"
|
1152 |
+
},
|
1153 |
"node_modules/@types/node": {
|
1154 |
"version": "24.0.14",
|
1155 |
"resolved": "https://registry.npmjs.org/@types/node/-/node-24.0.14.tgz",
|
|
|
1159 |
"undici-types": "~7.8.0"
|
1160 |
}
|
1161 |
},
|
1162 |
+
"node_modules/@types/statuses": {
|
1163 |
+
"version": "2.0.6",
|
1164 |
+
"resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz",
|
1165 |
+
"integrity": "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==",
|
1166 |
+
"license": "MIT"
|
1167 |
+
},
|
1168 |
+
"node_modules/@types/tough-cookie": {
|
1169 |
+
"version": "4.0.5",
|
1170 |
+
"resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz",
|
1171 |
+
"integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==",
|
1172 |
+
"license": "MIT"
|
1173 |
+
},
|
1174 |
"node_modules/@types/whatwg-mimetype": {
|
1175 |
"version": "3.0.2",
|
1176 |
"resolved": "https://registry.npmjs.org/@types/whatwg-mimetype/-/whatwg-mimetype-3.0.2.tgz",
|
|
|
1328 |
"node": ">=0.4.0"
|
1329 |
}
|
1330 |
},
|
1331 |
+
"node_modules/ansi-escapes": {
|
1332 |
+
"version": "4.3.2",
|
1333 |
+
"resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
|
1334 |
+
"integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
|
1335 |
+
"license": "MIT",
|
1336 |
+
"dependencies": {
|
1337 |
+
"type-fest": "^0.21.3"
|
1338 |
+
},
|
1339 |
+
"engines": {
|
1340 |
+
"node": ">=8"
|
1341 |
+
},
|
1342 |
+
"funding": {
|
1343 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
1344 |
+
}
|
1345 |
+
},
|
1346 |
+
"node_modules/ansi-escapes/node_modules/type-fest": {
|
1347 |
+
"version": "0.21.3",
|
1348 |
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
|
1349 |
+
"integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
|
1350 |
+
"license": "(MIT OR CC0-1.0)",
|
1351 |
+
"engines": {
|
1352 |
+
"node": ">=10"
|
1353 |
+
},
|
1354 |
+
"funding": {
|
1355 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
1356 |
+
}
|
1357 |
+
},
|
1358 |
+
"node_modules/ansi-regex": {
|
1359 |
+
"version": "5.0.1",
|
1360 |
+
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
|
1361 |
+
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
|
1362 |
+
"license": "MIT",
|
1363 |
+
"engines": {
|
1364 |
+
"node": ">=8"
|
1365 |
+
}
|
1366 |
+
},
|
1367 |
+
"node_modules/ansi-styles": {
|
1368 |
+
"version": "4.3.0",
|
1369 |
+
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
|
1370 |
+
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
|
1371 |
+
"license": "MIT",
|
1372 |
+
"dependencies": {
|
1373 |
+
"color-convert": "^2.0.1"
|
1374 |
+
},
|
1375 |
+
"engines": {
|
1376 |
+
"node": ">=8"
|
1377 |
+
},
|
1378 |
+
"funding": {
|
1379 |
+
"url": "https://github.com/chalk/ansi-styles?sponsor=1"
|
1380 |
+
}
|
1381 |
+
},
|
1382 |
"node_modules/aria-query": {
|
1383 |
"version": "5.3.2",
|
1384 |
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz",
|
|
|
1409 |
"node": ">= 0.4"
|
1410 |
}
|
1411 |
},
|
1412 |
+
"node_modules/bufferutil": {
|
1413 |
+
"version": "4.0.9",
|
1414 |
+
"resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.9.tgz",
|
1415 |
+
"integrity": "sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==",
|
1416 |
+
"hasInstallScript": true,
|
1417 |
+
"license": "MIT",
|
1418 |
+
"dependencies": {
|
1419 |
+
"node-gyp-build": "^4.3.0"
|
1420 |
+
},
|
1421 |
+
"engines": {
|
1422 |
+
"node": ">=6.14.2"
|
1423 |
+
}
|
1424 |
+
},
|
1425 |
"node_modules/cac": {
|
1426 |
"version": "6.7.14",
|
1427 |
"resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
|
|
|
1475 |
"url": "https://paulmillr.com/funding/"
|
1476 |
}
|
1477 |
},
|
1478 |
+
"node_modules/cli-width": {
|
1479 |
+
"version": "4.1.0",
|
1480 |
+
"resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
|
1481 |
+
"integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
|
1482 |
+
"license": "ISC",
|
1483 |
+
"engines": {
|
1484 |
+
"node": ">= 12"
|
1485 |
+
}
|
1486 |
+
},
|
1487 |
+
"node_modules/cliui": {
|
1488 |
+
"version": "8.0.1",
|
1489 |
+
"resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
|
1490 |
+
"integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
|
1491 |
+
"license": "ISC",
|
1492 |
+
"dependencies": {
|
1493 |
+
"string-width": "^4.2.0",
|
1494 |
+
"strip-ansi": "^6.0.1",
|
1495 |
+
"wrap-ansi": "^7.0.0"
|
1496 |
+
},
|
1497 |
+
"engines": {
|
1498 |
+
"node": ">=12"
|
1499 |
+
}
|
1500 |
+
},
|
1501 |
+
"node_modules/cliui/node_modules/wrap-ansi": {
|
1502 |
+
"version": "7.0.0",
|
1503 |
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
1504 |
+
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
|
1505 |
+
"license": "MIT",
|
1506 |
+
"dependencies": {
|
1507 |
+
"ansi-styles": "^4.0.0",
|
1508 |
+
"string-width": "^4.1.0",
|
1509 |
+
"strip-ansi": "^6.0.0"
|
1510 |
+
},
|
1511 |
+
"engines": {
|
1512 |
+
"node": ">=10"
|
1513 |
+
},
|
1514 |
+
"funding": {
|
1515 |
+
"url": "https://github.com/chalk/wrap-ansi?sponsor=1"
|
1516 |
+
}
|
1517 |
+
},
|
1518 |
"node_modules/clsx": {
|
1519 |
"version": "2.1.1",
|
1520 |
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
|
|
|
1525 |
"node": ">=6"
|
1526 |
}
|
1527 |
},
|
1528 |
+
"node_modules/color-convert": {
|
1529 |
+
"version": "2.0.1",
|
1530 |
+
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
|
1531 |
+
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
|
1532 |
+
"license": "MIT",
|
1533 |
+
"dependencies": {
|
1534 |
+
"color-name": "~1.1.4"
|
1535 |
+
},
|
1536 |
+
"engines": {
|
1537 |
+
"node": ">=7.0.0"
|
1538 |
+
}
|
1539 |
+
},
|
1540 |
+
"node_modules/color-name": {
|
1541 |
+
"version": "1.1.4",
|
1542 |
+
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
|
1543 |
+
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
|
1544 |
+
"license": "MIT"
|
1545 |
+
},
|
1546 |
+
"node_modules/cookie": {
|
1547 |
+
"version": "0.7.2",
|
1548 |
+
"resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",
|
1549 |
+
"integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",
|
1550 |
+
"license": "MIT",
|
1551 |
+
"engines": {
|
1552 |
+
"node": ">= 0.6"
|
1553 |
+
}
|
1554 |
+
},
|
1555 |
"node_modules/debug": {
|
1556 |
"version": "4.4.1",
|
1557 |
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
|
|
|
1596 |
"integrity": "sha512-SOKO002EqlvBYYKQSew3iymBoN2EQ4BDw/3yprjh7kAfFzjBYkaMNa/pZvcA7HSWlcKSQb9XhPe3wKyQ0x4A8A==",
|
1597 |
"license": "Apache-2.0"
|
1598 |
},
|
1599 |
+
"node_modules/emoji-regex": {
|
1600 |
+
"version": "8.0.0",
|
1601 |
+
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
|
1602 |
+
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
|
1603 |
+
"license": "MIT"
|
1604 |
+
},
|
1605 |
"node_modules/es-module-lexer": {
|
1606 |
"version": "1.7.0",
|
1607 |
"resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
|
|
|
1651 |
"@esbuild/win32-x64": "0.25.6"
|
1652 |
}
|
1653 |
},
|
1654 |
+
"node_modules/escalade": {
|
1655 |
+
"version": "3.2.0",
|
1656 |
+
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz",
|
1657 |
+
"integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
|
1658 |
+
"license": "MIT",
|
1659 |
+
"engines": {
|
1660 |
+
"node": ">=6"
|
1661 |
+
}
|
1662 |
+
},
|
1663 |
"node_modules/esm-env": {
|
1664 |
"version": "1.2.2",
|
1665 |
"resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz",
|
|
|
1687 |
"@types/estree": "^1.0.0"
|
1688 |
}
|
1689 |
},
|
1690 |
+
"node_modules/eventsource": {
|
1691 |
+
"version": "2.0.2",
|
1692 |
+
"resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz",
|
1693 |
+
"integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==",
|
1694 |
+
"license": "MIT",
|
1695 |
+
"engines": {
|
1696 |
+
"node": ">=12.0.0"
|
1697 |
+
}
|
1698 |
+
},
|
1699 |
"node_modules/expect-type": {
|
1700 |
"version": "1.2.2",
|
1701 |
"resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.2.2.tgz",
|
|
|
1731 |
}
|
1732 |
}
|
1733 |
},
|
1734 |
+
"node_modules/fetch-event-stream": {
|
1735 |
+
"version": "0.1.5",
|
1736 |
+
"resolved": "https://registry.npmjs.org/fetch-event-stream/-/fetch-event-stream-0.1.5.tgz",
|
1737 |
+
"integrity": "sha512-V1PWovkspxQfssq/NnxoEyQo1DV+MRK/laPuPblIZmSjMN8P5u46OhlFQznSr9p/t0Sp8Uc6SbM3yCMfr0KU8g==",
|
1738 |
+
"license": "MIT"
|
1739 |
+
},
|
1740 |
"node_modules/fflate": {
|
1741 |
"version": "0.8.2",
|
1742 |
"resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz",
|
|
|
1773 |
"node": "^8.16.0 || ^10.6.0 || >=11.0.0"
|
1774 |
}
|
1775 |
},
|
1776 |
+
"node_modules/get-caller-file": {
|
1777 |
+
"version": "2.0.5",
|
1778 |
+
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
|
1779 |
+
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
|
1780 |
+
"license": "ISC",
|
1781 |
+
"engines": {
|
1782 |
+
"node": "6.* || 8.* || >= 10.*"
|
1783 |
+
}
|
1784 |
+
},
|
1785 |
+
"node_modules/graphql": {
|
1786 |
+
"version": "16.11.0",
|
1787 |
+
"resolved": "https://registry.npmjs.org/graphql/-/graphql-16.11.0.tgz",
|
1788 |
+
"integrity": "sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==",
|
1789 |
+
"license": "MIT",
|
1790 |
+
"engines": {
|
1791 |
+
"node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
|
1792 |
+
}
|
1793 |
+
},
|
1794 |
"node_modules/guid-typescript": {
|
1795 |
"version": "1.0.9",
|
1796 |
"resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz",
|
|
|
1830 |
"dev": true,
|
1831 |
"license": "MIT"
|
1832 |
},
|
1833 |
+
"node_modules/headers-polyfill": {
|
1834 |
+
"version": "4.0.3",
|
1835 |
+
"resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz",
|
1836 |
+
"integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==",
|
1837 |
+
"license": "MIT"
|
1838 |
+
},
|
1839 |
"node_modules/iota-array": {
|
1840 |
"version": "1.0.0",
|
1841 |
"resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
|
|
|
1848 |
"integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
|
1849 |
"license": "MIT"
|
1850 |
},
|
1851 |
+
"node_modules/is-fullwidth-code-point": {
|
1852 |
+
"version": "3.0.0",
|
1853 |
+
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
|
1854 |
+
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
|
1855 |
+
"license": "MIT",
|
1856 |
+
"engines": {
|
1857 |
+
"node": ">=8"
|
1858 |
+
}
|
1859 |
+
},
|
1860 |
+
"node_modules/is-node-process": {
|
1861 |
+
"version": "1.2.0",
|
1862 |
+
"resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz",
|
1863 |
+
"integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==",
|
1864 |
+
"license": "MIT"
|
1865 |
+
},
|
1866 |
"node_modules/is-reference": {
|
1867 |
"version": "3.0.3",
|
1868 |
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz",
|
|
|
1954 |
"dev": true,
|
1955 |
"license": "MIT"
|
1956 |
},
|
1957 |
+
"node_modules/msw": {
|
1958 |
+
"version": "2.10.4",
|
1959 |
+
"resolved": "https://registry.npmjs.org/msw/-/msw-2.10.4.tgz",
|
1960 |
+
"integrity": "sha512-6R1or/qyele7q3RyPwNuvc0IxO8L8/Aim6Sz5ncXEgcWUNxSKE+udriTOWHtpMwmfkLYlacA2y7TIx4cL5lgHA==",
|
1961 |
+
"hasInstallScript": true,
|
1962 |
+
"license": "MIT",
|
1963 |
+
"dependencies": {
|
1964 |
+
"@bundled-es-modules/cookie": "^2.0.1",
|
1965 |
+
"@bundled-es-modules/statuses": "^1.0.1",
|
1966 |
+
"@bundled-es-modules/tough-cookie": "^0.1.6",
|
1967 |
+
"@inquirer/confirm": "^5.0.0",
|
1968 |
+
"@mswjs/interceptors": "^0.39.1",
|
1969 |
+
"@open-draft/deferred-promise": "^2.2.0",
|
1970 |
+
"@open-draft/until": "^2.1.0",
|
1971 |
+
"@types/cookie": "^0.6.0",
|
1972 |
+
"@types/statuses": "^2.0.4",
|
1973 |
+
"graphql": "^16.8.1",
|
1974 |
+
"headers-polyfill": "^4.0.2",
|
1975 |
+
"is-node-process": "^1.2.0",
|
1976 |
+
"outvariant": "^1.4.3",
|
1977 |
+
"path-to-regexp": "^6.3.0",
|
1978 |
+
"picocolors": "^1.1.1",
|
1979 |
+
"strict-event-emitter": "^0.5.1",
|
1980 |
+
"type-fest": "^4.26.1",
|
1981 |
+
"yargs": "^17.7.2"
|
1982 |
+
},
|
1983 |
+
"bin": {
|
1984 |
+
"msw": "cli/index.js"
|
1985 |
+
},
|
1986 |
+
"engines": {
|
1987 |
+
"node": ">=18"
|
1988 |
+
},
|
1989 |
+
"funding": {
|
1990 |
+
"url": "https://github.com/sponsors/mswjs"
|
1991 |
+
},
|
1992 |
+
"peerDependencies": {
|
1993 |
+
"typescript": ">= 4.8.x"
|
1994 |
+
},
|
1995 |
+
"peerDependenciesMeta": {
|
1996 |
+
"typescript": {
|
1997 |
+
"optional": true
|
1998 |
+
}
|
1999 |
+
}
|
2000 |
+
},
|
2001 |
+
"node_modules/mute-stream": {
|
2002 |
+
"version": "2.0.0",
|
2003 |
+
"resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz",
|
2004 |
+
"integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==",
|
2005 |
+
"license": "ISC",
|
2006 |
+
"engines": {
|
2007 |
+
"node": "^18.17.0 || >=20.5.0"
|
2008 |
+
}
|
2009 |
+
},
|
2010 |
"node_modules/nanoid": {
|
2011 |
"version": "3.3.11",
|
2012 |
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz",
|
|
|
2036 |
"is-buffer": "^1.0.2"
|
2037 |
}
|
2038 |
},
|
2039 |
+
"node_modules/node-gyp-build": {
|
2040 |
+
"version": "4.8.4",
|
2041 |
+
"resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
|
2042 |
+
"integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
|
2043 |
+
"license": "MIT",
|
2044 |
+
"bin": {
|
2045 |
+
"node-gyp-build": "bin.js",
|
2046 |
+
"node-gyp-build-optional": "optional.js",
|
2047 |
+
"node-gyp-build-test": "build-test.js"
|
2048 |
+
}
|
2049 |
+
},
|
2050 |
"node_modules/onnxruntime-common": {
|
2051 |
"version": "1.21.0",
|
2052 |
"resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.21.0.tgz",
|
|
|
2069 |
"protobufjs": "^7.2.4"
|
2070 |
}
|
2071 |
},
|
2072 |
+
"node_modules/outvariant": {
|
2073 |
+
"version": "1.4.3",
|
2074 |
+
"resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz",
|
2075 |
+
"integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==",
|
2076 |
+
"license": "MIT"
|
2077 |
+
},
|
2078 |
+
"node_modules/path-to-regexp": {
|
2079 |
+
"version": "6.3.0",
|
2080 |
+
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
|
2081 |
+
"integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
|
2082 |
+
"license": "MIT"
|
2083 |
+
},
|
2084 |
"node_modules/pathe": {
|
2085 |
"version": "2.0.3",
|
2086 |
"resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz",
|
|
|
2102 |
"version": "1.1.1",
|
2103 |
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
|
2104 |
"integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
|
|
|
2105 |
"license": "ISC"
|
2106 |
},
|
2107 |
"node_modules/picomatch": {
|
|
|
2178 |
"node": ">=12.0.0"
|
2179 |
}
|
2180 |
},
|
2181 |
+
"node_modules/psl": {
|
2182 |
+
"version": "1.15.0",
|
2183 |
+
"resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz",
|
2184 |
+
"integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
|
2185 |
+
"license": "MIT",
|
2186 |
+
"dependencies": {
|
2187 |
+
"punycode": "^2.3.1"
|
2188 |
+
},
|
2189 |
+
"funding": {
|
2190 |
+
"url": "https://github.com/sponsors/lupomontero"
|
2191 |
+
}
|
2192 |
+
},
|
2193 |
+
"node_modules/punycode": {
|
2194 |
+
"version": "2.3.1",
|
2195 |
+
"resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
|
2196 |
+
"integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
|
2197 |
+
"license": "MIT",
|
2198 |
+
"engines": {
|
2199 |
+
"node": ">=6"
|
2200 |
+
}
|
2201 |
+
},
|
2202 |
+
"node_modules/querystringify": {
|
2203 |
+
"version": "2.2.0",
|
2204 |
+
"resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz",
|
2205 |
+
"integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==",
|
2206 |
+
"license": "MIT"
|
2207 |
+
},
|
2208 |
"node_modules/readdirp": {
|
2209 |
"version": "4.1.2",
|
2210 |
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
|
|
|
2219 |
"url": "https://paulmillr.com/funding/"
|
2220 |
}
|
2221 |
},
|
2222 |
+
"node_modules/require-directory": {
|
2223 |
+
"version": "2.1.1",
|
2224 |
+
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
|
2225 |
+
"integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
|
2226 |
+
"license": "MIT",
|
2227 |
+
"engines": {
|
2228 |
+
"node": ">=0.10.0"
|
2229 |
+
}
|
2230 |
+
},
|
2231 |
+
"node_modules/requires-port": {
|
2232 |
+
"version": "1.0.0",
|
2233 |
+
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
|
2234 |
+
"integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==",
|
2235 |
+
"license": "MIT"
|
2236 |
+
},
|
2237 |
"node_modules/rollup": {
|
2238 |
"version": "4.45.1",
|
2239 |
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz",
|
|
|
2287 |
"node": ">=6"
|
2288 |
}
|
2289 |
},
|
2290 |
+
"node_modules/semiver": {
|
2291 |
+
"version": "1.1.0",
|
2292 |
+
"resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz",
|
2293 |
+
"integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==",
|
2294 |
+
"license": "MIT",
|
2295 |
+
"engines": {
|
2296 |
+
"node": ">=6"
|
2297 |
+
}
|
2298 |
+
},
|
2299 |
"node_modules/siginfo": {
|
2300 |
"version": "2.0.0",
|
2301 |
"resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
|
|
|
2303 |
"dev": true,
|
2304 |
"license": "ISC"
|
2305 |
},
|
2306 |
+
"node_modules/signal-exit": {
|
2307 |
+
"version": "4.1.0",
|
2308 |
+
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
|
2309 |
+
"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
|
2310 |
+
"license": "ISC",
|
2311 |
+
"engines": {
|
2312 |
+
"node": ">=14"
|
2313 |
+
},
|
2314 |
+
"funding": {
|
2315 |
+
"url": "https://github.com/sponsors/isaacs"
|
2316 |
+
}
|
2317 |
+
},
|
2318 |
"node_modules/sirv": {
|
2319 |
"version": "3.0.1",
|
2320 |
"resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz",
|
|
|
2347 |
"dev": true,
|
2348 |
"license": "MIT"
|
2349 |
},
|
2350 |
+
"node_modules/statuses": {
|
2351 |
+
"version": "2.0.2",
|
2352 |
+
"resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
|
2353 |
+
"integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
|
2354 |
+
"license": "MIT",
|
2355 |
+
"engines": {
|
2356 |
+
"node": ">= 0.8"
|
2357 |
+
}
|
2358 |
+
},
|
2359 |
"node_modules/std-env": {
|
2360 |
"version": "3.9.0",
|
2361 |
"resolved": "https://registry.npmjs.org/std-env/-/std-env-3.9.0.tgz",
|
|
|
2363 |
"dev": true,
|
2364 |
"license": "MIT"
|
2365 |
},
|
2366 |
+
"node_modules/strict-event-emitter": {
|
2367 |
+
"version": "0.5.1",
|
2368 |
+
"resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz",
|
2369 |
+
"integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==",
|
2370 |
+
"license": "MIT"
|
2371 |
+
},
|
2372 |
+
"node_modules/string-width": {
|
2373 |
+
"version": "4.2.3",
|
2374 |
+
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
|
2375 |
+
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
|
2376 |
+
"license": "MIT",
|
2377 |
+
"dependencies": {
|
2378 |
+
"emoji-regex": "^8.0.0",
|
2379 |
+
"is-fullwidth-code-point": "^3.0.0",
|
2380 |
+
"strip-ansi": "^6.0.1"
|
2381 |
+
},
|
2382 |
+
"engines": {
|
2383 |
+
"node": ">=8"
|
2384 |
+
}
|
2385 |
+
},
|
2386 |
+
"node_modules/strip-ansi": {
|
2387 |
+
"version": "6.0.1",
|
2388 |
+
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
|
2389 |
+
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
|
2390 |
+
"license": "MIT",
|
2391 |
+
"dependencies": {
|
2392 |
+
"ansi-regex": "^5.0.1"
|
2393 |
+
},
|
2394 |
+
"engines": {
|
2395 |
+
"node": ">=8"
|
2396 |
+
}
|
2397 |
+
},
|
2398 |
"node_modules/strip-literal": {
|
2399 |
"version": "3.0.0",
|
2400 |
"resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-3.0.0.tgz",
|
|
|
2458 |
"typescript": ">=5.0.0"
|
2459 |
}
|
2460 |
},
|
2461 |
+
"node_modules/textlinestream": {
|
2462 |
+
"version": "1.1.1",
|
2463 |
+
"resolved": "https://registry.npmjs.org/textlinestream/-/textlinestream-1.1.1.tgz",
|
2464 |
+
"integrity": "sha512-iBHbi7BQxrFmwZUQJsT0SjNzlLLsXhvW/kg7EyOMVMBIrlnj/qYofwo1LVLZi+3GbUEo96Iu2eqToI2+lZoAEQ==",
|
2465 |
+
"license": "MIT"
|
2466 |
+
},
|
2467 |
"node_modules/tinybench": {
|
2468 |
"version": "2.9.0",
|
2469 |
"resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
|
|
|
2535 |
"node": ">=6"
|
2536 |
}
|
2537 |
},
|
2538 |
+
"node_modules/tough-cookie": {
|
2539 |
+
"version": "4.1.4",
|
2540 |
+
"resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz",
|
2541 |
+
"integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==",
|
2542 |
+
"license": "BSD-3-Clause",
|
2543 |
+
"dependencies": {
|
2544 |
+
"psl": "^1.1.33",
|
2545 |
+
"punycode": "^2.1.1",
|
2546 |
+
"universalify": "^0.2.0",
|
2547 |
+
"url-parse": "^1.5.3"
|
2548 |
+
},
|
2549 |
+
"engines": {
|
2550 |
+
"node": ">=6"
|
2551 |
+
}
|
2552 |
+
},
|
2553 |
+
"node_modules/type-fest": {
|
2554 |
+
"version": "4.41.0",
|
2555 |
+
"resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz",
|
2556 |
+
"integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==",
|
2557 |
+
"license": "(MIT OR CC0-1.0)",
|
2558 |
+
"engines": {
|
2559 |
+
"node": ">=16"
|
2560 |
+
},
|
2561 |
+
"funding": {
|
2562 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
2563 |
+
}
|
2564 |
+
},
|
2565 |
"node_modules/typescript": {
|
2566 |
"version": "5.8.3",
|
2567 |
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz",
|
2568 |
"integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==",
|
|
|
2569 |
"license": "Apache-2.0",
|
2570 |
"bin": {
|
2571 |
"tsc": "bin/tsc",
|
|
|
2581 |
"integrity": "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw==",
|
2582 |
"license": "MIT"
|
2583 |
},
|
2584 |
+
"node_modules/universalify": {
|
2585 |
+
"version": "0.2.0",
|
2586 |
+
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz",
|
2587 |
+
"integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==",
|
2588 |
+
"license": "MIT",
|
2589 |
+
"engines": {
|
2590 |
+
"node": ">= 4.0.0"
|
2591 |
+
}
|
2592 |
+
},
|
2593 |
+
"node_modules/url-parse": {
|
2594 |
+
"version": "1.5.10",
|
2595 |
+
"resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz",
|
2596 |
+
"integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==",
|
2597 |
+
"license": "MIT",
|
2598 |
+
"dependencies": {
|
2599 |
+
"querystringify": "^2.1.1",
|
2600 |
+
"requires-port": "^1.0.0"
|
2601 |
+
}
|
2602 |
+
},
|
2603 |
"node_modules/vite": {
|
2604 |
"version": "6.3.5",
|
2605 |
"resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz",
|
|
|
2818 |
"node": ">=8"
|
2819 |
}
|
2820 |
},
|
2821 |
+
"node_modules/wrap-ansi": {
|
2822 |
+
"version": "6.2.0",
|
2823 |
+
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
|
2824 |
+
"integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
|
2825 |
+
"license": "MIT",
|
2826 |
+
"dependencies": {
|
2827 |
+
"ansi-styles": "^4.0.0",
|
2828 |
+
"string-width": "^4.1.0",
|
2829 |
+
"strip-ansi": "^6.0.0"
|
2830 |
+
},
|
2831 |
+
"engines": {
|
2832 |
+
"node": ">=8"
|
2833 |
+
}
|
2834 |
+
},
|
2835 |
+
"node_modules/ws": {
|
2836 |
+
"version": "8.18.3",
|
2837 |
+
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
|
2838 |
+
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
|
2839 |
+
"license": "MIT",
|
2840 |
+
"engines": {
|
2841 |
+
"node": ">=10.0.0"
|
2842 |
+
},
|
2843 |
+
"peerDependencies": {
|
2844 |
+
"bufferutil": "^4.0.1",
|
2845 |
+
"utf-8-validate": ">=5.0.2"
|
2846 |
+
},
|
2847 |
+
"peerDependenciesMeta": {
|
2848 |
+
"bufferutil": {
|
2849 |
+
"optional": true
|
2850 |
+
},
|
2851 |
+
"utf-8-validate": {
|
2852 |
+
"optional": true
|
2853 |
+
}
|
2854 |
+
}
|
2855 |
+
},
|
2856 |
+
"node_modules/y18n": {
|
2857 |
+
"version": "5.0.8",
|
2858 |
+
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
2859 |
+
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
|
2860 |
+
"license": "ISC",
|
2861 |
+
"engines": {
|
2862 |
+
"node": ">=10"
|
2863 |
+
}
|
2864 |
+
},
|
2865 |
+
"node_modules/yargs": {
|
2866 |
+
"version": "17.7.2",
|
2867 |
+
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
|
2868 |
+
"integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
|
2869 |
+
"license": "MIT",
|
2870 |
+
"dependencies": {
|
2871 |
+
"cliui": "^8.0.1",
|
2872 |
+
"escalade": "^3.1.1",
|
2873 |
+
"get-caller-file": "^2.0.5",
|
2874 |
+
"require-directory": "^2.1.1",
|
2875 |
+
"string-width": "^4.2.3",
|
2876 |
+
"y18n": "^5.0.5",
|
2877 |
+
"yargs-parser": "^21.1.1"
|
2878 |
+
},
|
2879 |
+
"engines": {
|
2880 |
+
"node": ">=12"
|
2881 |
+
}
|
2882 |
+
},
|
2883 |
+
"node_modules/yargs-parser": {
|
2884 |
+
"version": "21.1.1",
|
2885 |
+
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
|
2886 |
+
"integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
|
2887 |
+
"license": "ISC",
|
2888 |
+
"engines": {
|
2889 |
+
"node": ">=12"
|
2890 |
+
}
|
2891 |
+
},
|
2892 |
+
"node_modules/yoctocolors-cjs": {
|
2893 |
+
"version": "2.1.2",
|
2894 |
+
"resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz",
|
2895 |
+
"integrity": "sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==",
|
2896 |
+
"license": "MIT",
|
2897 |
+
"engines": {
|
2898 |
+
"node": ">=18"
|
2899 |
+
},
|
2900 |
+
"funding": {
|
2901 |
+
"url": "https://github.com/sponsors/sindresorhus"
|
2902 |
+
}
|
2903 |
+
},
|
2904 |
"node_modules/zimmerframe": {
|
2905 |
"version": "1.1.2",
|
2906 |
"resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz",
|
package.json
CHANGED
@@ -25,6 +25,7 @@
|
|
25 |
"vitest": "^3.2.4"
|
26 |
},
|
27 |
"dependencies": {
|
|
|
28 |
"@imgly/background-removal": "^1.7.0",
|
29 |
"dexie": "^4.0.11"
|
30 |
}
|
|
|
25 |
"vitest": "^3.2.4"
|
26 |
},
|
27 |
"dependencies": {
|
28 |
+
"@gradio/client": "^1.15.6",
|
29 |
"@imgly/background-removal": "^1.7.0",
|
30 |
"dexie": "^4.0.11"
|
31 |
}
|
src/lib/components/MonsterGenerator/MonsterGenerator.svelte
CHANGED
@@ -318,8 +318,8 @@ Focus on: colors, body shape, eyes, limbs, mouth, and key visual features. Omit
|
|
318 |
const objectMatch = state.monsterConcept.match(/# Object Caption\s*\n([\s\S]*?)(?=^# )/m);
|
319 |
const objectDescription = objectMatch ? objectMatch[1].trim() : '';
|
320 |
|
321 |
-
// Extract monster name
|
322 |
-
const monsterNameMatch = state.monsterConcept.match(
|
323 |
const monsterName = monsterNameMatch ? monsterNameMatch[1].trim() : 'Unknown Monster';
|
324 |
|
325 |
// Debug logging
|
|
|
318 |
const objectMatch = state.monsterConcept.match(/# Object Caption\s*\n([\s\S]*?)(?=^# )/m);
|
319 |
const objectDescription = objectMatch ? objectMatch[1].trim() : '';
|
320 |
|
321 |
+
// Extract monster name from the Monster Name section - similar to object extraction
|
322 |
+
const monsterNameMatch = state.monsterConcept.match(/# Monster Name\s*\n([\s\S]*?)(?=^## |$)/m);
|
323 |
const monsterName = monsterNameMatch ? monsterNameMatch[1].trim() : 'Unknown Monster';
|
324 |
|
325 |
// Debug logging
|
src/lib/components/MonsterGenerator/MonsterResult.svelte
CHANGED
@@ -1,7 +1,11 @@
|
|
1 |
<script lang="ts">
|
2 |
import type { MonsterWorkflowState } from '$lib/types';
|
|
|
3 |
import { saveMonster } from '$lib/db/monsters';
|
4 |
import { TYPE_DATA, PicletType } from '$lib/types/picletTypes';
|
|
|
|
|
|
|
5 |
|
6 |
interface Props {
|
7 |
workflowState: MonsterWorkflowState;
|
@@ -11,407 +15,162 @@
|
|
11 |
let { workflowState, onReset }: Props = $props();
|
12 |
let isSaving = $state(false);
|
13 |
let isSaved = $state(false);
|
|
|
|
|
14 |
let saveError: string | null = $state(null);
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
if (value >= 80) return '#007bff'; // very high - blue
|
34 |
-
if (value >= 60) return '#28a745'; // high - green
|
35 |
-
if (value >= 40) return '#ffc107'; // medium - yellow
|
36 |
-
if (value >= 20) return '#fd7e14'; // low - orange
|
37 |
-
return '#dc3545'; // very low - red
|
38 |
-
}
|
39 |
-
|
40 |
-
async function saveToCollection() {
|
41 |
-
if (!workflowState.monsterImage || !workflowState.imageCaption || !workflowState.monsterConcept || !workflowState.imagePrompt || !workflowState.monsterStats) {
|
42 |
-
saveError = 'Missing monster data';
|
43 |
-
return;
|
44 |
-
}
|
45 |
-
|
46 |
-
isSaving = true;
|
47 |
-
saveError = null;
|
48 |
-
|
49 |
-
try {
|
50 |
-
// Extract monster name from concept (usually first line or after "Monster Name:")
|
51 |
-
let monsterName = 'Unknown Monster';
|
52 |
-
const conceptLines = workflowState.monsterConcept.split('\n');
|
53 |
-
for (const line of conceptLines) {
|
54 |
-
if (line.includes('Monster Name:') || line.includes('**Monster Name:**')) {
|
55 |
-
monsterName = line.replace(/\*\*Monster Name:\*\*|Monster Name:/g, '').trim();
|
56 |
-
break;
|
57 |
-
} else if (line.trim() && !line.includes(':')) {
|
58 |
-
// First non-empty line without colon might be the name
|
59 |
-
monsterName = line.trim();
|
60 |
-
break;
|
61 |
-
}
|
62 |
-
}
|
63 |
-
|
64 |
-
// Use stats name if available, otherwise use extracted name
|
65 |
-
if (workflowState.monsterStats?.name) {
|
66 |
-
monsterName = workflowState.monsterStats.name;
|
67 |
}
|
68 |
-
|
69 |
-
const monsterData = {
|
70 |
-
name: monsterName,
|
71 |
-
imageUrl: workflowState.monsterImage.imageUrl,
|
72 |
-
imageData: workflowState.monsterImage.imageData,
|
73 |
-
imageCaption: workflowState.imageCaption,
|
74 |
-
concept: workflowState.monsterConcept,
|
75 |
-
imagePrompt: workflowState.imagePrompt,
|
76 |
-
stats: workflowState.monsterStats
|
77 |
-
};
|
78 |
-
|
79 |
-
console.log('Saving monster with data:', {
|
80 |
-
...monsterData,
|
81 |
-
imageData: monsterData.imageData ? `${monsterData.imageData.substring(0, 50)}... (length: ${monsterData.imageData.length})` : 'null'
|
82 |
-
});
|
83 |
-
|
84 |
-
await saveMonster(monsterData);
|
85 |
-
|
86 |
-
isSaved = true;
|
87 |
-
} catch (err) {
|
88 |
-
console.error('Failed to save monster:', err);
|
89 |
-
saveError = 'Failed to save monster to collection';
|
90 |
-
} finally {
|
91 |
-
isSaving = false;
|
92 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
93 |
}
|
94 |
</script>
|
95 |
|
96 |
-
|
97 |
-
<
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
|
|
|
|
107 |
</div>
|
108 |
-
{/if}
|
109 |
-
|
110 |
-
{#if workflowState.monsterStats?.description}
|
111 |
-
<p class="monster-description">{workflowState.monsterStats.description}</p>
|
112 |
-
{/if}
|
113 |
|
114 |
-
|
115 |
-
<div class="
|
116 |
-
<
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
{#if (workflowState.monsterStats as any).picletType}
|
123 |
-
<div class="stat-item">
|
124 |
-
<TypeBadge type={(workflowState.monsterStats as any).picletType as PicletType} showLabel={true} size="medium" />
|
125 |
-
<span class="stat-label">Type</span>
|
126 |
-
</div>
|
127 |
-
{/if}
|
128 |
-
<div class="stat-item">
|
129 |
-
<div class="stat-bar" style="width: {workflowState.monsterStats.HP}%; background-color: {getStatColor(workflowState.monsterStats.HP)}20"></div>
|
130 |
-
<span class="stat-label">HP</span>
|
131 |
-
<span class="stat-value" style="color: {getStatColor(workflowState.monsterStats.HP)}">{workflowState.monsterStats.HP}</span>
|
132 |
-
</div>
|
133 |
-
<div class="stat-item">
|
134 |
-
<div class="stat-bar" style="width: {workflowState.monsterStats.attack}%; background-color: {getStatColor(workflowState.monsterStats.attack)}20"></div>
|
135 |
-
<span class="stat-label">Attack</span>
|
136 |
-
<span class="stat-value" style="color: {getStatColor(workflowState.monsterStats.attack)}">{workflowState.monsterStats.attack}</span>
|
137 |
-
</div>
|
138 |
-
<div class="stat-item">
|
139 |
-
<div class="stat-bar" style="width: {workflowState.monsterStats.defence}%; background-color: {getStatColor(workflowState.monsterStats.defence)}20"></div>
|
140 |
-
<span class="stat-label">Defence</span>
|
141 |
-
<span class="stat-value" style="color: {getStatColor(workflowState.monsterStats.defence)}">{workflowState.monsterStats.defence}</span>
|
142 |
-
</div>
|
143 |
-
<div class="stat-item">
|
144 |
-
<div class="stat-bar" style="width: {workflowState.monsterStats.speed}%; background-color: {getStatColor(workflowState.monsterStats.speed)}20"></div>
|
145 |
-
<span class="stat-label">Speed</span>
|
146 |
-
<span class="stat-value" style="color: {getStatColor(workflowState.monsterStats.speed)}">{workflowState.monsterStats.speed}</span>
|
147 |
-
</div>
|
148 |
-
</div>
|
149 |
-
<div class="abilities-section">
|
150 |
-
<div class="ability-item">
|
151 |
-
<h5>Special Passive Trait</h5>
|
152 |
-
<p>{workflowState.monsterStats.specialPassiveTrait}</p>
|
153 |
-
</div>
|
154 |
-
<div class="ability-item">
|
155 |
-
<h5>Attack: {workflowState.monsterStats.attackActionName}</h5>
|
156 |
-
<p>{workflowState.monsterStats.attackActionDescription}</p>
|
157 |
-
</div>
|
158 |
-
<div class="ability-item">
|
159 |
-
<h5>Buff: {workflowState.monsterStats.buffActionName}</h5>
|
160 |
-
<p>{workflowState.monsterStats.buffActionDescription}</p>
|
161 |
-
</div>
|
162 |
-
<div class="ability-item">
|
163 |
-
<h5>Debuff: {workflowState.monsterStats.debuffActionName}</h5>
|
164 |
-
<p>{workflowState.monsterStats.debuffActionDescription}</p>
|
165 |
-
</div>
|
166 |
-
<div class="ability-item">
|
167 |
-
<h5>Ultimate: {workflowState.monsterStats.specialActionName}</h5>
|
168 |
-
<p>{workflowState.monsterStats.specialActionDescription}</p>
|
169 |
-
</div>
|
170 |
-
</div>
|
171 |
</div>
|
172 |
{/if}
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
Download Monster
|
180 |
-
</button>
|
181 |
-
<button class="action-button reset" onclick={onReset}>
|
182 |
-
<svg width="20" height="20" viewBox="0 0 20 20" fill="currentColor">
|
183 |
-
<path d="M4 2a1 1 0 011 1v2.101a7.002 7.002 0 0111.601 2.566 1 1 0 11-1.885.666A5.002 5.002 0 005.058 7.293a1 1 0 01-1.414 1.414l-2.35-2.35A1 1 0 011 5.648V3a1 1 0 011-1zm.008 9.057a1 1 0 011.276.61A5.002 5.002 0 0014.943 13H13a1 1 0 110-2h5a1 1 0 011 1v5a1 1 0 11-2 0v-2.101a7.002 7.002 0 01-11.601-2.566 1 1 0 01.61-1.276z"/>
|
184 |
-
</svg>
|
185 |
-
Create Another Monster
|
186 |
-
</button>
|
187 |
</div>
|
188 |
-
|
189 |
-
{#if saveError}
|
190 |
-
<div class="error-message">{saveError}</div>
|
191 |
-
{/if}
|
192 |
-
</div>
|
193 |
|
194 |
<style>
|
195 |
.result-container {
|
196 |
-
max-width:
|
197 |
margin: 0 auto;
|
198 |
padding: 2rem;
|
199 |
-
}
|
200 |
-
|
201 |
-
h3 {
|
202 |
text-align: center;
|
203 |
-
color: #333;
|
204 |
-
margin-bottom: 2rem;
|
205 |
}
|
206 |
|
207 |
-
.
|
208 |
-
|
209 |
-
margin-bottom: 3rem;
|
210 |
}
|
211 |
|
212 |
-
.
|
213 |
-
|
214 |
-
|
215 |
-
border-radius: 12px;
|
216 |
-
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.1);
|
217 |
}
|
218 |
|
219 |
-
|
220 |
-
|
221 |
-
|
222 |
-
|
223 |
-
|
224 |
-
border: 1px solid #e9ecef;
|
225 |
}
|
226 |
|
227 |
-
.
|
228 |
-
|
229 |
-
color: #495057;
|
230 |
font-size: 1.1rem;
|
|
|
231 |
}
|
232 |
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
justify-content: center;
|
237 |
-
gap: 1rem;
|
238 |
-
flex-wrap: wrap;
|
239 |
}
|
240 |
|
241 |
-
.
|
242 |
display: flex;
|
|
|
243 |
align-items: center;
|
244 |
-
gap: 0.5rem;
|
245 |
-
padding: 0.8rem 1.5rem;
|
246 |
-
border: none;
|
247 |
-
border-radius: 6px;
|
248 |
-
font-size: 1rem;
|
249 |
-
font-weight: 500;
|
250 |
-
cursor: pointer;
|
251 |
-
transition: all 0.2s;
|
252 |
-
}
|
253 |
-
|
254 |
-
.action-button.download {
|
255 |
-
background: #28a745;
|
256 |
-
color: white;
|
257 |
-
}
|
258 |
-
|
259 |
-
.action-button.download:hover {
|
260 |
-
background: #218838;
|
261 |
-
}
|
262 |
-
|
263 |
-
.action-button.reset {
|
264 |
-
background: #6c757d;
|
265 |
-
color: white;
|
266 |
-
}
|
267 |
-
|
268 |
-
.action-button.reset:hover {
|
269 |
-
background: #5a6268;
|
270 |
-
}
|
271 |
-
|
272 |
-
.action-button:disabled {
|
273 |
-
opacity: 0.6;
|
274 |
-
cursor: not-allowed;
|
275 |
-
}
|
276 |
-
|
277 |
-
.error-message {
|
278 |
-
margin-top: 1rem;
|
279 |
-
padding: 0.5rem;
|
280 |
-
background: #f8d7da;
|
281 |
-
color: #721c24;
|
282 |
-
border-radius: 4px;
|
283 |
-
text-align: center;
|
284 |
-
}
|
285 |
-
|
286 |
-
@keyframes spin {
|
287 |
-
to { transform: rotate(360deg); }
|
288 |
-
}
|
289 |
-
|
290 |
-
.stats-grid {
|
291 |
-
display: grid;
|
292 |
-
grid-template-columns: repeat(auto-fit, minmax(120px, 1fr));
|
293 |
gap: 1rem;
|
294 |
-
margin
|
295 |
-
}
|
296 |
-
|
297 |
-
.stat-item {
|
298 |
-
display: flex;
|
299 |
-
flex-direction: column;
|
300 |
-
padding: 0.75rem;
|
301 |
-
background: white;
|
302 |
-
border-radius: 6px;
|
303 |
-
border: 1px solid #dee2e6;
|
304 |
-
position: relative;
|
305 |
-
overflow: hidden;
|
306 |
}
|
307 |
|
308 |
-
.
|
309 |
-
|
310 |
-
|
311 |
-
|
312 |
-
|
313 |
-
transition: width 0.3s ease;
|
314 |
-
z-index: 0;
|
315 |
-
}
|
316 |
-
|
317 |
-
.stat-label {
|
318 |
-
font-size: 0.85rem;
|
319 |
-
color: #6c757d;
|
320 |
-
margin-bottom: 0.25rem;
|
321 |
-
position: relative;
|
322 |
-
z-index: 1;
|
323 |
}
|
324 |
|
325 |
-
.
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
z-index: 1;
|
330 |
}
|
331 |
|
332 |
-
.
|
333 |
-
|
334 |
-
|
335 |
-
border-radius:
|
336 |
font-weight: 600;
|
337 |
font-size: 1rem;
|
338 |
-
|
339 |
-
|
340 |
-
|
341 |
-
.tier-badge.low {
|
342 |
-
background: #e0e0e0;
|
343 |
-
color: #666;
|
344 |
-
}
|
345 |
-
|
346 |
-
.tier-badge.medium {
|
347 |
-
background: #81c784;
|
348 |
-
color: white;
|
349 |
-
}
|
350 |
-
|
351 |
-
.tier-badge.high {
|
352 |
-
background: #64b5f6;
|
353 |
-
color: white;
|
354 |
}
|
355 |
|
356 |
-
.
|
357 |
-
background: linear-gradient(135deg, #
|
358 |
color: white;
|
359 |
-
box-shadow: 0
|
360 |
-
}
|
361 |
-
|
362 |
-
.abilities-section {
|
363 |
-
display: grid;
|
364 |
-
gap: 1rem;
|
365 |
-
}
|
366 |
-
|
367 |
-
.ability-item {
|
368 |
-
background: white;
|
369 |
-
padding: 1rem;
|
370 |
-
border-radius: 6px;
|
371 |
-
border: 1px solid #dee2e6;
|
372 |
}
|
373 |
|
374 |
-
.
|
375 |
-
|
376 |
-
|
377 |
-
|
378 |
}
|
379 |
|
380 |
-
.
|
381 |
-
|
382 |
-
font-size: 0.85rem;
|
383 |
-
line-height: 1.4;
|
384 |
-
}
|
385 |
-
|
386 |
-
.saved-message {
|
387 |
-
color: #28a745;
|
388 |
-
font-size: 0.9rem;
|
389 |
-
margin: -0.5rem 0 1.5rem;
|
390 |
-
text-align: center;
|
391 |
-
}
|
392 |
-
|
393 |
-
.monster-description {
|
394 |
-
text-align: center;
|
395 |
-
color: #555;
|
396 |
-
font-size: 1rem;
|
397 |
-
line-height: 1.5;
|
398 |
-
margin: 1rem auto 2rem;
|
399 |
-
max-width: 600px;
|
400 |
-
font-style: italic;
|
401 |
}
|
402 |
|
403 |
@media (max-width: 768px) {
|
404 |
.result-container {
|
405 |
padding: 1rem;
|
406 |
}
|
407 |
-
|
408 |
-
.action-buttons {
|
409 |
-
flex-direction: column;
|
410 |
-
}
|
411 |
-
|
412 |
-
.action-button {
|
413 |
-
width: 100%;
|
414 |
-
justify-content: center;
|
415 |
-
}
|
416 |
}
|
417 |
</style>
|
|
|
1 |
<script lang="ts">
|
2 |
import type { MonsterWorkflowState } from '$lib/types';
|
3 |
+
import type { PicletInstance } from '$lib/db/schema';
|
4 |
import { saveMonster } from '$lib/db/monsters';
|
5 |
import { TYPE_DATA, PicletType } from '$lib/types/picletTypes';
|
6 |
+
import { monsterToPicletInstance } from '$lib/db/piclets';
|
7 |
+
import PicletCard from '../Piclets/PicletCard.svelte';
|
8 |
+
import PicletDetail from '../Piclets/PicletDetail.svelte';
|
9 |
|
10 |
interface Props {
|
11 |
workflowState: MonsterWorkflowState;
|
|
|
15 |
let { workflowState, onReset }: Props = $props();
|
16 |
let isSaving = $state(false);
|
17 |
let isSaved = $state(false);
|
18 |
+
let picletInstance: PicletInstance | null = $state(null);
|
19 |
+
let showDetailView = $state(false);
|
20 |
let saveError: string | null = $state(null);
|
21 |
+
|
22 |
+
// Create piclet instance from the monster data
|
23 |
+
$effect(() => {
|
24 |
+
if (workflowState.monsterImage && workflowState.monsterConcept && workflowState.monsterStats) {
|
25 |
+
try {
|
26 |
+
const monster = {
|
27 |
+
name: workflowState.monsterStats.name || 'Unknown Monster',
|
28 |
+
imageUrl: workflowState.monsterImage.imageUrl,
|
29 |
+
imageData: workflowState.monsterImage.imageData,
|
30 |
+
imageCaption: workflowState.imageCaption || '',
|
31 |
+
concept: workflowState.monsterConcept,
|
32 |
+
imagePrompt: workflowState.imagePrompt || '',
|
33 |
+
stats: workflowState.monsterStats
|
34 |
+
};
|
35 |
+
|
36 |
+
picletInstance = monsterToPicletInstance(monster);
|
37 |
+
} catch (error) {
|
38 |
+
console.error('Failed to create piclet instance:', error);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
39 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
40 |
}
|
41 |
+
});
|
42 |
+
|
43 |
+
function handleCardClick() {
|
44 |
+
if (picletInstance) {
|
45 |
+
showDetailView = true;
|
46 |
+
}
|
47 |
+
}
|
48 |
+
|
49 |
+
function handleCloseDetail() {
|
50 |
+
showDetailView = false;
|
51 |
}
|
52 |
</script>
|
53 |
|
54 |
+
{#if showDetailView && picletInstance}
|
55 |
+
<PicletDetail
|
56 |
+
instance={picletInstance}
|
57 |
+
onClose={handleCloseDetail}
|
58 |
+
/>
|
59 |
+
{:else}
|
60 |
+
<div class="result-container">
|
61 |
+
<div class="success-header">
|
62 |
+
<div class="success-icon">✨</div>
|
63 |
+
<h2>Success!</h2>
|
64 |
+
<p class="success-message">
|
65 |
+
You can now encounter <strong>{picletInstance?.nickname || 'this creature'}</strong>!
|
66 |
+
</p>
|
67 |
</div>
|
|
|
|
|
|
|
|
|
|
|
68 |
|
69 |
+
{#if picletInstance}
|
70 |
+
<div class="piclet-preview">
|
71 |
+
<PicletCard
|
72 |
+
instance={picletInstance}
|
73 |
+
size={140}
|
74 |
+
onClick={handleCardClick}
|
75 |
+
/>
|
76 |
+
<p class="tap-hint">Tap to view details</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
77 |
</div>
|
78 |
{/if}
|
79 |
+
|
80 |
+
<div class="action-buttons">
|
81 |
+
<button class="action-button primary" onclick={onReset}>
|
82 |
+
Create Another
|
83 |
+
</button>
|
84 |
+
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
</div>
|
86 |
+
{/if}
|
|
|
|
|
|
|
|
|
87 |
|
88 |
<style>
|
89 |
.result-container {
|
90 |
+
max-width: 500px;
|
91 |
margin: 0 auto;
|
92 |
padding: 2rem;
|
|
|
|
|
|
|
93 |
text-align: center;
|
|
|
|
|
94 |
}
|
95 |
|
96 |
+
.success-header {
|
97 |
+
margin-bottom: 2rem;
|
|
|
98 |
}
|
99 |
|
100 |
+
.success-icon {
|
101 |
+
font-size: 3rem;
|
102 |
+
margin-bottom: 1rem;
|
|
|
|
|
103 |
}
|
104 |
|
105 |
+
.success-header h2 {
|
106 |
+
color: #333;
|
107 |
+
margin: 0 0 1rem;
|
108 |
+
font-size: 1.8rem;
|
109 |
+
font-weight: 600;
|
|
|
110 |
}
|
111 |
|
112 |
+
.success-message {
|
113 |
+
color: #666;
|
|
|
114 |
font-size: 1.1rem;
|
115 |
+
margin: 0;
|
116 |
}
|
117 |
|
118 |
+
.success-message strong {
|
119 |
+
color: #333;
|
120 |
+
font-weight: 600;
|
|
|
|
|
|
|
121 |
}
|
122 |
|
123 |
+
.piclet-preview {
|
124 |
display: flex;
|
125 |
+
flex-direction: column;
|
126 |
align-items: center;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
gap: 1rem;
|
128 |
+
margin: 2rem 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
129 |
}
|
130 |
|
131 |
+
.tap-hint {
|
132 |
+
color: #888;
|
133 |
+
font-size: 0.9rem;
|
134 |
+
margin: 0;
|
135 |
+
font-style: italic;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
}
|
137 |
|
138 |
+
.action-buttons {
|
139 |
+
display: flex;
|
140 |
+
justify-content: center;
|
141 |
+
margin-top: 2rem;
|
|
|
142 |
}
|
143 |
|
144 |
+
.action-button {
|
145 |
+
padding: 0.875rem 2rem;
|
146 |
+
border: none;
|
147 |
+
border-radius: 12px;
|
148 |
font-weight: 600;
|
149 |
font-size: 1rem;
|
150 |
+
cursor: pointer;
|
151 |
+
transition: all 0.2s ease;
|
152 |
+
min-width: 160px;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
153 |
}
|
154 |
|
155 |
+
.action-button.primary {
|
156 |
+
background: linear-gradient(135deg, #3b82f6, #1d4ed8);
|
157 |
color: white;
|
158 |
+
box-shadow: 0 4px 12px rgba(59, 130, 246, 0.4);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
}
|
160 |
|
161 |
+
.action-button.primary:hover {
|
162 |
+
background: linear-gradient(135deg, #2563eb, #1e40af);
|
163 |
+
transform: translateY(-2px);
|
164 |
+
box-shadow: 0 6px 16px rgba(59, 130, 246, 0.4);
|
165 |
}
|
166 |
|
167 |
+
.action-button.primary:active {
|
168 |
+
transform: translateY(0);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
169 |
}
|
170 |
|
171 |
@media (max-width: 768px) {
|
172 |
.result-container {
|
173 |
padding: 1rem;
|
174 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
}
|
176 |
</style>
|
src/lib/components/Piclets/PicletDetail.svelte
CHANGED
@@ -157,7 +157,6 @@
|
|
157 |
</div>
|
158 |
{:else if selectedTab === 'stats'}
|
159 |
<div class="content-card">
|
160 |
-
<h3 class="section-title">Battle Stats</h3>
|
161 |
<div class="stats-list">
|
162 |
<div class="stat-row">
|
163 |
<span>Attack</span>
|
|
|
157 |
</div>
|
158 |
{:else if selectedTab === 'stats'}
|
159 |
<div class="content-card">
|
|
|
160 |
<div class="stats-list">
|
161 |
<div class="stat-row">
|
162 |
<span>Attack</span>
|
src/lib/services/qwen3Client.ts
CHANGED
@@ -1,6 +1,7 @@
|
|
1 |
/**
|
2 |
* Qwen3 Client - Drop-in replacement for rwkvClient using Qwen3 HF Space
|
3 |
* Compatible with existing rwkvClient.predict("/chat", [...]) API
|
|
|
4 |
*/
|
5 |
|
6 |
interface Qwen3Message {
|
@@ -17,11 +18,12 @@ interface Qwen3ClientOptions {
|
|
17 |
export class Qwen3Client {
|
18 |
private options: Qwen3ClientOptions;
|
19 |
private sessionId: string;
|
|
|
20 |
|
21 |
constructor(options: Partial<Qwen3ClientOptions> = {}) {
|
22 |
this.options = {
|
23 |
huggingFaceSpace: 'Qwen/Qwen3-Demo',
|
24 |
-
model: '
|
25 |
...options
|
26 |
};
|
27 |
this.sessionId = this.generateSessionId();
|
@@ -31,6 +33,28 @@ export class Qwen3Client {
|
|
31 |
return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
|
32 |
}
|
33 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
34 |
/**
|
35 |
* Predict method that mimics rwkvClient.predict("/chat", [...]) API
|
36 |
* @param endpoint Should be "/chat" for compatibility
|
@@ -54,42 +78,13 @@ export class Qwen3Client {
|
|
54 |
] = params;
|
55 |
|
56 |
try {
|
57 |
-
//
|
58 |
-
|
59 |
-
|
60 |
-
// Add system prompt if provided
|
61 |
-
if (system_prompt && system_prompt.trim()) {
|
62 |
-
messages.push({
|
63 |
-
role: 'system',
|
64 |
-
content: system_prompt
|
65 |
-
});
|
66 |
-
}
|
67 |
|
68 |
-
//
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
// Handle [user_message, assistant_message] format
|
73 |
-
messages.push({
|
74 |
-
role: 'user',
|
75 |
-
content: entry[0]
|
76 |
-
});
|
77 |
-
messages.push({
|
78 |
-
role: 'assistant',
|
79 |
-
content: entry[1]
|
80 |
-
});
|
81 |
-
}
|
82 |
-
});
|
83 |
-
}
|
84 |
-
|
85 |
-
// Add current message
|
86 |
-
messages.push({
|
87 |
-
role: 'user',
|
88 |
-
content: message
|
89 |
-
});
|
90 |
-
|
91 |
-
// Use Hugging Face Spaces API
|
92 |
-
const response = await this.callQwen3API(messages, {
|
93 |
max_new_tokens,
|
94 |
temperature,
|
95 |
top_p,
|
@@ -108,94 +103,96 @@ export class Qwen3Client {
|
|
108 |
}
|
109 |
}
|
110 |
|
111 |
-
private async callQwen3API(
|
112 |
-
// Use the Gradio Client to connect to the Qwen3 HF Space
|
113 |
-
// For now, simulate the API call until we can get the proper Gradio client working
|
114 |
-
|
115 |
try {
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
//
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
model: this.options.model,
|
130 |
-
sys_prompt: systemMessage,
|
131 |
-
thinking_budget: Math.min(options.max_new_tokens || 2048, 38) // Qwen3 has max 38k thinking budget
|
132 |
-
},
|
133 |
-
{
|
134 |
-
enable_thinking: false // Disable for faster responses
|
135 |
-
},
|
136 |
-
{
|
137 |
-
conversation_contexts: {},
|
138 |
-
conversations: [],
|
139 |
-
conversation_id: this.sessionId
|
140 |
-
}
|
141 |
-
],
|
142 |
-
fn_index: 0 // Function index for add_message
|
143 |
};
|
144 |
|
145 |
-
//
|
146 |
-
const
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
|
151 |
-
|
152 |
-
|
|
|
|
|
|
|
153 |
|
154 |
-
|
155 |
-
|
156 |
-
|
157 |
-
|
158 |
-
|
159 |
-
|
160 |
-
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
-
|
165 |
-
|
166 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
167 |
}
|
|
|
|
|
|
|
168 |
}
|
169 |
}
|
170 |
}
|
171 |
}
|
172 |
-
|
173 |
-
throw new Error('Could not extract text from Qwen3 response');
|
174 |
}
|
175 |
|
176 |
-
|
|
|
177 |
|
178 |
} catch (error) {
|
179 |
-
console.warn('Qwen3
|
180 |
|
181 |
// Development fallback: Generate a reasonable response based on the input
|
182 |
-
const userMessage = messages[messages.length - 1].content;
|
183 |
-
const systemMessage = messages.find(m => m.role === 'system')?.content || '';
|
184 |
-
|
185 |
// If it's a JSON generation request, provide a structured response
|
186 |
-
if (
|
187 |
-
if (
|
188 |
-
return this.generateFallbackMonsterStats(
|
189 |
}
|
190 |
return '```json\n{"status": "Qwen3 temporarily unavailable", "using_fallback": true}\n```';
|
191 |
}
|
192 |
|
193 |
// For text generation, provide a reasonable response
|
194 |
-
if (
|
195 |
-
return this.generateFallbackImageDescription(
|
196 |
}
|
197 |
|
198 |
-
return `I understand you're asking about: "${
|
199 |
}
|
200 |
}
|
201 |
|
@@ -247,18 +244,28 @@ export class Qwen3Client {
|
|
247 |
*/
|
248 |
async testConnection(): Promise<boolean> {
|
249 |
try {
|
|
|
|
|
|
|
|
|
250 |
const result = await this.predict('/chat', [
|
251 |
-
'Hello, are you working?',
|
252 |
[],
|
253 |
-
'You are a helpful assistant. Respond briefly.',
|
254 |
-
|
255 |
0.7,
|
256 |
0.95,
|
257 |
50,
|
258 |
1.0
|
259 |
]);
|
260 |
|
261 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
262 |
} catch (error) {
|
263 |
console.error('Qwen3 connection test failed:', error);
|
264 |
return false;
|
|
|
1 |
/**
|
2 |
* Qwen3 Client - Drop-in replacement for rwkvClient using Qwen3 HF Space
|
3 |
* Compatible with existing rwkvClient.predict("/chat", [...]) API
|
4 |
+
* Uses proper Gradio Client connection instead of direct HTTP calls
|
5 |
*/
|
6 |
|
7 |
interface Qwen3Message {
|
|
|
18 |
export class Qwen3Client {
|
19 |
private options: Qwen3ClientOptions;
|
20 |
private sessionId: string;
|
21 |
+
private gradioClient: any = null;
|
22 |
|
23 |
constructor(options: Partial<Qwen3ClientOptions> = {}) {
|
24 |
this.options = {
|
25 |
huggingFaceSpace: 'Qwen/Qwen3-Demo',
|
26 |
+
model: 'qwen2.5-72b-instruct', // Use Qwen2.5-72B for best performance
|
27 |
...options
|
28 |
};
|
29 |
this.sessionId = this.generateSessionId();
|
|
|
33 |
return Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15);
|
34 |
}
|
35 |
|
36 |
+
/**
|
37 |
+
* Initialize Gradio Client connection to Qwen3 Space
|
38 |
+
*/
|
39 |
+
private async initializeGradioClient(): Promise<void> {
|
40 |
+
if (this.gradioClient) {
|
41 |
+
return; // Already initialized
|
42 |
+
}
|
43 |
+
|
44 |
+
try {
|
45 |
+
// Use dynamic import to avoid module issues
|
46 |
+
const { Client } = await import('@gradio/client');
|
47 |
+
|
48 |
+
console.log(`🔗 Connecting to ${this.options.huggingFaceSpace}...`);
|
49 |
+
this.gradioClient = await Client.connect(this.options.huggingFaceSpace);
|
50 |
+
|
51 |
+
console.log(`✅ Connected to Qwen3 space: ${this.options.huggingFaceSpace}`);
|
52 |
+
} catch (error) {
|
53 |
+
console.error('Failed to initialize Qwen3 Gradio Client:', error);
|
54 |
+
throw new Error(`Could not connect to Qwen3 space: ${error}`);
|
55 |
+
}
|
56 |
+
}
|
57 |
+
|
58 |
/**
|
59 |
* Predict method that mimics rwkvClient.predict("/chat", [...]) API
|
60 |
* @param endpoint Should be "/chat" for compatibility
|
|
|
78 |
] = params;
|
79 |
|
80 |
try {
|
81 |
+
// Ensure Gradio client is initialized
|
82 |
+
await this.initializeGradioClient();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
83 |
|
84 |
+
// Use the proper Gradio Client API to call the add_message function
|
85 |
+
const response = await this.callQwen3API(message, {
|
86 |
+
sys_prompt: system_prompt,
|
87 |
+
model: this.options.model,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
88 |
max_new_tokens,
|
89 |
temperature,
|
90 |
top_p,
|
|
|
103 |
}
|
104 |
}
|
105 |
|
106 |
+
private async callQwen3API(message: string, options: any): Promise<string> {
|
|
|
|
|
|
|
107 |
try {
|
108 |
+
if (!this.gradioClient) {
|
109 |
+
throw new Error('Gradio client not initialized');
|
110 |
+
}
|
111 |
+
|
112 |
+
// Prepare settings for the Qwen3 space based on app.py structure
|
113 |
+
const settingsFormValue = {
|
114 |
+
model: options.model || this.options.model,
|
115 |
+
sys_prompt: options.sys_prompt || "You are a helpful assistant.",
|
116 |
+
thinking_budget: Math.min(options.max_new_tokens || 20, 38), // Qwen3 has max 38k thinking budget
|
117 |
+
temperature: options.temperature || 0.7,
|
118 |
+
top_p: options.top_p || 0.95,
|
119 |
+
top_k: options.top_k || 50,
|
120 |
+
repetition_penalty: options.repetition_penalty || 1.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
};
|
122 |
|
123 |
+
// Thinking button state - disable for faster responses
|
124 |
+
const thinkingBtnState = {
|
125 |
+
enable_thinking: false
|
126 |
+
};
|
127 |
+
|
128 |
+
// Initial state for the conversation
|
129 |
+
const stateValue = {
|
130 |
+
conversation_contexts: {},
|
131 |
+
conversations: [],
|
132 |
+
conversation_id: this.sessionId
|
133 |
+
};
|
134 |
|
135 |
+
console.log(`🤖 Calling Qwen3 add_message with: "${message.substring(0, 50)}..."`);
|
136 |
+
|
137 |
+
// Call the add_message function from the Gradio app
|
138 |
+
// Based on app.py line 170: add_message(input_value, settings_form_value, thinking_btn_state_value, state_value)
|
139 |
+
const result = await this.gradioClient.predict("/add_message", [
|
140 |
+
message, // input_value
|
141 |
+
settingsFormValue, // settings_form_value
|
142 |
+
thinkingBtnState, // thinking_btn_state_value
|
143 |
+
stateValue // state_value
|
144 |
+
]);
|
145 |
+
|
146 |
+
console.log('🔍 Raw Qwen3 response:', result);
|
147 |
+
|
148 |
+
// Extract the response text from the Gradio result
|
149 |
+
if (result && result.data && Array.isArray(result.data)) {
|
150 |
+
// The response format should include the chatbot data
|
151 |
+
// Look for the chatbot component data (usually index 2 or 3)
|
152 |
+
for (let i = 0; i < result.data.length; i++) {
|
153 |
+
const item = result.data[i];
|
154 |
+
if (Array.isArray(item) && item.length > 0) {
|
155 |
+
// Look for the last assistant message
|
156 |
+
const lastMessage = item[item.length - 1];
|
157 |
+
if (lastMessage && lastMessage.role === 'assistant' && lastMessage.content) {
|
158 |
+
// Extract text content from the structured content
|
159 |
+
if (Array.isArray(lastMessage.content)) {
|
160 |
+
for (const contentItem of lastMessage.content) {
|
161 |
+
if (contentItem.type === 'text' && contentItem.content) {
|
162 |
+
console.log('✅ Extracted Qwen3 response:', contentItem.content.substring(0, 100) + '...');
|
163 |
+
return contentItem.content;
|
164 |
+
}
|
165 |
}
|
166 |
+
} else if (typeof lastMessage.content === 'string') {
|
167 |
+
console.log('✅ Extracted Qwen3 response:', lastMessage.content.substring(0, 100) + '...');
|
168 |
+
return lastMessage.content;
|
169 |
}
|
170 |
}
|
171 |
}
|
172 |
}
|
|
|
|
|
173 |
}
|
174 |
|
175 |
+
// If we can't extract the response, throw an error to trigger fallback
|
176 |
+
throw new Error('Could not extract text response from Qwen3 API result');
|
177 |
|
178 |
} catch (error) {
|
179 |
+
console.warn('Qwen3 Gradio API call failed, using fallback strategy:', error);
|
180 |
|
181 |
// Development fallback: Generate a reasonable response based on the input
|
|
|
|
|
|
|
182 |
// If it's a JSON generation request, provide a structured response
|
183 |
+
if (message.includes('JSON') || message.includes('json') || options.sys_prompt?.includes('JSON')) {
|
184 |
+
if (message.includes('monster') || message.includes('stats')) {
|
185 |
+
return this.generateFallbackMonsterStats(message);
|
186 |
}
|
187 |
return '```json\n{"status": "Qwen3 temporarily unavailable", "using_fallback": true}\n```';
|
188 |
}
|
189 |
|
190 |
// For text generation, provide a reasonable response
|
191 |
+
if (message.includes('visual description') || message.includes('image generation')) {
|
192 |
+
return this.generateFallbackImageDescription(message);
|
193 |
}
|
194 |
|
195 |
+
return `I understand you're asking about: "${message.substring(0, 100)}..."\n\nHowever, I'm currently unable to connect to the Qwen3 service. The system will automatically fall back to an alternative model for your request.`;
|
196 |
}
|
197 |
}
|
198 |
|
|
|
244 |
*/
|
245 |
async testConnection(): Promise<boolean> {
|
246 |
try {
|
247 |
+
// Try to initialize the Gradio client first
|
248 |
+
await this.initializeGradioClient();
|
249 |
+
|
250 |
+
// Test with a simple message
|
251 |
const result = await this.predict('/chat', [
|
252 |
+
'Hello, are you working? Please respond with just "Yes" if you can receive this message.',
|
253 |
[],
|
254 |
+
'You are a helpful assistant. Respond very briefly with just "Yes" if you can receive messages.',
|
255 |
+
50, // Small token limit for test
|
256 |
0.7,
|
257 |
0.95,
|
258 |
50,
|
259 |
1.0
|
260 |
]);
|
261 |
|
262 |
+
const response = result.data && result.data[0] && typeof result.data[0] === 'string' ? result.data[0] : '';
|
263 |
+
const isWorking = response.length > 0 && !response.includes('temporarily unavailable');
|
264 |
+
|
265 |
+
console.log(`🔍 Qwen3 connection test result: ${isWorking ? 'PASS' : 'FAIL'}`);
|
266 |
+
console.log(`📝 Test response: "${response.substring(0, 50)}..."`);
|
267 |
+
|
268 |
+
return isWorking;
|
269 |
} catch (error) {
|
270 |
console.error('Qwen3 connection test failed:', error);
|
271 |
return false;
|
src/lib/services/textGenerationClient.ts
CHANGED
@@ -34,15 +34,24 @@ class TextGenerationManager {
|
|
34 |
async initialize(): Promise<void> {
|
35 |
if (this.connectionTested) return;
|
36 |
|
37 |
-
console.log('Testing Qwen3 connection...');
|
38 |
|
39 |
try {
|
40 |
if (this.primaryClient.testConnection) {
|
41 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
42 |
|
43 |
if (qwen3Available) {
|
44 |
console.log('✅ Qwen3 client is available and will be used for text generation');
|
45 |
this.useQwen3 = true;
|
|
|
|
|
|
|
46 |
} else {
|
47 |
console.log('⚠️ Qwen3 client is not available, falling back to Zephyr-7B');
|
48 |
this.useQwen3 = false;
|
@@ -57,6 +66,48 @@ class TextGenerationManager {
|
|
57 |
this.connectionTested = true;
|
58 |
}
|
59 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
60 |
/**
|
61 |
* Get the active client for text generation
|
62 |
*/
|
@@ -140,6 +191,22 @@ class TextGenerationManager {
|
|
140 |
activeClient: this.useQwen3 ? 'Qwen3' : 'Zephyr-7B'
|
141 |
};
|
142 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
143 |
}
|
144 |
|
145 |
// Export singleton instance
|
|
|
34 |
async initialize(): Promise<void> {
|
35 |
if (this.connectionTested) return;
|
36 |
|
37 |
+
console.log('🔍 Testing Qwen3 connection with improved verification...');
|
38 |
|
39 |
try {
|
40 |
if (this.primaryClient.testConnection) {
|
41 |
+
// Add timeout wrapper for connection test
|
42 |
+
const connectionTestPromise = this.primaryClient.testConnection();
|
43 |
+
const timeoutPromise = new Promise<boolean>((_, reject) => {
|
44 |
+
setTimeout(() => reject(new Error('Connection test timeout')), 15000); // 15 second timeout
|
45 |
+
});
|
46 |
+
|
47 |
+
const qwen3Available = await Promise.race([connectionTestPromise, timeoutPromise]);
|
48 |
|
49 |
if (qwen3Available) {
|
50 |
console.log('✅ Qwen3 client is available and will be used for text generation');
|
51 |
this.useQwen3 = true;
|
52 |
+
|
53 |
+
// Perform a secondary validation test to ensure real functionality
|
54 |
+
await this.performSecondaryValidation();
|
55 |
} else {
|
56 |
console.log('⚠️ Qwen3 client is not available, falling back to Zephyr-7B');
|
57 |
this.useQwen3 = false;
|
|
|
66 |
this.connectionTested = true;
|
67 |
}
|
68 |
|
69 |
+
/**
|
70 |
+
* Perform secondary validation to ensure Qwen3 is actually working
|
71 |
+
*/
|
72 |
+
private async performSecondaryValidation(): Promise<void> {
|
73 |
+
try {
|
74 |
+
console.log('🔧 Performing secondary validation of Qwen3 functionality...');
|
75 |
+
|
76 |
+
// Test with a specific request that should return predictable content
|
77 |
+
const validationResult = await Promise.race([
|
78 |
+
this.primaryClient.predict('/chat', [
|
79 |
+
'Respond with exactly this text: "VALIDATION_SUCCESS"',
|
80 |
+
[],
|
81 |
+
'You are a helpful assistant. Follow instructions exactly as given.',
|
82 |
+
20, // Very small token limit
|
83 |
+
0.1, // Low temperature for deterministic output
|
84 |
+
0.9,
|
85 |
+
10,
|
86 |
+
1.0
|
87 |
+
]),
|
88 |
+
new Promise<any>((_, reject) => {
|
89 |
+
setTimeout(() => reject(new Error('Validation timeout')), 10000); // 10 second timeout
|
90 |
+
})
|
91 |
+
]);
|
92 |
+
|
93 |
+
const response = validationResult?.data?.[0] || '';
|
94 |
+
const isValidResponse = typeof response === 'string' &&
|
95 |
+
response.length > 0 &&
|
96 |
+
!response.includes('temporarily unavailable') &&
|
97 |
+
!response.includes('using_fallback');
|
98 |
+
|
99 |
+
if (!isValidResponse) {
|
100 |
+
console.warn('⚠️ Secondary validation failed - Qwen3 responses seem invalid, switching to fallback');
|
101 |
+
this.useQwen3 = false;
|
102 |
+
} else {
|
103 |
+
console.log('✅ Secondary validation passed - Qwen3 is fully functional');
|
104 |
+
}
|
105 |
+
} catch (error) {
|
106 |
+
console.warn('⚠️ Secondary validation failed with error, switching to fallback:', error);
|
107 |
+
this.useQwen3 = false;
|
108 |
+
}
|
109 |
+
}
|
110 |
+
|
111 |
/**
|
112 |
* Get the active client for text generation
|
113 |
*/
|
|
|
191 |
activeClient: this.useQwen3 ? 'Qwen3' : 'Zephyr-7B'
|
192 |
};
|
193 |
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Reset connection testing to allow re-initialization
|
197 |
+
*/
|
198 |
+
resetConnectionTest() {
|
199 |
+
this.connectionTested = false;
|
200 |
+
console.log('🔄 Connection test reset - will re-test on next prediction');
|
201 |
+
}
|
202 |
+
|
203 |
+
/**
|
204 |
+
* Force re-test connection and re-initialize
|
205 |
+
*/
|
206 |
+
async retestConnection(): Promise<void> {
|
207 |
+
this.connectionTested = false;
|
208 |
+
await this.initialize();
|
209 |
+
}
|
210 |
}
|
211 |
|
212 |
// Export singleton instance
|