diff --git a/.github/readme.md b/.github/readme.md index 5781a5d43..4b6892650 100644 --- a/.github/readme.md +++ b/.github/readme.md @@ -12,6 +12,8 @@ Based on a fork of [TavernAI](https://github.com/TavernAI/TavernAI) 1.2.8 2. Missing extensions after the update? Since the 1.10.6 release version, most of the previously built-in extensions have been converted to downloadable add-ons. You can download them via the built-in "Download Extensions and Assets" menu in the extensions panel (stacked blocks icon in the top bar). +3. Unsupported platform: android arm LEtime-web. 32-bit Android requires an external dependency that can't be installed with npm. Use the following command to install it: `pkg install esbuild`. Then run the usual installation steps. + ### Brought to you by Cohee, RossAscends, and the SillyTavern community ### What is SillyTavern or TavernAI? diff --git a/Dockerfile b/Dockerfile index fcb05cce1..efae20b0e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,11 +12,14 @@ ENTRYPOINT [ "tini", "--" ] # Create app directory WORKDIR ${APP_HOME} +# Set NODE_ENV to production +ENV NODE_ENV=production + # Install app dependencies COPY package*.json post-install.js ./ RUN \ echo "*** Install npm packages ***" && \ - npm install && npm cache clean --force + npm i --no-audit --no-fund --quiet --omit=dev && npm cache clean --force # Bundle app source COPY . ./ diff --git a/Start.bat b/Start.bat index b07586724..8bd3a7e07 100644 --- a/Start.bat +++ b/Start.bat @@ -1,5 +1,6 @@ pushd %~dp0 -call npm install --no-audit +set NODE_ENV=production +call npm install --no-audit --no-fund --quiet --omit=dev node server.js %* pause popd diff --git a/UpdateAndStart.bat b/UpdateAndStart.bat index 67339ba5b..110122cf2 100644 --- a/UpdateAndStart.bat +++ b/UpdateAndStart.bat @@ -11,7 +11,8 @@ if %errorlevel% neq 0 ( echo There were errors while updating. Please download the latest version manually. ) ) -call npm install +set NODE_ENV=production +call npm install --no-audit --no-fund --quiet --omit=dev node server.js %* pause popd diff --git a/default/config.yaml b/default/config.yaml index 5925d573b..dedb5ac5f 100644 --- a/default/config.yaml +++ b/default/config.yaml @@ -35,11 +35,15 @@ skipContentCheck: false # Disable automatic chats backup disableChatBackup: false # API request overrides (for KoboldAI and Text Completion APIs) +## Note: host includes the port number if it's not the default (80 or 443) ## Format is an array of objects: ## - hosts: ## - example.com ## headers: ## Content-Type: application/json +## - 127.0.0.1:5001 +## headers: +## User-Agent: "Googlebot/2.1 (+http://www.google.com/bot.html)" requestOverrides: [] # -- PLUGIN CONFIGURATION -- # Enable UI extensions diff --git a/default/content/presets/openai/Default.json b/default/content/presets/openai/Default.json index 746afb42b..8c4f0f6f3 100644 --- a/default/content/presets/openai/Default.json +++ b/default/content/presets/openai/Default.json @@ -1,7 +1,7 @@ { - "temperature": 0.9, - "frequency_penalty": 0.7, - "presence_penalty": 0.7, + "temperature": 1.0, + "frequency_penalty": 0, + "presence_penalty": 0, "openai_max_context": 4095, "openai_max_tokens": 300, "nsfw_toggle": true, diff --git a/default/settings.json b/default/settings.json index c351ab04e..9156bdf44 100644 --- a/default/settings.json +++ b/default/settings.json @@ -113,6 +113,7 @@ "shadow_width": 2, "main_text_color": "rgba(220, 220, 210, 1)", "italics_text_color": "rgba(145, 145, 145, 1)", + "underline_text_color": "rgba(188, 231, 207, 1)", "quote_text_color": "rgba(225, 138, 36, 1)", "blur_tint_color": "rgba(23, 23, 23, 1)", "user_mes_blur_tint_color": "rgba(0, 0, 0, 0.9)", @@ -445,9 +446,9 @@ }, "oai_settings": { "preset_settings_openai": "Default", - "temp_openai": 0.9, - "freq_pen_openai": 0.7, - "pres_pen_openai": 0.7, + "temp_openai": 1.0, + "freq_pen_openai": 0, + "pres_pen_openai": 0, "count_pen": 0, "top_p_openai": 1, "top_k_openai": 0, @@ -622,7 +623,6 @@ "show_external_models": false, "proxy_password": "", "assistant_prefill": "", - "use_ai21_tokenizer": false, - "exclude_assistant": false + "use_ai21_tokenizer": false } } diff --git a/package-lock.json b/package-lock.json index 38686d089..0298605fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,18 +1,19 @@ { "name": "sillytavern", - "version": "1.11.5", + "version": "1.11.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "sillytavern", - "version": "1.11.5", + "version": "1.11.6", "hasInstallScript": true, "license": "AGPL-3.0", "dependencies": { "@agnai/sentencepiece-js": "^1.1.1", "@agnai/web-tokenizers": "^0.1.3", "@dqbd/tiktoken": "^1.0.13", + "@zeldafan0225/ai_horde": "^4.0.1", "bing-translate-api": "^2.9.1", "body-parser": "^1.20.2", "command-exists": "^1.2.9", @@ -57,36 +58,31 @@ }, "node_modules/@aashutoshrathi/word-wrap": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/@agnai/sentencepiece-js": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@agnai/sentencepiece-js/-/sentencepiece-js-1.1.1.tgz", - "integrity": "sha512-h2+XPrJVLuVLl+2+3iZPWcTw6Fs2NNulnxyh7LoI1hzHHib1wDC6KTmTrDJlLq7/lr5QFYpeMz2rlTFQrS0C0g==", + "license": "Apache-2.0", "dependencies": { "app-root-path": "^3.1.0" } }, "node_modules/@agnai/web-tokenizers": { "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@agnai/web-tokenizers/-/web-tokenizers-0.1.3.tgz", - "integrity": "sha512-KlmTftToTtmb6aLVdne4NluS+POWputPF5J8v25UN/EQS+K9vahWEIe1NPRSFqBQclObkqHaj7JOnFrmnSm5MA==" + "license": "Apache-2.0" }, "node_modules/@dqbd/tiktoken": { "version": "1.0.13", - "resolved": "https://registry.npmjs.org/@dqbd/tiktoken/-/tiktoken-1.0.13.tgz", - "integrity": "sha512-941kjlHjfI97l6NuH/AwuXV4mHuVnRooDcHNSlzi98hz+4ug3wT4gJcWjSwSZHqeGAEn90lC9sFD+8a9d5Jvxg==" + "license": "MIT" }, "node_modules/@eslint-community/eslint-utils": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, + "license": "MIT", "dependencies": { "eslint-visitor-keys": "^3.3.0" }, @@ -99,18 +95,16 @@ }, "node_modules/@eslint-community/regexpp": { "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@eslint/eslintrc": { "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", @@ -131,9 +125,8 @@ }, "node_modules/@eslint/eslintrc/node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -148,15 +141,13 @@ }, "node_modules/@eslint/eslintrc/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/strip-json-comments": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -166,26 +157,23 @@ }, "node_modules/@eslint/js": { "version": "8.55.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", - "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", "dev": true, + "license": "MIT", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@huggingface/jinja": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/@huggingface/jinja/-/jinja-0.1.2.tgz", - "integrity": "sha512-x5mpbfJt1nKmVep5WNP5VjNsjWApWNj8pPYI+uYMkBWH9bWUJmQmHt2lbf0VCoQd54Oq3XuFEh/UyoVh7rPxmg==", + "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@humanwhocodes/config-array": { "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@humanwhocodes/object-schema": "^2.0.1", "debug": "^4.1.1", @@ -197,9 +185,8 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -214,15 +201,13 @@ }, "node_modules/@humanwhocodes/config-array/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.22" }, @@ -233,14 +218,12 @@ }, "node_modules/@humanwhocodes/object-schema": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@jimp/bmp": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.22.10.tgz", - "integrity": "sha512-1UXRl1Nw1KptZ1r0ANqtXOst9vGH51dq7keVKQzyyTO2lz4dOaezS9StuSTNh+RmiHg/SVPaFRpPfB0S/ln4Kg==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10", "bmp-js": "^0.1.0" @@ -251,8 +234,7 @@ }, "node_modules/@jimp/core": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.22.10.tgz", - "integrity": "sha512-ZKyrehVy6wu1PnBXIUpn/fXmyMRQiVSbvHDubgXz4bfTOao3GiOurKHjByutQIgozuAN6ZHWiSge1dKA+dex3w==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10", "any-base": "^1.1.0", @@ -266,16 +248,14 @@ }, "node_modules/@jimp/custom": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.22.10.tgz", - "integrity": "sha512-sPZkUYe1hu0iIgNisjizxPJqq2vaaKvkCkPoXq2U6UV3ZA1si/WVdrg25da3IcGIEV+83AoHgM8TvqlLgrCJsg==", + "license": "MIT", "dependencies": { "@jimp/core": "^0.22.10" } }, "node_modules/@jimp/gif": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.22.10.tgz", - "integrity": "sha512-yEX2dSpamvkSx1PPDWGnKeWDrBz0vrCKjVG/cn4Zr68MRRT75tbZIeOrBa+RiUpY3ho5ix7d36LkYvt3qfUIhQ==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10", "gifwrap": "^0.10.1", @@ -287,8 +267,7 @@ }, "node_modules/@jimp/jpeg": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.22.10.tgz", - "integrity": "sha512-6bu98pAcVN4DY2oiDLC4TOgieX/lZrLd1tombWZOFCN5PBmqaHQxm7IUmT+Wj4faEvh8QSHgVLSA+2JQQRJWVA==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10", "jpeg-js": "^0.4.4" @@ -299,8 +278,7 @@ }, "node_modules/@jimp/plugin-blit": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.10.tgz", - "integrity": "sha512-6EI8Sl+mxYHEIy6Yteh6eknD+EZguKpNdr3sCKxNezmLR0+vK99vHcllo6uGSjXXiwtwS67Xqxn8SsoatL+UJQ==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -310,8 +288,7 @@ }, "node_modules/@jimp/plugin-blur": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.10.tgz", - "integrity": "sha512-4XRTWuPVdMXJeclJMisXPGizeHtTryVaVV5HnuQXpKqIZtzXReCCpNGH8q/i0kBQOQMXhGWS3mpqOEwtpPePKw==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -321,8 +298,7 @@ }, "node_modules/@jimp/plugin-circle": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.22.10.tgz", - "integrity": "sha512-mhcwTO1ywRxiCgtLGge6tDDIDPlX6qkI3CY+BjgGG/XhVHccCddXgOGLdlf+5OuKIEF2Nqs0V01LQEQIJFTmEw==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -332,8 +308,7 @@ }, "node_modules/@jimp/plugin-color": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.10.tgz", - "integrity": "sha512-e4t3L7Kedd96E0x1XjsTM6NcgulKUU66HdFTao7Tc9FYJRFSlttARZ/C6LEryGDm/i69R6bJEpo7BkNz0YL55Q==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10", "tinycolor2": "^1.6.0" @@ -344,8 +319,7 @@ }, "node_modules/@jimp/plugin-contain": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.22.10.tgz", - "integrity": "sha512-eP8KrzctuEoqibQAxi9WhbnoRosydhiwg+IYya3dKuKDBTrD9UHt+ERlPQ/lTNWHzV/l4S1ntV3r9s9saJgsXA==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -358,8 +332,7 @@ }, "node_modules/@jimp/plugin-cover": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.22.10.tgz", - "integrity": "sha512-kJCwL5T1igfa0InCfkE7bBeqg26m46aoRt10ug+rvm11P6RrvRMGrgINFyIKB+mnB7CiyBN/MOula1CvLhSInQ==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -372,8 +345,7 @@ }, "node_modules/@jimp/plugin-crop": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.10.tgz", - "integrity": "sha512-BOZ+YGaZlhU7c5ye65RxikicXH0Ki0It6/XHISvipR5WZrfjLjL2Ke20G+AGnwBQc76gKenVcMXVUCnEjtZV+Q==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -383,8 +355,7 @@ }, "node_modules/@jimp/plugin-displace": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.22.10.tgz", - "integrity": "sha512-llNiWWMTKISDXt5+cXI0GaFmZWAjlT+4fFLYf4eXquuL/9wZoQsEBhv2GdGd48mkiS8jZq1Nnb2Q4ehEPTvrzw==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -394,8 +365,7 @@ }, "node_modules/@jimp/plugin-dither": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.22.10.tgz", - "integrity": "sha512-05WLmeV5M+P/0FS+bWf13hMew2X0oa8w9AtmevL2UyA/5GqiyvP2Xm5WfGQ8oFiiMvpnL6RFomJQOZtWca0C2w==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -405,8 +375,7 @@ }, "node_modules/@jimp/plugin-fisheye": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.10.tgz", - "integrity": "sha512-InjiXvc7Gkzrx8VWtU97kDqV7ENnhHGPULymJWeZaF2aicud9Fpk4iCtd/DcZIrk7Cbe60A8RwNXN00HXIbSCg==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -416,8 +385,7 @@ }, "node_modules/@jimp/plugin-flip": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.22.10.tgz", - "integrity": "sha512-42GkGtTHWnhnwTMPVK/kXObZbkYIpQWfuIfy5EMEMk6zRj05zpv4vsjkKWfuemweZINwfvD7wDJF7FVFNNcZZg==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -428,8 +396,7 @@ }, "node_modules/@jimp/plugin-gaussian": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.10.tgz", - "integrity": "sha512-ykrG/6lTp9Q5YA8jS5XzwMHtRxb9HOFMgtmnrUZ8kU+BK8REecfy9Ic5BUEOjCYvS1a/xLsnrZQU07iiYxBxFg==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -439,8 +406,7 @@ }, "node_modules/@jimp/plugin-invert": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.22.10.tgz", - "integrity": "sha512-d8j9BlUJYs/c994t4azUWSWmQq4LLPG4ecm8m6SSNqap+S/HlVQGqjYhJEBbY9EXkOTYB9vBL9bqwSM1Rr6paA==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -450,8 +416,7 @@ }, "node_modules/@jimp/plugin-mask": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.22.10.tgz", - "integrity": "sha512-yRBs1230XZkz24uFTdTcSlZ0HXZpIWzM3iFQN56MzZ7USgdVZjPPDCQ8I9RpqfZ36nDflQkUO0wV7ucsi4ogow==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -461,8 +426,7 @@ }, "node_modules/@jimp/plugin-normalize": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.22.10.tgz", - "integrity": "sha512-Wk9GX6eJMchX/ZAazVa70Fagu+OXMvHiPY+HrcEwcclL+p1wo8xAHEsf9iKno7Ja4EU9lLhbBRY5hYJyiKMEkg==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -472,8 +436,7 @@ }, "node_modules/@jimp/plugin-print": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.22.10.tgz", - "integrity": "sha512-1U3VloIR+beE1kWPdGEJMiE2h1Do29iv3w8sBbvPyRP4qXxRFcDpmCGtctsrKmb1krlBFlj8ubyAY90xL+5n9w==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10", "load-bmfont": "^1.4.1" @@ -485,8 +448,7 @@ }, "node_modules/@jimp/plugin-resize": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.10.tgz", - "integrity": "sha512-ixomxVcnAONXDgaq0opvAx4UAOiEhOA/tipuhFFOvPKFd4yf1BAnEviB5maB0SBHHkJXPUSzDp/73xVTMGSe7g==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -496,8 +458,7 @@ }, "node_modules/@jimp/plugin-rotate": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.10.tgz", - "integrity": "sha512-eeFX8dnRyf3LAdsdXWKWuN18hLRg8zy1cP0cP9rHzQVWRK7ck/QsLxK1vHq7MADGwQalNaNTJ9SQxH6c8mz6jw==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -510,8 +471,7 @@ }, "node_modules/@jimp/plugin-scale": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.22.10.tgz", - "integrity": "sha512-TG/H0oUN69C9ArBCZg4PmuoixFVKIiru8282KzSB/Tp1I0xwX0XLTv3dJ5pobPlIgPcB+TmD4xAIdkCT4rtWxg==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -522,8 +482,7 @@ }, "node_modules/@jimp/plugin-shadow": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.22.10.tgz", - "integrity": "sha512-TN9xm6fI7XfxbMUQqFPZjv59Xdpf0tSiAQdINB4g6pJMWiVANR/74OtDONoy3KKpenu5Y38s+FkrtID/KcQAhw==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -535,8 +494,7 @@ }, "node_modules/@jimp/plugin-threshold": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.22.10.tgz", - "integrity": "sha512-DA2lSnU0TgIRbAgmXaxroYw3Ad6J2DOFEoJp0NleSm2h3GWbZEE5yW9U2B6hD3iqn4AenG4E2b2WzHXZyzSutw==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10" }, @@ -548,8 +506,7 @@ }, "node_modules/@jimp/plugins": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.22.10.tgz", - "integrity": "sha512-KDMZyM6pmvS8freB+UBLko1TO/k4D7URS/nphCozuH+P7i3UMe7NdckXKJ8u+WD6sqN0YFYvBehpkpnUiw/91w==", + "license": "MIT", "dependencies": { "@jimp/plugin-blit": "^0.22.10", "@jimp/plugin-blur": "^0.22.10", @@ -580,8 +537,7 @@ }, "node_modules/@jimp/png": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.22.10.tgz", - "integrity": "sha512-RYinU7tZToeeR2g2qAMn42AU+8OUHjXPKZZ9RkmoL4bguA1xyZWaSdr22/FBkmnHhOERRlr02KPDN1OTOYHLDQ==", + "license": "MIT", "dependencies": { "@jimp/utils": "^0.22.10", "pngjs": "^6.0.0" @@ -592,8 +548,7 @@ }, "node_modules/@jimp/tiff": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.22.10.tgz", - "integrity": "sha512-OaivlSYzpNTHyH/h7pEtl3A7F7TbsgytZs52GLX/xITW92ffgDgT6PkldIrMrET6ERh/hdijNQiew7IoEEr2og==", + "license": "MIT", "dependencies": { "utif2": "^4.0.1" }, @@ -603,8 +558,7 @@ }, "node_modules/@jimp/types": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.22.10.tgz", - "integrity": "sha512-u/r+XYzbCx4zZukDmxx8S0er3Yq3iDPI6+31WKX0N18i2qPPJYcn8qwIFurfupRumGvJ8SlGLCgt/T+Y8zzUIw==", + "license": "MIT", "dependencies": { "@jimp/bmp": "^0.22.10", "@jimp/gif": "^0.22.10", @@ -619,24 +573,21 @@ }, "node_modules/@jimp/utils": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.10.tgz", - "integrity": "sha512-ztlOK9Mm2iLG2AMoabzM4i3WZ/FtshcgsJCbZCRUs/DKoeS2tySRJTnQZ1b7Roq0M4Ce+FUAxnCAcBV0q7PH9w==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.13.3" } }, "node_modules/@kwsites/file-exists": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "license": "MIT", "dependencies": { "debug": "^4.1.1" } }, "node_modules/@kwsites/file-exists/node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -651,19 +602,16 @@ }, "node_modules/@kwsites/file-exists/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "license": "MIT" }, "node_modules/@kwsites/promise-deferred": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==" + "license": "MIT" }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "2.0.5", "run-parallel": "^1.1.9" @@ -674,18 +622,16 @@ }, "node_modules/@nodelib/fs.stat": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/@nodelib/fs.walk": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" @@ -696,28 +642,23 @@ }, "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/base64": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/codegen": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/eventemitter": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/fetch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.1", "@protobufjs/inquire": "^1.1.0" @@ -725,33 +666,27 @@ }, "node_modules/@protobufjs/float": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/inquire": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/path": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/pool": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "license": "BSD-3-Clause" }, "node_modules/@protobufjs/utf8": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "license": "BSD-3-Clause" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", - "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -761,8 +696,7 @@ }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -770,15 +704,17 @@ "node": ">=10" } }, + "node_modules/@thunder04/supermap": { + "version": "3.0.4", + "license": "MIT" + }, "node_modules/@tokenizer/token": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", - "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + "license": "MIT" }, "node_modules/@types/cacheable-request": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", - "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -788,31 +724,26 @@ }, "node_modules/@types/http-cache-semantics": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.2.tgz", - "integrity": "sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==" + "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", - "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/long": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", - "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + "license": "MIT" }, "node_modules/@types/node": { "version": "16.9.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", - "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" + "license": "MIT" }, "node_modules/@types/node-fetch": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", + "license": "MIT", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" @@ -820,22 +751,28 @@ }, "node_modules/@types/responselike": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.1.tgz", - "integrity": "sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==", + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@ungap/structured-clone": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" + }, + "node_modules/@zeldafan0225/ai_horde": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "@thunder04/supermap": "^3.0.2", + "centra": "^2.5.0", + "esbuild": "^0.12.28" + } }, "node_modules/abort-controller": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", "dependencies": { "event-target-shim": "^5.0.0" }, @@ -845,8 +782,7 @@ }, "node_modules/accepts": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "license": "MIT", "dependencies": { "mime-types": "~2.1.34", "negotiator": "0.6.3" @@ -857,9 +793,8 @@ }, "node_modules/acorn": { "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -869,17 +804,15 @@ }, "node_modules/acorn-jsx": { "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/agentkeepalive": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", - "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "license": "MIT", "dependencies": { "humanize-ms": "^1.2.1" }, @@ -889,9 +822,8 @@ }, "node_modules/ajv": { "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -905,16 +837,14 @@ }, "node_modules/ansi-regex": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -927,47 +857,39 @@ }, "node_modules/any-base": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + "license": "MIT" }, "node_modules/app-root-path": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", - "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "license": "MIT", "engines": { "node": ">= 6.0.0" } }, "node_modules/append-field": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" + "license": "MIT" }, "node_modules/argparse": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/array-flatten": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + "license": "MIT" }, "node_modules/array-keyed-map": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/array-keyed-map/-/array-keyed-map-2.1.3.tgz", - "integrity": "sha512-JIUwuFakO+jHjxyp4YgSiKXSZeC0U+R1jR94bXWBcVlFRBycqXlb+kH9JHxBGcxnVuSqx5bnn0Qz9xtSeKOjiA==" + "license": "ISC" }, "node_modules/asynckit": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + "license": "MIT" }, "node_modules/axios": { "version": "1.6.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz", - "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.0", "form-data": "^4.0.0", @@ -976,19 +898,14 @@ }, "node_modules/balanced-match": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base-64": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/base-64/-/base-64-0.1.0.tgz", - "integrity": "sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==" + "version": "0.1.0" }, "node_modules/base64-js": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -1002,25 +919,23 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/bing-translate-api": { "version": "2.9.1", - "resolved": "https://registry.npmjs.org/bing-translate-api/-/bing-translate-api-2.9.1.tgz", - "integrity": "sha512-DaYqa7iupfj+fj/KeaeZSp5FUY/ZR4sZ6jqoTP0RHkYOUfo7wwoxlhYDkh4VcvBBzuVORnBEgdXBVQrfM4kk7g==", + "license": "MIT", "dependencies": { "got": "^11.8.6" } }, "node_modules/bmp-js": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" + "license": "MIT" }, "node_modules/body-parser": { "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -1042,22 +957,19 @@ }, "node_modules/body-parser/node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/boolbase": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "license": "ISC" }, "node_modules/brace-expansion": { "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1065,8 +977,6 @@ }, "node_modules/buffer": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -1081,6 +991,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -1088,29 +999,24 @@ }, "node_modules/buffer-crc32": { "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", "engines": { "node": "*" } }, "node_modules/buffer-equal": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/buffer-from": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "license": "MIT" }, "node_modules/busboy": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", "dependencies": { "streamsearch": "^1.1.0" }, @@ -1120,24 +1026,21 @@ }, "node_modules/bytes": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/cacheable-lookup": { "version": "5.0.4", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", - "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", "engines": { "node": ">=10.6.0" } }, "node_modules/cacheable-request": { "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", - "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -1153,8 +1056,7 @@ }, "node_modules/call-bind": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -1165,18 +1067,20 @@ }, "node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/centra": { + "version": "2.6.0", + "license": "MIT" + }, "node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1190,16 +1094,14 @@ }, "node_modules/charenc": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", - "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/cheerio": { "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", + "license": "MIT", "dependencies": { "cheerio-select": "^2.1.0", "dom-serializer": "^2.0.0", @@ -1218,8 +1120,7 @@ }, "node_modules/cheerio-select": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-select": "^5.1.0", @@ -1234,8 +1135,7 @@ }, "node_modules/cliui": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -1247,8 +1147,7 @@ }, "node_modules/clone-response": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", - "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -1258,16 +1157,14 @@ }, "node_modules/clone-response/node_modules/mimic-response": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/color-convert": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1277,13 +1174,11 @@ }, "node_modules/color-name": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "license": "MIT" }, "node_modules/combined-stream": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -1293,13 +1188,11 @@ }, "node_modules/command-exists": { "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==" + "license": "MIT" }, "node_modules/compressible": { "version": "2.0.18", - "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", - "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "license": "MIT", "dependencies": { "mime-db": ">= 1.43.0 < 2" }, @@ -1309,8 +1202,7 @@ }, "node_modules/compression": { "version": "1.7.4", - "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", - "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "license": "MIT", "dependencies": { "accepts": "~1.3.5", "bytes": "3.0.0", @@ -1326,17 +1218,15 @@ }, "node_modules/concat-map": { "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "engines": [ "node >= 0.8" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -1346,8 +1236,7 @@ }, "node_modules/content-disposition": { "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -1357,8 +1246,6 @@ }, "node_modules/content-disposition/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -1372,28 +1259,26 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/content-type": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-parser": { "version": "1.4.6", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", - "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "license": "MIT", "dependencies": { "cookie": "0.4.1", "cookie-signature": "1.0.6" @@ -1404,18 +1289,15 @@ }, "node_modules/cookie-signature": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + "license": "MIT" }, "node_modules/cors": { "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -1426,17 +1308,15 @@ }, "node_modules/crc-32": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-0.3.0.tgz", - "integrity": "sha512-kucVIjOmMc1f0tv53BJ/5WIX+MGLcKuoBhnGqQrgKJNqLByb/sVMWfW/Aw6hw0jgcqjJ2pi9E5y32zOIpaUlsA==", + "license": "Apache-2.0", "engines": { "node": ">=0.8" } }, "node_modules/cross-spawn": { "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -1448,24 +1328,21 @@ }, "node_modules/crypt": { "version": "0.0.2", - "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", - "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "license": "BSD-3-Clause", "engines": { "node": "*" } }, "node_modules/csrf-csrf": { "version": "2.2.4", - "resolved": "https://registry.npmjs.org/csrf-csrf/-/csrf-csrf-2.2.4.tgz", - "integrity": "sha512-LuhBmy5RfRmEfeqeYqgaAuS1eDpVtKZB/Eiec9xiKQLBynJxrGVRdM2yRT/YMl1Njo/yKh2L9AYsIwSlTPnx2A==", + "license": "ISC", "dependencies": { "http-errors": "^2.0.0" } }, "node_modules/css-select": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", @@ -1479,8 +1356,7 @@ }, "node_modules/css-what": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -1490,16 +1366,14 @@ }, "node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, "node_modules/decompress-response": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -1512,46 +1386,40 @@ }, "node_modules/deep-is": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/defer-to-connect": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", "engines": { "node": ">=10" } }, "node_modules/define-lazy-prop": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", - "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/delayed-stream": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", "engines": { "node": ">=0.4.0" } }, "node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -1559,8 +1427,7 @@ }, "node_modules/digest-fetch": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/digest-fetch/-/digest-fetch-1.3.0.tgz", - "integrity": "sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==", + "license": "ISC", "dependencies": { "base-64": "^0.1.0", "md5": "^2.3.0" @@ -1568,9 +1435,8 @@ }, "node_modules/doctrine": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -1580,8 +1446,7 @@ }, "node_modules/dom-serializer": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", @@ -1592,25 +1457,21 @@ } }, "node_modules/dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + "version": "0.1.2" }, "node_modules/domelementtype": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "funding": [ { "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.3.0" }, @@ -1623,8 +1484,7 @@ }, "node_modules/domutils": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", @@ -1636,42 +1496,36 @@ }, "node_modules/dotenv": { "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==", + "license": "BSD-2-Clause", "engines": { "node": ">=10" } }, "node_modules/ee-first": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + "license": "MIT" }, "node_modules/emoji-regex": { "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "license": "MIT" }, "node_modules/encodeurl": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -1679,32 +1533,34 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/esbuild": { + "name": "dry-uninstall", + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dry-uninstall/-/dry-uninstall-0.3.0.tgz", + "integrity": "sha512-b8h94RVpETWkVV59x62NsY++79bM7Si6Dxq7a4iVxRcJU3ZJJ4vaiC7wUZwM8WDK0ySRL+i+T/1SMAzbJLejYA==" + }, "node_modules/escalade": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + "license": "MIT" }, "node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/eslint": { "version": "8.55.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", - "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -1757,9 +1613,8 @@ }, "node_modules/eslint-scope": { "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -1773,9 +1628,8 @@ }, "node_modules/eslint-visitor-keys": { "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -1785,9 +1639,8 @@ }, "node_modules/eslint/node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -1802,9 +1655,8 @@ }, "node_modules/eslint/node_modules/escape-string-regexp": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -1814,9 +1666,8 @@ }, "node_modules/eslint/node_modules/glob-parent": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { "is-glob": "^4.0.3" }, @@ -1826,15 +1677,13 @@ }, "node_modules/eslint/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/espree": { "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -1849,9 +1698,8 @@ }, "node_modules/esquery": { "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -1861,9 +1709,8 @@ }, "node_modules/esrecurse": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -1873,47 +1720,40 @@ }, "node_modules/estraverse": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } }, "node_modules/esutils": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/etag": { "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/event-target-shim": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" + "version": "0.1.12" }, "node_modules/express": { "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", @@ -1953,8 +1793,7 @@ }, "node_modules/express/node_modules/body-parser": { "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -1976,24 +1815,21 @@ }, "node_modules/express/node_modules/bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/express/node_modules/cookie": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/express/node_modules/raw-body": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -2006,8 +1842,6 @@ }, "node_modules/express/node_modules/safe-buffer": { "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", "funding": [ { "type": "github", @@ -2021,48 +1855,43 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fastq": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } }, "node_modules/fd-slicer": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", "dependencies": { "pend": "~1.2.0" } }, "node_modules/file-entry-cache": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -2072,8 +1901,7 @@ }, "node_modules/file-type": { "version": "16.5.4", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", - "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "license": "MIT", "dependencies": { "readable-web-to-node-stream": "^3.0.0", "strtok3": "^6.2.4", @@ -2088,8 +1916,7 @@ }, "node_modules/finalhandler": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", @@ -2105,9 +1932,8 @@ }, "node_modules/find-up": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -2121,9 +1947,8 @@ }, "node_modules/flat-cache": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -2135,19 +1960,17 @@ }, "node_modules/flatbuffers": { "version": "1.12.0", - "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", - "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" + "license": "SEE LICENSE IN LICENSE.txt" }, "node_modules/flatted": { "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.4", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.4.tgz", - "integrity": "sha512-Cr4D/5wlrb0z9dgERpUL3LrmPKVDsETIJhaCMeDfuFYcqa5bldGV6wBsAN6X/vxlXQtFBMrXdXxdL8CbDTGniw==", + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", "funding": [ { "type": "individual", @@ -2165,8 +1988,7 @@ }, "node_modules/form-data": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -2178,13 +2000,11 @@ }, "node_modules/form-data-encoder": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-1.7.2.tgz", - "integrity": "sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==" + "license": "MIT" }, "node_modules/formdata-node": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/formdata-node/-/formdata-node-4.4.1.tgz", - "integrity": "sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==", + "license": "MIT", "dependencies": { "node-domexception": "1.0.0", "web-streams-polyfill": "4.0.0-beta.3" @@ -2195,51 +2015,44 @@ }, "node_modules/formdata-node/node_modules/web-streams-polyfill": { "version": "4.0.0-beta.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-4.0.0-beta.3.tgz", - "integrity": "sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==", + "license": "MIT", "engines": { "node": ">= 14" } }, "node_modules/forwarded": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fresh": { "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/fs.realpath": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/function-bind": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + "license": "MIT" }, "node_modules/get-caller-file": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } }, "node_modules/get-intrinsic": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", @@ -2252,8 +2065,7 @@ }, "node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -2266,8 +2078,7 @@ }, "node_modules/gifwrap": { "version": "0.10.1", - "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", - "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==", + "license": "MIT", "dependencies": { "image-q": "^4.0.0", "omggif": "^1.0.10" @@ -2275,9 +2086,8 @@ }, "node_modules/glob": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2295,8 +2105,7 @@ }, "node_modules/global": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "license": "MIT", "dependencies": { "min-document": "^2.19.0", "process": "^0.11.10" @@ -2304,9 +2113,8 @@ }, "node_modules/globals": { "version": "13.23.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", - "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -2319,13 +2127,11 @@ }, "node_modules/google-translate-api-browser": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/google-translate-api-browser/-/google-translate-api-browser-3.0.1.tgz", - "integrity": "sha512-KTLodkyGBWMK9IW6QIeJ2zCuju4Z0CLpbkADKo+yLhbSTD4l+CXXpQ/xaynGVAzeBezzJG6qn8MLeqOq3SmW0A==" + "license": "MIT" }, "node_modules/got": { "version": "11.8.6", - "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", - "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -2348,13 +2154,11 @@ }, "node_modules/gpt-3-encoder": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/gpt-3-encoder/-/gpt-3-encoder-1.1.4.tgz", - "integrity": "sha512-fSQRePV+HUAhCn7+7HL7lNIXNm6eaFWFbNLOOGtmSJ0qJycyQvj60OvRlH7mee8xAMjBDNRdMXlMwjAbMTDjkg==" + "license": "MIT" }, "node_modules/gpt3-tokenizer": { "version": "1.1.5", - "resolved": "https://registry.npmjs.org/gpt3-tokenizer/-/gpt3-tokenizer-1.1.5.tgz", - "integrity": "sha512-O9iCL8MqGR0Oe9wTh0YftzIbysypNQmS5a5JG3cB3M4LMYjlAVvNnf8LUzVY9MrI7tj+YLY356uHtO2lLX2HpA==", + "license": "MIT", "dependencies": { "array-keyed-map": "^2.1.3" }, @@ -2364,19 +2168,16 @@ }, "node_modules/graphemer": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/guid-typescript": { "version": "1.0.9", - "resolved": "https://registry.npmjs.org/guid-typescript/-/guid-typescript-1.0.9.tgz", - "integrity": "sha512-Y8T4vYhEfwJOTbouREvG+3XDsjr8E3kIr7uf+JZ0BYloFsttiHU0WfvANVsR7TxNUJa/WpCnw/Ino/p+DeBhBQ==" + "license": "ISC" }, "node_modules/has": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "license": "MIT", "dependencies": { "function-bind": "^1.1.1" }, @@ -2386,17 +2187,15 @@ }, "node_modules/has-flag": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/has-proto": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2406,8 +2205,7 @@ }, "node_modules/has-symbols": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2417,8 +2215,6 @@ }, "node_modules/htmlparser2": { "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -2426,6 +2222,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.3", @@ -2435,13 +2232,11 @@ }, "node_modules/http-cache-semantics": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "license": "BSD-2-Clause" }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -2455,8 +2250,7 @@ }, "node_modules/http2-wrapper": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", - "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -2467,16 +2261,14 @@ }, "node_modules/humanize-ms": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "license": "MIT", "dependencies": { "ms": "^2.0.0" } }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -2486,8 +2278,6 @@ }, "node_modules/ieee754": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -2501,30 +2291,28 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/image-q": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", - "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", + "license": "MIT", "dependencies": { "@types/node": "16.9.1" } }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -2538,17 +2326,15 @@ }, "node_modules/imurmurhash": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", "engines": { "node": ">=0.8.19" } }, "node_modules/inflight": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2556,31 +2342,26 @@ }, "node_modules/inherits": { "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "license": "ISC" }, "node_modules/ip-matching": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ip-matching/-/ip-matching-2.1.2.tgz", - "integrity": "sha512-/ok+VhKMasgR5gvTRViwRFQfc0qYt9Vdowg6TO4/pFlDCob5ZjGPkwuOoQVCd5OrMm20zqh+1vA8KLJZTeWudg==" + "license": "LGPL-3.0-only" }, "node_modules/ipaddr.js": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", - "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/is-buffer": { "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "license": "MIT" }, "node_modules/is-docker": { "version": "2.2.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", - "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -2593,31 +2374,27 @@ }, "node_modules/is-extglob": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/is-fullwidth-code-point": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-function": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + "license": "MIT" }, "node_modules/is-glob": { "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -2627,17 +2404,15 @@ }, "node_modules/is-path-inside": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/is-wsl": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", - "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -2647,19 +2422,16 @@ }, "node_modules/isarray": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/isomorphic-fetch": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", - "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "license": "MIT", "dependencies": { "node-fetch": "^2.6.1", "whatwg-fetch": "^3.4.1" @@ -2667,8 +2439,7 @@ }, "node_modules/jimp": { "version": "0.22.10", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.10.tgz", - "integrity": "sha512-lCaHIJAgTOsplyJzC1w/laxSxrbSsEBw4byKwXgUdMmh+ayPsnidTblenQm+IvhIs44Gcuvlb6pd2LQ0wcKaKg==", + "license": "MIT", "dependencies": { "@jimp/custom": "^0.22.10", "@jimp/plugins": "^0.22.10", @@ -2678,20 +2449,17 @@ }, "node_modules/jpeg-js": { "version": "0.4.4", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", - "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" + "license": "BSD-3-Clause" }, "node_modules/jquery": { "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.0.tgz", - "integrity": "sha512-umpJ0/k8X0MvD1ds0P9SfowREz2LenHsQaxSohMZ5OMNEU2r0tf8pdeEFTHMFxWVxKNyU9rTtK3CWzUCTKJUeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/js-yaml": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -2701,13 +2469,11 @@ }, "node_modules/json-buffer": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "license": "MIT" }, "node_modules/json-colorizer": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/json-colorizer/-/json-colorizer-2.2.2.tgz", - "integrity": "sha512-56oZtwV1piXrQnRNTtJeqRv+B9Y/dXAYLqBBaYl/COcUdoZxgLBLAO88+CnkbT6MxNs0c5E9mPBIb2sFcNz3vw==", + "license": "MIT", "dependencies": { "chalk": "^2.4.1", "lodash.get": "^4.4.2" @@ -2715,8 +2481,7 @@ }, "node_modules/json-colorizer/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -2726,8 +2491,7 @@ }, "node_modules/json-colorizer/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -2739,29 +2503,25 @@ }, "node_modules/json-colorizer/node_modules/color-convert": { "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", "dependencies": { "color-name": "1.1.3" } }, "node_modules/json-colorizer/node_modules/color-name": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "license": "MIT" }, "node_modules/json-colorizer/node_modules/has-flag": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/json-colorizer/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -2771,29 +2531,25 @@ }, "node_modules/json-schema-traverse": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/keyv": { "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/levn": { "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -2804,8 +2560,7 @@ }, "node_modules/load-bmfont": { "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "license": "MIT", "dependencies": { "buffer-equal": "0.0.1", "mime": "^1.3.4", @@ -2819,9 +2574,8 @@ }, "node_modules/locate-path": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -2834,37 +2588,31 @@ }, "node_modules/lodash": { "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "license": "MIT" }, "node_modules/lodash.get": { "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", - "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==" + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/long": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "license": "Apache-2.0" }, "node_modules/lowercase-keys": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/md5": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", - "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "license": "BSD-3-Clause", "dependencies": { "charenc": "0.0.2", "crypt": "0.0.2", @@ -2873,29 +2621,25 @@ }, "node_modules/media-typer": { "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/merge-descriptors": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "license": "MIT" }, "node_modules/methods": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -2905,16 +2649,14 @@ }, "node_modules/mime-db": { "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -2924,8 +2666,7 @@ }, "node_modules/mimic-response": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -2935,17 +2676,14 @@ }, "node_modules/min-document": { "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", "dependencies": { "dom-walk": "^0.1.0" } }, "node_modules/minimatch": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2955,21 +2693,18 @@ }, "node_modules/minimist": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + "license": "MIT" }, "node_modules/multer": { "version": "1.4.5-lts.1", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", - "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "license": "MIT", "dependencies": { "append-field": "^1.0.0", "busboy": "^1.0.0", @@ -2985,8 +2720,7 @@ }, "node_modules/multer/node_modules/mkdirp": { "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", "dependencies": { "minimist": "^1.2.6" }, @@ -2996,22 +2730,18 @@ }, "node_modules/natural-compare": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/negotiator": { "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/node-domexception": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", "funding": [ { "type": "github", @@ -3022,14 +2752,14 @@ "url": "https://paypal.me/jimmywarting" } ], + "license": "MIT", "engines": { "node": ">=10.5.0" } }, "node_modules/node-fetch": { "version": "2.6.12", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz", - "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==", + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -3047,8 +2777,7 @@ }, "node_modules/normalize-url": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -3058,8 +2787,7 @@ }, "node_modules/nth-check": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -3069,29 +2797,25 @@ }, "node_modules/object-assign": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/object-inspect": { "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/omggif": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + "license": "MIT" }, "node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -3101,37 +2825,32 @@ }, "node_modules/on-headers": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/once": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "node_modules/onnx-proto": { "version": "4.0.4", - "resolved": "https://registry.npmjs.org/onnx-proto/-/onnx-proto-4.0.4.tgz", - "integrity": "sha512-aldMOB3HRoo6q/phyB6QRQxSt895HNNw82BNyZ2CMh4bjeKv7g/c+VpAFtJuEMVfYLMbRx61hbuqnKceLeDcDA==", + "license": "MIT", "dependencies": { "protobufjs": "^6.8.8" } }, "node_modules/onnxruntime-common": { "version": "1.14.0", - "resolved": "https://registry.npmjs.org/onnxruntime-common/-/onnxruntime-common-1.14.0.tgz", - "integrity": "sha512-3LJpegM2iMNRX2wUmtYfeX/ytfOzNwAWKSq1HbRrKc9+uqG/FsEA0bbKZl1btQeZaXhC26l44NWpNUeXPII7Ew==" + "license": "MIT" }, "node_modules/onnxruntime-web": { "version": "1.14.0", - "resolved": "https://registry.npmjs.org/onnxruntime-web/-/onnxruntime-web-1.14.0.tgz", - "integrity": "sha512-Kcqf43UMfW8mCydVGcX9OMXI2VN17c0p6XvR7IPSZzBf/6lteBzXHvcEVWDPmCKuGombl997HgLqj91F11DzXw==", + "license": "MIT", "dependencies": { "flatbuffers": "^1.12.0", "guid-typescript": "^1.0.9", @@ -3143,8 +2862,7 @@ }, "node_modules/open": { "version": "8.4.2", - "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", - "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -3159,8 +2877,7 @@ }, "node_modules/openai": { "version": "4.17.4", - "resolved": "https://registry.npmjs.org/openai/-/openai-4.17.4.tgz", - "integrity": "sha512-ThRFkl6snLbcAKS58St7N3CaKuI5WdYUvIjPvf4s+8SdymgNtOfzmZcZXVcCefx04oKFnvZJvIcTh3eAFUUhAQ==", + "license": "Apache-2.0", "dependencies": { "@types/node": "^18.11.18", "@types/node-fetch": "^2.6.4", @@ -3178,17 +2895,15 @@ }, "node_modules/openai/node_modules/@types/node": { "version": "18.18.9", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.9.tgz", - "integrity": "sha512-0f5klcuImLnG4Qreu9hPj/rEfFq6YRc5n2mAjSsH+ec/mJL+3voBH0+8T7o8RpFjH7ovc+TRsL/c7OYIQsPTfQ==", + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/optionator": { "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", "dev": true, + "license": "MIT", "dependencies": { "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", @@ -3203,17 +2918,15 @@ }, "node_modules/p-cancelable": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/p-limit": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -3226,9 +2939,8 @@ }, "node_modules/p-locate": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -3241,14 +2953,12 @@ }, "node_modules/pako": { "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "license": "(MIT AND Zlib)" }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -3258,18 +2968,15 @@ }, "node_modules/parse-bmfont-ascii": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" + "license": "MIT" }, "node_modules/parse-bmfont-binary": { "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" + "license": "MIT" }, "node_modules/parse-bmfont-xml": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "license": "MIT", "dependencies": { "xml-parse-from-string": "^1.0.0", "xml2js": "^0.4.5" @@ -3277,13 +2984,11 @@ }, "node_modules/parse-headers": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", - "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + "license": "MIT" }, "node_modules/parse5": { "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "license": "MIT", "dependencies": { "entities": "^4.4.0" }, @@ -3293,8 +2998,7 @@ }, "node_modules/parse5-htmlparser2-tree-adapter": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", + "license": "MIT", "dependencies": { "domhandler": "^5.0.2", "parse5": "^7.0.0" @@ -3305,48 +3009,42 @@ }, "node_modules/parseurl": { "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/path-exists": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/path-key": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/path-to-regexp": { "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "license": "MIT" }, "node_modules/peek-readable": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", - "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -3357,18 +3055,15 @@ }, "node_modules/pend": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "license": "MIT" }, "node_modules/phin": { "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + "license": "MIT" }, "node_modules/pixelmatch": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", + "license": "ISC", "dependencies": { "pngjs": "^3.0.0" }, @@ -3378,26 +3073,22 @@ }, "node_modules/pixelmatch/node_modules/pngjs": { "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "license": "MIT", "engines": { "node": ">=4.0.0" } }, "node_modules/platform": { "version": "1.3.6", - "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", - "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==" + "license": "MIT" }, "node_modules/png-chunk-text": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-chunk-text/-/png-chunk-text-1.0.0.tgz", - "integrity": "sha512-DEROKU3SkkLGWNMzru3xPVgxyd48UGuMSZvioErCure6yhOc/pRH2ZV+SEn7nmaf7WNf3NdIpH+UTrRdKyq9Lw==" + "license": "MIT" }, "node_modules/png-chunks-encode": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-chunks-encode/-/png-chunks-encode-1.0.0.tgz", - "integrity": "sha512-J1jcHgbQRsIIgx5wxW9UmCymV3wwn4qCCJl6KYgEU/yHCh/L2Mwq/nMOkRPtmV79TLxRZj5w3tH69pvygFkDqA==", + "license": "MIT", "dependencies": { "crc-32": "^0.3.0", "sliced": "^1.0.1" @@ -3405,47 +3096,41 @@ }, "node_modules/png-chunks-extract": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/png-chunks-extract/-/png-chunks-extract-1.0.0.tgz", - "integrity": "sha512-ZiVwF5EJ0DNZyzAqld8BP1qyJBaGOFaq9zl579qfbkcmOwWLLO4I9L8i2O4j3HkI6/35i0nKG2n+dZplxiT89Q==", + "license": "MIT", "dependencies": { "crc-32": "^0.3.0" } }, "node_modules/pngjs": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", - "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", + "license": "MIT", "engines": { "node": ">=12.13.0" } }, "node_modules/prelude-ls": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } }, "node_modules/process": { "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", "engines": { "node": ">= 0.6.0" } }, "node_modules/process-nextick-args": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + "license": "MIT" }, "node_modules/protobufjs": { "version": "6.11.4", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.4.tgz", - "integrity": "sha512-5kQWPaJHi1WoCpjTGszzQ32PG2F4+wRY6BmAT4Vfw56Q2FZ4YZzK20xUYQH4YkfehY1e6QSICrJquM6xXZNcrw==", "hasInstallScript": true, + "license": "BSD-3-Clause", "dependencies": { "@protobufjs/aspromise": "^1.1.2", "@protobufjs/base64": "^1.1.2", @@ -3468,8 +3153,7 @@ }, "node_modules/proxy-addr": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -3480,21 +3164,18 @@ }, "node_modules/proxy-addr/node_modules/ipaddr.js": { "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } }, "node_modules/proxy-from-env": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + "license": "MIT" }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -3502,17 +3183,15 @@ }, "node_modules/punycode": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/qs": { "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -3525,194 +3204,6 @@ }, "node_modules/queue-microtask": { "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/raw-body/node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/readable-web-to-node-stream": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", - "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", - "dependencies": { - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Borewit" - } - }, - "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/regenerator-runtime": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", - "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/response-time": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/response-time/-/response-time-2.3.2.tgz", - "integrity": "sha512-MUIDaDQf+CVqflfTdQ5yam+aYCkXj1PY8fjlPDQ6ppxJlmgZb864pHtA750mayywNg8tx4rS7qH9JXd/OF+3gw==", - "dependencies": { - "depd": "~1.1.0", - "on-headers": "~1.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/response-time/node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/responselike": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", - "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", - "dependencies": { - "lowercase-keys": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -3728,37 +3219,202 @@ "url": "https://feross.org/support" } ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/raw-body/node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readable-web-to-node-stream": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readable-web-to-node-stream/node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "license": "MIT" + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/response-time": { + "version": "2.3.2", + "license": "MIT", + "dependencies": { + "depd": "~1.1.0", + "on-headers": "~1.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/response-time/node_modules/depd": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/responselike": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } }, "node_modules/safe-buffer": { "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "license": "MIT" }, "node_modules/sanitize-filename": { "version": "1.6.3", - "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", - "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", + "license": "WTFPL OR ISC", "dependencies": { "truncate-utf8-bytes": "^1.0.0" } }, "node_modules/sax": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + "license": "ISC" }, "node_modules/send": { "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -3780,13 +3436,11 @@ }, "node_modules/send/node_modules/ms": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "license": "MIT" }, "node_modules/serve-static": { "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -3799,14 +3453,12 @@ }, "node_modules/setprototypeof": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "license": "ISC" }, "node_modules/shebang-command": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -3816,17 +3468,15 @@ }, "node_modules/shebang-regex": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/side-channel": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "license": "MIT", "dependencies": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -3838,8 +3488,7 @@ }, "node_modules/signal-exit": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -3849,8 +3498,7 @@ }, "node_modules/sillytavern-transformers": { "version": "2.14.6", - "resolved": "https://registry.npmjs.org/sillytavern-transformers/-/sillytavern-transformers-2.14.6.tgz", - "integrity": "sha512-Tpu3lcDfa3vQB/wRgF+7ZG8ZNtYygT6vEQs9+4BpXLghVanx6ic7rBSxmTxx9Sm90G1P3W8mxoVkzfs8KAvMiA==", + "license": "Apache-2.0", "dependencies": { "@huggingface/jinja": "^0.1.0", "jimp": "^0.22.10", @@ -3859,8 +3507,7 @@ }, "node_modules/simple-git": { "version": "3.19.1", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.19.1.tgz", - "integrity": "sha512-Ck+rcjVaE1HotraRAS8u/+xgTvToTuoMkT9/l9lvuP5jftwnYUp6DwuJzsKErHgfyRk8IB8pqGHWEbM3tLgV1w==", + "license": "MIT", "dependencies": { "@kwsites/file-exists": "^1.1.1", "@kwsites/promise-deferred": "^1.1.1", @@ -3873,8 +3520,7 @@ }, "node_modules/simple-git/node_modules/debug": { "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", "dependencies": { "ms": "2.1.2" }, @@ -3889,42 +3535,35 @@ }, "node_modules/simple-git/node_modules/ms": { "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "license": "MIT" }, "node_modules/sliced": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", - "integrity": "sha512-VZBmZP8WU3sMOZm1bdgTadsQbcscK0UM8oKxKVBs4XAhUo2Xxzm/OFMGBkPusxw9xL3Uy8LrzEqGqJhclsr0yA==" + "license": "MIT" }, "node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/streamsearch": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", "engines": { "node": ">=10.0.0" } }, "node_modules/string_decoder": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/string-width": { "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3936,8 +3575,7 @@ }, "node_modules/strip-ansi": { "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3947,8 +3585,7 @@ }, "node_modules/strtok3": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", - "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", "peek-readable": "^4.1.0" @@ -3963,9 +3600,8 @@ }, "node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -3975,32 +3611,27 @@ }, "node_modules/text-table": { "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/timm": { "version": "1.7.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", - "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + "license": "MIT" }, "node_modules/tinycolor2": { "version": "1.6.0", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", - "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + "license": "MIT" }, "node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/token-types": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", - "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "license": "MIT", "dependencies": { "@tokenizer/token": "^0.3.0", "ieee754": "^1.2.1" @@ -4015,22 +3646,19 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "license": "MIT" }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", - "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", "dependencies": { "utf8-byte-length": "^1.0.1" } }, "node_modules/type-check": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -4040,9 +3668,8 @@ }, "node_modules/type-fest": { "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4052,8 +3679,7 @@ }, "node_modules/type-is": { "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "license": "MIT", "dependencies": { "media-typer": "0.3.0", "mime-types": "~2.1.24" @@ -4064,77 +3690,66 @@ }, "node_modules/typedarray": { "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "license": "MIT" }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + "license": "MIT" }, "node_modules/unpipe": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/uri-js": { "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } }, "node_modules/utf8-byte-length": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz", - "integrity": "sha512-4+wkEYLBbWxqTahEsWrhxepcoVOJ+1z5PGIjPZxRkytcdSUaNjIjBM7Xn8E+pdSuV7SzvWovBFA54FO0JSoqhA==" + "license": "WTFPL" }, "node_modules/utif2": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz", - "integrity": "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==", + "license": "MIT", "dependencies": { "pako": "^1.0.11" } }, "node_modules/util-deprecate": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", "engines": { "node": ">= 0.4.0" } }, "node_modules/uuid": { "version": "9.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", - "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } }, "node_modules/vary": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/vectra": { "version": "0.2.2", - "resolved": "https://registry.npmjs.org/vectra/-/vectra-0.2.2.tgz", - "integrity": "sha512-Z1d29Zil+dlA9/Qz4VJB3zcWjIARY8QH5xQEnHmGgmTUP58cPRV8NK7P0QH91IRs0RvAWrYiQf9Y5JqQo0vJlQ==", + "license": "MIT", "dependencies": { "axios": "^1.3.4", "cheerio": "^1.0.0-rc.12", @@ -4151,8 +3766,7 @@ }, "node_modules/wavefile": { "version": "11.0.0", - "resolved": "https://registry.npmjs.org/wavefile/-/wavefile-11.0.0.tgz", - "integrity": "sha512-/OBiAALgWU24IG7sC84cDO/KfFuvajWc5Uec0oV2zrpOOZZDgGdOwHwgEzOrwh8jkubBk7PtZfQBIcI1OaE5Ng==", + "license": "MIT", "bin": { "wavefile": "bin/wavefile.js" }, @@ -4162,26 +3776,22 @@ }, "node_modules/web-streams-polyfill": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz", - "integrity": "sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==", + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "license": "BSD-2-Clause" }, "node_modules/whatwg-fetch": { "version": "3.6.18", - "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.18.tgz", - "integrity": "sha512-ltN7j66EneWn5TFDO4L9inYC1D+Czsxlrw2SalgjMmEMkLfA5SIZxEFdE6QtHFiiM6Q7WL32c7AkI3w6yxM84Q==" + "license": "MIT" }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -4189,9 +3799,8 @@ }, "node_modules/which": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -4204,8 +3813,7 @@ }, "node_modules/wrap-ansi": { "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4220,13 +3828,11 @@ }, "node_modules/wrappy": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -4237,8 +3843,7 @@ }, "node_modules/ws": { "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, @@ -4257,8 +3862,7 @@ }, "node_modules/xhr": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "license": "MIT", "dependencies": { "global": "~4.4.0", "is-function": "^1.0.1", @@ -4268,13 +3872,11 @@ }, "node_modules/xml-parse-from-string": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" + "license": "MIT" }, "node_modules/xml2js": { "version": "0.5.0", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", - "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "license": "MIT", "dependencies": { "sax": ">=0.6.0", "xmlbuilder": "~11.0.0" @@ -4285,40 +3887,35 @@ }, "node_modules/xmlbuilder": { "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", "engines": { "node": ">=4.0" } }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } }, "node_modules/y18n": { "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } }, "node_modules/yaml": { "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "license": "ISC", "engines": { "node": ">= 14" } }, "node_modules/yargs": { "version": "17.7.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", - "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -4334,16 +3931,14 @@ }, "node_modules/yargs-parser": { "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } }, "node_modules/yauzl": { "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -4351,9 +3946,8 @@ }, "node_modules/yocto-queue": { "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, diff --git a/package.json b/package.json index fd94aa2f3..e8085c240 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,7 @@ "@agnai/sentencepiece-js": "^1.1.1", "@agnai/web-tokenizers": "^0.1.3", "@dqbd/tiktoken": "^1.0.13", + "@zeldafan0225/ai_horde": "^4.0.1", "bing-translate-api": "^2.9.1", "body-parser": "^1.20.2", "command-exists": "^1.2.9", @@ -46,6 +47,9 @@ }, "axios": { "follow-redirects": "^1.15.4" + }, + "@zeldafan0225/ai_horde": { + "esbuild": "npm:dry-uninstall" } }, "name": "sillytavern", @@ -55,7 +59,7 @@ "type": "git", "url": "https://github.com/SillyTavern/SillyTavern.git" }, - "version": "1.11.5", + "version": "1.11.6", "scripts": { "start": "node server.js", "start-multi": "node server.js --disableCsrf", diff --git a/public/context/DreamGen Role-Play V1.json b/public/context/DreamGen Role-Play V1.json new file mode 100644 index 000000000..24ed8b574 --- /dev/null +++ b/public/context/DreamGen Role-Play V1.json @@ -0,0 +1,11 @@ +{ + "story_string": "<|im_start|>system\n{{#if system}}{{system}}\n\n\n{{/if}}## Overall plot description:\n\n{{#if scenario}}{{scenario}}{{else}}Conversation between {{char}} and {{user}}.{{/if}}{{#if wiBefore}}\n\n{{wiBefore}}{{/if}}\n\n\n## Characters:\n\n### {{char}}\n\n{{#if description}}{{description}}\n\n{{/if}}{{#if personality}}{{personality}}\n\n{{/if}}### {{user}}\n\n{{#if persona}}{{persona}}{{else}}{{user}} is the protagonist of the role-play.{{/if}}{{#if wiAfter}}\n\n{{wiAfter}}{{/if}}{{#if mesExamples}}\n\n{{mesExamples}}{{/if}}", + "example_separator": "", + "chat_start": "", + "use_stop_strings": false, + "always_force_name2": false, + "trim_sentences": true, + "include_newline": false, + "single_line": false, + "name": "DreamGen Role-Play V1" +} \ No newline at end of file diff --git a/public/css/mobile-styles.css b/public/css/mobile-styles.css index 1e3bae0de..aa5f4bbea 100644 --- a/public/css/mobile-styles.css +++ b/public/css/mobile-styles.css @@ -391,10 +391,6 @@ flex-wrap: wrap; height: unset; } - - #extensionsMenuButton { - order: 1; - } } /*iOS specific*/ diff --git a/public/css/st-tailwind.css b/public/css/st-tailwind.css index 2472b1a8f..911f9d6a4 100644 --- a/public/css/st-tailwind.css +++ b/public/css/st-tailwind.css @@ -271,15 +271,18 @@ flex-wrap: wrap; } -.flexnowrap { +.flexnowrap, +.flexNoWrap { flex-wrap: nowrap; } -.alignitemscenter { +.alignitemscenter, +.alignItemsCenter { align-items: center; } -.alignitemsstart { +.alignitemsstart, +.alignItemsStart { align-items: start; } diff --git a/public/css/tags.css b/public/css/tags.css index 3ad18c468..6484fb8c7 100644 --- a/public/css/tags.css +++ b/public/css/tags.css @@ -89,7 +89,7 @@ #bulkTagsList, #tagList.tags { - margin: 5px 0; + margin: 2px 0; } #bulkTagsList, diff --git a/public/css/toggle-dependent.css b/public/css/toggle-dependent.css index ea440fb9c..e405b0eca 100644 --- a/public/css/toggle-dependent.css +++ b/public/css/toggle-dependent.css @@ -165,7 +165,7 @@ body.big-avatars .avatar-container .ch_description { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; - white-space: normal; + white-space: pre-line; text-overflow: unset; } diff --git a/public/i18n.json b/public/i18n.json deleted file mode 100644 index 16c3fe96b..000000000 --- a/public/i18n.json +++ /dev/null @@ -1,3979 +0,0 @@ -{ - "lang": [ - "zh-cn", - "ja-jp", - "ko-kr", - "ru-ru", - "it-it", - "nl-nl", - "es-spa" - ], - "zh-cn": { - "clickslidertips": "点击滑块右侧数字可手动输入", - "kobldpresets": "Kobold 预设", - "guikoboldaisettings": "KoboldAI GUI 设置", - "novelaipreserts": "NovelAI 预设", - "default": "默认", - "openaipresets": "OpenAI 预设", - "text gen webio(ooba) presets": "Text generation web UI 预设", - "response legth(tokens)": "响应长度(Tokens)", - "select": "选择 ", - "context size(tokens)": "上下文大小(Tokens)", - "unlocked": "解锁", - "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "只有在选定的模型支持大于 4096 个Token时可以选择启用。在启用该选项时,你应该知道自己在做什么。", - "rep.pen": "重复惩罚", - "rep.pen range": "重复惩罚范围", - "temperature": "温度", - "Encoder Rep. Pen.": "编码器重复惩罚", - "No Repeat Ngram Size": "不重复N元语法大小", - "Min Length": "最小长度", - "OpenAI Reverse Proxy": "OpenAI API 反向代理", - "Alternative server URL (leave empty to use the default value).": "自定义 OpenAI API 的反向代理地址 (留空时使用 OpenAI 默认服务器)。", - "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "在输入内容之前,从 API 面板中删除 OpenAI API 密钥", - "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "我们无法为使用自定义 OpenAI API 反向代理时遇到的问题提供支持", - "Legacy Streaming Processing": "传统流式处理", - "Enable this if the streaming doesn't work with your proxy": "如果流式回复与您的代理不兼容,请启用此功能", - "Context Size (tokens)": "上下文大小(Tokens)", - "Max Response Length (tokens)": "最大响应长度(Tokens)", - "Temperature": "温度", - "Frequency Penalty": "频率惩罚", - "Presence Penalty": "存在惩罚", - "Top-p": "Top P", - "Display bot response text chunks as they are generated": "显示机器人生成的响应文本块", - "Top A": "Top A", - "Typical Sampling": "典型采样", - "Tail Free Sampling": "无尾采样", - "Rep. Pen. Slope": "重复惩罚梯度", - "Single-line mode": "单行模式", - "Top K": "Top-K", - "Top P": "Top-P", - "Typical P": "典型 P", - "Do Sample": "样本测试", - "Add BOS Token": "添加 BOS Token", - "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative.": "在提示的开头添加 bos_token,禁用此功能可以让回复更加创造性。", - "Ban EOS Token": "禁止 EOS Token", - "Ban the eos_token. This forces the model to never end the generation prematurely": "禁止 EOS Token,这会迫使模型不会过早结束生成。", - "Skip Special Tokens": "跳过特殊 Tokens", - "Beam search": "Beam 搜索", - "Number of Beams": "Beams 的数量", - "Length Penalty": "长度惩罚", - "Early Stopping": "提前终止", - "Contrastive search": "对比搜索", - "Penalty Alpha": "惩罚系数", - "Seed": "随机种子", - "Inserts jailbreak as a last system message.": "插入越狱作为最后一个系统消息", - "This tells the AI to ignore its usual content restrictions.": "这告诉人工智能忽略其通常的内容限制", - "NSFW Encouraged": "NSFW鼓励", - "Tell the AI that NSFW is allowed.": "告诉人工智能,NSFW 是允许的。", - "NSFW Prioritized": "NSFW 优先", - "NSFW prompt text goes first in the prompt to emphasize its effect.": "NSFW 提示文本排在提示的顶部,以强调其效果", - "Streaming": "流式生成", - "Display the response bit by bit as it is generated.": "在生成响应时逐字显示。", - "When this is off, responses will be displayed all at once when they are complete.": "关闭此选项后,响应将在全部完成后立即显示。", - "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "每个请求仅生成一行(仅限 KoboldAI,被 KoboldCpp 忽略)。", - "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "禁止序列结束 (EOS) token(使用 KoboldCpp,也可能使用 KoboldAI 禁止其他 token)。", - "Good for story writing, but should not be used for chat and instruct mode.": "适合故事写作,但不应用于聊天和指导模式。", - "Enhance Definitions": "增强定义", - "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "使用 OpenAI 知识库增强公众人物和已知虚构人物的定义", - "Wrap in Quotes": "用引号包裹", - "Wrap entire user message in quotes before sending.": "在发送之前将整个用户消息包裹在引号中,", - "Leave off if you use quotes manually for speech.": "如果您手动使用引号表示言论,请省略。", - "Main prompt": "主提示", - "The main prompt used to set the model behavior": "用于设置模型行为的主要提示", - "NSFW prompt": "NSFW 提示", - "Prompt that is used when the NSFW toggle is on": "NSFW 打开时使用的提示", - "Jailbreak prompt": "越狱提示", - "Prompt that is used when the Jailbreak toggle is on": "越狱开关打开时使用的提示", - "Impersonation prompt": "扮演提示", - "Prompt that is used for Impersonation function": "用于扮演功能的提示", - "Logit Bias": "对数偏置", - "Helps to ban or reenforce the usage of certain words": "有助于禁止或加强某些单词的使用", - "View / Edit bias preset": "查看/编辑偏置预设", - "Add bias entry": "添加偏置条目", - "Jailbreak activation message": "越狱激活消息", - "Message to send when auto-jailbreak is on.": "自动越狱开启时要发送的消息。", - "Jailbreak confirmation reply": "越狱确认回复", - "Bot must send this back to confirm jailbreak": "机器人必须将其发回以确认越狱", - "Character Note": "人物注释", - "Influences bot behavior in its responses": "影响机器人响应中的行为", - "API": "API", - "KoboldAI": "KoboldAI", - "Use Horde": "使用 Horde", - "API url": "API 地址", - "Register a Horde account for faster queue times": "注册帐户以加快排队时间", - "Learn how to contribute your idle GPU cycles to the Hord": "学习如何将闲置的显卡计算资源贡献给Hord", - "Adjust context size to worker capabilities": "根据辅助角色功能调整上下文大小", - "Adjust response length to worker capabilities": "根据辅助角色功能调整响应长度", - "API key": "API 密钥", - "Register": "注册", - "For privacy reasons": "出于隐私原因,您的 API 密钥将在您重新加载页面后隐藏", - "Model": "模型", - "Hold Control / Command key to select multiple models.": "按住控制/命令键选择多个模型。", - "Horde models not loaded": "未加载 Horde 模型。", - "Not connected": "未连接", - "Novel API key": "NovelAI API 密钥", - "Follow": "跟随", - "these directions": " 这篇指南 ", - "to get your NovelAI API key.": "以获取您的 NovelAI API 密钥。", - "Enter it in the box below": "将其输入到下面的输入框中", - "Novel AI Model": "NovelAI 模型", - "No connection": "无连接", - "oobabooga/text-generation-webui": "", - "Make sure you run it with": "确保启动时包含 --api 参数", - "Blocking API url": "阻塞式 API 地址", - "Streaming API url": "流式传输 API 地址", - "to get your OpenAI API key.": "获取您的 OpenAI API 密钥。", - "OpenAI Model": "OpenAI模型", - "View API Usage Metrics": "查看 API 使用情况", - "Bot": "Bot", - "Connect to the API": "连接到 API", - "Auto-connect to Last Server": "自动连接到最后设置的 API 服务器", - "View hidden API keys": "查看隐藏的 API 密钥", - "Advanced Formatting": "高级格式化", - "AutoFormat Overrides": "覆盖自动格式化", - "Disable description formatting": "禁用描述格式", - "Disable personality formatting": "禁用人设格式", - "Disable scenario formatting": "禁用场景格式", - "Disable example chats formatting": "禁用聊天示例格式", - "Disable chat start formatting": "禁用聊天开始格式", - "Custom Chat Separator": "自定义聊天分隔符", - "Instruct Mode": "指示模式", - "Enabled": "启用", - "Wrap Sequences with Newline": "用换行符换行序列", - "Include Names": "包括名称", - "System Prompt": "系统提示", - "Instruct Mode Sequences": "指示模式序列", - "Input Sequence": "输入序列", - "Output Sequence": "输出序列", - "First Output Sequence": "第一个输出序列", - "Last Output Sequence": "最后输出序列", - "System Sequence Prefix": "系统序列前缀", - "System Sequence Suffix": "系统序列后缀", - "Stop Sequence": "停止序列", - "Context Formatting": "上下文格式", - "Tokenizer": "Tokenizer", - "None / Estimated": "无/估计", - "Sentencepiece (LLaMA)": "Sentencepiece (LLaMA)", - "Token Padding": "Token 填充", - "Always add character's name to prompt": "始终将角色名称添加到提示中", - "Keep Example Messages in Prompt": "在提示中保留示例消息", - "Remove Empty New Lines from Output": "从输出中删除空的新行", - "Disabled for all models": "对所有模型禁用", - "Automatic (based on model name)": "自动(基于模型名称)", - "Enabled for all models": "对所有模型启用", - "Anchors Order": "锚点顺序", - "Character then Style": "字符然后样式", - "Style then Character": "样式然后字符", - "Character Anchor": "字符锚点", - "Style Anchor": "样式锚点", - "Scan Depth": "扫描深度", - "depth": "深度", - "Token Budget": "Token 预算", - "budget": "预算", - "Recursive scanning": "递归扫描", - "None": "没有", - "User Settings": "聊天窗口设置", - "UI Customization": "聊天窗口自定义", - "Avatar Style": "头像风格", - "Circle": "圆形", - "Rectangle": "长方形", - "Chat Style": "聊天窗口样式:", - "Default": "默认", - "Bubbles": "气泡", - "Chat Width (PC)": "聊天窗口宽度(电脑):", - "No Blur Effect": "关闭模糊效果", - "No Text Shadows": "关闭文字阴影", - "Waifu Mode": "♡ 老 婆 模 式 ♡", - "Message Timer": "消息计时器", - "Characters Hotswap": "角色热插拔", - "Movable UI Panels": "可移动的UI面板", - "Reset Panels": "重置面板", - "UI Colors": "UI颜色", - "Main Text": "正文", - "Italics Text": "斜体文字", - "Quote Text": "引用文字", - "Shadow Color": "阴影颜色", - "FastUI BG": "快速UI背景", - "Blur Tint": "模糊色调", - "Font Scale": "字体缩放", - "Blur Strength": "模糊强度", - "Text Shadow Width": "文字阴影宽度", - "UI Theme Preset": "UI主题预设", - "Power User Options": "高级用户选项", - "Swipes": "滑动", - "Background Sound Only": "仅背景声音", - "Auto-load Last Chat": "自动加载上次聊天", - "Auto-save Message Edits": "自动保存已编辑的消息", - "Auto-fix Markdown": "自动修复 Markdown 格式", - "Allow {{char}}: in bot messages": "允许 {{char}}:在机器人消息中", - "Allow {{user}}: in bot messages": "允许 {{user}}:在机器人消息中", - "Auto-scroll Chat": "自动滚动聊天界面", - "Render Formulas": "渲染公式", - "Send on Enter": "按下回车键发送", - "Always disabled": "始终禁用", - "Automatic (desktop)": "自动(电脑)", - "Always enabled": "始终启用", - "Name": "用户名称", - "Your Avatar": "用户头像", - "Extensions API:": "扩展API:", - "SillyTavern-extras": "SillyTavern 扩展", - "Auto-connect": "自动连接", - "Active extensions": "启用扩展", - "Extension settings": "扩展设置", - "Description": "描述", - "First message": "第一条消息", - "Group Controls": "群组控制", - "Group reply strategy": "群组回复策略", - "Natural order": "自然顺序", - "List order": "列表顺序", - "Allow self responses": "允许自我响应", - "Auto Mode": "自动模式", - "Add Members": "添加成员", - "Current Members": "现有成员", - "text": "文本", - "Delete": "删除", - "Cancel": "取消", - "Advanced Defininitions": "高级定义", - "Personality summary": "人设总结", - "A brief description of the personality": "人设的简要描述", - "Scenario": "场景", - "Circumstances and context of the dialogue": "对话的情况和背景", - "Talkativeness": "回复频率", - "How often the chracter speaks in": "说话频率", - "group chats!": "群聊!", - "Shy": "羞涩 ", - "Normal": "正常", - "Chatty": "健谈", - "Examples of dialogue": "对话示例", - "Forms a personality more clearly": "更清晰地形成人设", - "Save": "保存", - "World Info Editor": "世界背景编辑器", - "New Entry": "新条目", - "Export": "导出", - "Delete World": "删除文本", - "Chat History": "聊天记录", - "Group Chat Scenario Override": "群聊场景覆盖", - "All group members will use the following scenario text instead of what is specified in their character cards.": "所有群组成员都将使用以下场景文本,而不是其角色卡中指定的内容。", - "Keywords": "关键字", - "Separate with commas": "用逗号分隔", - "Secondary Required Keywords": "次要必填关键字", - "Content": "内容", - "What this keyword should mean to the AI": "这个关键词对 AI 意味着什么", - "Memo/Note": "笔记", - "Not sent to AI": "未发送到 AI", - "Constant": "常数 ", - "Selective": "选择", - "Before Char": "在Char之前", - "After Char": "在Char之后", - "Insertion Order": "插入顺序", - "Tokens:": "Tokens", - "Disable": "禁用", - "${characterName}": "${角色名}", - "CHAR": "角色", - "is typing": "正在输入...", - "Back to parent chat": "返回聊天", - "Save bookmark": "保存书签", - "Convert to group": "转换为群组", - "Start new chat": "开始新聊天", - "View past chats": "查看过去的聊天", - "Delete messages": "删除消息", - "Impersonate": "冒充", - "Regenerate": "重新生成", - "PNG": "PNG", - "JSON": "JSON", - "presets": "预设", - "Message Sound": "AI 消息提示音", - "Author's Note": "作者注释", - "Send Jailbreak": "发送越狱", - "Replace empty message": "替换空消息", - "Send this text instead of nothing when the text box is empty.": "当文本框中为空时将会发送此文本,而不是空白消息", - "NSFW avoidance prompt": "NSFW 避免提示", - "Prompt that is used when the NSFW toggle is off": "当 NSFW 切换关闭时使用的提示", - "Advanced prompt bits": "高级提示", - "World Info format template": "世界背景格式模板", - "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "在插入提示之前,包装已激活的世界背景条目。使用 {0} 来标记内容插入的位置。", - "Unrestricted maximum value for the context slider": "上下文滑块的无限制最大值", - "Chat Completion Source": "聊天补全源", - "Avoid sending sensitive information to the Horde.": "避免向 Horde 发送敏感信息", - "Review the Privacy statement": "查看隐私声明", - "Learn how to contribute your idel GPU cycles to the Horde": "学习如何将闲置的显卡计算资源贡献给Horde", - "Trusted workers only": "仅限可信赖的 Workers", - "For privacy reasons, your API key will be hidden after you reload the page.": "出于隐私原因,重新加载页面后,您的 API 密钥将被隐藏。", - "-- Horde models not loaded --": "Horde 模型未加载", - "Example: http://127.0.0.1:5000/api ": "示例: http://127.0.0.1:5000/api", - "No connection...": "没有连接", - "Get your NovelAI API Key": "获取您的 NovelAI API 密钥", - "KoboldAI Horde": "KoboldAI Horde", - "Text Gen WebUI (ooba)": "Text Gen WebUI (ooba)", - "NovelAI": "NovelAI", - "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)", - "OpenAI API key": "OpenAI API 密钥", - "Trim spaces": "修剪空格", - "Trim Incomplete Sentences": "修剪不完整的句子", - "Include Newline": "包括换行", - "Non-markdown strings": "非markdown字符串", - "Replace Macro in Sequences": "替换序列中的宏", - "Presets": "预设", - "Separator": "分隔符", - "Start Reply With": "回复前缀", - "Show reply prefix in chat": "在聊天中显示回复前缀", - "Worlds/Lorebooks": "世界/Lorebooks", - "Active World(s)": "激活的世界", - "Character Lore Insertion Strategy": "角色背景插入策略", - "Sorted Evenly": "均匀排序", - "Character Lore First": "角色背景优先", - "Global Lore First": "全局背景优先", - "-- World Info not found --": "-- 世界背景未找到 --", - "Recursive Scan": "归递扫描", - "Case Sensitive": "区分大小写", - "Match whole words": "匹配整个单词", - "World/Lore Editor": "世界/Lore 编辑", - "--- None ---": "--- 全无 ---", - "Comma seperated (ignored if empty)": "逗号分隔 (如果为空则忽略)", - "Use Probability": "使用概率", - "Exclude from recursion": "从递归中排除", - "Position:": "插入位置:", - "Before Char Defs": "角色定义之前", - "After Char Defs": "角色定义之后", - "Before AN": "作者注释之前", - "After AN": "作者注释之后", - "Order:": "排序", - "Probability:": "概率", - "Delete Entry": "删除条目", - "User Message Blur Tint": "用户消息模糊颜色", - "AI Message Blur Tint": "AI 消息模糊颜色", - "Chat Style:": "聊天窗口样式:", - "Chat Width (PC):": "聊天窗口宽度 (电脑):", - "Chat Timestamps": "聊天时间戳", - "Message IDs": "消息 ID", - "Prefer Character Card Prompt": "首选角色卡提示", - "Prefer Character Card Jailbreak": "首选角色卡越狱", - "Press Send to continue": "按下发送按钮继续", - "Log prompts to console": "将提示记录到控制台", - "Never resize avatars": "不要调整头像大小", - "Show avatar filenames": "显示头像文件名", - "Import Card Tags": "导入卡片标签", - "Confirm message deletion": "确认删除消息", - "Spoiler Free Mode": "无剧透模式", - "Auto-swipe": "自动右滑生成", - "Minimum generated message length": "消息生成的最小长度", - "Blacklisted words": "黑名单词汇", - "Blacklisted word count to swipe": "自动滑动触发的累计黑名单词汇数", - "Reload Chat": "重新加载聊天窗口", - "Not Connected": "未连接", - "Persona Management": "用户角色设置", - "Persona Description": "用户角色描述", - "In Story String / Chat Completion: Before Character Card": "在故事字符串 / 聊天补全中: 角色卡之前", - "In Story String / Chat Completion: After Character Card": "在故事字符串 / 聊天补全中: 角色卡之后", - "Top of Author's Note": "作者注释之前", - "Bottom of Author's Note": "作者注释之后", - "How do I use this?": "用户角色设置说明", - "More...": "更多...", - "Link to World Info": "链接到世界背景", - "Import Card Lore": "导入卡片背景", - "Scenario Override": "场景覆盖", - "Rename": "重命名", - "Character Description": "角色描述", - "Creator's Notes": "创建者的注释", - "A-Z": "A-Z", - "Z-A": "Z-A", - "Newest": "最新", - "Oldest": "最旧", - "Favorites": "收藏", - "Recent": "最近", - "Most chats": "聊天次数最多", - "Least chats": "聊天次数最少", - "Back": "返回", - "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "提示覆盖(适用于OpenAI/Claude/Scale APIs、Window/OpenRouter和Instruct模式)", - "Insert {{original}} into either box to include the respective default prompt from system settings.": "将{{original}}插入任意一个框中,即可包含来自系统设置的默认提示。", - "Main Prompt": "主要提示", - "Jailbreak": "越狱", - "Creator's Metadata (Not sent with the AI prompt)": "创建者的元数据(不会与 AI 提示一起发送)", - "Everything here is optional": "这里的一切都是可选的", - "Created by": "创建者", - "Character Version": "角色版本", - "Tags to Embed": "要嵌入的标签", - "How often the character speaks in group chats!": "角色在群聊中说话的频率!", - "Important to set the character's writing style.": "要设置角色的写作风格,它很重要。", - "ATTENTION!": "注意!", - "Samplers Order": "采样器顺序", - "Samplers will be applied in a top-down order. Use with caution.": "采样器将按从上到下的顺序应用。谨慎使用。", - "Repetition Penalty": "重复惩罚", - "Epsilon Cutoff": "Epsilon 切断", - "Eta Cutoff": "Eta 切断", - "Rep. Pen. Range.": "重复惩罚范围", - "Rep. Pen. Freq.": "重复频率惩罚", - "Rep. Pen. Presence": "重复存在惩罚", - "Enter it in the box below:": "在下面的框中输入:", - "separate with commas w/o space between": "用逗号分隔,不要空格", - "Document": "文档", - "Continue": "继续", - "Editing:": "正在编辑:", - "AI reply prefix": "AI回复前缀", - "Custom Stopping Strings": "自定义停止字符串", - "JSON serialized array of strings": "字符串的JSON序列化数组", - "words you dont want generated separated by comma ','": "你不想生成的词汇,用逗号 ',' 分隔", - "Extensions URL": "扩展URL", - "API Key": "API密钥", - "Enter your name": "输入你的名字", - "Name this character": "给这个角色起个名字", - "Search / Create Tags": "搜索 / 创建标签", - "Describe your character's physical and mental traits here.": "在这里描述你的角色的身体和精神特点。", - "This will be the first message from the character that starts every chat.": "这将是角色开始每个聊天的第一条消息。", - "Chat Name (Optional)": "聊天名称(可选)", - "Filter...": "筛选...", - "Search...": "搜索...", - "Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "这里的任何内容都将替换用于此角色的默认主要提示。(v2规范:system_prompt)", - "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "这里的任何内容都将替换用于此角色的默认越狱提示。 (v2规范:post_history_instructions)", - "(Botmaker's name / Contact Info)": "(Bot制作者的名字/联系信息)", - "(If you want to track character versions)": "(如果你想跟踪角色版本)", - "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "(描述机器人,给出使用提示,或列出用它测试过的聊天模型。这将显示在角色列表中)", - "(Write a comma-separated list of tags)": "(编写逗号分隔的标签列表)", - "(A brief description of the personality)": "(人设的简要描述)", - "(Circumstances and context of the interaction)": "(互动的情况和上下文)", - "(Examples of chat dialog. Begin each example with START on a new line.)": "(聊天对话的示例。每个示例都以新行的START开始)", - "Injection text (supports parameters)": "注入文本(支持参数)", - "Injection depth": "注入深度", - "Type here...": "在此处输入...", - "Comma separated (required)": "逗号分隔(必需)", - "Comma separated (ignored if empty)": "逗号分隔(如果为空则被忽略)", - "What this keyword should mean to the AI, sent verbatim": "这个关键词对AI来说应该是什么意思,逐字递送", - "Not sent to the AI": "不发送给AI", - "(This will be the first message from the character that starts every chat)": "(这将是角色开始每个聊天的第一条消息)", - "Not connected to API!": "未连接到API!", - "AI Response Configuration": "AI响应配置", - "AI Configuration panel will stay open": "AI配置面板将保持打开状态", - "Update current preset": "更新当前预设", - "Create new preset": "创建新预设", - "Import preset": "导入预设", - "Export preset": "导出预设", - "Delete the preset": "删除该预设", - "Inserts jailbreak as a last system message": "将越狱插入为最后一个系统消息", - "NSFW block goes first in the resulting prompt": "在生成的提示中,NSFW部分排在首位", - "Enables OpenAI completion streaming": "启用OpenAI补全流", - "Wrap user messages in quotes before sending": "发送前用引号括起用户消息", - "Restore default prompt": "恢复默认提示", - "New preset": "新预设", - "Delete preset": "删除预设", - "Restore default jailbreak": "恢复默认越狱", - "Restore default reply": "恢复默认回复", - "Restore defaul note": "恢复默认注释", - "API Connections": "API连接", - "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "通过只排队已批准的worker来帮助处理不良响应。可能会减慢响应时间。", - "Clear your API key": "清除你的API密钥", - "Refresh models": "刷新模型", - "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "使用OAuth流程获取您的OpenRouter API令牌。您将被重定向到openrouter.ai", - "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "通过发送一个短测试消息验证您的API连接。请注意,这将会计入你的使用额度!", - "Create New": "创建新的", - "Edit": "编辑", - "World Info": "世界背景", - "Locked = World Editor will stay open": "锁定=世界编辑器将保持打开状态", - "Entries can activate other entries by mentioning their keywords": "条目可以通过提及其关键字来激活其他条目", - "Lookup for the entry keys in the context will respect the case": "在上下文中查找条目关键词将遵守大小写", - "If the entry key consists of only one word, it would not be matched as part of other words": "如果条目键仅包含一个词,它将不会被匹配为其他词汇的一部分", - "Open all Entries": "打开所有条目", - "Close all Entries": "关闭所有条目", - "Create": "创建", - "Import World Info": "导入世界背景", - "Export World Info": "导出世界背景", - "Delete World Info": "删除世界背景", - "Rename World Info": "重命名世界背景", - "Save changes to a new theme file": "将更改保存到新主题文件中", - "removes blur and uses alternative background color for divs": "去除模糊并为div使用替代的背景颜色", - "If checked and the character card contains a prompt override (System Prompt), use that instead.": "如果选中并且角色卡包含提示覆盖(系统提示),请改用该选项。", - "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead.": "如果选中并且角色卡包含越狱覆盖(发布历史指令),请改用该选项。", - "AI Response Formatting": "AI 回复格式", - "Change Background Image": "更改背景图片", - "Extensions": "扩展", - "Click to set a new User Name": "点击设置新用户名", - "Click to lock your selected persona to the current chat. Click again to remove the lock.": "点击将选择的角色锁定到当前聊天。再次单击以解除锁定。", - "Click to set user name for all messages": "点击为所有消息设置用户名称", - "Create a dummy persona": "创建一个虚拟个人角色", - "Character Management": "角色管理", - "Locked = Character Management panel will stay open": "锁定=角色管理面板将保持打开状态", - "Select/Create Characters": "选择/创建角色", - "Token counts may be inaccurate and provided just for reference.": "Token 计数可能不准确,仅供参考。", - "Click to select a new avatar for this character": "点击选择此角色的新头像", - "Add to Favorites": "添加到收藏夹", - "Advanced Definition": "高级定义", - "Character Lore": "角色背景", - "Export and Download": "导出并下载", - "Duplicate Character": "复制角色", - "Create Character": "创建角色", - "Delete Character": "删除角色", - "View all tags": "查看所有标签", - "Click to set additional greeting messages": "单击设置其他的问候消息", - "Show / Hide Description and First Message": "显示/隐藏描述和第一条消息", - "Click to select a new avatar for this group": "单击选择此群组的新头像", - "Set a group chat scenario": "设置群聊场景", - "Restore collage avatar": "恢复拼贴头像", - "Create New Character": "创建新角色", - "Import Character from File": "从文件中导入角色", - "Import content from external URL": "从外部URL导入内容", - "Create New Chat Group": "创建新的聊天群组", - "Characters sorting order": "角色排序顺序", - "Add chat injection": "添加聊天中断", - "Remove injection": "移除中断", - "Remove": "移除", - "Select a World Info file for": "为角色选择一个世界背景", - "Primary Lorebook": "主要的 Lorebook", - "A selected World Info will be bound to this character as its own Lorebook.": "所选择的世界背景将作为其自己的 Lorebook 绑定到此角色。", - "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "在生成AI回复时,它将与全局世界背景选择器中的条目结合。", - "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "导出角色也会导出嵌入在JSON数据中的 Lorebook 文件。", - "Additional Lorebooks": "其他 Lorebook", - "Associate one or more auxillary Lorebooks with this character.": "将一个或多个辅助的 Lorebook 与这个角色关联。", - "NOTE: These choices are optional and won't be preserved on character export!": "注意:这些选择是可选的,不会在导出角色时保留!", - "Rename chat file": "重命名聊天文件", - "Export JSONL chat file": "导出 JSONL 聊天文件", - "Download chat as plain text document": "将聊天内容下载为纯文本文档", - "Delete chat file": "删除聊天文件", - "Delete tag": "删除标签", - "Translate message": "翻译消息", - "Generate Image": "生成图片", - "Narrate": "讲述", - "Prompt": "提示", - "Create Bookmark": "创建书签", - "Copy": "复制", - "Open bookmark chat": "打开书签聊天", - "Confirm": "确认", - "Copy this message": "复制此消息", - "Delete this message": "删除此消息", - "Move message up": "将消息上移", - "Move message down": "将消息下移", - "Enlarge": "放大", - "Temporarily disable automatic replies from this character": "暂时禁用此角色的自动回复", - "Enable automatic replies from this character": "启用此角色的自动回复", - "Trigger a message from this character": "触发这个角色的一条消息", - "Move up": "上移", - "Move down": "下移", - "View character card": "查看角色卡", - "Remove from group": "从群组中移除", - "Add to group": "添加到群组", - "Add": "添加", - "Abort request": "取消请求", - "Send a message": "发送消息", - "Ask AI to write your message for you": "让 AI 代替你写消息", - "Continue the last message": "继续上一条消息", - "Bind user name to that avatar": "将用户名绑定到该头像", - "Select this as default persona for the new chats.": "将此选择为新聊天的默认角色。", - "Change persona image": "更改角色形象", - "Delete persona": "删除角色" - }, - "ja-jp": { - "clickslidertips": "スライダーの右側の数字をクリックすると手動で入力できます。", - "kobldpresets": "Kobold 設定", - "guikoboldaisettings": "GUI KoboldAI 設定", - "novelaipreserts": "NovelAI 設定", - "default": "デフォルト", - "openaipresets": "OpenAI 設定", - "text gen webio(ooba) presets": "テキスト生成WebUI(ooba) 設定", - "response legth(tokens)": "応答長(トークン数)", - "select": "選択 ", - "context size(tokens)": "コンテキストサイズ(トークン数)", - "unlocked": "解除", - "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "4096トークンより大きいコンテキストサイズをサポートするのは、一部のモデルのみです。このオプションを変更する前に、自分が何をしているかを理解してください。", - "rep.pen": "Rep. Pen.", - "rep.pen range": "Rep. Pen. 範囲", - "temperature": "温度", - "Encoder Rep. Pen.": "エンコーダー Rep. Pen.", - "No Repeat Ngram Size": "Ngram の非重複サイズ", - "Min Length": "最小長", - "OpenAI Reverse Proxy": "OpenAI 逆プロキシ", - "Alternative server URL (leave empty to use the default value).": "代替サーバーの URL (空白のままでデフォルト値を使用)。", - "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "このボックスに何かを入力する前に、APIパネルから本物のOAI APIキーを削除してください", - "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "非公式のOpenAIプロキシを使用して問題が発生した場合にはサポートを提供できません", - "Legacy Streaming Processing": "旧式のストリーミング処理", - "Enable this if the streaming doesn't work with your proxy": "ストリーミングがプロキシと互換性がない場合には、これを有効にしてください", - "Context Size (tokens)": "コンテキストサイズ(トークン数)", - "Max Response Length (tokens)": "最大応答長(トークン数)", - "Temperature": "温度", - "Frequency Penalty": "頻度ペナルティ", - "Presence Penalty": "存在ペナルティ", - "Top-p": "Top-p", - "Display bot response text chunks as they are generated": "生成されたボットの応答テキストチャンクを表示します", - "Top A": "Top-a", - "Typical Sampling": "典型的なサンプリング", - "Tail Free Sampling": "テイルフリーサンプリング", - "Rep. Pen. Slope": "Rep. Pen. スロープ", - "Single-line mode": "シングルラインモード", - "Top K": "Top-k", - "Top P": "Top-p", - "Do Sample": "サンプリングする", - "Add BOS Token": "BOSトークンを追加", - "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative.": "プロンプトの先頭にbos_tokenを追加します。これを無効にすると、回答がよりクリエイティブになることがあります。", - "Ban EOS Token": "EOSトークンを禁止", - "Ban the eos_token. This forces the model to never end the generation prematurely": "eos_tokenを禁止します。これにより、モデルは生成を早期に終了することはなくなります。", - "Skip Special Tokens": "特殊トークンをスキップ", - "Beam search": "ビームサーチ", - "Number of Beams": "ビーム数", - "Length Penalty": "長さペナルティ", - "Early Stopping": "早期停止", - "Contrastive search": "対照的探索", - "Penalty Alpha": "ペナルティアルファ", - "Seed": "シード", - "Inserts jailbreak as a last system message.": "最後のシステムメッセージに越狱を挿入します。", - "This tells the AI to ignore its usual content restrictions.": "これにより、AIは通常のコンテンツ制限を無視するように指示されます。", - "NSFW Encouraged": "NSFW推奨", - "Tell the AI that NSFW is allowed.": "AIにNSFWが許可されていることを伝えます。", - "NSFW Prioritized": "NSFW優先", - "NSFW prompt text goes first in the prompt to emphasize its effect.": "NSFWプロンプトテキストは、効果を強調するために最初に表示されます。", - "Streaming": "ストリーミング", - "Display the response bit by bit as it is generated.": "生成されると、レスポンスをビットごとに表示します。", - "When this is off, responses will be displayed all at once when they are complete.": "これをオフにすると、レスポンスは完了時に一度にすべて表示されます。", - "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "リクエストごとに 1 行のみ生成します (KoboldAI のみ、KoboldCpp では無視されます)。", - "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "End-of-Sequence (EOS) トークンを禁止します (KoboldCpp を使用し、場合によっては KoboldAI を使用する他のトークンも禁止します)。", - "Good for story writing, but should not be used for chat and instruct mode.": "ストーリーを書くのには適していますが、チャットや指示モードには使用しないでください。", - "Enhance Definitions": "定義を強化", - "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "公共人物および既知の架空のキャラクターの定義を強化するためにOAIの知識ベースを使用する", - "Wrap in Quotes": "引用符で囲む", - "Wrap entire user message in quotes before sending.": "送信前にユーザーメッセージ全体を引用符で囲みます。", - "Leave off if you use quotes manually for speech.": "手動で引用符を使用する場合は省略してください。", - "Main prompt": "メインプロンプト", - "The main prompt used to set the model behavior": "モデルの振る舞いを設定するために使用されるメインプロンプト", - "NSFW prompt": "NSFWプロンプト", - "Prompt that is used when the NSFW toggle is on": "NSFWトグルがオンの場合に使用されるプロンプト", - "Jailbreak prompt": "越狱プロンプト", - "Prompt that is used when the Jailbreak toggle is on": "越狱トグルがオンの場合に使用されるプロンプト", - "Impersonation prompt": "なりすましプロンプト", - "Prompt that is used for Impersonation function": "なりすまし機能に使用されるプロンプト", - "Logit Bias": "Logitバイアス", - "Helps to ban or reenforce the usage of certain words": "特定の単語の使用を禁止または強化するのに役立ちます", - "View / Edit bias preset": "バイアスプリセットの表示/編集", - "Add bias entry": "バイアスエントリを追加", - "Jailbreak activation message": "越狱アクティベーションメッセージ", - "Message to send when auto-jailbreak is on.": "自動越狱がオンの場合に送信するメッセージ。", - "Jailbreak confirmation reply": "越狱確認返信", - "Bot must send this back to confirm jailbreak": "ボットは越狱を確認するためにこれを送信する必要があります。", - "Character Note": "キャラクターノート", - "Influences bot behavior in its responses": "返信中のボットの振る舞いに影響を与えます", - "API": "API", - "KoboldAI": "KoboldAI", - "Use Horde": "ホルドを使用", - "API url": "API URL", - "Register a Horde account for faster queue times": "より高速なキュータイムのために Horde アカウントを登録する", - "Learn how to contribute your idle GPU cycles to the Hord": "空いている GPU サイクルを Hord に貢献する方法を学ぶ", - "Adjust context size to worker capabilities": "ワーカー機能に合わせてコンテキストサイズを調整する", - "Adjust response length to worker capabilities": "ワーカー機能に合わせて応答長を調整する", - "API key": "API キー", - "Register": "登録する", - "For privacy reasons": "プライバシーのため、API キーはページをリロードするまで非表示になります", - "Model": "モデル", - "Hold Control / Command key to select multiple models.": "複数のモデルを選択するには、Control / Command キーを押してください。", - "Horde models not loaded": "Horde モデルがロードされていない", - "Not connected": "接続されていません", - "Novel API key": "NovelAI API キー", - "Follow": "以下の", - "these directions": "指示", - "to get your NovelAI API key.": "あなたの NovelAI API キーを取得するために。", - "Enter it in the box below": "以下のボックスに入力してください", - "Novel AI Model": "NovelAI モデル", - "No connection": "接続なし", - "oobabooga/text-generation-webui": "", - "Make sure you run it with": "必ず --extensions openai の引数を含めて起動してください", - "Blocking API url": "ブロッキング API URL", - "Streaming API url": "ストリーミング API URL", - "to get your OpenAI API key.": "あなたの OpenAI API キーを取得するために。", - "OpenAI Model": "OpenAI モデル", - "View API Usage Metrics": "API 使用メトリックスの表示", - "Bot": "ボット", - "Connect to the API": "API に接続", - "Auto-connect to Last Server": "前回のサーバーに自動接続", - "View hidden API keys": "非表示 API キーを表示", - "Advanced Formatting": "高度なフォーマット", - "AutoFormat Overrides": "自動フォーマットのオーバーライド", - "Disable description formatting": "説明フォーマットを無効にする", - "Disable personality formatting": "パーソナリティフォーマットを無効にする", - "Disable scenario formatting": "シナリオフォーマットを無効にする", - "Disable example chats formatting": "チャットの例のフォーマットを無効にする", - "Disable chat start formatting": "チャット開始フォーマットを無効にする", - "Custom Chat Separator": "カスタムチャットセパレーター", - "Instruct Mode": "インストラクトモード", - "Enabled": "有効", - "Wrap Sequences with Newline": "シーケンスを改行でラップする", - "Include Names": "名前を含める", - "System Prompt": "システムプロンプト", - "Instruct Mode Sequences": "命令モードシーケンス", - "Input Sequence": "入力シーケンス", - "First Output Sequence": "最初の出力シーケンス", - "Last Output Sequence": "最後の出力シーケンス", - "System Sequence Prefix": "システムシーケンスプレフィックス", - "System Sequence Suffix": "システムシーケンスサフィックス", - "Stop Sequence": "停止シーケンス", - "Context Formatting": "コンテキストフォーマッティング", - "Tokenizer": "トークナイザー", - "None / Estimated": "なし/推定", - "Sentencepiece (LLaMA)": "Sentencepiece(LLaMA)", - "Token Padding": "トークンパディング", - "Always add character's name to prompt": "常にキャラクター名をプロンプトに追加", - "Keep Example Messages in Prompt": "プロンプトに例示メッセージを保持", - "Remove Empty New Lines from Output": "出力から空の改行を削除", - "Disabled for all models": "すべてのモデルで無効", - "Automatic (based on model name)": "自動(モデル名に基づく)", - "Enabled for all models": "すべてのモデルで有効", - "Anchors Order": "アンカーオーダー", - "Character then Style": "キャラクター、次にスタイル", - "Style then Character": "スタイル、次にキャラクター", - "Character Anchor": "キャラクターアンカー", - "Style Anchor": "スタイルアンカー", - "World Info": "", - "Scan Depth": "スキャン深度", - "depth": "深さ", - "Token Budget": "トークン予算", - "budget": "予算", - "Recursive scanning": "再帰的スキャン", - "None": "なし", - "User Settings": "ユーザー設定", - "UI Customization": "UIカスタマイズ", - "Avatar Style": "アバタースタイル", - "Circle": "丸", - "Rectangle": "四角形", - "Chat Style": "チャットスタイル:", - "Default": "デフォルト", - "Bubbles": "吹き出し", - "Chat Width (PC)": "チャット幅(PC):", - "No Blur Effect": "ボケ効果なし", - "No Text Shadows": "テキストシャドウなし", - "Waifu Mode": "♡ Waifuモード♡", - "Message Timer": "メッセージタイマー", - "Characters Hotswap": "キャラクターのホットスワップ", - "Movable UI Panels": "移動可能なUIパネル", - "Reset Panels": "パネルをリセットする", - "UI Colors": "UIの色", - "Main Text": "本文", - "Italics Text": "斜体テキスト", - "Quote Text": "引用テキスト", - "Shadow Color": "シャドウカラー", - "FastUI BG": "FastUI BG", - "Blur Tint": "ぼかし色合い", - "Font Scale": "フォントスケール", - "Blur Strength": "ぼかしの強度", - "Text Shadow Width": "テキストシャドウの幅", - "UI Theme Preset": "UIテーマプリセット", - "Power User Options": "パワーユーザーオプション", - "Swipes": "スワイプ", - "Background Sound Only": "背景音のみ", - "Auto-load Last Chat": "最後のチャットを自動読み込み", - "Auto-save Message Edits": "メッセージの編集を自動保存", - "Auto-fix Markdown": "Markdownを自動修正", - "Allow : in bot messages": "ボットメッセージで「:」を許可する", - "Auto-scroll Chat": "チャット自動スクロール", - "Render Formulas": "数式のレンダリング", - "Send on Enter": "エンター入力で送信", - "Always disabled": "常に無効", - "Automatic (desktop)": "自動(デスクトップ)", - "Always enabled": "常に有効", - "Name": "名前", - "Your Avatar": "あなたのアバター", - "Extensions API:": "拡張機能API:", - "SillyTavern-extras": "SillyTavern-extras", - "Auto-connect": "自動接続", - "Active extensions": "アクティブな拡張機能", - "Extension settings": "拡張機能の設定", - "Description": "説明", - "First message": "最初のメッセージ", - "Group Controls": "グループのコントロール", - "Group reply strategy": "グループの返信戦略", - "Natural order": "自然な順序", - "List order": "リストの順序", - "Allow self responses": "自己応答を許可する", - "Auto Mode": "自動モード", - "Add Members": "メンバーを追加", - "Current Members": "現在のメンバー", - "text": "テキスト", - "Delete": "削除", - "Cancel": "キャンセル", - "Advanced Defininitions": "高度な定義", - "Personality summary": "性格の概要", - "A brief description of the personality": "性格の簡単な説明", - "Scenario": "シナリオ", - "Circumstances and context of the dialogue": "対話の状況と文脈", - "Talkativeness": "おしゃべり度", - "How often the chracter speaks in": "グループチャットでの話し方", - "group chats!": "", - "Shy": "内気", - "Normal": "普通", - "Chatty": "おしゃべりさん", - "Examples of dialogue": "対話の例", - "Forms a personality more clearly": "個性をより明確に形成する", - "Save": "保存", - "World Info Editor": "情報エディタ", - "New Entry": "新規エントリ", - "Export": "エクスポート", - "Delete World": "ワールドの削除", - "Chat History": "チャット履歴", - "Group Chat Scenario Override": "グループチャットシナリオのオーバーライド", - "All group members will use the following scenario text instead of what is specified in their character cards.": "すべてのグループメンバーは、キャラクターカードで指定されたものではなく、以下のシナリオテキストを使用します。", - "Keywords": "キーワード", - "Separate with commas": "コンマで区切る", - "Secondary Required Keywords": "必須の秒要キーワード", - "Content": "内容", - "What this keyword should mean to the AI": "このキーワードがAIにとってどういう意味を持つべきか", - "Memo/Note": "メモ/ノート", - "Not sent to AI": "AIに送信されない", - "Constant": "定数", - "Selective": "選択", - "Before Char": "文字の前に", - "After Char": "文字の後に", - "Insertion Order": "挿入順", - "Tokens:": "トークン", - "Disable": "無効にする", - "${characterName}": "${キャラクター名}", - "CHAR": "文字", - "is typing": "入力中...", - "Back to parent chat": "親チャットに戻る", - "Save bookmark": "ブックマークに保存", - "Convert to group": "グループに変換", - "Start new chat": "新しいチャットを開始", - "View past chats": "過去のチャットを表示", - "Delete messages": "メッセージを削除", - "Impersonate": "なりすます", - "Regenerate": "再生成", - "PNG": "PNG", - "JSON": "JSON", - "presets": "プリセット", - "Message Sound": "メッセージ音", - "Author's Note": "作者の注記", - "Send Jailbreak": "NEEDS TRANSLATION", - "Replace empty message": "NEEDS TRANSLATION", - "Send this text instead of nothing when the text box is empty.": "NEEDS TRANSLATION", - "NSFW avoidance prompt": "NEEDS TRANSLATION", - "Prompt that is used when the NSFW toggle is off": "NEEDS TRANSLATION", - "Advanced prompt bits": "NEEDS TRANSLATION", - "World Info format template": "NEEDS TRANSLATION", - "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "NEEDS TRANSLATION", - "Unrestricted maximum value for the context slider": "NEEDS TRANSLATION", - "Chat Completion Source": "NEEDS TRANSLATION", - "Avoid sending sensitive information to the Horde.": "NEEDS TRANSLATION", - "Review the Privacy statement": "NEEDS TRANSLATION", - "Learn how to contribute your idel GPU cycles to the Horde": "NEEDS TRANSLATION", - "Trusted workers only": "NEEDS TRANSLATION", - "For privacy reasons, your API key will be hidden after you reload the page.": "NEEDS TRANSLATION", - "-- Horde models not loaded --": "NEEDS TRANSLATION", - "Example: http://127.0.0.1:5000/api ": "NEEDS TRANSLATION", - "No connection...": "NEEDS TRANSLATION", - "Get your NovelAI API Key": "NEEDS TRANSLATION", - "KoboldAI Horde": "NEEDS TRANSLATION", - "Text Gen WebUI (ooba)": "NEEDS TRANSLATION", - "NovelAI": "NEEDS TRANSLATION", - "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "NEEDS TRANSLATION", - "OpenAI API key": "NEEDS TRANSLATION", - "Trim spaces": "NEEDS TRANSLATION", - "Trim Incomplete Sentences": "NEEDS TRANSLATION", - "Include Newline": "NEEDS TRANSLATION", - "Non-markdown strings": "NEEDS TRANSLATION", - "Replace Macro in Sequences": "NEEDS TRANSLATION", - "Presets": "NEEDS TRANSLATION", - "Separator": "NEEDS TRANSLATION", - "Start Reply With": "NEEDS TRANSLATION", - "Show reply prefix in chat": "NEEDS TRANSLATION", - "Worlds/Lorebooks": "NEEDS TRANSLATION", - "Active World(s)": "NEEDS TRANSLATION", - "Character Lore Insertion Strategy": "NEEDS TRANSLATION", - "Sorted Evenly": "NEEDS TRANSLATION", - "Character Lore First": "NEEDS TRANSLATION", - "Global Lore First": "NEEDS TRANSLATION", - "-- World Info not found --": "NEEDS TRANSLATION", - "Recursive Scan": "NEEDS TRANSLATION", - "Case Sensitive": "NEEDS TRANSLATION", - "Match whole words": "NEEDS TRANSLATION", - "World/Lore Editor": "NEEDS TRANSLATION", - "--- None ---": "NEEDS TRANSLATION", - "Comma seperated (ignored if empty)": "NEEDS TRANSLATION", - "Use Probability": "NEEDS TRANSLATION", - "Exclude from recursion": "NEEDS TRANSLATION", - "Position:": "NEEDS TRANSLATION", - "Before Char Defs": "NEEDS TRANSLATION", - "After Char Defs": "NEEDS TRANSLATION", - "Before AN": "NEEDS TRANSLATION", - "After AN": "NEEDS TRANSLATION", - "Order:": "NEEDS TRANSLATION", - "Probability:": "NEEDS TRANSLATION", - "Delete Entry": "NEEDS TRANSLATION", - "User Message Blur Tint": "NEEDS TRANSLATION", - "AI Message Blur Tint": "NEEDS TRANSLATION", - "Chat Style:": "NEEDS TRANSLATION", - "Chat Width (PC):": "NEEDS TRANSLATION", - "Chat Timestamps": "NEEDS TRANSLATION", - "Message IDs": "NEEDS TRANSLATION", - "Prefer Character Card Prompt": "NEEDS TRANSLATION", - "Prefer Character Card Jailbreak": "NEEDS TRANSLATION", - "Press Send to continue": "NEEDS TRANSLATION", - "Log prompts to console": "NEEDS TRANSLATION", - "Never resize avatars": "NEEDS TRANSLATION", - "Show avatar filenames": "NEEDS TRANSLATION", - "Import Card Tags": "NEEDS TRANSLATION", - "Confirm message deletion": "NEEDS TRANSLATION", - "Spoiler Free Mode": "NEEDS TRANSLATION", - "Auto-swipe": "NEEDS TRANSLATION", - "Minimum generated message length": "NEEDS TRANSLATION", - "Blacklisted words": "NEEDS TRANSLATION", - "Blacklisted word count to swipe": "NEEDS TRANSLATION", - "Reload Chat": "NEEDS TRANSLATION", - "Not Connected": "NEEDS TRANSLATION", - "Persona Management": "NEEDS TRANSLATION", - "Persona Description": "NEEDS TRANSLATION", - "In Story String / Chat Completion: Before Character Card": "NEEDS TRANSLATION", - "In Story String / Chat Completion: After Character Card": "NEEDS TRANSLATION", - "Top of Author's Note": "NEEDS TRANSLATION", - "Bottom of Author's Note": "NEEDS TRANSLATION", - "How do I use this?": "NEEDS TRANSLATION", - "More...": "NEEDS TRANSLATION", - "Link to World Info": "NEEDS TRANSLATION", - "Import Card Lore": "NEEDS TRANSLATION", - "Scenario Override": "NEEDS TRANSLATION", - "Rename": "NEEDS TRANSLATION", - "Character Description": "NEEDS TRANSLATION", - "Creator's Notes": "NEEDS TRANSLATION", - "A-Z": "NEEDS TRANSLATION", - "Z-A": "NEEDS TRANSLATION", - "Newest": "NEEDS TRANSLATION", - "Oldest": "NEEDS TRANSLATION", - "Favorites": "NEEDS TRANSLATION", - "Recent": "NEEDS TRANSLATION", - "Most chats": "NEEDS TRANSLATION", - "Least chats": "NEEDS TRANSLATION", - "Back": "NEEDS TRANSLATION", - "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "NEEDS TRANSLATION", - "Insert {{original}} into either box to include the respective default prompt from system settings.": "NEEDS TRANSLATION", - "Main Prompt": "NEEDS TRANSLATION", - "Jailbreak": "NEEDS TRANSLATION", - "Creator's Metadata (Not sent with the AI prompt)": "NEEDS TRANSLATION", - "Everything here is optional": "NEEDS TRANSLATION", - "Created by": "NEEDS TRANSLATION", - "Character Version": "NEEDS TRANSLATION", - "Tags to Embed": "NEEDS TRANSLATION", - "How often the character speaks in group chats!": "NEEDS TRANSLATION", - "Important to set the character's writing style.": "NEEDS TRANSLATION", - "ATTENTION!": "NEEDS TRANSLATION", - "Samplers Order": "NEEDS TRANSLATION", - "Samplers will be applied in a top-down order. Use with caution.": "NEEDS TRANSLATION", - "Repetition Penalty": "NEEDS TRANSLATION", - "Epsilon Cutoff": "NEEDS TRANSLATION", - "Eta Cutoff": "NEEDS TRANSLATION", - "Rep. Pen. Range.": "NEEDS TRANSLATION", - "Rep. Pen. Freq.": "NEEDS TRANSLATION", - "Rep. Pen. Presence": "NEEDS TRANSLATION", - "Enter it in the box below:": "NEEDS TRANSLATION", - "separate with commas w/o space between": "NEEDS TRANSLATION", - "Document": "NEEDS TRANSLATION", - "Suggest replies": "NEEDS TRANSLATION", - "Show suggested replies. Not all bots support this.": "NEEDS TRANSLATION", - "Use 'Unlocked Context' to enable chunked generation.": "NEEDS TRANSLATION", - "It extends the context window in exchange for reply generation speed.": "NEEDS TRANSLATION", - "Continue": "NEEDS TRANSLATION", - "Editing:": "NEEDS TRANSLATION", - "AI reply prefix": "NEEDS TRANSLATION", - "Custom Stopping Strings": "NEEDS TRANSLATION", - "JSON serialized array of strings": "NEEDS TRANSLATION", - "words you dont want generated separated by comma ','": "NEEDS TRANSLATION", - "Extensions URL": "NEEDS TRANSLATION", - "API Key": "NEEDS TRANSLATION", - "Enter your name": "NEEDS TRANSLATION", - "Name this character": "NEEDS TRANSLATION", - "Search / Create Tags": "NEEDS TRANSLATION", - "Describe your character's physical and mental traits here.": "NEEDS TRANSLATION", - "This will be the first message from the character that starts every chat.": "NEEDS TRANSLATION", - "Chat Name (Optional)": "NEEDS TRANSLATION", - "Filter...": "NEEDS TRANSLATION", - "Search...": "NEEDS TRANSLATION", - "Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "NEEDS TRANSLATION", - "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "NEEDS TRANSLATION", - "(Botmaker's name / Contact Info)": "NEEDS TRANSLATION", - "(If you want to track character versions)": "NEEDS TRANSLATION", - "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "NEEDS TRANSLATION", - "(Write a comma-separated list of tags)": "NEEDS TRANSLATION", - "(A brief description of the personality)": "NEEDS TRANSLATION", - "(Circumstances and context of the interaction)": "NEEDS TRANSLATION", - "(Examples of chat dialog. Begin each example with START on a new line.)": "NEEDS TRANSLATION", - "Injection text (supports parameters)": "NEEDS TRANSLATION", - "Injection depth": "NEEDS TRANSLATION", - "Type here...": "NEEDS TRANSLATION", - "Comma separated (required)": "NEEDS TRANSLATION", - "Comma separated (ignored if empty)": "NEEDS TRANSLATION", - "What this keyword should mean to the AI, sent verbatim": "NEEDS TRANSLATION", - "Not sent to the AI": "NEEDS TRANSLATION", - "(This will be the first message from the character that starts every chat)": "NEEDS TRANSLATION", - "Not connected to API!": "NEEDS TRANSLATION", - "AI Response Configuration": "NEEDS TRANSLATION", - "AI Configuration panel will stay open": "NEEDS TRANSLATION", - "Update current preset": "NEEDS TRANSLATION", - "Create new preset": "NEEDS TRANSLATION", - "Import preset": "NEEDS TRANSLATION", - "Export preset": "NEEDS TRANSLATION", - "Delete the preset": "NEEDS TRANSLATION", - "NSFW block goes first in the resulting prompt": "NEEDS TRANSLATION", - "Enables OpenAI completion streaming": "NEEDS TRANSLATION", - "Wrap user messages in quotes before sending": "NEEDS TRANSLATION", - "Restore default prompt": "NEEDS TRANSLATION", - "New preset": "NEEDS TRANSLATION", - "Delete preset": "NEEDS TRANSLATION", - "Restore default jailbreak": "NEEDS TRANSLATION", - "Restore default reply": "NEEDS TRANSLATION", - "Restore defaul note": "NEEDS TRANSLATION", - "API Connections": "NEEDS TRANSLATION", - "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "NEEDS TRANSLATION", - "Clear your API key": "NEEDS TRANSLATION", - "Refresh models": "NEEDS TRANSLATION", - "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "NEEDS TRANSLATION", - "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "NEEDS TRANSLATION", - "Create New": "NEEDS TRANSLATION", - "Edit": "NEEDS TRANSLATION", - "World Info": "NEEDS TRANSLATION", - "Locked = World Editor will stay open": "NEEDS TRANSLATION", - "Entries can activate other entries by mentioning their keywords": "NEEDS TRANSLATION", - "Lookup for the entry keys in the context will respect the case": "NEEDS TRANSLATION", - "If the entry key consists of only one word, it would not be matched as part of other words": "NEEDS TRANSLATION", - "Open all Entries": "NEEDS TRANSLATION", - "Close all Entries": "NEEDS TRANSLATION", - "Create": "NEEDS TRANSLATION", - "Import World Info": "NEEDS TRANSLATION", - "Export World Info": "NEEDS TRANSLATION", - "Delete World Info": "NEEDS TRANSLATION", - "Rename World Info": "NEEDS TRANSLATION", - "Save changes to a new theme file": "NEEDS TRANSLATION", - "removes blur and uses alternative background color for divs": "NEEDS TRANSLATION", - "If checked and the character card contains a prompt override (System Prompt), use that instead.": "NEEDS TRANSLATION", - "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead.": "NEEDS TRANSLATION", - "AI Response Formatting": "NEEDS TRANSLATION", - "Change Background Image": "NEEDS TRANSLATION", - "Extensions": "NEEDS TRANSLATION", - "Click to set a new User Name": "NEEDS TRANSLATION", - "Click to lock your selected persona to the current chat. Click again to remove the lock.": "NEEDS TRANSLATION", - "Click to set user name for all messages": "NEEDS TRANSLATION", - "Create a dummy persona": "NEEDS TRANSLATION", - "Character Management": "NEEDS TRANSLATION", - "Locked = Character Management panel will stay open": "NEEDS TRANSLATION", - "Select/Create Characters": "NEEDS TRANSLATION", - "Token counts may be inaccurate and provided just for reference.": "NEEDS TRANSLATION", - "Click to select a new avatar for this character": "NEEDS TRANSLATION", - "Add to Favorites": "NEEDS TRANSLATION", - "Advanced Definition": "NEEDS TRANSLATION", - "Character Lore": "NEEDS TRANSLATION", - "Export and Download": "NEEDS TRANSLATION", - "Duplicate Character": "NEEDS TRANSLATION", - "Create Character": "NEEDS TRANSLATION", - "Delete Character": "NEEDS TRANSLATION", - "View all tags": "NEEDS TRANSLATION", - "Click to set additional greeting messages": "NEEDS TRANSLATION", - "Show / Hide Description and First Message": "NEEDS TRANSLATION", - "Click to select a new avatar for this group": "NEEDS TRANSLATION", - "Set a group chat scenario": "NEEDS TRANSLATION", - "Restore collage avatar": "NEEDS TRANSLATION", - "Create New Character": "NEEDS TRANSLATION", - "Import Character from File": "NEEDS TRANSLATION", - "Import content from external URL": "NEEDS TRANSLATION", - "Create New Chat Group": "NEEDS TRANSLATION", - "Characters sorting order": "NEEDS TRANSLATION", - "Add chat injection": "NEEDS TRANSLATION", - "Remove injection": "NEEDS TRANSLATION", - "Remove": "NEEDS TRANSLATION", - "Select a World Info file for": "NEEDS TRANSLATION", - "Primary Lorebook": "NEEDS TRANSLATION", - "A selected World Info will be bound to this character as its own Lorebook.": "NEEDS TRANSLATION", - "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "NEEDS TRANSLATION", - "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "NEEDS TRANSLATION", - "Additional Lorebooks": "NEEDS TRANSLATION", - "Associate one or more auxillary Lorebooks with this character.": "NEEDS TRANSLATION", - "NOTE: These choices are optional and won't be preserved on character export!": "NEEDS TRANSLATION", - "Rename chat file": "NEEDS TRANSLATION", - "Export JSONL chat file": "NEEDS TRANSLATION", - "Download chat as plain text document": "NEEDS TRANSLATION", - "Delete chat file": "NEEDS TRANSLATION", - "Delete tag": "NEEDS TRANSLATION", - "Translate message": "NEEDS TRANSLATION", - "Generate Image": "NEEDS TRANSLATION", - "Narrate": "NEEDS TRANSLATION", - "Prompt": "NEEDS TRANSLATION", - "Create Bookmark": "NEEDS TRANSLATION", - "Copy": "NEEDS TRANSLATION", - "Open bookmark chat": "NEEDS TRANSLATION", - "Confirm": "NEEDS TRANSLATION", - "Copy this message": "NEEDS TRANSLATION", - "Delete this message": "NEEDS TRANSLATION", - "Move message up": "NEEDS TRANSLATION", - "Move message down": "NEEDS TRANSLATION", - "Enlarge": "NEEDS TRANSLATION", - "Temporarily disable automatic replies from this character": "NEEDS TRANSLATION", - "Enable automatic replies from this character": "NEEDS TRANSLATION", - "Trigger a message from this character": "NEEDS TRANSLATION", - "Move up": "NEEDS TRANSLATION", - "Move down": "NEEDS TRANSLATION", - "View character card": "NEEDS TRANSLATION", - "Remove from group": "NEEDS TRANSLATION", - "Add to group": "NEEDS TRANSLATION", - "Add": "NEEDS TRANSLATION", - "Abort request": "NEEDS TRANSLATION", - "Send a message": "NEEDS TRANSLATION", - "Ask AI to write your message for you": "NEEDS TRANSLATION", - "Continue the last message": "NEEDS TRANSLATION", - "Bind user name to that avatar": "NEEDS TRANSLATION", - "Select this as default persona for the new chats.": "NEEDS TRANSLATION", - "Change persona image": "NEEDS TRANSLATION", - "Delete persona": "NEEDS TRANSLATION" - }, - "ko-kr": { - "clickslidertips": "슬라이더의 오른쪽 숫자를 클릭하면 직접 입력할 수 있습니다.", - "kobldpresets": "Kobold 설정", - "guikoboldaisettings": "GUI KoboldAI 설정", - "novelaipreserts": "NovelAI 설정", - "default": "기본값", - "openaipresets": "OpenAI 설정", - "text gen webio(ooba) presets": "TextGenWebUI(ooba) 설정", - "response legth(tokens)": "답변 길이(토큰수)", - "select": "선택", - "context size(tokens)": "맥락 크기(토큰수)", - "Unlocked Context Size": "한도 해제", - "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "토큰 4096개 이상의 맥락을 사용할 수 있는 모델에서만 사용하세요. 파워유저 옵션이에요.", - "rep.pen": "반복 페널티", - "rep.pen range": "반복 페널티 범위", - "temperature": "온도", - "Encoder Rep. Pen.": "인코더 반복 페널티", - "No Repeat Ngram Size": "무반복 Ngram 크기", - "Min Length": "최소길이", - "OpenAI Reverse Proxy": "OpenAI 리버스 프록시", - "Alternative server URL (leave empty to use the default value).": "대체 서버 URL(비워둘 경우 기본값 사용).", - "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "여기 입력하기 전에 API 페널에서 본인의 OAI API 키를 지워주세요! ", - "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "비공식 OpenAI 프록시를 사용하며 발생하는 문제는 실리태번 팀이 지원할 수 없습니다.", - "Legacy Streaming Processing": "기존 스트리밍 처리법", - "Enable this if the streaming doesn't work with your proxy": "프록시에서 스트리밍을 지원하지 않는다면 이 옵션을 선택하세요.", - "Context Size (tokens)": "맥락 크기(토큰수)", - "Max Response Length (tokens)": "최대 답변 길이(토큰수)", - "Temperature": "온도", - "Frequency Penalty": "빈도 페널티", - "Presence Penalty": "존재 페널티", - "Top-p": "상위 P", - "Display bot response text chunks as they are generated": "AI가 생성하는 답변을 실시간으로 출력합니다.", - "Top A": "상위 A", - "Typical Sampling": "전형적 표집", - "Tail Free Sampling": "꼬리자르기 표집", - "Rep. Pen. Slope": "반복 페널티 경사도", - "Single-line mode": "한줄 모드", - "Top K": "상위 K", - "Top P": "상위 P", - "Typical P": "전형 P", - "Do Sample": "Do Sample", - "Add BOS Token": "BOS토큰 삽입", - "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative.": "프롬프트 맨앞에 bos_token을 삽입합니다. 이 옵션을 해제하면 답변이 더 다양해질 수 있어요.", - "Ban EOS Token": "EOS토큰 금지", - "Ban the eos_token. This forces the model to never end the generation prematurely": "eos_token을 금지합니다. 모델이 답변 생성을 완성하기 전에 포기하는 것을 막아요.", - "Skip Special Tokens": "특수토큰 무시", - "Beam search": "빔 탐색", - "Number of Beams": "빔 갯수", - "Length Penalty": "길이 페널티", - "Early Stopping": "조기종료", - "Contrastive search": "대조적 탐색", - "Penalty Alpha": "페널티 알파값", - "Seed": "시드값", - "Inserts jailbreak as a last system message.": "탈옥 프롬프트를 시스템 메시지 맨 마지막에 삽입합니다.", - "This tells the AI to ignore its usual content restrictions.": "AI가 처리 내용 제약을 무시하도록 명령해요.", - "NSFW Encouraged": "19금 응원", - "Tell the AI that NSFW is allowed.": "AI가 19금을 생성할 수 있다고 알려줍니다.", - "NSFW Prioritized": "19금 요구", - "NSFW prompt text goes first in the prompt to emphasize its effect.": "19금 프롬프트를 시스템 프롬프트 맨 앞에 삽입하여 효과를 강화합니다.", - "Streaming": "스트리밍", - "Display the response bit by bit as it is generated.": "답변이 생성되는 도중 실시간으로 출력합니다.", - "When this is off, responses will be displayed all at once when they are complete.": "이 옵션을 해지하면 답변이 완성된 다음 한 번에 출력합니다.", - "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "요청당 한 줄만 생성합니다(KoboldAI만 해당, KoboldCpp에서는 무시됨).", - "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "EOS(End-of-Sequence) 토큰(KoboldCpp 및 KoboldAI의 다른 토큰 포함)을 금지합니다.", - "Good for story writing, but should not be used for chat and instruct mode.": "스토리 작성에 적합하지만 채팅 및 교육 모드에는 사용하면 안 됩니다.", - "Enhance Definitions": "똑똑해지기", - "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "OpenAI 지식 데이터베이스를 활용하여 공공인물, 유명한 캐릭터 등 이미 알려진 정보를 사용합니다.", - "Wrap in Quotes": "자동 따옴표", - "Wrap entire user message in quotes before sending.": "메시지를 보내기 전에 사용자의 메시지 양 끝에 따옴표를 삽입합니다.", - "Leave off if you use quotes manually for speech.": "직접 대사에 따옴표를 붙인다면 이 옵션을 끄세요.", - "Main prompt": "핵심 프롬프트", - "The main prompt used to set the model behavior": "모델의 행동방식을 설정하는 프롬프트입니다.", - "NSFW prompt": "19금 프롬프트", - "Prompt that is used when the NSFW toggle is on": "19금 옵션이 활성화되면 사용하는 프롬프트입니다.", - "Jailbreak prompt": "탈옥 프롬프트", - "Prompt that is used when the Jailbreak toggle is on": "탈옥 옵션이 활성화되면 사용하는 프롬프트입니다.", - "Impersonation prompt": "모사 프롬프트", - "Prompt that is used for Impersonation function": "사용자 모사에 사용하는 프롬프트입니다.", - "Logit Bias": "로지트 편향", - "Helps to ban or reenforce the usage of certain words": "특정 단어의 사용을 금지하거나 유도할 때 유용합니다.", - "View / Edit bias preset": "로지트 편향 보기/수정하기", - "Add bias entry": "편향 항목 입력", - "Jailbreak activation message": "탈옥 시도 프롬프트 메시지", - "Message to send when auto-jailbreak is on.": "자동탈옥이 활성화되면 사용하는 프롬프트입니다.", - "Jailbreak confirmation reply": "탈옥 성공 답변", - "Bot must send this back to confirm jailbreak": "탈옥 성공 보고 메시지를 확인하는 문구입니다.", - "Character Note": "캐릭터 쪽지", - "Influences bot behavior in its responses": "AI가 답변을 생성할 때 영향을 줍니다.", - "API": "API", - "KoboldAI": "KoboldAI", - "Use Horde": "Horde 사용", - "API url": "API URL", - "Register a Horde account for faster queue times": "Horde 계정이 있다면 대기열이 짧아집니다.", - "Learn how to contribute your idle GPU cycles to the Hord": "Horde를 위하여 노는 GPU를 기여하는 법을 배워보세요.", - "Adjust context size to worker capabilities": "Horde 일꾼의 사양에 맞춰 맥락 크기 조정", - "Adjust response length to worker capabilities": "Horde 일꾼의 사양에 맞춰 답변 길이 조정", - "API key": "API 키", - "Register": "등록", - "For privacy reasons": "개인정보 보호를 위하여 API 키는 반드시 비밀로 하세요.", - "Model": "모델", - "Hold Control / Command key to select multiple models.": "Control/Cmd키를 누르면 여러 모델을 선택할 수 있습니다.", - "Horde models not loaded": "Horde 모델을 불러오지 못했어요!", - "Not connected": "접속 없음", - "Novel API key": "NovelAI API 키", - "Follow": "API키를 받으려면", - "these directions": "이 설명글을", - "to get your NovelAI API key.": "자세히 읽어주세요.", - "Enter it in the box below": "밑 입력창에 입력하세요.", - "Novel AI Model": "NovelAI 모델", - "No connection": "접속 실패", - "oobabooga/text-generation-webui": "oobabooga/text-generation-webui", - "Make sure you run it with": "--extensions openai 인수를 반드시 사용해야 합니다.", - "Blocking API url": "API URL을 막는 중", - "Streaming API url": "API URL에서 스트리밍 중", - "OpenAI Model": "OpenAI 모델", - "View API Usage Metrics": "API 사용량 보기", - "Bot": "봇", - "Connect to the API": "API 접속", - "Auto-connect to Last Server": "최근 접속한 서버에 자동접속", - "View hidden API keys": "API 키 드러내기", - "Advanced Formatting": "고급 서식", - "AutoFormat Overrides": "자동서식 해지", - "Disable description formatting": "묘사 자동서식", - "Disable personality formatting": "성격 자동서식", - "Disable scenario formatting": "시나리오 자동서식", - "Disable example chats formatting": "채팅 예시 자동서식", - "Disable chat start formatting": "인사말 자동서식", - "Custom Chat Separator": "채팅 분리자 바꾸기", - "Instruct Mode": "지시 모드", - "Enabled": "활성화", - "Wrap Sequences with Newline": "배열 명령 양 끝에 줄바꿈 삽입", - "Include Names": "이름 포함", - "System Prompt": "시스템 프롬프트", - "Instruct Mode Sequences": "지시 모드 순서", - "Input Sequence": "입력 배열", - "First Output Sequence": "첫 번째 출력 시퀀스", - "Last Output Sequence": "마지막 출력 순서", - "System Sequence Prefix": "시스템 시퀀스 접두사", - "System Sequence Suffix": "시스템 시퀀스 접미사", - "Stop Sequence": "정지 배열", - "Context Formatting": "맥락 서식", - "Tokenizer": "토큰화 장치", - "None / Estimated": "없음/추정", - "Sentencepiece (LLaMA)": "Sentencepiece (LLaMA)", - "Token Padding": "토큰 패딩", - "Always add character's name to prompt": "프롬프트에 항상 캐릭터 이름 삽입", - "Keep Example Messages in Prompt": "예사 답변을 프롬프트에 유지", - "Remove Empty New Lines from Output": "출력에서 빈줄 삭제", - "Disabled for all models": "모든 모델에 비활성화", - "Automatic (based on model name)": "모델 서식 자동탐지", - "Enabled for all models": "모든 모델에 활성화", - "Anchors Order": "Anchors Order", - "Character then Style": "캐릭터 다음 스타일", - "Style then Character": "스타일 다음 캐릭터", - "Character Anchor": "캐릭터 Anchor", - "Style Anchor": "스타일 Anchor", - "World Info": "설정집", - "Scan Depth": "탐색 깊이", - "depth": "깊이", - "Token Budget": "토큰 예산", - "budget": "예산", - "Recursive scanning": "되풀이 검색", - "None": "없음", - "User Settings": "사용자 설정", - "UI Customization": "UI 꾸미기", - "Avatar Style": "아바타 스타일", - "Circle": "동그라미", - "Rectangle": "네모", - "Chat Style": "채팅창 스타일", - "Default": "기본", - "Bubbles": "말풍선", - "Chat Width (PC)": "채팅창 넓이(PC):", - "No Blur Effect": "흐리기 효과 없음", - "No Text Shadows": "글 그림자 없음", - "Waifu Mode": "미연시 모드", - "Message Timer": "메시지 타이머", - "Characters Hotswap": "빠른 캐릭터 바꾸기", - "Movable UI Panels": "UI 패널 이동", - "Reset Panels": "패널 제위치로", - "UI Colors": "UI 색상", - "Main Text": "본문", - "Italics Text": "이탤릭체", - "Quote Text": "따옴표", - "Shadow Color": "그림자", - "FastUI BG": "FastUI 배경색", - "Blur Tint": "흐리기", - "Font Scale": "글 크기", - "Blur Strength": "흐리기 정도", - "Text Shadow Width": "글 그림자 넓이", - "UI Theme Preset": "UI 테마", - "Power User Options": "파워유저 옵션", - "Swipes": "스와이프", - "Background Sound Only": "배경음만", - "Auto-load Last Chat": "마지막 채팅 자동으로 불러오기", - "Auto-save Message Edits": "메시지 수정 후 자동 저장", - "Auto-fix Markdown": "서식 고치기 자동화", - "Allow {{char}}: in bot messages": "AI 메시지에 {{char}} 표기 허용", - "Allow {{user}}: in bot messages": "AI 메시지에 {{user}} 표기 허용", - "Auto-scroll Chat": "채팅창 자동 스크롤링", - "Render Formulas": "계산식 처리하기", - "Send on Enter": "엔터키로 보내기", - "Always disabled": "항상 금지", - "Automatic (desktop)": "자동(PC)", - "Always enabled": "항상 허용", - "Name": "이름", - "Your Avatar": "사용자 아바타", - "Extensions API:": "확장기능 API:", - "SillyTavern-extras": "SillyTavern-extras", - "Auto-connect": "자동 접속", - "Active extensions": "확장기능 활성화", - "Extension settings": "확장기능 설정", - "Description": "설명", - "First message": "첫 메시지", - "Group Controls": "그룹채팅 옵션", - "Group reply strategy": "그룹 답변 처리법", - "Natural order": "자연스럽게", - "List order": "순서대로", - "Allow self responses": "혼잣말 허용", - "Auto Mode": "자동 모드", - "Add Members": "캐릭터 부르기", - "Current Members": "참여하는 캐릭터", - "text": "글", - "Delete": "삭제", - "Cancel": "취소", - "Advanced Defininitions": "고급 설정", - "Personality summary": "성격 요약", - "A brief description of the personality": "캐릭터의 성격을 짧게 요약하세요.", - "Scenario": "시나리오", - "Circumstances and context of the dialogue": "대화가 어떤 상황에서 시작하는지 요약하세요.", - "Talkativeness": "말많음", - "How often the chracter speaks in": "그룹채팅에서 이 캐릭터가 얼마나 말이 많은지", - "group chats!": "설정합니다!", - "Shy": "조용...", - "Normal": "보통", - "Chatty": "재잘재잘", - "Examples of dialogue": "대화 예시", - "Forms a personality more clearly": "성격을 드러내는데 큰 도움이 됩니다.", - "Save": "저장", - "World Info Editor": "설정집 수정", - "New Entry": "새 항목", - "Export": "내보내기", - "Delete World": "설정집 삭제", - "Chat History": "채팅 기록", - "Group Chat Scenario Override": "그룹채팅 시나리오 덮어쓰기", - "All group members will use the following scenario text instead of what is specified in their character cards.": "그룹채팅에 참여한 캐릭터의 개별 시나리오를 무시하고 그룹채팅의 시나리오를 사용합니다.", - "Keywords": "키워드", - "Separate with commas": "쉼표(,)로 구분하세요.", - "Secondary Required Keywords": "차순위 요구 키워드", - "Content": "내용물", - "What this keyword should mean to the AI": "AI가 이 키워드를 어떻게 이해하나요?", - "Memo/Note": "쪽지/낙서", - "Not sent to AI": "AI에게 보내지 않습니다.", - "Constant": "항상 발동", - "Selective": "선택 발동", - "Before Char": "캐릭터 앞에", - "After Char": "캐릭터 다음", - "Insertion Order": "삽입 순서", - "Tokens:": "토큰 개수:", - "Disable": "비활성화", - "${characterName}": "${charaterName}", - "CHAR": "CHAR", - "is typing": "가 타자중입니다...", - "Back to parent chat": "상위 채팅창으로 돌아가기", - "Save bookmark": "책갈피 저장", - "Convert to group": "그룹채팅으로 전환", - "Start new chat": "새로운 채팅 시작하기", - "View past chats": "과거 채팅 기록 보기", - "Delete messages": "메시지 삭제", - "Impersonate": "모사", - "Regenerate": "재생성", - "PNG": "PNG", - "JSON": "JSON", - "presets": "기본설정", - "Message Sound": "메시지 효과음", - "Author's Note": "글쓴이 쪽지", - "Send Jailbreak": "탈옥 프롬프트 보내기", - "Replace empty message": "빈 메시지 대체", - "Send this text instead of nothing when the text box is empty.": "전송 메시지가 비어있을 경우 이 메시지를 대신 보냅니다.", - "NSFW avoidance prompt": "19금 금지 프롬프트", - "Prompt that is used when the NSFW toggle is off": "19금 응원이 비활성화되었을 때 전송하는 프롬프트입니다.", - "Advanced prompt bits": "고급 프롬프트 옵션", - "World Info format template": "설정집 서식 템플릿", - "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "프롬프트에 설정접을 입력하기 전에 서식을 적용합니다. 내용을 삽입할 곳을 {0}으로 지정해주세요.", - "Unrestricted maximum value for the context slider": "\n맥락 크기 제한을 해제합니다. 파워유저 옵션이에요.", - "Chat Completion Source": "문장완성 API 소스", - "Avoid sending sensitive information to the Horde.": "Horde로 개인정보나 기밀사항을 전송하지 마세요.", - "Review the Privacy statement": "개인정보 보호 방침을 확인합니다.", - "Learn how to contribute your idel GPU cycles to the Horde": "Horde를 위하여 휴식중인 GPU를 기여하는 법을 알아보아요", - "Trusted workers only": "신뢰된 일꾼에게만 접속", - "For privacy reasons, your API key will be hidden after you reload the page.": "개인정보 보호를 위하여 API 키는 페이지를 다시 고칠 때 숨겨집니다.", - "-- Horde models not loaded --": "-- Horde 모델을 불러오지 못했어요! --", - "Example: http://127.0.0.1:5000/api ": "예: http://127.0.0.1:5000/api ", - "No connection...": "접속되지 않음...", - "Get your NovelAI API Key": "NovelAI를 받아오세요!", - "KoboldAI Horde": "KoboldAI Horde", - "Text Gen WebUI (ooba)": "Text Gen WebUI (ooba)", - "NovelAI": "NovelAI", - "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "문장완성 (OpenAI, Claude, Window/OpenRouter, Scale)", - "OpenAI API key": "OpenAI API 키", - "to get your OpenAI API key.": "자세히 읽어주세요.", - "Trim spaces": "띄어쓰기 제거", - "Trim Incomplete Sentences": "미완성 문장 제거", - "Include Newline": "줄바꿈 포함", - "Non-markdown strings": "마크다운 무시 문자열", - "Replace Macro in Sequences": "배열 매크로 대체", - "Presets": "기본설정", - "Separator": "분리자", - "Start Reply With": "답변 접두사", - "Show reply prefix in chat": "답변 접두사를 채팅창에 표시", - "Worlds/Lorebooks": "세계관/설정집", - "Active World(s)": "활성화된 세계관", - "Character Lore Insertion Strategy": "캐릭터 설정집 삽입 전략", - "Sorted Evenly": "균등하게 배분", - "Character Lore First": "캐릭터 설정집 먼저", - "Global Lore First": "세계관 설정집 먼저", - "-- World Info not found --": "-- 세계관을 찾을 수 없음 --", - "Recursive Scan": "회귀 탐색", - "Case Sensitive": "대소문자 구별", - "Match whole words": "전체 단어 일치", - "World/Lore Editor": "세계관/설정집 편집기", - "--- None ---": "--- 없음 ---", - "Comma seperated (ignored if empty)": "쉼표로 구분 (비어있을 경우 무시)", - "Use Probability": "확률성 발동 사용", - "Exclude from recursion": "회귀탐색에서 제외", - "Position:": "삽입 위치:", - "Before Char Defs": "캐릭터 정의 앞에", - "After Char Defs": "캐릭터 정의 다음에", - "Before AN": "글쓴이 쪽지 앞에", - "After AN": "글쓴이 쪽지 다음에", - "Order:": "순서:", - "Probability:": "발동확률:", - "Delete Entry": "설정 파기", - "User Message Blur Tint": "사용자 메시지 흐리기", - "AI Message Blur Tint": "AI 메시지 흐리기", - "Chat Style:": "메시지 스타일:", - "Chat Width (PC):": "채팅창 넓이 (PC):", - "Chat Timestamps": "메시지 타임스탬프", - "Message IDs": "메시지 ID 표시", - "Prefer Character Card Prompt": "캐릭터 카드 프롬프트 우선시", - "Prefer Character Card Jailbreak": "캐릭터 카드 탈옥 프롬프트 우선시", - "Press Send to continue": "보내기를 눌러서 AI 메시지 이어서 출력", - "Log prompts to console": "콘솔창에 프롬프트 기록 출력", - "Never resize avatars": "아바타 크기 변경 금지", - "Show avatar filenames": "아바타 파일 이름 표시", - "Import Card Tags": "카드 태그 불러오기", - "Confirm message deletion": "메시지 삭제 확인 필요", - "Spoiler Free Mode": "스포일러 금지 모드", - "Auto-swipe": "자동스와이프", - "Minimum generated message length": "생성해야 할 메시지 최소 길이", - "Blacklisted words": "자동스와이프 발동 조건이 되는 금지어", - "Blacklisted word count to swipe": "자동스와이프 발동이 요구하는 금지어 수", - "Reload Chat": "채팅 다시불러오기", - "Not Connected": "접속되지 않음", - "Persona Management": "주인공 관리", - "Persona Description": "주인공 묘사", - "In Story String / Chat Completion: Before Character Card": "스토리 문자열에서 / 문장완성: 캐릭터 카드 앞에", - "In Story String / Chat Completion: After Character Card": "스토리 문자열에서 / 문장완성: 캐릭터 카드 다음에", - "Top of Author's Note": "글쓴이 쪽지 위에", - "Bottom of Author's Note": "글쓴이 쪽지 밑에", - "How do I use this?": "이건 어떻게 써먹나요?", - "More...": "추가 옵션", - "Link to World Info": "설정집에 연결", - "Import Card Lore": "카드 설정집 불러오기", - "Scenario Override": "시나리오 덮어쓰기", - "Rename": "이름 바꾸기", - "Character Description": "캐릭터 묘사", - "Creator's Notes": "작성자 쪽지", - "A-Z": "이름순 (A-Z)", - "Z-A": "이름순 (Z-A)", - "Newest": "불러온 순서 (내림차순)", - "Oldest": "불러온 순서 (오름차순)", - "Favorites": "최애", - "Recent": "최근 채팅함", - "Most chats": "최다 채팅함", - "Least chats": "최저 채팅함", - "Back": "뒤로", - "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "프롬프트 덮어쓰기 (OpenAI/Claude/Scale API, Window/OpenRouter, 지시모드 전용 기능)", - "Insert {{original}} into either box to include the respective default prompt from system settings.": "기본 프롬프트를 사용하려면 해당하는 칸에 {{original}}을 입력하세요.", - "Main Prompt": "핵심 프롬프트", - "Jailbreak": "탈옥 프롬프트", - "Creator's Metadata (Not sent with the AI prompt)": "작성자 메타데이터 (AI 프롬프트에 포함하지 않음)", - "Everything here is optional": "여기있는 모든 항목은 선택사항입니다.", - "Created by": "작성자", - "Character Version": "캐릭터 버전", - "Tags to Embed": "자동포함된 태그", - "How often the character speaks in group chats!": "이 캐릭터는 그룹채팅에서 얼마나 말이 많은가요?", - "Important to set the character's writing style.": "캐릭터의 문체를 설정할 때 중요합니다.", - "unlocked": "한도 해제", - "ATTENTION!": "경고!!", - "Samplers Order": "표집방식 우선순위", - "Samplers will be applied in a top-down order. Use with caution.": "표집방식은 위에서부터 아래로 내려가며 적용합니다. 유의하여 사용하세요.", - "Repetition Penalty": "반복 페널티", - "Epsilon Cutoff": "엡실론 한도", - "Eta Cutoff": "에타 한도", - "Rep. Pen. Range.": "반복 페널티 범위", - "Rep. Pen. Freq.": "반복 페널티 빈도", - "Rep. Pen. Presence": "반복 페널티 존재", - "Enter it in the box below:": "다음 상자에 쿠키를 입력하세요:", - "separate with commas w/o space between": "쉼표로 구분, 띄어쓰기 없이 입력하세요.", - "Document": "단일 문서", - "Suggest replies": "사용자 답변 제안", - "Show suggested replies. Not all bots support this.": "사용자의 답변을 미리 생성합니다. 봇에 따라 지원하지 않을 경우도 있어요.", - "Use 'Unlocked Context' to enable chunked generation.": "한도 해제를 활성화하여 뭉치 생성을 가동합니다.", - "It extends the context window in exchange for reply generation speed.": "답변 생성이 느려지지만 맥락 한도가 넓어집니다.", - "Continue": "이어서 계속", - "Editing:": "편집:", - "AI reply prefix": "AI 답변 접두사", - "Custom Stopping Strings": "문장출력 중단 문자열 (KoboldAI/TextGen/NovelAI)", - "JSON serialized array of strings": "JSON 연속 문자배열", - "words you dont want generated separated by comma ','": "답변에 포함을 막으려는 단어 (쉼표','로 구분)", - "Extensions URL": "확장기능 URL", - "API Key": "API 키", - "Enter your name": "이름을 입력하세요", - "Name this character": "캐릭터에 이름을 지어주세요", - "Search / Create Tags": "태그 검색 / 생성", - "Describe your character's physical and mental traits here.": "캐릭터의 신체적/정신적 특성을 적어주세요.", - "This will be the first message from the character that starts every chat.": "캐릭터와 새로운 채팅을 시작할 때 처음 출력되는 메시지입니다.", - "Chat Name (Optional)": "채팅 이름 (선택사항)", - "Filter...": "필터...", - "Search...": "검색...", - "Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "이 칸의 내용은 핵심 프롬프트를 무시하고 대신 적용합니다. (v2스펙: system_prompt)", - "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "이 칸의 내용은 탈옥 프롬프트를 무시하고 대신 적용합니다. (v2스펙: post_history_instructions)", - "(Botmaker's name / Contact Info)": "캐릭터 작성자 이름 / 연락처", - "(If you want to track character versions)": "(캐릭터 버전 트래킹을 위한 칸)", - "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "(캐릭터 설명, 사용방법, 힌트, 챗봇 모델, 기타 정보. 캐릭터 리스트에 작은 글씨로 출력됩니다.)", - "(Write a comma-separated list of tags)": "(캐릭터 태그, 쉼표로 구분)", - "(A brief description of the personality)": "(캐릭터의 성격 짧은 요약)", - "(Circumstances and context of the interaction)": "(채팅이 일어나는 상황과 맥락)", - "(Examples of chat dialog. Begin each example with START on a new line.)": "(AI가 생성해야하는 답변 예시 양식. 새로운 예시마다 전 줄에 로 서식해주세요.)", - "Injection text (supports parameters)": "삽입 문구 (변수 지원)", - "Injection depth": "삽입 깊이", - "Type here...": "여기 적어주세요...", - "Comma separated (required)": "쉼표로 구분 (필수)", - "Comma separated (ignored if empty)": "쉼표로 구분 (비어있을 경우 무시)", - "What this keyword should mean to the AI, sent verbatim": "키워드가 AI에게 뭘 뜻하나요? (문자 그대로 전송)", - "Not sent to the AI": "AI에게 전송되지 않음", - "(This will be the first message from the character that starts every chat)": "(대화를 시작하는 모든 캐릭터의 인사문구입니다)", - "Not connected to API!": "API와 연결이 끊어졌습니다!", - "AI Response Configuration": "AI 행동 설정", - "AI Configuration panel will stay open": "AI 행동 설정 패널 열림을 고정합니다", - "Update current preset": "현재 설정 업데이트", - "Create new preset": "새로운 설정 생성", - "Import preset": "설정 불러오기", - "Export preset": "설정 내보내기", - "Delete the preset": "설정 삭제하기", - "Inserts jailbreak as a last system message": "시스템 메시지 끝에 탈옥 프롬프트를 삽입합니다", - "NSFW block goes first in the resulting prompt": "생성되는 프롬프트 맨 앞에 19금 블록을 삽입합니다", - "Enables OpenAI completion streaming": "OpenAI 문장완성 스트리밍을 활성화합니다", - "Wrap user messages in quotes before sending": "메시지를 전송하기 전에 사용자 메시지 양 끝에 따옴표를 삽입합니다", - "Restore default prompt": "기본 프롬프트로 초기화", - "New preset": "설정 생성하기", - "Delete preset": "설정 삭제하기", - "Restore default jailbreak": "기본 탈옥 프롬프트로 초기화", - "Restore default reply": "기본 확인 메시지로 초기화", - "Restore defaul note": "기본 캐릭터 쪽지로 초기화", - "API Connections": "API 접속상태", - "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "승인된 일꾼과만 접속하여 양질의 답변을 얻을 수 있습니다. 답변 속도가 지연될 수 있어요.", - "Clear your API key": "API 키 치우기", - "Refresh models": "모델 다시 불러오기", - "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "OAuth flow를 사용하여 OpenRouter API 토큰을 얻습니다. openrouter.ai로 보내질 거에요!", - "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "짧은 시험 메시지를 보내서 API 접속 상태를 확인합니다. 서비스 사용으로 취급됩니다!", - "Create New": "새로 만들기", - "Edit": "수정하기", - "World Info": "세계관", - "Locked = World Editor will stay open": "세계관 설정 패널 열림을 고정합니다", - "Entries can activate other entries by mentioning their keywords": "설정 내용에 다른 설정의 키워드가 있다면 연속으로 발동하게 합니다", - "Lookup for the entry keys in the context will respect the case": "설정 발동 키워드가 대소문자를 구분합니다", - "If the entry key consists of only one word, it would not be matched as part of other words": "발동 키워드가 단 한 단어라면 다른 단어에 일부로 취급하지 않습니다", - "Open all Entries": "모든 설정 열기", - "Close all Entries": "모든 설정 닫기", - "Create": "생성", - "Import World Info": "설정집 불러오기", - "Export World Info": "설정집 내보내기", - "Delete World Info": "설정집 삭제하기", - "Rename World Info": "설정집 이름 바꾸기", - "Save changes to a new theme file": "변경사항을 새 테마 파일로 저장", - "removes blur and uses alternative background color for divs": "흐리기 효과를 제거하고 문단 배경을 대체합니다", - "If checked and the character card contains a prompt override (System Prompt), use that instead.": "활성화할 경우, 캐릭터 카드에 합봉된 핵심 프롬프트 덮어쓰기를 사용합니다.", - "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead.": "활성화할 경우, 캐릭터 카드에 합봉된 탈옥 프롬프트 덮어쓰기를 사용합니다.", - "AI Response Formatting": "AI 답변 서식", - "Change Background Image": "배경 그림 바꾸기", - "Extensions": "확장기능", - "Click to set a new User Name": "클릭해서 사용자 이름을 재설정합니다", - "Click to lock your selected persona to the current chat. Click again to remove the lock.": "클릭해서 현재 채팅의 주인공으로 설정합니다. 다시 클릭하여 고정을 해제합니다.", - "Click to set user name for all messages": "모든 메시지의 사용자 이름을 재설정합니다.", - "Create a dummy persona": "임시 주인공을 생성합니다", - "Character Management": "캐릭터 관리", - "Locked = Character Management panel will stay open": "캐릭터 관리 패널 열림을 고정합니다.", - "Select/Create Characters": "캐릭터 선택/생성", - "Token counts may be inaccurate and provided just for reference.": "토큰수는 불확실할 수 있습니다. 참고로만 사용하세요.", - "Click to select a new avatar for this character": "캐릭터 아바타를 다시 설정합니다", - "Add to Favorites": "최애로 설정", - "Advanced Definition": "고급 설정", - "Character Lore": "캐릭터 설정집", - "Export and Download": "내보내기/받기", - "Duplicate Character": "캐릭터 복제하기", - "Create Character": "캐릭터 생성하기", - "Delete Character": "캐릭터 삭제하기", - "View all tags": "모든 태그 보기", - "Click to set additional greeting messages": "추가 인사말 설정하기", - "Show / Hide Description and First Message": "캐릭터 설명과 인사말 보이기/숨기기", - "Click to select a new avatar for this group": "그룹채팅방 아바타 설정하기", - "Set a group chat scenario": "그룹채팅 시나리오 설정하기", - "Restore collage avatar": "콜라주 아바타 복구하기", - "Create New Character": "새로운 캐릭터 작성하기", - "Import Character from File": "파일에서 캐릭터 불러오기", - "Import content from external URL": "외부 URL에서 캐릭터 불러오기", - "Create New Chat Group": "새로운 그룹채팅방 만들기", - "Characters sorting order": "캐릭터 나열 방식", - "Add chat injection": "채팅 주입 추가하기", - "Remove injection": "채팅 주입 제거하기", - "Remove": "제거", - "Select a World Info file for": "캐릭터 설정집 연결하기:", - "Primary Lorebook": "핵심 설정집", - "A selected World Info will be bound to this character as its own Lorebook.": "선택한 세계관을 캐릭터의 고유 설정집으로 연결합니다.", - "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "AI가 답변을 생성할 때 채팅 전체 세계관과 조합하여 사용합니다.", - "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "캐릭터를 내보낼 때, 연결된 설정집 또한 JSON으로 파일에 포함됩니다.", - "Additional Lorebooks": "추가 설정집", - "Associate one or more auxillary Lorebooks with this character.": "하나 혹은 다수의 설정집을 캐릭터와 연결합니다.", - "NOTE: These choices are optional and won't be preserved on character export!": "주의: 이 설정집은 부가사항이며 캐릭터를 내보낼 때 파일에 삽입되지 않습니다!", - "Rename chat file": "채팅 파일 이름 변경하기", - "Export JSONL chat file": "채팅 파일 JSONL으로 내보내기", - "Download chat as plain text document": "채팅 파일을 서식없는 문서로 내보내기", - "Delete chat file": "채팅 파일 삭제하기", - "Delete tag": "태그 삭제하기", - "Translate message": "메시지 번역하기", - "Generate Image": "그림 생성하기", - "Narrate": "묘사하기", - "Prompt": "프롬프트", - "Create Bookmark": "책갈피 생성하기", - "Copy": "복사하기", - "Open bookmark chat": "책갈피한 채팅 열기", - "Confirm": "확인", - "Copy this message": "이 메시지 복사", - "Delete this message": "이 메시지 삭제", - "Move message up": "이 메시지를 위로", - "Move message down": "이 메시지를 밑으로", - "Enlarge": "확대", - "Temporarily disable automatic replies from this character": "이 캐릭터의 자동 답변을 임시적으로 금지", - "Enable automatic replies from this character": "이 캐릭터의 자동 답변을 허용", - "Trigger a message from this character": "이 캐릭터의 답변을 요구", - "Move up": "위로", - "Move down": "아래로", - "View character card": "캐릭터 카드 보기", - "Remove from group": "강퇴", - "Add to group": "캐릭터 초대하기", - "Add": "추가", - "Abort request": "답변요청 중지", - "Send a message": "메시지 보내기", - "Ask AI to write your message for you": "AI에게 사용자 메시지를 대신 작성해달라고 부탁합니다", - "Continue the last message": "마지막 답변을 이어서 작성합니다", - "Bind user name to that avatar": "사용자 이름을 아바타와 연결", - "Select this as default persona for the new chats.": "새로 열리는 채팅에서 기본 주인공으로 설정", - "Change persona image": "주인공 아바타 바꾸기", - "Delete persona": "주인공 삭제하기" - }, - "ru-ru": { - "clickslidertips": "Щелкните на цифру ползунка, чтобы вписать вручную.", - "kobldpresets": "Предустановки Kobold", - "guikoboldaisettings": "Интерфейс KoboldAI", - "novelaipreserts": "Предустановки NovelAI", - "default": "По умолчанию", - "openaipresets": "Предустановки OpenAI", - "text gen webio(ooba) presets": "Предустановки WebUI(ooba)", - "response legth(tokens)": "Длина ответа (в токенах)", - "select": "Выбрать", - "context size(tokens)": "Размер контекста (в токенах)", - "unlocked": "Неограниченный", - "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "Только отдельные модели поддерживают контекст, превышающий 4096 токенов. Используйте только если понимаете, что делаете.", - "rep.pen": "Штраф за повторение", - "WI Entry Status:🔵 Constant🟢 Normal❌ Disabled": "Статус входа WI:\n 🔵 Константа\n 🟢 Cтандартный\n ❌ Отключен", - "rep.pen range": "Диапазон штрафов за повтор.", - "Temperature controls the randomness in token selection": "Temperature контролирует случайность выбора токенов:\n- низкая Temperature (<1.0) приводит к более предсказуемому тексту, отдавая предпочтение токенам с высокой вероятностью.\n- высокая Temperature (>1.0) повышает креативность и разнообразие вывода, давая токенам с низкой вероятностью больше шансов.\nУстановите значение 1.0 для исходных вероятностей.", - "temperature": "Temperature", - "Top K sets a maximum amount of top tokens that can be chosen from": "Top K задает максимальное количество токенов, которые могут быть выбраны.\nЕсли Top-K равен 20, это означает, что будут сохранены только 20 токенов с наивысшим рейтингом (независимо от того, что их вероятности разнообразны или ограничены)\nУстановите значение 0, чтобы отключить.", - "Top P (a.k.a. nucleus sampling)": "Top P (также известная как выборка ядра) складывает все верхние токены, необходимые для достижения целевого процента.\nТо есть, если 2 верхних токена составляют 25%, а Top-P равен 0.50, учитываются только эти 2 верхних токена.\nУстановите значение 1.0, чтобы отключить.", - "Typical P Sampling prioritizes tokens based on their deviation from the average entropy of the set": "Сэмплер Typical P определяет приоритет токенов на основе их отклонения от средней энтропии набора.\nОстаются токены, чья кумулятивная вероятность близка к заданному порогу (например, 0,5), выделяя те, которые имеют среднее информационное содержание.\nУстановите значение 1.0, чтобы отключить.", - "Min P sets a base minimum probability": "Min P устанавливает базовую минимальную вероятность. Она масштабируется в зависимости от вероятности верхнего токена.\nЕсли вероятность верхнего токена составляет 80%, а Min P - 0.1, будут рассматриваться только токены с вероятностью выше 8%.\nУстановите значение 0, чтобы отключить.", - "Top A sets a threshold for token selection based on the square of the highest token probability": "Top A устанавливает порог для отбора токенов на основе квадрата наибольшей вероятности токена.\nЕсли значение Top A равно 0.2, а вероятность верхнего токена равна 50%, то токены с вероятностью ниже 5% (0.2 * 0.5^2) будут исключены.\nУстановите значение 0, чтобы отключить.", - "Tail-Free Sampling (TFS)": "Tail-Free Sampling (TFS) ищет хвост маловероятных токнов в распределении,\n анализируя скорость изменения вероятностей токенов с помощью производных. Он сохраняет токены до порога (например, 0.3), основанного на нормированной второй производной.\nЧем ближе к 0, тем больше отброшенных токенов. Установите значение 1.0, чтобы отключить.", - "Epsilon cutoff sets a probability floor below which tokens are excluded from being sampled": "Epsilon cutoff устанавливает уровень вероятности, ниже которого токены исключаются из выборки.\nВ единицах 1e-4; разумное значение - 3.\nУстановите 0, чтобы отключить.", - "Scale Temperature dynamically per token, based on the variation of probabilities": "Динамическое масштабирование Temperature для каждого токена, основанное на изменении вероятностей.", - "Minimum Temp": "Минимальная Temp", - "Maximum Temp": "Максимальная Temp", - "Exponent": "Экспонента", - "Mirostat Mode": "Режим", - "Mirostat Tau": "Tau", - "Mirostat Eta": "Eta", - "Variability parameter for Mirostat outputs": "Параметр изменчивости для выходных данных Mirostat.", - "Learning rate of Mirostat": "Скорость обучения Mirostat.", - "Strength of the Contrastive Search regularization term. Set to 0 to disable CS": "Сила условия регуляризации контрастивного поиска. Установите значение 0, чтобы отключить CS.", - "Temperature Last": "Temperature Last", - "Use the temperature sampler last": "Использовать Temperature сэмплер в последнюю очередь. Это почти всегда разумно.\nПри включении: сначала выборка набора правдоподобных токенов, затем применение Temperature для корректировки их относительных вероятностей (технически, логитов).\nПри отключении: сначала применение Temperature для корректировки относительных вероятностей ВСЕХ токенов, затем выборка правдоподобных токенов из этого.\nОтключение Temperature Last увеличивает вероятности в хвосте распределения, что увеличивает шансы получить несогласованный ответ.", - "LLaMA / Mistral / Yi models only": "Только для моделей LLaMA / Mistral / Yi. Убедитесь, что сначала выбрали подходящий токенизатор.\nПоследовательности, которые вы не хотите видеть в выходных данных.\nОдна на строку. Текст или [идентификаторы токенов].\nМногие токены имеют пробел впереди. Используйте счетчик токенов, если не уверены.", - "Example: some text [42, 69, 1337]": "Пример:\nкакой-то текст\n[42, 69, 1337]", - "Classifier Free Guidance. More helpful tip coming soon": "Руководство без классификатора. Больше полезных советов в ближайшее время.", - "Scale": "Масштаб", - "GBNF Grammar": "Грамматика GBNF", - "Usage Stats": "Статистика исп.", - "Click for stats!": "Нажмите для получения статистики!", - "Backup": "Резер. копирование", - "Backup your personas to a file": "Резервное копирование персон в файл", - "Restore": "Восстановить", - "Restore your personas from a file": "Восстановление персон из файла", - "Type in the desired custom grammar": "Введите нужную пользовательскую грамматику", - "Encoder Rep. Pen.": "Штраф за кодирование", - "Smoothing Factor": "Коэффициент сглаживания", - "No Repeat Ngram Size": "Нет повторов размера Ngram", - "Min Length": "Минимальная длина", - "OpenAI Reverse Proxy": "Прокси с OpenAI", - "Alternative server URL (leave empty to use the default value).": "Альтернативный URL сервера (оставьте пустым для стандартного значения)", - "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "Удалите свой личный OAI API Key из панели API прежде, чем вносить сюда ЧТО УГОДНО", - "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "Мы не сможем предоставить помощь с проблемами, с которыми вы столкнетесь при использовании неофициальных прокси для OpenAI", - "Legacy Streaming Processing": "Старый способ потокового вывода текста", - "Enable this if the streaming doesn't work with your proxy": "Включите это, если потоковый вывод текста не работает с вашим прокси", - "Context Size (tokens)": "Размер контекста (в токенах)", - "Max Response Length (tokens)": "Максимальная длина ответа (в токенах)", - "Temperature": "Temperature", - "Frequency Penalty": "Штраф за частоту", - "Presence Penalty": "Штраф за присутствие", - "Top-p": "Top P", - "Display bot response text chunks as they are generated": "Отображать ответ ИИ по мере генерации текста", - "Top A": "Top А", - "Typical Sampling": "Typical Sampling", - "Tail Free Sampling": "Tail Free Sampling", - "Rep. Pen. Slope": "Rep. Pen. Slope", - "Single-line mode": "Режим одной строки", - "Top K": "Top K", - "Top P": "Top P", - "Do Sample": "Сделать образец", - "Add BOS Token": "Добавить BOS-токен", - "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative": "Добавлять BOS-токен в начале инструкции. Выключение этого может сделать ответы более креативными. ", - "Ban EOS Token": "Заблокировать EOS-токен", - "Ban the eos_token. This forces the model to never end the generation prematurely": "Блокировка EOS-токена вынудит модель никогда не завершать генерацию преждевременно", - "Skip Special Tokens": "Пропускать специальные токены", - "Beam search": "Поиск Beam", - "Number of Beams": "Количество Beam", - "Length Penalty": "Штраф за длину", - "Early Stopping": "Преждевременная остановка", - "Contrastive search": "Контрастный поиск", - "Penalty Alpha": "Penalty Alpha", - "Seed": "Зерно", - "Epsilon Cutoff": "Epsilon Cutoff", - "Eta Cutoff": "Eta Cutoff", - "Negative Prompt": "Отрицательная подсказка", - "Mirostat (mode=1 is only for llama.cpp)": "Mirostat", - "Mirostat is a thermostat for output perplexity": "Mirostat - это термостат для недоумения на выходе.\nMirostat подгоняет недоумение на выходе к недоумению на входе, что позволяет избежать ловушки повторения.\n(когда по мере того, как авторегрессионный вывод производит текст, недоумение на выходе стремится к нулю)\n и ловушки путаницы (когда недоумение расходится)\nДля подробностей смотрите статью Mirostat: A Neural Text Decoding Algorithm that Directly Controls Perplexity by Basu et al. (2020).\nРежим выбирает версию Mirostat. 0=отключить, 1=Mirostat 1.0 (только llama.cpp), 2=Mirostat 2.0.", - "Add text here that would make the AI generate things you don't want in your outputs.": "Добавьте сюда текст, который заставит ИИ генерировать то, что вы не хотите видеть в своих выводах", - "Phrase Repetition Penalty": "Штраф за повторение фразы", - "Preamble": "Преамбула", - "Use style tags to modify the writing style of the output.": "Используйте теги стиля, чтобы изменить стиль написания вывода.", - "Banned Tokens": "Запрещенные токены", - "Sequences you don't want to appear in the output. One per line.": "Последовательности, которые вы не хотите отображать в выводе. По одному на строку.", - "AI Module": "Модуль ИИ", - "Changes the style of the generated text.": "Изменяет стиль создаваемого текста.", - "Used if CFG Scale is unset globally, per chat or character": "Используется, если масштаб CFG не установлен глобально, для каждого чата или персонажа.", - "Inserts jailbreak as a last system message.": "Вставлять JailBreak последним системным сообщением.", - "This tells the AI to ignore its usual content restrictions.": "Сообщает AI о необходимости игнорировать стандартные ограничения контента.", - "NSFW Encouraged": "Поощрять NSFW", - "Tell the AI that NSFW is allowed.": "Сообщает AI, что ему позволено генерировать NSFW.", - "NSFW Prioritized": "Предпочитать NSFW", - "NSFW prompt text goes first in the prompt to emphasize its effect.": "Отправлять NSFW-инструкцию в начале для усиления его эффекта", - "Streaming": "Потоковый вывод текста", - "Dynamic Temperature": "Динамическая Temperature", - "Restore current preset": "Восстановить текущую предустановку", - "Neutralize Samplers": "Нейтрализовать сэмплеры", - "Text Completion presets": "Предустановки Text Completion", - "Documentation on sampling parameters": "Документация по параметрам сэмплеров", - "Set all samplers to their neutral/disabled state.": "Установить все сэмплеры в нейтральное/отключенное состояние.", - "Only enable this if your model supports context sizes greater than 4096 tokens": "Включите эту опцию, только если ваша модель поддерживает размер контекста более 4096 токенов.\nУвеличивайте только если вы знаете, что делаете.", - "Display the response bit by bit as it is generated": "Отображение ответа бит за битом по мере его генерации.\nКогда этот параметр выключен, ответы будут отображаться все сразу после их завершения.", - "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "Генерируйте только одну строку для каждого запроса (только KoboldAI, игнорируется KoboldCpp).", - "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "Запретите токен конца последовательности (EOS) (с помощью KoboldCpp и, возможно, также других токенов с помощью KoboldAI).", - "Good for story writing, but should not be used for chat and instruct mode.": "Подходит для написания историй, но не должен использоваться в режиме чата и инструктирования.", - "Enhance Definitions": "Улучшенная узнаваемость", - "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "Позволяет использовать базу знаний, улучшающую узнаваемость ИИ публичных лиц и вымышленных персонажей", - "Wrap in Quotes": "Заключать в кавычки", - "Wrap entire user message in quotes before sending.": "Заключить всё сообщение пользователя в кавычки перед отправкой.", - "Leave off if you use quotes manually for speech.": "Оставьте выключенным, если вручную выставляете кавычки для прямой речи.", - "Main prompt": "Основная инструкция", - "The main prompt used to set the model behavior": "Основная инструкция, используемая для установки поведения модели", - "NSFW prompt": "NSFW-инструкция", - "Prompt that is used when the NSFW toggle is on": "Инструкция, отправляемая ИИ при включенном поощрении NSFW.", - "Jailbreak prompt": "Инструкция для JailBreak", - "Prompt that is used when the Jailbreak toggle is on": "Инструкция, отправляемая ИИ при включенном JailBreak.", - "Impersonation prompt": "Инструкция для перевоплощения", - "Prompt that is used for Impersonation function": "Инструкция, отправляемая ИИ для генерации действий за пользователя", - "Logit Bias": "Ошибка логита", - "Helps to ban or reenforce the usage of certain words": "Позволяет запретить или поощрять использование определенных слов", - "View / Edit bias preset": "Посмотреть/Настроить предустановку для bias", - "Add bias entry": "Добавить инструкцию в Bias", - "Jailbreak activation message": "Сообщение об активации JailBreak", - "Message to send when auto-jailbreak is on.": "Сообщение, отправляемое когда автоматический JailBreak включен.", - "Jailbreak confirmation reply": "Подтверждение JailBreak", - "Bot must send this back to confirm jailbreak": "Это сообщение будет отправлено ИИ при успешном включении JailBreak.", - "Character Note": "Заметки о персонаже", - "Influences bot behavior in its responses": "Влияет на поведение ИИ и его ответы.", - "Connect": "Подключить", - "Test Message": "Тестовое сообщение", - "API": "API", - "KoboldAI": "KoboldAI", - "Use Horde": "Использовать Horde", - "API url": "URL-адрес API", - "PygmalionAI/aphrodite-engine": "PygmalionAI/aphrodite-engine (Режим обёртки API OpenAI)", - "Register a Horde account for faster queue times": "Заведите учетную запись Horde для ускорения генерации", - "Learn how to contribute your idle GPU cycles to the Hord": "Узнайте подробнее о том, как использовать время простоя GPU для Hord", - "Adjust context size to worker capabilities": "Уточнить размер контекста в соответствии с возможностями рабочих машин", - "Adjust response length to worker capabilities": "Уточнить длинну ответа в соответствии с возможностями рабочих машин", - "API key": "API-ключ", - "Tabby API key": "Tabby API-ключ", - "Get it here:": "Получить здесь:", - "Register": "Регистрация", - "TogetherAI Model": "Модель TogetherAI", - "Example: 127.0.0.1:5001": "Пример: http://127.0.0.1:5001", - "ggerganov/llama.cpp": "ggerganov/llama.cpp (сервер вывода)", - "Example: 127.0.0.1:8080": "Пример: http://127.0.0.1:8080", - "Example: 127.0.0.1:11434": "Пример: http://127.0.0.1:11434", - "Ollama Model": "Модель Ollama", - "Download": "Скачать", - "TogetherAI API Key": "TogetherAI API-ключ", - "-- Connect to the API --": "-- Подключитесь к API --", - "View my Kudos": "Посмотреть мой рейтинг(Kudos)", - "Enter": "Вставьте", - "to use anonymous mode.": "чтобы использовать анонимный режим.", - "For privacy reasons": "В целях конфиденциальности API-ключ будет скрыт после перезагрузки страницы", - "Models": "Модели", - "Hold Control / Command key to select multiple models.": "Удерживайте Control / Command для выбора нескольких моделей.", - "Horde models not loaded": "Модели Horde не загружены", - "Not connected...": "Не подключено...", - "Novel API key": "API-ключ для NovelAI", - "Follow": "Следуйте", - "these directions": "данным инструкциям", - "to get your NovelAI API key.": "чтобы получить свой API-ключ от NovelAI", - "Enter it in the box below": "Введите это в окошко ниже", - "Novel AI Model": "Модель NovelAI", - "If you are using:": "Если вы используете:", - "oobabooga/text-generation-webui": "", - "Make sure you run it with": "Убедитесь, что вы запустили его с", - "flag": "флажком", - "API key (optional)": "Ключ API (опционально)", - "Server url": "URL-адрес сервера", - "Custom model (optional)": "Пользовательская модель (опционально)", - "Bypass API status check": "Обход проверки статуса API", - "Mancer AI": "", - "Use API key (Only required for Mancer)": "Нажмите на ячейку (и добавьте свой API ключ!):", - "Blocking API url": "Блокирующий API url", - "Example: 127.0.0.1:5000": "Пример: http://127.0.0.1:5000", - "Legacy API (pre-OAI, no streaming)": "Устаревший API (до OAI, без потоковой передачи)", - "Bypass status check": "Обход проверки статуса", - "Streaming API url": "Потоковый API URL", - "Example: ws://127.0.0.1:5005/api/v1/stream": "Пример: ws://127.0.0.1:5005/api/v1/stream", - "Mancer API key": "Mancer API ключ", - "Example: https://neuro.mancer.tech/webui/MODEL/api": "Пример: https://neuro.mancer.tech/webui/MODEL/api", - "to get your OpenAI API key.": "для получения API-ключа OpenAI", - "Window AI Model": "Модель Window AI", - "OpenAI Model": "Модель OpenAI", - "Claude API Key": "Claude API ключ", - "Get your key from": "Получить ключ из", - "Anthropic's developer console": "Консоли разработчика Anthropic", - "Slack and Poe cookies will not work here, do not bother trying.": "Файлы cookie Slack и Poe здесь не подойдут, не пытайтесь.", - "Claude Model": "Модель Claude", - "Scale API Key": "Scale API ключ", - "Alt Method": "Альтернативный метод", - "AI21 API Key": "AI21 API ключ", - "AI21 Model": "Модель AI21", - "View API Usage Metrics": "Посмотреть статистику использования API", - "Show External models (provided by API)": "Показать \"сторонние\" модели (предоставленные API)", - "Bot": "Бот:", - "Allow fallback routes": "Разрешить резервные маршруты", - "Allow fallback routes Description": "Автоматически выбирает альтернативную модель, если выбранная модель не может удовлетворить ваш запрос.", - "OpenRouter API Key": "OpenRouter API ключ", - "Connect to the API": "Соединение с API", - "OpenRouter Model": "Модель OpenRouter", - "View Remaining Credits": "Посмотреть оставшиеся кредиты", - "Click Authorize below or get the key from": "Нажмите «Авторизовать» ниже или получите ключ от", - "Auto-connect to Last Server": "Автоматическое подключение к последнему серверу", - "View hidden API keys": "Посмотреть скрытые API-ключи", - "Advanced Formatting": "Расширенное форматирование", - "Context Template": "Шаблон контекста", - "AutoFormat Overrides": "Замена АвтоФормата", - "Disable description formatting": "Отключить форматирование описания", - "Disable personality formatting": "Отключить форматирование личности", - "Disable scenario formatting": "Отключить форматирование сценария", - "Disable example chats formatting": "Отключить форматирование примеров чата", - "Disable chat start formatting": "Отключить форматирование начала чата", - "Custom Chat Separator": "Пользовательское разделение чата", - "Replace Macro in Custom Stopping Strings": "Заменить макрос в пользовательских стоп-строках", - "Strip Example Messages from Prompt": "Удалить примеры сообщений из подсказки", - "Story String": "Строка истории", - "Example Separator": "Пример разделителя", - "Chat Start": "Начало чата", - "Activation Regex": "Активация Regex", - "Instruct Mode": "Режим \"Инструктаж\"", - "Wrap Sequences with Newline": "Отделять последовательности красной строкой", - "Include Names": "Показывать имена", - "Force for Groups and Personas": "Усилия для Групп и Персон", - "System Prompt": "Системная инструкция", - "Instruct Mode Sequences": "Последовательности режима обучения", - "Input Sequence": "Входная последовательность", - "Output Sequence": "Выходная последовательность", - "First Output Sequence": "Первая выходная последовательность", - "Last Output Sequence": "Последняя выходная последовательность", - "System Sequence Prefix": "Префикс системной последовательности", - "System Sequence Suffix": "Суффикс системной последовательности", - "Stop Sequence": "Последовательность остановки", - "Context Formatting": "Форматирование контекста", - "(Saved to Context Template)": "(Сохраняется в шаблоне контекста)", - "Tokenizer": "Токенайзер", - "None / Estimated": "Отсутствует/Приблизительно", - "Sentencepiece (LLaMA)": "Sentencepiece (LLaMA)", - "Token Padding": "Заполнение токенов", - "Save preset as": "Сохранить предустановку как", - "Always add character's name to prompt": "Всегда добавлять имя персонажа в инструкции", - "Use as Stop Strings": "Использование в качестве стоп-строк", - "Bind to Context": "Привязка к контексту", - "Generate only one line per request": "Генерировать только одну строку для каждого запроса", - "Misc. Settings": "Доп. настройки", - "Auto-Continue": "Авто продолжение", - "Collapse Consecutive Newlines": "Свернуть последовательные новые строки", - "Allow for Chat Completion APIs": "Разрешить API завершения чата", - "Target length (tokens)": "Целевая длина (токены)", - "Keep Example Messages in Prompt": "Сохранять примеры сообщений в инструкции", - "Remove Empty New Lines from Output": "Удалять пустые строчки из вывода", - "Disabled for all models": "Выключено для всех моделей", - "Automatic (based on model name)": "Автоматически (выбор по названию модели)", - "Enabled for all models": "Включить для всех моделей", - "Anchors Order": "Порядок Anchors", - "Character then Style": "Персонаж после Стиля", - "Style then Character": "Стиль после Персонажа", - "Character Anchor": "Anchors Персонажа", - "Style Anchor": "Стиль Anchors", - "World Info": "Информация о мире", - "Scan Depth": "Глубина сканирования", - "Case-Sensitive": "С учетом регистра", - "Match Whole Words": "Сопоставить целые слова", - "Use global setting": "Использовать глобальную настройку", - "Yes": "Да", - "No": "Нет", - "Context %": "Процент контекста", - "Budget Cap": "Бюджетный лимит", - "(0 = disabled)": "(0 = отключено)", - "depth": "глубина", - "Token Budget": "Объем токенов", - "budget": "объем", - "Recursive scanning": "Рекурсивное сканирование", - "None": "Отсутствует", - "User Settings": "Настройки пользователя", - "UI Mode": "Режим интерфейса", - "UI Language": "Язык интерфейса", - "MovingUI Preset": "Предустановка MovingUI", - "UI Customization": "Настройки интерфейса", - "Avatar Style": "Стиль аватаров", - "Circle": "Круглые", - "Rectangle": "Прямоугольные", - "Square": "Квадратные", - "Chat Style": "Стиль чата", - "Default": "По умолчанию", - "Bubbles": "Пузыри", - "No Blur Effect": "Отключить эффект размытия", - "No Text Shadows": "Отключить тень от текста", - "Waifu Mode": "Рeжим Вайфу", - "Message Timer": "Таймер сообщений", - "Model Icon": "Показать значки модели", - "# of messages (0 = disabled)": "# сообщений (0 = отключено)", - "Advanced Character Search": "Расширенный поиск персонажей", - "Allow {{char}}: in bot messages": "Показывать {{char}}: в ответах", - "Allow {{user}}: in bot messages": "Показать {{user}}: в ответах", - "Show tags in responses": "Показывать <теги> в ответах", - "Aux List Field": "Вспомогательное поле списка", - "Lorebook Import Dialog": "Импрот Lorebook-ка", - "MUI Preset": "Предустановка MUI:", - "If set in the advanced character definitions, this field will be displayed in the characters list.": "Если это поле задано в расширенных параметрах персонажа, оно будет отображаться в списке персонажа.", - "Relaxed API URLS": "Смягченные URL-адреса API", - "Custom CSS": "Пользовательский CSS", - "Default (oobabooga)": "По умолчанию (oobabooga)", - "Mancer Model": "Модель Mancer", - "API Type": "Тип API", - "Aphrodite API key": "API-ключ Aphrodite", - "Relax message trim in Groups": "Расслабленная отделка сообщений в Группах", - "Characters Hotswap": "Смена персонажей на лету", - "Request token probabilities": "Вероятность запроса токена", - "Movable UI Panels": "Перемещение панелей интерфейса", - "Reset Panels": "Сбросить MovingUI", - "UI Colors": "Цвета интерфейса", - "Main Text": "Основной текст", - "Italics Text": "Курсивный текст", - "Quote Text": "Текст в кавычках", - "Shadow Color": "Цвет теней", - "FastUI BG": "Фон FastUI", - "Blur Tint": "Оттенок размытия", - "Font Scale": "Размер текста", - "Blur Strength": "Сила размытия", - "Text Shadow Width": "Размер теней текста", - "UI Theme Preset": "Предустановки интерфейса", - "Power User Options": "Продвинутые параметры", - "Swipes": "Свайвы", - "Miscellaneous": "Разное", - "Theme Toggles": "Переключатели темы", - "Background Sound Only": "Только фоновый звук", - "Auto-load Last Chat": "Автоматически загружать последий чат", - "Auto-save Message Edits": "Автоматически сохранять отредактированные сообщения", - "Auto-fix Markdown": "Автоматическое исправление подчеркиваний", - "Allow : in bot messages": "Разрешить : в сообщениях ИИ", - "Auto-scroll Chat": "Автоматическая прокрутка чата", - "Render Formulas": "Рендер формул", - "Send on Enter": "Отправка на Enter", - "Always disabled": "Всегда выключена", - "Automatic (desktop)": "Автоматически (системные настройки)", - "Always enabled": "Всегда включена", - "Debug Menu": "Меню отладки", - "Restore User Input": "Восстановить запрос пользователя", - "Character Handling": "Обработка персонажа", - "Example Messages Behavior": "Пример поведения в сообщениях:", - "Gradual push-out": "Постепенное выталкивание", - "Chat/Message Handling": "Обработка чата/сообщения", - "Always include examples": "Всегда включать примеры", - "Never include examples": "Никогда не включать примеры", - "Forbid External Media": "Запрет внешних медиа", - "System Backgrounds": "Системные фоны", - "Name": "Имя", - "Your Avatar": "Ваш Аватар", - "Extensions API:": "API для расширений", - "SillyTavern-extras": "SillyTavern-extras", - "Auto-connect": "Автоматическое соединение", - "Active extensions": "Актививные расширения", - "Extension settings": "Настройки расширений", - "Description": "Описание", - "First message": "Первое сообщение", - "Group Controls": "Контроль группы", - "Group reply strategy": "Сортировка ответов в группе", - "Natural order": "Обычный порядок", - "List order": "Порядок по листу", - "Allow self responses": "Разрешить ответ себе", - "Auto Mode": "Автоматический режим", - "Add Members": "Добавить членов", - "Current Members": "Текущие члены", - "text": "текст", - "Delete": "Удалить", - "Cancel": "Отменить", - "Advanced Defininitions": "Улучшенная узнаваемость", - "Personality summary": "Личная сводка", - "A brief description of the personality": "Краткое описание личности", - "Scenario": "Сценарий", - "Circumstances and context of the dialogue": "Обстоятельства и контекст диалога", - "Talkativeness": "Разговорчивость", - "How often the chracter speaks in": "Как часто персонаж говорит", - "group chats!": "в груповых чатах", - "Shy": "Застенчивый", - "Normal": "Обычный", - "Chatty": "Разговорчивый", - "Examples of dialogue": "Примеры диалога", - "Forms a personality more clearly": "Определите личность более точно", - "Save": "Сохранить", - "World Info Editor": "Редактирование информации о мире", - "New summary": "Новая переменная", - "Export": "Экспорт", - "Delete World": "Удалить мир", - "Chat History": "История чата", - "Group Chat Scenario Override": "Замещение сценария группового чата", - "All group members will use the following scenario text instead of what is specified in their character cards.": "Все участники группы будут использовать следующий сценарий, вместо обозначенного в карточках персонажей", - "Keywords": "Ключевые слова", - "Separate with commas": "Разделять запятыми", - "Secondary Required Keywords": "Вторичные ключевые слова", - "Content": "Содержание", - "What this keyword should mean to the AI": "Значение данного ключевого слова для ИИ", - "Memo/Note": "Напоминание", - "Not sent to AI": "Не отправлять ИИ", - "Constant": "Постоянно", - "Selective": "Выборочно", - "Before Char": "Перед Персонажем", - "After Char": "После Персонажа", - "Insertion Order": "Порядок внесения", - "Tokens:": "Токены", - "Disable": "Отключено", - "${characterName}": "${имяПерсонажа}", - "CHAR": "ПЕРСОНАЖ", - "is typing": "Печатает...", - "Back to parent chat": "Вернуться в основной чат", - "Save bookmark": "Сохранить закладку", - "Convert to group": "Превратить в группу", - "Start new chat": "Начать новый чат", - "View past chats": "Посмотреть прошлые чаты", - "Delete messages": "Удалить сообщения", - "Impersonate": "Перевоплощение", - "Regenerate": "Повторная генерация", - "PNG": "PNG", - "JSON": "JSON", - "presets": "Предустановки", - "Message Sound": "Звук сообщения", - "Author's Note": "Авторские заметки", - "Send Jailbreak": "Отправлять JailBreak", - "Replace empty message": "Заменять пустые сообщения", - "Send this text instead of nothing when the text box is empty.": "Этот текст будет отправлен в случае отсутствия текста на отправку.", - "NSFW avoidance prompt": "Инструкции для избегания NSFW", - "Prompt that is used when the NSFW toggle is off": "Инструкции, используемые, когда поощрение NSFW отключено", - "Advanced prompt bits": "Дополнительные инструкции", - "World Info format": "Шаблон форматирования Информации о мире", - "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "Выделяет активную Информацию о мире перед внесением в инструкции. Используйте {0} чтобы уточнить место с необходимой информацией.", - "Unrestricted maximum value for the context slider": "Неограниченное максимальное значение для ползунка с размером контекста", - "Chat Completion Source": "Источник для Chat Completion", - "Avoid sending sensitive information to the Horde.": "Избегайте отправки личной информации Horde", - "Review the Privacy statement": "Ознакомиться с заявлением о конфиденциальности", - "Learn how to contribute your idel GPU cycles to the Horde": "Изучите, как использовать GPU в состоянии простоя на благо Horde", - "Trusted workers only": "Только доверенные рабочие машины", - "For privacy reasons, your API key will be hidden after you reload the page.": "По причинам безопасности ваш API-ключ будет скрыт после перезагрузки страницы.", - "-- Horde models not loaded --": "--Модель Horde не загружена--", - "Example: http://127.0.0.1:5000/api ": "Пример: http://127.0.0.1:5000/api", - "No connection...": "Нет соединения...", - "Get your NovelAI API Key": "Получите свой API-ключ для NovelAI", - "KoboldAI Horde": "KoboldAI Horde", - "Text Gen WebUI (ooba)": "Text Gen WebUI (ooba)", - "NovelAI": "NovelAI", - "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "Дополнение диалога (OpenAI, Claude, Window/OpenRouter, Scale)", - "OpenAI API key": "API-ключ для OpenAI", - "Trim spaces": "Обрезать пробелы", - "Trim Incomplete Sentences": "Обрезать неоконченные предложения", - "Include Newline": "Использовать красную строку", - "Non-markdown strings": "Строки без разметки", - "Replace Macro in Sequences": "Заменить макросы в последовательности", - "Presets": "Предустановки", - "Separator": "Разделитель", - "Start Reply With": "Начинать ответ с", - "Show reply prefix in chat": "Показывать префиксы ответов в чате", - "Worlds/Lorebooks": "Миры/Lorebook-ки", - "Active World(s)": "Активные миры", - "Activation Settings": "Настройки активации", - "Character Lore Insertion Strategy": "Порядок включения сведений", - "Sorted Evenly": "Равномерная сортировка", - "Active World(s) for all chats": "Активные миры для всех чатов", - "-- World Info not found --": "-- Информация о мире не найдена --", - "--- Pick to Edit ---": "--- Редактировать ---", - "or": "или", - "New": "Новый", - "Priority": "Приритет", - "Custom": "Пользовательский", - "Title A-Z": "Название от A до Z", - "Title Z-A": "Название от Z до A", - "Tokens ↗": "Токены ↗", - "Tokens ↘": "Токены ↘", - "Depth ↗": "Глубина ↗", - "Depth ↘": "Глубина ↘", - "Order ↗": "Порядок ↗", - "Order ↘": "Порядок ↘", - "UID ↗": "Уник. ID ↗", - "UID ↘": "Уник. ID ↘", - "Trigger% ↗": "Триггер% ↗", - "Trigger% ↘": "Триггер% ↘", - "Order:": "Порядок:", - "Depth:": "Глубина:", - "Character Lore First": "Сначала сведения о персонаже", - "Global Lore First": "Сначала общие сведения", - "Recursive Scan": "Рекурсивное сканирование", - "Case Sensitive": "Учитывать регистр", - "Match whole words": "Только полное совпадение", - "Alert On Overflow": "Оповещение о переполнении", - "World/Lore Editor": "Редактировать Мир/Сведения", - "--- None ---": "---Отсутствует---", - "Comma seperated (ignored if empty)": "Разделение запятыми (не используется, если оставлено пустым)", - "Use Probability": "Использовать вероятность", - "Exclude from recursion": "Исключить из рекурсии", - "Entry Title/Memo": "Вставьте Название/Заметку", - "Position:": "Положение:", - "T_Position": "↑Char: Перед определениями Персонажа\n↓Char: После определений Персонажа\n↑AN: Перед Авторскими заметками\n↓AN: После Авторских заметок\n@D: На глубине", - "Before Char Defs": "↑Перс.", - "After Char Defs": "↓Перс.", - "Before AN": "↑АЗ", - "After AN": "↓АЗ", - "at Depth": "@Г", - "Order": "Порядок:", - "Probability:": "Вероятность:", - "Update a theme file": "Обновить файл темы", - "Save as a new theme": "Сохранить как новую тему", - "Minimum number of blacklisted words detected to trigger an auto-swipe": "Минимальное количество обнаруженных слов в черном списке для запуска авто-свайпа.", - "Delete Entry": "Удалить запись:", - "User Message Blur Tint": "Сообщение пользователя", - "AI Message Blur Tint": "Сообщение ИИ", - "Chat Backgrounds": "Фоны чата", - "Chat Background": "Фон чата", - "UI Background": "Фон интерфейса", - "Mad Lab Mode": "Режим безумца", - "Show Message Token Count": "Счетчик токенов сообщения", - "Compact Input Area (Mobile)": "Компактная зона ввода", - "Zen Sliders": "Дзен слайдеры", - "UI Border": "Границы интерфейса", - "Chat Style:": "Стиль чата", - "Chat Width (PC)": "Ширина чата (для ПК)", - "Chat Timestamps": "Временные метки в чате", - "Tags as Folders": "Теги как папки", - "Chat Truncation": "Усечение чата", - "(0 = unlimited)": "(0 = неограниченное)", - "Streaming FPS": "Потоковый FPS", - "Gestures": "Жесты", - "Message IDs": "ID сообщений", - "Prefer Character Card Prompt": "Предпочитать инструкции из Карточки Персонажа", - "Prefer Character Card Jailbreak": "Предпочитать Джеилбреик из Карточки Персонажа", - "Press Send to continue": "Нажатие 'Отправить' для продолжения", - "Quick 'Continue' button": "Кнопка быстрого 'Продолжения'", - "Log prompts to console": "Выводы журнала в консоли", - "Never resize avatars": "Никогда не менять размер аватаров", - "Show avatar filenames": "Показывать названия файлов аватаров", - "Import Card Tags": "Импорт тегов Карточки", - "Confirm message deletion": "Подтверждение удаления сообщений", - "Spoiler Free Mode": "Режим без спойлеров", - "Auto-swipe": "Автоматические свайпы", - "Minimum generated message length": "Минимальная длина сгенерированных сообщений", - "Blacklisted words": "Запрещенные слова", - "Blacklisted word count to swipe": "Количество запрещенных слов для свайпа", - "Reload Chat": "Перезагрузить чат", - "Search Settings": "Поиск настроек", - "Disabled": "Отключено", - "Automatic (PC)": "Автоматическое (ПК)", - "Enabled": "Включено", - "Simple": "Простой", - "Advanced": "Расширенный", - "Disables animations and transitions": "Отключение анимаций и переходов.", - "removes blur from window backgrounds": "Убрать размытие с фона окон, чтобы ускорить рендеринг.", - "Remove text shadow effect": "Удаление эффекта тени от текста.", - "Reduce chat height, and put a static sprite behind the chat window": "Уменьшитm высоту чата и поместить статичный спрайт за окном чата.", - "Always show the full list of the Message Actions context items for chat messages, instead of hiding them behind '...'": "Всегда показывать полный список контекстных элементов 'Действия с сообщением' для сообщений чата, а не прятать их за '...'.", - "Alternative UI for numeric sampling parameters with fewer steps": "Альтернативный пользовательский интерфейс для числовых параметров выборки с меньшим количеством шагов.", - "Entirely unrestrict all numeric sampling parameters": "Полностью разграничить все числовые параметры выборки.", - "Time the AI's message generation, and show the duration in the chat log": "Время генерации сообщений ИИ и его показ в журнале чата.", - "Show a timestamp for each message in the chat log": "Показывать временную метку для каждого сообщения в журнале чата.", - "Show an icon for the API that generated the message": "Показать значок API, сгенерировавшего сообщение.", - "Show sequential message numbers in the chat log": "Показывать порядковые номера сообщений в журнале чата.", - "Show the number of tokens in each message in the chat log": "Показать количество токенов в каждом сообщении в журнале чата.", - "Single-row message input area. Mobile only, no effect on PC": "Однорядная область ввода сообщений. Только для мобильных устройств, на ПК не работает.", - "In the Character Management panel, show quick selection buttons for favorited characters": "На панели управления персонажами отображають кнопки быстрого выбора для избранных персонажей.", - "Show tagged character folders in the character list": "Отобразить теговые папки с персонажами в списке персонажей.", - "Play a sound when a message generation finishes": "Воспроизведение звука при завершении генерации сообщения.", - "Only play a sound when ST's browser tab is unfocused": "Воспроизводить звук только тогда, когда вкладка браузера ST не выбрана.", - "Reduce the formatting requirements on API URLs": "Снижение требований к форматированию URL-адресов API.", - "Ask to import the World Info/Lorebook for every new character with embedded lorebook. If unchecked, a brief message will be shown instead": "Запросить импорт информации о мире/Lorebook для каждого нового персонажа со встроенным Lorebook. Если флажок снят, вместо этого будет показано короткое сообщение.", - "Restore unsaved user input on page refresh": "Восстановление несохраненного пользовательского запроса при обновлении страницы.", - "Allow repositioning certain UI elements by dragging them. PC only, no effect on mobile": "Позволяет изменять положение некоторых элементов пользовательского интерфейса путем их перетаскивания. Только для ПК, на мобильных не работает.", - "MovingUI preset. Predefined/saved draggable positions": "Предварительная настройка MovingUI. Предопределенные/сохраненные позиции для перетаскивания.", - "Save movingUI changes to a new file": "Сохранение изменений перемещаемого пользовательского интерфейса в новый файл.", - "Apply a custom CSS style to all of the ST GUI": "Применить пользовательский стиль CSS ко всем элементам графического интерфейса ST.", - "Use fuzzy matching, and search characters in the list by all data fields, not just by a name substring": "Использовать нечеткое сопоставление и искать символы в списке по всем полям данных, а не только по подстроке имени.", - "If checked and the character card contains a prompt override (System Prompt), use that instead": "Если установлен флажок и карточка персонажа содержит переопределение подсказки (Системная подсказка), будет использована она вместо изначальной.", - "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead": "Если установлен флажок и карточка персонажа содержит переопределение джейлбрейка (инструкция Истории сообщений), будет использована он вместо изначального.", - "Avoid cropping and resizing imported character images. When off, crop/resize to 400x600": "Избегать обрезки и изменения размера импортированных изображений персонажей. Если выключено, обрезать/изменить размер до 400x600.", - "Show actual file names on the disk, in the characters list display only": "Отображение фактических имен файлов на диске, только в списке персонажей.", - "Prompt to import embedded card tags on character import. Otherwise embedded tags are ignored": "Запрос на импорт встроенных тегов карт при импорте персонажей. В противном случае встроенные теги игнорируются.", - "Hide character definitions from the editor panel behind a spoiler button": "Скрыть определения персонажей из панели редактора за кнопкой спойлера.", - "Show a button in the input area to ask the AI to continue (extend) its last message": "Показать кнопку в области ввода, чтобы попросить ИИ продолжить (продлить) его последнее сообщение.", - "Show arrow buttons on the last in-chat message to generate alternative AI responses. Both PC and mobile": "Показывать кнопки со стрелками на последнем сообщении в чате, чтобы генерировать альтернативные ответы ИИ. Как для ПК, так и для мобильных устройств.", - "Allow using swiping gestures on the last in-chat message to trigger swipe generation. Mobile only, no effect on PC": "Позволяет использовать жесты смахивания на последнем сообщении в чате, чтобы вызвать альтернативную генерацию. Только для мобильных устройств, на ПК не работает.", - "Save edits to messages without confirmation as you type": "Сохранять правки в сообщениях без подтверждения при вводе текста.", - "Render LaTeX and AsciiMath equation notation in chat messages. Powered by KaTeX": "Отображение нотации уравнений LaTeX и AsciiMath в сообщениях чата. При поддержке KaTeX.", - "Disalow embedded media from other domains in chat messages": "Запретить встроенные медиафайлы из других доменов в сообщениях чата.", - "Skip encoding and characters in message text, allowing a subset of HTML markup as well as Markdown": "Не кодировать символы < и > в тексте сообщения, что позволяет использовать подмножество HTML-разметки, а также Markdown.", - "Allow AI messages in groups to contain lines spoken by other group members": "Разрешить в групповых сообщениях AI содержать реплики, произнесенные другими членами группы.", - "Requests logprobs from the API for the Token Probabilities feature": "Запросить логпробы из API для функции Token Probabilities.", - "Automatically reject and re-generate AI message based on configurable criteria": "Автоматическое отклонение и повторная генерация сообщений AI на основе настраиваемых критериев.", - "Enable the auto-swipe function. Settings in this section only have an effect when auto-swipe is enabled": "Включить функцию автоматического пролистывания. Настройки в этом разделе действуют только при включенном автопролистывании.", - "If the generated message is shorter than this, trigger an auto-swipe": "Если сгенерированное сообщение короче этого значения, срабатывает авто-свайп.", - "Reload and redraw the currently open chat": "Перезагрузить и перерисовать открытый в данный момент чат.", - "Auto-Expand Message Actions": "Развернуть контекстные элементы", - "Not Connected": "Не подключено", - "Persona Management": "Управление Персоной", - "Persona Description": "Описание Персоны", - "Your Persona": "Ваша Персона", - "Show notifications on switching personas": "Показывать уведомления о смене персоны", - "Blank": "Пустой", - "In Story String / Chat Completion: Before Character Card": "В строке истории / Дополнение диалога: Перед Карточкой Персонажа", - "In Story String / Chat Completion: After Character Card": "В строке истории / Дополнение диалога: После Карточки Персонажа", - "In Story String / Prompt Manager": "В строке истории/Менеджер подсказок", - "Top of Author's Note": "Перед Авторскими Заметками", - "Bottom of Author's Note": "После Авторских Заметок", - "How do I use this?": "Как мне это использовать?", - "More...": "Узнать больше...", - "Link to World Info": "Ссылка на информацию о мире", - "Import Card Lore": "Импортировать Карточку Сведений", - "Scenario Override": "Замещение сценария", - "Rename": "Переименовать", - "Character Description": "Описание персонажа", - "Creator's Notes": "Заметки создателя", - "A-Z": "A-Z", - "Z-A": "Z-A", - "Newest": "Новейшие", - "Oldest": "Старейшие", - "Favorites": "Любимые", - "Recent": "Последние", - "Most chats": "Больше всего чатов", - "Least chats": "Меньше всего чатов", - "Back": "Назад", - "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "Замещение инструкций (Для OpenAI/Claude/Scale API, Window/OpenRouter, и Режима Instruct)", - "Insert {{original}} into either box to include the respective default prompt from system settings.": "Внесите {{original}} в любое поле для внесения стандартных инструкций из системных настроек", - "Main Prompt": "Главные инструкции", - "Jailbreak": "Jailbreak", - "Creator's Metadata (Not sent with the AI prompt)": "Сведения о создателе (не отправляются ИИ с инструкциями)", - "Everything here is optional": "Всё в данных полях опционально", - "Created by": "Создано", - "Character Version": "Версия Персонажа", - "Tags to Embed": "Теги для встраивания", - "How often the character speaks in group chats!": "Как часто персонаж говорит в групповых чатах", - "Important to set the character's writing style.": "Важные замечания для стиля написания персонажа", - "ATTENTION!": "ВНИМАНИЕ!", - "Samplers Order": "Порядок семплирования", - "Samplers will be applied in a top-down order. Use with caution.": "Семплирование будет применено в порядке сверху-вниз. Используйте с осторожностью.", - "Repetition Penalty": "Наказание за повторы", - "Rep. Pen. Range.": "Размер наказания за повторы", - "Rep. Pen. Freq.": "Частота наказания за повторы", - "Rep. Pen. Presence": "Наличие наказания за повторы", - "Enter it in the box below:": "Введите в поле ниже:", - "separate with commas w/o space between": "разделять запятыми без пробела", - "Document": "Документ", - "Suggest replies": "Предлагать ответы", - "Show suggested replies. Not all bots support this.": "Показывать предлагаемые ответы. Не все боты поддерживают это.", - "Use 'Unlocked Context' to enable chunked generation.": "Использовать 'Безлимитный контекст' для активации кусочной генерации", - "It extends the context window in exchange for reply generation speed.": "Увеличивает размер контекста в обмен на скорость генерации.", - "Continue": "Продолжить", - "CFG Scale": "Масштаб CFG", - "Editing:": "Изменения", - "AI reply prefix": "Префикс Ответ ИИ", - "Custom Stopping Strings": "Настройка ограничивающий нитей", - "JSON serialized array of strings": "JSON ориентированный набор нитей", - "words you dont want generated separated by comma ','": "Слова, которые вы не хотите генерировать, разделяются запятыми ','", - "Extensions URL": "URL расширений ", - "API Key": "Ключ API", - "Enter your name": "Введите свое имя", - "Name this character": "Назовите этого персонажа", - "Search / Create Tags": "Искать / Создать тэги", - "Describe your character's physical and mental traits here.": "Опишите ментальные и физические черты персонажа здесь", - "This will be the first message from the character that starts every chat.": "Это булет первое сообщение от Персонажа при начале нового чата", - "Chat Name (Optional)": "Название Чата (Необязательно)", - "Filter...": "Отфильтровать...", - "Search...": "Поиск...", - "Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "Все содержание этой ячейки будет заменять стандартный Промт", - "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "Все содержание этой ячейки будет заменять стандартный Джейлбрейк", - "(Botmaker's name / Contact Info)": "Ваше имя / Контакты", - "(If you want to track character versions)": "Если вы хотите отслеживать модель персонажа", - "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "Опишите Персонажа, дайте советы, или упомяните на каких моделях он был протестирован", - "(Write a comma-separated list of tags)": "Запишите лист тэгов, разделяя запятой", - "(A brief description of the personality)": "Краткое описание личности)", - "(Circumstances and context of the interaction)": "(Обстоятельства и контекст этого взаимодействия)", - "(Examples of chat dialog. Begin each example with START on a new line.)": "(Примеры диалога. Начинайте каждый пример с START или новой линией.)", - "Injection text (supports parameters)": "Текст включения (Поддерживает параметры)", - "Injection depth": "Глубина включения", - "Type here...": "Пишите здесь...", - "Comma separated (required)": "Разделять через запятую (Обязательное)", - "Comma separated (ignored if empty)": "Разделять через запятую (Игнорируется если пусто)", - "What this keyword should mean to the AI, sent verbatim": "Что это ключевое слово должно означать для ИИ, отправляется дословно", - "Filter to Character(s)": "Фильтр к персонажу(ам)", - "Character Exclusion": "Исключение персонажей", - "Inclusion Group": "Инклюзивная группа", - "Only one entry with the same label will be activated": "Будет актив. только одна запись с одинаковой меткой", - "-- Characters not found --": "-- Персонаж не найден --", - "Not sent to the AI": "Не отправляется ИИ", - "(This will be the first message from the character that starts every chat)": "(Это будет первое сообщение от персонажа, когда вы начинаете новый чат)", - "Not connected to API!": "Нет подключения к API", - "AI Response Configuration": "Еастройка Ответа ИИ", - "AI Configuration panel will stay open": "Панель Настройки ИИ останется открытой", - "Update current preset": "Обновить текущую настройку", - "Create new preset": "Создать новую настройку", - "Import preset": "Импорт предустановки", - "Export preset": "Экспорт предустановки", - "Delete the preset": "Удалить предустановку", - "Auto-select this preset for Instruct Mode": "Автоматический выбор этой предустановки для режима 'Инструктаж'.", - "Auto-select this preset on API connection": "Автоматический выбор этой предустановки при подключении к API.", - "NSFW block goes first in the resulting prompt": "НСФВ блокировка идет первой при отправки Промта", - "Enables OpenAI completion streaming": "Включить процесс генерации OpenAI", - "Wrap user messages in quotes before sending": "Заключить ответ Пользователя в кавычки", - "Restore default prompt": "Восстановить станндартный промт", - "New preset": "Новая настройка", - "Delete preset": "Удалить настройку", - "Restore default jailbreak": "Восстановить стандартный джейлбрейк", - "Restore default reply": "Восстановить стандартный ответ", - "Restore defaul note": "Восстановить стандартную заметку", - "API Connections": "Соединения API", - "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "Может помочь с плохими ответами ставя в очередь только подтвержденных работников. Может замедлить время ответа.", - "Clear your API key": "Очистить свои ключи API", - "Refresh models": "Обновить модели", - "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Получите свой OpenRouter API токен используя OAuth. У вас будет открыта вкладка openrouter.ai", - "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "Подверждает ваше соединение к API. Знайте, что за это снимут деньги с вашего счета.", - "Create New": "Создать новое", - "Edit": "Изменить", - "Locked = World Editor will stay open": "Закреплено = Редактирование Мира останется открытым", - "Entries can activate other entries by mentioning their keywords": "Записи могут активировать другие записи если в них содержаться ключевые слова", - "Lookup for the entry keys in the context will respect the case": "Большая буква имеет значение при активации ключевого слова", - "If the entry key consists of only one word, it would not be matched as part of other words": "Если ключевое слово состоит только из одного слова, оно не будет активироваться как часть других слов", - "Open all Entries": "Открыть все Записи", - "Close all Entries": "Закрыть все Записи", - "Create": "Создать", - "Import World Info": "Импортировать Мир", - "Export World Info": "Экспортировать Мир", - "Delete World Info": "Удалить Мир", - "Duplicate World Info": "Дублировать Мир", - "Rename World Info": "Переименовать Мир", - "Refresh": "Обновить", - "Primary Keywords": "Основные ключевые слова", - "Logic": "Логика", - "AND ANY": "И ЛЮБОЙ", - "AND ALL": "И ВСЕ", - "NOT ALL": "НЕ ВСЕ", - "NOT ANY": "НЕ ЛЮБОЙ", - "Optional Filter": "Дополнительный фильтр", - "New Entry": "Новая Запись", - "Fill empty Memo/Titles with Keywords": "Заполните пустые Заметки/Названия ключевыми словами", - "Save changes to a new theme file": "Сохранить изменения в новой теме", - "removes blur and uses alternative background color for divs": "убирает размытие и использует альтернативный фон для разделов", - "AI Response Formatting": "Формат ответа ИИ", - "Change Background Image": "Изменить фон", - "Extensions": "Расширения", - "Click to set a new User Name": "Нажмите, чтобы задать новое имя пользователя.", - "Click to lock your selected persona to the current chat. Click again to remove the lock.": "Нажмите, чтобы закрепить выбранную персону за текущим чатом. Нажмите еще раз, чтобы снять блокировку.", - "Click to set user name for all messages": "Нажмите, чтобы задать имя пользователя для всех сообщений.", - "Create a dummy persona": "Создать болванку", - "Character Management": "Управление Персонажами", - "Locked = Character Management panel will stay open": "Закреплено = Панель Управление Персонажами останется открытой ", - "Select/Create Characters": "Выбрать/Создать персонажа", - "Token counts may be inaccurate and provided just for reference.": "Счетчик токенов может быть неточным и используется только для примера", - "Click to select a new avatar for this character": "Нажмите что бы выбрать новый аватар для этого персонажа", - "Example: [{{user}} is a 28-year-old Romanian cat girl.]": "Пример:\n [{{user}} is a 28-year-old Romanian cat girl.]", - "Toggle grid view": "Переключить вид сетки", - "Add to Favorites": "Добавить в Любимые", - "Advanced Definition": "Расширенные Определения", - "Character Lore": "Сведения Персонажа", - "Export and Download": "Экспортировать и Скачать", - "Duplicate Character": "Дублировать персонажа", - "Create Character": "Создать персонажа", - "Delete Character": "Удалить персонажа", - "View all tags": "Показать все тэги", - "Click to set additional greeting messages": "Нажмите что бы создать дополнительное вступительное сообщение", - "Show / Hide Description and First Message": "Показать/Убрать Описание и Первое сообщение", - "Click to select a new avatar for this group": "Нажмите что бы выбрать новый аватар для этого группового чата", - "Set a group chat scenario": "Создать сценарий для группового чата", - "Restore collage avatar": "Восстановить коллаж персонажа", - "Create New Character": "Создать нового персонажа", - "Import Character from File": "Внести персонажа из файла", - "Import content from external URL": "Вставить содержимое из внешнего URL", - "Create New Chat Group": "Создать новый групповой чат", - "Characters sorting order": "Упорядовачивание порядка персонажа", - "Add chat injection": "Добавить включение в чат", - "Remove injection": "Убрать включение", - "Remove": "Убрать", - "Select a World Info file for": "Выбрать файл для Информации Мира", - "Primary Lorebook": "Основной Лорбук", - "A selected World Info will be bound to this character as its own Lorebook.": "Информация Мира будет закреплена на персонажем как собственный Лорбук", - "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "Когда ИИ генерирует ответ, в него будет включены заметки из Информации Мира", - "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "Скачивание этого персонажа так же будет включать в себя закрепленный за ним Сведения", - "Additional Lorebooks": "Вспомогательные Сведения", - "Associate one or more auxillary Lorebooks with this character.": "Закрепить этот или еще больше вспомогательных Сведений за этим персонажем", - "NOTE: These choices are optional and won't be preserved on character export!": "ВНИМАНИЕ: Эти выборы необязательные и не будут сохранены при экспорте персонажа", - "Rename chat file": "Переименовать чат", - "Export JSONL chat file": "Создать чат в форме JSONL", - "Download chat as plain text document": "Скачать чат в формте .txt", - "Delete chat file": "Удалить файл этого чата", - "Delete tag": "Удалить тэг", - "Translate message": "Перевести сообщение", - "Generate Image": "Создать изображение", - "Narrate": "Повествовать", - "Prompt": "Промт", - "Create Bookmark": "Создать закладку", - "Copy": "Скопировать", - "Open bookmark chat": "Открыть чат из закладки", - "Confirm": "Подтвердить", - "Copy this message": "Скопировать это сообщение", - "Delete this message": "Удалить это сообщение", - "Move message up": "Переместить сообщение вверх", - "Move message down": "Переместить сообщение вниз", - "Enlarge": "Увеличить", - "Temporarily disable automatic replies from this character": "Временно отключить сообщения от этого персонажа", - "Enable automatic replies from this character": "Включить автоматическую отправку сообщения этого персонажа", - "Trigger a message from this character": "Активировать сообщение этого персонажа", - "Move up": "Переместить вверх", - "Move down": "Переместить вниз", - "View character card": "Посмотреть карточку персонажа", - "Remove from group": "Убрать из группы", - "Add to group": "Добавить в группу", - "Add": "Добавить", - "Abort request": "Прекратить генерацию", - "Send a message": "Отправить сообщение", - "Ask AI to write your message for you": "Попросить ИИ написать для вас сообщение.", - "Continue the last message": "Продолжить текущее сообщение", - "Bind user name to that avatar": "Закрепить имя за этой Персоной", - "Select this as default persona for the new chats.": "Выберать эту Персону в качестве персоны по умолчанию для новых чатов.", - "Change persona image": "Сменить аватар Персоны.", - "Delete persona": "Удалить Персону.", - "Reduced Motion": "Сокращение анимаций", - "Auto-select": "Авто выбор", - "Automatically select a background based on the chat context": "Автоматический выбор фона в зависимости от контекста чата", - "Filter": "Фильтр", - "Exclude message from prompts": "Исключить сообщение из подсказок", - "Include message in prompts": "Включить сообщение в подсказки", - "Create checkpoint": "Создание контрольной точки", - "Create Branch": "Создать Ветку", - "Embed file or image": "Вставить файл или изображение" - }, - "it-it": { - "clickslidertips": "consigli per gli slider", - "kobldpresets": "Preset Kobold", - "guikoboldaisettings": "settaggi KoboldAI", - "novelaipreserts": "Preset NovelAI", - "default": "default", - "openaipresets": "Preset OpenAI", - "text gen webio(ooba) presets": "Preset text gen webio(ooba)", - "response legth(tokens)": "lunghezza risposta (in Token)", - "select": "seleziona", - "context size(tokens)": "dimensione contesto (in Token)", - "unlocked": "Sblocca", - "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "Seleziona il supporto ai modls soltanto se le dimenzioni contesto sono più grandi di 4096 token. Procedi soltanto se sai cosa stai facendo.", - "rep.pen": "rep.pen", - "rep.pen range": "rep.pen range", - "temperature": "temperature", - "Encoder Rep. Pen.": "Encoder Rep. Pen.", - "No Repeat Ngram Size": "Dimensione N-gramma senza ripetizioni", - "Min Length": "lunghezza minima", - "OpenAI Reverse Proxy": "OpenAI Reverse Proxy", - "Alternative server URL (leave empty to use the default value).": "URL del server alternativo (lasciare il campo vuoto per i valori predefiniti).", - "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "Rimuovi la chiave API di OpenAI dal pannello API PRIMA di scrivere qualsiasi cosa in questa casella", - "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "Non possiamo offrire supporto per problemi incontrati durante l'utilizzo di un proxy non ufficiale di OpenAI", - "Legacy Streaming Processing": "Processo Streaming Legacy", - "Enable this if the streaming doesn't work with your proxy": "Spunta la casella se lo streaming non funziona con il tuo proxy.", - "Context Size (tokens)": "Grandezza del contesto (in Token)", - "Max Response Length (tokens)": "Lunghezza risposta massima (in Token)", - "Temperature": "Temperature", - "Frequency Penalty": "Frequency Penalty", - "Presence Penalty": "Presence Penalty", - "Top-p": "Top-p", - "Display bot response text chunks as they are generated": "Mostra la risposta del bot mano a mano che viene generata.", - "Top A": "Top A", - "Typical Sampling": "Typical Sampling", - "Tail Free Sampling": "Tail Free Sampling", - "Rep. Pen. Slope": "Rep. Pen. Slope", - "Single-line mode": "Single-line mode", - "Top K": "Top K", - "Top P": "Top P", - "Typical P": "Typical P", - "Do Sample": "Do Sample", - "Add BOS Token": "Aggiungi BOS Token", - "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative.": "Aggiungi bos_token all'inizio di un prompt. Disattivarlo potrebbe rendere le risposte più creative.", - "Ban EOS Token": "Blocca EOS Token", - "Ban the eos_token. This forces the model to never end the generation prematurely": "Blocca eos_token. Questo costringe il modello a non concludere prematuramente la generazione del testo.", - "Skip Special Tokens": "Salta Token speciali", - "Beam search": "Ricerca Beam", - "Number of Beams": "Numero di Beam", - "Length Penalty": "Length Penalty", - "Early Stopping": "Early Stoppinga", - "Contrastive search": "Contrastive search", - "Penalty Alpha": "Penalty Alpha", - "Seed": "Seed", - "Inserts jailbreak as a last system message.": "Inserisci il Jailbreak come ultimo messaggio di sistema.", - "This tells the AI to ignore its usual content restrictions.": "Questo suggerisce alla IA di ignorare le restrizioni contestualizzate nella chat.", - "NSFW Encouraged": "Stimolare le risposte NSFW", - "Tell the AI that NSFW is allowed.": "Dice all'IA che il materiale NSFW è permesso.", - "NSFW Prioritized": "Dai la precedenza al materiale NSFW", - "NSFW prompt text goes first in the prompt to emphasize its effect.": "Il prompt NSFW viene inviato per prima per enfatizzarne l'effetto.", - "Streaming": "Streaming", - "Display the response bit by bit as it is generated.": "Mostra la risposta mano a mano che viene generata.", - "When this is off, responses will be displayed all at once when they are complete.": "Quando questa casella è disattivata, le risposte vengono mostrate soltanto una volta che il testo è stato ultimato.", - "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "Genera solo una riga per richiesta (solo KoboldAI, ignorata da KoboldCpp).", - "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "Bandire il token End-of-Sequence (EOS) (con KoboldCpp, ed eventualmente anche altri token con KoboldAI).", - "Good for story writing, but should not be used for chat and instruct mode.": "Buono per scrivere storie, ma non dovrebbe essere usato per la modalità chat e istruzioni.", - "Enhance Definitions": "Migliora le definizioni", - "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "Usa la conoscenza di OpenAI per migliorare le definizioni di personaggi pubblici e personaggi immaginari famosi.", - "Wrap in Quotes": "Invia i messaggi tra virgolette", - "Wrap entire user message in quotes before sending.": "Tutti i messaggi verranno inviati sotto forma di dialogo prima di inviarli.", - "Leave off if you use quotes manually for speech.": "Lascia perdere questa opzione se scrivi già da te le citazioni per rappresentare i dialoghi.", - "Main prompt": "Prompt principale", - "The main prompt used to set the model behavior": "Il prompt principale usato come base per il comportamento del modello.", - "NSFW prompt": "Prompt NSFW", - "Prompt that is used when the NSFW toggle is on": "Prompt utilizzato quando l'opzione NSFW è attiva.", - "Jailbreak prompt": "Jailbreak prompt", - "Prompt that is used when the Jailbreak toggle is on": "Prompt utilizzato quando l'opzione Jailbreak è attiva.", - "Impersonation prompt": "Prompt per l'impersonificazione dell'utente", - "Prompt that is used for Impersonation function": "Prompt utilizzato per la funzione di impersonificazione dell'utente", - "Logit Bias": "Logit Bias", - "Helps to ban or reenforce the usage of certain words": "Aiuta a disincentivare o rinforzare l'utilizzo di alcuni tipi di parole.", - "View / Edit bias preset": "Mostra / Modifica bias preset", - "Add bias entry": "Aggiungi voce bias", - "Jailbreak activation message": "Messaggio d'attivazione del Jailbreak", - "Message to send when auto-jailbreak is on.": "Messaggio da inviare quando l'auto-jailbreak è attivato", - "Jailbreak confirmation reply": "Risposta di conferma per il Jailbreak", - "Bot must send this back to confirm jailbreak": "Il bot deve inviare questa risposta per confermare il Jailbreak", - "Character Note": "Note del personaggio", - "Influences bot behavior in its responses": "Influenza il comportamento del bot nelle sue risposte", - "API": "API", - "KoboldAI": "KoboldAI", - "Use Horde": "Usa Horde", - "API url": "Url API", - "Register a Horde account for faster queue times": "Crea un account Horde per tempi di attesa più brevi", - "Learn how to contribute your idle GPU cycles to the Hord": "Impara come utilizzare i tuoi cicli GPU in idle per contribuire a Horde", - "Adjust context size to worker capabilities": "Sistema la grandezza del contesto alle sue capacità operazionali", - "Adjust response length to worker capabilities": "Sistema la lunghezza della risposta alle sue capacità operazionali", - "API key": "Chiave API", - "Register": "Registrati", - "For privacy reasons": "Per motivi di privacy", - "Model": "Modello", - "Hold Control / Command key to select multiple models.": "Mantieni premuto il tasto Control / Comando per selezionare modelli multipli.", - "Horde models not loaded": "Modelli Horde non caricati", - "Not connected": "Non connesso", - "Novel API key": "NovelAI API key", - "Follow": "Segui", - "these directions": "questi suggerimenti", - "to get your NovelAI API key.": "per ottenere la chiave API di NovelAI.", - "Enter it in the box below": "Inserisci la chiave all'interno della casella qui sotto", - "Novel AI Model": "Modello di NovelAI", - "Euterpe": "Euterpe", - "Krake": "Krake", - "No connection": "Nessuna connessione", - "oobabooga/text-generation-webui": "oobabooga/text-generation-webui", - "Make sure you run it with": "assicurati di farlo partire con --extensions openai", - "Blocking API url": "Blocca l'indirizzo API", - "Streaming API url": "Streaming dell'indirizzo API", - "to get your OpenAI API key.": "per ottenere la tua chiave API di OpenAI.", - "OpenAI Model": "Modello di OpenAI", - "View API Usage Metrics": "Mostra le metriche di utilizzo delle API", - "Bot": "Bot", - "Connect to the API": "Connettiti alle API", - "Auto-connect to Last Server": "Connessione automatica all'ultimo server", - "View hidden API keys": "Mostra le chiavi API nascoste", - "Advanced Formatting": "Formattazione avanzata", - "AutoFormat Overrides": "Sovrascrittura AutoFormat", - "Disable description formatting": "Disattiva la formattazione della descrizione", - "Disable personality formatting": "Disattiva la formattazione della personalità", - "Disable scenario formatting": "Disattiva la formattazione dello scenario", - "Disable example chats formatting": "Disattiva la formattazione degli esempi di chat", - "Disable chat start formatting": "Disattiva la formattazione della chat iniziale", - "Custom Chat Separator": "Separatore di chat personalizzato", - "Instruct mode": "Modalità istruzione", - "Enabled": "Attiva", - "Wrap Sequences with Newline": "Ogni sequenza viene rimandata a capo", - "Include Names": "Includi i nomi", - "System Prompt": "Prompt di sistema", - "Instruct Mode Sequences": "Sequenze in modalità istruzione", - "Input Sequence": "Sequenza di input", - "First Output Sequence": "Prima sequenza di output", - "Last Output Sequence": "Ultima sequenza di output", - "System Sequence Prefix": "Prefisso sequenza di sistema", - "System Sequence Suffix": "Suffisso della sequenza del sistema", - "Stop Sequence": "Sequenza d'arresto", - "Context Formatting": "Formattazione del contesto", - "Tokenizer": "Tokenizer", - "None / Estimated": "None / Estimated", - "Sentencepiece (LLaMA)": "Sentencepiece (LLaMA)", - "Token Padding": "Token Padding", - "Always add character's name to prompt": "Aggiungi sempre il nome del personaggio al prompt", - "Keep Example Messages in Prompt": "Mantieni i messaggi d'esempio dal prompt", - "Remove Empty New Lines from Output": "Rimuovi le linee di testo vuote dall'output", - "Pygmalion Formatting": "Formattazione Pygmalion", - "Disabled for all models": "Disattiva per tutti i modelli", - "Automatic (based on model name)": "Automatico (basato sul nome del modello)", - "Enabled for all models": "Attiva per tutti i modelli", - "Multigen": "Multigen", - "First chunk (tokens)": "Primo pacchetto (in Token)", - "Next chunks (tokens)": "Pacchetto successivo (in Token)", - "Anchors Order": "Anchors Order", - "Character then Style": "Prima il personaggio, successivamente lo stile", - "Style then Character": "Prima lo stile, successivamente il personaggio", - "Character Anchor": "Character Anchor", - "Style Anchor": "Style Anchor", - "World Info": "'Info Mondo'", - "Scan Depth": "Profondità della scansione", - "depth": "Profondità", - "Token Budget": "Budget per i Token", - "budget": "budget", - "Recursive scanning": "Analisi ricorsiva", - "None": "None", - "User Settings": "Settaggi utente", - "UI Customization": "Personalizzazione UI", - "Avatar Style": "Stile avatar", - "Circle": "Cerchio", - "Rectangle": "Rettangolo", - "Chat Style": "Stile della Chat", - "Default": "Predefinito", - "Bubbles": "Bolle", - "Chat Width (PC)": "Lunghezza della chat (PC)", - "No Blur Effect": "Nessun effetto sfocatura", - "No Text Shadows": "Nessuna ombreggiatura testo", - "Waifu Mode": "♡ Modalità Waifu ♡", - "Message Timer": "Timer messaggio", - "Characters Hotswap": "Hotswap personaggi", - "Movable UI Panels": "Pannelli UI movibili", - "Reset Panels": "Ripristina i pannelli", - "UI Colors": "Colori UI", - "Main Text": "Testo principale", - "Italics Text": "Testo in Italic", - "Quote Text": "Testo citato", - "Shadow Color": "Colore ombreggiatura", - "FastUI BG": "FastUI BG", - "Blur Tint": "Tinta sfocatura", - "Font Scale": "Grandezza font", - "Blur Strength": "Intensità sfocatura", - "Text Shadow Width": "Larghezza ombreggiatura testo", - "UI Theme Preset": "Tema UI", - "Power User Options": "Opzioni utente avanzate", - "Swipes": "Swipes", - "Background Sound Only": "Soltanto suono di background", - "Auto-load Last Chat": "Carica automaticamente l'ultima chat", - "Auto-save Message Edits": "Salva automaticamente i messaggi editati", - "Auto-fix Markdown": "Correggi automaticamente il testo per la formattazione in Markdown", - "Allow {{char}}: in bot messages": "Permetti {{char}}: nei messaggi del bot", - "Allow {{user}}: in bot messages": "Permetti {{user}}: nei messaggi del bot", - "Auto-scroll Chat": "scorrimento automatico della chat", - "Render Formulas": "Renderizza le formule", - "Send on Enter": "Inoltrare premendo Invio", - "Always disabled": "Sempre disattivato", - "Automatic (desktop)": "Automatico (desktop)", - "Always enabled": "Sempre attivato", - "Name": "Nome", - "Your Avatar": "Il tuo avatar", - "Extensions API:": "Estensioni API aggiuntive:", - "SillyTavern-extras": "SillyTavern-extras", - "Auto-connect": "Connessione automatica", - "Active extensions": "Estensione attiva", - "Extension settings": "Estensione delle impostazioni", - "Description": "Descrizione", - "First message": "Messaggio iniziale", - "Group Controls": "Controlli del gruppo", - "Group reply strategy": "Organizzazione per le risposte del gruppo", - "Natural order": "Ordine naturale", - "List order": "Ordine lista", - "Allow self responses": "Permetti risposta automatica", - "Auto Mode": "Modalità automatica", - "Add Members": "Aggiungi membri", - "Current Members": "Membri correnti", - "text": "Testo", - "Delete": "Elimina", - "Cancel": "Cancella", - "Advanced Defininitions": "Definizioni avanzate", - "Personality summary": "Riassunto della personalità", - "A brief description of the personality": "Una breve descrizione della personalità", - "Scenario": "Scenario", - "Circumstances and context of the dialogue": "Circostanza e contesto del dialogo", - "Talkativeness": "Loquacità", - "How often the chracter speaks in": "Determina la frequenza con la quale il personaggio parla all'interno", - "group chats!": "delle chat di gruppo!", - "Shy": "Timido", - "Normal": "Normale", - "Chatty": "Loquace", - "Examples of dialogue": "Esempi di dialogo", - "Forms a personality more clearly": "Aiuta a formare una personalità in maniera più distinta", - "Save": "Salva", - "World Info Editor": "Editor 'Info Mondo'", - "New Entry": "Nuova voce", - "Export": "Esporta", - "Delete World": "Elimina mondo", - "Chat History": "Cronologia chat", - "Group Chat Scenario Override": "Sovrascrittura dello scenario della chat di gruppo", - "All group members will use the following scenario text instead of what is specified in their character cards.": "Tutti i membri del gruppo useranno il seguente scenario invece di quello specificato nella carta dei personaggi", - "Keywords": "Parole chiave", - "Separate with commas": "Separa con delle virgolette", - "Secondary Required Keywords": "Parole chiave accessorie", - "Content": "Contenuto", - "What this keyword should mean to the AI": "Questa parola chiave cosa dovrebbe significare per L'IA", - "Memo/Note": "Memo/Note", - "Not sent to AI": "Non inviato all'IA", - "Constant": "Costante", - "Selective": "Selettivo", - "Before Char": "Prima di Char", - "After Char": "Dopo Char", - "Insertion Order": "Ordine di inserimento", - "Tokens:": "Token", - "Disable": "Disattiva", - "${characterName}": "${nomePersonaggio}", - "CHAR": "CHAR", - "is typing": "sta scrivendo...", - "Back to parent chat": "Torna indietro nella chat collegata a questa", - "Save bookmark": "Salva nei preferiti", - "Convert to group": "Converti in gruppo", - "Start new chat": "Inizia una nuova chat", - "View past chats": "Mostra chat passate", - "Delete messages": "Elimina messaggi", - "Impersonate": "Impersona", - "Regenerate": "Rigenera", - "PNG": "PNG", - "JSON": "JSON", - "WEBP": "WEBP", - "presets": "preset", - "Message Sound": "Suono del messaggio", - "Author's Note": "Note d'autore", - "Send Jailbreak": "Invia il Jailbreak", - "Replace empty message": "Sostituisci i messaggi vuoti", - "Send this text instead of nothing when the text box is empty.": "Quando il campo di testo è vuoto, invia invece questo messaggio.", - "NSFW avoidance prompt": "NSFW avoidance prompt", - "Prompt that is used when the NSFW toggle is off": "Prompt utilizzato quando la casella NSFW è disattivata.", - "Advanced prompt bits": "Advanced prompt bits", - "World Info format template": "Formato template 'Info Mondo'", - "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "Seleziona le informazioni del mondo attualmente attive prima di inserirle nel prompt. Usa {0} per segnalare dove vuoi che il contenuto venga inserito all'interno del prompt.", - "Unrestricted maximum value for the context slider": "Valore massimo illimitato per la grandezza del contesto.", - "Chat Completion Source": "Sorgente IA per la Chat", - "Avoid sending sensitive information to the Horde.": "Evita di inviare informazioni sensibili e personali a Horde", - "Review the Privacy statement": "Leggi l'informativa sulla privacy", - "Learn how to contribute your idel GPU cycles to the Horde": "Impara come utilizzare i tuoi cicli GPU in idle per contribuire a Horde", - "Trusted workers only": "Utilizza solo utenti di fiducia", - "For privacy reasons, your API key will be hidden after you reload the page.": "Per motivi di sicurezza la tua chiave API verrà oscurata dopo aver ricaricato la pagina.", - "-- Horde models not loaded --": "-- Modelli Horde non caricati --", - "Example: http://127.0.0.1:5000/api ": "Esempio: http://127.0.0.1:5000/api", - "No connection...": "Nessuna connessione", - "Get your NovelAI API Key": "Ottieni la chiave API per NovelAI", - "KoboldAI Horde": "KoboldAI Horde", - "Text Gen WebUI (ooba)": "Text Gen WebUI (ooba)", - "NovelAI": "NovelAI", - "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)", - "OpenAI API key": "Chiave API OpenAI", - "Trim spaces": "Elimina gli spazi", - "Trim Incomplete Sentences": "Taglia le frasi incomplete", - "Include Newline": "Includere il ritorno a capo", - "Non-markdown strings": "Stringhe di formattazione Non-markdown", - "Replace Macro in Sequences": "Sostituisci le macro nelle sequenze", - "Presets": "Preset", - "Separator": "Separatore", - "Start Reply With": "Inizia la risposta con", - "Show reply prefix in chat": "Mostra il prefisso della risposta nella chat", - "Worlds/Lorebooks": "Mondi/Lorebook", - "Active World(s)": "Mondi Attivi", - "Character Lore Insertion Strategy": "Strategia per l'inserimento della lore all'interno del contesto dell'IA", - "Sorted Evenly": "Equamente distribuito", - "Character Lore First": "Per prima la storia del personaggio", - "Global Lore First": "Per prima la lore", - "-- World Info not found --": "-- 'Info Mondo' non trovate --", - "Recursive Scan": "Scannerizzazione ricorsiva", - "Case Sensitive": "Sensibilità alle maiuscole", - "Match whole words": "Abbina mondi interi", - "World/Lore Editor": "Mondo/Editor della storia", - "--- None ---": "--- None ---", - "Comma seperated (ignored if empty)": "Separato dalle virgole (Ignorare se vuoto)", - "Use Probability": "Probabilità di utilizzo", - "Exclude from recursion": "Escludi dalla ricorsività", - "Position:": "Posizione", - "Before Char Defs": "Prima della definizione di Char", - "After Char Defs": "Dopo le definizione di Char", - "Before AN": "Prima delle note d'autore", - "After AN": "Dopo le note d'autore", - "Order:": "Ordine", - "Probability:": "Probabilità:", - "Delete Entry": "Elimina Voce", - "User Message Blur Tint": "Sfocatura sfondo utente", - "AI Message Blur Tint": "Sfocatura sfondo IA", - "Chat Style:": "Stile Chat", - "Chat Width (PC):": "Larghezza riquadro chat (PC)", - "Chat Timestamps": "Timestamp della chat", - "Message IDs": "ID del Messaggio", - "Prefer Character Card Prompt": "Priorità prompt 'Carta Personaggio'", - "Prefer Character Card Jailbreak": "Priorità jailbreak 'Carta Personaggio'", - "Press Send to continue": "Premi Invio per continuare", - "Log prompts to console": "Registro prompt a console", - "Never resize avatars": "Non ridimensionare mai l'avatar", - "Show avatar filenames": "Mostra il nome del file dell'avatar", - "Import Card Tags": "Importa i tag della carta", - "Confirm message deletion": "Conferma l'eliminazione del messaggio", - "Spoiler Free Mode": "Modalità spoiler free", - "Auto-swipe": "Auto-swipe", - "Minimum generated message length": "Lunghezza minima per i messaggi generati", - "Blacklisted words": "Parole nella lista nera", - "Blacklisted word count to swipe": "Numero delle parole nella lista nera", - "Reload Chat": "Ricarica la chat", - "Not Connected": "Non connesso", - "Persona Management": "Gestione del proprio alter ego", - "Persona Description": "Descrizione alter ego", - "Before Character Card": "Prima della 'Carta Personaggio'", - "After Character Card": "Dopo la 'Carta Personaggio'", - "Top of Author's Note": "All'inizio delle note d'autore", - "Bottom of Author's Note": "Alla fine delle note d'autore", - "How do I use this?": "Cos'è e cosa posso farci?", - "More...": "Mostra di più...", - "Link to World Info": "Collegamento 'Info Mondo'", - "Import Card Lore": "Importa la storia dell carta", - "Scenario Override": "Sovrascrittura dello scenario", - "Rename": "Rinomina", - "Character Description": "Descrizione personaggio", - "Creator's Notes": "Note del Creatore", - "A-Z": "A-Z", - "Z-A": "Z-A", - "Newest": "Più recente", - "Oldest": "Meno recente", - "Favorites": "Favoriti", - "Recent": "Recente", - "Most chats": "Più sessioni chat", - "Least chats": "Meno sessioni chat", - "Back": "Indietro", - "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "Sovrascrittura del Prompt (Per le API di OpenAI/Claude/Scale, Window/OpenRouter e Instruct mode)", - "Insert {{original}} into either box to include the respective default prompt from system settings.": "Inserisci {{original}} all'intero della casella per includere i rispettivi prompt predefiniti dai settaggi di sistema.", - "Main Prompt": "Prompt Principale", - "Jailbreak": "Jailbreak", - "Creator's Metadata (Not sent with the AI prompt)": "Metadata del creatore (Non viene inviato all'IA)", - "Everything here is optional": "Tutto ciò che si trova qui è opzionale", - "Created by": "Creato da", - "Character Version": "Versione del personaggio", - "Tags to Embed": "Tag da incorporare", - "How often the character speaks in group chats!": "La frequenza con la quale il personaggio parla all'interno delle chat di gruppo!", - "Important to set the character's writing style.": "È importante per impostare lo stile di scrittura del personaggio", - "ATTENTION!": "ATTENZIONE!", - "Samplers Order": "Ordine dei campionatori", - "Samplers will be applied in a top-down order. Use with caution.": "L'ordine dei campioni va dall'alto verso il basso. Usalo con cautela.", - "Repetition Penalty": "Repetition Penalty", - "Epsilon Cutoff": "Epsilon Cutoff", - "Eta Cutoff": "Eta Cutoff", - "Rep. Pen. Range.": "Rep. Pen. Range.", - "Rep. Pen. Freq.": "Rep. Pen. Freq.", - "Rep. Pen. Presence": "Rep. Pen. Presence.", - "Enter it in the box below:": "Inseriscilo nella casella in basso:", - "separate with commas w/o space between": "Separa con le virgole o degli spazi tra di loro", - "Document": "Documento", - "Continue": "Continua", - "Editing:": "Editing:", - "AI reply prefix": "Prefisso di risposta dell'IA", - "Custom Stopping Strings": "Stringhe d'arresto personalizzate", - "JSON serialized array of strings": "Array di stringhe serializzate JSON", - "words you dont want generated separated by comma ','": "Inserisci le parole che non vuoi siano generate, devono essere separate dalle virgole ','", - "Extensions URL": "Estensioni URL", - "API Key": "Chiave API", - "Enter your name": "Inserisci il tuo nome", - "Name this character": "Dai un nome a questo personaggio", - "Search / Create Tags": "Cerca / Crea tag", - "Describe your character's physical and mental traits here.": "Descrivi le caratteristiche fisiche e psicologiche del tuo personaggio.", - "This will be the first message from the character that starts every chat.": "Questo sarà il primo messaggio che il personaggio utilizzerà all'inizio di ogni chat.", - "Chat Name (Optional)": "Nome della chat (opzionale)", - "Filter...": "Filtro...", - "Search...": "Cerca...", - "Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "Ogni elemento racchiuso qui dentro sostituirà il prompt principale predefinito usato da questo personaggio. (v2 spec: system_prompt)", - "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "Ogni elemento racchiuso qui dentro sostituirà il Jailbreak predefinito usato da questo personaggio. (v2 spec: post_history_instructions)", - "(Botmaker's name / Contact Info)": "(Nome del creatore del bot / Informazioni di contatto)", - "(If you want to track character versions)": "(Se vuoi segnalare la versione del personaggio attuale)", - "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "(Descrivi il bot, scrivi dei suggerimenti o informa riguardo i modelli IA su cui è stato testato. Questo verrà mostrato nella lista personaggio)", - "(Write a comma-separated list of tags)": "(Scrivi una lista di tag separati dalle virgole)", - "(A brief description of the personality)": "(Scrivi una breve descrizione della sua personalità)", - "(Circumstances and context of the interaction)": "(Scrivi le circostanze e il contesto dello scenario)", - "(Examples of chat dialog. Begin each example with START on a new line.)": "(Esempi di dialogo. Inizia ogni esempio con START quando vai a capo.)", - "Injection text (supports parameters)": "Injection text (supporta i parametri)", - "Injection depth": "Profondità dell'Injection", - "Type here...": "Scrivi qui...", - "Comma separated (required)": "Separa le parole con le virgole (necessario)", - "Comma separated (ignored if empty)": "Separa le parole con le virgole (ignora se vuoto)", - "What this keyword should mean to the AI, sent verbatim": "Cosa dovrebbe significare per l'IA questa parola chiave? Riporta tutto fedelmente, parola per parola", - "Not sent to the AI": "Non verrà inviato all'IA", - "(This will be the first message from the character that starts every chat)": "(Questo sarà il primo messaggio inviato dal personaggio all'inizio di ogni chat)", - "Not connected to API!": "Non connesso a nessuna API!", - "AI Response Configuration": "Configurazione della risposta dell'IA", - "AI Configuration panel will stay open": "Se clicchi il lucchetto, il pannello di configurazione dell'IA rimarrà aperto", - "Update current preset": "Aggiorna preset corrente", - "Create new preset": "Crea un nuovo preset", - "Import preset": "Importa preset", - "Export preset": "Esporta preset", - "Delete the preset": "Cancella preset", - "Inserts jailbreak as a last system message": "Inserisci il Jailbreak come ultimo messaggio del sistema", - "NSFW block goes first in the resulting prompt": "Il blocco al contenuto NSFW spunterà per primo nel prompt corrente", - "Enables OpenAI completion streaming": "Attiva 'streaming completion' per OpenAI", - "Wrap user messages in quotes before sending": "Mette tra il messaggio dell'utente in virgolette prima di inviare il messaggio", - "Restore default prompt": "Ripristina il prompt predefinito", - "New preset": "Nuovo preset", - "Delete preset": "Elimina preset", - "Restore default jailbreak": "Ripristina il Jailbreak predefinito", - "Restore default reply": "Ripristina la risposta predefinita", - "Restore defaul note": "Ripristina le note predefinite", - "API Connections": "Connessioni API", - "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "Può aiutare a risolvere il problema delle risposte negative chiedendo di essere messo soltanto in liste di utenti approvati. Potrebbe rallentare i tempi di risposta.", - "Clear your API key": "Cancella la tua chiave API", - "Refresh models": "Aggiorna i modelli", - "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Ottieni i tuoi token per le API di OpenRouter tramite OAuth flow. Verrai reindirizzato alla pagina openrouter.ai", - "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "Verifica la connessione all'API inviando un breve messaggio. Devi comprendere che il messaggio verrà addebitato come tutti gli altri!", - "Create New": "Crea nuovo", - "Edit": "Edita", - "World Info": "'Info Mondo'", - "Locked = World Editor will stay open": "Se clicchi il lucchetto, l'editor del mondo rimarrà aperto", - "Entries can activate other entries by mentioning their keywords": "Le voci possono attivare altre voci menzionando le loro parole chiave", - "Lookup for the entry keys in the context will respect the case": "Fai attenzione alle parole chiave usate, esse rispetteranno le maiuscole", - "If the entry key consists of only one word, it would not be matched as part of other words": "Se la parola chiave consiste in una sola parola, non verrà accoppiata come parte di altre parole", - "Open all Entries": "Apri tutte le voci", - "Close all Entries": "Chiudi tutte le voci", - "Create": "Crea", - "Import World Info": "Importa 'Info Mondo'", - "Export World Info": "Esporta 'Info Mondo'", - "Delete World Info": "Elimina 'Info Mondo'", - "Rename World Info": "Rinomina 'Info Mondo'", - "Save changes to a new theme file": "Salva i cambiamenti in un nuovo file", - "removes blur and uses alternative background color for divs": "rimuovi la sfocatura e utilizza uno sfondo colorato alternativo per 'divs'", - "If checked and the character card contains a prompt override (System Prompt), use that instead.": "Se la casella viene spuntata e la 'Carta Personaggio' contiene una sovrascrittura del prompt (Prompt di sistema), utilizza quello al suo posto.", - "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead.": "Se la casella viene spuntata e la 'Carta Personaggio' contiene una sovrascrittura del Jailbreak (Post History Instruction), utilizza quello al suo posto.", - "AI Response Formatting": "Formattazione della risposta dell'IA", - "Change Background Image": "Cambia l'immagine dello sfondo", - "Extensions": "Estensioni", - "Click to set a new User Name": "Clicca qui per impostare un nuovo nome utente", - "Click to lock your selected persona to the current chat. Click again to remove the lock.": "Clicca qui per bloccare l'alter ego selezionato alla chat corrente. Clicca di nuovo per rimuovere il blocco.", - "Click to set user name for all messages": "Clicca qui per impostare il nome utente per tutti i messaggi", - "Create a dummy persona": "Crea una tuo alter ego fittizio", - "Character Management": "Gestione personaggio", - "Locked = Character Management panel will stay open": "Se clicchi il lucchetto, il pannello di gestione del personaggio rimarrà aperto", - "Select/Create Characters": "Seleziona/Crea Personaggi", - "Token counts may be inaccurate and provided just for reference.": "Il conteggio dei Token potrebbe risultare inaccurato, perciò è da utilizzarsi solo come una approssimazione.", - "Click to select a new avatar for this character": "Clicca qui per selezionare un nuovo avatar per questo personaggio", - "Add to Favorites": "Aggiungi ai favoriti", - "Advanced Definition": "Definizioni avanzate", - "Character Lore": "Storia del personaggio", - "Export and Download": "Esporta e scarica", - "Duplicate Character": "Duplica il personaggio", - "Create Character": "Crea un personaggio", - "Delete Character": "Elimina un personaggio", - "View all tags": "Mostra tutti i tag", - "Click to set additional greeting messages": "Clicca qui per impostare ulteriori messaggi iniziali", - "Show / Hide Description and First Message": "Mostra / Nascondi Descrizione e Primo Messaggio", - "Click to select a new avatar for this group": "Clicca qui per selezionare un nuovo avatar per questo gruppo", - "Set a group chat scenario": "Imposta lo scenario per la chat di gruppo", - "Restore collage avatar": "Ripristina il collage dell'avatar", - "Create New Character": "Crea un nuovo personaggio", - "Import Character from File": "Importa un personaggio da un file", - "Import content from external URL": "Importa il contenuto da un URL esterno", - "Create New Chat Group": "Crea una nuova chat di gruppo", - "Characters sorting order": "Ordina Personaggi per:", - "Add chat injection": "Aggiungi 'chat injection'", - "Remove injection": "Elimina injection", - "Remove": "Elimina", - "Select a World Info file for": "Seleziona un file dell'Informazione Mondo per:", - "Primary Lorebook": "Lorebook Principale", - "A selected World Info will be bound to this character as its own Lorebook.": "La selezione di un 'Info Mondo' sarà legato a questo personaggio come il suo personale Lorebook.", - "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "Quando viene generata una risposta della IA, Sarà fuso con le voci dal selettore globale 'Info Mondo'.", - "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "Esportare un personaggio porterà anche alla esportazione del Lorebook a lui legato nei dati JSON.", - "Additional Lorebooks": "Lorebook Aggiuntivi", - "Associate one or more auxillary Lorebooks with this character.": "Associa uno o più Lorebook ausiliari a questo personaggio.", - "NOTE: These choices are optional and won't be preserved on character export!": "NOTA BENE: Queste scelte sono opzionali e non saranno preservate nel momento dell'esportazione del personaggio!", - "Rename chat file": "Rinomina il file della chat", - "Export JSONL chat file": "Esporta il file della chat in JSONL", - "Download chat as plain text document": "Scarica la chat come documento di testo", - "Delete chat file": "Elimina il file della chat", - "Delete tag": "Elimina tag", - "Translate message": "Traduci messaggio", - "Generate Image": "Genera un'immagine", - "Narrate": "Narra", - "Prompt": "Prompt", - "Create Bookmark": "Crea un segnalibro", - "Copy": "Copia", - "Open bookmark chat": "Apri la chat salvata come segnalibro", - "Confirm": "Conferma", - "Copy this message": "Copia questo messaggio", - "Delete this message": "Cancella questo messaggio", - "Move message up": "Muovi il messaggio in alto", - "Move message down": "Muovi il messaggio in basso", - "Enlarge": "Ingrandisci", - "Temporarily disable automatic replies from this character": "Disattiva temporaneamente le risposte in automatico da parte di questo personaggio", - "Enable automatic replies from this character": "Attiva le risposte in automatico da parte di questo personaggio", - "Trigger a message from this character": "Innesca un messaggio di risposta da parte di questo personaggio", - "Move up": "Muovi sopra", - "Move down": "Muovi sotto", - "View character card": "Mostra la 'Carta Personaggio'", - "Remove from group": "Rimuovi dal gruppo", - "Add to group": "Aggiungi al gruppo", - "Add": "Aggiungi", - "Abort request": "Interrompi la richiesta", - "Send a message": "Invia messaggio", - "Ask AI to write your message for you": "Chiedi all'IA di scrivere un messaggio al posto tuo", - "Continue the last message": "Continua l'ultimo messaggio in chat", - "Bind user name to that avatar": "Lega il nome utente a questo avatar", - "Select this as default persona for the new chats.": "Seleziona questo alter ego come predefinito per tutte le nuove chat", - "Change persona image": "Cambia l'immagine del tuo alter ego", - "Delete persona": "Elimina il tuo alter ego", - "--- Pick to Edit ---": "--- Seleziona per modificare ---", - "Add text here that would make the AI generate things you don't want in your outputs.": "Scrivi ciò che non vuoi l'IA generi nel suo output.", - "write short replies, write replies using past tense": "Scrivi risposte brevi, scrivi risposte usando il passato", - "Alert if your world info is greater than the allocated budget.": "Ti avvisa nel momento in cui 'Info Mondo' consuma più di quanto allocato nel budget.", - "Clear your cookie": "Cancella i cookie", - "Restore new group chat prompt": "Ripristina il prompt della nuova chat di gruppo", - "Save movingUI changes to a new file": "Salva i cambiamenti apportati alla posizione dei pannelli dell'UI (MovingUI) in un nuovo file", - "Export all": "Esporta tutto", - "Import": "Importa", - "Insert": "Inserisci", - "New": "Nuovo", - "Prompts": "Prompt", - "Tokens": "Token", - "Reset current character": "Ripristina il personaggio attuale", - "(0 = disabled)": "(0 = disattivato)", - "1 = disabled": "1 = disattivato", - "Activation Regex": "Attivazione Regex", - "Active World(s) for all chats": "Attiva i Mondi per tutte le chat", - "Add character names": "Aggiungi i nomi dei personaggi", - "Add Memo": "Aggiungi note", - "Advanced Character Search": "Ricerca personaggi avanzata", - "Aggressive": "Aggressivo", - "AI21 Model": "Modello AI21", - "Alert On Overflow": "Avviso in caso di Overflow", - "Allow fallback routes": "Permetti fallback routes", - "Allow fallback routes Description": "Permetti descrizione fallback routes", - "Alt Method": "Metodo Alt", - "Alternate Greetings": "Alterna i saluti", - "Alternate Greetings Hint": "Premi la croce in alto a destra per generare una nuova casella di testo", - "Alternate Greetings Subtitle": "Qui saranno presenti i saluti alternativi", - "Assistant Prefill": "Assistant Prefill", - "Banned Tokens": "Token banditi", - "Blank": "Nuovo", - "Browser default": "Predefinito del browser", - "Budget Cap": "Limite budget", - "CFG": "CFG", - "CFG Scale": "CFG Scale", - "Changes the style of the generated text.": "Cambia lo stile del testo generato.", - "Character Negatives": "Character Negatives", - "Chat Negatives": "Chat Negatives", - "Chat Scenario Override": "Sovrascrittura dello scenario della chat", - "Chat Start": "Avvio della chat", - "Claude Model": "Modello Claude", - "Close chat": "Chiudi chat", - "Context %": "Context %", - "Context Template": "Context Template", - "Count Penalty": "Count Penalty", - "Example Separator": "Separatore d'esempio", - "Exclude Assistant suffix": "Escludi il suffisso assistente", - "Exclude the assistant suffix from being added to the end of prompt.": "Esclude il suffisso assistente dall'essere aggiunto alla fine del prompt.", - "Force for Groups and Personas": "Forzalo per gruppi e alter ego", - "Global Negatives": "Global Negatives", - "In Story String / Chat Completion: After Character Card": "Nella stringa narrativa / Chat Completion: Dopo la 'Carta Personaggio'", - "In Story String / Chat Completion: Before Character Card": "Nella stringa narrativa / Chat Completion: Prima della 'Carta Personaggio", - "Instruct": "Instruct", - "Instruct Mode": "Modalità Instruct", - "Last Sequence": "Ultima sequenza", - "Lazy Chat Loading": "Caricamento svogliato della chat", - "Least tokens": "Token minimi", - "Light": "Leggero", - "Load koboldcpp order": "Ripristina l'ordine di koboldcpp", - "Main": "Principale", - "Mancer API key": "Chiave API di Mancer", - "Mancer API url": "Url API di Mancer", - "May help the model to understand context. Names must only contain letters or numbers.": "Può aiutare il modello a comprendere meglio il contesto. I nomi devono contenere solo numeri e lettere.", - "Medium": "Medium", - "Mirostat": "Mirostat", - "Mirostat (mode=1 is only for llama.cpp)": "Mirostat (mode=1 è valido solo per llama.cpp)", - "Mirostat Eta": "Mirostat Eta", - "Mirostat LR": "Mirostat LR", - "Mirostat Mode": "Mirostat Mode", - "Mirostat Tau": "Mirostat Tau", - "Model Icon": "Icona modello", - "Most tokens": "Token massimi", - "MovingUI Preset": "Preset MovingUI", - "Negative Prompt": "Prompt negativo", - "No Module": "Nessun modulo", - "NSFW": "NSFW", - "Nucleus Sampling": "Nucleus Sampling", - "Off": "Spento", - "OpenRouter API Key": "Chiave API di OpenRouter", - "OpenRouter Model": "Modello OpenRouter", - "or": "o", - "Phrase Repetition Penalty": "Phrase Repetition Penalty", - "Positive Prompt": "Prompt positivo", - "Preamble": "Premessa", - "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct Mode)": "Sovrascrittura del prompt (Per le API di OpenAI/Claude/Scale, Window/OpenRouter, e la Modalità Instruct)", - "Prompt that is used when the NSFW toggle is O": "Prompt utilizzato quando l'interruttore NSFW è disattivato.", - "Prose Augmenter": "Prose Augmenter", - "Proxy Password": "Password proxy", - "Quick Edit": "Editing rapido", - "Random": "Casuale", - "Relaxed API URLS": "URL API sciatto", - "Replace Macro in Custom Stopping Strings": "Rimpiazza le macro nelle stringe d'arresto personalizzate", - "Scale": "Scale", - "Sequences you don't want to appear in the output. One per line.": "Sequenze che non vuoi appaiano nell'output. Una per linea.", - "Set at the beginning of Dialogue examples to indicate that a new example chat is about to start.": "Impostato all'inizio degli Esempi di dialogo per indicare che un nuovo esempio di chat sta per iniziare.", - "Set at the beginning of the chat history to indicate that a new chat is about to start.": "Impostato all'inizio della cronologia chat per indicare che una nuova chat sta per iniziare.", - "Set at the beginning of the chat history to indicate that a new group chat is about to start.": "Impostato all'inizio della cronologia chat per indicare che un nuova chat di gruppo sta per iniziare.", - "Show External models (provided by API)": "Mostra modelli esterni (Forniti dall'API)", - "Show Notifications Show notifications on switching personas": "Mostra una notifica quando l'alter ego viene cambiato", - "Show tags in responses": "Mostra i tag nelle risposte", - "Story String": "Stringa narrativa", - "Text Adventure": "Avventura testuale", - "Text Gen WebUI presets": "Preset Text Gen WebUI", - "Toggle Panels": "Interruttore pannelli", - "Top A Sampling": "Top A Sampling", - "Top K Sampling": "Top K Sampling", - "UI Language": "Linguaggio UI", - "Unlocked Context Size": "Sblocca dimensione contesto", - "Usage Stats": "Statistiche di utilizzo", - "Use AI21 Tokenizer": "Utilizza il Tokenizer di AI21", - "Use API key (Only required for Mancer)": "Utilizza la chiave API (Necessario soltanto per Mancer)", - "Use character author's note": "Utilizza le note d'autore del personaggio", - "Use character CFG scales": "Utilizza CFG scales del personaggio", - "Use Proxy password field instead. This input will be ignored.": "Utilizza il campo della password proxy al suo posto. Questo input verrà ignorato.", - "Use style tags to modify the writing style of the output": "Utilizza lo stile delle tag per modificare lo stile di scrittura in output", - "Use the appropriate tokenizer for Jurassic models, which is more efficient than GPT's.": "Utilizza il tokenizer appropiato per i modelli giurassici, visto che è più efficente di quello di GPT.", - "Used if CFG Scale is unset globally, per chat or character": "È utilizzato soltanto se CFG Scale non è settato globalmente, per le chat o per i personaggi", - "Very aggressive": "Esageratamente aggressivo", - "Very light": "Esageratamente leggero", - "Welcome to SillyTavern!": "Benvenuto in SillyTavern!", - "Will be used as a password for the proxy instead of API key.": "Verrà usato come password per il proxy invece che la chiave API.", - "Window AI Model": "Modello Window AI", - "Your Persona": "Il tuo alter ego", - "Start Claude's answer with...": "Inizia la risposta di Claude con...", - "# of messages (0 = disabled)": "'# dei messaggi (0 = disattivato)'", - "Advanced": "Avanzata", - "AI Module": "Modulo IA", - "AI21 API Key": "Chiave API AI21", - "Allow NSFW images from Horde": "Permetti immagini NSFW da Horde", - "Anthropic's developer console": "Console di sviluppo per Anthropic", - "Avoid spending Anlas": "Evita di spendere Anlas", - "Click Authorize below or get the key from": "Clicca Autorizza qui sotto oppure ottieni la chiave da", - "Connect": "Connettiti", - "Context Order": "Ordine del contesto", - "Continue nudge": "Continua nudge (spinta)", - "Convert to Persona": "Converti in alter ego", - "Debug Menu": "Menu Debug", - "Debug Warning": "Avviso Debug", - "Enable simple UI mode": "Avvia la modalità UI semplice", - "Enter": "Invio", - "Example Dialogues": "Dialoghi d'esempio", - "Example: https://neuro.mancer.tech/webui/MODEL/api": "Esempio: https://neuro.mancer.tech/webui/MODEL/api", - "Example: ws://127.0.0.1:5005/api/v1/stream": "Esempio: ws://127.0.0.1:5005/api/v1/stream", - "Execute": "Esegui", - "Get it here:": "Ottienila qui:", - "Get your key from": "Ottieni la tua chiave da", - "Hint": "Suggerimento", - "If you are using:": "Se stai usando:", - "In Story String / Prompt Manager": "Stringa narrativa / Gestione prompt", - "In-Chat Position not affected": "La posizione in-chat non è influenzata", - "Karras (not all samplers supported)": "Karras (Non tutti i sampler sono supportati)", - "Learn how to contribute your idle GPU cycles to the Horde": "Impara come utilizzare i tuoi cicli GPU in idle per contribuire a Horde", - "Models": "Modelli", - "New Chat": "Nuova chat", - "New Example Chat": "Esempio nuova chat", - "New Group Chat": "Nuova chat di gruppo", - "Not connected...": "Non connesso...", - "Not connected...": "Non connesso...", - "Opus tier": "Opus tier", - "Output Sequence": "Sequenza Output", - "Permanent": "Permanente", - "Scale API Key": "Chiave API Scale", - "Send names in the ChatML objects.": "Condividi a ChatML i nomi dei partecipanti.", - "Show impersonated replies in groups": "Mostra risposte impersonate nelle chat di gruppo", - "Show Message Token Count": "Mostra costo in Token per messaggio", - "Show notifications on switching personas": "Mostra notifiche quando l'alter ego cambia", - "Simple": "Semplice", - "Slack and Poe cookies will not work here, do not bother trying.": "I cookie di Slack e Poe non funzioneranno qui, non perdere tempo provandoci.", - "Strip Example Messages from Prompt": "Rimuovi i messaggi d'esempio dal prompt", - "Summary": "Riassunto", - "to use anonymous mode.": "per utilizzare la modalità in anonimo.", - "UI Mode": "Modalità UI", - "Use style tags to modify the writing style of the output.": "Utilizza i tag di stile per modificare la forma di scrittura in uscita.", - "Utility Prompts": "Utility Prompt", - "View my Kudos": "Mostra i miei Kudos", - "View Remaining Credits": "Mostra crediti rimanenti", - "World Info Format Template": "Formato template 'Info Mondo'", - "Wraps activated World Info entries before inserting into the prompt.": "Seleziona le informazioni del mondo attualmente attive prima di inserirle nel prompt.", - "Local server classification": "Classificazione server locale", - "Create Branch": "Crea nuovo ramo", - "removes blur from window backgrounds": "Elimina la sfocatura dagli sfondi delle finestre", - "Allow for Chat Completion APIs": "Permetti per le 'Chat Completion API'", - "at Depth": "a profondità", - "Auto-Continue": "Risposta continua", - "Auto-Expand Message Actions": "Espansione automatica dei messaggi d'azione", - "Automatic (PC)": "Automatico (PC)", - "Character Exclusion": "Estromissione del personaggio", - "Chat Background": "Sfondo chat", - "Custom CSS": "CSS personalizzato", - "Depth:": "Profondità:", - "Disabled": "Disattivato", - "Filter to Character(s)": "Filtra per personaggio", - "Grammar": "Grammatica", - "Miscellaneous": "Varie", - "PaLM API Key": "Chiave API PaLM", - "Relax message trim in Groups": "Troncatura leggera dei messaggi nelle chat di gruppo", - "Target length (tokens)": "Lunghezza target (in token)", - "Theme Toggles": "Interruttore tema", - "Type in the desired custom grammar (GBNF).": "Scrivi la tua grammatica personalizzata (GBNF).", - "UI Background": "Sfondo UI", - "UI Border": "Bordo UI" - }, - "nl-nl": { - "clickslidertips": "klikregel tips", - "kobldpresets": "Kobold sjablonen", - "guikoboldaisettings": "GUI KoboldAI-instellingen", - "novelaipreserts": "NovelAI sjablonen", - "default": "standaard", - "openaipresets": "OpenAI sjablonen", - "text gen webio(ooba) presets": "Tekstgeneratie webio(ooba) sjablonen", - "response length(tokens)": "lengte reactie (in tokens)", - "select": "selecteer", - "context size(tokens)": "contextgrootte (in tokens)", - "unlocked": "ontgrendeld", - "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "Selecteer alleen modellen die contextgroottes groter dan 4096 tokens ondersteunen. Ga alleen verder als je weet wat je doet!", - "rep.pen": "rep.pen", - "rep.pen range": "rep.pen bereik", - "temperature": "temperatuur", - "Encoder Rep. Pen.": "Encoder Rep. Pen.", - "No Repeat Ngram Size": "Geen herhaal N-gram grootte", - "Min Length": "minimale lengte", - "OpenAI Reverse Proxy": "OpenAI Reverse Proxy", - "Alternative server URL (leave empty to use the default value).": "Alternatieve server-URL (laat leeg om de standaardwaarde te gebruiken).", - "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "Verwijder je echte OAI API-sleutel uit het API-paneel VOORDAT je iets in dit vak typt", - "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "Wij kunnen geen ondersteuning bieden voor problemen die zich voordoen bij het gebruik van een niet-officiële OpenAI-proxy", - "Legacy Streaming Processing": "Legacy Streaming Verwerking", - "Enable this if the streaming doesn't work with your proxy": "Schakel dit in als streaming niet werkt met je proxy.", - "Context Size (tokens)": "Contextgrootte (tokens)", - "Max Response Length (tokens)": "Maximale lengte antwoord (tokens)", - "Temperature": "Temperatuur", - "Frequency Penalty": "Frequentie Penalty", - "Presence Penalty": "Aanwezigheid Penalty", - "Top-p": "Top-p", - "Display bot response text chunks as they are generated": "Toon tekstfragmenten van de botreactie tijdens het genereren.", - "Top A": "Top A", - "Typical Sampling": "Typische Sampling", - "Tail Free Sampling": "Staartvrije Sampling", - "Rep. Pen. Slope": "Steilheid repenalisatie", - "Single-line mode": "Enkele-regel modus", - "Top K": "Top K", - "Top P": "Top P", - "Typical P": "Typische P", - "Do Sample": "Do Sample", - "Add BOS Token": "Voeg BOS-token toe", - "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative.": "Voeg het bos_token toe aan het begin van prompts. Uitschakelen kan zorgen voor creatievere antwoorden.", - "Ban EOS Token": "Blokkeer EOS-token", - "Ban the eos_token. This forces the model to never end the generation prematurely": "Blokkeer het eos_token. Dit dwingt het model om de generatie nooit voortijdig te beëindigen.", - "Skip Special Tokens": "Sla speciale tokens over", - "Beam search": "Beam-zoekopdracht", - "Number of Beams": "Aantal beams", - "Length Penalty": "Penalty Lengte", - "Early Stopping": "Vroegtijdig stoppen", - "Contrastive search": "Contrastieve zoekopdracht", - "Penalty Alpha": "Penalty Alpha", - "Seed": "Seed", - "Inserts jailbreak as a last system message.": "Voegt jailbreak toe als laatste systeembericht.", - "This tells the AI to ignore its usual content restrictions.": "Dit vertelt de AI om zijn gebruikelijke inhoudsbeperkingen te negeren.", - "NSFW Encouraged": "NSFW Aanmoediging", - "Tell the AI that NSFW is allowed.": "Vertel de AI dat NSFW is toegestaan.", - "NSFW Prioritized": "NSFW Prioriteit", - "NSFW prompt text goes first in the prompt to emphasize its effect.": "NSFW-prompttekst staat eerst in de prompt om het effect te benadrukken.", - "Streaming": "Streaming", - "Display the response bit by bit as it is generated.": "Toon het antwoord stukje bij beetje terwijl het wordt gegenereerd.", - "When this is off, responses will be displayed all at once when they are complete.": "Wanneer dit is uitgeschakeld, worden antwoorden in één keer weergegeven wanneer ze compleet zijn.", - "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "Genereer slechts één regel per verzoek (alleen KoboldAI, genegeerd door KoboldCpp).", - "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "Verbied het End-of-Sequence (EOS) token (met KoboldCpp, en mogelijk ook andere tokens met KoboldAI).", - "Good for story writing, but should not be used for chat and instruct mode.": "Goed voor het schrijven van verhalen, maar mag niet worden gebruikt voor de chat- en instructiemodus.", - "Enhance Definitions": "Verbeter definities", - "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "Gebruik de OAI-kennisbank om definities van publieke figuren en bekende fictieve personages te verbeteren.", - "Wrap in Quotes": "Wikkel in aanhalingstekens", - "Wrap entire user message in quotes before sending.": "Wikkel het volledige gebruikersbericht in aanhalingstekens voordat je het verzendt.", - "Leave off if you use quotes manually for speech.": "Laat dit uit als je handmatig aanhalingstekens gebruikt voor spraak.", - "Main prompt": "Hoofdprompt", - "The main prompt used to set the model behavior": "De hoofdprompt die wordt gebruikt om het gedrag van het model in te stellen.", - "NSFW prompt": "NSFW-prompt", - "Prompt that is used when the NSFW toggle is on": "Prompt die wordt gebruikt wanneer de NSFW-schakelaar is ingeschakeld.", - "Jailbreak prompt": "Jailbreak-prompt", - "Prompt that is used when the Jailbreak toggle is on": "Prompt die wordt gebruikt wanneer de Jailbreak-schakelaar is ingeschakeld.", - "Impersonation prompt": "Prompt voor impersonatie van gebruiker", - "Prompt that is used for Impersonation function": "Prompt die wordt gebruikt voor de Impersonation-functie van de gebruiker", - "Logit Bias": "Logit Bias", - "Helps to ban or reenforce the usage of certain words": "Helpt bij het verbieden of versterken van het gebruik van bepaalde woorden.", - "View / Edit bias preset": "Bekijk / Bewerk bias-sjabloon", - "Add bias entry": "Bias-item toevoegen", - "Jailbreak activation message": "Activatiebericht voor jailbreak", - "Message to send when auto-jailbreak is on.": "Bericht om te verzenden wanneer auto-jailbreak is ingeschakeld.", - "Jailbreak confirmation reply": "Bevestigingsantwoord voor jailbreak", - "Bot must send this back to confirm jailbreak": "De bot moet dit antwoord sturen om de jailbreak te bevestigen.", - "Character Note": "Karakternotitie", - "Influences bot behavior in its responses": "Beïnvloedt het gedrag van de bot in zijn antwoorden.", - "API": "API", - "KoboldAI": "KoboldAI", - "Use Horde": "Gebruik Horde", - "API url": "API-url", - "Register a Horde account for faster queue times": "Registreer een Horde-account voor snellere wachttijden", - "Learn how to contribute your idle GPU cycles to the Horde": "Leer hoe je je ongebruikte GPU-cycli kunt bijdragen aan de Horde", - "Adjust context size to worker capabilities": "Pas de contextgrootte aan op basis van de capaciteiten van de werker", - "Adjust response length to worker capabilities": "Pas de lengte van het antwoord aan op basis van de capaciteiten van de werker", - "API key": "API-sleutel", - "Register": "Registreren", - "For privacy reasons": "Om privacyredenen", - "Model": "Model", - "Hold Control / Command key to select multiple models.": "Houd de Control / Command-toets ingedrukt om meerdere modellen te selecteren.", - "Horde models not loaded": "Horde-modellen niet geladen", - "Not connected": "Niet verbonden", - "Novel API key": "NovelAI API-sleutel", - "Follow": "Volg", - "these directions": "deze instructies", - "to get your NovelAI API key.": "om je NovelAI API-sleutel te verkrijgen.", - "Enter it in the box below": "Voer het in in het vak hieronder", - "Novel AI Model": "NovelAI-model", - "No connection": "Geen verbinding", - "oobabooga/text-generation-webui": "oobabooga/text-generation-webui", - "Make sure you run it with": "Zorg ervoor dat je het uitvoert met --extensions openai", - "Blocking API url": "Blokkerende API-url", - "Streaming API url": "Streaming API-url", - "to get your OpenAI API key.": "om je OpenAI API-sleutel te verkrijgen.", - "OpenAI Model": "OpenAI-model", - "View API Usage Metrics": "Bekijk API-gebruiksstatistieken", - "Bot": "Bot", - "Connect to the API": "Verbind met de API", - "Auto-connect to Last Server": "Automatisch verbinden met de laatste server", - "View hidden API keys": "Bekijk verborgen API-sleutels", - "Advanced Formatting": "Geavanceerde opmaak", - "AutoFormat Overrides": "AutoFormat-overschrijvingen", - "Disable description formatting": "Schakel opmaak van beschrijving uit", - "Disable personality formatting": "Schakel opmaak van persoonlijkheid uit", - "Disable scenario formatting": "Schakel opmaak van scenario uit", - "Disable example chats formatting": "Schakel opmaak van voorbeeldchats uit", - "Disable chat start formatting": "Schakel opmaak van chatstart uit", - "Custom Chat Separator": "Aangepaste chat-scheidingsteken", - "Instruct mode": "Instructiemodus", - "Enabled": "Ingeschakeld", - "Wrap Sequences with Newline": "Wikkel sequenties in met een nieuwe regel", - "Include Names": "Inclusief namen", - "System Prompt": "Systeemprompt", - "Instruct Mode Sequences": "Instrueermodusreeksen", - "Input Sequence": "Invoersequentie", - "First Output Sequence": "Eerste uitvoerreeks", - "Last Output Sequence": "Laatste uitvoerreeks", - "System Sequence Prefix": "Systeemreeksvoorvoegsel", - "System Sequence Suffix": "Systeemreeksachtervoegsel", - "Stop Sequence": "Stopsequentie", - "Context Formatting": "Contextopmaak", - "Tokenizer": "Tokenizer", - "None / Estimated": "Geen / Geschat", - "Sentencepiece (LLaMA)": "Sentencepiece (LLaMA)", - "Token Padding": "Token-vulling", - "Always add character's name to prompt": "Voeg altijd de naam van het personage toe aan de prompt", - "Keep Example Messages in Prompt": "Behoud voorbeeldberichten in de prompt", - "Remove Empty New Lines from Output": "Verwijder lege regels uit de uitvoer", - "Disabled for all models": "Uitgeschakeld voor alle modellen", - "Automatic (based on model name)": "Automatisch (op basis van modelnaam)", - "Enabled for all models": "Ingeschakeld voor alle modellen", - "Anchors Order": "Ankersvolgorde", - "Character then Style": "Personage dan Stijl", - "Style then Character": "Stijl dan Personage", - "Character Anchor": "Personage Anker", - "Style Anchor": "Stijl Anker", - "World Info": "'Wereldinformatie'", - "Scan Depth": "Scandiepte", - "depth": "diepte", - "Token Budget": "Token-budget", - "budget": "budget", - "Recursive scanning": "Recursieve scanning", - "None": "Geen", - "User Settings": "Gebruikersinstellingen", - "UI Customization": "UI-aanpassing", - "Avatar Style": "Avatarstijl", - "Circle": "Cirkel", - "Rectangle": "Rechthoek", - "Chat Style": "Chatstijl", - "Default": "Standaard", - "Bubbles": "Bellen", - "Chat Width (PC)": "Chatbreedte (PC)", - "No Blur Effect": "Geen vervagingseffect", - "No Text Shadows": "Geen tekstschaduwen", - "Waifu Mode": "♡ Waifu-modus ♡", - "Message Timer": "Berichttimer", - "Characters Hotswap": "Personages Hotswap", - "Movable UI Panels": "Verplaatsbare UI-panelen", - "Reset Panels": "Herstel panelen", - "UI Colors": "UI-kleuren", - "Main Text": "Hoofdtekst", - "Italics Text": "Schuingedrukte tekst", - "Quote Text": "Geciteerde tekst", - "Shadow Color": "Schaduwkleur", - "FastUI BG": "FastUI BG", - "Blur Tint": "Vervagingskleur", - "Font Scale": "Lettergrootte", - "Blur Strength": "Vervagingssterkte", - "Text Shadow Width": "Tekstschaduwbreedte", - "UI Theme Preset": "UI-thema-sjabloon", - "Power User Options": "Geavanceerde gebruikersopties", - "Swipes": "Veegbewegingen", - "Background Sound Only": "Alleen achtergrondgeluid", - "Auto-load Last Chat": "Automatisch laatste chat laden", - "Auto-save Message Edits": "Automatisch berichtbewerkingen opslaan", - "Auto-fix Markdown": "Automatische Markdown-correctie", - "Allow {{char}}: in bot messages": "Toestaan {{char}}: in botberichten", - "Allow {{user}}: in bot messages": "Toestaan {{user}}: in botberichten", - "Auto-scroll Chat": "Automatisch scrollen chat", - "Render Formulas": "Formules weergeven", - "Send on Enter": "Verzenden bij Enter", - "Always disabled": "Altijd uitgeschakeld", - "Automatic (desktop)": "Automatisch (desktop)", - "Always enabled": "Altijd ingeschakeld", - "Name": "Naam", - "Your Avatar": "Je Avatar", - "Extensions API:": "Uitbreidingen API:", - "SillyTavern-extras": "SillyTavern-extras", - "Auto-connect": "Automatisch verbinden", - "Active extensions": "Actieve uitbreidingen", - "Extension settings": "Uitbreidingsinstellingen", - "Description": "Beschrijving", - "First message": "Eerste bericht", - "Group Controls": "Groepsbediening", - "Group reply strategy": "Strategie voor groepsantwoorden", - "Natural order": "Natuurlijke volgorde", - "List order": "Lijstvolgorde", - "Allow self responses": "Toestaan zelfantwoorden", - "Auto Mode": "Automatische modus", - "Add Members": "Leden toevoegen", - "Current Members": "Huidige leden", - "text": "Tekst", - "Delete": "Verwijderen", - "Cancel": "Annuleren", - "Advanced Defininitions": "Geavanceerde definities", - "Personality summary": "Persoonlijkheidssamenvatting", - "A brief description of the personality": "Een korte beschrijving van de persoonlijkheid", - "Scenario": "Scenario", - "Circumstances and context of the dialogue": "Omstandigheden en context van de dialoog", - "Talkativeness": "Spreekzaamheid", - "How often the chracter speaks in": "Hoe vaak het personage spreekt in", - "group chats!": "groepschats!", - "Shy": "Verlegen", - "Normal": "Normaal", - "Chatty": "Praterig", - "Examples of dialogue": "Voorbeelden van dialoog", - "Forms a personality more clearly": "Vormt een persoonlijkheid duidelijker", - "Save": "Opslaan", - "World Info Editor": "Wereldinformatie Editor", - "New Entry": "Nieuwe invoer", - "Export": "Exporteren", - "Delete World": "Wereld verwijderen", - "Chat History": "Chatgeschiedenis", - "Group Chat Scenario Override": "Groepschat Scenario Overschrijving", - "All group members will use the following scenario text instead of what is specified in their character cards.": "Alle groepsleden zullen de volgende scenario-tekst gebruiken in plaats van wat is gespecificeerd in hun karakterkaarten.", - "Keywords": "Sleutelwoorden", - "Separate with commas": "Scheiden met komma's", - "Secondary Required Keywords": "Secundaire Vereiste Sleutelwoorden", - "Content": "Inhoud", - "What this keyword should mean to the AI": "Wat dit sleutelwoord voor de AI zou moeten betekenen", - "Memo/Note": "Memo/Notitie", - "Not sent to AI": "Niet naar AI gestuurd", - "Constant": "Constante", - "Selective": "Selectief", - "Before Char": "Voor Char", - "After Char": "Na Char", - "Insertion Order": "Invoegingsvolgorde", - "Tokens:": "Tokens:", - "Disable": "Uitschakelen", - "${characterName}": "${karakterNaam}", - "CHAR": "CHAR", - "is typing": "is aan het typen...", - "Back to parent chat": "Terug naar ouderlijke chat", - "Save bookmark": "Bladwijzer opslaan", - "Convert to group": "Converteren naar groep", - "Start new chat": "Nieuwe chat starten", - "View past chats": "Bekijk vorige chats", - "Delete messages": "Berichten verwijderen", - "Impersonate": "Imiteren", - "Regenerate": "Regenereren", - "PNG": "PNG", - "JSON": "JSON", - "presets": "sjablonen", - "Message Sound": "Berichtgeluid", - "Author's Note": "Notitie van auteur", - "Send Jailbreak": "Stuur Jailbreak", - "Replace empty message": "Vervang leeg bericht", - "Send this text instead of nothing when the text box is empty.": "Stuur deze tekst in plaats van niets wanneer het tekstvak leeg is.", - "NSFW avoidance prompt": "NSFW vermijdingsprompt", - "Prompt that is used when the NSFW toggle is off": "Prompt die wordt gebruikt wanneer de NSFW-schakelaar is uitgeschakeld.", - "Advanced prompt bits": "Geavanceerde prompt-bits", - "World Info format template": "Wereldinformatie opmaak sjablonen", - "Wraps activated World Info entries before inserting into the prompt. Use {0} to mark a place where the content is inserted.": "Wikkelt geactiveerde Wereldinformatie-invoeren in voordat ze in de prompt worden ingevoegd. Gebruik {0} om een plek aan te geven waar de inhoud wordt ingevoegd.", - "Unrestricted maximum value for the context slider": "Onbeperkte maximale waarde voor de context schuifregelaar", - "Chat Completion Source": "Bron voor Chatvervulling", - "Avoid sending sensitive information to the Horde.": "Vermijd het verzenden van gevoelige informatie naar de Horde.", - "Review the Privacy statement": "Bekijk de Privacyverklaring", - "Learn how to contribute your idel GPU cycles to the Horde": "Leer hoe je je ongebruikte GPU-cycli kunt bijdragen aan de Horde", - "Trusted workers only": "Alleen vertrouwde medewerkers", - "For privacy reasons, your API key will be hidden after you reload the page.": "Om privacyredenen wordt je API-sleutel verborgen nadat je de pagina opnieuw hebt geladen.", - "-- Horde models not loaded --": "-- Horde-modellen niet geladen --", - "Example: http://127.0.0.1:5000/api ": "Voorbeeld: http://127.0.0.1:5000/api", - "No connection...": "Geen verbinding...", - "Get your NovelAI API Key": "Krijg je NovelAI API-sleutel", - "KoboldAI Horde": "KoboldAI Horde", - "Text Gen WebUI (ooba)": "Tekst Gen WebUI (ooba)", - "NovelAI": "NovelAI", - "Chat Completion (OpenAI, Claude, Window/OpenRouter, Scale)": "Chatvervulling (OpenAI, Claude, Window/OpenRouter, Scale)", - "OpenAI API key": "OpenAI API-sleutel", - "Trim spaces": "Spaties verwijderen", - "Trim Incomplete Sentences": "Onvolledige zinnen bijsnijden", - "Include Newline": "Nieuwe regel opnemen", - "Non-markdown strings": "Niet-Markdown-teksten", - "Replace Macro in Sequences": "Macro vervangen in sequenties", - "Presets": "sjablonen", - "Separator": "Scheidingsteken", - "Start Reply With": "Begin antwoord met", - "Show reply prefix in chat": "Toon antwoordvoorvoegsel in chat", - "Worlds/Lorebooks": "Werelden/Loreboeken", - "Active World(s)": "Actieve Wereld(en)", - "Character Lore Insertion Strategy": "Karakter Lore Invoegstrategie", - "Sorted Evenly": "Gelijkmatig gesorteerd", - "Character Lore First": "Karakter Lore Eerst", - "Global Lore First": "Globale Lore Eerst", - "-- World Info not found --": "-- Wereldinformatie niet gevonden --", - "Recursive Scan": "Recursieve Scan", - "Case Sensitive": "Hoofdlettergevoelig", - "Match whole words": "Hele woorden matchen", - "World/Lore Editor": "Wereld/Lore Editor", - "--- None ---": "--- Geen ---", - "Comma seperated (ignored if empty)": "Komma gescheiden (genegeerd als leeg)", - "Use Probability": "Gebruik Waarschijnlijkheid", - "Exclude from recursion": "Uitsluiten van recursie", - "Position:": "Positie:", - "Before Char Defs": "Voor Char Definities", - "After Char Defs": "Na Char Definities", - "Before AN": "Voor Auteur Notities", - "After AN": "Na Auteur Notities", - "Order:": "Volgorde:", - "Probability:": "Waarschijnlijkheid:", - "Delete Entry": "Verwijder Invoer", - "User Message Blur Tint": "Vervagingstint Gebruiker Bericht", - "AI Message Blur Tint": "Vervagingstint AI Bericht", - "Chat Style:": "Chatstijl:", - "Chat Width (PC):": "Chat Breedte (PC):", - "Chat Timestamps": "Chat Tijdstempels", - "Message IDs": "Bericht ID's", - "Prefer Character Card Prompt": "Voorkeur Karakter Kaart Prompt", - "Prefer Character Card Jailbreak": "Voorkeur Karakter Kaart Jailbreak", - "Press Send to continue": "Druk op Verzenden om door te gaan", - "Log prompts to console": "Logboek van prompts naar console", - "Never resize avatars": "Avatars nooit formaat aanpassen", - "Show avatar filenames": "Laat avatar bestandsnamen zien", - "Import Card Tags": "Importeer Kaart Tags", - "Confirm message deletion": "Bevestig verwijdering van bericht", - "Spoiler Free Mode": "Spoiler Vrije Modus", - "Auto-swipe": "Automatisch swipen", - "Minimum generated message length": "Minimale gegenereerde berichtlengte", - "Blacklisted words": "Geblokkeerde woorden", - "Blacklisted word count to swipe": "Geblokkeerd woordaantal om te swipen", - "Reload Chat": "Chat Herladen", - "Not Connected": "Niet Verbonden", - "Persona Management": "Persona Beheer", - "Persona Description": "Persona Beschrijving", - "Before Character Card": "Voor Karakter Kaart", - "After Character Card": "Na Karakter Kaart", - "Top of Author's Note": "Bovenkant van Auteur Notitie", - "Bottom of Author's Note": "Onderkant van Auteur Notitie", - "How do I use this?": "Hoe gebruik ik dit?", - "More...": "Meer...", - "Link to World Info": "Link naar Wereldinformatie", - "Import Card Lore": "Importeer Kaart Lore", - "Scenario Override": "Scenario Overschrijving", - "Rename": "Hernoemen", - "Character Description": "Karakter Beschrijving", - "Creator's Notes": "Notities van Maker", - "A-Z": "A-Z", - "Z-A": "Z-A", - "Newest": "Nieuwste", - "Oldest": "Oudste", - "Favorites": "Favorieten", - "Recent": "Recent", - "Most chats": "Meeste chats", - "Least chats": "Minste chats", - "Back": "Terug", - "Prompt Overrides (For OpenAI/Claude/Scale APIs, Window/OpenRouter, and Instruct mode)": "Prompt Overschrijvingen (Voor OpenAI/Claude/Scale APIs, Window/OpenRouter, en Instruct modus)", - "Insert {{original}} into either box to include the respective default prompt from system settings.": "Voeg {{original}} in in een van de vakken om het respectievelijke standaard prompt van systeeminstellingen op te nemen.", - "Main Prompt": "Hoofd Prompt", - "Jailbreak": "Jailbreak", - "Creator's Metadata (Not sent with the AI prompt)": "Metadata van Maker (Niet verzonden met de AI-prompt)", - "Everything here is optional": "Alles hier is optioneel", - "Created by": "Gemaakt door", - "Character Version": "Karakter Versie", - "Tags to Embed": "In te bedden tags", - "How often the character speaks in group chats!": "Hoe vaak het personage spreekt in groepschats!", - "Important to set the character's writing style.": "Belangrijk om de schrijfstijl van het personage in te stellen", - "ATTENTION!": "AANDACHT!", - "Samplers Order": "Monsters Bestelling", - "Samplers will be applied in a top-down order. Use with caution.": "Monsters worden toegepast in een top-down volgorde. Gebruik met voorzichtigheid.", - "Repetition Penalty": "Herhalings Penalty", - "Epsilon Cutoff": "Epsilon Cutoff", - "Eta Cutoff": "Eta Cutoff", - "Rep. Pen. Range.": "Herh. Pen. Bereik.", - "Rep. Pen. Freq.": "Herh. Pen. Freq.", - "Rep. Pen. Presence": "Herh. Pen. Aanwezigheid.", - "Enter it in the box below:": "Voer het in bij het onderstaande vak:", - "separate with commas w/o space between": "scheiden met komma's zonder spaties ertussen", - "Document": "Document", - "Continue": "Doorgaan", - "Editing:": "Bewerken:", - "AI reply prefix": "AI antwoord voorvoegsel", - "Custom Stopping Strings": "Aangepaste Stopwoorden", - "JSON serialized array of strings": "JSON geserialiseerde array van teksten", - "words you dont want generated separated by comma ','": "woorden die je niet wilt genereren gescheiden door komma ','", - "Extensions URL": "Extensies URL", - "API Key": "API-sleutel", - "Enter your name": "Voer je naam in", - "Name this character": "Geef dit personage een naam", - "Search / Create Tags": "Zoek / Maak Tags", - "Describe your character's physical and mental traits here.": "Beschrijf hier de fysieke en mentale kenmerken van je personage.", - "This will be the first message from the character that starts every chat.": "Dit zal het eerste bericht zijn van het personage dat elke chat start.", - "Chat Name (Optional)": "Chat Naam (Optioneel)", - "Filter...": "Filteren...", - "Search...": "Zoeken...", - "Any contents here will replace the default Main Prompt used for this character. (v2 spec: system_prompt)": "Elke inhoud hier zal het standaard Hoofd Prompt vervangen dat voor dit personage wordt gebruikt. (v2 specificatie: systeem_prompt)", - "Any contents here will replace the default Jailbreak Prompt used for this character. (v2 spec: post_history_instructions)": "Elke inhoud hier zal het standaard Jailbreak Prompt vervangen dat voor dit personage wordt gebruikt. (v2 specificatie: post_history_instructions)", - "(Botmaker's name / Contact Info)": "(Naam van botmaker / Contactgegevens)", - "(If you want to track character versions)": "(Als je de versies van het personage wilt bijhouden)", - "(Describe the bot, give use tips, or list the chat models it has been tested on. This will be displayed in the character list.)": "(Beschrijf de bot, geef gebruikerstips of vermeld de chatmodellen waarop het is getest. Dit wordt weergegeven in de lijst met personages.)", - "(Write a comma-separated list of tags)": "(Schrijf een lijst van tags gescheiden door komma's)", - "(A brief description of the personality)": "(Een korte beschrijving van de persoonlijkheid)", - "(Circumstances and context of the interaction)": "(Omstandigheden en context van de interactie)", - "(Examples of chat dialog. Begin each example with START on a new line.)": "(Voorbeelden van chatdialogen. Begin elk voorbeeld met START op een nieuwe regel.)", - "Injection text (supports parameters)": "Injectietekst (ondersteunt parameters)", - "Injection depth": "Injectiediepte", - "Type here...": "Typ hier...", - "Comma separated (required)": "Komma gescheiden (vereist)", - "Comma separated (ignored if empty)": "Komma gescheiden (genegeerd indien leeg)", - "What this keyword should mean to the AI, sent verbatim": "Wat deze trefwoorden voor de AI zouden moeten betekenen, letterlijk verzonden", - "Not sent to the AI": "Niet naar de AI verzonden", - "(This will be the first message from the character that starts every chat)": "(Dit zal het eerste bericht zijn van het personage dat elke chat start)", - "Not connected to API!": "Niet verbonden met API!", - "AI Response Configuration": "AI Reactie Configuratie", - "AI Configuration panel will stay open": "Het AI configuratiepaneel blijft openstaan", - "Update current preset": "Huidige preset bijwerken", - "Create new preset": "Nieuwe preset aanmaken", - "Import preset": "Preset importeren", - "Export preset": "Preset exporteren", - "Delete the preset": "De preset verwijderen", - "Inserts jailbreak as a last system message": "Voegt jailbreak in als een laatste systeembericht", - "NSFW block goes first in the resulting prompt": "NSFW blok komt als eerste in de resulterende prompt", - "Enables OpenAI completion streaming": "Activeert OpenAI voltooiing streamen", - "Wrap user messages in quotes before sending": "Wikkel gebruikersberichten in aanhalingstekens voordat ze worden verzonden", - "Restore default prompt": "Herstel standaard prompt", - "New preset": "Nieuwe preset", - "Delete preset": "Preset verwijderen", - "Restore default jailbreak": "Herstel standaard jailbreak", - "Restore default reply": "Herstel standaard antwoord", - "Restore defaul note": "Herstel standaard notitie", - "API Connections": "API-verbindingen", - "Can help with bad responses by queueing only the approved workers. May slowdown the response time.": "Kan helpen bij slechte reacties door alleen de goedgekeurde medewerkers in de wachtrij te plaatsen. Kan de reactietijd vertragen.", - "Clear your API key": "Wis je API-sleutel", - "Refresh models": "Modellen vernieuwen", - "Get your OpenRouter API token using OAuth flow. You will be redirected to openrouter.ai": "Ontvang je OpenRouter API-token via het OAuth-proces. Je wordt doorverwezen naar openrouter.ai", - "Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "Verifieert je API-verbinding door een kort testbericht te sturen. Wees je ervan bewust dat je hiervoor wordt gecrediteerd!", - "Create New": "Nieuw aanmaken", - "Edit": "Bewerken", - "World Info": "Wereldinformatie", - "Locked = World Editor will stay open": "Vergrendeld = Wereld Editor blijft open", - "Entries can activate other entries by mentioning their keywords": "Invoeren kunnen andere invoeren activeren door hun trefwoorden te noemen", - "Lookup for the entry keys in the context will respect the case": "Zoeken naar de toetsen van de invoer in de context zal de hoofdlettergevoeligheid respecteren", - "If the entry key consists of only one word, it would not be matched as part of other words": "Als de invoertoets uit slechts één woord bestaat, wordt het niet gematcht als onderdeel van andere woorden", - "Open all Entries": "Open alle invoeren", - "Close all Entries": "Sluit alle invoeren", - "Create": "Aanmaken", - "Import World Info": "Wereldinformatie importeren", - "Export World Info": "Wereldinformatie exporteren", - "Delete World Info": "Wereldinformatie verwijderen", - "Rename World Info": "Wereldinformatie hernoemen", - "Save changes to a new theme file": "Wijzigingen opslaan naar een nieuw themabestand", - "removes blur and uses alternative background color for divs": "verwijdert vervaging en gebruikt een alternatieve achtergrondkleur voor divs", - "If checked and the character card contains a prompt override (System Prompt), use that instead.": "Als aangevinkt en de karakterkaart bevat een prompt overschrijving (Systeem Prompt), gebruik dat dan in plaats daarvan.", - "If checked and the character card contains a jailbreak override (Post History Instruction), use that instead.": "Als aangevinkt en de karakterkaart bevat een jailbreak overschrijving (Post History Instruction), gebruik dat dan in plaats daarvan.", - "AI Response Formatting": "AI Antwoord Opmaak", - "Change Background Image": "Achtergrondafbeelding wijzigen", - "Extensions": "Extensies", - "Click to set a new User Name": "Klik om een nieuwe gebruikersnaam in te stellen", - "Click to lock your selected persona to the current chat. Click again to remove the lock.": "Klik om je geselecteerde persona aan de huidige chat te koppelen. Klik nogmaals om de koppeling te verwijderen.", - "Click to set user name for all messages": "Klik om de gebruikersnaam in te stellen voor alle berichten", - "Create a dummy persona": "Creëer een dummy persona", - "Character Management": "Karakterbeheer", - "Locked = Character Management panel will stay open": "Vergrendeld = Het karakterbeheerpaneel blijft open", - "Select/Create Characters": "Karakters Selecteren/Aanmaken", - "Token counts may be inaccurate and provided just for reference.": "Token tellingen kunnen onnauwkeurig zijn en worden alleen ter referentie verstrekt.", - "Click to select a new avatar for this character": "Klik om een nieuwe avatar voor dit personage te selecteren", - "Add to Favorites": "Toevoegen aan Favorieten", - "Advanced Definition": "Geavanceerde Definitie", - "Character Lore": "Karaktergeschiedenis", - "Export and Download": "Exporteren en Downloaden", - "Duplicate Character": "Dubbel Karakter", - "Create Character": "Karakter Aanmaken", - "Delete Character": "Karakter Verwijderen", - "View all tags": "Bekijk alle tags", - "Click to set additional greeting messages": "Klik om extra begroetingsberichten in te stellen", - "Show / Hide Description and First Message": "Beschrijving en Eerste Bericht Tonen / Verbergen", - "Click to select a new avatar for this group": "Klik om een nieuwe avatar voor deze groep te selecteren", - "Set a group chat scenario": "Stel een groep chat scenario in", - "Restore collage avatar": "Herstel collage-avatar", - "Create New Character": "Nieuw Karakter Aanmaken", - "Import Character from File": "Karakter Importeren uit Bestand", - "Import content from external URL": "Inhoud importeren van externe URL", - "Create New Chat Group": "Nieuwe Chatgroep Aanmaken", - "Characters sorting order": "Volgorde van Karakters sorteren", - "Add chat injection": "Chat Injectie Toevoegen", - "Remove injection": "Injectie Verwijderen", - "Remove": "Verwijderen", - "Select a World Info file for": "Selecteer een Wereldinformatie bestand voor", - "Primary Lorebook": "Primaire Loreboek", - "A selected World Info will be bound to this character as its own Lorebook.": "Een geselecteerde Wereldinformatie zal aan dit personage worden gekoppeld als zijn eigen Loreboek.", - "When generating an AI reply, it will be combined with the entries from a global World Info selector.": "Bij het genereren van een AI-antwoord, zal dit gecombineerd worden met de vermeldingen vanuit een wereldwijde Wereldinformatie selector.", - "Exporting a character would also export the selected Lorebook file embedded in the JSON data.": "Het exporteren van een personage zal ook het geselecteerde Loreboekbestand exporteren dat is ingebed in de JSON-gegevens.", - "Additional Lorebooks": "Extra Loreboeken", - "Associate one or more auxillary Lorebooks with this character.": "Koppel één of meer aanvullende Loreboeken aan dit personage.", - "NOTE: These choices are optional and won't be preserved on character export!": "LET OP: Deze keuzes zijn optioneel en worden niet behouden bij het exporteren van het personage!", - "Rename chat file": "Chatbestand hernoemen", - "Export JSONL chat file": "JSONL chatbestand exporteren", - "Download chat as plain text document": "Chat downloaden als plat tekstbestand", - "Delete chat file": "Chatbestand verwijderen", - "Delete tag": "Tag verwijderen", - "Translate message": "Bericht vertalen", - "Generate Image": "Afbeelding Genereren", - "Narrate": "Vertellen", - "Prompt": "Prompt", - "Create Bookmark": "Bladwijzer Aanmaken", - "Copy": "Kopiëren", - "Open bookmark chat": "Bladwijzerchat openen", - "Confirm": "Bevestigen", - "Copy this message": "Dit bericht kopiëren", - "Delete this message": "Dit bericht verwijderen", - "Move message up": "Bericht omhoog verplaatsen", - "Move message down": "Bericht omlaag verplaatsen", - "Enlarge": "Vergroten", - "Temporarily disable automatic replies from this character": "Tijdelijk automatische antwoorden van dit personage uitschakelen", - "Enable automatic replies from this character": "Automatische antwoorden van dit personage inschakelen", - "Trigger a message from this character": "Een bericht van dit personage activeren", - "Move up": "Omhoog verplaatsen", - "Move down": "Omlaag verplaatsen", - "View character card": "Karakterkaart bekijken", - "Remove from group": "Uit groep verwijderen", - "Add to group": "Toevoegen aan groep", - "Add": "Toevoegen", - "Abort request": "Verzoek afbreken", - "Send a message": "Een bericht verzenden", - "Ask AI to write your message for you": "Vraag de AI om je bericht voor je te schrijven", - "Continue the last message": "Het laatste bericht voortzetten", - "Bind user name to that avatar": "Gebruikersnaam aan die avatar koppelen", - "Select this as default persona for the new chats.": "Selecteer dit als standaard persona voor de nieuwe chats.", - "Change persona image": "persona afbeelding wijzigen", - "Delete persona": "persona verwijderen" - }, - "es-spa": { - "clickslidertips": "Haz click en el número al lado de la barra \npara seleccionar un número manualmente.", - "kobldpresets": "Configuraciones de KoboldAI", - "guikoboldaisettings": "Configuración actual de la interfaz de KoboldAI", - "novelaipreserts": "Configuraciones de NovelAI", - "default": "Predeterminado", - "openaipresets": "Configuraciones de OpenAI", - "text gen webio(ooba) presets": "Configuraciones de WebUI(ooba)", - "response legth(tokens)": "Largo de la respuesta de la IA (en Tokens)", - "select": "Seleccionar", - "context size(tokens)": "Tamaño del contexto (en Tokens)", - "unlocked": "Desbloqueado", - "Only select models support context sizes greater than 4096 tokens. Increase only if you know what you're doing.": "Solo algunos modelos tienen soporte para tamaños de más de 4096 tokens. Procede solo si sabes lo que estás haciendo.", - "rep.pen": "Rep. Pen.", - "rep.pen range": "Rango de Rep. Pen.", - "temperature": "Temperature", - "Encoder Rep. Pen.": "Encoder Rep. Pen.", - "No Repeat Ngram Size": "No Repeat Ngram Size", - "Min Length": "Largo mínimo", - "OpenAI Reverse Proxy": "Reverse Proxy de OpenAI", - "Alternative server URL (leave empty to use the default value).": "URL del server alternativo (deja vacío para usar el predeterminado)", - "Remove your real OAI API Key from the API panel BEFORE typing anything into this box": "Borra tu clave(API) real de OpenAI ANTES de escribir nada en este campo.", - "We cannot provide support for problems encountered while using an unofficial OpenAI proxy": "SillyTaven no puede dar soporte por problemas encontrados durante el uso de un proxy no-oficial de OpenAI", - "Legacy Streaming Processing": "Processo Streaming Legacy", - "Enable this if the streaming doesn't work with your proxy": "Habilita esta opción si el \"streaming\" no está funcionando.", - "Context Size (tokens)": "Tamaño del contexto (en Tokens)", - "Max Response Length (tokens)": "Tamaño máximo (en Tokens)", - "Temperature": "Temperatura", - "Frequency Penalty": "Frequency Penalty", - "Presence Penalty": "Presence Penalty", - "Top-p": "Top-p", - "Display bot response text chunks as they are generated": "Muestra el texto poco a poco al mismo tiempo que es generado.", - "Top A": "Top-a", - "Typical Sampling": "Typical Sampling", - "Tail Free Sampling": "Tail Free Sampling", - "Rep. Pen. Slope": "Rep. Pen. Slope", - "Single-line mode": "Modo \"Solo una línea\"", - "Top K": "Top-k", - "Top P": "Top-p", - "Do Sample": "Do Sample", - "Add BOS Token": "Añadir BOS Token", - "Add the bos_token to the beginning of prompts. Disabling this can make the replies more creative.": "Añade el \"bos_token\" al inicio del prompt. Desabilitar esto puede hacer las respuestas de la IA más creativas", - "Ban EOS Token": "Prohibir EOS Token", - "Ban the eos_token. This forces the model to never end the generation prematurely": "Prohibe el \"eos_token\". Esto obliga a la IA a no terminar su generación de forma prematura", - "Skip Special Tokens": "Saltarse Tokens Especiales", - "Beam search": "Beam Search", - "Number of Beams": "Number of Beams", - "Length Penalty": "Length Penalty", - "Early Stopping": "Early Stopping", - "Contrastive search": "Contrastive search", - "Penalty Alpha": "Penalty Alpha", - "Seed": "Seed", - "Inserts jailbreak as a last system message.": "Inserta el \"jailbreak\" como el último mensaje del Sistema", - "This tells the AI to ignore its usual content restrictions.": "Esto ayuda a la IA para ignorar sus restricciones de contenido", - "NSFW Encouraged": "Alentar \"NSFW\"", - "Tell the AI that NSFW is allowed.": "Le dice a la IA que el contenido NSFW (+18) está permitido", - "NSFW Prioritized": "Priorizar NSFW", - "NSFW prompt text goes first in the prompt to emphasize its effect.": "El \"prompt NSFW\" va antes para enfatizar su efecto", - "Streaming": "Streaming", - "Display the response bit by bit as it is generated.": "Enseña el texto poco a poco mientras es generado", - "When this is off, responses will be displayed all at once when they are complete.": "Cuando esto está deshabilitado, las respuestas se mostrarán de una vez cuando la generación se haya completado", - "Generate only one line per request (KoboldAI only, ignored by KoboldCpp).": "Genera solo una línea por solicitud (solo KoboldAI, ignorada por KoboldCpp).", - "Ban the End-of-Sequence (EOS) token (with KoboldCpp, and possibly also other tokens with KoboldAI).": "Prohibir el token de fin de secuencia (EOS) (con KoboldCpp, y posiblemente también otros tokens con KoboldAI).", - "Good for story writing, but should not be used for chat and instruct mode.": "Bueno para escribir historias, pero no debe usarse para chatear ni para el modo de instrucción.", - "Enhance Definitions": "Definiciones Mejoradas", - "Use OAI knowledge base to enhance definitions for public figures and known fictional characters": "Usa el conocimiento de OpenAI (GPT 3.5, GPT 4, ChatGPT) para mejorar las definiciones de figuras públicas y personajes ficticios", - "Wrap in Quotes": "Envolver En Comillas", - "Wrap entire user message in quotes before sending.": "Envuelve todo el mensaje en comillas antes de enviar", - "Leave off if you use quotes manually for speech.": "Déjalo deshabilitado si usas comillas manualmente para denotar diálogo", - "Main prompt": "Prompt Principal", - "The main prompt used to set the model behavior": "El prompt principal usado para definir el comportamiento de la IA", - "NSFW prompt": "Prompt NSFW", - "Prompt that is used when the NSFW toggle is on": "Prompt que es utilizado cuando \"Alentar NSFW\" está activado", - "Jailbreak prompt": "Jailbreak prompt", - "Prompt that is used when the Jailbreak toggle is on": "Prompt que es utilizado cuando Jailbreak Prompt está activado", - "Impersonation prompt": "Prompt \"Impersonar\"", - "Prompt that is used for Impersonation function": "Prompt que es utilizado para la función \"Impersonar\"", - "Restore default prompt":"Restaurar el prompt por defecto", - "Logit Bias": "Logit Bias", - "Helps to ban or reenforce the usage of certain words": "Ayuda a prohibir o alentar el uso de algunas palabras", - "View / Edit bias preset": "Ver/Editar configuración de \"Logit Bias\"", - "Add bias entry": "Añadir bias", - "Jailbreak activation message": "Mensaje de activación de Jailbrak", - "Message to send when auto-jailbreak is on.": "Mensaje enviado cuando auto-jailbreak está activado", - "Jailbreak confirmation reply": "Mensaje de confirmación de Jailbreak", - "Bot must send this back to confirm jailbreak": "La IA debe enviar un mensaje para confirmar el jailbreak", - "Character Note": "Nota del personaje", - "Influences bot behavior in its responses": "Influencia el comportamiento de la IA y sus respuestas", - "API": "API", - "KoboldAI": "KoboldAI", - "Use Horde": "Usar AI Horde de KoboldAI", - "API url": "URL de la API", - "Register a Horde account for faster queue times": "Regístrate en KoboldAI para conseguir respuestas más rápido", - "Learn how to contribute your idle GPU cycles to the Hord": "Aprende cómo contribuir a AI Horde con tu GPU", - "Adjust context size to worker capabilities": "Ajustar tamaño del contexto a las capacidades del trabajador", - "Adjust response length to worker capabilities": "Ajustar tamaño de la respuesta a las capacidades del trabajador", - "API key": "API key", - "Register": "Registrarse", - "For privacy reasons": "Por motivos de privacidad, tu API será ocultada cuando se vuelva a cargar la página", - "Model": "Modelo IA", - "Hold Control / Command key to select multiple models.": "Presiona Ctrl/Command Key para seleccionar multiples modelos", - "Horde models not loaded": "Modelos del Horde no cargados", - "Not connected": "Desconectado", - "Novel API key": "API key de NovelAI", - "Follow": "Sigue", - "these directions": "estas instrucciones", - "to get your NovelAI API key.": "para conseguir tu NovelAI API key", - "Enter it in the box below": "Introduce tu clave API de OpenAI en el siguiente campo", - "Novel AI Model": "Modelo IA de NovelAI", - "No connection": "Desconectado", - "oobabooga/text-generation-webui": "oobabooga/text-generation-webui", - "Make sure you run it with": "Asegúrate de usar el argumento --extensions openai cuando se ejecute", - "Blocking API url": "API URL", - "Streaming API url": "Streaming API URL", - "to get your OpenAI API key.": "para conseguir tu clave API de OpenAI", - "OpenAI Model": "Modelo AI de OpenAI", - "View API Usage Metrics": "Ver métricas de uso de la API", - "Bot": "Bot", - "Auto-connect to Last Server": "Auto-conectarse con el último servidor", - "View hidden API keys": "Ver claves API ocultas", - "Advanced Formatting": "Formateo avanzado", - "AutoFormat Overrides": "Autoformateo de overrides", - "Samplers Order": "Orden de Samplers", - "Samplers will be applied in a top-down order. Use with caution.": "Los Samplers serán aplicados de orden superior a inferior. \nUsa con precaución", - "Load koboldcpp order": "Cargar el orden de koboldcpp", - "Unlocked Context Size": "Desbloquear Tamaño Del Contexto", - "Unrestricted maximum value for the context slider":"Desbloquea el Tamaño máximo del contexto. Solo habilita esto si sabes lo que estás haciendo.", - "Quick Edit": "Editor Rápido de Prompts", - "Main": "Principal", - "Assistant Prefill": "Prefijo del Asistente", - "Start Claude's answer with...": "Inicia la respuesta de Claude con...", - "Utility Prompts": "Indicaciones Útiles", - "World Info Format Template": "Plantilla para formato de World Info", - "NSFW avoidance prompt": "Prompt para evitar NSFW", - "Prompt that is used when the NSFW toggle is O": "Prompt utilizado para evitar NSFW cuando \"Alentar NSFW\" está deshabilitado", - "Wraps activated World Info entries before inserting into the prompt.": "Envuelve las entradas activadas de World Info antes de insertarlas en el prompt.", - "New Chat": "Chat Nuevo", - "Set at the beginning of the chat history to indicate that a new chat is about to start.": "Colocado al inicio del historial de chat para indicar que un nuevo chat va a comenzar.", - "New Group Chat": "Nuevo Chat Grupal", - "Set at the beginning of the chat history to indicate that a new group chat is about to start.":"Colocado al inicio del historial de chat para indicarle a la IA que un nuevo Chat Grupal va a comenzar", - "New Example Chat": "Nuevo Ejemplo De Chat", - "Add character names": "Incluír nombre del personaje", - "Send names in the ChatML objects.": "Envía los mensajes al objeto ChatML. Ayuda a la IA a asociar mensajes con nombres en un chat grupal.", - "Proxy Password": "Contraseña del Proxy", - "Will be used as a password for the proxy instead of API key.": "Será utilizado como contraseña del proxy en vez de la clave API.", - "Chat Completion Source": "Fuente de Chat", - "Use Proxy password field instead. This input will be ignored.": "Utiliza el campo de Contraseña del Proxy. Lo que pongas aquí será ignorado.", - "Show External models (provided by API)": "Mostrar modelos externos (Proveídos por la API)", - "Connect": "Conectarse", - "[title]Verifies your API connection by sending a short test message. Be aware that you'll be credited for it!": "Verifica que tu conexión con la API enviando un mensaje corto. ¡Ten en cuenta que se te cobrará por ello!", - "Continue nudge": "Empujuón para continuar", - "Replace empty message": "Reemplazar mensaje vacío", - "Send this text instead of nothing when the text box is empty.": "Envía este mensaje en vez de nada cuando la barra de chat está vacía", - "No connection...": "Sin conexión...", - "Avoid sending sensitive information to the Horde.": "No envíes información personal a Horde.", - "Review the Privacy statement": "Revisa el aviso de privacidad", - "Learn how to contribute your idle GPU cycles to the Horde": "Aprende como contribuír a Horde con tu GPU.", - "Trusted workers only": "Solo trabajadores de confianza", - "API Key": "Clave API", - "Get it here:": "Consíguela aquí:", - "View my Kudos": "Ver mis Kudos", - "Models": "Modelos IA" - } -} diff --git a/public/img/dreamgen.svg b/public/img/dreamgen.svg new file mode 100644 index 000000000..c62958a12 --- /dev/null +++ b/public/img/dreamgen.svg @@ -0,0 +1 @@ + diff --git a/public/index.html b/public/index.html index 74862b5b3..2992b4e97 100644 --- a/public/index.html +++ b/public/index.html @@ -47,6 +47,8 @@ + + @@ -143,7 +145,7 @@
- + @@ -165,7 +167,7 @@
- + @@ -183,7 +185,7 @@
- + @@ -199,7 +201,7 @@
- + @@ -264,6 +266,9 @@
+ + Max prompt cost: +

@@ -440,7 +445,7 @@
-
- Quick Prompts Edit + Quick Prompts Edit
@@ -1164,7 +1169,7 @@
Multiple swipes per generation - +
@@ -1234,7 +1239,7 @@
Eta Cutoff -
+
@@ -1269,7 +1274,7 @@
-
+
Min Length @@ -1279,6 +1284,11 @@
+
+ Maximum tokens/second + + +
- -
- Tokens: counting... -
-
-
- First message - - +
+
+
- - -
- Tokens: counting... -
-
-
- Creator's Notes - - +
+
+
+ First message + + + + +
+ +
+ +
+ Tokens: counting...
-
-
-
@@ -4166,6 +4212,7 @@ +
@@ -4196,9 +4243,9 @@
- - - + + +
@@ -4275,7 +4322,7 @@
-

Creator's Notes

+

Creator's Notes

@@ -4398,7 +4445,7 @@ Chat History
- - @@ -4553,7 +4600,7 @@
- @@ -4857,7 +4904,7 @@
-
+
@@ -4873,7 +4920,7 @@
-
+
@@ -4905,7 +4952,7 @@
-
+
@@ -5527,12 +5574,14 @@ toastr.options.positionClass = "toast-top-center"; // Where to position the toast container diff --git a/public/instruct/DreamGen Role-Play V1.json b/public/instruct/DreamGen Role-Play V1.json new file mode 100644 index 000000000..419aec4d7 --- /dev/null +++ b/public/instruct/DreamGen Role-Play V1.json @@ -0,0 +1,18 @@ +{ + "system_prompt": "You are an intelligent, skilled, versatile writer.\n\nYour task is to write a role-play based on the information below.", + "input_sequence": "<|im_end|>\n<|im_start|>text names= {{user}}\n", + "output_sequence": "<|im_end|>\n<|im_start|>text names= {{char}}\n", + "first_output_sequence": "", + "last_output_sequence": "", + "system_sequence_prefix": "", + "system_sequence_suffix": "", + "stop_sequence": "", + "separator_sequence": "", + "wrap": false, + "macro": true, + "names": false, + "names_force_groups": false, + "activation_regex": "", + "skip_examples": false, + "name": "DreamGen Role-Play V1" +} \ No newline at end of file diff --git a/public/jsconfig.json b/public/jsconfig.json index 2ac546722..aad133bc6 100644 --- a/public/jsconfig.json +++ b/public/jsconfig.json @@ -23,7 +23,8 @@ "handlebars", "highlight.js", "localforage", - "pdfjs-dist" + "pdfjs-dist", + "@mozilla/readability" ] } } diff --git a/public/lib/Readability-readerable.js b/public/lib/Readability-readerable.js new file mode 100644 index 000000000..892169fb9 --- /dev/null +++ b/public/lib/Readability-readerable.js @@ -0,0 +1,108 @@ +/* + * Copyright (c) 2010 Arc90 Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This code is heavily based on Arc90's readability.js (1.7.1) script + * available at: http://code.google.com/p/arc90labs-readability + */ + +var REGEXPS = { + // NOTE: These two regular expressions are duplicated in + // Readability.js. Please keep both copies in sync. + unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i, + okMaybeItsACandidate: /and|article|body|column|content|main|shadow/i, +}; + +function isNodeVisible(node) { + // Have to null-check node.style and node.className.indexOf to deal with SVG and MathML nodes. + return (!node.style || node.style.display != "none") + && !node.hasAttribute("hidden") + //check for "fallback-image" so that wikimedia math images are displayed + && (!node.hasAttribute("aria-hidden") || node.getAttribute("aria-hidden") != "true" || (node.className && node.className.indexOf && node.className.indexOf("fallback-image") !== -1)); +} + +/** + * Decides whether or not the document is reader-able without parsing the whole thing. + * @param {Object} options Configuration object. + * @param {number} [options.minContentLength=140] The minimum node content length used to decide if the document is readerable. + * @param {number} [options.minScore=20] The minumum cumulated 'score' used to determine if the document is readerable. + * @param {Function} [options.visibilityChecker=isNodeVisible] The function used to determine if a node is visible. + * @return {boolean} Whether or not we suspect Readability.parse() will suceeed at returning an article object. + */ +function isProbablyReaderable(doc, options = {}) { + // For backward compatibility reasons 'options' can either be a configuration object or the function used + // to determine if a node is visible. + if (typeof options == "function") { + options = { visibilityChecker: options }; + } + + var defaultOptions = { minScore: 20, minContentLength: 140, visibilityChecker: isNodeVisible }; + options = Object.assign(defaultOptions, options); + + var nodes = doc.querySelectorAll("p, pre, article"); + + // Get
nodes which have
node(s) and append them into the `nodes` variable. + // Some articles' DOM structures might look like + //
+ // Sentences
+ //
+ // Sentences
+ //
+ var brNodes = doc.querySelectorAll("div > br"); + if (brNodes.length) { + var set = new Set(nodes); + [].forEach.call(brNodes, function (node) { + set.add(node.parentNode); + }); + nodes = Array.from(set); + } + + var score = 0; + // This is a little cheeky, we use the accumulator 'score' to decide what to return from + // this callback: + return [].some.call(nodes, function (node) { + if (!options.visibilityChecker(node)) { + return false; + } + + var matchString = node.className + " " + node.id; + if (REGEXPS.unlikelyCandidates.test(matchString) && + !REGEXPS.okMaybeItsACandidate.test(matchString)) { + return false; + } + + if (node.matches("li p")) { + return false; + } + + var textContentLength = node.textContent.trim().length; + if (textContentLength < options.minContentLength) { + return false; + } + + score += Math.sqrt(textContentLength - options.minContentLength); + + if (score > options.minScore) { + return true; + } + return false; + }); +} + +if (typeof module === "object") { + /* global module */ + module.exports = isProbablyReaderable; +} diff --git a/public/lib/Readability.js b/public/lib/Readability.js new file mode 100644 index 000000000..b745aa01d --- /dev/null +++ b/public/lib/Readability.js @@ -0,0 +1,2314 @@ +/* + * Copyright (c) 2010 Arc90 Inc + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * This code is heavily based on Arc90's readability.js (1.7.1) script + * available at: http://code.google.com/p/arc90labs-readability + */ + +/** + * Public constructor. + * @param {HTMLDocument} doc The document to parse. + * @param {Object} options The options object. + */ +function Readability(doc, options) { + // In some older versions, people passed a URI as the first argument. Cope: + if (options && options.documentElement) { + doc = options; + options = arguments[2]; + } else if (!doc || !doc.documentElement) { + throw new Error("First argument to Readability constructor should be a document object."); + } + options = options || {}; + + this._doc = doc; + this._docJSDOMParser = this._doc.firstChild.__JSDOMParser__; + this._articleTitle = null; + this._articleByline = null; + this._articleDir = null; + this._articleSiteName = null; + this._attempts = []; + + // Configurable options + this._debug = !!options.debug; + this._maxElemsToParse = options.maxElemsToParse || this.DEFAULT_MAX_ELEMS_TO_PARSE; + this._nbTopCandidates = options.nbTopCandidates || this.DEFAULT_N_TOP_CANDIDATES; + this._charThreshold = options.charThreshold || this.DEFAULT_CHAR_THRESHOLD; + this._classesToPreserve = this.CLASSES_TO_PRESERVE.concat(options.classesToPreserve || []); + this._keepClasses = !!options.keepClasses; + this._serializer = options.serializer || function(el) { + return el.innerHTML; + }; + this._disableJSONLD = !!options.disableJSONLD; + this._allowedVideoRegex = options.allowedVideoRegex || this.REGEXPS.videos; + + // Start with all flags set + this._flags = this.FLAG_STRIP_UNLIKELYS | + this.FLAG_WEIGHT_CLASSES | + this.FLAG_CLEAN_CONDITIONALLY; + + + // Control whether log messages are sent to the console + if (this._debug) { + let logNode = function(node) { + if (node.nodeType == node.TEXT_NODE) { + return `${node.nodeName} ("${node.textContent}")`; + } + let attrPairs = Array.from(node.attributes || [], function(attr) { + return `${attr.name}="${attr.value}"`; + }).join(" "); + return `<${node.localName} ${attrPairs}>`; + }; + this.log = function () { + if (typeof console !== "undefined") { + let args = Array.from(arguments, arg => { + if (arg && arg.nodeType == this.ELEMENT_NODE) { + return logNode(arg); + } + return arg; + }); + args.unshift("Reader: (Readability)"); + console.log.apply(console, args); + } else if (typeof dump !== "undefined") { + /* global dump */ + var msg = Array.prototype.map.call(arguments, function(x) { + return (x && x.nodeName) ? logNode(x) : x; + }).join(" "); + dump("Reader: (Readability) " + msg + "\n"); + } + }; + } else { + this.log = function () {}; + } +} + +Readability.prototype = { + FLAG_STRIP_UNLIKELYS: 0x1, + FLAG_WEIGHT_CLASSES: 0x2, + FLAG_CLEAN_CONDITIONALLY: 0x4, + + // https://developer.mozilla.org/en-US/docs/Web/API/Node/nodeType + ELEMENT_NODE: 1, + TEXT_NODE: 3, + + // Max number of nodes supported by this parser. Default: 0 (no limit) + DEFAULT_MAX_ELEMS_TO_PARSE: 0, + + // The number of top candidates to consider when analysing how + // tight the competition is among candidates. + DEFAULT_N_TOP_CANDIDATES: 5, + + // Element tags to score by default. + DEFAULT_TAGS_TO_SCORE: "section,h2,h3,h4,h5,h6,p,td,pre".toUpperCase().split(","), + + // The default number of chars an article must have in order to return a result + DEFAULT_CHAR_THRESHOLD: 500, + + // All of the regular expressions in use within readability. + // Defined up here so we don't instantiate them repeatedly in loops. + REGEXPS: { + // NOTE: These two regular expressions are duplicated in + // Readability-readerable.js. Please keep both copies in sync. + unlikelyCandidates: /-ad-|ai2html|banner|breadcrumbs|combx|comment|community|cover-wrap|disqus|extra|footer|gdpr|header|legends|menu|related|remark|replies|rss|shoutbox|sidebar|skyscraper|social|sponsor|supplemental|ad-break|agegate|pagination|pager|popup|yom-remote/i, + okMaybeItsACandidate: /and|article|body|column|content|main|shadow/i, + + positive: /article|body|content|entry|hentry|h-entry|main|page|pagination|post|text|blog|story/i, + negative: /-ad-|hidden|^hid$| hid$| hid |^hid |banner|combx|comment|com-|contact|foot|footer|footnote|gdpr|masthead|media|meta|outbrain|promo|related|scroll|share|shoutbox|sidebar|skyscraper|sponsor|shopping|tags|tool|widget/i, + extraneous: /print|archive|comment|discuss|e[\-]?mail|share|reply|all|login|sign|single|utility/i, + byline: /byline|author|dateline|writtenby|p-author/i, + replaceFonts: /<(\/?)font[^>]*>/gi, + normalize: /\s{2,}/g, + videos: /\/\/(www\.)?((dailymotion|youtube|youtube-nocookie|player\.vimeo|v\.qq)\.com|(archive|upload\.wikimedia)\.org|player\.twitch\.tv)/i, + shareElements: /(\b|_)(share|sharedaddy)(\b|_)/i, + nextLink: /(next|weiter|continue|>([^\|]|$)|»([^\|]|$))/i, + prevLink: /(prev|earl|old|new|<|«)/i, + tokenize: /\W+/g, + whitespace: /^\s*$/, + hasContent: /\S$/, + hashUrl: /^#.+/, + srcsetUrl: /(\S+)(\s+[\d.]+[xw])?(\s*(?:,|$))/g, + b64DataUrl: /^data:\s*([^\s;,]+)\s*;\s*base64\s*,/i, + // Commas as used in Latin, Sindhi, Chinese and various other scripts. + // see: https://en.wikipedia.org/wiki/Comma#Comma_variants + commas: /\u002C|\u060C|\uFE50|\uFE10|\uFE11|\u2E41|\u2E34|\u2E32|\uFF0C/g, + // See: https://schema.org/Article + jsonLdArticleTypes: /^Article|AdvertiserContentArticle|NewsArticle|AnalysisNewsArticle|AskPublicNewsArticle|BackgroundNewsArticle|OpinionNewsArticle|ReportageNewsArticle|ReviewNewsArticle|Report|SatiricalArticle|ScholarlyArticle|MedicalScholarlyArticle|SocialMediaPosting|BlogPosting|LiveBlogPosting|DiscussionForumPosting|TechArticle|APIReference$/ + }, + + UNLIKELY_ROLES: [ "menu", "menubar", "complementary", "navigation", "alert", "alertdialog", "dialog" ], + + DIV_TO_P_ELEMS: new Set([ "BLOCKQUOTE", "DL", "DIV", "IMG", "OL", "P", "PRE", "TABLE", "UL" ]), + + ALTER_TO_DIV_EXCEPTIONS: ["DIV", "ARTICLE", "SECTION", "P"], + + PRESENTATIONAL_ATTRIBUTES: [ "align", "background", "bgcolor", "border", "cellpadding", "cellspacing", "frame", "hspace", "rules", "style", "valign", "vspace" ], + + DEPRECATED_SIZE_ATTRIBUTE_ELEMS: [ "TABLE", "TH", "TD", "HR", "PRE" ], + + // The commented out elements qualify as phrasing content but tend to be + // removed by readability when put into paragraphs, so we ignore them here. + PHRASING_ELEMS: [ + // "CANVAS", "IFRAME", "SVG", "VIDEO", + "ABBR", "AUDIO", "B", "BDO", "BR", "BUTTON", "CITE", "CODE", "DATA", + "DATALIST", "DFN", "EM", "EMBED", "I", "IMG", "INPUT", "KBD", "LABEL", + "MARK", "MATH", "METER", "NOSCRIPT", "OBJECT", "OUTPUT", "PROGRESS", "Q", + "RUBY", "SAMP", "SCRIPT", "SELECT", "SMALL", "SPAN", "STRONG", "SUB", + "SUP", "TEXTAREA", "TIME", "VAR", "WBR" + ], + + // These are the classes that readability sets itself. + CLASSES_TO_PRESERVE: [ "page" ], + + // These are the list of HTML entities that need to be escaped. + HTML_ESCAPE_MAP: { + "lt": "<", + "gt": ">", + "amp": "&", + "quot": '"', + "apos": "'", + }, + + /** + * Run any post-process modifications to article content as necessary. + * + * @param Element + * @return void + **/ + _postProcessContent: function(articleContent) { + // Readability cannot open relative uris so we convert them to absolute uris. + this._fixRelativeUris(articleContent); + + this._simplifyNestedElements(articleContent); + + if (!this._keepClasses) { + // Remove classes. + this._cleanClasses(articleContent); + } + }, + + /** + * Iterates over a NodeList, calls `filterFn` for each node and removes node + * if function returned `true`. + * + * If function is not passed, removes all the nodes in node list. + * + * @param NodeList nodeList The nodes to operate on + * @param Function filterFn the function to use as a filter + * @return void + */ + _removeNodes: function(nodeList, filterFn) { + // Avoid ever operating on live node lists. + if (this._docJSDOMParser && nodeList._isLiveNodeList) { + throw new Error("Do not pass live node lists to _removeNodes"); + } + for (var i = nodeList.length - 1; i >= 0; i--) { + var node = nodeList[i]; + var parentNode = node.parentNode; + if (parentNode) { + if (!filterFn || filterFn.call(this, node, i, nodeList)) { + parentNode.removeChild(node); + } + } + } + }, + + /** + * Iterates over a NodeList, and calls _setNodeTag for each node. + * + * @param NodeList nodeList The nodes to operate on + * @param String newTagName the new tag name to use + * @return void + */ + _replaceNodeTags: function(nodeList, newTagName) { + // Avoid ever operating on live node lists. + if (this._docJSDOMParser && nodeList._isLiveNodeList) { + throw new Error("Do not pass live node lists to _replaceNodeTags"); + } + for (const node of nodeList) { + this._setNodeTag(node, newTagName); + } + }, + + /** + * Iterate over a NodeList, which doesn't natively fully implement the Array + * interface. + * + * For convenience, the current object context is applied to the provided + * iterate function. + * + * @param NodeList nodeList The NodeList. + * @param Function fn The iterate function. + * @return void + */ + _forEachNode: function(nodeList, fn) { + Array.prototype.forEach.call(nodeList, fn, this); + }, + + /** + * Iterate over a NodeList, and return the first node that passes + * the supplied test function + * + * For convenience, the current object context is applied to the provided + * test function. + * + * @param NodeList nodeList The NodeList. + * @param Function fn The test function. + * @return void + */ + _findNode: function(nodeList, fn) { + return Array.prototype.find.call(nodeList, fn, this); + }, + + /** + * Iterate over a NodeList, return true if any of the provided iterate + * function calls returns true, false otherwise. + * + * For convenience, the current object context is applied to the + * provided iterate function. + * + * @param NodeList nodeList The NodeList. + * @param Function fn The iterate function. + * @return Boolean + */ + _someNode: function(nodeList, fn) { + return Array.prototype.some.call(nodeList, fn, this); + }, + + /** + * Iterate over a NodeList, return true if all of the provided iterate + * function calls return true, false otherwise. + * + * For convenience, the current object context is applied to the + * provided iterate function. + * + * @param NodeList nodeList The NodeList. + * @param Function fn The iterate function. + * @return Boolean + */ + _everyNode: function(nodeList, fn) { + return Array.prototype.every.call(nodeList, fn, this); + }, + + /** + * Concat all nodelists passed as arguments. + * + * @return ...NodeList + * @return Array + */ + _concatNodeLists: function() { + var slice = Array.prototype.slice; + var args = slice.call(arguments); + var nodeLists = args.map(function(list) { + return slice.call(list); + }); + return Array.prototype.concat.apply([], nodeLists); + }, + + _getAllNodesWithTag: function(node, tagNames) { + if (node.querySelectorAll) { + return node.querySelectorAll(tagNames.join(",")); + } + return [].concat.apply([], tagNames.map(function(tag) { + var collection = node.getElementsByTagName(tag); + return Array.isArray(collection) ? collection : Array.from(collection); + })); + }, + + /** + * Removes the class="" attribute from every element in the given + * subtree, except those that match CLASSES_TO_PRESERVE and + * the classesToPreserve array from the options object. + * + * @param Element + * @return void + */ + _cleanClasses: function(node) { + var classesToPreserve = this._classesToPreserve; + var className = (node.getAttribute("class") || "") + .split(/\s+/) + .filter(function(cls) { + return classesToPreserve.indexOf(cls) != -1; + }) + .join(" "); + + if (className) { + node.setAttribute("class", className); + } else { + node.removeAttribute("class"); + } + + for (node = node.firstElementChild; node; node = node.nextElementSibling) { + this._cleanClasses(node); + } + }, + + /** + * Converts each and uri in the given element to an absolute URI, + * ignoring #ref URIs. + * + * @param Element + * @return void + */ + _fixRelativeUris: function(articleContent) { + var baseURI = this._doc.baseURI; + var documentURI = this._doc.documentURI; + function toAbsoluteURI(uri) { + // Leave hash links alone if the base URI matches the document URI: + if (baseURI == documentURI && uri.charAt(0) == "#") { + return uri; + } + + // Otherwise, resolve against base URI: + try { + return new URL(uri, baseURI).href; + } catch (ex) { + // Something went wrong, just return the original: + } + return uri; + } + + var links = this._getAllNodesWithTag(articleContent, ["a"]); + this._forEachNode(links, function(link) { + var href = link.getAttribute("href"); + if (href) { + // Remove links with javascript: URIs, since + // they won't work after scripts have been removed from the page. + if (href.indexOf("javascript:") === 0) { + // if the link only contains simple text content, it can be converted to a text node + if (link.childNodes.length === 1 && link.childNodes[0].nodeType === this.TEXT_NODE) { + var text = this._doc.createTextNode(link.textContent); + link.parentNode.replaceChild(text, link); + } else { + // if the link has multiple children, they should all be preserved + var container = this._doc.createElement("span"); + while (link.firstChild) { + container.appendChild(link.firstChild); + } + link.parentNode.replaceChild(container, link); + } + } else { + link.setAttribute("href", toAbsoluteURI(href)); + } + } + }); + + var medias = this._getAllNodesWithTag(articleContent, [ + "img", "picture", "figure", "video", "audio", "source" + ]); + + this._forEachNode(medias, function(media) { + var src = media.getAttribute("src"); + var poster = media.getAttribute("poster"); + var srcset = media.getAttribute("srcset"); + + if (src) { + media.setAttribute("src", toAbsoluteURI(src)); + } + + if (poster) { + media.setAttribute("poster", toAbsoluteURI(poster)); + } + + if (srcset) { + var newSrcset = srcset.replace(this.REGEXPS.srcsetUrl, function(_, p1, p2, p3) { + return toAbsoluteURI(p1) + (p2 || "") + p3; + }); + + media.setAttribute("srcset", newSrcset); + } + }); + }, + + _simplifyNestedElements: function(articleContent) { + var node = articleContent; + + while (node) { + if (node.parentNode && ["DIV", "SECTION"].includes(node.tagName) && !(node.id && node.id.startsWith("readability"))) { + if (this._isElementWithoutContent(node)) { + node = this._removeAndGetNext(node); + continue; + } else if (this._hasSingleTagInsideElement(node, "DIV") || this._hasSingleTagInsideElement(node, "SECTION")) { + var child = node.children[0]; + for (var i = 0; i < node.attributes.length; i++) { + child.setAttribute(node.attributes[i].name, node.attributes[i].value); + } + node.parentNode.replaceChild(child, node); + node = child; + continue; + } + } + + node = this._getNextNode(node); + } + }, + + /** + * Get the article title as an H1. + * + * @return string + **/ + _getArticleTitle: function() { + var doc = this._doc; + var curTitle = ""; + var origTitle = ""; + + try { + curTitle = origTitle = doc.title.trim(); + + // If they had an element with id "title" in their HTML + if (typeof curTitle !== "string") + curTitle = origTitle = this._getInnerText(doc.getElementsByTagName("title")[0]); + } catch (e) {/* ignore exceptions setting the title. */} + + var titleHadHierarchicalSeparators = false; + function wordCount(str) { + return str.split(/\s+/).length; + } + + // If there's a separator in the title, first remove the final part + if ((/ [\|\-\\\/>»] /).test(curTitle)) { + titleHadHierarchicalSeparators = / [\\\/>»] /.test(curTitle); + curTitle = origTitle.replace(/(.*)[\|\-\\\/>»] .*/gi, "$1"); + + // If the resulting title is too short (3 words or fewer), remove + // the first part instead: + if (wordCount(curTitle) < 3) + curTitle = origTitle.replace(/[^\|\-\\\/>»]*[\|\-\\\/>»](.*)/gi, "$1"); + } else if (curTitle.indexOf(": ") !== -1) { + // Check if we have an heading containing this exact string, so we + // could assume it's the full title. + var headings = this._concatNodeLists( + doc.getElementsByTagName("h1"), + doc.getElementsByTagName("h2") + ); + var trimmedTitle = curTitle.trim(); + var match = this._someNode(headings, function(heading) { + return heading.textContent.trim() === trimmedTitle; + }); + + // If we don't, let's extract the title out of the original title string. + if (!match) { + curTitle = origTitle.substring(origTitle.lastIndexOf(":") + 1); + + // If the title is now too short, try the first colon instead: + if (wordCount(curTitle) < 3) { + curTitle = origTitle.substring(origTitle.indexOf(":") + 1); + // But if we have too many words before the colon there's something weird + // with the titles and the H tags so let's just use the original title instead + } else if (wordCount(origTitle.substr(0, origTitle.indexOf(":"))) > 5) { + curTitle = origTitle; + } + } + } else if (curTitle.length > 150 || curTitle.length < 15) { + var hOnes = doc.getElementsByTagName("h1"); + + if (hOnes.length === 1) + curTitle = this._getInnerText(hOnes[0]); + } + + curTitle = curTitle.trim().replace(this.REGEXPS.normalize, " "); + // If we now have 4 words or fewer as our title, and either no + // 'hierarchical' separators (\, /, > or ») were found in the original + // title or we decreased the number of words by more than 1 word, use + // the original title. + var curTitleWordCount = wordCount(curTitle); + if (curTitleWordCount <= 4 && + (!titleHadHierarchicalSeparators || + curTitleWordCount != wordCount(origTitle.replace(/[\|\-\\\/>»]+/g, "")) - 1)) { + curTitle = origTitle; + } + + return curTitle; + }, + + /** + * Prepare the HTML document for readability to scrape it. + * This includes things like stripping javascript, CSS, and handling terrible markup. + * + * @return void + **/ + _prepDocument: function() { + var doc = this._doc; + + // Remove all style tags in head + this._removeNodes(this._getAllNodesWithTag(doc, ["style"])); + + if (doc.body) { + this._replaceBrs(doc.body); + } + + this._replaceNodeTags(this._getAllNodesWithTag(doc, ["font"]), "SPAN"); + }, + + /** + * Finds the next node, starting from the given node, and ignoring + * whitespace in between. If the given node is an element, the same node is + * returned. + */ + _nextNode: function (node) { + var next = node; + while (next + && (next.nodeType != this.ELEMENT_NODE) + && this.REGEXPS.whitespace.test(next.textContent)) { + next = next.nextSibling; + } + return next; + }, + + /** + * Replaces 2 or more successive
elements with a single

. + * Whitespace between
elements are ignored. For example: + *

foo
bar


abc
+ * will become: + *
foo
bar

abc

+ */ + _replaceBrs: function (elem) { + this._forEachNode(this._getAllNodesWithTag(elem, ["br"]), function(br) { + var next = br.nextSibling; + + // Whether 2 or more
elements have been found and replaced with a + //

block. + var replaced = false; + + // If we find a
chain, remove the
s until we hit another node + // or non-whitespace. This leaves behind the first
in the chain + // (which will be replaced with a

later). + while ((next = this._nextNode(next)) && (next.tagName == "BR")) { + replaced = true; + var brSibling = next.nextSibling; + next.parentNode.removeChild(next); + next = brSibling; + } + + // If we removed a
chain, replace the remaining
with a

. Add + // all sibling nodes as children of the

until we hit another
+ // chain. + if (replaced) { + var p = this._doc.createElement("p"); + br.parentNode.replaceChild(p, br); + + next = p.nextSibling; + while (next) { + // If we've hit another

, we're done adding children to this

. + if (next.tagName == "BR") { + var nextElem = this._nextNode(next.nextSibling); + if (nextElem && nextElem.tagName == "BR") + break; + } + + if (!this._isPhrasingContent(next)) + break; + + // Otherwise, make this node a child of the new

. + var sibling = next.nextSibling; + p.appendChild(next); + next = sibling; + } + + while (p.lastChild && this._isWhitespace(p.lastChild)) { + p.removeChild(p.lastChild); + } + + if (p.parentNode.tagName === "P") + this._setNodeTag(p.parentNode, "DIV"); + } + }); + }, + + _setNodeTag: function (node, tag) { + this.log("_setNodeTag", node, tag); + if (this._docJSDOMParser) { + node.localName = tag.toLowerCase(); + node.tagName = tag.toUpperCase(); + return node; + } + + var replacement = node.ownerDocument.createElement(tag); + while (node.firstChild) { + replacement.appendChild(node.firstChild); + } + node.parentNode.replaceChild(replacement, node); + if (node.readability) + replacement.readability = node.readability; + + for (var i = 0; i < node.attributes.length; i++) { + try { + replacement.setAttribute(node.attributes[i].name, node.attributes[i].value); + } catch (ex) { + /* it's possible for setAttribute() to throw if the attribute name + * isn't a valid XML Name. Such attributes can however be parsed from + * source in HTML docs, see https://github.com/whatwg/html/issues/4275, + * so we can hit them here and then throw. We don't care about such + * attributes so we ignore them. + */ + } + } + return replacement; + }, + + /** + * Prepare the article node for display. Clean out any inline styles, + * iframes, forms, strip extraneous

tags, etc. + * + * @param Element + * @return void + **/ + _prepArticle: function(articleContent) { + this._cleanStyles(articleContent); + + // Check for data tables before we continue, to avoid removing items in + // those tables, which will often be isolated even though they're + // visually linked to other content-ful elements (text, images, etc.). + this._markDataTables(articleContent); + + this._fixLazyImages(articleContent); + + // Clean out junk from the article content + this._cleanConditionally(articleContent, "form"); + this._cleanConditionally(articleContent, "fieldset"); + this._clean(articleContent, "object"); + this._clean(articleContent, "embed"); + this._clean(articleContent, "footer"); + this._clean(articleContent, "link"); + this._clean(articleContent, "aside"); + + // Clean out elements with little content that have "share" in their id/class combinations from final top candidates, + // which means we don't remove the top candidates even they have "share". + + var shareElementThreshold = this.DEFAULT_CHAR_THRESHOLD; + + this._forEachNode(articleContent.children, function (topCandidate) { + this._cleanMatchedNodes(topCandidate, function (node, matchString) { + return this.REGEXPS.shareElements.test(matchString) && node.textContent.length < shareElementThreshold; + }); + }); + + this._clean(articleContent, "iframe"); + this._clean(articleContent, "input"); + this._clean(articleContent, "textarea"); + this._clean(articleContent, "select"); + this._clean(articleContent, "button"); + this._cleanHeaders(articleContent); + + // Do these last as the previous stuff may have removed junk + // that will affect these + this._cleanConditionally(articleContent, "table"); + this._cleanConditionally(articleContent, "ul"); + this._cleanConditionally(articleContent, "div"); + + // replace H1 with H2 as H1 should be only title that is displayed separately + this._replaceNodeTags(this._getAllNodesWithTag(articleContent, ["h1"]), "h2"); + + // Remove extra paragraphs + this._removeNodes(this._getAllNodesWithTag(articleContent, ["p"]), function (paragraph) { + var imgCount = paragraph.getElementsByTagName("img").length; + var embedCount = paragraph.getElementsByTagName("embed").length; + var objectCount = paragraph.getElementsByTagName("object").length; + // At this point, nasty iframes have been removed, only remain embedded video ones. + var iframeCount = paragraph.getElementsByTagName("iframe").length; + var totalCount = imgCount + embedCount + objectCount + iframeCount; + + return totalCount === 0 && !this._getInnerText(paragraph, false); + }); + + this._forEachNode(this._getAllNodesWithTag(articleContent, ["br"]), function(br) { + var next = this._nextNode(br.nextSibling); + if (next && next.tagName == "P") + br.parentNode.removeChild(br); + }); + + // Remove single-cell tables + this._forEachNode(this._getAllNodesWithTag(articleContent, ["table"]), function(table) { + var tbody = this._hasSingleTagInsideElement(table, "TBODY") ? table.firstElementChild : table; + if (this._hasSingleTagInsideElement(tbody, "TR")) { + var row = tbody.firstElementChild; + if (this._hasSingleTagInsideElement(row, "TD")) { + var cell = row.firstElementChild; + cell = this._setNodeTag(cell, this._everyNode(cell.childNodes, this._isPhrasingContent) ? "P" : "DIV"); + table.parentNode.replaceChild(cell, table); + } + } + }); + }, + + /** + * Initialize a node with the readability object. Also checks the + * className/id for special names to add to its score. + * + * @param Element + * @return void + **/ + _initializeNode: function(node) { + node.readability = {"contentScore": 0}; + + switch (node.tagName) { + case "DIV": + node.readability.contentScore += 5; + break; + + case "PRE": + case "TD": + case "BLOCKQUOTE": + node.readability.contentScore += 3; + break; + + case "ADDRESS": + case "OL": + case "UL": + case "DL": + case "DD": + case "DT": + case "LI": + case "FORM": + node.readability.contentScore -= 3; + break; + + case "H1": + case "H2": + case "H3": + case "H4": + case "H5": + case "H6": + case "TH": + node.readability.contentScore -= 5; + break; + } + + node.readability.contentScore += this._getClassWeight(node); + }, + + _removeAndGetNext: function(node) { + var nextNode = this._getNextNode(node, true); + node.parentNode.removeChild(node); + return nextNode; + }, + + /** + * Traverse the DOM from node to node, starting at the node passed in. + * Pass true for the second parameter to indicate this node itself + * (and its kids) are going away, and we want the next node over. + * + * Calling this in a loop will traverse the DOM depth-first. + */ + _getNextNode: function(node, ignoreSelfAndKids) { + // First check for kids if those aren't being ignored + if (!ignoreSelfAndKids && node.firstElementChild) { + return node.firstElementChild; + } + // Then for siblings... + if (node.nextElementSibling) { + return node.nextElementSibling; + } + // And finally, move up the parent chain *and* find a sibling + // (because this is depth-first traversal, we will have already + // seen the parent nodes themselves). + do { + node = node.parentNode; + } while (node && !node.nextElementSibling); + return node && node.nextElementSibling; + }, + + // compares second text to first one + // 1 = same text, 0 = completely different text + // works the way that it splits both texts into words and then finds words that are unique in second text + // the result is given by the lower length of unique parts + _textSimilarity: function(textA, textB) { + var tokensA = textA.toLowerCase().split(this.REGEXPS.tokenize).filter(Boolean); + var tokensB = textB.toLowerCase().split(this.REGEXPS.tokenize).filter(Boolean); + if (!tokensA.length || !tokensB.length) { + return 0; + } + var uniqTokensB = tokensB.filter(token => !tokensA.includes(token)); + var distanceB = uniqTokensB.join(" ").length / tokensB.join(" ").length; + return 1 - distanceB; + }, + + _checkByline: function(node, matchString) { + if (this._articleByline) { + return false; + } + + if (node.getAttribute !== undefined) { + var rel = node.getAttribute("rel"); + var itemprop = node.getAttribute("itemprop"); + } + + if ((rel === "author" || (itemprop && itemprop.indexOf("author") !== -1) || this.REGEXPS.byline.test(matchString)) && this._isValidByline(node.textContent)) { + this._articleByline = node.textContent.trim(); + return true; + } + + return false; + }, + + _getNodeAncestors: function(node, maxDepth) { + maxDepth = maxDepth || 0; + var i = 0, ancestors = []; + while (node.parentNode) { + ancestors.push(node.parentNode); + if (maxDepth && ++i === maxDepth) + break; + node = node.parentNode; + } + return ancestors; + }, + + /*** + * grabArticle - Using a variety of metrics (content score, classname, element types), find the content that is + * most likely to be the stuff a user wants to read. Then return it wrapped up in a div. + * + * @param page a document to run upon. Needs to be a full document, complete with body. + * @return Element + **/ + _grabArticle: function (page) { + this.log("**** grabArticle ****"); + var doc = this._doc; + var isPaging = page !== null; + page = page ? page : this._doc.body; + + // We can't grab an article if we don't have a page! + if (!page) { + this.log("No body found in document. Abort."); + return null; + } + + var pageCacheHtml = page.innerHTML; + + while (true) { + this.log("Starting grabArticle loop"); + var stripUnlikelyCandidates = this._flagIsActive(this.FLAG_STRIP_UNLIKELYS); + + // First, node prepping. Trash nodes that look cruddy (like ones with the + // class name "comment", etc), and turn divs into P tags where they have been + // used inappropriately (as in, where they contain no other block level elements.) + var elementsToScore = []; + var node = this._doc.documentElement; + + let shouldRemoveTitleHeader = true; + + while (node) { + + if (node.tagName === "HTML") { + this._articleLang = node.getAttribute("lang"); + } + + var matchString = node.className + " " + node.id; + + if (!this._isProbablyVisible(node)) { + this.log("Removing hidden node - " + matchString); + node = this._removeAndGetNext(node); + continue; + } + + // User is not able to see elements applied with both "aria-modal = true" and "role = dialog" + if (node.getAttribute("aria-modal") == "true" && node.getAttribute("role") == "dialog") { + node = this._removeAndGetNext(node); + continue; + } + + // Check to see if this node is a byline, and remove it if it is. + if (this._checkByline(node, matchString)) { + node = this._removeAndGetNext(node); + continue; + } + + if (shouldRemoveTitleHeader && this._headerDuplicatesTitle(node)) { + this.log("Removing header: ", node.textContent.trim(), this._articleTitle.trim()); + shouldRemoveTitleHeader = false; + node = this._removeAndGetNext(node); + continue; + } + + // Remove unlikely candidates + if (stripUnlikelyCandidates) { + if (this.REGEXPS.unlikelyCandidates.test(matchString) && + !this.REGEXPS.okMaybeItsACandidate.test(matchString) && + !this._hasAncestorTag(node, "table") && + !this._hasAncestorTag(node, "code") && + node.tagName !== "BODY" && + node.tagName !== "A") { + this.log("Removing unlikely candidate - " + matchString); + node = this._removeAndGetNext(node); + continue; + } + + if (this.UNLIKELY_ROLES.includes(node.getAttribute("role"))) { + this.log("Removing content with role " + node.getAttribute("role") + " - " + matchString); + node = this._removeAndGetNext(node); + continue; + } + } + + // Remove DIV, SECTION, and HEADER nodes without any content(e.g. text, image, video, or iframe). + if ((node.tagName === "DIV" || node.tagName === "SECTION" || node.tagName === "HEADER" || + node.tagName === "H1" || node.tagName === "H2" || node.tagName === "H3" || + node.tagName === "H4" || node.tagName === "H5" || node.tagName === "H6") && + this._isElementWithoutContent(node)) { + node = this._removeAndGetNext(node); + continue; + } + + if (this.DEFAULT_TAGS_TO_SCORE.indexOf(node.tagName) !== -1) { + elementsToScore.push(node); + } + + // Turn all divs that don't have children block level elements into p's + if (node.tagName === "DIV") { + // Put phrasing content into paragraphs. + var p = null; + var childNode = node.firstChild; + while (childNode) { + var nextSibling = childNode.nextSibling; + if (this._isPhrasingContent(childNode)) { + if (p !== null) { + p.appendChild(childNode); + } else if (!this._isWhitespace(childNode)) { + p = doc.createElement("p"); + node.replaceChild(p, childNode); + p.appendChild(childNode); + } + } else if (p !== null) { + while (p.lastChild && this._isWhitespace(p.lastChild)) { + p.removeChild(p.lastChild); + } + p = null; + } + childNode = nextSibling; + } + + // Sites like http://mobile.slate.com encloses each paragraph with a DIV + // element. DIVs with only a P element inside and no text content can be + // safely converted into plain P elements to avoid confusing the scoring + // algorithm with DIVs with are, in practice, paragraphs. + if (this._hasSingleTagInsideElement(node, "P") && this._getLinkDensity(node) < 0.25) { + var newNode = node.children[0]; + node.parentNode.replaceChild(newNode, node); + node = newNode; + elementsToScore.push(node); + } else if (!this._hasChildBlockElement(node)) { + node = this._setNodeTag(node, "P"); + elementsToScore.push(node); + } + } + node = this._getNextNode(node); + } + + /** + * Loop through all paragraphs, and assign a score to them based on how content-y they look. + * Then add their score to their parent node. + * + * A score is determined by things like number of commas, class names, etc. Maybe eventually link density. + **/ + var candidates = []; + this._forEachNode(elementsToScore, function(elementToScore) { + if (!elementToScore.parentNode || typeof(elementToScore.parentNode.tagName) === "undefined") + return; + + // If this paragraph is less than 25 characters, don't even count it. + var innerText = this._getInnerText(elementToScore); + if (innerText.length < 25) + return; + + // Exclude nodes with no ancestor. + var ancestors = this._getNodeAncestors(elementToScore, 5); + if (ancestors.length === 0) + return; + + var contentScore = 0; + + // Add a point for the paragraph itself as a base. + contentScore += 1; + + // Add points for any commas within this paragraph. + contentScore += innerText.split(this.REGEXPS.commas).length; + + // For every 100 characters in this paragraph, add another point. Up to 3 points. + contentScore += Math.min(Math.floor(innerText.length / 100), 3); + + // Initialize and score ancestors. + this._forEachNode(ancestors, function(ancestor, level) { + if (!ancestor.tagName || !ancestor.parentNode || typeof(ancestor.parentNode.tagName) === "undefined") + return; + + if (typeof(ancestor.readability) === "undefined") { + this._initializeNode(ancestor); + candidates.push(ancestor); + } + + // Node score divider: + // - parent: 1 (no division) + // - grandparent: 2 + // - great grandparent+: ancestor level * 3 + if (level === 0) + var scoreDivider = 1; + else if (level === 1) + scoreDivider = 2; + else + scoreDivider = level * 3; + ancestor.readability.contentScore += contentScore / scoreDivider; + }); + }); + + // After we've calculated scores, loop through all of the possible + // candidate nodes we found and find the one with the highest score. + var topCandidates = []; + for (var c = 0, cl = candidates.length; c < cl; c += 1) { + var candidate = candidates[c]; + + // Scale the final candidates score based on link density. Good content + // should have a relatively small link density (5% or less) and be mostly + // unaffected by this operation. + var candidateScore = candidate.readability.contentScore * (1 - this._getLinkDensity(candidate)); + candidate.readability.contentScore = candidateScore; + + this.log("Candidate:", candidate, "with score " + candidateScore); + + for (var t = 0; t < this._nbTopCandidates; t++) { + var aTopCandidate = topCandidates[t]; + + if (!aTopCandidate || candidateScore > aTopCandidate.readability.contentScore) { + topCandidates.splice(t, 0, candidate); + if (topCandidates.length > this._nbTopCandidates) + topCandidates.pop(); + break; + } + } + } + + var topCandidate = topCandidates[0] || null; + var neededToCreateTopCandidate = false; + var parentOfTopCandidate; + + // If we still have no top candidate, just use the body as a last resort. + // We also have to copy the body node so it is something we can modify. + if (topCandidate === null || topCandidate.tagName === "BODY") { + // Move all of the page's children into topCandidate + topCandidate = doc.createElement("DIV"); + neededToCreateTopCandidate = true; + // Move everything (not just elements, also text nodes etc.) into the container + // so we even include text directly in the body: + while (page.firstChild) { + this.log("Moving child out:", page.firstChild); + topCandidate.appendChild(page.firstChild); + } + + page.appendChild(topCandidate); + + this._initializeNode(topCandidate); + } else if (topCandidate) { + // Find a better top candidate node if it contains (at least three) nodes which belong to `topCandidates` array + // and whose scores are quite closed with current `topCandidate` node. + var alternativeCandidateAncestors = []; + for (var i = 1; i < topCandidates.length; i++) { + if (topCandidates[i].readability.contentScore / topCandidate.readability.contentScore >= 0.75) { + alternativeCandidateAncestors.push(this._getNodeAncestors(topCandidates[i])); + } + } + var MINIMUM_TOPCANDIDATES = 3; + if (alternativeCandidateAncestors.length >= MINIMUM_TOPCANDIDATES) { + parentOfTopCandidate = topCandidate.parentNode; + while (parentOfTopCandidate.tagName !== "BODY") { + var listsContainingThisAncestor = 0; + for (var ancestorIndex = 0; ancestorIndex < alternativeCandidateAncestors.length && listsContainingThisAncestor < MINIMUM_TOPCANDIDATES; ancestorIndex++) { + listsContainingThisAncestor += Number(alternativeCandidateAncestors[ancestorIndex].includes(parentOfTopCandidate)); + } + if (listsContainingThisAncestor >= MINIMUM_TOPCANDIDATES) { + topCandidate = parentOfTopCandidate; + break; + } + parentOfTopCandidate = parentOfTopCandidate.parentNode; + } + } + if (!topCandidate.readability) { + this._initializeNode(topCandidate); + } + + // Because of our bonus system, parents of candidates might have scores + // themselves. They get half of the node. There won't be nodes with higher + // scores than our topCandidate, but if we see the score going *up* in the first + // few steps up the tree, that's a decent sign that there might be more content + // lurking in other places that we want to unify in. The sibling stuff + // below does some of that - but only if we've looked high enough up the DOM + // tree. + parentOfTopCandidate = topCandidate.parentNode; + var lastScore = topCandidate.readability.contentScore; + // The scores shouldn't get too low. + var scoreThreshold = lastScore / 3; + while (parentOfTopCandidate.tagName !== "BODY") { + if (!parentOfTopCandidate.readability) { + parentOfTopCandidate = parentOfTopCandidate.parentNode; + continue; + } + var parentScore = parentOfTopCandidate.readability.contentScore; + if (parentScore < scoreThreshold) + break; + if (parentScore > lastScore) { + // Alright! We found a better parent to use. + topCandidate = parentOfTopCandidate; + break; + } + lastScore = parentOfTopCandidate.readability.contentScore; + parentOfTopCandidate = parentOfTopCandidate.parentNode; + } + + // If the top candidate is the only child, use parent instead. This will help sibling + // joining logic when adjacent content is actually located in parent's sibling node. + parentOfTopCandidate = topCandidate.parentNode; + while (parentOfTopCandidate.tagName != "BODY" && parentOfTopCandidate.children.length == 1) { + topCandidate = parentOfTopCandidate; + parentOfTopCandidate = topCandidate.parentNode; + } + if (!topCandidate.readability) { + this._initializeNode(topCandidate); + } + } + + // Now that we have the top candidate, look through its siblings for content + // that might also be related. Things like preambles, content split by ads + // that we removed, etc. + var articleContent = doc.createElement("DIV"); + if (isPaging) + articleContent.id = "readability-content"; + + var siblingScoreThreshold = Math.max(10, topCandidate.readability.contentScore * 0.2); + // Keep potential top candidate's parent node to try to get text direction of it later. + parentOfTopCandidate = topCandidate.parentNode; + var siblings = parentOfTopCandidate.children; + + for (var s = 0, sl = siblings.length; s < sl; s++) { + var sibling = siblings[s]; + var append = false; + + this.log("Looking at sibling node:", sibling, sibling.readability ? ("with score " + sibling.readability.contentScore) : ""); + this.log("Sibling has score", sibling.readability ? sibling.readability.contentScore : "Unknown"); + + if (sibling === topCandidate) { + append = true; + } else { + var contentBonus = 0; + + // Give a bonus if sibling nodes and top candidates have the example same classname + if (sibling.className === topCandidate.className && topCandidate.className !== "") + contentBonus += topCandidate.readability.contentScore * 0.2; + + if (sibling.readability && + ((sibling.readability.contentScore + contentBonus) >= siblingScoreThreshold)) { + append = true; + } else if (sibling.nodeName === "P") { + var linkDensity = this._getLinkDensity(sibling); + var nodeContent = this._getInnerText(sibling); + var nodeLength = nodeContent.length; + + if (nodeLength > 80 && linkDensity < 0.25) { + append = true; + } else if (nodeLength < 80 && nodeLength > 0 && linkDensity === 0 && + nodeContent.search(/\.( |$)/) !== -1) { + append = true; + } + } + } + + if (append) { + this.log("Appending node:", sibling); + + if (this.ALTER_TO_DIV_EXCEPTIONS.indexOf(sibling.nodeName) === -1) { + // We have a node that isn't a common block level element, like a form or td tag. + // Turn it into a div so it doesn't get filtered out later by accident. + this.log("Altering sibling:", sibling, "to div."); + + sibling = this._setNodeTag(sibling, "DIV"); + } + + articleContent.appendChild(sibling); + // Fetch children again to make it compatible + // with DOM parsers without live collection support. + siblings = parentOfTopCandidate.children; + // siblings is a reference to the children array, and + // sibling is removed from the array when we call appendChild(). + // As a result, we must revisit this index since the nodes + // have been shifted. + s -= 1; + sl -= 1; + } + } + + if (this._debug) + this.log("Article content pre-prep: " + articleContent.innerHTML); + // So we have all of the content that we need. Now we clean it up for presentation. + this._prepArticle(articleContent); + if (this._debug) + this.log("Article content post-prep: " + articleContent.innerHTML); + + if (neededToCreateTopCandidate) { + // We already created a fake div thing, and there wouldn't have been any siblings left + // for the previous loop, so there's no point trying to create a new div, and then + // move all the children over. Just assign IDs and class names here. No need to append + // because that already happened anyway. + topCandidate.id = "readability-page-1"; + topCandidate.className = "page"; + } else { + var div = doc.createElement("DIV"); + div.id = "readability-page-1"; + div.className = "page"; + while (articleContent.firstChild) { + div.appendChild(articleContent.firstChild); + } + articleContent.appendChild(div); + } + + if (this._debug) + this.log("Article content after paging: " + articleContent.innerHTML); + + var parseSuccessful = true; + + // Now that we've gone through the full algorithm, check to see if + // we got any meaningful content. If we didn't, we may need to re-run + // grabArticle with different flags set. This gives us a higher likelihood of + // finding the content, and the sieve approach gives us a higher likelihood of + // finding the -right- content. + var textLength = this._getInnerText(articleContent, true).length; + if (textLength < this._charThreshold) { + parseSuccessful = false; + page.innerHTML = pageCacheHtml; + + if (this._flagIsActive(this.FLAG_STRIP_UNLIKELYS)) { + this._removeFlag(this.FLAG_STRIP_UNLIKELYS); + this._attempts.push({articleContent: articleContent, textLength: textLength}); + } else if (this._flagIsActive(this.FLAG_WEIGHT_CLASSES)) { + this._removeFlag(this.FLAG_WEIGHT_CLASSES); + this._attempts.push({articleContent: articleContent, textLength: textLength}); + } else if (this._flagIsActive(this.FLAG_CLEAN_CONDITIONALLY)) { + this._removeFlag(this.FLAG_CLEAN_CONDITIONALLY); + this._attempts.push({articleContent: articleContent, textLength: textLength}); + } else { + this._attempts.push({articleContent: articleContent, textLength: textLength}); + // No luck after removing flags, just return the longest text we found during the different loops + this._attempts.sort(function (a, b) { + return b.textLength - a.textLength; + }); + + // But first check if we actually have something + if (!this._attempts[0].textLength) { + return null; + } + + articleContent = this._attempts[0].articleContent; + parseSuccessful = true; + } + } + + if (parseSuccessful) { + // Find out text direction from ancestors of final top candidate. + var ancestors = [parentOfTopCandidate, topCandidate].concat(this._getNodeAncestors(parentOfTopCandidate)); + this._someNode(ancestors, function(ancestor) { + if (!ancestor.tagName) + return false; + var articleDir = ancestor.getAttribute("dir"); + if (articleDir) { + this._articleDir = articleDir; + return true; + } + return false; + }); + return articleContent; + } + } + }, + + /** + * Check whether the input string could be a byline. + * This verifies that the input is a string, and that the length + * is less than 100 chars. + * + * @param possibleByline {string} - a string to check whether its a byline. + * @return Boolean - whether the input string is a byline. + */ + _isValidByline: function(byline) { + if (typeof byline == "string" || byline instanceof String) { + byline = byline.trim(); + return (byline.length > 0) && (byline.length < 100); + } + return false; + }, + + /** + * Converts some of the common HTML entities in string to their corresponding characters. + * + * @param str {string} - a string to unescape. + * @return string without HTML entity. + */ + _unescapeHtmlEntities: function(str) { + if (!str) { + return str; + } + + var htmlEscapeMap = this.HTML_ESCAPE_MAP; + return str.replace(/&(quot|amp|apos|lt|gt);/g, function(_, tag) { + return htmlEscapeMap[tag]; + }).replace(/&#(?:x([0-9a-z]{1,4})|([0-9]{1,4}));/gi, function(_, hex, numStr) { + var num = parseInt(hex || numStr, hex ? 16 : 10); + return String.fromCharCode(num); + }); + }, + + /** + * Try to extract metadata from JSON-LD object. + * For now, only Schema.org objects of type Article or its subtypes are supported. + * @return Object with any metadata that could be extracted (possibly none) + */ + _getJSONLD: function (doc) { + var scripts = this._getAllNodesWithTag(doc, ["script"]); + + var metadata; + + this._forEachNode(scripts, function(jsonLdElement) { + if (!metadata && jsonLdElement.getAttribute("type") === "application/ld+json") { + try { + // Strip CDATA markers if present + var content = jsonLdElement.textContent.replace(/^\s*\s*$/g, ""); + var parsed = JSON.parse(content); + if ( + !parsed["@context"] || + !parsed["@context"].match(/^https?\:\/\/schema\.org$/) + ) { + return; + } + + if (!parsed["@type"] && Array.isArray(parsed["@graph"])) { + parsed = parsed["@graph"].find(function(it) { + return (it["@type"] || "").match( + this.REGEXPS.jsonLdArticleTypes + ); + }); + } + + if ( + !parsed || + !parsed["@type"] || + !parsed["@type"].match(this.REGEXPS.jsonLdArticleTypes) + ) { + return; + } + + metadata = {}; + + if (typeof parsed.name === "string" && typeof parsed.headline === "string" && parsed.name !== parsed.headline) { + // we have both name and headline element in the JSON-LD. They should both be the same but some websites like aktualne.cz + // put their own name into "name" and the article title to "headline" which confuses Readability. So we try to check if either + // "name" or "headline" closely matches the html title, and if so, use that one. If not, then we use "name" by default. + + var title = this._getArticleTitle(); + var nameMatches = this._textSimilarity(parsed.name, title) > 0.75; + var headlineMatches = this._textSimilarity(parsed.headline, title) > 0.75; + + if (headlineMatches && !nameMatches) { + metadata.title = parsed.headline; + } else { + metadata.title = parsed.name; + } + } else if (typeof parsed.name === "string") { + metadata.title = parsed.name.trim(); + } else if (typeof parsed.headline === "string") { + metadata.title = parsed.headline.trim(); + } + if (parsed.author) { + if (typeof parsed.author.name === "string") { + metadata.byline = parsed.author.name.trim(); + } else if (Array.isArray(parsed.author) && parsed.author[0] && typeof parsed.author[0].name === "string") { + metadata.byline = parsed.author + .filter(function(author) { + return author && typeof author.name === "string"; + }) + .map(function(author) { + return author.name.trim(); + }) + .join(", "); + } + } + if (typeof parsed.description === "string") { + metadata.excerpt = parsed.description.trim(); + } + if ( + parsed.publisher && + typeof parsed.publisher.name === "string" + ) { + metadata.siteName = parsed.publisher.name.trim(); + } + if (typeof parsed.datePublished === "string") { + metadata.datePublished = parsed.datePublished.trim(); + } + return; + } catch (err) { + this.log(err.message); + } + } + }); + return metadata ? metadata : {}; + }, + + /** + * Attempts to get excerpt and byline metadata for the article. + * + * @param {Object} jsonld — object containing any metadata that + * could be extracted from JSON-LD object. + * + * @return Object with optional "excerpt" and "byline" properties + */ + _getArticleMetadata: function(jsonld) { + var metadata = {}; + var values = {}; + var metaElements = this._doc.getElementsByTagName("meta"); + + // property is a space-separated list of values + var propertyPattern = /\s*(article|dc|dcterm|og|twitter)\s*:\s*(author|creator|description|published_time|title|site_name)\s*/gi; + + // name is a single value + var namePattern = /^\s*(?:(dc|dcterm|og|twitter|weibo:(article|webpage))\s*[\.:]\s*)?(author|creator|description|title|site_name)\s*$/i; + + // Find description tags. + this._forEachNode(metaElements, function(element) { + var elementName = element.getAttribute("name"); + var elementProperty = element.getAttribute("property"); + var content = element.getAttribute("content"); + if (!content) { + return; + } + var matches = null; + var name = null; + + if (elementProperty) { + matches = elementProperty.match(propertyPattern); + if (matches) { + // Convert to lowercase, and remove any whitespace + // so we can match below. + name = matches[0].toLowerCase().replace(/\s/g, ""); + // multiple authors + values[name] = content.trim(); + } + } + if (!matches && elementName && namePattern.test(elementName)) { + name = elementName; + if (content) { + // Convert to lowercase, remove any whitespace, and convert dots + // to colons so we can match below. + name = name.toLowerCase().replace(/\s/g, "").replace(/\./g, ":"); + values[name] = content.trim(); + } + } + }); + + // get title + metadata.title = jsonld.title || + values["dc:title"] || + values["dcterm:title"] || + values["og:title"] || + values["weibo:article:title"] || + values["weibo:webpage:title"] || + values["title"] || + values["twitter:title"]; + + if (!metadata.title) { + metadata.title = this._getArticleTitle(); + } + + // get author + metadata.byline = jsonld.byline || + values["dc:creator"] || + values["dcterm:creator"] || + values["author"]; + + // get description + metadata.excerpt = jsonld.excerpt || + values["dc:description"] || + values["dcterm:description"] || + values["og:description"] || + values["weibo:article:description"] || + values["weibo:webpage:description"] || + values["description"] || + values["twitter:description"]; + + // get site name + metadata.siteName = jsonld.siteName || + values["og:site_name"]; + + // get article published time + metadata.publishedTime = jsonld.datePublished || + values["article:published_time"] || null; + + // in many sites the meta value is escaped with HTML entities, + // so here we need to unescape it + metadata.title = this._unescapeHtmlEntities(metadata.title); + metadata.byline = this._unescapeHtmlEntities(metadata.byline); + metadata.excerpt = this._unescapeHtmlEntities(metadata.excerpt); + metadata.siteName = this._unescapeHtmlEntities(metadata.siteName); + metadata.publishedTime = this._unescapeHtmlEntities(metadata.publishedTime); + + return metadata; + }, + + /** + * Check if node is image, or if node contains exactly only one image + * whether as a direct child or as its descendants. + * + * @param Element + **/ + _isSingleImage: function(node) { + if (node.tagName === "IMG") { + return true; + } + + if (node.children.length !== 1 || node.textContent.trim() !== "") { + return false; + } + + return this._isSingleImage(node.children[0]); + }, + + /** + * Find all